CPU 스케줄러
• 어떤 프로세스에 CPU 자원을 할당할지 결정하는 운영체제 커널의 모듈
• 프로세스를 선택할 때에는 응답시간/처리량/효율성 등을 증대시킬 수 있는 방법을 고려해야 한다.
◦ 응답시간 : 첫 응답이 나올 때 까지 걸리는 시간
◦ 처리량 : 단위 시간 내에 완료시켜준 프로세스가 몇 개인지
◦ 효율성 : 문맥교환이 적절히 일어나는지
장기 스케줄링
• 어떤 프로세스를 Ready Queue 에 삽입할지 결정하는 작업
◦ 작업 스케줄링이라 부르기도 한다.
◦ 디스크에서 어떤 프로그램을 가져와 커널(Ready Queue)에 등록할지 결정하는 작업
- 디스크에서 가져온 프로그램을 커널에 등록하면 프로세스가 된다.
◦ 새로운 프로세스 생성 단계 (new)
• 메모리에 동시에 올라가 있는 프로세스의 수를 조절하는 작업도 포함
• 호출 빈도수가 적기 때문에 상대적으로 속도가 느린 것이 허용된다.
• 요즘 운영체제에서는 잘 사용하지 않는다.
◦ 과거에는 메모리 크기가 작아 너무 많은 프로세스가 커널에 올라오면 프로세스당 할당해줄 수 있는 메모리가 적어졌기 때문에,
이를 해결하기 위해 장기 스케줄링이 사용되었다.
◦ 요즘은 하드웨어가 발달해 메모리를 신경 쓸 필요가 없어졌다. 프로세스가 시작되면 장기 스케줄링을 거치지 않고 바로 메모리를
할당받은 다음 Ready Queue 에 들어간다.
단기 스케줄링
• Ready Queue 에 있는 프로세스 중 무엇을 다음 번에 실행 상태로 만들 것인지 결정하는 작업
◦ CPU 스케줄링이라 부르기도 하며, 일반적으로 스케줄러라 함은 단기 스케줄러를 의미한다.
◦ 미리 정해둔 스케줄링 알고리즘에 따라 CPU를 할당할 프로세스를 선택한다.
◦ 프로세스 준비 단계 (new → ready)
• ms 이하의 시간 단위로 매우 빈번하게 호출되기 때문에 수행 속도가 충분히 빨라야 한다.
중기 스케줄링
• 메모리에 적재된 프로세스의 수를 관리하는 작업
◦ 장기 스케줄러와 역할이 비슷하다.
◦ 필요한 이유 : 메모리에 너무 많은 수의 프로세스가 적재되면 프로세스 당 보유하고 있는 메모리량이 극도로 적어지면서
디스크 I/O 가 수시로 발생하게 되는데, 이는 심각한 시스템 성능 저하를 초래한다.
• 스왑 아웃(swap out)
◦ 메모리에 올라와 있는 일부 프로세스에서 메모리를 통째로 빼앗아 디스크의 스왑 영역에 저장하는 행위
◦ 봉쇄 상태의 프로세스가 제일 먼저 스왑 아웃 대상이 된다.
- 봉쇄 상태의 프로세스는 당장 CPU를 획득할 가능성이 없기 때문
◦ 그 다음으로 타이머 인터럽트가 발생해 Ready Queue 로 이동하는 프로세스가 스왑 아웃 대상이 된다.
• 중기 스케줄러의 등장으로 프로세스의 상태에 Suspended 상태가 추가 되었다.
◦ 메모리를 통째로 빼앗기고 디스크로 스왑 아웃된 상태를 의미
- Suspended Blocked : 봉쇄 상태에 있던 프로세스가 디스크로 스왑 아웃
- Suspended Ready : 준비 상태에 있던 프로세스가 디스크로 스왑 아웃
- Suspended Blocked 상태가 특정 조건을 만족하면 Suspended Ready 상태가 된다.
디스패처
• CPU 코어의 제어를 CPU 스케줄러가 선택한 프로세스에 주는 모듈
• 디스패치
◦ 준비 리스트에 있던 프로세스 중 하나를 선택(스케쥴링)해 실행하는 것
◦ 이 때 Context Switching이 일어난다.
- 자발적 문맥 교환 : 사용 불가능한 자원(blocked 등)을 요청했으므로 프로세스가 CPU 사용을 포기
- 비자발적 문맥 교환 : 시간 제한이 만료되었거나 우선순위가 더 높은 프로세스에 의해 CPU를 뺏김
• 프로세스 Context Switching 이 일어날 때 마다 디스패처가 호출되므로, 가능한 빠르게 수행되어야 한다.
• 디스패처가 하나의 프로세스를 정지하고 다른 프로세스의 수행을 시작하는데 까지 소요되는 시간을 디스패치 지연(Dispatch Latency)
이라고 부른다.
참고자료
'CS Knowledge > 운영체제' 카테고리의 다른 글
[OS] 인터럽트 개념과 이중모드 (0) | 2022.09.16 |
---|---|
[OS] CPU 스케줄링 알고리즘 (0) | 2022.09.16 |
[OS] 스레드와 멀티스레드 (0) | 2022.09.08 |
[OS] 프로세스와 Context Switching (0) | 2022.09.08 |
[OS] 운영체제 구조 (0) | 2022.09.07 |