Process Control Block으로 운영체제가 프로세스를 제어하기 위해 정보를 저장하는 공간으로 프로세스의 상태 정보를 저장합니다. PCB는 프로세스 상태 관리와 Context Switching에 있어서 필수입니다.
이러한 PCB는 프로세스 생성 시 만들어지며 메모리에 저장됩니다. 프로세스가 생성될 때마다 고유의 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를 교환하는 것을 말합니다.
여기서 Context란 PCB에 포함되는 것들 중에서 실행 상태 정보를 특별히 가리키는 용어입니다. Context에는 프로세스나 스레드가 실행되는 데 필요한 정보들이 포함됩니다. 프로그램 카운터, 레지스터 값, 스택 포인터 등이 Context에 포함될 수 있습니다.
다시 본론으로 들어가 Context Switching이란 CPU가 현재 실행하고 있는 Task의 상태를 저장하고, 다음 진행할 Task의 상태 및 Register 값들에 대한 Context를 읽어 새로운 Task의 Context 정보로 교체하는 과정입니다. 즉 CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어서 레지스터에 적재하는 과정을 말한다.
이러한 Context Switching은 다중 프로세스 또는 다중 스레드 환경에서 CPU의 활용도를 높이고, 동시에 여러 프로세스나 스레드가 실행될 수 있도록 합니다.
Process P1이 실행되는 도중 인터럽트나 시스템 콜이 발생합니다.
PCB1에 P1의 정보를 저장하고 PCB2의 상태를 불러옵니다.
Process P2를 실행합니다.
P2가 실행되는 도중 인터럽트나 시스템 콜이 발생합니다.
PCB2에 P2의 정보를 저장하고 PCB1의 상태를 불러옵니다.
Process P1을 실행합니다.
👉🏻 프로세스가 바뀌는 과정을 Context Switching이라고 하며, 이 과정에서 프로세스가 실행되기 전까지의 기다리는 시간, 메모리를 오버헤드라고 합니다.
피드백 및 개선점은 댓글을 통해 알려주세요😊