Context Switching(문맥 전환)

이재원·2024년 3월 2일

Context Switching이란?

  • 운영체제가 한 작업에서 다른 작업으로 CPU의 제어를 전환하는 과정에서 현재 진행하고 있는 프로세스의 상태 정보를 저장하고 다음 작업의 상태 값을 읽어와서 복원하는 과정을 의미한다.
  • 주로 프로세스 스케줄링의 일환으로 발생한다.
  • 시스템의 멀티태스킹과 멀티프로세싱 능력을 가능하게 한다.

Context란?

  • 특정 시점에서 프로세스나 스레드의 상태 정보로서, 실행을 재개할 수 있도록 필요한 모든 정보를 포함한다.
  • 프로세스 간 또는 스레드간에 전환 할 때 저장하고 복원되는 데이터
  • PCB에 저장된다.

PCB(Process Control Block)

  • 특정 프로세스에 대한 중요한 정보를 저장하는 데이터 구조
  • 운영 체제는 PCB를 사용하여 각 프로세스의 상태를 추적하고 관리한다.
  • 운영 체제의 커널 메모리 영역 내에 저장되어 운영체제가 필요할 때마다 접근하고 수정할 수 있다.

PCB의 저장정보

  • 프로세스 식별자(Process ID, PID): 프로세스를 구별하는 고유 번호
  • 프로세스 상태: 실행 중, 준비 완료, 대기 중 등 프로세스의 현재 상태를 나타낸다.
  • 프로그램 카운터: 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
  • CPU 레지스터: 프로세스의 실행에 필요한 레지스터들의 현재 값
  • CPU 스케줄링 정보: 프로세스 우선순위, 스케줄링 큐 정보 등
  • 메모리 관리 정보: 프로세스의 메모리 할당, 페이지 테이블 정보 등을 통해 가상 메모리와 실제 메모리 간의 매핑이 관리된다.
  • 입출력 상태 정보: 프로세스에 할당된 입출력 장치와 열린 파일의 목록으로 프로세스가 입출력 작업을 재개할 수 있도록 필요한 정보

Context switching이 발생하는 경우

1. 시간 할당량(Time Slice) 만료

  • 대부분의 운영 체제는 시분할(time-sharing) 방식을 사용하여, 각 프로세스에 일정 시간(시간 할당량 또는 퀀텀)만 CPU를 사용할 수 있도록 한다. 한 프로세스의 시간 할당량이 만료되면, 운영 체제는 다음 프로세스로 컨텍스트 스위칭을 수행한다.

2. 입출력 요청(IO Request)

  • 프로세스가 입출력 작업(예: 파일 읽기/쓰기, 네트워크 통신)을 요청하면, 이러한 작업을 완료하는 동안 CPU는 대기 상태에 있게 되는데, 운영 체제는 이 시간을 효율적으로 활용하기 위해 컨텍스트 스위칭을 통해 다른 프로세스로 전환한다.

3. 입출력 작업 완료

  • 입출력 작업이 완료되면, 대기 중이던 프로세스가 실행을 재개할 준비가 됩니다. 운영 체제는 이 프로세스로 컨텍스트 스위칭을 수행하여, 작업을 계속할 수 있도록 한다.

4. 우선순위 변경

  • 프로세스의 우선순위가 변경되어 더 높은 우선순위를 갖는 프로세스가 실행 대기 상태가 되면, 운영 체제는 현재보다 우선순위가 높은 프로세스로 컨텍스트 스위칭을 수행할 수 있다.

5. 프로세스 종료 또는 대기 상태 전환

  • 프로세스가 종료되거나 특정 이벤트가 발생할 때까지 대기 상태로 전환될 경우, 운영 체제는 실행 대기 중인 다른 프로세스로 컨텍스트 스위칭을 수행한다.

6. 인터럽트 발생

  • 하드웨어 인터럽트 또는 소프트웨어 인터럽트가 발생하면, 운영 체제는 인터럽트 처리 루틴을 실행하기 위해 컨텍스트 스위칭을 할 수 있다. 인터럽트 처리가 완료된 후, 이전의 프로세스로 돌아가거나 다른 프로세스로 전환될 수 있다.

컨텍스트 스위칭은 운영 체제의 멀티태스킹을 가능하게 하는 핵심 메커니즘이지만, 컨텍스트 스위칭에는 오버헤드가 발생하기 때문에, 운영 체제는 이를 최소화하기 위해 효율적인 스케줄링 알고리즘과 전략을 사용해야한다.

출처
https://velog.io/@ssh00n/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Context-Switching%EB%AC%B8%EB%A7%A5-%EC%A0%84%ED%99%98

profile
최고가 되기 위한 여정

0개의 댓글