강의 메모 - ContextSwitching #
개요 #
하나의 CPU는 동일한 시간에 1개의 task만 수행 가능, 여러 프로세스를 동시에 실행X 하나의 CPU에서 여러 프로세스를 동시성으로 처리하기 위해서는 한 프로세스에서 다른 프로세스로 전환해야하는데, 이것을 컨텍스트 스위칭이라고 한다.
Context #
프로세스 간 전환을 위해서는 이전에 어디까지 명령을 수행했고, CPU Register에는 어떤 값이 저장되어있는지에 대한 정보가 필요하다. Context는 CPU가 해당 프로세스를 실행하기 위한 프로세스의 정보를 의미하며, 이 정보들은 운영체제가 관리하는 PCB라고 하는 자료구조의 공간에 저장된다.
PCB (Process Control Block) #
운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보를 담는 커널 내의 자료구조 컨텍스트 스위칭은 CPU가 프로세스간 PCB 정보를 교체하고 캐시를 비우는 일련의 과정이라 볼 수 있다. (A 프로세스가 있고, B 프로세스가 있을때, A가 캐시에 정보를 저장하는데, 이를 B로 전환하려면 캐시 메모리엔 이미 A 프로세스의 데이터가 있기 때문에 비워줘야한다.)
프로세스 상태 #
프로세스는 New(생성), 준비(Ready), 실행(Running), 대기(Blocked), 종료(Exit) 상태를 가진다.
컨텍스트 스위칭이 일어나는 조건 #
실행중인 프로세스에서 I/O 호출이 일어나 해당 I/O 작업이 끝날때까지 프로세스 상태가 running -> waiting 으로 전이된 경우 Round Robin 스케줄링 등 운영체제의 CPU 스케줄러 알고리즘에 의해 현재 실행중인 프로세스가 사용할 수 있는 시간 자원을 모두 사용했을때, 해당 프로세스를 중지하고(ready 상태로 전이) 다른 프로세스를 실행시켜주는 경우
컨텍스트 스위칭이 발생하는 순간에 오버헤드 발생 (이시간 동안에 CPU는 일을 하지 않는다) CPU는 PCB를 관리하는 일을 할 뿐이다.
스레드 컨텍스트 스위칭 #
TCB (Thread Control Block) #
Thread 상태 정보를 저장하는 자료구조이며, PC와 Register Set (CPU 정보), 그리고 PCB를 가리키는 포인터를 가진다. 스레드가 하나 생성될 때마다 PCB 내에서 TCB가 생성되며 컨텍스트 스위칭이 일어나면 기존의 스레드 TCB를 저장하고 새로운 스레드의 TCB를 가져와 실행한다.
프로세스 vs 스레드 #
프로세스 : 컨텍스트 스위칭을 할 때, 메모리 주소 관련 여러가지 처리(CPU 캐시 초기화, TLB 초기화 등) 을 하기 때문에 오버헤드가 크다. 쓰레드 : 프로세스 내 메모리를 공유하기 때문에 메모리 주소 관련 추가적인 작업이 없어, 프로세스에 비해 오버헤드가 작아서 컨텍스트 스위칭이 빠르다. 스레드는 생성하는 비용이 커서 많은 수의 스레드 생성은 메모리 부족 현상이 발생하거나 빈번한 컨텍스트 스위칭으로 인해 어플리케이션의 성능 저하가 될 수 있다.