운영체제가 프로세스, 스레드에게 CPU 자원을 할당하는 방법에 대해서 알아본다.
스케줄링
모든 프로세스 및 스레드는 합리적으로 자원을 필요로 한다.
운영체제가 프로세스에 자원을 적절히 배분하는 방법을 스케줄링 이라고 한다.
CPU 스케줄링
스케줄링 중 운영체제가 공정하고 합리적으로 CPU를 배분하는 방법
CPU 자원은 한정되어 있고 실행중인 프로세스는 여러 개 일때 프로세스는 우선순위에 따라 실행된다.
프로세스마다 우선순위가 다르다. 우선순위는 PCB에 명시된다.
우선순위는 명령어로 확인가능
$ ps -el : RI, NI가 낮을수록 높은 우선순위
$ top : PR, NI가 낮을수록 높은 우선순위
우선순위의 차이를 보이는 대표적인 프로세스 유형
CPU를 사용하는 구간을 CPU burst, 입출력 장치를 사용하는 구간을 I/O burst 라고 한다.
- CPU bound process : CPU burst(CPU를 사용하는 구간)가 비교적 많은 프로세스
- I/O bound process : I/O burst(입출력 장치를 사용하는 구간)가 비교적 많은 프로세스
I/O bound process가 CPU bound process 보다 우선순위가 높은 이유
입출력장치는 조금만 실행되도 대기상태가 되기 때문에 CPU를 빠르게 이용시키기 위해서이다.
또한, 입출력장치가 CPU보다 연산속도가 느리기 때문에 입출력장치가 CPU를 이용하는 시간을 빠르게 할당해서 CPU를 이용하고 대기상태로 접어들게 하면 한동안 볼 이유가 없어서 빠르게 실행한다.
프로세스 우선순위를 토대로 CPU를 할당 받는 방법 → CPU 스케줄링 알고리즘
스케줄링 큐
프로세스가 CPU 자원을 경쟁적으로 사용할 때 프로세스들의 요구사항을 효율적으로 관리하는 방법으로 특정 자원을 이용하고자 하는 프로세스들이 대기하는 구조이다. 운영체제는 스케줄링 큐를 통해 프로세스에 자원을 할당한다.
운영체제에서 사용하는 큐는 자료구조에서 사용하는 큐와 달리 우선순위가 존재하기 때문에 FIFO일 필요는 없다.
→ 우선순위가 낮은 프로세스가 먼저 큐에 삽입되어도 우선순위가 높은 프로세스가 먼저 처리될 수 있다.
대표적인 스케줄링 큐
- 레디 큐 : CPU를 사용하기위해 준비상태에 있는 프로세스들의 큐
- 블록 큐 : 대기상태에 있는 프로세스들의 큐
준비 상태에 접어들게 되면 레디 큐에 삽입된다. 디스패치되면 실행상태가 되고 CPU 자원을 할당받아서 실행된다.
대기 상태에 접어들게 되면 대기큐에 삽입이 된다.
대기 상태에서 입출력이 완료되어 준비상태가 되면은 레디 큐에 삽입된다.
이러한 방식으로 운영체제는 프로세스의 상태를 큐와 더불어 관리하게 된다.
선점형 스케줄링과 비선점형 스케줄링
한 프로세스가 실행 도중 다른 급한 프로세스가 실행되어야 한다면?
선점형 스케줄링
- 실행 중인 프로세스가 CPU를 점유하고 있을 때, 우선순위가 더 높은 프로세스가 CPU를 강제로 빼앗을 수 있는 스케줄링 방식
- 즉각적으로 처리할 수 있어 응답성이 높지만 CPU 사용량이 높아질 수 있고, 컨텍스트 스위칭 비용이 발생한다.
비선점형 스케줄링
- 실행 중인 프로세스가 CPU를 점유하고 있는 동안, 해당 프로세스가 종료되거나 대기 상태가 되기까지 대기하는 스케줄링 방식
- 간단하고 예측 가능하며 컨텍스트 스위칭 비용이 낮지만, 응답성이 떨어질 수 있다.
따라서, 응용 프로그램의 요구사항과 운영체제의 목표에 따라 적절한 방식을 선택하는것이 좋다.
정리
- 스케줄링은 운영체제가 프로세스에 자원을 적절히 배분하는 방법이다.
- CPU는 한정적이고 여러 프로세스가 CPU 자원을 경쟁적으로 사용할 때 PCB에 있는 우선순위에 따라서 프로세스가 실행된다.
- I/O bound process가 CPU bound process 보다 우선순위가 높은 이유는 입출력장치는 조금만 실행되도 대기상태가 되기 때문에 CPU를 빠르게 이용시켜 자원을 낭비시키지 않기 위함이다.
- 스케줄링 큐는 프로세스가 CPU 자원을 경쟁적으로 사용할 때 프로세스들의 요구사항을 효율적으로 관리하는 방법으로 특정 자원을 이용하고자 하는 프로세스들이 대기하는 구조이다. 운영체제는 스케줄링 큐를 통해 프로세스에 자원을 할당한다.
- 스케줄링 큐는 자료구조의 큐와 다르게 우선순위에 따라 처리되기 때문에 FIFO가 아니다.
- 대표적인 스케줄링 큐로 레디 큐, 블록 큐가 있으며 CPU를 사용할 준비가 된 준비상태가 된 프로세스는 레디큐에 삽입되고 대기상태가 된 프로세스는 블록 큐에 삽입되어 순서를 기다린다.
- 선점형 스케줄링은 다른 프로세스가 CPU를 점유하고 있을 때, 우선순위가 더 높은 프로세스가 CPU를 강제로 빼앗을 수 있는 스케줄링 방식으로 즉각 처리가 가능하여 응답성이 높지만 CPU 사용량이 높아지고 컨텍스트 스위칭 비용이 발생한다.
- 비선점형 스케줄링은 다른 프로세스가 CPU를 점유하고 있을 때 해당 프로세스가 종료되거나 대기상태가 되기까지 대기하는 스케줄링 방식으로 비교적 간단하고 예측이 가능하며 컨텍스트 스위칭 비용이 낮지만 응답성이 떨어진다.
'CS > 운영체제' 카테고리의 다른 글
[OS] 리눅스 스케줄링 (0) | 2023.09.08 |
---|---|
[OS] CPU 스케줄링 알고리즘 (0) | 2023.09.08 |
[OS] 스레드 (0) | 2023.09.08 |
[OS] 프로세스 생성과 상태 (0) | 2023.09.07 |
[OS] 커널 영역과 사용자 영역의 프로세스 (0) | 2023.09.07 |
댓글