10_프로세스 스케줄링
다중 프로그래밍의 목적은 CPU의 사용을 최대화 화기 위하여 항상 어떤 프로세스가 실행 되도록 하는데 있다.
시분할의 목적은 각 프로그램이 실행 되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에서 빈번하게 CPU를 교체하는 것이다.
위 두 개의 목적을 달성하기 위해 프로세스 스케줄러가 존재한다. 프로세스 스케줄러는 CPU에서 수행 가능한 여러 프로세스들 중에서 하나의 프로세스를 선택 한다. 단일 처리기 시스템에서는 실행 중인 프로세스가 한 개 이상 있을 수 없다. 만약 단일 처리기에 여러 프로세스들이 있다면 프로세스들은 CPU가 작업이 끝날 때까지 대기하여야 한다.
프로세스가 시스템에 들어오면 작업 큐에 놓여 진다.(메인 메모리 위치) 이 큐는 시스템 안의 모든 프로세스로 구성 된다. 준비 완료 상태에서 실행을 대기하는 프로세스를 준비 완료 큐(Ready Queue)라고 하며 리스트상에 유지 되며 연결 리스트로 저장 된다. 준비 완료 큐의 헤더는 리스트의 첫 번째와 마지막 PCB를 가리키는 포인터를 포함한다. 각 PCB는 준비 완료 큐에 있는 다음 프로세스를 가리키는 포인터 필드를 가진다.
시스템에는 다양한 큐들이 있다. 장치 큐(Device Queue)라고 불리는 특정 입/출력 장치를 대기하는 프로세스도 있다. 각 장치는 그 자신의 장치 큐를 가진다.
아래 그림을 보면 프로세스는 가장 먼저 큐에 넣어 진다. 프로세스가 새로운 서브 프로세스를 생성하고 그 프로세스 종료를 기다린다. 프로세스가 인터럽트 결과에 의해 강제로 CPU로부터 제거되고 준비 완료 큐에 다시 놓일 수 있다.
프로세스는 일생 동안(종료될 때 까지)에 다양한 상태의 스케줄링 큐로 변경 된다. 운영체제는 어떤 방식으로든지 스케줄링 목적을 위해 프로세스들을 이 큐에서 반드시 선택 해야 한다. 이때 선택 절차는 스케줄러에 의해 수행 된다.
시스템을 요청 작업을 수행 하는데 있어서 즉시 실행 할 수 있는 것보다 더 많은 프로세스들이 요청되기도 한다. 이때 프로세스들은 대용량 메모리(또는 디스크)에 저장되어 나중에 실행 될 때까지 대기하게 된다.
장기 스케줄러(작업 스케줄러)는 이 풀에서 프로세스들을 선택하여 실행하기 위해 메모리로 적재 한다. 단기 스케줄러(CPU 스케줄러)는 실행 준비가 완료되어 있는 프로세스들 중에서 선택하여 CPU에 할당 한다.
장기 스케줄러와 단기 스케줄러의 주요 차이점은 실행 빈도에 있다.
단기 스케줄러는 CPU를 위해 자주 새로운 프로세스를 선택 한다. 실행 간격이 짧기 때문에 반드시 빨라야 한다.
장기 스케줄러는 실행 빈도수가 훨씬 적다. 시스템에서 새로운 프로세스를 생성하는 간격이 수 분일 수도 있다. 장기 스케줄러는 다중 프로그래밍의 정도(메모리에 있는 프로세스들의 수)를 제어 한다. 장기 스케줄러는 실행간격이 크기 때문에 실행할 프로세스를 선택하는데 시간을 더 사용해도 된다.
대부분의 프로세스들은 입/출력 중심 또는 CPU 중심으로 묘사된다.
- 입/출력 중심 프로세스는 연산보다 입/출력 수행에 더 많은 시간을 소요하는 프로세스 이다.
- CPU 중심 프로세스는 입/출력 프로세스보다 연산에 시간을 더 소요하여 입/출력 요청을 드물게 발생시키는 프로세스이다.
장기 스케줄러는 입/출력 중심과 CPU 중심 프로세스들의 적절한 프로세스 혼합(mix)을 선택하는것이 중요하다.
입/출력 중심일 경우 준비 완료 큐는 항상 비게 되고 단기 스케줄러는 할 일이 없게 된다. 반면 CPU 중심으로만 이루어 진다면 입/출력 대기 큐는 항상 비어있는 상태가 되고 장치들은 사용되지 않으며 시스템 균형을 잃게 된다.
시분할 시스템과 같은 일부 운영체제들은 추가로 중간 수준의 스케줄링을 도입 한다. 스와핑(swapping)이라 불리는 이 방법은 메모리에서 프로세스들을 제거한 다음 차후 실행 시 다시 메모리에 프로세스를 불러와서 중단되었던 시점부터 실행을 재개 한다.
CPU를 다른 프로세스로 교환하려면 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 보관된 상태를 복구하는 작업이 필요하다. 이 작업을 문맥 교환(Context Switch)이라 한다.
문맥 교환이 일어나면 커널은 과거 프로세스의 문맥을 PCB에 저장하고 새로운 프로세스의 저장된 문맥을 복구 한다. 문맥 교환이 일어날 동안 시스템은 아무런 일을 못하기 때문에 순수 오버헤드로 간주 된다. 또한 오버헤드는 메모리의 속도, 복사되어야 하는 레지스터의 수, 특수 명령어 등의 환경에 따라 달라진다.
[참고자료]
- Operating System Concept / 홍릉과학 출판사
- Multiprogrammed Batch systems :
- 컨텍스트 전환 :
'SW Engineering > OS Concept' 카테고리의 다른 글
12_프로세스간 통신 (0) | 2015.07.16 |
---|---|
11_프로세스에 대한 연산 (0) | 2015.07.16 |
09_프로세스 개념 (0) | 2015.07.16 |
08_시스템 부트 (0) | 2015.07.16 |
07_가상 머신(Virtual Machine) (0) | 2015.07.16 |