[면접뿌시기] 운영체제 질문 정리 - 03
기아 상태가 무엇인가요?
한 프로세스의 우선순위가 낮아서 자원을 할당 받지 못하는 상태입니다.
기아 상태를 어떻게 해결할 수 있을까?
우선 순위를 변경 시킬 수 있습니다.
프로세스의 우선순위를 주기적으로 변경하여, 자원을 할당 받게 합니다.
오래 기다린 프로세스의 순위를 높입니다.
CPU 스케줄링이란?
항상 프로세스를 실행시키면서 CPU 이용률을 최대화 하는 것
스케줄러의 종류?
장기 스케줄러
- 많은 프로세스들이 한번에 메모리에 올라오는 경우, 대용량 메모리에 임시 저장합니다.
- 저장되어 있는 프로세스 중 하나를 메모리에 할당해 Ready Queue 로 보낼지 결정합니다.
- 프로세스의 상태는 new, ready, running, terminated
단기 스케줄러
- 장기 스케줄러보다 많이 호출됩니다.
- Ready Queue 에 있는 프로세스 중 어떤 프로세스를 실행시킬지 결정
- 프로세스의 상태는 ready, running, waiting, ready 로 변경됩니다.
중기 스케줄러
- 시분할 시스템에서 사용됩니다.
- 우선 순위가 낮은 프로세스들을 잠깐 제거하고 CPU 경쟁이 낮아졌을 때 디스크에서 메모리로 불러와 중단 지점부터 다시 실행합니다.
- 프로세스의 상태는 ready, suspended
선점형 스케줄링과 비선점 스케줄링 차이가 무엇인가요?
선점형
- 운영체제가 CPU 를 선점하고, 프로세스의 요청이 있을 때 분배하는 방식입니다.
- 빠른 응답시간을 요구하는 대화식 시분할 시스템에 적합합니다.
비선점형
- 한 프로세스가 CPU 를 할당받고 난 이후, 해당 프로세스가 종료되거나 입출력 기능 발생시 종료될 때까지 계속 실행되는 방식입니다.
- 순서대로 처리됩니다.
- 스케줄러 호출 빈도가 낮습니다.
- 문맥교환에 의한 오버헤드가 적습니다.
- CPU 사용이 긴 프로세스가 다른 프로세스들을 대기시켜서 처리율이 떨어질 수 있습니다.
FCFS 스케줄링
First-Come, First-Served
선입 선처리 스케줄링이라 부릅니다.
큐로 관리할 수 있고, 비선점형 스케줄링입니다.
프로세스의 CPU 이용 시간별로 성능이 크게 바뀝니다.
하나의 프로세스가 긴 CPU 점유 시간을 가지고 있다면 나머지 프로세스들이 기다려야합니다. -> 호위 효과
호위효과 때문에, 대화형 시스템에서는 좋지 않은 방식입니다.
SJF 스케줄링
Shortest-Job-First
최단 작업 우선 스케줄링이라 부릅니다.
CPU 버스트 길이에 의해 스케줄링 됩니다.
SJF 알고리즘은 선점형 또는 비선점형일 수 있습니다.
선점형 SJF
현재 실행하는 프로세스를 선점합니다.
비선점형 SJF
현재 실행하는 프로세스를 끝내도록 허용합니다.
SRTF 스케줄링
선점형 SJF 스케줄링 입니다.
각 프로세스의 남은 작업 시간을 비교하여 가장 짧은 프로세스에게 CPU 를 할당하는 스케줄링 입니다.
RR 스케줄링
Round-Robin
라운드 로빈 스케줄링이라 부릅니다.
선입 선처리 스케줄링과 유사하지만 시스템이 프로세스들을 옮겨 다닐 수 있도록 선점이 추가됩니다.
준비 큐는 원형 큐로 동작하게 됩니다.
이때 CPU 스케줄러는 준비 큐를 돌면서 정해진 시간 할당량 만큼 프로세스에 CPU 를 할당합니다.
RR 스케줄링은 시간 할당량 크기에 따라 영향을 많이 받습니다.
시간 할당량이 크다면, 선입 선처리 스케줄링과 같게 동작합니다.
시간 할당량이 적다면, 문맥 교환이 많이 발생하게 됩니다.
우선순위 스케줄링
Priority
각 프로세스들은 우선순위를 가지고 있고, 이에 따라서 실행순서를 정해주는 스케줄링입니다.
우선순위 스케줄링에 주요 문제 두가지가 있습니다.
- 무한 봉쇄
- 실행 준비가 되어 있으나 계속해서 우선순위가 높은 프로세스가 발생해 CPU 를 얻지 못하는 상황
- 기아 상태
위 문제 두가지를 해결할 수 있는 방법은
첫번째로는 노화(aging)입니다.
오래 대기하는 프로세스들에게 우선순위를 점진적으로 증가시켜서 우선순위를 높여 실행될 수 있게 해주는 방식
두번째로는 라운드 로빈과 우선순위 스케줄링을 결합하는 방식입니다.
우선순위가 가장 높은 프로세스를 실행하고 우선순위가 같은 프로세스들은 라운드 로빈 스케줄링으로 실행하는 방식입니다.