[출처] 쉽게 배우는 운영체제론
1. CPU 스케줄링?
: 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원을 어떻게 배정할지 결정하는 일.
: CPU 스케줄러가 담당함
2. 스케줄링의 단계
: CPU 관리의 범주
1) 고수준 스케줄링(=장기 스케줄링, 작업 스케줄링, 승인 스케줄링)
- 많은 작업을 동시에 하면 시스템에 과부하가 걸려 작업이 원할해지지 않음
- (프로세스를 활성화할지 말지 결정하는 방식으로)시스템 내의 전체 작업 수 조절
- 어떤 작업을 시스템이 받아들일지 OR 거부할지 결정
- 고수준 스케줄링에 따라 시스템 내에서 동시 실행 가능한 프로세스의 총 개수가 정해짐=> 멀티프로그래밍 정도(degree of multiprogramming)
2) 저수준 스케줄링((=단기 스케줄링)
- 가장 작은 단위의 스케줄링(프로세스 단위)
- 어떤 프로세스에 CPU를 할당할지 결정(준비상태=>실행상태)
- 어떤 프로세스를 대기상태(I/O 작업을 위함)로 보낼지 결정
- 실제 작업이 이루어짐
3) 중간 수준 스케줄링
- 고수준 스케줄링과 저수준 스케줄링 사이에서 일어나는 스케줄링
- (고수준 스케줄링 이후) 프로세스가 활성화된 후에도 여러 가지 사정으로 시스템에 과부하가 걸릴 수 있음
- 중지(suspend)와 활성화(active), 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막음
- => 일부 프로세스를 중지 상태로 옮겨 나머지 프로세스가 원만하게 작동하도록 지원(보류 상태)
- 저수준 스케줄링이 원만하게 이루어지도록 완충하는 역할
- 시스템 부하 조절
(+) 오늘날의 cpu 스케줄링은 대부분 저수준 스케줄링 + 중간 수준 스케줄링으로 이루어짐. 고수준은 메인프레임과 같은 큰 시스템에서 규모가 큰 일괄작업을 처리할 때 사용함.
(+) 앞으로 말하는 스케줄러는 별다른 명시가 없으면 저수준 스케줄링임.
3. 스케줄링의 목적: 모든 프로세스가 공평하게 작업하도록 하는 것
- 공평성: 모든 프로세스가 자원을 공평하게 배정받아야 함
- 효율성: 시스템 자원이 유휴 시간없이 사용되도록 스케줄링. 유휴 자원을 사용하려는 프로세스에는 우선권을 주어야 함.
- 안정성: 시스템 자원을 점유하거나 파괴하려는 프로세스로부터 자원을 보호해야 함
- 확장성: 프로세스가 증가해도 시스템이 안정적으로 작동하도록 조치해야 함
- 반응 시간 보장: 시스템은 적절한 시간 안에 프로세스의 요구에 반응해야 함
- 무한 연기 방지
- BUT, 운영체제 프로세스는 일반 프로세스보다 우선적으로 CPU를 배정받아야 함(시스템의 안정성과 효율성을 높이기 위함)
4. 선점형 스케줄링 VS 비선점형 스케줄링
1) 선점형 스케줄링
- (어떤 프로세스가 CPU를 할당받아 실행 중이더라도) 운영체제가 CPU를 강제로 빼앗을 수 있는 스케줄링
- EX) 인터럽트 처리- I/O작업을 위해 실행 상태=> 대기 상태로 이동
- 단점: 부가적인 작업(EX, 문맥교환)으로 인한 낭비 발생
- 하나의 프로세스가 CPU 독점 불가능=> 빠른 응답시간을 요구하는 대화형 시스템 OR 시분할 시스템에 적합
- 대부분의 저수준 스케줄러는 선점형 스케줄링 방식 사용
2) 비선점형 스케줄링
- 어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 스케줄링 방식
- 어떤 프로세스가 실행 상태에 들어가 CPU를 사용하면 그 프로세스가 종료되거난 자발적으로 대기 상태에 들어가기 전까지는 계속 실행 됨
- 장점: 선점형 스케줄링보다 스케줄러의 작업량이 적고 문맥 교환에 의한 낭비도 적음
- 단점: CPU 사용 시간이 긴 프로세스 때문에 CPU 사용 시간이 짧은 여러 프로세스가 오랫동안 기다리게 되어 전체 시스템의 처리율이 떨어짐
- 과거 일괄 작업 시스템에세 사용하던 방식
5. 프로세스 우선순위
- 커널 프로세스>일반 프로세스
- 일반 프로세스의 우선순위는 사용자가 조절할 수 있음
- 관리자만 우선순위를 높일 수 있고 일반 계정은 우선순위를 낮누는 것만 가능
6. CPU 집중 프로세스와 입출력 집중 프로세스
- CPU 버스트: CPU를 할당받아 실행하는 작업
- 입출력 버스트: 입출력 작업
- CPU 집중 프로세스: CPU 버스트가 많은 프로세스
- 입출력 집중 프로세스: 입출력 버스트가 많은 프로세스
- => 입출력 집중 프로세스를 CPU 집중 프로세스보다 먼저 실행 상태로 옮기는 것이 효율적(다른 프로세스가 CPU를 사용할 수 있기 때문)
- => 사이클 훔치기(cycle sealing): 입출력 프로세스가가 CPU 집중 프로세스보다 실행 상태에 먼저 들어가는 경우
7. 전면 프로세스 VS 후면 프로세스
1) 전면 프로세스
- GUI를 사용하는 운영체제에서 화면의 맨 앞에 높인 프로세스
- 현재 입출력을 사용하는 프로세스
- 사용자와 상호작영이 가능- 상호작용 프로세스
2) 후면 프로세스
- 사용자와 상호작용이 없는 프로세스
- 사용자의 입력 없이 작동- 일괄 작업 프로세스
=> 전면 프로세스는 사용자의 요구에 즉각 반응해야 하기 때문에, 전면 프로세스의 우선순위가 후면 프로세스보다 높음
BUT, 프로세스에 따라 대화형인지, 입출력 집중인지 명확한지 구분할 수 없는 경우도 존재. 이때는 우선순위 고려가 어려울 지도..
8. 다중큐
1) 왜 필요함? 프로세스의 중요도는 프로세스 제어 블록(PCB)에 표시된다. CPU 스케줄러는 모든 PCB를 뒤져서 가장 높은 우선순위의 프로세스에 CPU를 할당하는데, 매번 PCB를 검색하는 것은 번거로움.
8-1. 준비상태의 다중 큐
- 프로세스의 우선순위를 배정하는 방식
- 고정 우선순위 방식: 운영체제가 프로세스에 우선순위를 부여하면 프로세스가 끝날때까지 바뀌지 않는 방식(구현 쉬움, 시스템 변화에 대응 어려움)
- 변동 우선순위 방식: 프로세스 생성 시 부여받은 우선순위가 프로세스 작업 중간에 변하는 방식(구현 어려움, 시스템의 효율성 높일 수 있음)
- (+) 반전 우선순위: 프로세스의 낮은 우선순위를 높은 우선순위로 바꾸는 것=> 시스템 효율 향상
8-2. 대기상태의 다중 큐
- 시스템 내에 있는 다양한 종류의 입출력 장치가 존재. 대시 상태의 프로세스를 한 곳에 모아놓으면 관리가 불편함.
- => 같은 입출력을 기다리는 프로세스끼리 모여있는 대기 큐를 나타낸 것
8-3. 준비 상태 다중 큐 VS 대기 상태의 다중 큐
- 준비 큐- 한 번에 하나의 프로세스를 꺼내어 CPU 할당
- 대기 큐- 여러 개의 PCB를 동시에 꺼내 준비 상태로 옮김
9. 스케줄링 알고리즘
10. 스케줄링 알고리즘 선택 기준
- CPU 사용률: 전체 시스템의 동작 시간 중 CPU가 사용된 시간을 측정하는 방법
- 처리량: 단위 시간당 작업을 마친 프로세스 수
- 대기시간: 작업을 요청한 프로세스가 작업을 시작하기 전까지 대기하는 시간
- 응답시간: 프로세스 시작 후 첫 번째 출력 OR 반응이 나올때까지 걸리는 시간
- 반환시간: 프로세스가 생성된 후 종료되어 사용하던 자원을 모두 반환하는 데까지 걸리는 시간
=> 스케줄링 알고리즘 성능 비교할 때 주로 평균 대기 시간을 봄
11. FCFS(First Come First Served) 스케줄링(=선입선출 스케줄링)
- 준비큐에 도착한 순서대로 CPU 할당
- 비선점형
- 단점
- 비선점형- 한 번 실행되면 그 프로세스가 끝내야만 다음 프로세스 실행 가능
- 큐가 하나라 모든 프로세스의 우선순위가 동일 함.
- 콘보이 효과 OR 호위 효과: 처리 시간이 긴 프로세스가 CPU를 차지하여 다른 프로세스들이 하염없이 기다려 시스템의 효율성이 떨어지는 문제
- 현재 작업 중인 프로세스가 입출력 작업을 요청하는 경우 CPU가 작업하지 않고 쉬는 시간이 많아져 작업 효율이 떨어지는 것=> 일괄작업시스템
12. SJF(Shortest Job First) 스케줄링(=최단작업 우선 스케줄링)
- 준비 큐에 있는 프로세스 중에서 실행 시간이 가장 짧은 작업부터 CPU를 할당
- 비선점형
- 단점
- 운영체제가 프로세스의 종료 시간을 정확하게 예측하기 어려움=> WHY? 사용자와의 상호작용(입출력 등)이 빈번하게 발생하기 때문.
- 공평하지 못함=> 아사현상 OR 무한 봉쇄 현상: 작업 시간이 길다는 이유로 계속 뒤로 밀림
- 해결 방법?
- 프로세스가 자신의 작업 시간을 운영체제에 알려주어 해결 BUT, 프로세스가 자신의 작업 시간을 정확히 알기 어려움 + 일부 악의적인 프로세스가 작업 시간을 속이면 시스템의 효율성이 나빠짐
- 에이징(나이먹기): 프로세스가 양보할 수 있는 상한선을 정하는 방식
(+) SJF는 프로세스 종료시간 파악 어려움 + 아사현상 발생 때문에 잘 사용하지 않음
13. HRN(Highest Response Ratio Next) 스케줄링(=최고 응답률 우선 스케줄링)
- 대기시간과 CPU 사용시간을 고려하여 스케줄링 하는 방식=> 아사현상 완화
- 비선점형
(+) SJF와 비교했을 때 대기 시간이 긴 프로세스의 우선순위를 높여 CPU 할당받을 확률을 높였지만, 여전히 공평성이 위배되어 많이 사용되지 않음
14. 라운드 로빈(Round Robin) 스케줄링
- 한 프로세스가 할당받은 시간(타임 슬라이스) 동안 작업을 하다가 작업을 완료하지 못하면 준비 큐의 맨 뒤로 가서 자기 차례를 기다리는 방식
- 선점형
- FCFS와 유사한데 타임슬라이스(CPU를 사용할 수 있는 최대시간)가 있음
- 우선순위가 적용되지 않은 가장 단순한 선점형 스케줄링 방식
- 장점
- 선점형- 프로세스가 CPU를 일정 시간 동안 사용한 후 다른 프로세스에 주어야 하기 때문에 앞의 긴 작업을 무작정 기다리는 콘베이 효과가 감소함
- 단점
- 라운드 로빈과 FCFS의 평균 대기 시간이 같다면 라운드 로빈이 더 비효율적인 알고리즘임=> WHY? 선점형이라 문맥 교환 시간이 추가되기 때문
- 타임 슬라이스의 크기는 프로세스의 반응 시간에 영향을 미칠 뿐 아니라 시스템 전체의 성능에도 영향을 미침.
- 타임 슬라이스가 큰 경우: 하나의 작업이 끝난 뒤 다음 작업 시작되는 것처럼 보임. EX) 비디오-워드 작업 시, 비디오가 끊겨보이고 워드프로세서의 반응 속도가 매우 느릴 것임.
- 타임 슬라이스가 작은 경우: 여러 프로그램이 동시에 실행되는 것처럼 느낌. BUT, 너무 작게 설정할 경우 문맥 교환이 너무 자주 일어나 문맥교환에 낭비되는 시간이 많아짐.=> 시스템의 전반적인 성능이 떨어짐.
15. SRT(Shortest Remaining Time) 스케줄링(=최소 잔류 시간 우선 스케줄링)
- SJF 스케줄링 + 라운드 로빈 스케줄링, SJF 스케줄링의 선점형 버전
- 선점형
- 기본적으로 라운드 로빈 스케줄링을 사용하지만, CPU를 할당받을 프로세스를 선택할 때 남아 있는 작업 시간이 가장 적은 프로세스를 선택함
16. 우선순위 스케줄링
- 우선순위를 반영한 스케줄링 알고리즘
- 선점형 OR 비선점형 방식으로 구현 가능
- 고정 우선순위 알고리즘, 변동 우선순위 알고리즘
- 단점
- 공평성 위배, 아사 현상을 일으킴
- 프로세스의 우선순위를 매번 바꿔야 하기 때문에 오버헤드가 발생하여 시스템의 효율성을 떨어뜨림
17. 다단계 큐(Multilevel Queue) 스케줄링
- 우선순위에 따라 준비 큐를 여러 개 사용하는 방식
- 프로세스는 운영체제로부터 부여받은 우선순위에 따라 해당 우선순위의 큐에 삽입 됨
- 고정형 우선순위 사용
- 상단의 큐에 있는 모든 프로세스의 작업이 끝나야 다음 우선순위 큐의 작업이 시작 됨
18. 다단계 피드백 큐(Multilevel Feedback Queue) 스케줄링
- CPU를 사용하고 난 프로세스의 우선순위는 낮아짐
- 우선순위가 낮아진다고 해도 커널 프로세스가 일반 프로세스의 큐에 삽입되지 않음
- 우선순위에 따라 타임 슬라이스 크기가 다름=> 우선순위가 낮은 프로세스가 어렵게 얻은 CPU를 좀 더 오랫동안 사용할 수 있도록 타임슬라이스를 크게 설정
- 마지막 큐에 있는 프로세스는 무한대의 타임 슬라이스를 얻음
- 마지막 큐는 FCFS 스케줄링 방식으로 움직임
'짜투리' 카테고리의 다른 글
[mysql] csv로 export시 한글 깨짐 현상!! 단 3단계로 해결해볼께유~ (0) | 2022.06.09 |
---|---|
[ppt] 만들 때 참고하면 신경 쓰면 좋은 팁들!!! (0) | 2022.05.28 |
[하드웨어] KT3 PRO 블루투스 키보드 재연결 (0) | 2022.03.12 |
[Git] 지옥에서 온 문서 관리자 깃&깃허브 (0) | 2022.03.03 |
[Git] 컴퓨터를 바꿨을 때 vscode에서 깃허브 다시 연동하기 (2) | 2022.03.02 |