실행해야 하는 프로그램은 많지만 사용할 수 있는 CPU 자원은 한정적이기에 이를 해결하기 위한 방안이 필요하다.
프로세스들의 CPU 쟁탈전, 그것은 Context Switching의 무수한 반복 안에서 일어난다. Context Switching이 무엇인지 알아보자.
Context Switching
실제 물리적인 CPU는 한정적이지만, 일반적으로 여러 프로그램이 동시에 실행되는 경우가 많다. 이렇게 프로그램들은 어쨌든 CPU의 자원을 사용해야 하는데, 모든 프로그램들이 원하는만큼 자원을 사용할 수 없으므로 운영체제에서 사용되는 대표적인 기법이 Time sharing이다.
예를 들어 1개의 CPU를 가진 사용자가 A, B, C 3개의 프로그램을 동시에 실행하고 싶다고 하면 단순하게 하나의 프로그램을 1ms씩 수행 후 다른 프로그램이 수행하도록 하는 방법이 Time sharing 기법인 것이다. 워낙 작은 시간 단위기 때문에 사용자는 마치 프로그램이 계속해서 CPU에 의해 실행되는 것처럼 느껴지게 된다.
이때 프로그램 A가 멈추고 B, C가 실행된 후 다시 A가 실행될 때 이전에 멈춘 부분부터 다시 시작해주도록 하는 메커니즘이 바로 Context Switching이다.
Context
운영체제에서의 Context는 프로세스와 관련된 정보들의 집합을 의미한다. 그 정보들은 아래들과 같다.
- User-level context: text, data, stack, heap, ...
- System-level context: PCB
- Register context: CPU register
이때, User-level context와 System-level context는 메모리에 위치하고, Register context는 CPU에 남아있다. 따라서 Register context의 경우 따로 보관하지 않은 채로 다른 프로세스가 들어와 실행되면 사라지게 된다. 따라서 saving을 해주어야 한다.
Context save area
그렇다면 register context는 어디에 저장할까? 위에서는 saving 과정을 통해 메모리에 저장한다고 언급했지만, 정확하게는 이전 프로세스 포스트에서 알아본 PCB에 저장되어 있다. (PCB는 일반 사용자가 접근하지 못하는 보호된 메모리 영역에 존재한다.)
Context Switching 과정
Context Switching은 크게 두 가지 과정으로 이루어지는데, saving과 restoring이다.
- Context saving: 프로세스가 CPU를 내놓고 올 때, 프로세스의 register context를 메모리에 저장하는 과정
- Context restoring: 실행하는 과정에서 프로세스의 register context를 다시 로드하는 과정
- Context switching: 프로세스 P1를 saving하고 P2를 restore하는 과정
Context switch time
Context switching이 일어나는 시간은 그저 오버헤드이기 때문에, 최대한 적을수록 좋다. 그리고 이 시간을 줄이는 데에는 하드웨어 성능이 큰 비중을 차지한다. 과정을 timestamp로 간단하게 나타내면 아래와 같다.
Reference
'CS 지식 > Operating System' 카테고리의 다른 글
[OS] Scheduling Schemes (스케줄링 기법 종류) (2) | 2024.01.23 |
---|---|
[OS] Process Scheduling (프로세스 스케줄링) (0) | 2024.01.09 |
[OS] IPC (Inter-Process Communication)와 RPC (Remote Procedure Call) (0) | 2023.12.27 |
[OS] Process (프로세스) (0) | 2023.12.20 |
[OS] Interrupt, Trap, System Call (인터럽트, 트랩, 시스템 콜) (2) | 2023.09.20 |