개발

Context Switch

Ridiss 2023. 12. 29. 10:40

 

- 하나의 CPU는 동일한 시간에 하나의 작업만 수행할 수 있기 때문에, 여러 프로세스를 동시에 실행할 수 없음

- 하나의 CPU에서 여러 프로세스(실제는 Thread를 처리)를 동시성으로 처리하기 위해서는 한 프로세스에서 다른 프로세스로 전환해야하는데 이것을 Context Switch라고 함

 

Context

- 프로세스 간 전환을 위해서 이전ㅇ 어디까지 명령을 수행했는지 CPU Register에는 어떤 값이 저장되어 있는지 정보가 필요함

- Context는 CPU가 해당 프로세스를 실행하기 위한 프로세스의 정보를 의미

- 이 정보들은 운영체제가 관리하는 PCB라고 하는 자료구조의 공간에 저장됨

 

PCB(Process Control Block)

-  운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보를 담는 커널 내의 자료구조

- Context Switching은 CPU가 프로세스 간 PCB정보를 교체하고 캐시를 비우는 과정

 

TCB(Thread Control Block)

-  Thread 상태정보를 저장하는 자료구조이며 PC와 Register Set(CPU정보) 그리고 PCB를 가리키는 포인터를 가짐

- 스레드가 하나 생성될 때마다 PCB내에서 TCB가 생성되며 Context Switching이 발생하면 기존의 Thread TCB를 저장하고 새로운 Thread의 TCB를 가져와 실행한다.

 

Context Switching 조건

- 실행 중인 프로세스에서 I/O 호출이 발생해 해당 I/O작업이 끝날 때 까지 프로세스 상태가 running에서 waiting 상태로 전이된 경우

- RR(Round Robin) 스케줄링 등 운영체제의 CPU 스케줄러 알고리즘에 의해 현재 실행중인 프로세스가 사용할 수 있는 시간 자원을 모두 사용했을 때 해당 프로세스를 중지하고 (Ready 상태로 전이) 다른 프로세스를 실행시켜주는 경우

- 프로세스 Context Switching 하는동안 CPU는 일을 하지 않기때문에 오버헤드로 볼 수 있다.

- 프로세스 Context Switching 이 많이 일어나는게 성능에 좋은건 아니라고 볼 수 있다.

 

 

Context Switching 프로세스 vs 스레드

- 프로세스는 Context Switching 할 때 메모리 주소 관련 여러가지 처리(CPU 캐시 초기화, TLB 초기화, MMU 주소 체계 수정 등)를 하기 때문에 오버헤드가 크다.

- 스레드는 프로세스 내 메모리를 공유하기 때문에 메모리 주소 관련 추가적인 작업이 없어 프로세스에 비해 오버헤드가 작아서 Context Switching이 빠름

- 스레드는 생성하는 비용이 커서 많은 수의 스레드 생성은 메모리 부족 현상이 발생하거나 빈번한 컨텍스트 스위칭으로 인해 어플리케이션의 성능이 저하될 수 있음

'개발' 카테고리의 다른 글

사용자모드 & 커널모드  (0) 2023.12.31
CPU Bound & I/O Bound  (0) 2023.12.29
Concurrent & Parallelism (동시성, 병렬성)  (0) 2023.12.27
Process & Thread  (1) 2023.12.27
REST API에 Under_Score(_)? Hyphen(-)?  (0) 2023.05.18