×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,485,639명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)

컨택스트 스위칭(Context Switching)이란?



위의 그림을 통해 설명하고자 한다.


프로세스 P0와 P1이 존재할 때, P0가 CPU를 점유중(excuting)이었고 P1이 대기중(idle)이었는 상태이다가 얼마후에는 P1이 실행이 되고 P0가 대기가 되는 상태가 찾아온다.


이때 P0가 실행중에서 대기로 변하게 될 때는 지금까지 작업해오던 내용을 모두 어딘가에 저장해야하는데 그것이 PCB라는 곳이다.

즉, P0는 PCB에 저장해야하고 P1이 가지고 있던 데이터는 PCB에서 가져와야한다. 


이러한 과정 즉, P0와 P1이 서로 대기<->실행을 번갈아가며 하는 것을 컨텍스트 스위칭이라고 한다.



컨텍스트 스위칭(Context Switching)을 정리하자면


CPU가 어떤 프로세스를 실행하고 있는 상태에서 인터럽트에 의해 다음 우선 순위를 가진 프로세스가 실행되어야 할 때 기존의 프로세스 정보들은 PCB에 저장하고 다음 프로세스의 정보를 PCB에서 가져와 교체하는 작업을 컨텍스트 스위칭이라 한다.

이러한 컨텍스트 스위칭을 통해 우리는 멀티 프로세싱, 멀티 스레딩 운영이 가능하다.





컨텍스트 스위칭 단점


위의 그림을 보면 P0가 Excute에서 idle이 될 때 P1이 바로 Excute가 되지 않고 idle을 좀 더 하다가 Excute가 된다.


그 이유는 P0 상태를 PCB에 저장하고 P1 상태를 PCB에서 가져와야 하기 때문이다.


위 과정에서 PCB를 저장하고 가져올때는 CPU가 아무런 일도 하지 못하게 된다.


따라서 컨텍스트 스위칭이 너무 잦으면 오버헤드가 발생하여(비용이 높아) 성능이 떨어진다. 





컨텍스트 스위칭 인터럽트


컨텍스트 스위칭은 다음과 같은 상황에서 일어난다.


1. I/O interrupt

2. CPU 사용시간 만료

3. 자식 프로세스 Fork

등등이 있다.


이러한 컨텍스트 스위칭이 일어날 때 다음번 프로세스는 스케줄러가 결정하게 된다.


즉, 컨텍스트 스위칭을 하는 주체는 스케줄러이다.





스레드 VS 프로세스(In Context Switching)


이때 스레드가 프로세스보다 빠른 이유도 컨텍스트 스위칭이 한몫한다.


스레드는 컨텍스트 스위칭 될때 text, data, heap 영역은 프로세스 것이기에 자신의 PCB에는 스택 및 간단한 정보만 저장하기에 프로세스 컨텍스트 스위칭 보다 훨씬 바르다.





PCB(Process Control Block)



출처 : https://blog.naver.com/chanheeis/221269778250


이전에 PCB에 프로세스 정보를 저장한다 하였는데 PCB는 프로세스의 정보를 저장하는 Block을 의미한다.


이때 PCB에 저장되는 정보는 프로세스 번호, 포인터, 프로세스 상태, 레지스터, 프로그램 카운터(코드 위치) 등등이 저장된다.