티스토리 뷰

반응형

컨텍스트 스위칭(Context Switching)

컨텍스트 스위칭(Context Switching)은 운영체제가 현재 실행 중인 프로세스와 다음으로 실행할 프로세스 사이의 교체를 의미한다. 즉, 한 프로세스가 실행 중인 상태에서 다른 프로세스로 교체하기 위해 현재 프로세스의 상태 정보를 저장하고, 다음 프로세스의 상태 정보를 읽어오는 작업을 수행하는 것이다.

 

컴퓨터를 하다보면 여러개의 프로그램을 띄워 놓고 작업을 해본적이 있을 것이다. 예를 들면, 한글을 띄워놓고 타이핑을 하다가도 코드를 컴파일 하고, 구글에 검색을 하고 등등..

여러가지 프로그램을 실행중인 상태에서 하나씩 작업을 할 때, 우리는 각 프로그램에서 작업했던 부분들을 그대로 유지한채 이어서 작업을 진행해 나갈 수 있다.

 

컨텍스트 스위칭은 이렇게 여러개의 프로세스들을 실행할 때 각각의 프로세스들의 작업 위치를 유지한 채 프로세스 실행을 이어서 할 수 있는 기술을 의미한다.


 

PCB의 데이터 구조

PCB(Process Control Block)

위의 설명에서 컨텍스트 스위칭을 할 때는 프로세스들의 작업 위치를 유지한 채 실행할 수 있어야 한다. 그럼 컴퓨터는 그 프로세스들의 작업 위치와 상태를 어떻게 알고 유지할 수 있는 것일까? 

 

운영체제에는 프로세스들의 정보를 저장하는 별도의 메모리 공간이 존재하는데, 그 메모리 공간이 PCB이다.

 

운영체제는 프로세스들을 관리하기 위해 운영체제 내의 커널 메모리 영역에 PCB라는 공간을 둔다. PCB는 각 프로세스가 생성될 때마다 하나씩 공간을 할당하며, 각 프로세스의 상태 정보와 관련된 데이터를 저장한다. 

 

이 PCB에는 프로세스가 어디까지 실행했는지 정보와 프로그램의 상태, 프로세스마다 할당된 자원 정보, 프로세스 식별자 등등 여러가지 프로세스들의 정보가 저장되어 있다.

 

▶PCB에 저장되는 데이터◀

 Process ID(PID) : 프로세스의 고유 식별 번호

PC(Program Counter)와 SP(Stack Pointer) : 프로세스가 어디까지 실행 됐는지 프로세스의 실행 주소를 나타냄

 Scheduling info(프로세스 상태) : 프로세스 상태는 생성, 실행 가능, 실행, 대기, 종료로 나눌 수 있으며 하나의 상태 값을 가진다

Memory info(메모리 사이즈 limit) : 전체 프로세스의 할당된 메모리 크기

⑤ 레지스터 상태 

⑥ 기타 등등..


컨텍스트 스위칭 세부 동작 과정

컨텍스트 스위칭의 동작과정은 3가지로 나눌 수 있다.

1. 현재 실행 중인 프로세스의 상태 정보 저장
현재 실행 중인 프로세스의 상태와 실행 정보를 레지스터 상태, 프로그램 카운터(PC), 스택 포인터(SP) 등에 넣어 PCB에 저장한다
2. 다음으로 실행할 프로세스의 상태 정보 복원
교체할 프로세스의 PCB에서 저장된 상태 정보를 레지스터, PC, SP 등에 업데이트 한다
3. 실행 중인 프로세스 교체
현재 실행 중인 프로세스가 실행 중지되고, 다음으로 실행할 프로세스를 CPU가 처리한다 

 

이 3가지 동작을 좀더 쉽게 설명해보겠다. 

 

프로그램을 여러개 실행할 때 우리가 컴퓨터 화면으로 보기엔 프로그램 모두가 각각 동시에 실행되고 있는 것처럼 보인다. 하지만 실제 컴퓨터에선 동시에 실행되는게 아니라, 아주 미세한 시간 단위로 끊어서 프로세스를 돌아가며 실행시키고 있는 것이다. 엄청 미세한 시간 단위로 빠르게 프로세스를 교체로 돌리다보니 우리 눈에는 자연스럽게 동시에 실행되고 있는 것처럼 보이는 것이다.

 

이때, 프로세스를 교체하면서 실행시킬 때는 각 프로세스의 상태를 그대로 유지하면서 실행시켜야 하기 때문에, 프로세스의 정보와 상태를 PCB에서 읽어온 뒤 이어서 실행 시킨 다음, 교체될 때 어디까지 실행됐는지 저장하는 과정이 필요하다.

 

 

예시를 들어보자.

 

 

1. 프로세스1과 프로세스2를 동시에 실행하려 한다. 그러므로 프로세스1과 프로세스2가 서로서로 교체되는 컨텍스트 스위칭 과정이 필요하다.

 

2. 프로세스1에서 프로세스2로 스위칭 될 때, 프로세스1의 PC와 SP 정보를 PCB에 저장한다. PC는 다음 실행할 코드의 주소값을 가지고 있고, SP는 코드의 함수가 어디까지 호출되어 있는지 위치값을 가지고 있다(PC와 SP 값을 잘 읽고 업데이트할 수 있다면, CPU는 프로세스가 어디까지 실행했는지 상태와 위치를 알 수 있다)

 

3. 기존에 저장되어 있던 프로세스2의 PC와 SP 값을 PCB에서 꺼내온 뒤 CPU의 레지스터에 PC와 SP 값을 업데이트 한다.

 

4. CPU는 업데이트 된 PC와 SP를 읽어 프로세스2를 실행한다.

 

5. 다시 2번으로 되돌아가 PC와 SP 값을 저장하고 업데이트하는 과정을 프로세스들이 종료될 때까지 반복한다.

 


컨텍스트 스위칭은 운영체제의 핵심적인 기능이고, 굉장히 빈번하게 일어나는 현상이다. 그러나 컨텍스트 스위칭이 너무 많이 발생되면 오버헤드가 발생할 수 있다. 오버헤드 현상을 막기위해선 컨텍스트 스위칭이 빠르게 수행되어야 한다. 따라서 컨텍스트 스위칭 시스템은 어셈블리어(기계어)로 작성되어 있다. 

 

C 언어같은 고급언어보다 저급언어로 작성되면 컴퓨터가 읽는 속도가 빠르기 때문이다. 컴퓨터 입장에서는 어셈블리어를 읽어서 작업을 처리하는 것이 최적화 시간이 빠른 것이다.

 

운영체제는 이 밖에도 컨텍스트 스위칭의 성능을 최적화하기 위해 다양한 기법과 알고리즘을 사용한다. 

 

 


혹시 프로세스에 대해서 더 알고싶다면 아래 글을 참고해보자

 

[운영체제] 프로세스란?

프로세스(Process) 프로세스는 실행 중인 프로그램을 의미한다. 프로세스는 운영체제에 의해 관리되며, 독립적으로 실행되고 자원을 할당 받을 수 있는 단위이다. 운영체제는 프로세스들에게 적

jerryjerryjerry.tistory.com

 

반응형
댓글
공지사항