Context Switching이란?
CPU가 실행하는 process를 바꾸는 과정을 context switching이라고 한다.
CPU는 여러가지 프로세스를 스케쥴러에 의해 번갈아가면서 실행한다.
예를들어서 현재 CPU가 process A를 실행하고 있는데 어느정도 시간이 흐르고 이제 스케쥴러에 의해 process B를 실행할 차례라면 process A에서 process B로 넘어가야 하는데 그냥 넘어갈 수는 없다.
왜냐하면 process A가 어디까지 실행되었는지를 알아야 다시 process A가 실행될 차례가 왔을 때 이어서 실행할 수 있기 때문이다.
모든 프로세스는 PCB(Process Control Block)라고 프로세스의 상태를 저장하는 구조체를 가지고 있다.
PCB에는 process id와 priority 등을 포함해서 여러가지 정보가 저장되어있지만 여기서는 Stack Pointer와 Program Counter로만 context switching을 다루겠다.
Program Counter란 프로세스의 코드영역에서 어디까지 실행되어있는지를,
Stack Pointer란 프로세스의 스택영역에서의 포인터를 나타낸다. (이 부분을 잘 모른다면 프로세스 구조를 먼저 검색해보고 오자.)
위 그림에서 process A의 Program Counter와 Stack pointer가 각각 주황색 화살표까지 실행되었고 이제 CPU가 process B를 실행할 차례라면 process A의 PCB에 현재까지 실행된 Program Counter와 Stack Pointer를 저장한 후에 process B를 실행한다.
process B의 경우도 A와 마찬가지로 일정시간이 지나고 스케쥴러에 의해 다른 process로 바뀌어야하면 process B의 PCB에 Program Counter와 Stack Pointer를 저장한 후에 바뀌게 된다.
시간이 흘러 다시 process A의 실행차례가 되었다면 자신의 PCB를 확인후에 PCB의 정보(PC와 SP 등)를 CPU의 레지스터에 넣으면 예전에 실행한 다음 부분부터 다시 이어서 실행한다.
'운영체제' 카테고리의 다른 글
운영체제 가상메모리#1 (0) | 2020.12.13 |
---|---|
운영체제 파이썬의 gil과 멀티쓰레딩 (0) | 2020.12.12 |
운영체제 프로세스 구조 (0) | 2020.11.25 |
운영체제 인터럽트란? (0) | 2020.11.24 |
운영체제 프로세스의 상태 (0) | 2020.11.21 |