1. Context Switching 이란?
- 어떤 프로그램을 실행하기 위해서는 해당 프로그램을 스케줄러에 등록한다.
- 스케줄러에 등록된 프로그램을 프로세스 A라고 하자.
- 프로세스 A의 상태가 ready에서 running으로 전환되면서 소스코드가 읽히면서 프로세스 메모리에 차곡차곡 쌓이게 된다.
- 이때, 다른 프로그램인 프로세스 B를 실행하려고 한다.
- 프로세스 A는 block 또는 ready 상태로 변하고, 프로세스 B의 상태가 running으로 바뀌게 된다.
- 프로세스가 바뀌는 이 과정을 컨텍스트 스위칭이라고 하는데 , 이 과정에서 PC와 SP가 중요한 역할을 한다.
2. 어떤 과정을 거칠까?
- 간단한 예제를 이용하여 컨텍스트 스위칭이 어떻게 진행되는지 알아보자.
int global_data1;
int global_data2 = 1;
int main()
{
int data;
data = (int *)malloc(sizeof(int));
*data = 1;
printf("%d\n", *data);
return 0;
}
- 이와 같은 프로그램이 있으며, 해당 프로그램을 프로세스 A와 프로세스 B라고 가정해보자.
a) 프로세스 A를 실행한다.
b) 프로세스 B를 실행하기 위해서 거치는 과정 (PCB)
- PCB (= Process Control Block)
- 프로세스 A를 실행시키는 과정에서 프로세스 B로 스위칭한다고 할 때, 운영체제는 PCB라는 메모리 안에 현재 PC와 SP의 값을 저장해 놓고 프로세스 B로 스위칭을 하게 된다.
c) 프로세스 B를 실행한다.
- PCB에 프로세스 A의 현재 PC와 SP 값을 저장한 뒤, 프로세스 B를 실행한다.
d) 다시 프로세스 A로 스위칭 한다면?
- 리턴 주소값이 0004h 인 코드까지 프로세스 B를 실행한 상태에서 다시 프로세스 A로 스위칭한다고 해보자.
- 먼저, 프로세스 B의 현재 PC와 SP값을 PCB에 저장한다.
- 운영체제에서 프로세스 A의 PCB값을 확인한 후, PC와 SP에 해당 값을 덮어 씌운다.
- 이 과정이 완료되면, 프로세스 B는 block상태가 되고 프로세스 A는 running상태가 되어 다시 실행된다.
- 이전에 프로세스 A에서 실행됐던 코드들은 프로세스 A의 메모리에 계속 남아있기 때문에 걱정하지 않아도 된다.
- 위의 그림에서는 이해를 돕기위해 각 프로세스마다 PC와 SP를 저장하는 공간을 따로 표현하였다.
- 하지만, PC와 SP는 CPU의 레지스터로써 모든 프로세스가 공유하여 사용하는 메모리다. 다시말해, 하나밖에 없다는 것을 인지하자.
3. 요약정리
- PC와 SP는 CPU에서 관리하는 메모리로, 하나만 존재하고 현재 실행중인 프로세스의 실행과정을 추적하는 역할을 한다.
- CPU는 현재 실행중인 프로세스의 실행정보(PC, SP 등)를 CPU 내부 레지스터에 기록한다.
- OS가 프로세스를 관리하기 위한 목적으로 프로세스가 교체되기 전에, 프로세스의 실행정보를 PCB에 저장한다.
- 컨텍스트 스위칭이 발생하면 교체될 프로세스의 실행정보를 PCB에 저장하고, 새롭게 교체된 프로세스의 PCB를 OS가 확인한다.
- 교체된 프로세스의 PCB 정보를 토대로, OS는 CPU에게 어디서부터 작업을 하면 되는지 알려준다.
a) PCB의 역할
- PCB는 Process Control Block의 약자다.
- PCB 내부에는 프로세스 ID, 레지스터 값(= PC, SP), 스케줄링 정보(= 프로세스 상태값), 메모리 크기 등이 저장된다.
- 쉽게 설명하자면, PCB는 현재 실행중인 프로세스의 상태 또는 진행과정을 캡쳐 및 구조화하여 저장하는 역할을 한다.
b) PCB의 구조
- 아래의 그림은 리눅스에서 PCB의 구조를 그림으로 구현한 예시다. 참고하자.
c) 알아두자.
- 실제로 CPU에서는 셀 수 없이 많은량의 컨텍스트 스위칭이 발생한다. 이런 경우, 과도한 오버헤드(부하)가 CPU에 발생하게 되면서 전체적인 CPU의 속도가 느려질 수 있다.
- 이를 방지하기 위해서, 대부분 컨텍스트 스위칭의 주요한 기능(PCB, PC, SP의 처리과정)은 대부분 어셈블리 언어로 작성되어 있다.
'컴퓨터공학기초 개념 > 운영체제' 카테고리의 다른 글
19. 프로세스 - IPC 기법(파일, 파이프) (0) | 2021.04.22 |
---|---|
18. 프로세스 - IPC의 개념 (0) | 2021.04.21 |
16. 프로세스 구조(4) - BSS와 Data (0) | 2021.04.15 |
15. 프로세스 구조(3) - Heap (0) | 2021.04.14 |
14. 프로세스 구조(2) - Stack (0) | 2021.04.13 |
댓글