본문 바로가기
프로그래밍/Desktop App

[시스템 프로그래밍] 스케줄링과 쓰레드

by YuminK 2023. 12. 3.

비선점형 OS

현재 실행중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행의 대상을 바로 변경하지 않는다. 실행중인 프로세스가 명시적으로 CPU를 양보할 때까지, 혹은 I/O작업 등으로 블로킹 상태에 놓일 때까지 기다려야 한다.

 

선점형 OS

현재 실행 중인 프로세스보다 우선순위가 높은 프로세스가 등장하면 스케쥴러에 의해 실행 순서가 조정된다. 비선점형 OS에 비해 스케쥴러가 하는 일이 더 많은 것도 특징이다. 

 

라운드 로빈 스케쥴링 알고리즘

같은 우선순위 프로세스들간 형평성 유지를 위해, 정해진 시간 간격 만큼 실행하고 다른 프로세스에게 CPU할당을 넘기는 방식으로 동작한다. 

 

스케줄링 알고리즘에 의해 스케줄링이 진행되는 시점

1. 매 타일 슬라이스마다 스케줄러 동작

정해진 시간이 지나면 다른 프로세스에게 CPU를 할당해야 하니까. 

2. 프로세스가 생성 및 소멸될 때마다 스케쥴러 동작

3. 현재 실행중인 프로세스가 블록킹 상태에 놓일 때마다   

우선순위가 변경될 여지가 있으니까, 갱신해야 한다.

 

프로세스와 쓰레드의 차이점

프로세스는 완전히 독립된 두 개의 프로그램 실행을 위해서 사용된다.  그러나 쓰레드는 하나의 프로그램 내에서 둘 이상의 프로그램 흐름을 만들어 내기 위해 디자인된 것이다. 프로세스는 공유하는 영역이 존재하지 않지만, 쓰레드는 스택 영역을 제외한 Code, Heap, Data 영역을 공유한다. 

 

쓰레드의 컨텍스트 스위칭은 프로세스보다 더 빠르다. 공유하는 영역이 있다는 차이가 있다. 또한 캐시 메모리를 어느 정도 공유할 수 있다는 점에서도 쓰레드쪽이 속도가 빠른 이유가 된다. (프로세스간 컨텍스트 스위칭은 공유하는 캐시 영역이 존재하지 않는다)

 

윈도우의 입장에서 스케쥴링의 중심이 되는 것은 프로세스가 아닌 '쓰레드'이다. 또한 같은 프로세스 내에 존재하는 쓰레드간 컨텐스트 스위칭과 다른 프로세스에 존재하는 쓰레드간 컨텐스트 스위칭(프로세스의 컨텍스트 스위칭)이 있다. 

 

커널 영역

하나의 프로세스에게 할당된 총 메모리 공간 중에서 유저 영역을 제외한 나머지 영역을 의미한다. 운영체제를 실행시키기 위해 필요한 메모리 공간을 뜻한다.

 

커널이 쓰레드를 지원하는 경우 쓰레드가 커널 영역에서 관리된다. (커널 레벨 쓰레드 모델)

커널이 지원하지 않을 경우에는 라이버러리를 통해서 제공받는다. (유저 레벨 쓰레드 모델)

 

커널레벨 쓰레드

프로그래머의 요청에 따라 쓰레드를 생성 및 스케줄링하는 주체가 커널인 경우 커널레벨 쓰레드라 한다. 

 

장점: 커널에서 직접 제공해주기에 안정성과 다양한 기능성 제공

단점: 유저모드에서 커널모드로 전환이 빈번하게 일어난다(성능 저하)

 

유저레벨 쓰레드

커널에 의존하지 않는 형태로 쓰레드 기능을 사용하는 경우, 유저레벨 쓰레드이다. 

 

장점: 커널은 쓰레드의 존재를 모른다. 유저모드에서 커널모드로 전환이 필요하지 않으므로 성능이 좋다.

단점: 운영체제는 프로세스의 존재만 알고 쓰레드의 존재는 모른다. 따라서 프로스세 내에 특정 쓰레드가 블록킹 상태가 된다면 같은 프로세스 내에 다른 쓰레드도 전부 블록킹된다. 

 

 

댓글