[OS] PCB와 Context Switching

Wonjun Seo·2023년 8월 13일
0

프로세스 관리

프로세스 관리는 구독중인 프로세스가 여러 개일때, CPU 스케줄링을 통해 프로세스를 관리하는 것을 의미한다.
이 때, CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다.
프로세스들의 특징을 갖고있는 것이 프로세스 메타데이터(Process Metadata)이다.

프로세스 메타데이터는 다음과 같은 정보를 담고 있다.

  • Process ID
  • Process State
  • Process Priority
  • CPU Registers
  • Owner
  • CPU Usage
  • Memory Usage

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


PCB(Process Control Block)

PCB는 프로세스들의 메타데이터를 저장하는 곳이며 한 PCB 안에는 한 프로세스의 정보가 담기게 된다.

프로그램이 실행되어 메모리에 적재됐을 때 프로세스가 생성되고, 프로세스 주소 공간에 코드, 데이터, 스택이 공간이 생성되고 이후 해당 프로세스의 메타데이터들이 PCB에 저장된다.

PBC의 관리 방식

PCB는 프로세스가 생성될 때마다 하나씩 늘어가게 되는데, 이 때 PCB들을 관리하는 자료구조는 LinkedList이다.

PCB List Head에 PCB들이 생성될 때마다 붙게 된다. 주소값으로 연결이 이루어져 있는 연결리스트이기 때문에 삽입 및 삭제가 용이하다.

즉, 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.


Context Switching

CPU가 현재 작업 중인 프로세스에서 다른 프로세스로 넘어갈 때 지금까지의 프로세스의 상태를 저장하고, 새 프로세스의 저장된 상태를 다시 적재하는 작업을 Context Switching(문맥 교환)이라고 한다.

Context Switching이 발생하는 경우

보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생한다.

  • 멀티태스킹(Multitasking)

    • 실행 가능한 프로세스들이 운영체제의 스케줄러에 의해 조금씩 번갈아가며 수행되는 것을 말한다.
    • 번갈아가며 프로세스가 CPU를 할당 받는데, 이 때 Context Switching이 발생한다.
    • 사용자가 체감하기 힘든 속도로 Context Switching되며 프로세스가 처리되기 때문에 동시에 처리되는 것처럼 느껴진다.
  • 인터럽트 핸들링(Interrupt Handling)

    • 인터럽트란 컴퓨터 시스템에서 예외 상황이 발생했을때 CPU에게 알려 처리할 수 있도록 하는 것을 말한다.
    • 인터럽트가 발생하면 Context Switching 한다.
    • I/O request: 입출력 요청
    • time slice expired: CPU 사용시간이 만료
    • fork a child: 자식 프로세스 생성
    • wait for an interrupt: 인터럽트 처리 대기
  • 사용자와 커널 모드 전환(User and Kernel Mode Switching)

    • 사용자와 커널 모드 전환은 Context Switch가 필수는 아니지만 OS에 따라 발생할 수도 있다.

Context Switching 과정

위 그림을 보면 프로세스 P0이 실행중인 상태(executing)에서 유휴 상태(idle)가 될 때 프로세스 P1이 곧바로 executing 되지 않고 idle을 좀 더 하다가 executing이 된다.

그 이유는 P0의 상태를 PCB0에 저장하고 P1의 상태를 PCB1에서 가져와야 하기 때문이다.

이 과정에서 PCB를 저장하고 가져올 때 CPU는 아무런 일도 하지 못하게 된다.

따라서, 스레드 및 프로세스의 개수가 많아져 Context Switching이 빈번히 발생하게 되면, 오버헤드(Overhead)가 잦아져 성능 저하가 발생할 수도 있다. 이를 Context Switching Overhead라고 한다.


References

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/PCB%20%26%20Context%20Switcing.md

https://spurdev.tistory.com/13

https://velog.io/@haero_kim/PCB-%EC%99%80-Context-Switching-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0#context-switching

0개의 댓글