[운영체제] PCB와 Context Switching

xoey·2024년 10월 29일

운영체제

목록 보기
6/15
post-thumbnail

1. 프로세스의 개념

“Process is a program in execution”

1.1. 프로세스의 문맥(Context)

특정 시점을 놓고 봤을 때 프로세스가 어디까지 수행했는지 규명하기 위해 필요한 요소
현재 프로세스가 어떤 상태에 있는지 정확하게 규명하기 위해서는 아래와 같은 것들이 확인되어야 한다.

  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • Program Counter
    • Registers
  • 프로세스의 주소 공간
    • Code, Data, Stack
  • 프로세스 관련 커널 자료 구조
    • PCB(Process Control Block)
    • Kernel stack

문맥을 왜 알아야 하지?

현재 CPU의 context를 잡아두지 않으면 다음번에 CPU를 잡았을 때 앞부분부터 다시 실행해야 한다거나 하는 문제가 생길 것이다.

2. 프로세스의 상태(Process State)

CPU는 하나뿐이기에 CPU를 잡고 instruction을 수행하고 있는 프로세스는 하나 밖에 없다.
이때문에 프로세스의 상태(state)는 계속해서 변경되며 수행된다.

  • Running
    • CPU를 잡고 instruction을 수행 중인 상태
  • Ready
    • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
  • Blocked(wait, sleep)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    • 프로세스 자신이 요청한 event(e.g. I/O와 같이 오래 걸리는 작업)가 즉시 만족되지 않아 이를 기다리는 상태
    • e.g. 디스크에서 file을 읽어와야 하는 경우
  • New: 프로세스가 생성 중인 상태
  • Terminated: 수행(execution)이 끝난 상태

프로세스 상태도

운영체제의 커널이 데이터 영역에 자료구조로 큐를 만들어 두고, 프로세스의 상태를 바꾸어 가며 이를 파악하고 CPU를 할당한다.

3. PCB(Process Control Block)

운영체제가 각 프로세스에 대한 중요한 정보를 유지하고 관리하기 위해 사용하는 데이터 구조체

각 프로세스마다 하나의 PCB가 생성되며, 프로세스의 상태, 실행 정보, 자원 등을 추적하는 데 사용된다. 운영체제는 PCB를 통해 프로세스 간의 전환, 자원 할당 및 회수, 프로세스 스케줄링 등을 관리한다.

3.1. 구성 요소

3.1.1. OS가 관리상 사용하는 정보

운영체제는 PCB에 저장된 관리 정보를 사용하여 프로세스를 스케줄링하고 관리한다. 이 정보는 프로세스의 상태와 우선순위, ID와 같은 관리에 필수적인 정보들이다.

  • Process state: 프로세스가 현재 어떤 상태에 있는지
  • Process ID: 각 프로세스를 고유하게 식별하기 위한 값(운영체제에서 프로세스 추적에 사용)
  • Scheduling information: 스케줄러가 프로세스를 실행할 때 참고하는 정보
    • e.g. 프로세스의 우선순위, 할당된 CPU 시간, 스케줄링 큐에 대한 정보 등

3.1.2. CPU 수행 관련 하드웨어 값

프로세스가 CPU에서 실행되던 중 일시 중단되면, CPU의 상태를 저장해야 한다. 이 정보는 프로세스가 다시 실행될 때 정확한 상태에서 재개할 수 있도록 보장해준다.

  • Program Counter: 다음에 실행될 명령어의 메모리 주소를 가리키는 값
  • Registers: CPU의 임시 저장 장치, 프로세스가 수행 중일 때 사용 중인 레지스터 값 저장

3.1.3. 메모리 관련

프로세스는 실행 중에 코드, 데이터, 스택 등의 메모리를 사용한다. 이 메모리의 위치와 관리 정보도 PCB에 저장된다.

  • Code, Data, Stack의 위치 정보: 프로세스의 실행에 필요한 메모리 영역
  • 메모리 관리 정보: 운영체제가 가상 메모리를 관리하는 데 필요한 페이지 테이블이나 세그먼트 테이블 같은 데이터 구조를 참조하기 위한 정보 포함

3.1.4. 파일 관련

프로세스가 실행 중에 열어둔 파일에 대한 정보도 PCB에 저장된다. 운영체제는 프로세스마다 열려있는 파일을 추적하여, 해당 프로세스가 파일을 읽고 쓰는 작업을 제대로 처리할 수 있게 한다.

  • Open file descriptors: 프로세스가 현재 열어둔 파일에 대한 정보를 담고 있는 파일 디스크립터 목록

4. 문맥 교환(Context Switch)

CPU는 매우 빠른 자원이기 때문에 한 프로세스가 계속해서 독점하지 않고, 짧은 시간 동안 CPU를 사용한 뒤 다시 반환하는 과정을 반복한다. 이때 CPU 사용이 중단된 프로세스는 처음부터 다시 실행되는 것이 아니라, 이전 상태를 기억하고 그 시점부터 이어서 실행될 수 있도록 하는 메커니즘이 필요하다.

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행한다:
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장한다.
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어온다.

💡 시스템 콜이나 인터럽트가 발생할 때 반드시 Context Switch가 일어나는 것은 아니다.

  • CPU의 제어권
    • 시스템 콜, 인터럽트: 사용자 프로세스 → 운영체제
    • Context Switch: 사용자 프로세스 → 또다른 사용자 프로세스

(1)의 경우에도 프로세스의 코드 영역을 실행하다가 커널의 코드를 실행한 것이기 때문에 약간의 문맥은 save되어야 한다. 하지만 문맥 교환을 하는 (2)의 경우 그 부담이 훨씬 크다. (e.g. cache memory flush)


Reference

profile
[Roman 8:18] consider that our present sufferings are not worth comparing with the glory that will be revealed in us.

0개의 댓글