학습 목표 
- 프로세스가 생성된 후 어떤 상태 변화를 거치는지 알아본다.
- 프로세스 제어 블록의 구성과 문맥 교환 시 동작 과정을 알아본다.
- 프로세스의 생성과 복사, 전환 과정을 알아본다.
- 스레드의 개념을 이해하고 멀티스레드 시스템의 장점을 알아본다.

     


    목차

    • 프로세스 제어 블록
    • 문맥 교환

     

     


    프로세스 제어 블록

    프로세스 제어 블록(PCB)는 프로그램이 실행되기 전 메모리에 프로그램에 관한 중요한 정보를 보관하는 자료 구조로 TCB(Task Control Block)이라고도 한다.

     

    • 모든 프로세스는 고유의 프로세스 제어 블록을 가진다.
    • 실행시 만들어지며 완료시 폐기된다.

     

    프로세스 제어 블록의 구성

     

    • 포인터
      프로세스 제어 블록 첫 번째 블록에는 포인터가 저장된다. 프로세스 제어 블록에 연결하여 준비 상태나 대기 상태 큐를 구현할 때 사용한다.
    • 프로세스 상태
      프로세스 상태에는 생성, 준비, 실행, 대기, 보류 준비, 보류 대기 등이 있다. 프로세스의 현재 상태를 나타내며 두 번째 블록에 저장된다.
    • 프로세스 구분자
      운영체제 내에 있는 여러 프로세스를 식별하기 위해 구분자를 저장한다(PID)
    • 프로그램 카운터
      다음에 실행될 명령어의 위치를 가리키는 프로그램 카운터의 값을 저장한다.
    • 프로그램 우선순위
      CPU 스케줄러가 대기 상태에 있는 프로세스를 선별할 때 우선순위를 참고하게 된다. 프로세스는 우선순위에 따른 큐로 구별되어 대기한다. 낮은 우선순위보다 높은 우선순위의 프로세스가 더 먼저, 자주 실행된다.
    • 각종 레지스터 정보
      자신이 사용하던 레지스터의 중간 값을 보관한다.
    • 메모리 관리 정보
      현재 프로세스가 메모리 어디에 위치해 있는지에 대한 위치 정보 및 경계, 한계 레지스터의 값등이 저장된다.
    • 할당된 자원 정보
      실행에 필요한 파일이나 사운드 카드에 대한 정보를 저장한다.
    • 계정 정보
      계정 번호, CPU 할당 시간, CPU 사용 시간과 같은 정보를 저장한다.
    • 부모 프로세스 구분자와 자식 프로세스 구분자
      부모 프로세스 PPID(Parent PID), 자식 프로세스 CPID(Child PID) 정보가 저장된다.

     

    포인터의 역할

    각 주변장치 별로 대기 큐를 만들어 관리한다. (복잡하게 섞여있으면 전부 뒤져서 찾아야하기 때문이다.) 여기서 입출력을 기다리는 프로세스끼리 모여있는걸 대기 큐라 한다. 이후 대기 큐에서 준비큐로 넘어간다. 준비 큐 또한 대기 큐 처럼 여러개가 있다.


     

    문맥 교환(context switching)

    문맥 교환의 의미

    문맥 교환은 CPU를 사용하던 프로세스가 나가고 새로운 프로세스에게 CPU를 넘기는 작업을 의미한다. 문맥 교환마다 각 프로세스에 맞는 프로세스 제어 블록이 교환된다.