[운영체제] PCB (Process Control Block)
사용자가 실행한 프로그램은 어떻게 실행될까?
사용자가 프로그램을 실행하면, 운영체제(OS)의 커널이 프로그램을 프로세스로 변환하고 PCB를 생성한다.
생성된 PCB 정보가 CPU 레지스터에 할당되면서 프로그램이 실행된다.
CPU는 여러 개의 프로세스를 어떻게 구분할까?
Process Management 란?
CPU가 프로세스가 여러 개일 때, CPU 스케줄링을 통해 관리하는 것을 의미
이때 CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다.
프로세스들을 구분하기 위해 각 프로세스들이 가지고 있는 것이 Process Metadata 이다.
- Process Metadata
- Process ID (PID) : 프로세스 식별 번호
- Process State : new, ready, running, waiting, terminated 등의 상태를 저장
- PC (Program Counter) : 프로세스가 다음에 실행할 명령어의 주소
- CPU 스케줄링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
- CPU Registers
- Memory Usage (메모리 관리 정보) : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보 저장
- I/O Status : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
- Owner
- Accounting 정보 : 사용된 CPU 시간, 시간 제한, 계정 번호 등
이 메타 데이터는 프로세스가 생성되면 PCB (Process Control Block) 이라는 곳에 저장된다.
PCB (Process Control Block, 프로세스 제어 블록) 란?
PCB는 특정 프로세스에 대한 중요한 정보(메타데이터)를 저장하고 있는 운영체제의 자료 구조이다.
운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 생성한다. (1 PCB = 1 프로세스 정보)
프로세스는 CPU를 할당받아 작업을 처리하다가도 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환해야 하는데, 이때 작업의 진행 상황을 모두 PCB에 저장한다.
그리고 다시 CPU를 할당받게 되면 PCB에 저장되어 있던 내용을 불러와 이전에 종료됐던 시점부터 다시 작업을 수행한다.
즉, PCB는 운영체제가 프로세스를 관리하기 위해 반드시 필요한 정보를 저장하는 구조이다.
프로그램이 실행되면 → 프로세스가 생성되고 → 프로세스 주소 공간에 (코드, 데이터, 스택)이 생성되고 → 이 프로세스의 메타데이터들이 PCB에 저장된다.
PCB는 왜 필요한가?
CPU에 하나의 프로세스가 적재되고 프로세스가 종료될 때까지 CPU를 점유하고 있는 것이 아니라,
여러 프로세서가 프로세스의 상태에 따라 교체되면서 실행된다.
(interrupt가 발생해서 할당받은 프로세스가 waiting 상태가 되고 다른 프로세스를 running으로 바꿔 올릴 때)
- 프로세스의 고유한 저장 정보 저장 (식별 & 관리)
- 운영체제는 한 번에 여러 개의 프로세스를 실행하는데, 각 프로세스를 구별하고 필요한 정보를 저장하기 위해
- ex.
- PID를 통해 프로세스 식별
- 코드가 저장된 메모리 주소, 실행할 위치 (PC), 데이터 등 저장
- ➡ PID를 모르면 누가 실행중인지 모름
- 문맥 교환(context switching) 가능
- CPU는 하나의 프로세스를 계속 실행하는 것이 아니라 여러 프로세스가 번갈아가면서 실행된다. (멀티 태스킹, 시분할 시스템)
- CPU에 실행되는 프로세스를 다른 프로세스로 바꾸는 것을 문맥교환이라고 하는데 문맥 교환을 하기 위해서 PCB는 필수적이다.
- 문맥 교환 과정
- 실행 중인 프로세스의 레지스터 값(PC, SP 등)을 PCB에 저장
- 새로운 프로세스의 PCB에서 레지스터 값을 불러와 실행
- 문맥 교환 과정
- PCB가 없다면 실행 중이던 프로세스의 상태를 저장할 수 없고 다시 실행할 수도 없다.
- ➡ 문맥 교환 불가능
- 프로세스 상태 관리 (스케줄링)
- 운영체제는 여러 개의 프로세스를 Ready, Running, Waiting 등 다양한 상태로 관리해야 한다.
- 각 프로세스의 현재 상태를 PCB에 저장하면서 스케줄러가 적절한 프로세스를 선택할 수 있다.
- ex.
- 현재 실행 중 (running) 인지
- CPU를 기다리는 중 (ready) 인지
- 입출력 작업을 기다리는 중 (waiting) 인지
- 이 정보를 운영체제가 관리하면서 CPU 스케줄링을 수행한다.
- ➡ 운영체제가 어던 프로세스를 실행해야 할지 모른다.
PCB는 어떻게 관리되는가?
Linked List 방식으로 관리한다.
PCB List Head에 PCB들이 생성될 때마다 붙게 된다. 주소값으로 연결이 이루어져있는 연결리스트이기 때문에 삽입 삭제에 용이하다.
즉, 프로세스가 생성되면 해당 PCB 가 생성되고 프로세스 완료시 제거된다.
reference
tech-interview-for-developer/Computer Science/Operating System/PCB & Context Switcing.md at master · gyoogle/tech-interview-for
👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.
github.com