Computer Science/Operating System

[OS] PCB (Process Control Block) & Context Switching

dbssk 2023. 5. 28. 01:05

PCB (Process Control Block)

PCB는 운영체제가 각 프로세스를 관리하기 위해 유지하는 자료구조이다.

각 프로세스마다 하나의 PCB가 할당되며, PCB에는 해당 프로세스에 대한 정보가 저장된다.

PCB에 저장되는 정보

  1. 프로세스 식별자(Process Id) 
    • 각 프로세스에는 고유한 식별자가 할당된다.
    • 프로세스를 식별하고 구분하기 위해 사용

  2. 프로세스 상태(Process State)
    • 프로세스의 현재 상태를 나타낸다.
    • new, ready, running, waiting, terminated가 있다.
    • 스케줄링 및 운영체제의 상태 관리에 사용

  3. 프로그램 카운터(Program Counter) 
    • 현재 프로세스가 다음에 실행할 명령어의 주소를 가리키는 레지스터 값
    • 프로세스가 중단되었다가 다시 실행될 때, 이전 상태로 복원하기 위해 필요하다.

  4. 레지스터(Registers) 
    • 프로세스의 레지스터 값들을 저장한다. 레지스터에는 프로세스의 실행 상태와 관련된 정보가 포함된다.
    • ex) 범용 레지스터, 스택 포인터, 프로그램 상태 레지스터 등의 값
    • 프로세스 상태 전환이나 중단/복원 시에 레지스터 값을 유지하기 위해 필요하다.

  5. 스케줄링 정보(Scheduling Information) 
    • 프로세스의 우선순위, 스케줄링 알고리즘에 필요한 정보 등을 저장한다.
    • 스케줄링 알고리즘이 결정되는 데 사용되며, 운영체제가 프로세스를 효율적으로 관리할 수 있도록 도와준다.
  6. 메모리 관리 정보(Memory Related Information)
    • 프로세스의 메모리 할당과 관련된 메모리 영역의 범위, 페이지 테이블 등의 정보를 저장한다.
    • 메모리 관련 유틸리티가 메모리 할당 및 해제를 관리하는 데 사용

  7. 계정 정보(Accounting Information)
    • 프로세스와 관련된 계정 정보를 저장한다.
    • ex) CPU 사용량, 실행 시간, 입출력 작업 통계 등
    • 이러한 정보는 성능 모니터링, 로그 기록, 자원 사용 축적 등에 사용된다.

  8. I/O 관련 상태 정보(Status Information related to I/O)
    • 프로세스와 관련된 입출력 장치의 상태 정보를 저장한다.
    • ex) 현재 열린 파일, I/O 대기열, 입출력 상태 등
    • 입출력 작업 관리와 관련된 운영체제 기능을 지원하기 위해 사용

PCB 사용

  • 프로세스 상태 관리 & Context Switching
    • CPU에서는 프로세스의 상태에 따라 교체작업이 이루어지는데, 이때 PCB는 현재 실행 중인 프로세스의 상태를 저장하고 다음으로 실행할 프로세스의 정보를 로드하여 CPU의 전환을 지원한다.

  • 메모리와 CPU 레지스터 간 정보 전환
    • 대기 중이거나 준비 중인 프로세스의 PCB는 메모리에 유지된다. 그리고 해당 프로세스가 실행되기 위해 선택되면 PCB의 정보가 CPU 레지스터로 올라간다.
    • 즉, ready/waiting → 메모리, running → CPU 레지스터에 위치한다.

PCB 관리 방식

  • 일반적으로 주기억장치(RAM)에 저장되며, 각 프로세스마다 PCB가 할당되고 주소를 통해 연결리스트 형태로 관리된다. PCB List Head에 PCB들이 생성될 때마다 연결 리스트에 추가된다.

  • 연결 리스트는 PCB의 주소를 통해 각 PCB가 연결되어 있어, PCB의 삽입 및 삭제 작업이 용이하다.

  • 프로세스가 생성되면 해당 프로세스에 대한 PCB가 생성되고, 프로세스가 종료되면 해당 PCB는 제거된다.

Context Switching (컨텍스트 스위칭)

Context Switching은 CPU가 한 프로세스에서 다른 프로세스로 전환하는 과정이다. 컨텍스트 스위칭은 다중 프로세스 환경에서 프로세스들이 CPU를 공유하며 실행되는 상황에서 필요한 작업이다.

Context Switching이 발생하는 상황

  1. 프로세스 스케줄링 : 현재 실행 중인 프로세스를 중지하고 다른 프로세스를 실행해야 하는 경우
  2. 인터럽트 : 현재 실행 중인 프로세스를 중지하고 인터럽트 처리를 위한 다른 프로세스를 실행해야 하는 경우
    인터럽트를 처리한 후 원래 진행 중이던 프로세스를 다시 진행 할 경우

Context Switching 과정

  1. 현재 실행 중인 프로세스/스레드의 상태 저장 : 현재 실행 중인 프로세스/스레드의 레지스터 값, 프로그램 카운터, 상태 정보 등을 해당 프로세스의 PCB에 저장

  2. 다음 실행할 프로세스/스레드 정보 로드 : 다음으로 실행할 프로세스/스레드의 PCB에서 해당 프로세스의 레지스터 값, 프로그램 카운터, 상태 정보 등을 CPU에 로드

  3. 프로세스/스레드 상태 전환 : 현재 실행 중인 프로세스/스레드를 waiting 상태로 전환하고, 다음으로 실행할 프로세스/스레를 ready 또는 running 상태로 전환

  4. 이전 프로세스/스레 복원 : 컨텍스트 스위칭이 완료되면 CPU는 다음에 실행할 프로세스/스레드로 이동하고, 해당 작업의 프로그램 카운터(PC) 값부터 실행을 재개

Context Switching 비용

  • 프로세스가 스레드보다 많이 든다.
  • 스레드는 stack을 제외한 모든 메모리를 공유하기 때문에 컨텍스트 스위칭이 일어나도 stack 영역만 변경하면 된다.