Context Switching

신명철·2022년 2월 3일
0

OS

목록 보기
4/27

정의

하나의 프로세스가 CPU를 사용중이던 상태에서, 스케줄러의 인터럽트 요청에 의해 다른 프로세스가 CPU를 사용할 수 있도록 하기 위해 이전의 프로세스의 상태(문맥, Context)를 저장하고 새로운 프로세스의 상태를 적재하는 작업을 말한다.

  • 기존의 프로세스 상태 값은 커널(Kernal) 내부의 PCB(Process Control Block)에 저장하고 새 프로세스의 정보나 상태 값을 PCB 에서 가져와 교체하게 된다.

Context Switching이 필요한 이유

  • 한번에 하나의 Task(Process, Thread) 만 수행한다면 다음 Task 는 앞의 Task 가 끝나기를 기다릴 수 밖에 없을 것이다.

  • 한번에 하나의 Task 만 수행할 수 있는 CPU 는 여러 개의 Task 를 동시에 수행하기 위한 방법으로 빠른 속도로 Task 를 바꿔가며 실행한다고 한다. 이렇게 빠른 속도로 여러 개의 Task 를 번갈아가며 수행하면 사람의 눈으로는 여러 개의 Task 가 동시에 수행되는 것처럼 느끼게 된다. Task 를 바꿔가면서 실행하기 위해 필요한게 바로 Context Switching 이다.

  • 하지만, Context Switching 이 진행되는 동안 CPU는 아무 것도 수행하지 못하기 때문에 overhead 가 발생한다. 이 외에도 Cache 초기화, Memory Mapping 초기화 등 많은 비용이 소모된다. 이렇게 overhead 가 발생하는데 Context Switching 을 하는 이유는 뭘까?

  • I/O Event 가 발생하면 프로세스는 waiting 상태로 전환된다. 그럼 CPU 는 아무런 일도 하지 않는데 여기서 CPU 낭비가 발생한다.

  • overhead 가 발생하면서 생기는 낭비보다 waiting 상태에서 아무런 일을 하지 않아 생기는 낭비가 더 크기 때문에 Context Switching 을 통해서 다른 프로세스를 실행하는게 더 효율적이다.

  • Context Switching 은 Stack 영역을 제외한 모든 메모리를 공유하는 쓰레드가 프로세스보다 더 효율적이다.

Context Switching 과정

수행중이던 Task 의 정보는 레지스터에 저장되고 이는 PCB 로 관리가 된다.

  1. 현재 실행하고 있는 Task 의 PCB 정보를 저장한다.
  2. 다음 실행할 Task 의 PCB 정보를 읽어와 레지스터에 적재하고 CPU 가 이전에 진행했던 과정을 이어서 수행한다.

Context Switching 과 Interrupt

인터럽트 (Interrupt) 는 CPU 가 프로그램을 실행하고 있을 때 실행중인 프로그램 밖에서 예외 상황이 발생해 처리가 필요한 경우 CPU 에게 이를 알려 예외 상황을 처리할 수 있도록 하는 것을 말한다.

Context Switching 을 일으키는 Interrupt 는 아래와 같다.

  1. I/O request (I/O 요청)
  2. time slice expired (CPU 사용시간 만료)
  3. fork a child (자식 프로세스를 만들 때)
  4. wait for a interrupt (인터럽트 처리를 기다릴 때)
profile
내 머릿속 지우개

0개의 댓글