본문 바로가기

운영체제

2. 컨텍스트 스위칭 뽀개기

컨텍스트

프로세스/스레드의 상태

CPU, 메모리의 상태 등...

CPU는 register

컨텍스트 스위칭 (Context Switching)

CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것

(정확히 말하면 어떤 프로세스의 안에 실행되는 쓰레드가 다른 프로세스의 안에 실행되는 스레드로 바뀐다는 뜻)

왜 필요한가?

여러 프로세스/스레드를 동시에 실행시키기 위해서

 

언제 발생하는가?

1. 주어진 time slice (quantum)를 다 사용했거나

2. IO 작업을 해야하거나

3. 다른 리소스를 기다려야 하거나

등...

 

컨텍스트 스위칭은 누구에 의해  실행되는가?

OS 커널 (kernel) = 각종 리소스를 관리/감독하는 프로그램

 

 

컨텍스트 스위칭은 구체적으로 어떤 과정으로 일어날까?

1. 다른 프로세스끼리 스위칭인지 (= process 컨텍스트 스위칭)

2. 같은 프로세스의 스레드들끼리 스위칭인지에 따라 다름 (= 스레드 컨텍스트 스위칭)

 

둘의 공통점은?

1. 커널 모드에서 실행함

→ 프로세스는 작업을 실행 하면서 하드웨어에 접근해야 할 일 (컴퓨터 리소스)이 생기면, 프로세스가 직접 접근하는 것이 아니라 OS를 통해 커널에 의해 접근할 수 있음

2. CPU의 레지스터 상태를 교체

→ CPU 안에 여러가지 레지스터가 있고, 프로세스가 실행되고 있을 동안에 CPU의 레지스터에 필요한 데이터를 저장하고 실행되고 있는데, 이때 다른 프로세스로 교체되면 이전에 레지스터 값을 백업해놓고 새로운 프로세스에 맞춰서 레지스터에 데이터를 저장함

(레지스터 : 각종 명령어들을 실행하기 위한 데이터들을 저장하는 존재)

 

둘의 차이점은?

서로 다른 프로세스들 간의 컨텍스트 스위칭은 가장 (Virtual) 메모리 주소 관련 처리를 추가로 수행

(MMU와 TLB의 데이터를 교체해야함)

 

스레드 컨텍스트 스위칭 과정

노란색 화살표 : 커널모드 시작과 종료, 첫번째 녹색은 T1에서 T2로 컨텍스트 스위칭, 두번째 녹색은 T2->T1으로

 

프로세스 컨텍스트 스위칭 과정

녹색 부분이 추가됨, 메모리와 관련된 처리가 일어남, 서로 다른 메모리 영역을 가진 프로세스 교체가 일어나므로 녹색 부분이 필요해짐

서로 다른 프로세스끼리의 컨텍스트 스위칭은 서로 다른 메모리 영역을 차지한 프로세스의 스레드들이 스위칭이 일어나려면 메모리 관련 처리를 해줘야함

Ex) P1에서 P2로 바뀌는 과정에서는

녹색부분 : MMU 라고 불리는 메모리 매니지먼트 유닛이 P2의 메모리를 바라보게하고

TLB를 완전히 비워주어야 P2가 로딩됐을 때, P2의 메모리 영역에 접근 할 수 있음

이영역을 안비우면 P2를 실행했는데 P1 메모리 주소로 접근하게 되는 에러가 발생

(TLB : 가상 메모리 주소와 실제 메모리 주소에 대한 맵핑 정보를 담고있는 캐시)

 

스레드 컨텍스트 스위칭이 더 빠른 이유는?

메모리 주소 관련 처리는 하지 않기 때문! cpu 내의 상태 정보만 바꿔주면 됨

컨텍스트 스위칭이 미치는 간접적인 영향은?

캐시 (Cache) 오염 (Pollution)

CPU내의 캐시 영역에는 컨텍스트 스위칭 이전의 프로세스 실행 데이터들이 있기 때문에 스위칭 된 프로세스는 캐시 영역의 데이터를 활용할 필요성이 적어짐

그나마 같은 프로세스내의 스레드 컨텍스트 스위칭인 경우에는 캐시에 스레드 끼리 공유가 필요한 데이터가 있을 확률이 높음

(캐시: 자주 사용하는 데이터는 CPU내 메모리공간인 캐시영역에 저장해서 빠르게 가져다씀, 필요할 때마다 메모리 영역에 접근하면 속도가 느리기 때문!)

 

유저 관점에서 컨텍스트 스위칭이란?

순수한 (pure) 오버헤드 (overhead)

내가 실행하는 이 프로그램의 동작과는 상관없는 동작, CPU 리소스를 잡아먹는 동작

컨텍스트 스위칭이 많이 일어나는 것은 좋지 않음!