[OS] 프로세스 PCB와 문맥교환
프로세스
프로그램과 프로세스의 비교
프로그램 은 어떤 데이터를 사용하여 어떤 작업을 할지에 대한 명령어 리스트로 이루어진 파일로, 하드디스크에 저장되어 있다. OS가 이 프로그램에 메모리를 할당하고 PCB(프로세스 제어 블록)을 만드는데, 이것이 프로세스 이다. 프로그램이 저장장치에 저장된 정적인 상태이고, 프로세스는 프로그램 실행을 위해 메모리에 올라온 동적인 상태이다.
프로세스 = 프로그램 + PCB
PCB(Process Control Block, 프로세스 제어 블록) 구성
모든 프로세스는 고유의 PCB를 가진다. 이 PCB는 프로세스 생성 시 만들어지고 프로세스가 실행을 완료하면 폐기된다.
- 포인터(첫 번째 블록): PCB를 연결하여 대기 상태의 큐를 구현할 때 포인터를 사용한다. 같은 입출력을 요구한 프로세스 끼리 모아둔다.(대기 큐)
- 프로세스 상태(두 번째 블록): 생성, 준비, 실행, 완료 등 나타냄.
- 프로세스 구분자(PID): 운영체제 내 여러 프로세스 구별하기 위한 구분자
- 프로그램 카운터: 다음에 실행될 명령어의 위치를 가리키는 PC값 저장
- 각종 레지스터 정보: 자신이 사용하던 레지스터의 중간값 보관 (다음에 작업 계속 진행되도록)
- 메모리 관리 정보: 프로세스가 메모리의 어디에 있는지에 대한 메모리 위치 정보, 메모리 보호를 위해 사용하는 경계 레지스터 값과 한계 레지스터 값 등 저장
프로세스의 상태
- 생성(create): 프로세스가 메모리에 올라와 실행 준비를 완료한 상태. PCB가 생성된다.
- 준비(ready): 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태.
- 실행(running or execute): 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 작업을 수행하는 상태. 할당된 시간동안 작업이 다 끝나지 않은 경우 준비(ready)상태로 돌아와 다음 차례를 기다린다.
- 완료(terminate): 실행 상태의 프로세스가 할당된 시간 동안 작업을 마치면 완료 상태로 진입한다. 완료 상태는 PCB가 사라진 상태이다.
Context Switching(문맥 교환)
CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업이다. 실행 상태에서 나가는 PCB에 지금까지의 작업 내용을 저장하고, 실행 상태로 들어오는 PCB의 내용으로 CPU가 다시 설정된다. 이렇게 두 프로세스의 PCB를 교환하는 작업이 Context Switching이다.
이 그림은 문맥 교환 P1->P2, 다시 문맥 교환 P2->P1 의 과정을 보여준다.
Context Switching이 일어나는 경우는 다양하다. 일반적으로 한 프로세스가 자신에게 할당된 시간을 모두 사용할 때 발생하고, 인터럽트 시에도 발생한다.