운영체제

PCB(Process Control Block)는 무엇일까? 어디서 쓰나?

Jay x 2 2020. 4. 10. 16:37
728x90
반응형

프로세스는 어떤 식으로 자신을 저장하며 CPU가 이런 프로세스를 제어하는 방법이 궁금했다.

각각의 프로세스는 PCB라는 프로세스 컨트롤 블록을 가지고 위에 일을 할 수 있다고 배우게 되었다. 그렇다면 PCB에는 어떤 것들이 있으며 어떻게 쓰이는지 정리해 보겠다.

 

PCB(Process Control Block)이란?

프로세스 컨트롤 블록. 즉, 프로세스를 관리하기 위해서 다양한 정보를 저장해 두고 이를 가지고 제어를 할 수 있도록 하는 운영체제 커널의 자료 구조이다.

"운영체제가 프로세스를 표현했다." 라고 말할 수 있다.

프로세스 컨트롤 블록

[ 구성 ]

 

1. Process Id : pid값을 저장. 즉 프로세스의 특정 번호를 저장한다.

c++>> #include<sys/types.h>에 pid_t 라는 데이터 타입에 pid값을 저장할 수 있다고 배웠다.

2. Process State : 현재 프로세스가 어떤 상태인지 기록해둔다.

[ 상태의 종류 ]

● Create : 프로세스가 생성되는 상태

● Terminate : 프로세스가 종료되는 상태

● Running : 프로세스가 CPU 할당을 받아 명령어들을 실행하는 상태

● Ready :  CPU를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태로, CPU가 할당 되기를 Ready 큐에서 기다리는 상태(우선순위가 존재한다.)

● Waiting : sleep , block 등 이라고 봐도 무방하다. 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태

3. Program Counter(프로그램 계수기) : 프로세스의 다음 실행할 명령어의 주소를 저장해둔다.

이유는 여러가지 event나 interrupt가 발생했을 때 다시 원래 수행 중인 프로세스로 돌아가기 위해서이다.

4. CPU register 와 general register

CPU에서 사용한 레지스터의 값을 잃지 않기 위해서 PCB에 레지스터 값을 저장하고 다시 프로세스가 호출되었을 때 사용하기 위해서 이를 저장한다.

5. CPU 스케쥴링 정보 : priority와 최종 실행시각, CPU 점유시간 등을 저장해둔다.

스케쥴링에 대한 자료를 하나더 추가하자면

CPU 스케줄링의 결정 시점은 다음과 같은 프로세스의 상태 변화가 있을 때이다.

  1. Running → Waiting
  2. Running → Ready
  3. Waiting → Ready
  4. Running → Terminate

6. Memory 관리 정보 

프로세스의 현재 주소와 주소 공간을 가지고 있다.

7. 프로세스 계정 정보 

현재 프로세스의 부모 프로세스가 어떤 것인지 , 스케쥴링 큐 포인터(Ready 큐 다음에 있는 프로세스를 가리키는 포인터) 등이 있다.

8. I/O State 정보 

현재 프로세스에 할당된 입출력 장치 목록과 오픈 파일 목록 등을 알려준다.

 

이렇게 PCB는 프로세스의 중요한 정보를 가지고 있어 유저 모드에서 접근할 수 없게 되어있고 커널 영역에 존재한다.

 

역할

PCB를 통해서 프로세스는 해당 정보를 커널 영역에 저장하는데 이유는 프로세스마다 CPU 퀀텀이 시분할로 할당되는데 이 시간을 넘기거나 프로세스의 우선순위와 스케쥴링 알고리즘 등에 의해 프로세스 상태 전이가 일어날 때 CPU는 모든 프로세스의 레지스터 값들과 해당 프로세스의 위치, 이 프로세스가 어떤 프로세스인지 구별하지 않는다. 따라서 이를 구별하기 위해서 운영체제는 커널 영역에 PCB라는 자료구조를 이용하여 프로세스를 체계적으로 관리하기 위해서 이용한다.

 

반응형