CPU 스케줄링
이다.CPU 스케줄링 알고리즘
은, 이러한 CPU 스케줄링의 절차를 말하며, 이 CPU 스케줄링 알고리즘을 결정하고 수행하는 운영체제의 일부분을 CPU 스케줄러
라고 한다.next
, spring
, jvm
, mysql
등 다양한 프로세스와 쓰레드가 실행중이고, 명령어를 통해 확인해보니, 128개의 프로세스가 동작 중 이다.ubuntu@ip-??-??-??-??:~$ ps -e | wc -l
128
ubuntu@ip-??-??-??-??:~$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 46 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 2
...
Context switching
을 사용해 멀티 프로세스를 구현하고 있다고 볼 수 있다.우선순위(Priority)
라고 한다.우선순위
는, 운영체제 마다 어떤 스케줄링 알고리즘
을 선택 하냐에 따라 다를 수 있다.ubuntu@ip-??-??-??-??:~$ ps -eLo pid,pri,ni,cmd
PID PRI NI CMD
1 19 0 /usr/lib/systemd/systemd --system --deserialize=93
38 39 -20 [kworker/R-kinte]
1260 19 0 mysqld
1268 19 0 java -jar app.jar --spring.profiles.active=prod
1610 19 0 next-server (v15.2.5)
...
ubuntu
에서, ps -l
관련 명령어로 확인해보면, PRI 값을 통해 작업의 우선순위를 확인해 볼 수 있다.TMI) NI(nice) 값이란? nice 값은 프로세스의 '우선순위 조정 힌트' 리눅스에서는 “누가 더 양보(nice)할지”를 나타내는 수치. nice는 프로세스 실행 시 또는 실행 중에 “내 우선순위를 얼마나 양보할지” 결정함 범위: -20(가장 안 착함, 우선순위 가장 높음) 0(기본값) +19(가장 착함, 우선순위 가장 낮음) 즉, 값이 낮을수록 CPU를 더 많이/자주 할당받을 수 있다.
우선순위
를 정하는 대표적인 요소들을 알아보자물론, 이건 다음에 소개될
스케줄링 알고리즘
에 따라 달라질 수 있다.
CPU 버스트
입출력 버스트
라고 한다.CPU 버스트
작업들이 많은 프로세스를 CPU 집중 프로세스(CPU Bound process)
라고 한다.입출력 집중 프로세스(I/O Bound Process
라고 한다.I/O bound process
들을 빠르게 실행시켜 입출력 장치를 작동 시킨 다음, 대기상태에 빠진 process 대신, CPU bound process
를 실행시킨다면, 가장 합리적으로 실행이 가능하다.⚠️ 여기서 설명하는
CPU 활용률
은,CPU Load
와는 전혀 다르다. 오해 하지 말자. 현구막님 기술 블로그 CPU 지표 정리
스케줄링 큐
를 통해서 구현하게 된다.큐
와 특정부분 유사하다.
선입 선출
의 특징을 가지지만, 스케줄링 큐는 반드시 선입/선출 이지는 않다.큐
에 줄세워 관리하는 것이다.큐
에 담겨서 관리되지 않고, 다양한 큐에 적재되어 관리 된다.준비 큐
와 대기 큐
가 있다.준비 큐
= CPU 사용 기회를 기다리는 대기실”준비 큐
로 돌아가 CPU 할당을 기다린다.대기 큐
= 외부 장치나 이벤트를 기다리는 대기실”선점형 스케줄링
, 비 선점형 스케줄링
선점형 스케줄링
은, 말 그대로 실행 중인 프로세스로부터 CPU 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식이다.비 선점형 스케줄링
은, 실행되고 있는 프로세스는 스스로 종료되거나 대기 상태에 빠지기 까지는 할당된 CPU 자원을 빼앗을 수 없는 방식이다.구분 | 선점형(Preemptive) | 비선점형(Non-preemptive) |
---|---|---|
CPU 회수 방식 | 운영체제가 강제로 회수(빼앗음) | 프로세스가 스스로 반납할 때까지 독점 가능 |
CPU 독점성 | 낮음<br>(운영체제가 강제로 분배, 독점 불가) | 높음<br>(한 번 점유하면 OS가 강제로 빼앗지 못함) |
컨텍스트 스위칭 오버헤드 | 높음 (자주 발생) | 낮음 (필요할 때만 발생) |
응답성(반응 속도) | 우수 (급한 작업 바로 처리 가능) | 떨어짐 (오랜 시간 점유 가능) |
기아(Starvation) 현상 | 우선순위 낮은 프로세스 밀릴 수 있음 | CPU 점유 프로세스가 길면, 다른 프로세스가 오래 기다릴 수 있음 |