<운영체제> CPU SCHEDULING - Thread, Multiple-Processor Scheduling
본 게시물은 영남대학교 곽종욱 교수님의 강의를 기반으로 작성됨
Thread란?
- 간략한 개념은 아래의 그림처럼 하나의 프로세스 내의 “lightweight-process”라고 이해해도 된다.
- 즉, 프로세스 내에서 프로세스의 resource를 이용하여 실제로 작업을 수행하는 것이 Thread이다.
- 기본적으로 Multi-Tasking(or MultiProgramming)을 지원하는 OS의 경우, 하나의 프로세스내에서 여러 쓰레드가 동시에 실행되는 Multi-Threading을 지원한다.
- Thread는 user-level과 kernel-level 그리고 LWP, 총 세가지 종류가 있다.
- user-level는 사용자가 만들어내는 Thread, 즉 우리가 프로그래밍 언어를 사용해서 만들어내는 사용자 Thread이며, kernel-level는 OS가 만들어내는 Thread이다. 마지막으로 LWP는 위 두가지의 Thread를 이어주기 위한 역할을 수행하는 Thread로서 Solaris에서 사용한다.
Process와 Thread 이미지
Thread Scheduling이란?
- 쓰레드의 종류에 따라 두가지의 방식으로 나뉜다.
- user-level 쓰레드의 경우, process-contention-scope(PCS)로 알려진 방식으로 Thread Library가 관리하며, 프로세스 내에서 쓰레드간에time-slice를 할당 받기위한 스케쥴링을 관리하는 정책이다.
- kernel-level쓰레드의 경우, system-contention-scope(SCS)라는 방식으로 시스템 내의 쓰레드간의 경쟁을 관리하는 방식이다.
NUMA와 UMA
- Non-uniform memory access의 약자로, 메인 메모리에 접근하는 시간이 일정하지 않은 구조의 컴퓨터이다.
- NUMA의 경우 아래그림처럼 대용량의 서버 컴퓨터나 슈퍼 컴퓨터처럼 여러개의 CPU와 메모리가 연결된 bus를 사용하는 구조이다.
- 이와 반대로 UMA는 Uniform-memory-access의 약자로 메인 메모리에 접근하는 시간이 일정한 컴퓨터 구조이다.
- 아래그림에서는 빨간색 상자 하나를 가지면 UMA, 해당 그림은 NUMA 구조이다.
NUMA 구조 이미지
Multiple-Processor Scheduling이란?
- CPU가 여러개 있을 때의 “어느 CPU에 할당할까?”를 결정하는 스케쥴링 정책이다.
- Asymmetric(비대칭) 방식과 symmetric(대칭) 방식이 있다. 비대칭 방식의 경우, 다른 CPU를 관리하는 유형의 CPU가 존재하는 방식이며, 대칭 방식은 모든 CPU가 동일한 레벨에서 작업하는 방식이다.
- 이러한 스케쥴링 정책을 결정할 때 고려해야 할 사항은 크게 두가지로 Processor Affinity와 Load Balancing이다.
Processor Affinity이란?
- 작업 A가 CPU1에서 90%진행 되었고 10%의 실행시간을 남겨둔 상황이라 가정할때, 작업 A를 CPU1에서 그대로 진행시키는 경우(5ms)와 작업 A를 CPU2로 이전시켜 작업을 마무리하는경우(invalidating + repopulating = 10ms) 어느 방안이 더 효율적인 Multiple-Processor Scheduling인가? 당연히 전자의 경우이다. 이러한 상황을 고려하는 것을 Processor Affinity 중 Time Affinity라 한다.
- 위 이미지의 NUMA 구조에서 CPU가 자기 자신의 메모리에 접근하는 것과 다른 CPU의 메모리에 접근하는 방식 중 어떤것이 더욱 효율적인가? 이 경우는 자기자신의 메모리에 접근하는 방식이 더 효율적이다. 반대로 위 그림에서 자기자신의 메모리 할당이 다 채워진 경우, 다른 CPU의 메모리 공간이 여유롭다면 비록 slow-access이지만 더욱 효율적인 Multiple-Processor Scheduling이 될 것이다. 이러한 물리적으로 흩어져 있는 메모리에 대한 접근 시간을 고려하는 것을 Space Affinity라 한다.
Load Balancing이란?
- 부하 균등이라는 뜻으로, 대상에 부여되는 작업량을 균일하게 맞춘다는 의미이다.
- 즉, 여러개의 CPU가 있을 경우 각각의 CPU가 균등하게 Job들을 배분받아서 Idle한 상태의 CPU가 없도록 만드는 것이다.
- Push migration은 작업이 많은 CPU가 작업은 보내는 행위이며, Pull migration은 여유로운 CPU가 작업을 땡겨오는 행위이다.
Multicore Processors와 Multiple-Processor
- 요즘 대부분의 컴퓨터는 쿼드코어, 헥사코어 등 멀티코어 형태를 띄고 있다.
- 이는 하나의 CPU안에 논리적인 여러개의 CPU를 배치시키는 형태로 단일 코어 형태의 CPU보다 훨씬 빠른 속도와 비용절감의 장점을 가진다.
- 아래 그림처럼 Multicore Processors와 Multiple-Processor를 동시에 가지는 컴퓨터 구조도 있지만, 우리가 사용하는 대부분은 하나의 Multicore Processor로 이루어진 구조이다.
- 이러한 Multicore Processors도 Multiple-Processor Scheduling 정책을 반영해서 프로세스를 할당하여 CPU에서 작업을 진행한다.