[CS] PCB & Context Switching

프로세스 관리

  • 구동 중인 프로세스가 여러 개일 때, CPU 스케줄링을 통해 프로세스를 관리하는 것
  • CPU들은 각 프로세스들에 대해서 구분할 수 있어야 관리가 가능
  • → 각기 다른 프로세스들의 본연의 특징을 가지고 있는 Process Metadata 라는 정보를 활용

✅ Process Metadata가 담고 있는 정보

  • 프로세스 고유 ID (PID) : 프로세스 고유 식별 번호
  • 프로세스 상태 : 프로세스의 현재 상태(준비, 실행, 대기상태)를 기억
  • 프로세스 우선순위 : 스케줄링 관련 정보를 기억
  • Program Counter (PC) : 다음에 실행되는 명령어의 주소를 기억
  • CPU 레지스터 : 프로세스의 레지스터 상태를 저장하는 공간
  • Owner : CPU 사용시간의 정보, 각종 스케줄러에 필요한 정보
  • Memory Limit : 프로그램이 적재될 기억 장치의 상한치, 하한치, 페이지 테이블 등의 정보를 기억

⇒ 메타데이터는 프로세스가 생성될 때마다 PCB (Process Control Block) 이라는 곳에 저장됨

 

PCB (Process Control Block)

  • 프로세스들의 메타데이터를 저장하는 곳
  • 한 PCB 안에는 한 프로세스의 정보가 담기게 되는 구조
    • 프로그램이 실행되어 메모리에 적재되었을 때 프로세스가 생겨나고, 프로세스 주소 공간에 코드, 데이터, 스택 공간이 생성
    • 이후 해당 프로세스의 메타데이터들이 PCB에 저장
     

☑️ PCB가 필요한 이유?

  • CPU에서는 프로세스의 상태에 따라 교체 작업이 이루어짐. (인터럽트가 발생해서 할당 받은 프로세스가 Block상태가 되고, 다른 프로세스를 running으로 바꿀 때)
  • 이 때, 앞으로 다시 수행할 Block 상태의 프로세스의 상태값을 PCB에 저장해두는 것

☑️ PCB의 관리 방식

  • Linked List 방식으로 관리가 됨
  • PCB List Head에 PCB들이 생성될 때마다 붙게 됨 → 주솟값으로 연결이 이루어져 있는 연결 리스트 형태로, 삽입 및 삭제가 용이함
  • 프로세스가 생성되면 해당 PCB가 생성되고, 프로세스 완료 시 제거가 됨

 

Context Switching

☑️ 필요한 이유 ?

  • 만약 컴퓨터가 매 번 하나의 Task만 처리할 수 있다면 ? → 다음 Task를 처리학 위해 현재 Task가 끝날때까지 기다려야 함
  • Context Switching을 사용하면 빠르게 Task를 바꾸면서 실행하기에 사람들은 실시간 처리가 되는 것처럼 보임
  • Context : CPU가 다루는 Task(Process, Thread)에 대한 정보 (대부분의 정보는 Register에 저장되고 PCB로 관리됨)
  • 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가 시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우 Context Switching이 발생
  • 즉, 프로세스가 Ready → Running, Running → Ready, Running → Waiting처럼 상태 변경 시 발생

☑️ 수행 과정

1️⃣ Task의 대부분 정보는 Register에 저장되고 PCB로 관리가 되고 있음

2️⃣ 현재 실행하고 있는 Task의 PCB 정보를 저장

3️⃣ 다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있게 됨

 

☑️ Cost

1️⃣ Cache 초기화

2️⃣ Memory Mapping 초기화

3️⃣ 메모리의 접근을 위해서 Kernel은 항상 실행되어야 함

→ 잦은 Context Switching은 성능 저하를 가져옴

 

☑️ Context Switching Overhead

  • Overhead : 프로세스의 실행을 위한 부가적인 활동
  • 프로세스를 수행하다가 I/O event가 발생하여 Block 상태로 전환시켰을 때, CPU가 그냥 놀게 놔두는 것 보다 다른 프로세스를 수행시키는 것이 효율적
  • → CPU에 계속 프로세스를 수행시키도록 하기 위해서 다른 프로세스를 실행시키고 Context Swirching을 할 때 Overhead가 발생
  • CPU가 놀지 않도록 만들면서, 사용자에게 빠르게 일처리를 제공해 주기 위함

'CS > OS' 카테고리의 다른 글

[CS] CPU 스케줄링  (0) 2024.02.06
[CS] IPC(Inter Process Communication)  (0) 2024.02.06
[CS] 시스템 콜(System Call)  (0) 2024.02.01
[CS] 인터럽트 (Interrupt)  (0) 2023.11.29
[CS] 프로세스 주소 공간  (0) 2023.10.28