일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Java
- spring boot
- compiler
- scikit-learn
- clean code
- 유니온 파인드
- disjoint set
- bottom-up
- 직무면접
- 코딩테스트
- union-find
- 기술면접
- Python
- 벨만 포드 알고리즘
- top-down
- kmeans
- dto
- BufferedReader
- Controller
- 우선순위큐
- 엔테크서비스
- 다익스트라
- 음수가 포함된 최단경로
- 최단경로
- 거쳐가는 정점
- 동적계획법
- 플로이드 와샬
- Django
- Android Studio
- onclick
- Today
- Total
춤추는 개발자
프로세스의 스케줄링 본문
✅ 스케줄링의 개요
프로세스는 생성, 준비, 실행, 대기와 같은 여러 상태를 거치며 작업이 이루어진다. CPU 스케줄러는 이러한 프로세스가 생성된 후, 종료될 때까지 모든 상태 변화를 조정하는 일을 한다.
이때, CPU 스케줄러는 관리의 범주를 나누어 프로세스를 관리한다.
[ 고수준 스케줄링 ]
가장 큰 틀에서 이루어지는 CPU 스케줄링으로 장기 스케줄링 또는 작업 스케줄링이라고 한다. 고수준 스케줄링은 시스템 내의 전체 작업 수를 조절하는 것을 말한다. 이 단계에서는 어떤 작업을 시스템이 받아들일지 또는 거부할지를 결정한다. 작업 요청이 오면 스케줄러가 시스템의 상황을 고려하여 작업을 승인할지, 거부할지 결정하여 승인 스케줄링이라고도 부른다. 이를 통해 동시에 실행 가능한 프로세스의 총 개수가 정해진다.
[ 중간수준 스케줄링 ]
중지와 활성화로 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막는다. 즉, 일부 프로세스를 중지 상태로 옮김으로써 나머지 프로세스가 원만하게 작동하도록 지원한다. 이는 프로세스의 상태 중 보류 상태에 해당하며, 저수준 스케줄링이 원만하게 이루어지도록 완충하는 역할을 한다. 보류된 프로세스는 처리 능력에 여유가 생기면 다시 활성화된다.
[ 저수준 스케줄링 ]
실제로 작업이 이루어지는 스케줄링으로 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정하는 일이다. 예를 들어 준비 상태에 있는 프로세스 중 하나를 골라 실행 상태로 보내고, 실행 상태에 있는 프로세스를 대기 상태로 보내며, 대기 상태의 프로세스를 준비 상태로 보내는 것을 의미한다. 저수준 스케줄링은 아주 짧은 시간에 일어나기 때문에 단기 스케줄링이라고도 한다.
✅ 스케줄링의 목적
CPU 스케줄링은 결국 모든 프로세스가 공평하게 작업하도록 하는 것이다. 스케줄링의 6가지 목적을 정리하면 다음과 같다.
- 공평성: 모든 프로세스가 자원을 공평하게 배정받고, 자원 배정 과정에서 특정 프로세스가 베제되어서는 안된다.
- 효율성: 시스템 자원이 유휴 시간 없이 사용되도록 스케줄링을 하고, 유휴 자원을 사용하려는 프로세스에는 우선권을 준다.
- 안정성: 우선순위를 사용하여 중요 프로세스가 먼저 작동하도록 배정, 시스템 자원을 점유하거나 파괴하려는 프로세스로부터 자원을 보호한다.
- 확장성: 프로세스가 증가해도 시스템이 안정적으로 작동하도록 조치해야 한다. 또한 시스템 자원이 늘어나는 경우 이 혜택이 시스템에 반영되게 해야 한다.
- 반응 시간 보장: 응답이 없는 경우, 사용자는 시스템이 멈춘 것으로 가정하기 때문에 시스템은 적절한 시간 안에 프로세스의 요구에 반응해야 한다.
- 무한 연기 방지: 특정 프로세스의 작업이 무한히 연기되어서는 안된다.
✅ 스케줄링 시 고려사항
CPU 스케줄러가 어떤 프로세스에 우선적으로 CPU를 할당할지 결정할 때 고려해야 할 사항이 있다.
[ 선점형 스케줄링 ]
어떤 프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있는 방식이다. 대표적인 예로는 인터럽트 처리가 있다. CPU가 인터럽트를 받으면 현재 실행 중인 작업을 중단하고 커널을 깨워서 인터럽트를 처리시키며, 인터럽트 처리가 완료되면 원래의 작업으로 돌아간다.
이는 문맥 교환과 같은 부가적인 작업으로 인해 낭비가 생기는 거이 단점이다. 그러나 하나의 프로세스가 CPU를 독점할 수 없기 때문에 빠른 응답시간을 요구하는 대화형 시스템이나 시분할 시스템에 적합하다.
[ 비선점형 스케줄링 ]
어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 방식이다. 선점형 스케줄링보다 작업량이 적고 문맥 교환에 의한 낭비도 적다. 하지만 CPU 사용 시간이 긴 프로세스 때문에 CPU 사용 시간이 짧은 여러 프로세스가 오랫동안 기다리게 되어 전체 시스템의 처리율이 떨어진다. 과거의 일괄 작업 시스템에서 사용하던 방식이다.
구분 | 선점형 | 비선점형 |
작업 방식 | 실행 상태에 있는 작업을 중단시키고, 새로운 작업을 실행할 수 있다. | 실행 상태에 있는 작업이 완료될 때까지 다른 작업이 불가능하다. |
장점 | 프로세스가 CPU를 독점할 수 없어 대화형이나 시분할 시스템에 적합하다. | CPU 스케줄러의 작업량이 적고, 문맥 교환에 의한 낭비가 적다. |
단점 | 문맥 교환의 오버헤드가 많다. | 기다리는 프로세스가 많아 처리율이 떨어진다. |
사용 | 시분할 방식 스케줄러 | 일괄 작업 방식 스케줄러 |
중요도 | 높다. | 낮다. |
✅ 프로세스 우선순위
대부분의 CPU 스케줄러는 우선순위를 사용한다. 프로세스는 크게 커널 프로세스와 일반 프로세스로 나뉜다. CPU 스케줄러는 각 프로세스에 우선순위를 부여하는데 커널 프로세스가 일반 프로세스보다 중요도가 높다.
우선순위가 높다는 것은 그만큼 더 빨리 자주 실행된다는 것이다. 준비 상태의 커널 프로세스와 일반 프로세스가 있다면 커널 프로세스의 우선순위가 더 높기 때문에 커널 프로세스가 먼저 실행되며 작업이 끝날 때까지 계속 CPU를 사용한다.
또한, 일반 프로세스 중에서도 중요도가 각각 다르기 때문에 우선순위가 서로 다르다. 일반 프로세스의 우선순위는 사용자가 조절할 수 있다.
[ CPU 집중 프로세스와 입출력 집중 프로세스 ]
프로세스는 생성된 후, 준비, 실행, 대기 상태를 거쳐 완료된다. 준비 상태는 CPU를 할당받기 위해 기다리는 상태이므로 실제 작업이 일어나는 것은 실행 상태와 대기 상태이다. 이때 CPU를 할당받아 실행하는 작업을 CPU 버스트, 입출력 작업을 입출력 버스트라고 부른다.
CPU 집중 프로세스: 수학 연산과 같이 CPU를 많이 사용하는 프로세스, 즉 CPU 버스트가 많은 프로세스이다.
입출력 집중 프로세스: 저장 장치에서 데이터를 복사하는 일처럼 입출력을 많이 사용하는 프로세스다.
두 프로세스가 같이 있을 때는 입출력 집중 프로세스를 먼저 실행 상태로 옮기는 것이 효율적이다. 입출력 집중 프로세스가 실행 상태로 가면 입출력 요구에 의해 대기 상태로 옮겨지기 때문에 다른 프로세스가 CPU를 사용할 수 있다. 만약 CPU 집중 프로세스가 먼저 실행 상태로 가게되면 타임아웃이 날 때까지 다른 프로세스가 실행되지 못할 것이다.
[ 전면 프로세스와 후면 프로세스 ]
사용자에게 키보드로 입력을 받는 워드 프로세서는 전면 프로세스로 실행되고, 압축이 끝날 때까지 사용자의 입력이 필요없는 압축 프로그램은 후면 프로세스로 실행된다.
전면 프로세스: GUI를 사용하는 운영체제에서 화면의 맨 앞에 놓인 프로세스, 사용자와 상호작용이 가능하여 상호작용 프로세스라고도 한다.
후면 프로세스: 사용자의 입력 없이 작동하기 때문에 일괄 작업 프로세스라고도 한다.
'Developer's_til > 운영체제' 카테고리의 다른 글
프로세스 제어 블록과 문맥 교환 (0) | 2021.11.08 |
---|---|
[OS] 멀티 스레드의 동기화 (0) | 2021.05.18 |
[OS] 프로세스와 스레드의 특징 및 차이 (0) | 2021.05.18 |