Skip to main content

[OS] Chapter 5. 프로세스 관리

운영체제와 정보기술의 원리 강의를 듣고 공부한 노트입니다.




프로세스 #

  • 프로세스(process)

    • 실행 중인 프로그램(program in execution)을 뜻한다.
  • 프로세스의 문맥(context)

    • 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보이다.
    • 프로세스가 CPU를 다시 획득해서 명령 수행을 재개하려면 문맥이 필요하다.
종류 내용
프로세스의 주소 공간 코드, 데이터, 스택으로 구성된 자신만의 독자적 주소 공간
하드웨어 문맥 프로그램 카운터값
각종 레지스터에 저장하고 있는 값
커널 상의 문맥 PCB
커널 스택



프로세스의 상태 #

  • 프로세스는 항상 다음 중 어느 한 상태에 머물러 있다.
상태 설명
준비
(ready)
메모리를 획득해서, CPU만 보유하면 당장 명령을 실행할 수 있는 상태
실행
(running)
CPU를 보유하고 기계어 명령을 실행하고 있는 상태
봉쇄
(blocked, wait, sleep)
CPU를 할당받더라도 당장 명령을 실행할 수 없는 상태
(예: 입출력 작업 진행 중)
시작
(new)
프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만 아직 메모리 획득을 승인받지 못한 상태
완료
(terminated)
프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태
중지
(suspended, stopped)
외부적인 이유로 프로세스의 수행이 정지된 상태
메모리를 조금도 보유하지 않고 디스크에 통째로 스왑 아웃된 상태로 존재한다.
(이어서…)



프로세스 제어블록 #

PCB의 구조

  • 프로세스 제어블록(Process Control Block; PCB)
    • 운영체제가 프로세스들을 관리하기 위해 프로세스의 정보를 담는 커널 내의 자료구조이다.
종류 내용
운영체제가 관리상 사용하는 정보 프로세스 번호 : 프로세스 고유 번호
프로세스 상태 : 준비, 실행, 봉쇄 등의 상태
스케줄링 정보, 우선순위 : CPU 스케줄링을 위해
CPU 수행 관련 하드웨어 값 프로그램 카운터 값 : 다음에 수행할 명령의 위치
레지스터 값 : CPU 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지
메모리 관련 코드, 데이터, 스택의 위치 정보 : 메모리 할당을 위해
파일 관련 프로세스가 오픈한 파일 정보



문맥 교환 #

  • 문맥 교환(context switch)
    • 하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 것이다.
    • 이전의 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업이 이루어진다.
    • 한 프로세스의 문맥은 그 프로세스의 프로세스 제어 블록에 기록되어 있다.
    • 문맥 교환에 소요되는 시간은 오버헤드이기 때문에 적절한 타이머의 CPU 할당 시간을 정하는 것이 중요하겠다.

  • 준비 상태에 있는 프로세스가 실행 상태로 되면서 CPU의 제어권이 넘어가는 과정을 CPU 디스패치(dispatch) 라고 한다.

  • 문맥교환이 발생하는 경우
    • 타이머 인터럽트 발생
    • 실행 중이던 프로세스의 입출력 요청
    • 다른 조건을 충족하지 못해 CPU를 회수당하고 봉쇄 상태가 되는 경우

  • 문맥교환이 아닌 경우
    • 사용자 프로세스 A의 인터럽트 또는 시스템 콜에 의해 사용자 모드에서 커널 모드로 실행 모드가 바뀐다. 커널 모드에서 인터럽트 처리루틴 또는 시스템 콜 함수를 실행한다. 그리고 다시 문맥 교환 없이 사용자 프로세스 A의 사용자 모드로 되돌아 온다.



상태 관리 큐들 #

  • 커널의 주소 영역 중 데이터 영역에 다양한 큐(queue)를 두어 프로세스들의 상태를 관리한다.

이름 설명
작업 큐
(job queue)
시스템 내의 모든 프로세스를 관리하기 위한 큐
가장 넓은 개념이다.
준비 큐
(ready queue)
CPU를 할당 받기 위해 준비 상태에 있는 프로세스들을 줄세우기 위한 큐
장치 큐
(device queue)
특정 자원을 기다리는 프로세스들을 줄 세우기 위해 자원별로 있는 큐
(예: 디스크 입출력 서비스를 받기 위해 기다리는 프로세스들)
자원 큐 소프트웨어 자원을 기다리는 경우
(예: 공유 데이터에 대한 접근 제어를 위한 큐)



스케줄러들 #

프로세스 상태 변화도

  • 스케줄러(scheduler)
    • 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드이다.

스케줄러 설명
장기 스케줄러
= 작업 스케줄러 (job scheduler)
어떤 프로세스를 준비 큐에 진입시킬지 결정한다.
즉, 프로세스에게 메모리를 할당하는 문제에 관여하므로, 메모리에 동시에 올라가 있는 프로세스의 수(degree of multiprogramming)를 조절하는 역할을 한다.
현대의 시분할 시스템에서는 장기 스케줄러가 없고, 실행되면 무조건 ready 상태로 된다. 따라서 degree of multiprogramming은 중기 스케줄러가 대신한다.
단기 스케줄러
= CPU 스케줄러
어떤 프로세스를 실행 상태로 만들지 결정한다.
즉, 프로세스에게 CPU를 할당하는 문제에 관여한다.
시분할 시스템에서는 타이머 인터럽트가 발생하면 단기 스케줄러가 호출된다.
중기 스케줄러
= swapper
여유공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫒아낸다. (스왑 아웃; swap out)
0순위로 스왑 아웃되는 프로세스는 봉쇄 상태에 있는 프로세스들이다.

  • (이어서…) 중기 스케줄러의 등장으로 프로세스의 상태가 추가된다.
  • 중지(suspended, stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태이다.
    • 메모리를 조금도 보유하지 않고 디스크에 통째로 스왑 아웃된 상태로 존재한다.
    • 예: 사용자가 프로그램을 일시 정지한 경우, 메모리에 너무 많은 프로세스가 올라와 있어서 시스템이 프로세스를 잠시 중단시킨 경우
    • 중지준비(suspended ready)
      • 준비 상태에 있던 프로세스가 중기 스케줄러에 의해 디스크로 스왑 아웃되었을 때
    • 중지봉쇄(suspended block)
      • 봉쇄 상태에 있던 프로세스가 중기 스케줄러에 의해 디스크로 스왑 아웃되었을 때
    • 봉쇄와 중지의 차이점
      • 봉쇄: 자신이 요청한 event가 만족되면 Ready 상태가 된다.
      • 중지: 외부에서 resume해주어야 Active 된다.



스레드 #

  • 스레드(thread; lightweight process)
    • CPU를 수행하는 단위

스레드가 가지고 있는 것 #

구분 내용
스레드가 독자적으로 갖고 있는 것들
= CPU 수행을 위한 것들
프로그램 카운터 값
레지스터 값
스택
스레드가 동료 스레드와 공유하는 부분 코드 영역
데이터 영역
운영체제 자원들



다중 스레드의 장점 #

  • 응답성(Responsiveness)
    • 하나의 스레드가 봉쇄 상태인 동안(예: 웹 페이지에서 네트워크를 통해 이미지를 불러온다)에도 동일한 프로세스 내 다른 스레드가 실행(예: 이미지는 나중에 출력하고, 나머지 웹 페이지를 화면에 출력한다)되어 작업을 처리할 수 있다.
  • 자원 공유(Resource sharing)
    • 하나의 프로세스 내에서 CPU 수행 단위만 여러개(스레드를 여러개)두게 되면 서로 자원을 공유하므로 효율적으로 사용할 수 있다.
  • 경제성(Economy)
    • 프로세스를 하나 만드는 것보다 스레드를 하나 만드는 것이 오버헤드가 적다.
    • 프로세스 간 문맥교환보다 스레드 간 문맥 교환이 오버헤드가 적다.
  • 멀티 프로세서 환경에서의 활용(Utilization of Multi Processor Architectures)
    • CPU가 여러개인 컴퓨터에서는 병렬성을 높일 수 있다.



스레드의 구현 #

  • 커널의 지원을 받는 스레드(kernel level thread)
    • 운영체제 커널이 스레드가 여러개 있다는 사실을 알고 있다.
  • 라이브러리의 지원을 받는 스레드(user level thread)
    • 운영체제가 스레드의 존재를 모르고, 사용자의 프로세스가 직접 스레드를 관리한다.
  • 실시간(real-time) 기능을 지원하는 스레드



프로세스의 생성 #

  • 프로세스의 생성 (process creation)
    • 시스템이 부팅된 후 최초의 프로세스는 운영체제가 직접 생성하지만, 그 다음 부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성한다.
    • 각각을 부모 프로세스, 자식 프로세스라고 하며, 트리와 같은 계층 구조을 형성하게 된다.

  • 생성된 프로세스가 자원을 획득하는 방법
    • 경우 1. 운영체제로 부터 직접 할당받는다.
    • 경우 2. 부모 프로세스와 자원을 공유한다. (모든 자원을 or 일부를 or 공유하지 않음)
  • 생성된 프로세스가 수행(execution)되는 방법
    • 경우 1. 부모와 자식이 공존하며 수행된다.
    • 경우 2. 자식이 종료(terminate)될 때까지 부모 프로세스가 기다린다(wait).



프로세스와 관련된 시스템 콜들 #

  • fork() 시스템 콜
    • 프로세스 ID를 제외한 부모 프로세스의 모든 내용을 그대로 복제해서 자식 프로세스를 생성한다.
    • 프로그램 카운터 값도 복제되므로, 부모 프로세스가 실행한 그 다음 위치 부터 실행하게 된다.
    • 자식 프로세스는 자신만의 독자적인 주소 공간을 갖지만, 처음에 내용은 부모 프로세스의 내용을 그대로 복사해서 생성한다.
    • 구분하는 법: fork() 함수의 결괏값이 양수이면 부모 프로세스이고, 0이면 복제된 자식 프로세스이다.
  • exec() 시스템 콜
    • 프로세스의 주소 공간을 완전히 새로운 프로그램으로 덮어씌운 후 새로운 프로그램의 첫 부분부터 다시 실행을 시작하도록 한다.
  • wait() 시스템 콜
    • 자식 프로세스가 종료되기를 기다리며 부모 프로세스가 봉쇄 상태에 머무르도록 한다.
    • 부모 프로세스와 자식 프로세스 간의 동기화(synchronization)가 가능해진다.

  • 프로세스가 종료되는 방법
    • 경우 1. 자발적 종료
      • exec() 시스템 콜로 운영체제에게 자신이 종료됨을 알린다. 프로그래머가 명시적으로 호출하지 않아도 컴파일러가 자동으로 삽입해서 프로세스의 종료 직전에 호출한다.
    • 경우 2. 비자발적 종료
      • abort() 시스템 콜로 부모 프로세스가 자식 프로세스의 수행을 강제로 종료 시킨다.
        • (1) 자식 프로세스가 한계치를 넘어서는 자원을 요구할 때
        • (2) 자식 프로세스의 작업이 더 이상 필요하지 않을 때
        • (3) 부모 프로세스가 종료될 때. 부모 프로세스가 종료될 경우에는 자식 프로세스들을 연쇄적으로 종료 시킨 후에야 본인이 종료될 수 있다.
      • 사용자가 키보드로 kill, break 등을 친 경우.



프로세스 간의 협력 #

  • 프로세스는 독립적인 주소 공간을 가지기 때문에 각자 독립적인 관계가 된다.
  • 하지만 경우에 따라서는 독립적인 프로세스들이 협력할 때 업무의 효율성이 증진될 수 있다.

  • 프로세스 간 협력 매커니즘 (Inter-Process Communication; IPC)
  • 1. 메시지 전달 방식(message passing)
    • 공유 데이터를 일절 사용하지 않고, 메시지를 주고받으면서 통신하는 방식이다.
    • 메시지는 시스템 콜 방식으로 운영체제의 커널에게 요청해서 주고받는다.
    • (1) 직접 통신(direct communication)
      • 통신하려는 프로세스의 이름을 명시적으로 표시한다.
      • 예: send(P, message), receive(Q, message)
    • (2) 간접 통신(indirect communication)
      • 메일박스(mail box) 또는 포트(port)를 통해 메시지를 간접적으로 전달한다.
      • 예: send(M, message), receive(M, message)
  • 2. 공유 메모리 방식(shared memory)
    • 프로세스들이 주소 공간의 일부를 공유하는 방식이다.