운영체제 - 프로세스 관리

pa324·2019년 12월 1일
0

프로세스의 개념

  • 프로세스란 수행중인 플그램을 뜻한다.
  • 디스크에 실행 파일 형태로 존재하던 프로그램이 메모리에 올라가서 수행되기 시작하면 생명력을 갖는 프로세스가 된다.

프로세스 문맥(context)

  • 프로세스의 문맥(context)는 프로세스가 현재 어떤 상태에서 수행되고 있는지를 정확히 규명하기 위해 필요한 정보를 의미한다.
  • 시분할 시스템(time sharing system)에서는 타이머 인터럽트에 의해 짧은 시간동안 cpu를 사용한 후 cpu를 선점당했다가 다시 획득하는 식으로 cpu 관리가 이루어 진다. 따라서, 명령의 수행을 재개하는 시점이 되면 cpu 선점당하기 전 시점에 어느 부분까지 명령을 수행했는지에 대한 상태정보를 재현할 필요가 있다.
  • 정확한 재현을 위해 필요한 정보가 문맥(context)이다.
  • 프로세스의 주소공간(코드,데이터,스택)을 비로새 레지스터에 어떤 값을 가지고 있었는지, 시스템 콜 등을 통해 커널에서 수행한 일의 상태, 커널이 관리하고 있는 pcb 정보등을 포함한다.

프로세스 context 종류

하드웨어 context
  • cpu의 수행 상태를 나타내는 것으로 프로그램 카운터 값과 각종 레지스터에 저장하고 있는 값
프로세스 주소 공간
  • 프로세스는 코드,데이터,스택으로 구성되는 자신만의 독자적인 주소 공간을 가지고 있는데, 주소 공간은 프로세스의 context를 결정짓는 중요한 요소 중 하나이다.
커널 상의 context
  • 프로그램이 수행되어 프로세스가 되면 운영 체제는 프로세스를 관리하기 위한 자료구조를 유지한다. PCB, 커널스택이 이에 해당되면 context를 구성하는 중요 요소

프로세스의 상태

image.png

실행 상태(running state)

  • 프로세스가 cpu를 보유하고 기계어 명령을 실행하고 있는 상태
  • 일반적인 컴퓨터 시스템에서는, cpu가 한개 이므로 running state인 프로세스는 매 시점 1개만 존재한다.

준비 상태(ready state)

  • cpu만 보유하면 당장 명령을 실행할 수 있지만 cpu를 할당받지 못한 상태를 가리킨다.

봉쇄 상태(block state)

  • 프로세스에게 cpu를 주어도 당장 명령을 실행할 수 없는 상태
    - I/O작업중인 프로세스

시작 상태(new)

  • 프로세스가 생성 중
  • 프로세스를 위한 각종 자료 구조는 생성되었지만 아직 메모리 획득을 승인받지 못한 상태

완료 상태(terminated)

  • 프로세스가 완료 됨
  • 프로세스가 종료되었으나 운영 체제가 그 프로세스와 관련된 자료 구조를 완전히 정리하지 못한 상태

프로세스 문맥 교환 (process context switch)

image.png

  • 실행시킬 프로세스를 변경하기 위해 원래 수행중이던 프로세스는 준비 상태로 변하고 새롭게cpu를 할당받은 프로세스가 실행 상태가 된다. 이처럼 실행시킬 프로세스를 변경하기 위해 원래 수행중이던 프로세스의 context를 저장하고 새로운 프로세스의 context를 세팅하는 과정을 context switch이라고 한다.
  • 시분할 시스템에서는 타이머 인터럽트에 의해서 context switch이 발생하고, I/O system call 등으로 block state로 바뀌는경우에도 다른 프로세스로 cpu 제어권이 넘어가기 때문에 context switch가 발생한다.
  • ready state 중에서 cpu를 할당받을 프로세스를 선택한 후 실제로 cpu의 제어권을 넘겨받는 과정을 cpu dispatch라고 한다.
  • 프로세스가 실행 상태일 때 시스템 콜이나 인터럽트가 발생하면 cpu의 제어권이 운영체제에게 넘어가면서 운영체제 커널 코드가 실행되는데, 이 경우에는 context switch라고 하지 않는다. (하나의 프로세스에서 사용자 모드에서 커널 모드로 변경된 것임)
  • 모드변경에 비해 context switch는 오버헤드가 크다.
    - 시분할 시스템에서 cpu 할당 시간을 아주 작게 세팅해 문맥 교환이 빈번하게 발생하면 오버헤드가 상당히 커진다. 반대로, 너무 크게 하면 시분할 시스템의 의미가 퇴색하게 되므로 적절한 시간을 설정하는 것이 중요

프로세스 제어 블록 (PCB)

image.png

정의

PCB는 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스당 유지하는 정보들을 담은 커널 내의 자료 구조

구성요소

  • 프로세스의 상태 : cpu를 할당해도 되는지 여부를 결정하기 위해 필요
  • 프로그램 카운터 값 : 다음에 수행할 명령의 위치를 가리킴
  • cpu 레지스터 : cpu 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지 나타냄
  • cpu 스케줄링 정보 : 프로세스의 cpu 스케중링과 메모리 할당을 위해 필요한 정보
  • 메모리 관리 정보 : 프로세스의 cpu 스케중링과 메모리 할당을 위해 필요한 정보
  • 자원 사용 정보:ㅣ 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
  • 입출력 상태 정보 : 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

프로세스 스케줄링 큐

 프로세스 관리를 위해 큐(Queue)가 존재한다. 큐는 각 프로세스의 PCB를 연결 리스트 형태로 줄 세우게 되며 포인터를 사용해 순서를 정하게 된다. 프로세스가 cpu를 할당받고 코드를 수행중이다가 I/O요청이 발생하면 장치 큐에 가서 중르 서게 된다. 장치 큐에 속한 프로세스들은 block state에 있다가 해당 장치의 서비스를 받고나서 장치 컨트롤러가 인터럽트를 발생시키면 ready state로 변경되고 ready queue로 이동하게 된다.

작업 큐 (job queue)

image.png

  • 시스템 내의 모든 프로세스를 관리하기 위한 큐로 프로세스의 상태와 무관하게 현재 시스템 내에 있는 모든 프로세스가 작업 큐에 속한다.
  • 작업큐에 있다고 무조건 메모리를 가지고 있는 것은 아니다.

준비 큐 (ready queue)

image.png

  • cpu를 할당받고 실행되기 위해 기다리고 있는 프로세스의 집합

장치 큐 (device queue)

image.png

  • 각각의 장치마다 서비스를 기다리며 줄 서 있는 프로세스의 큐를 말한다.
  • 장치 큐는 각각의 자원마다 큐가 하나씩 존재

스케줄러

  • 스케줄러란 어떤 프로세스에게 자원을 할당할지를 결정하는 운영 체제 커널의 모듈을 지칭

프로세스의 생성

  • 시스템이 부팅된 후 최초의 프로세스는 운영체제가 직접 생성하지만 그 다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성하게 된다.
  • 프로세스를 생성한 프로세스를 부모 프로세스라고 하고 새롭게 생성된 프로세스를 자식 프로세스라고 한다.
  • 자식 프로세스가 모두 종료된 후에아 부모 프로세스가 종료될 수 있다.

UNIX 프로세스 생성 절차

  • 유닉스에서 fork() 시스템 콜을 통해 새로운 프로세스를 생성할 수 있다.
  • fork() 시스템 콜은 부모 프로세스의 내용을 그대로 복제 생성 (프로세스 id 제외)
  • 부모,자식 프로세스는 주소 공가능ㄹ 따로 갖게 되지만 주소 공간 내에는 동일한 내용을 가지게 된다.
  • fork()를 통해 생성된 자식 프로세스는 exec() 시스템 콜을 통해 새로운 프로그램으로 주소공간을 덮어 씌울 수 있다.
  • 자식 프로세스는 부모 프로세스의 처음부터 수행을 시작하는 것이 아니라 부모 프로세스가 현재 수행한 시점부터 수행하게 된다(PCB 그대로 복사)
  • fork()의 결과값으로 원본에는 양수를 주고, 복사본에는 0을 줘서 구분 가능하다.
  • fork()는 사실상 두 프로세스 모두 동일한 코드의 내용을 수해앟는 것에 불과하다. 따라서, 자식 프로세스는 부모와는 다른 독자적인 프로그램을 수행시킬 수 있는 메커니즘이 필요한데 이를 exec()시스템콜이 지원
    - exec()시스템 콜을 사용하면 지금깢 ㅣ수행했더 ㄴ상태를 잊어버리고 그 주소 공간을 완전히 새로운 프로그램으로 덮어 씌운 후 새로운 프로그램의 첫 부분부터 실행

    프로세스 간의 협력

  • 프로세스는 각자 자신만의 독립적인 주소 공간을 가지고 수행되며 프로세스가 다른 프로세스의 주소 공간을 참조하는 것은 허용되지 않는다. 하지만, 독립적인 프로세스들이 서로 협력할 때 업무의 효율성이 증진될 수 있다. 운영체제는 프로세스간의 협력 메커니즘을 제공
  • IPC(Inter process Communication) - 하나의 컴퓨터 안에 실행중인 서로 다른 프로세스간에 발생하는 통신
    - 공유 데이터를 서로 다른 두 프로세스가 사용하게 되므로 동기화를 보장해야 한다
    - 메시지 전달, 공유 메모리 방식이 있다.
    - 메시지 전달 방식은 프로세스 간에 공유 변수를 일체 사용하지 않고 메시지를 주고 받으면서 통신 (두 프로세스가 주소 공간이 다르므로 커널을 통해 send,receive 한다)
    - 운영체제는 공유 메모리를 사용하는 시스템 콜을 지원해, 서로 다른 프로세스들이 그들의 주소 공간 중 일부를 공유할 수 있도록 한다. (동기화 필수)
    참고자료

image.png

image.png

[참고자료]

profile
안녕하세요

0개의 댓글