습관처럼

운영체제 - PCB(Process Control Block)란? 본문

CS/OS

운영체제 - PCB(Process Control Block)란?

dev.wookii 2020. 3. 2. 19:24

PCB란?

  • 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.
  • 프로세스 상태 관리와 문맥교환(Context Switching)을 위해 필요하다.
  • PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.

자, 여러분 운영체제는 하드웨어가 효율적으로 동작할 수 있도록 관리해주는 결국 소프트웨어인 프로그램입니다. 따라서 운영체제라는 프로그램이 프로세스를 하나 만들어서 실행을 하려면 그 프로세스와 관련된 데이터 구조가 당연히 있어야 할 것이고, 프로세스가 뭔지 알아야! 정말 기본적인 정보들은 어딘가에 저장이 되어 있어야 할 것 아닌가요? 그곳이 바로 PCB(Process control block)입니다.

 

"Each process is represented in the operating system by a process control block - also called a task control block. A PCB contains many pieces of information associated with a specific process."

 

예를 들어, CPU에 급한 프로세스 처리때문에 긴급 요청이 왔을 때 기존에 작업하던 프로세스를 어딘가에 임시 저장을 해놓아야 급한 애를 빨리 처리한 후에 다시 불러올 수 있겠죠. 즉 프로세스 관한 정보들을 저장할 어딘가의 공간이 필요해요. 그것이 PCB입니다~

즉, PCB란 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓을 수 있는 저장 장소를 뜻합니다

 

그렇다면 쉽게 생각해봅시다. 우리가 하고있던 일을 잠시 정지시키고 급한 우선순위 일을 먼저 처리하려고 한다면, 우리가 기억할 수 있도록 하는 모든 정보를 저장해 놓아야 하죠? 그리하여 어떤 CPU, Process 부터 프로세스 상태, 스케줄링까지 다시 시작할 수 있도록 도와주는 모든 정보를 불러와야 할것입니다. 그렇다면 PCB에 저장되는 종류는 무엇이 있는지 알아보겠습니다.

 

PCB에 포함되는 정보

  • (1) Process ID : 프로세스를 구분하는 ID
  • (2) Process State : 각 State 들의 상태를 저장한다.
  • (3) Program Counter : 다음 Instruction주소를 저장하는 카운터. CPU는 이 값을 통해 Process 의 Instruction 을 수행한다.
  • (4) Register : Accumulator, CPU Register, General Register 등을 포함한다.
  • (5) CPU Scheduling Information : 우선 순위, 최종 실행시간, CPU 점유시간 등이 포함(***)된다.
  • (6) Memory Information : 해당 프로세스 주소공간(lower bound ~ upper bound) 정보를 저장.
  • (7) Process Information(페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등)
  • (8) Device I/O Status(프로세스에 할당된 입출력 장치 목록, 열린 팔린 목록 등)
  • (9) Pointer : 부모/자식 프로세스에 대한 포인터, 자원에 대한 포인터
  • (10) Open File List : 프로세스를 위해 열려있는 파일의 리스트

Context Switching에서의 PCB 역할

CPU내의 프로세스가 작동되는 과정을 자세히 살펴볼게요~ 이 과정에서 운영체제 선행과정으로 필요한 컴퓨터 구조의 개념이 들어갑니다. 컴퓨터 구조에서 레지스터의 개념을 모르시는 분은 공부하고 오시면 이해가 수월해ㅈ요 

 

프로그램 카운터, 스택 포인터, 레지스터 이런 것들이 CPU안에 있는 레지스터였던 것까지는 기억하고 계시나요? 이렇게 레지스터들이 CPU 자체에 있으니 running 상태의 프로세스 정보는 CPU 내부, 즉 레지스터에서 저장하고 있습니다.

 

process P0가 지금 수행이 되고 있다고 가정하면!!. CPU에 있는 레지스터들은 P0의 상태로 수행이 되고 있습니다. 그러다 interrupt가 걸리고 운영체제가 수행이 되야 하지만 인터럽트가 걸리면 지금 수행되는 것을 먼저 저장합니다.

 

프로세스 상태에서 배웠듯이, waiting 상태로 변하게 되면 CPU가 다른 프로세스를 running으로 바꿔 올려버려요.

(인터럽트가 걸렸다는 것은 지금 내가 running하는 프로세스를 잠깐 내려놓고 다른 프로세스를 실행하는 동안 기다리게 한다는 뜻인거죠~)

 

레지스터의 저장 값이 앞으로 수행할 프로세스에 관한 정보로 교체될 거예요. CPU는 레지스터에 있는 정보를 보고 처리작업을 수행하니까 당연히 새 프로세스 실행을 위해 기존 프로세스 정보는 다른데로 가야겠죠? 즉 CPU의 레지스터들의 값이 다른 것로 바뀌기 전에 어딘가에 저장을 하고 나가야해요.

 

이때 PCB에 CPU에서 수행되던 레지스터 값들이 저장이 됩니다. 내가 수행하던 프로세스가 어디까지 수행됐는지(Program Counter), Stack pointer의 위치가 어디인지, 그 외 Register들의 집합 정보들을 잠시 저장한다는거죠. 어디에? PCB에!!!!!!! 하지만 PCB는 저장단위의 개념이고 저장소가 아닌점을 인지해야합니다!!

 

그림을 보면 executing되다가 다른 프로세스 P1을 수행시키기 위해 PCB0에다가 P0프로세스 정보를 저장하네요. 그리고 레지스터에 PCB1에 저장되어있던 process 1 정보를 가져와 P1을 수행시킵니다.

 

이런 저장 공간을 PCB라고 하고 사실 이렇게 수행중인 프로세스를 변경할 때 레지스터에 프로세스의 정보가 바뀌는 것Context Switching (문맥교환)이라고 합니다.

 

즉, Context Switching 문맥교환 이란 CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정을 말합니다. 프로세스가 준비 -> 실행, 실행 -> 준비, 실행 -> 대기 등으로 상태 변경될 때 발생합니다.

 

출처: https://jins-dev.tistory.com/entry/PCBProcess-Control-Block-개념-정리 , https://jhnyang.tistory.com/33

'CS > OS' 카테고리의 다른 글

운영체제 - 운영체제 종류와 목적  (0) 2020.03.03