스레드 컨텍스트 스위칭과 프로세스 컨텍스트 스위칭에 대해 알아보고,
왜 스레드 컨텍스트 스위칭이 더 빠른지 정리해보려고 한다.
우선 그 전에 컨텍스트 스위칭부터 짚고 넘어가자
컨텍스트 스위칭(context switching)
CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것을 말한다.
여기서 좀 더 생각해볼 부분이 있다. (feat. 프로세스에서 다른 프로세스의 교체)
오늘날의 컴퓨터에서는 하나의 프로세스는 기본적으로 하나의 스레드는 반드시 가지고 있다.
왜냐하면 스레드가 CPU혹은 Core에서 실행되는 기본 단위이기 때문이다.
따라서 프로세스에서 다른 프로세스로 교체된다는 건
어떤 프로세스 안에 실행되던 스레드가 다른 프로세스 안에 실행되는 스레드로 바뀐다는 것이다.
서로 다른 프로세스에 속한 스레드가 바뀌는 것이기 때문에
앞으로는 프로세스가 교체된다고 하면서 쭈욱 정리해나가려 한다.
그러면 컨텍스트(context)는 뭘까?
컨텍스트 스위칭에서의 컨텍스트는 프로세스/스레드의 상태를 의미한다.
여기서 상태는 CPU의 상태 혹은 메모리의 상태를 말한다.
CPU는 기본적으로 register (program counter, stack pointer 등..)들이 있다.
컨텍스트 스위칭은 왜 필요할까?
여러 프로세스나 스레드를 동시에 실행시키기 위해서 필요하다.
컨텍스트 스위칭은 언제 발생할까?
- 주어진 time slice(=quantum)를 다 사용했을 때 (멀티태스킹 시스템),
- I/O 작업을 해야할 때,
- 다른 리소스를 기다려야 할 때
- interrupt가 걸렸을 때 등
이러한 상황에서 컨텍스트 스위칭이 발생한다.
컨텍스트 스위칭을 처음부터 끝까지 수행하는 존재는?
컨텍스트 스위칭은 OS 커널(kernel)에 의해 실행된다.
즉, OS 커널이 통제권을 가지고 실행한다.
커널이란?
OS 즉, 운영체제에서 가장 핵심적인 기능을 담당하는 존재다.
컴퓨터에 있는 여러 가지 리소스(CPU, memory, disk drive)를 관리하고 감독하는 역할을 하는게 커널이다.
컨텍스트 스위칭은 어떤 과정으로 일어날까?
우선, 다른 프로세스끼리 스위칭(프로세스 컨텍스트 스위칭)과
같은 프로세스의 스레들끼리 스위칭(스레드 컨텍스트 스위칭)에 따라 차이가 있다.
둘의 공통점
1. 커널 모드에서 실행한다.
커널 모드란?
프로세스가 실행되다가 하드웨어와 밀접한 관련이 있는 일들 혹은 컴퓨터의 여러 리소스를 다뤄야 하는 상황일 때
프로세스가 직접 컴퓨터의 리소스에 접근하는 것이 아닌 운영체제의 커널을 통해서 접근하게 된다.
이렇게 프로세스에서 커널로 통제권이 넘어가서 커널에 의해 실행되는 걸 커널 모드라고 한다.
컨텍스트 스위칭은 통제권이 커널로 넘어가기 때문에 커널에서 실행된다. (커널 모드)
2. CPU의 레지스터 상태를 교체한다.
CPU 안에는 여러가지 레지스터가 있다.
레지스터는 각종 명령어들을 수행하기 위해 필요한 여러 데이터를 저장한다.
한 프로세스(P1)가 CPU에서 실행되고 있는 동안에는
레지스터의 여러가지 값들이 계속 바뀌면서 실행되고 있는데,
다른 프로세스(P2)를 실행하게되면
현재 CPU에 실행되고 있던 프로세스(P1)의 레지스터 상태들을 어딘가에 저장을 하고
다른 프로세스(P2)를 실행하게 된다.
그러면 왜 레지스터의 상태를 따로 저장할까?
다른 프로세스(P2)를 실행하고 다시 해당 프로세스(P1)로 돌아왔을 때,
어디까지 실행되었는지 상태 정보를 알고 있어야 계속 이어서 실행할 수 있기 때문이다.
이 2가지는 스레드 컨텍스트에서도 일어난다.
둘의 차이점
메모리 주소 관련 처리 유무
스레드 컨텍스트 스위칭은 같은 프로세스 내에서 일어나기 때문에
해당 프로세스의 메모리 영역(Heap 영역)을 공유한다.
따라서 이 때는 메모리 관련 처리를 해야하는 일이 발생하지 않는다.
프로세스 컨텍스트 스위칭은
즉, 다른 프로세스 간의 스위칭이 일어나기 때문에 메모리 주소 체계가 다르다.
그렇기 때문에 가상(virtual) 메모리 주소 관련 처리를 추가로 수행해줘야 한다.
MMU(Memory Manage Unit)을 새로운 메모리 주소 체계를 바라볼 수 있게 수정해야하고,
TLB(Translation Lookaside Buffer : 가상 메모리 주소를 물리적인 주소의 변환하기 위한 매핑 정보를 가지고 있는 캐시)도 비워줘야 한다.
중요한 건, 서로 다른 프로세스 간의 컨텍스트 스위칭이 발생했을 때는
가상의 메모리 주소 체계도 바꿔줘야 하기 때문에
부가적으로 메모리 주소 관련 처리를 해야하는 일들이 발생한다는 점이다.
'운영체제' 카테고리의 다른 글
[운영체제] 멀티프로그래밍, 멀티태스킹, 멀티스레딩, 멀티프로세싱 (0) | 2024.04.18 |
---|---|
[운영체제] 뭐만 하면 Asynchronous(비동기)를 붙이는데.. 그래서 비동기가 정확하게 어떤 의미일까? (feat. multi-threads, non-block I/O) (0) | 2024.04.18 |