6-CPU-스케줄러
CPU는 기계어 명령을 실제로 수행하는 중앙처리장치
프로그램이 시작되어 메모리에 올라가면 프로그램 카운터라는 이름의 레지스터가 현재 CPU에서 수행할 코드의 메모리 주소값을 갖음 CPU는 프로그램 카운터가 가리키는 주소의 기계어 명령을 하나씩 수행 한편, CPU는 시스템 내에 하나밖에 없으므로 여러 프로그램이 동시에 실행되는 시분할 환경에서 효율적으로 관리 되어야하는 자원
기계어 명령은 보통
CPU 내에서 수행되는 명령
메모리 접근을 필요로 하는 명령
입출력을 동반하는 명령
입출력 작업
키보드로 입력 받기
처리 결과 모니터에 출력
디스크에서 파일 데이터 읽거나 쓰기
이와 같은 입출력 작업은 CPU나 메모리 접근 명령에 비해 시간이 오래걸림
또한, 입출력 명령은 특권 명령으로 규정하여 사용자 프로그램이 직접 수행할 수 없고 OS를 통해 서비스 대행
사용자 프로그램의 수행과정을 보면, CPU와 I/O 작업의 반복
사용자 프로그램이 CPU를 할당받아 직접 빠른 명령 수행(add, 메모리 접근하는 Load, store) = CPU 버스트
I/O 요청이 발생하여 커널에 의해 입출력 작업 진행 = I/O 버스트
I/O 바운드 프로세스 : I/O 요청이 빈번하여 CPU 버스트가 짧게 나타나는 프로세스
CPU 바운드 프로세스 : 반대
CPU 스케줄링이란
이와 같이 CPU를 사용하는 패턴이 상이한 여러 프로그램이 동일한 시스템 내부에서 함께 실행되기 때문에 필요
예컨대, CPU버스트가 짧은 프로세스는 대화형 작업으로 사용자와 인터랙션 해가며 프로그램 실행 시킴
이런 얘들은 CPU의 빠른 서비스를 필요로 함. 대화형 작업이므로 빠른 응답이 중요해서
따라서 CPU 버스트가 짧은 프로세스에게 우선적으로 CPU를 사용할 수 있도록 스케줄링 필요
이는 바꾸어 말하면 CPU 스케줄링시, I/O 바운드 프로세스에게 우선순위를 높여주는 것이 바람
6.1 스케줄러
CPU 스케줄러는 준비 상태에 있는 프로세스들 중 어떤 프로세스에게 CPU 할당할지 결정하는 OS의 코드
어떤 프로세스가 CPU 할당 받고 기계어 명령 수행 중에 타이머 인터럽트 발생시 CPU 스케줄러 호출
CPU 스케줄러는 준비 큐에서 CPU 기다리는 프로세스 중 하나 선택하여 CPU 할당
이 밖에 CPU 스케줄링이 필요한 경우 1. 실행 상태에 있던 프로세스가 I/O 요청 등에 의해 봉쇄상태로 바뀐 경우 2. 실행 상태에 있던 프로세스가 타이머 인터럽트 발생에 의해 준비 상태로 바뀐 경우 3. I/O 요청으로 봉쇄 상태에 있던 프로세스의 I/O 작업이 완료되어 인터럽트 발생하고, 이 프로세스의 상태가 준비상태로 바뀌는 경우 4. CPU에서 실행 상태에 있는 프로세스가 종료된 경우
CPU 스케줄링 방식은
비선점형 방식
선점형 방식
비선점형 방식
CPU를 획득한 프로세스가 스스로 CPU를 반납하기 전까지 CPU를 뺏기지 않는 방법
1,4번
선점형 방식
프로세스가 CPU를 계속 사용하기를 원해도 뺏을 수 있는 스케줄링 방법
뺏는 방법: 할당 시간을 부여하고 타이머 인터럽트 발생
2,3번
6.2 디스패처
CPU 이양 작업 하는 커널 모듈 디스패처
6.3 스케줄링 성능 평가
시스템 관점
CPU 활용도: 전체 시간 중 CPU가 명령을 수행 시간의 비율
처리량: 주어진 시간 동안 CPU 버스트를 완료한 프로세스의 개수
사용자 관점
소요 시간: 프로세스가 CPU 요청시점부터 CPU 버스트가 끝날 때까지 걸린 시간
준비큐에서 기다린 시간 + 실제로 CPU를 사용한 시간
예컨대, CPU 사용하다가 I/O 연산을 위해 CPU 자진 반납시, CPU 사용하기 위해 준비큐 들어온 시간 ~ CPU 자진 반납까지
대기 시간: CPU 버스트 기간 중 준비큐에서 기다린 시간의 합
한 번의 CPU 버스트 중에도 준비큐에서 기다린 시간이 여러번 발생할 수 있음.
이 떄 대기시간이란 이번 CPU 버스트가 끝나기까지 준비 큐에서 기다린 시간의 합
응답 시간: CPU 요청 시점부터 처음으로 CPU 얻을 때까지 기다린 시간
준비 큐에 들어온 후 첫번째 CPU 획득까지 기다린 시간
6.4 스케줄링 알고리즘
6.4.1 FCFS
프로세스가 준비 큐에 도착한 순으로 CPU 할당하는 방식
문제점
CPU 버스트가 긴 프로세스가 CPU 버스트가 짧은 프로세스 여러개 보다 먼저 도착할 경우
평균작업시간 길어짐
CPU 버스트 짧은 프로세스들이 잠깐씩 CPU 할당받고 I/O 수행하면, 대기시간과 I/O장치 활용도 높아짐
이와 같이 먼저 도착한 프로세스의 성격에 따라 평균 대기시간이 크게 달라짐
6.4.2 SJF
CPU 버스트가 가장 짧은 프로세스에게 제일 먼저 CPU 할당
평균 대기시간 이 가장 짧은 최적 알고리즘
비선점형
선점형
SRTF(Shortest Remaining Time First)
프로세스들이 준비 큐에 도착하는 시간이 불규칙한 환경에서는 선점형 방식이 프로세스들의 평균 대기시간 최소화
반면, 일련의 프로세스들이 준비 큐에 한번에 도착하고 그 후에 따로 도착하지 않는 환경에서는 둘다 비슷
일반적인 시분할 환경에서는 중간에 새로운 프로세스가 도착하는 경우가 많으므로 선점형이 평균 대기시간 가장 많이 줄임
프로세스의 CPU 버스트 시간을 미리 알 수 없는 문제
예측을 통해 CPU 버스트 시간 구함. 예측치가 가장 짧은 프로세스에게 CPU 할당
165p 참고
문제점 평균 대기 시간을 최소화하지만, 시스템에서 평균을 줄이는 것은 항상 좋은 방식 아님
Starvation(기아): 버스트가 짧은 CPU에게만 CPU 할당시, 버스트가 긴 프로세스는 준비 큐에 서서 무한 정 기다리는 문제 발생
6.4.3 우선순위 스케줄링
준비 큐에서 기다리는 프로세스들 중에서 우선순위가 가장 높은 프로세스에게 제일 먼저 CPU 할당
우선순위 값을 표시
우선순위 값 결정 기준은 여러가지
CPU 버스트 시간을 우선순위로 정하면 SJF 알고리즘과 동일
우선순위도 선점형, 비선점형으로 나뉨
문제점
기아 현상 발생
해결책
againg 기법 사용
기다리는 시간 길어지면 우선순위 조금씩 높임
6.4.4 라운드 로빈 스케줄링
시분할 시스템의 성질을 가장 잘 활용한 새로운 스케줄링
각 프로세스가 CPU를 연속적으로 사용할 수 있는 시간이 특정 시간으로 제한
프로세스는 단지 준비 큐 뒤로 가서 자기 차례 기다림
할당시간이 너무 길면 FCFS와 같은 결과 나옴
CPU 버스트 시간이 매우 긴 프로세스가 모든 작업을 수행할 만큼 할당 시간을 길게 설정한 경우
할당시간이 너무 짧으면 CPU 사용하는 프로세스가 너무 빈번하게 교체되어 문맥 교환 오버헤드가 커짐
이질적인 프로세스가 같이 실행되는 환경에서 효과적
n개의 프로세스가 준비큐에 있고 할당시간이 q일 때
모든 프로세스는 (n-1)q시간 내에 적어도 한번은 CPU 할당 받음
장점
대화형 프로세스의 빠른 응답 시간 보장
CPU버스트가 긴 프로세스에게 특별히 불이익 없음
각 프로세스 대기시간은 그 포레스의 CPU 버스트 시간에 비례
할당시간이 만료되어 CPU 회수하는 방법은 타이머 인터럽트
비교
SJF 스케줄링은 평균 대기 시간에서는 가장 우수
하지만 CPU 버스트 시간이 짧은 프로세스에게만 유리
CPU 버스트 시간이 긴 프로세스들은 전체 시스템의 성능 향상 시키기 위해 희생해야함
일부의 희생을 통해 전체 성능 향상시키는 방법으로, 형평성을 간과
라운드 로빈은 공정한 스케줄링 방식
CPU 버스트 시간을 작은 단우로 나누어 실행
CPU 사용양이 적으면 소요 시간 짧아짐
반대로 사용양 많으면 소요시간도 거기에 비례해서 증가
대기시간도 마찬가지
SJF는 평균 대기시간, 평균 소요 측면에서 좋은 결과 / 하지만 프로세스 간 대기시간, 소요시간 편차가 크며 평균 응답시간 지나치게 길어지는 문제 round robin은 평균 대기시간과 평균 소요시간이 FCFS보다 비효율적, 하지만 평균 응답시간은 더 짧아짐.
172P에 문제 예제 있음
6.5 멀티레벨 큐
준비큐를 여러 개로 분할해 관리하는 스케줄링 기법.
즉, 프로세스들이 CPU를 기다리기 위해 한 줄로 서는 것이 아닌 여러 줄로 서는것
문제점
CPU는 하나밖에 없어서 어떤 줄에 서 있는 프로세스를 우선적으로 스케줄링 할지
또한 프로세스가 도착 했을 때 어느 줄에 세워야 할지 결정하는 메커니즘 필요
성격이 다른 프로세스는 별도 관리
프로세스 성격에 맞는 스케줄링 적용하기 위해 준비 큐를 별도로 둠
예컨대 빠른 응답을 필요로 하는 대화형 작업과
그렇지 않은 작업을 별도의 큐에 줄을 세우고 대화형 작업이 기다리고 있다면 이들에게 우선적 CPU 할당
대화형 작업이 없을 때 나머지 작업에게 CPU 할당
위 예제와 같이 대화형 작업을 담기 위한 전위 큐(foreground queue)
계산 위주의 작업 후위큐(back-ground queue)로 분할 운영
전위큐는
응답시간을 짧게하기 위해 라운드 로빈 스케줄링
후위큐는
FCFS를 사용해 context switching 오버헤드 줄임.
계산 작업이라 응답시간이 큰 의미 없음
또 다른 스케줄링이 필요 큐 자체에 대한 스케줄링
여러 개의 준비 큐에 대해 어느 큐에 먼저 CPU를 할당할지 스케줄링 필요 1. 가장 쉽게 생각할 수 있는 고정 우선순위 방식
큐에 고정적인 우선순위를 부여
즉, 전위 큐에게 프로세스 우선적 CPU 할당
후위 큐는 전위 큐가 비어있을 경우에만 CPU 할당 가능
타임 슬라이스 방식
큐에 대한 기아 현상 해소
각 큐에 대한 CPU 시간을 적절한 비율로 할당
6.4 멀티 레벨 피드백 큐
CPU를 기다리는 프로세스를 여러 큐에 줄 세운다는 측면에서 멀티레벨 큐와 동일
차이점: 프로세스가 하나의 큐에서 다른 큐로 이동가능하다는 점
프로세스들의 다양한 성격을 반영해 구현 가능
예컨대, 우선순위 스케줄링에서 기아 현상을 해결하기 위해 aging 기법을 멀티레벨 피드백 큐 방식으로 구현 가능
우선순위가 낮은 큐에서 오래 기다렸으면 우선순위가 높은 큐로 승격시키는 방식
큐를 정의 하는 요소들
큐의 수
각 큐의 스케줄링 알고리즘
프로세스를 상위 큐로 승격시키는 기준
프로세스를 하위 큐로 강등시키는 기준
프로세스가 도착했을 때 들어가는 큐를 결정하는 기준
멀티 레벨 피드백 큐 돌아가는 방식
라운드 로빈을 한층 더 발전 시켜 프로세스의 CPU 작업 시간을 다단계로 분류, 작업 시간이 짧은 프로세스일수록 더욱 빠른 서비스가 가능하도록 함
작업시간이 긴 프로세스에 대해 문맥 교환없이 CPU 작업에만 열중할 수 있는 FCFS 방식 채택
6.4.7 다중 처리기 스케줄링
6.4.8 실시간 스케줄링
시분할 시스템은 작업 처리가 빠를 수록 좋지만 특정 시간 이내에 처리하지 못했다고 해서 심각한 상황 ㄴㄴ
작업에 데드라인 존재하지 않음
이와 달리 실시간 시스템에서는 각 작업마다 주어진 데드라인 존재(이 안에 끝내야함)
hard real-time system
soft real-time system
1번은
미사이 발사, 원자로 제어 등 정확히 지켜야 하는 시스템
정해진 시간 안에 작업이 완료되도록 스케줄링 해야함
2번은
데드라인 존재하지만 안지켰다고 해서 심각한 상황 발생 ㄴㄴ
멀티미디어 스트리밍 시스템이 대표적, 시간당 정해진 프레임 수만큼의 서비스가 안이뤄지면 화면 중간에 끊김
근데 이게 치명적인 결과 초래 ㄴㄴ
Last updated
Was this helpful?