[CS 퀴즈] 오답노트 (2)
CS 퀴즈 (2)
컨텍스트 스위칭 동작
컨텍스트 스위칭(Context Switching)은 프로세스 또는 스레드 간에 실행 상태를 전환하는 동작을 나타낸다.
컨텍스트 스위칭(Context Switching)
컨텍스트 스위칭(Context Switching)은 운영체제가 현재 실행 중인 프로세스와 다음으로 실행할 프로세스 사이의 교체를 의미한다. 즉, 한 프로세스가 실행 중인 상태에서 다른 프로세스로 교체하기 위해 현재 프로세스의 상태 정보를 저장하고, 다음 프로세스의 상태 정보를 읽어오는 작업을 수행하는 것이다.
여러가지 프로그램을 실행중인 상태에서 하나씩 작업을 할 때, 우리는 각 프로그램에서 작업했던 부분들을 그대로 유지한채 이어서 작업을 진행해 나갈 수 있다.
컨텍스트 스위칭은 이렇게 여러 개의 프로세스들을 실행할 때 각각의 프로세스들의 작업 위치를 유지한 채 프로세스 실행을 이어서 할 수 있는 기술을 의미한다.
PCB의 데이터 구조
PCB(Process Control Block)
위의 설명에서 컨텍스트 스위칭을 할 때는 프로세스들의 작업 위치를 유지한 채 실행할 수 있어야 한다.
이를 위해서 운영체제는 프로세스들의 작업위치와 상태 정보를 저장하는 별도의 메모리 공간이 존재하는데, 그 메모리 공간이 PCB이다.
운영체제는 프로세스들을 관리하기 위해 운영체제 내의 커널 메모리 영역에 PCB라는 공간을 둔다. PCB는 각 프로세스가 생성될 때마다 하나씩 공간을 할당하며, 각 프로세스의 상태 정보와 관련된 데이터를 저장한다.
이 PCB에는 프로세스가 어디까지 실행했는지 정보와 프로그램의 상태, 프로세스마다 할당된 자원 정보, 프로세스 식별자 등등 여러가지 프로세스들의 정보가 저장되어 있다.
▶PCB에 저장되는 데이터◀
① Process ID(PID) : 프로세스의 고유 식별 번호
② PC(Program Conter)와 SP(Stack Pointer) : 프로세스가 어디까지 실행 됐는지 프로세스의 실행 주소를 나타냄
③ Scheduling info(프로세스 상태) : 프로세스 상태는 생성, 실행 가능, 실행, 대기, 종료로 나눌 수 있으며 하나의 상태 값을 가진다
④ Memory info(메모리 사이즈 limit) : 전체 프로세스의 할당된 메모리 크기
⑤ 레지스터 상태
⑥ 기타 등등..
컨텍스트 스위칭 세부 동작 과정
컨텍스트 스위칭의 동작과정은 3가지로 나눌 수 있다.
1. 현재 실행 중인 프로세스의 상태 정보 저장
현재 실행 중인 프로세스의 상태와 실행 정보를 레지스터 상태, 프로그램 카운터(PC), 스택 포인터(SP) 등에 넣어 PCB에 저장한다
2. 다음으로 실행할 프로세스의 상태 정보 복원
교체할 프로세스의 PCB에서 저장된 상태 정보를 레지스터, PC, SP 등에 업데이트 한다
3. 실행 중인 프로세스 교체
현재 실행 중인 프로세스가 실행 중지되고, 다음으로 실행할 프로세스를 CPU가 처리한다
프로그램을 여러 개 실행할 때 우리가 컴퓨터 화면으로 보기엔 프로그램 모두가 각각 동시에 실행되고 있는 것처럼 보이지만 실제 컴퓨터에선 동시에 실행되는 게 아니라, 아주 빠르게 전환하면서 실행한다.
매우 빠르게 전환하다 보니 동시에 실행되는 것처럼 보일 뿐이다.
이때, 프로세스를 교체하면서 실행시킬 때는 각 프로세스의 상태를 그대로 유지하면서 실행시켜야 하기 때문에, 프로세스의 정보와 상태를 PCB에서 읽어온 뒤 이어서 실행 시킨 다음, 교체될 때 어디까지 실행됐는지 저장하는 과정이 필요하다.
-
프로세스1과 프로세스2를 동시에 실행하려 한다. 그러므로 프로세스1과 프로세스2가 서로서로 교체되는 컨텍스트 스위칭 과정이 필요하다.
-
프로세스1에서 프로세스2로 스위칭 될 때, 프로세스1의 PC와 SP 정보를 PCB에 저장한다. PC는 다음 실행할 코드의 주소 값을 가지고 있고, SP는 코드의 함수가 어디까지 호출되어 있는지 위치 값을 가지고 있다(PC와 SP 값을 잘 읽고 업데이트할 수 있다면, CPU는 프로세스가 어디까지 실행했는지 상태와 위치를 알 수 있다)
-
기존에 저장되어 있던 프로세스2의 PC와 SP 값을 PCB에서 꺼내온 뒤 CPU의 레지스터에 PC와 SP 값을 업데이트 한다.
-
CPU는 업데이트 된 PC와 SP를 읽어 프로세스2를 실행한다.
-
다시 2번으로 되돌아가 PC와 SP 값을 저장하고 업데이트하는 과정을 프로세스들이 종료될 때까지 반복한다.
컨텍스트 스위칭은 운영체제의 핵심적인 기능이고, 굉장히 빈번하게 일어난다. 그러나 컨텍스트 스위칭이 너무 많이 발생되면 오버헤드가 발생할 수 있다.
오버헤드 현상을 막기위해선 컨텍스트 스위칭이 빠르게 수행되어야 한다. 따라서 컨텍스트 스위칭 시스템은 어셈블리어(기계어)로 작성되어 있다.
C 언어같은 고급언어보다 저급언어로 작성되면 컴퓨터가 읽는 속도가 빠르기 때문이다. 컴퓨터 입장에서는 어셈블리어를 읽어서 작업을 처리하는 것이 최적화 시간이 빠른 것이다.
운영체제는 이 밖에도 컨텍스트 스위칭의 성능을 최적화하기 위해 다양한 기법과 알고리즘을 사용한다.
혹시 프로세스에 대해서 더 알고싶다면 아래 글을 참고해보자
일반적인 프로세스의 컨텍스트 스위칭 동작 정리
- 현재 실행 중인 프로세스의 상태 저장:
- 현재 CPU에서 실행 중인 프로세스의 레지스터 상태, 프로그램 카운터(PC), 스택 포인터(SP), 상태 레지스터 등의 정보를 해당 프로세스의 PCB(Process Control Block)에 저장한다.
- 프로세스의 실행 컨텍스트(상태)를 저장하여 나중에 동일한 프로세스를 재개할 수 있도록 한다.
- 새로운 프로세스의 상태 로드:
- 스케줄러에 의해 선택된 새로운 프로세스의 PCB에서 저장된 상태를 로드한다.
- 이 단계에서는 새로운 프로세스의 레지스터 상태, 프로그램 카운터, 스택 포인터 등을 현재 CPU에 로드하여 새로운 프로세스가 실행될 준비를 한다.
- 가상 메모리 및 페이지 테이블 업데이트:
- 컨텍스트 스위칭이 일어날 때, 현재 실행 중인 프로세스가 사용한 가상 메모리와 페이지 테이블 정보를 저장하고, 새로운 프로세스가 사용할 가상 메모리와 페이지 테이블 정보로 업데이트된다.
- 이 단계는 가상 메모리를 사용하는 운영 체제에서 특히 중요하다.
- CPU 제어권 반환:
- 새로운 프로세스의 상태가 로드되면 CPU 제어권이 새로운 프로세스에게 반환된다.
- 이제 새로운 프로세스가 실행되며, 이전에 저장된 프로세스의 상태는 나중에 다시 스케줄러에 의해 선택되어 실행될 때까지 보존된다.
컨텍스트 스위칭은 프로세스 또는 스레드 간의 전환이며, 이러한 동작은 멀티태스킹 환경에서 여러 작업이 동시에 실행될 수 있도록 해준다. 하지만 이전에 말한 것과 같이 컨텍스트 스위칭 자체에는 오버헤드가 발생하기 때문에 효율적인 스케줄링과 최적화가 필요하다.
댓글남기기