멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.
컨텍스트란?
CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들.
이 Context는 프로세스의 PCB(Process Control Block)에 저장된다.
그래서 Context Switching때 PCB의 정보를 읽어(적재) CPU가 전에 프로스세가 일을 하던 것에 이어서 수행이 가능함
PCB의 저장정보 :
-프로세스 상태 : 생성, 준비, 수행, 대기, 중지
- 프로스램 카운터
- 레시스터
- 프로세스 번호
컨텍스트 스위칭때 해당 CPUs는 아무런 작업을 하지 못하여 오버헤드가 발생하여 효율이 떨어진다.
CPU가 어떤 프로세스를 실행하고 있는 상태에서 인터럽트에 의해 다음 우선 순위를 가진 프로세스가 실행되어야 할 때 기존의 프로세스 정보들은 PCB에 저장하고 다음 프로세스의 정보를 PCB에서 가져와 교체하는 작업을 컨텍스트 스위칭이라 한다.
이러한 컨텍스트 스위칭을 통해 우리는 멀티 프로세싱, 멀티 스레딩 운영이 가능하다.
컨텍스트 스위칭은 다음과 같은 상황에서 일어난다.
1. I/O interrupt
2. CPU 사용시간 만료
3. 자식 프로세스 Fork
4. 인터럽트 처리를 기다릴 때
PCB(Process Control Block)
컨텍스트 스위칭시에는
해당 스레드만을 위한 스택 영역이 생성되고, 나머지 영역 Code, Data, Heap은 부모 프로세스 영역에서 공유하고 있다 .
스레드 마다 스택을 독립적으로 할당해준다.
프로세스는 레지스터 수, 프로세스에서 관리되어야 할 데이터 종류가 많을 수록 부담이 된다. 컨텍스트 스위칭에 소요되는 시간을 줄이려면 저장하고 복원되는 컨텍스트 정보를 줄여야 한다.
스레드는 공유 영역에 많기 때문에 컨텍스트 스위칭이 빠르다.
그리고
프로세스는 컨텍스트 스위칭이 일어났을 때 공유 데이터가 없으므로 새로 캐시 정보를 쌓아야 한다. 이것이 프로세스 컨텍스트 스위칭에 부담이 되는 요소이다. 하지만 스레드라면 저장된 캐시 데이터는 스레드가 바뀌어도 공유하는 데이터가 있으므로 의미가 있다.
물리적 스레드는 CPU 코어와 연관이 깊다
CPU코어는 instruction명령주기를 하나씩 해석하여 연산을 수행하는 유닛을 뜻한다.
스레드는 물리적인 코어 수와 별개로 논리적인 코어 갯수를 뜻함
운영체제가 스케줄링을 할 때 동시에 실행 가능한 스레드 수는 정해져 있다.
'개발' 카테고리의 다른 글
쓰레드 덤프 분석하기 (0) | 2021.04.14 |
---|---|
TCP, UDP (0) | 2021.04.12 |
CPU (0) | 2021.04.10 |
URL (0) | 2021.04.07 |
지금한강은 개인정보처리방침 (1) | 2021.03.24 |