-
프로세스 스케줄링 큐
3가지의 스케줄링 queue
스케줄링 큐에는 3가지 큐가 있다. job queue, ready queue와 wait(or device) queue이다.
job queue는 시스템 내에 있는 모든 프로세스의 집합이다.
ready queue는 메인 메모리에 상주하면서 실행될 준비를 하고 기다리는 프로세스 집합이다. 즉, 스케줄러에게 선택되어 CPU에 올라가기를 기다리는 프로세스들의 집합이다. 프로세스에게 CPU 코어가 할당되면 프로세스는 잠시 동안 실행되어 종료되거나 인터럽트 되거나 I/O 요청의 완료와 같은 특정 이벤트가 발생할 때까지 기다린다. 입출력 장치는 프로세서보다 상당히 느리게 실행되므로 프로세스는 I/O가 사용 가능할 때까지 기다린다.
디스크는 다른 여러 프로세스들의 I/O 요청을 처리해야 해서 많이 바쁘고 속도도 느리다. 프로세스가 I/O 요청을 했을 때, 디스크를 기다려야 하기 때문에 아무 일도 하지 않는 프로세스가 CPU에 존재하는 것은 자원 낭비다. 이 때 특정 입출력 장치를 대기하는 프로세스는 device queue로 옮겨진다. device(wait) queue는 입출력 장치와 CPU 속도 차이 때문에 있다. 각 장치는 자신의 device queue를 가진다.
queue의 특징
큐는 일반적으로 연결 리스트로 구현된다. 큐 헤더는 리스트 내의 처음과 마지막 PCB를 가리키는 포인터를 포함한다. 각 PCB는 다음 PCB를 가리키는 포인터를 포함한다.
프로세스 스케줄링
새로운 프로세스는 초기에 준비 큐에 놓인 후, 실행을 위해 선택(dispatch)될 때까지 준비 큐에서 기다린다. CPU에 프로세스가 할당되고 running 상태가 되면, 여러 이벤트 중 하나가 발생할 수 있다.
- 프로세스가 입출력 요청을 공표한 다음 I/O 대기 큐에 놓일 수 있다.
- 프로세스가 새로운 자식 프로세스를 생성한 다음 자식의 종료를 기다리는 동안 대기 큐에 놓일 수 있다.
- 프로세스가 인터럽트 발생을 기다린다.
- 할당된 시간 간격이 초과되어 프로세스가 코어에서 강제로 제거되어 준비 큐로 돌아갈 수 있다.
스케줄러
스케줄러 : 다양한 큐에 있는 프로세스들 집합에서 실행을 위해 한 개의 프로세스를 선택하는 역할을 수행하는 운영체제의 컴포넌트다.
- 장기 스케줄러 or job 스케줄러 : 디스크에 대기 중인 프로세스들 중에서 준비 큐로 옮겨질 프로세스들을 선택한다.
- 가끔씩 호출되기 때문에 느려도 괜찮다.
- 메모리에 상주하는 프로세스의 개수를 제어한다.
- 한 프로세스가 시스템을 떠날 때만 호출될 필요가 있다.
- 문맥 전환 오버헤드가 단기 스케줄러에 비해 크다.
- 프로세스 성격[CPU or I/O bound]에 따라 적절한 조합이 필요하다. 만일 모든 프로세스들이 입출력 중심이라면, ready queue는 항상 비게 되고, 단기 스케줄러는 할 일이 없게 된다. 만약 모든 프로세스들이 CPU 중심이라면, 입출력 대기 큐는 항상 비어 있는 상태가 되고, 장치들이 사용되지 않을 것이다.
- 단기 스케줄러 or CPU 스케줄러 : 준비 큐에 있는 프로세스들 중에서 다음에 CPU에서 실행될 프로세스를 선택한다.
- CPU를 위해 자주 새로운 프로세스를 선택해야 해서 매우 자주 호출된다. 그러므로 빨라야 한다.
프로세스들은 다음 두 가지 특징 중 하나로 표현된다.
- I/O bound 프로세스 : CPU 계산보다는 입출력 계산에 보다 더 많은 시간을 소비한다. 많은 짧은 CPU burst(cpu 명령을 실행하는 것)가 발생한다.
- CPU bound 프로세스 : 입출력 요청보다는 CPU 계산에 더 중점적으로 시간을 할애한다. 소수의 긴 CPU burst가 발생한다.
현대 대부분의 운영체제는 장기 스케줄러를 잘 사용하지 않는다. Unix, Windows XP와 같은 시분할 시스템에서는 장기 스케줄러를 사용하지 않는다. 대신 모든 새로운 프로세스는 단기 스케줄러에 의해 가상 메모리에 적재된다.
일부 운영체제는 스와핑(Swapping)이라는 중기 스케줄러(medium-term scheduler) 개념을 사용한다. 메모리에서 프로세스들을 제거하여 디스크로 옮기는 것을 Swap out, 디스크에서 메모리로 옮기는 것을 Swap in이라고 한다. Swap out을 하면서 프로세스를 CPU를 위한 경쟁에서 제거하여 다중 프로그래밍의 정도를 완화시키는데 사용된다.문맥 전환(Context Switch)
문맥 전환은 한 프로세스에서 다른 프로세스로 CPU를 전환하는 작업이다. CPU가 다른 프로세스로 전환될 때, 시스템은 이전 프로세스 상태를 저장하고, 지정된 다른 프로세스의 상태를 적재한다. 문맥 전환이 진행될 동안 시스템은 아무런 일도 못하기 때문에 문맥 전환 시간은 순수한 오버헤드다.
문맥 전환 속도는 메모리으 ㅣ속도, 반드시 복사되어야 하는 레지스터의 수, 특수 명렁어의 존재에 좌우되므로 기계마다 다르다.