[OS] PCB와 Context Switching

2022. 8. 20. 23:34CS/운영체제(OS)

Process Management

Process Management는 CPU가 프로세스가 여러 개일 때, CPU 스케줄링을 통해 관리하는 것을 말한다.

이 때, CPU는 각 프로세스가 누군지 알아야만 관리가 가능하게 된다.

따라서, 프로세스를 구분하기 위해 저장하는 정보를 Process Metadata라고 한다.

 

Process Metadata는 다음과 같은 정보들이 있다.

  • Process ID : PID(Process Identification Number) 라고도 한다.
    • 프로세스 고유 식별 번호
  • Process State (Process 상태)
    • 프로세스의 현재 상태 (준비, 실행, 대기 상태)를 기억시킨다.
  • Program Counter (계수기)
    • 다음에 실행되는 명령어의 주소를 기억시킨다.
  • Process Priority (스케줄링 정보)
    • 프로세스 우선순위 등과 같은 스케줄링 관련 정보를 기억시킨다.
  • CPU Registers
    • 프로세스의 레지스터 상태를 저장하는 공간. CPU 내 범용 레지스터(AX, BX, CX, DX), 데이터 레지스터(SP, BP, SI, DI), 세그먼트 레지스터(CS, DS, ES, SS) 등이 갖고 있는 값을 기억시킨다.
  • Owner (계정 정보)
    • CPU 사용시간의 정보(Quantum), 각종 스케줄러에 필요한 정보를 기억시킨다.
  • 기억장치 관리 정보
    • 프로그램이 적재될 기억 장치의 상한치, 하한치, 페이지 테이블 등의 정보를 기억시킨다.
  • 입출력 정보
    • 프로세스 수행 시 필요한 주변 장치, 파일들의 정보를 기억시킨다.

 

PCB(Process Control Block) 란?

PCB란 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓을 수 있는 저장 장소를 뜻한다.

중요한 정보란, 위에서 언급한 Process Metadata를 말한다.

 

 

PCB가 필요한 이유

CPU에서는 프로세스의 상태에 따라 교체 작업이 이루어진다. (인터럽트가 발생해서 CPU를 할당받았던 프로세스가 Block 상태가 되고 다른 프로세스를 Running 상태로 바꿀 때)

 

이 때, 앞으로 다시 수행할 Block 상태의 프로세스의 상태값을 PCB에 저장해둔다.

 

이렇게 수행중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching이라고 한다.

 

 

 

Context Switching 이란?

왜 Context Switching이 필요한가?

만약 컴퓨터가 매번 하나의 Task만 처리할 수 있다면?

  • 다음 Task를 처리하기 위해 현재 Task가 끝날 때까지 기다려야 한다.
  • 반응속도가 매우 느리고 사용하기 불편해짐

다양한 사람들이 동시에 사용하는 것처럼 하기 위해 Context Switching이 필요하게 되었음

  • 컴퓨터 멀티태스킹을 통해 빠른 반응속도로 응답 가능하다.
  • 빠르게 Task를 바꾸면서 실행되기 때문에 유저 입장에서는 실시간 처리가 되고 있는 것처럼 보인다.
  • CPU가 Task를 바꿔가며 실행하기 위해 Context Switching이 필요하게 되었음.

 

Context Switching의 수행 과정

CPU에는 레지스터라는 저장 공간이 존재한다. 수행 중인 프로세스 정보는 CPU 내부, 즉 레지스터에서 저장하고 있다.

위의 그림은 프로세스 P0가 수행되는 상황이면, 현재 CPU의 레지스터들은 P0의 상태로 수행이 되는 상태이다. 수행 도중 Interrupt가 걸리면 지금 수행되는 것을 먼저 저장하게 된다.

 

Waiting 상태로 변하게 되면 CPU가 다른 프로세스를 Running 상태로 바꿔 올린다. 레지스터 저장 값이 앞으로 수행할 프로세스의 정보로 교체된다. CPU는 레지스터의 정보를 보고 처리 작업을 수행하기 때문에 당연히 새 프로세스 실행을 위해 기존 프로세스 정보는 다른 곳으로 가야 한다. 따라서, CPU의 레지스터 값이 다른 것으로 바뀌기 전에 PCB에 저장된다.

 

 

Context Switching 의 뜻, 발생 시기

Context Switching 이란 CPU가 이전의 프로세스 상태를 PCB에 저장하고, 또 다른 프로세스의 정보를 PCB로 읽어 레지스터에 저장하는 과정을 말한다.

 

Context Switching은 주로 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가 시간(Time Quantum)을 모두 소모하거나, I/O 입출력을 위해 대기해야 하는 경우 Context Switching이 발생한다.

 

즉, Context Switching은 프로세스가 Ready → Running, Running → Ready, Running → Block 처럼 상태 변경 시에 발생한다.

 

 

Context Switching 오버헤드

프로세스들의 시간 할당량은 시스템 성능의 중요한 역할을 한다. 시간 할당량이 적을수록 사용자 입장에서는 여러 개의 프로세스가 거의 동시에 수행되는 느낌을 갖지만 Context Switching의 수가 늘어난다. 프로세스의 실행을 위한 부가적인 활동을 오버헤드(간접 부담 비용)이라고 하는데, 이 또한 Context Switching 수와 같이 늘어나게 된다. 

  • 시간 할당량이 적어지면 : Context Switching 수, 오버헤드가 증가하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖는다.
  • 시간 할당량이 커지면 : Context Switching 수, 오버헤드가 감소하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖지 못한다.

프로세스를 수행하다가 I/O event가 발생하여 BLOCK 상태로 전환시켰을 때, CPU가 그냥 놀게 놔두는 것보다 다른 프로세스를 수행시키는 것이 효율적이므로, CPU에 계속 프로세스를 수행시키도록 하기 위해서 다른 프로세스를 실행시키고 Context Switching을 할 때 Overhead가 발생한다.

전체적으로 봤을 때 이익이 되니까 overhead를 감수하더라도 Context Switching을 하는 거고 그래서 운영체제가 CPU를 관리하는 구조이다. 사용자가 너무 기다리지 않게 관리하기 위해서 반드시 해줘야 하는게 Context Switching이고 이것이 대표적으로 운영체제가 하는 CPU 관리이다.

 

 

Context란 무엇인가?

사용자와 다른 사용자, 사용자와 시스템 또는 디바이스 간의 상호작용에 영향을 미치는 사람, 장소, 개체등의 현재 상황(상태)을 규정하는 정보들을 말한다.

android나 servlet등에서도 context가 있지만 OS에서 Context는 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이다.

 

PCB의 위치

PCB가 프로세스의 중요한 정보를 포함하고 있기 때문에, 일반 사용자가 접근하지 못하도록 보호된 메모리 영역 안에 남는다. 일부 운영 체제에서 PCB는 커널 스택의 처음에 위치한다. (이 메모리 영역은 편리하면서도 보호를 받는 위치이기 때문이다.)