본문 바로가기
컴퓨터 COMPUTER/Linux 리눅스

7. [Process Switching] : 프로세스 스위칭, 프로세스 순서매기기

by 매실이 maesiri 2019. 1. 30.

프로세스 스위칭에 다가가기 앞서, 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를 복잡하지 않게 설계하는 것이 중요하다.





개인 공부 정리용으로 작성한 글입니다. 틀린 부분이 있을 수 있으니 참고용으로만 사용해주세요. 틀린 부분은 댓글로 알려주세요.♥


반응형