이번 포스팅에서는 프로세스 관리의 중요한 개념인 프로세스 테이블, 프로세스 제어 블록(PCB), 그리고 프로세스 스케줄링에 대해 살펴보겠습니다.
1. 프로세스 테이블과 프로세스 제어 블록(PCB)
프로세스 테이블(process table)은 시스템의 모든 프로세스를 관리하기 위한 데이터 구조로, 운영체제마다 구현 방식이 다를 수 있지만, 시스템에는 오직 하나만 존재합니다.
이 테이블은 프로세스에 관한 모든 정보를 관리하는 프로세스 제어 블록(PCB)들로 구성됩니다.
프로세스 제어 블록(PCB)은 각 프로세스에 대한 정보를 저장하는 데이터 구조체입니다.
프로세스가 생성될 때 PCB가 만들어지며, 프로세스가 종료되면 PCB도 삭제됩니다.
PCB는 커널에 의해 생성되고 관리되며, 다양한 정보를 포함합니다:
- 프로세스 ID(PID): 시스템에서 프로세스를 구분하는 유일한 식별자입니다.
- 부모 프로세스 ID(PPID): 프로세스를 생성한 부모 프로세스의 PID입니다.
- 프로세스 상태: 프로세스가 현재 어떤 상태에 있는지 나타냅니다.
- 프로세스 컨텍스트: CPU 레지스터 정보(PC, SP, 범용 레지스터 등)가 포함되며, 프로세스가 실행될 때 필요한 정보들입니다.
- 스케줄링 정보: 프로세스의 우선순위, 사용한 CPU 시간 등 스케줄링과 관련된 정보가 저장됩니다.
- 종료 코드: 프로세스가 종료될 때 반환하는 코드로, 부모 프로세스에게 전달됩니다.
- 오픈 파일 테이블: 프로세스가 열어놓은 파일들의 디스크립터가 저장된 배열입니다.
- 메모리 관리 정보: 프로세스가 사용 중인 물리 메모리의 위치와 크기, 페이지 테이블 주소 등 메모리 관리와 관련된 정보가 포함됩니다.
- 프로세스 소유자 정보: 프로세스를 생성한 사용자의 로그인 이름입니다.
- 회계 정보: 프로세스가 사용한 CPU 시간, 경과 시간 등과 관련된 정보입니다.
PCB에 저장되는 정보는 운영체제마다 다를 수 있으며, 프로세스 상태 정보도 운영체제에 따라 조금씩 차이가 있습니다.
2. 프로세스의 상태
운영체제는 프로세스의 상태를 여러 가지로 구분합니다.

일반적으로 프로세스는 다음과 같은 상태를 거칩니다:
- New(생성 상태): 프로세스가 생성되고, 메모리 할당과 자원 적재가 이루어지는 초기 상태입니다.
- Ready(준비 상태): 프로세스가 실행 준비가 되어 스케줄링을 기다리는 상태입니다. 준비 큐에서 대기 중이며, CPU가 할당되면 실행 상태로 전환됩니다.
- Running(실행 상태): 프로세스가 CPU를 사용하여 실제로 실행되고 있는 상태입니다. 일정 시간이 지나거나 입출력 작업을 요청하면 다시 Ready 상태로 전환되거나, Blocked 상태로 변경됩니다.
- Blocked/Wait(대기 상태): 프로세스가 자원이나 입출력 작업을 기다리는 상태입니다. 요청이 완료되면 Ready 상태로 전환됩니다.
- Terminated(종료 상태): 프로세스가 모든 작업을 완료하고 종료된 상태입니다. 종료 코드가 부모 프로세스에 의해 수신되지 않으면 좀비 상태로 남을 수 있습니다.
3. 프로세스 스케줄링과 컨텍스트 스위칭
과거 운영체제에서는 프로세스 스케줄링이 주로 이루어졌습니다.
이 과정에서 Ready 상태에 있는 프로세스들 중 실행할 프로세스를 선택하여 CPU 시간을 할당했습니다.
그러나 현대의 운영체제는 스레드를 기준으로 스케줄링을 진행합니다.
- 프로세스 스케줄링: 과거의 운영체제에서는 실행 단위가 프로세스였습니다. Ready 상태의 프로세스 중 실행할 프로세스를 선택하여 CPU 시간을 할당했습니다.
- 스레드 스케줄링: 현대 운영체제에서는 실행 단위가 스레드로 변화하였으며, 스레드들 간의 스케줄링이 이루어집니다. 프로세스는 스레드들이 공유 자원을 사용할 수 있도록 제공하는 컨테이너 역할을 합니다.
결론
운영체제는 프로세스 테이블과 프로세스 제어 블록(PCB)을 통해 시스템의 모든 프로세스를 체계적으로 관리합니다.
또한, 프로세스 스케줄링을 통해 CPU 자원을 효율적으로 할당하여 시스템 성능을 극대화합니다.
덕분에 컴퓨터는 여러 작업을 동시에 수행할 수 있으며, 안정적으로 동작할 수 있습니다.
'운영체제' 카테고리의 다른 글
프로세스 제어: 생성부터 종료까지 (0) | 2024.08.17 |
---|---|
프로세스 계층 구조: 부모-자식 관계와 시스템 호출 (0) | 2024.08.16 |
프로세스와 프로세스 관리 : 프로그램이 메모리에서 어떻게 실행되는가? (0) | 2024.08.14 |
운영체제가 가지고 있는 두 번째 인터페이스: 인터럽트 (0) | 2024.08.13 |
커널의 실체와 시스템 호출 (0) | 2024.08.12 |