1. PCB
PCB는 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료구조로, TCB(Task Control Block)이라고도 한다. 모든 프로세스는 PCB를 가지며, PCB는 프로세스 생성 시 만들어져서 프로세스가 실행을 완료하면 폐기된다.
구성
- 포인터: PCB의 첫 번째 블록에 저장된다. 준비 상태나 대기 상태는 큐로 운영되는데, PCB를 연결하여 준비 상태나 대기 상태의 큐를 구현할 때 포인터를 사용한다.
- 프로세스 상태: 생성, 준비, 실행, 대기, 보류 준비, 보류 대기 등이 있다. 즉 프로세스가 현재 어떤 상태에 있는지 나타내며, PCB의 두 번째 블록에 저장된다.
- 프로세스 구분자: 운영체제 내에 있는 여러 프로세스를 구별하기 위한 구분자를 저장한다.
- 프로그램 카운터: 다음에 실행될 명령어의 위치를 가리키는 프로그램 카운터의 값을 저장한다.
- 프로세스 우선순위: 프로세스의 우선순위를 저장한다. 이를 바탕으로 CPU 스케줄러는 준비 상태의 프로세스 중 높은 우선순위를 실행 상태로 옮긴다.
- 각종 레지스터 정보: 프로세스가 실행되는 중에 사용하던 레지스터, 예를 들어 MAR, MBR, PC, IR ,누산기, 색인 레지스터, 스택 포인터와 같은 레지스터의 값이 저장된다. 이전에 사용했던 레지스터의 값이 있어야 다음에 실행할 때 문제가 없기 때문이다.
- 메모리 관리 정보: 프로세스가 메모리의 어디에 있는지에 대한 정보, 메모리 보호를 위해 사용하는 경계 레지스터 값과 한계 레지스터 값 등이 저장된다.
- 할당된 자원 정보: 프로세스를 실행하기 위해 사용하는 입출력 자원이나 오픈 파일 등에 대한 정보를 말한다.
- 계정 정보: 계정 번호, CPU 할당 시간, CPU 사용 시간 등이 저장된다.
- PPID, CPID: 부모 프로세스를 가리키는 PPID와 자식 프로세스를 가리키는 CPID 정보가 저장된다.
시스템 내의 다양한 종류의 입출력 장치가 있기 때문에 대기 상태로 모이는 프로세스도 다양하다. 이러한 상황을 해결하기 위해 대기 상태에는 같은 입출력을 요구한 프로세스끼리 모아놓는다. 대기 상태에서 같은 입출력을 기다리는 프로세스의 PCB는 동일한 입출력 큐에 모여 있는데 이를 대기 큐라고 한다. 그리고 각 PCB는 포인터에 의해 연결된다.
2. 문맥 교환
문맥 교환(Context switching): CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업이다. 이때 두 PCB의 내용이 변경된다. 실행 상태에서 나가는 PCB에는 현재 작업 상태를 저장하고, 반대로 실행 상태로 들어오는 PCB의 내용으로 CPU가 세팅된다.
절차
실행 상태에 있는 프로세스가 타임아웃이 되면 PCB에 현재까지 작업 결과가 저장되고 프로세스는 준비 상태로 쫓겨난다. 준비 상태에 있던 다음 프로세스가 실행 상태로 가면 CPU의 레지스터가 해당 프로세스의 PCB 값으로 채워져 다음 작업을 하게 된다.
Uploaded by Notion2Tistory v1.1.0