PCB (Process Control Block)
: 운영체제가 각각의 프로세스를 관리하기 위해 사용하는 데이터 구조
- 특징
- 운영체제는 PCB를 통해 모든 프로세스를 추적하고 관리함
- 프로세스가 생성될 때, 운영체제가 해당 프로세스의 정보를 갖고 있는 PCB를 만들고 저장함
- 프로세스가 종료되면, 운영체제는 해당 프로세스의 PCB만 연결 리스트에서 제거함
- PCB들은 연결 리스트(Linked List) 구조로 저장됨
- 연결 리스트(Linked List): 각각의 데이터가 다음 데이터를 가리켜서 연결하는 구조인 자료구조
- 연결 리스트(Linked List): 각각의 데이터가 다음 데이터를 가리켜서 연결하는 구조인 자료구조
PCB 구조
1. 포인터
: 부모와 자식 프로세스에 대한 포인터, 할당된 자원에 대한 포인터, 프로세스의 한 상태에서 다른 상태로 전환될 때 저장하는 포인터 등이 있음
- 효율적인 접근을 위해 사용됨
- 연결 리스트 구조 유지에 필요한 포인터 포함됨
2. 프로세스 상태
: 현재 프로세스의 상태를 저장
- 5개의 상태: 생성 → 준비 → 실행 → 대기 → 완료
3. 프로세스 ID
: 프로세스를 고유하게 식별하기 위한 숫자를 저장
4. 프로그램 카운터
: 다음에 실행될 명령어의 주소를 저장
- 오늘날 OS는 시분할 처리로 여러 프로세스를 짧은 시간동안 번갈아서 실행함
→ 어떤 프로세스가 실행되다가 CPU를 뺏기고 다시 실행될 때, 원래 실행하던 명령어가 실행되어야 하기 때문에 프로그램 카운터가 꼭 필요함
5. 레지스터 정보
: 프로세스가 실행될 때 사용됐던 레지스터 값를 저장
- 프로그램 카운터와 마찬가지로, CPU를 뺏기고 다시 시작할 때 이전에 사용하던 값을 복구하기 위한 용도
6. 메모리 관련 정보
: 해당 프로세스의 메모리 위치, 메모리 침범을 막기 위한 경계 레지스터 값 등을 저장
- 메모리 침범을 방지하기 위해 필요
7. CPU 스케줄링 정보
: CPU 스케줄링에 필요한 우선 순위, 최종 실행 시간, CPU 점유 시간 등의 정보를 저장
- 운영체제가 어떤 프로세스에 CPU를 줄지 결정할 때 참고함
프로세스 상태
: 시분할 시스템에서 프로세스가 순차적으로 CPU를 사용하는 구조
- 운영체제는 시분할 시스템을 사용해서 CPU를 짧은 시간 단위로 나눠 여러 프로세스에 돌아가며 할당함
- 실제로 CPU는 한 번에 하나의 프로세스만 처리
→ 워낙 빠르게 전환되기 때문에 동시에 실행되는 것처럼 보임
⚠️ 시분할 시스템(Time-sharing system)
: 여러 프로세스가 짧은 시간 간격으로 CPU를 번갈아가며 사용하는 시스템
- CPU를 효율적으로 사용하기 위한 대표적인 운영체제 방식
- 사용자 입장에선 여러 작업이 동시에 수행되는 것처럼 느껴짐
프로세스의 5가지 상태
- 프로세스는 시분할 처리를 위한 다섯가지 상태를 갖고 있다.
1. 생성 상태 (New)
: PCB가 생성되고, 메모리에 프로그램 적재를 요청한 상태
- 운영체제가 메모리에 적재 요청을 승인하면, 준비 상태로 전환됨
2. 준비 상태 (Ready)
: CPU를 사용하기 위해 대기 중인 상태
- 대부분의 프로세스는 준비 상태에 있음
- CPU 스케줄러에 의해 CPU가 할당된 프로세스만 실행 상태로 전환됨
3. 실행 상태 (Running)
: 준비 상태에 있는 프로세스가 CPU 스케줄러에 의해 CPU를 할당 받아 실행 중인 상태
- 실행 상태에 있는 프로세스의 수는 CPU의 개수만큼
(ex. CPU 1개면, 실행 상태 프로세스도 1개) - CPU 스케줄러는 부여된 시간을 초과하면 할당된 CPU를 강제로 빼앗음
→ 그럼 프로세스는 다시 준비 상태로 돌아감
→ 이를 문맥 교환(Context Switching) 이라 함
4. 대기 상태 (Waiting)
: 프로세스가 입출력(I/O)을 요청하면, 입출력(I/O)이 완료될 때까지 기다리는 상태
- 특정 프로세스의 입출력이 완료될 때까지 CPU를 멍 때리게 하는 건 비효율적
- → 입출력 요청을 한 프로세스를 대기 상태에 두고, 다른 프로세스에 CPU 할당
→ 시간이 지나서 입출력 작업이 완료되면, 대기 상태에 있던 프로세스에게 CPU 할당 기회를 줌 (다시 준비 상태로 이동하여 실행 대기)
⇒ CPU에게 쉬는시간 안줌
5. 완료 상태 (Terminated)
: 프로세스가 종료된 상태
- 프로세스가 사용했던 데이터를 메모리에서 제거, 생성된 PCB도 제거