프로세스 스위칭에 다가가기 앞서, Dual mode operation 을 복습해보자.
User mode 는 유저 프로그램이 실행되는 모드였고, Kernel mode 는 조금 더 높은 권한을 가지는, 프로세서의 기능을 완전히 제어할 수 있는 모드였다. (참고로 Kernel은 영어로 알맹이, 핵심 뭐 이런 뜻이다.) - 정말 간단한 복습 끝
두가지 모드를 복습한 이유는.. mode switching 없이는 process switching 이 일어나지 않기 때문이다. mode switching은 말그대로 mode 가 바뀔때마다 일어난다. User mode 에서는 ① external interrupt (timer, I/O interrupt 와 같이 진행 중인 프로세스와 관계없는), ② Internal Trap (exception), ③ System call 가 Kernel mode 로의 이동을 야기한다.
mode switching 이 일어날 때마다 아래와 같은 일이 일어난다.
1. 현재 프로세서의 상태를 저장한다.
2. PC (program counter) 를 알맞은 곳에 설정한다.
3. Kernel mode 로 이동하여 권한이 필요한 명령을 내린다.
4.mode switching 을 할 때에는 PCB 의 일부, process state (process context)만 저장하면 되고, Image 는 정리할 필요가 없다. 아무튼 1, 4번 과정에서 storing-restoring 을 하는 오버헤드가 존재한다.
Process switching 은 mode switching 이 무조건 일어나야 발생한다. scheduling flag 가 1이라면, mode switching 이후에 반드시 process switching 이 일어난다. 하지만 반대로 process switching 이 일어났다고 해서 mode switching 이 일어나지는 않는다. mode switching 만 일어나고 다시 원래 실행 중이던 process 로 돌아갈 수도 있다.
그렇다면 Process switching 이 일어날 때 생기는 일을 순서대로 살펴보자.
1. 프로세서의 상태 저장
2. 현재 프로세스의 상태를 바꿔줌
3. PCB 를 올바른 큐로 이동
4. 앞으로 실행할 프로세스를 고름
5. 그 PCB 를 올바른 큐로 이동
6. 그 PCB 를 running 상태로 바꿔줌
7. 필요한 memory-management 구조를 업데이트해줌 : 이 과정에서 memory, cache, RAM 등을 모두 업데이트해줘야 하기 때문에 엄청난 오버헤드가 발생한다.
8. 그 프로세스의 context 를 restore함
--> 반드시 mode switch가 선행되어야하기 때문에 mode switch보다 오버헤드가 크다. 아래 그림에서 붉은색 화살표 (두번째 스위칭) 이 Process switching 을 나타내는데, 동그라미로 표시한 것과 같이 mode switching 이 필연적으로 일어나야함을 볼 수 있다.
mode switch든 process switch든 스위칭을 하는 동안에는 시스템이 아무일도 할 수 없다. 이것을 'Switching Overhead' 라고 부르는데, 이건 하드웨어에 따라 그 정도가 바뀐다. OS 가 복잡할수록 이 오버헤드가 커지기 마련이므로, OS를 복잡하지 않게 설계하는 것이 중요하다.
개인 공부 정리용으로 작성한 글입니다. 틀린 부분이 있을 수 있으니 참고용으로만 사용해주세요. 틀린 부분은 댓글로 알려주세요.♥
'컴퓨터 COMPUTER > Linux 리눅스' 카테고리의 다른 글
9. [Process Communication] : 프로세스들은 어떻게 소통할까 (0) | 2019.01.31 |
---|---|
8. [Execution of the Operating System] : OS 가 움직이는 방법 (0) | 2019.01.30 |
6. [Process State, Scheduling] : 프로세스의 상태와 스케쥴링 (0) | 2019.01.30 |
5. [Processes] : 프로세스란 무엇인가 (0) | 2019.01.29 |
4. [Virtual Machine(VM)] : 가상머신이란 무엇인가 (0) | 2019.01.29 |