CS/Operating System
[Operating System] Context Switching
hanseongbugi
2024. 4. 6. 17:13
Context Switching (컨텍스트 스위칭)?
- CPU가 현재 작업중인 프로세스에서 다른 프로세스로 넘어갈 때, 이전의 프로세스 정보를 PCB에 저장하고 새롭게 실행할 프로세스의 정보를 PCB에서 읽어와 레지스터에 적재하는 과정을 말한다.
- 보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생
- 즉, 프로세스가 Ready → Running, Running → Ready, Running → Waiting처럼 상태 변경 시 발생!
- Process는 하나이상의 Thread로 동작하기 때문에 Context Switching의 최소 단위는 TCB이다.
Context?
- 프로그래밍에서 Context는 (동작, 작업들의 집합)을 (정의, 관리, 실행)하도록 하는 (최소한의 상태, 재료, 속성)을 포함하는 (객체, 구조체, 정보)이다.
- Process의 경우 현재 프로세스가 중단 되었을 때, 중단된 시점 부터 다시 프로세스를 실행하기 위한 정보를 Context라고 부른다.
- 이러한 Process의 Context 정보는 PCB(Proccess Control Block)이라는 구조체에 저장된다.
Scheduler
- CPU Scheduler라고 불리는 스케줄러는 Ready Queue에 존재하는 프로세스들을 어떤 순서로 실행시킬지 결정한다.
- 스케줄링은 scheduler라는 별도의 프로세스에 의해 수행되며, 모든 자원이 골고루 사용될 수 있도록 디자인되어 있다.
Context Switching 과정
- 요청 발생 : 인터럽트나 트렙에 의해서 컨텍스트를 바꿔야 한다는 요청이 들어옴
- 예) I/O 입출력, 예외, 시스템 콜 등
- PCB 에 프로세스 정보 저장 : 기존에 실행중이던 프로세스 P0 와 관련된 정보들을 PCB0 에 저장함
- running → waiting
- 운영체제는 새롭게 실행할 프로세스 P1 에 대한 정보를 해당 PCB 에서 가져와 CPU 레지스터에 적재함
- 요청 발생 : 인터럽트나 트렙에 의해서 컨텍스트를 바꿔야 한다는 요청이 들어옴 - P1의 상태를 PCB1에 저장
- PCB0에 저장된 P0의 상태를 불러와 복구한다.
- P0 실행
Process Context Switching & Thread Context Switching
- 프로세스는 하나 이상의 스레드를 포함한다.
- 이 스레드들은 고유한 Stack영역의 메모리와 고유한 registers를 할당 받으며 Heap영역의 메모리에서 선언된 데이터는 서로 공유한다.
- 동일한 프로세스 속에서 thread context switching이 발생할 경우 processor는 stack영역의 주소와 registers 주소를 포함한 thread의 context 정보만을 변경하면 된다.
- 하지만 process context switching이 발생할 경우 processor는 thread의 context뿐만 아니라 process의 context까지 모두 변경해야 한다.
Context Switching Overhead
- overhead는 과부하라는 뜻으로 보통 안좋은 말로 많이 쓰인다.
- 프로세스 작업 중에는 Overhead를 감수해야 하는 상황이 있다.
- 프로세스를 수행하다가 입출력 이벤트가 발생해서 대기 상태로 전환시킴
- 이때, CPU를 그냥 놀게 놔두는 것보다 다른 프로세스를 수행시키는 것이 효율적
- CPU에 계속 프로세스를 수행시키도록 하기 위해서 다른 프로세스를 실행시키고 Context Switching 하는 것
- CPU가 놀지 않도록 만들고, 사용자에게 빠르게 일처리를 제공해주기 위한 것이다.
출처
https://github.com/gyoogle/tech-interview-for-developer
https://velog.io/@sweet_sumin/PCBTCB