# PCB
정의
Process Control Block은 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터를 말합니다.
- 프로세스 제어 블록으로도 불립니다.
- 프로세스가 생성되면 운영체제는 해당 프로세스를 위한 PCB를 생성합니다.
- 스택, 힙 등의 구조를 기반으로 메모리가 할당될 때 PCB에 저장되어 관리되며, 프로세스의 중요한 정보를 포함하고 있기에 커널 스택의 가장 앞부분에서 관리됩니다.
# PCB의 구조
- 프로세스 스케줄링 상태
- '준비', '일시중단' 프로세스가 CPU에 대한 소유권을 얻은 이후 또는 이후 경과된 시간돠 같은 스케줄링 정보
- 프로세스 ID
- 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
- 프로세스 권한
- 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
- 프로그램 카운터
- 프로세스에서 실행해야할 다음 명령어의 주소에 대한 초인터
- CPU 레지스터
- 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
- CPU 스케줄링 정보
- CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
- 계정 정보
- 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보
- I/O 상태정보
- 프로세스에 할당된 I/O 디바이스 목록
# 컨텍스트 스위칭
컨텍스트 스위칭은 PCB를 교환하는 과정을 말합니다.
프로세스에 할당된 시간이 끝나거나 인터럽트에 의해 발생합니다.
어떠한 시점에서 실행되고 있는 프로세스는 단 한개이기에, 동시 실행처럼 보이는 것은 컨텍스트 스위칭이 아주 빠른 속도로 실행되기 때문입니다.
그러나 멀티 코어는 실제로 동시 실행이긴 하지만, 싱글코어 기준으로.....
- P0 프로세스가 인터럽트되면서 PCB0에 P0 프로세스의 상태 정보를 저장합니다.
- 다음 수행할 P1 프로세스의 PCB1에서 P1 프로세스의 상태 정보가 CPU에 재로딩됩니다.
- P1 프로세스를 일정 시간 수행합니다.
- P1 프로세스가 인터럽트되면서 PCB1에 P1 프로세스의 상태 정보를 저장합니다.
- 다음 수행할 P0 프로세스의 PCB0에서 P0 프로세스의 상태 정보가 CPU에 재로딩됩니다.
- P0 프로세스를 일정 시간 수행합니다.
- 컨텍스트 스위칭이 일어날 때 유휴시간(idle)이 발생힙니다.
# 캐시 미스
- 컨텍스트 스위칭이 일어날 때 프로세스가 가지고 있는 메모리 주소가 그대로 있으면 잘못된 주소 변환이 생기므로 캐시 클리어 과정이 필요합니다.
- 이때 캐시미스가 발생합니다.
# 쓰레드에서의 컨텍스트 스위칭
- 스레드는 스택 영역을 제외한 모든 메모리를 공유하기에 스레드 컨텍스트 스위칭의 경우 비용이 더 적고 시간 소모가 적습니다.