이번에는 프로세스 스위치에 대해서 알아보겠습니다.
Process Switch
쉽게 말하면 CPU가 처리하는 프로세스가 A에서 프로세스 B로 바뀌는 행위를 프로세스 스위치라고 합니다.
이전에 프로세스의 정의에서 다뤘던 Dispatcher가 프로세스 스위치를 행합니다.
이전 글에서 우리는 프로세스 컨텍스트를 배웠습니다. 여기서 프로세스 스위치와 비슷한 개념인 Mode change가 있습니다. 이것에 대해 알아보고, 이 둘의 차이점에 대해 다뤄봅시다.
Modes of Execution
우선 그 전에, 프로세스의 실행 모드에 대해서 알아보겠습니다. 프로세스의 실행 모드는 유저모드와 시스템 모드가 있습니다.
유저모드는 이전 글에서 다뤘던 User Context와 System Context에 대응되는 개념이라고 생각해도 됩니다.
User Context에 해당한다면 User Mode, System Context에 해당한다면 System Mode라고 칭합니다.
즉, 누군가에 의해 짜여진 프로그램을 수행하는 단계라면 User Mode이고, 사용자가 짠 코드에서 커널 함수인 fork, exec같은 함수를 호출한다면 OS에 의해서 실행되므로 이 때는 System Mode 또는 Kernel Mode, Supervisor Mode라고 불립니다.
Mode Change
User Mode에서 System Mode로, System Mode에서 User Mode로 전환되는 것을 mode change라고 합니다.
Process Switch v.s. Mode change
다소 헷갈릴 수 있는 이 두 개의 개념은 사실 완전히 다른 뜻입니다. 아래의 그림을 보면서 다시 생각해봅시다.
보시다시피 mode change는 하나의 프로세스를 cpu가 수행하는데, user context에서 system context로 또는 그의 역으로 진행하는 과정을 의미하고, context switch는 cpu가 현재 처리하고 있는 프로세스에서 다른 프로세스로 넘어가는 과정입니다.
Process Switch가 일어나는 이유
1. 프로세스의 종료
CPU가 현재 처리 중인 프로세스의 작업을 모두 끝마치고 프로세스가 run 상태에서 terminated 상태로 바뀌었다면, CPU는 다른 프로세스를 처리하기 위해 process switch를 진행합니다.
2. 시스템 콜의 호출
예를 들어, 입출력을 기다리는 요청이나 파일을 읽고 쓰는 데에는 입출력 처리시간이 있으므로, 그동안 다른 프로세스를 처리하기 위해서 process switch를 진행합니다.
3. time slice 만료
time sharing을 사용한다고 했을 때, 각 프로세스마다 CPU가 처리하기 위한 정해진 시간이 있습니다. 이를 time slice 혹은 time quantum이라고 하며, 하나의 프로세스에 대해서 time slice만큼 소요됐다고 한다면 현재 처리 상태에서 잠시 멈추고 다른 프로세스를 처리하게 됩니다. 이러한 과정에서 process switch가 일어납니다.
4. 입출력 Interrupt
아직 Interrupt에 대해서 배우지 않았지만, 간단하게 설명해보겠습니다. CPU가 A의 프로세스를 처리하고 있는데, A보다 우선순위가 높은 프로세스 B가 ready queue에 들어왔다면, 프로세스 B를 우선적으로 처리하기 위해 A를 잠시 미뤄두고 B를 먼저 처리하게 되는데 이러한 순간에 process switch가 일어나는 것입니다.
후에, Interrupt에 대한 개념은 더욱 자세하게 다룰 예정입니다.
이러한 Process Switch는 어떤 과정에 의해서 진행될까요?? 한번 자세히 알아봅시다. 여기서 중단될 프로세스를 A, 이제 막 시작할 프로세스를 B라고 가정하고 설명하겠습니다.
Process Switch가 진행되는 과정
1. 프로세스 A의 PC와 다른 레지스터의 값들을 저장
2. 저장된 값을 PCB에 갱신
3. 프로세스 A를 ready or suspend or block 등 적절한 상태로 변경
4. ready queue에 있는 프로세스 중 적절한 프로세스를 선택(프로세스 B)
5. 선택된 process의 상태를 run으로 변경
6. 프로세스 B의 PCB에 메모리 주소부분을 설정
7. 프로세스 B의 context를 메모리에 로드
'CS > OS' 카테고리의 다른 글
[운영체제] 4-2. 쓰레드 정의 (0) | 2023.09.27 |
---|---|
[운영체제] 4-1. 프로세스 종료, IPC (0) | 2023.09.27 |
[운영체제] 3-2. 프로세스 생성 (0) | 2023.09.23 |
[운영체제] 3-1. 프로세스 컨텍스트 (0) | 2023.09.23 |
[운영체제] 2-4. PCB (0) | 2023.09.12 |