Context Switching 이란?
- 개발자라면?/OS 개념
- 2022. 9. 19.
Context Switching 이란?
OS (Operating System) 의 Scheduler 가 우선순의에 의해 기존에 실행되고 있는 Porcess 를 미루고 새로운 Process 로 교체해야할 때 Process 상태 값을 교체하는 작업 (Process 기준의 설명)
CPU (Control Processing Unit) 가 어떤 Process 를 실행하고 있을 때, Interrupt 요청에 의해 OS (Operating System) 의 Scheduler 가 더 높은 우선순위의 Proecss 를 실행해야 한다면 Scheduler 가 Register 에 저장된 기존 Process 정보나 상태를 Kernal 내부에 존재하는 PCB (Process Control Block) 에 저장하고, 새 Process 의 정보, 상태를 PCB 에서 가져와 교체하는 작업
* CPU 는 Context Switching 할 때 다른 작업을 할 수 없다. 따라서 잦은 Context Switching 은 Overhead 가 발생해 효율이 떨어진다
Context 란?
OS 의 Context 란 CPU 가 해당 Process 를 실행하기 위한 Process 의 정보를 의미한다
Context 는 Process 의 PCB 에 저장된다
PCB 의 정보를 Context Switching 시 읽어 CPU 가 수행을 멈춘 Process 를 다시 불러와 이어서 진행할 수 있다
PCB (Process Control Block): Process 가 저장되는 곳
특정 Process 를 관리할 필요가 있는 정보를 포함하는 OS Kernal 의 자료구조
PCB 의 저장 정보
- Process number
- Process state: new, ready, running, waiting, terminated
- Program counter: Process 가 다음에 실행할 명령어 주소 (코드 한줄한줄을 가리키는 주소 register)
- Register: Stack, Accumulator 등
* TCB (Thread Control Block)
Context Switching 은 언제 발생하나?
Interrupt
CPU 가 Program 을 실행하고 있을 때, 예외상황이 발생하여 처리가 필요할 경우에 CPU 에게 알려 처리할 수 있도록 하는 것
* 우선적으로 처리해야할 일이 발생하였을 때 그것을 처리하고 원래 동작으로 돌아옴
Context Switching 을 발생시키는 Interrupt
- 입/출력을 요청할 때
- CPU 사용시간이 만료되었을 때
- 자식 Process 를 만들 때
- Interrupt 의 처리를 기다릴 때
Context Switching 의 단점
잦은 Context Switching 시 Overhead 로 인한 성능 저하
* Overhead: 사용된 시간과 메모리의 양
위 그림처럼 Context Switching 에는 기존 Process 정보는 PCB 에 저장하는 과정, 새로운 Process 의 정보를 PCB 에서 불러오는 과정이 필요하다. 이 때 CPU 는 다른 작업을 할 수 없고, Context Switching 이 잦다면 이로 인해 성능이 저하된다.
Context Swtiching 속도 비교
Process 보다는 thread 가 빠르다
* 자세한 내용은 아래 링크 참고(이전 글)
용어
Kernal: OS 중 항상 필요한 부분의 전원만 켜짐과 동시에 메모리에 올리고
그렇지 않은 부분은 필요할 때만 메모리에 올려서 사용하는데
이 때 메모리에 상주하는 OS 의 부분을 Kernal 이라 함
* OS 도 SW 라서 메모리에 올라가야 하지만 규모가 큰 Program 이라서 모두 올리면
메모리의 낭비가 심하기 때문에 Kernal 로 분리해 둔 것!!
Scheduler: 어떤 Process 에게 자원을 할당할 지 순서와 방법을 결정하는 OS Kernal 의 모듈
Register: n-bit의 정보를 저장할 수 있는 고속도의 기억장치를 말한다.
* CPU에서는 외부 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하고
이동하는 고속도의 기억장치로 사용된다.
* 참고: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=cjsksk3113&logNo=222249216316
참고
https://www.crocus.co.kr/1364
https://agh2o.tistory.com/12
https://beststar-1.tistory.com/26
https://jeong-pro.tistory.com/93?category=793347
https://prepinsta.com/operating-systems/context-switching/
https://jhnyang.tistory.com/7
'개발자라면? > OS 개념' 카테고리의 다른 글
Process(프로세스)와 Thread(쓰레드)의 개념 & 차이 (0) | 2022.09.16 |
---|