CS/운영체제

PCB(Process Control Block) & 프로세스의 상태

나디아 Nadia 2025. 4. 24. 14:47

 

PCB (Process Control Block)

: 운영체제가 각각의 프로세스를 관리하기 위해 사용하는 데이터 구조

  • 특징
    • 운영체제는 PCB를 통해 모든 프로세스를 추적하고 관리함
    • 프로세스가 생성될 때, 운영체제가 해당 프로세스의 정보를 갖고 있는 PCB를 만들고 저장함
    • 프로세스가 종료되면, 운영체제는 해당 프로세스의 PCB만 연결 리스트에서 제거함
    • PCB들은 연결 리스트(Linked List) 구조로 저장됨
      • 연결 리스트(Linked List): 각각의 데이터가 다음 데이터를 가리켜서 연결하는 구조인 자료구조

 

 

PCB 구조

https://goodbyeanma.tistory.com/199?category=1095162

 

 

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가지 상태

  • 프로세스는 시분할 처리를 위한 다섯가지 상태를 갖고 있다.

https://thebook.io/080367/0021/

 

 

 

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도 제거