본문 바로가기
computer science/운영체제

[운영체제] 문맥교환(Context Switching)

by 박연호의 개발 블로그 2020. 2. 16.

문맥교환

컴퓨터에는 여러 프로세스들이 실행되고 있습니다. 카카오톡을 켜놓고 유튜브로 노래를 들으면서 웹서핑을 하는 것은 사용자 입장에서 동시에 일어나는 일 처럼 보이지만 실제로는 그렇지 않습니다.

 

각 프로세스가 일을 처리하기 위해서는 CPU를 필요로 아주 짧은 시간에 CPU를 할당받아 일을 처리합니다. 위에서 처럼 여러 프로세스가 존재하는 경우 각 프로세스는 CPU를 차지하기 위해 서로 경쟁하며 아주 짧은 시간 동안 CPU의 제어권이 바뀝니다. 여기서 "어떤 프로세스에게 CPU를 할당할까 ?"는 저번 시간에 알아 보았습니다. 

 

이번시간에 다룰 문맥교환은  "현재 CPU를 사용중인 프로세스의 CPU 제어권이 다른 프로세스로 이양되는 과정"을 의미합니다.

 

현재 프로세스 A가 CPU를 사용하고 있는 상황에서 CPU 사용시간이 끝나 다음 프로세스에게 CPU를 넘겨주어여 합니다. 스케줄링 알고리즘에 의해 다음 CPU를 받을 프로세스 B가 선택되었으며 타이머 인터럽트가 발생해 CPU의 제어권을 운영체제에게 넘어가게 됩니다.

 

이과정에서 운영체제는 타이머 인터럽트 처리 루틴으로 가서 직전까지 수행중이던 프로세스 A의 문맥(프로그램 카운터 등)을 자신의 PCB에 저장하고 프로세스 B는 예전에 저장했던 자신의 문맥을 PCB로부터 실제 하드웨어로 복원 시키는 과정을 거치게 됩니다. 

 

※ 여기서 문맥교환에 필요한 시간, 메모리 등을 오버헤드라 부릅니다.

 

또한 프로세스가 봉쇄 상태인 경우에도 문맥교환이 발생하는데, 프로세스가 CPU를 사용하다 I/O 작업을 하게 되는 경우 CPU를 사용하지 않게 됩니다. 이런 경우 CPU낭비가 되기 때문에 다른 프로세스에게 CPU를 이양 합니다.


문맥교환이 아닌 경우

프로세스가 실행 상태일 때 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제에게로 넘어와 원래 실행중이던 프로세스의 업무를 잠시 멈추고 운영 체제 커널의 코드가 실행됩니다 이 경우에 CPU의 실행 위치 등 프로세스의 문맥 중 일부를 PCB에 저장하게 되지만 이러한 과정을 문맥 교환이라고 하지 않습니다.

 

문맥교환 안일어남
문맥교환 일어남

이는 하나의 프로세스가 사용자 모드에서 실행되다가 커널모드로 실행 모드만 바뀌는 것일 뿐 CPU를 점유하는 프로세스가 다른 사용자 프로세스로 변경되는 과정이 아니기 때문입니다. 이와 같은 모드 변경에 비해 문맥 교환에는 훨씬 많은 오버헤드가 발생합니다.

 

타이머 인터럽트가 발생하거나 프로세스가 I/O 요청 시스템을 하여 봉쇄 상태에 들어가는 경우에는 문맥 교환이 일어나지만, 그 밖의 인터럽트나 시스템 콜 발생시에는 문맥 교환이 일어나지 않고 모드만 변경됩니다.

즉 사용자 모드에서 커널 모드로 바뀌어 시스템 콜이나 인터럽트 처리를 하고 다시 동일한 프로세스의 사용자 모드로 되돌아와 이전에 수행하던 작업을 계속 수행할 뿐입니다.