3-2.[os] 프로세스 제어 블록과 문맥 교환
프로세스 제어 블록
- Process Control Block (PCB), Task Control Block (TCB)
- 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료 구조
프로세스 제어 블록 구성
포인터: 준비 상태나 대기 상태는 큐로 운영되는데,프로세스 제어 블록을 연결하여 준비 상태나 대기 상태의 큐를 구현할 때 포인터를 사용
프로세스 상태: 프로세스가 현재 어떤 상태에 있는지 나타냄 (생성, 준비,실행,대기, 보류 준비, 보류 대기)
프로세스 구분자: 운영체제 내에 있는 여러 프로세스를 구별하기 위한 구분자
프로그램 카운터: 다음에 실행될 명령어의 위치
프로세스 우선순위: 우선순위에 따라 프로세스 제어 블록들이 여러 줄로 서 있다
각종 레지스터 정보: 프로세스가실행되는중에 사용하던 레지스터(누산기, 색인 레지스터, 스택 포인터)
메모리 관리 정보: 프로세스가 메모리의 어디에 있는지 나타내는 메모리 위치 정보,메모리 보호를 위해 사용하는 경계 레지스터 값과 한계 레지스터 값
할당된 자원 정보: 프로세스를 실행하기 위해 사용하는 입출력 자원이나 오픈 파일 등에 대한 정보, 어떤 프로세스가 하드디스크에 저장된 파일을 열어서 작업하면 그 파일에 대한 정보
계정 정보: 계정 번호, CPU 할당 시간, CPU 사용 시간 등
부모 프로세스 구분자와 자식 프로세스 구분자: ppiD (Parent PID), child process (Child PID)
포인터의 역할
- 입출력이 완료되기를 기다리는 프로세스는 대기 상태로 모인다
- (하나로 모아놓으면 해당 프로세스를 찾기 위해 대기 상태의 모든 프로세스를 뒤져야 한다)
- 대기 상태에는 같은 입출력을 요구한 프로세스끼리 모아놓는다
문맥 교환
- CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업
- 두 프로세스 제어 블록의 내용이 변경된다
- 두 프로세스의 프로세스 제어 블록을 교환하는 작업
- P1이 주어진 시간 다 써서 타임아웃이 되면 P1의 상태를 프로세스 제어 블록(PCB)에 현재까지의 작업 결과를 저장하고 P1는 준비 상태로 쫓겨난다
- P2가 준비 상태에서 실행 상태로 바뀌면서 CPU의 레지스터가 P2의 PCB로 채워져서 다음 작업을 한다
문맥 교환이 일어나는 경우:
- 한 프로세스가 자신에게 주어진 시간을 다 사용하면
- 주어진 메모리 공간을 넘어가려 한다면 (경계 레지스터의 범위를 벗어난다면)