프로세스를 스케줄링 하기 위한 큐

프로세스를 스케줄링 하기위한 큐는 작업큐, 준비큐, 장치큐 등이 있다.

  • 작업큐 : 시스템 내 모든 프로세스를 관리하기 위한 큐, 프로세스의 상태와 무관하게 현재 시스템 내에 있는 모든 큐가 작업큐에 속하게 된다.
  • 준비큐 : CPU를 할당받고 실행되기 위해 기다리는 프로세스를 관리하기 위한 큐
  • 장치큐 : 각각 장치마다 서비스를 기다리며, 줄서있는 큐. (봉쇄상태에 있는 큐)
    장치큐는 각각의 자원마다 큐가 하나씩 존재한다. 장치큐에 속한 프로세스들은 봉쇄상태에 있다가 해당 장치의 서비스를 받고 나서, 장치 컨트롤러가 인터럽트를 발생시키면 준비상태로 바뀌어 준비큐로 이동하게 된다.

  • 큐는 각 프로세스의 PCB를 연결리스트 형태로 줄세우게 되며, 포인터를 사용해 순서를 정하게 된다.

스케줄러 (Scheduler)

content01

  • 스케줄러란 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 모듈을 지칭한다.
  • 장기 스케줄러 = 작업 스케줄러(Job Scheduler)
    어떤 프로세스를 준비큐에 삽입할지 결정.
    처음 프로세스가 생성되면, 시작상태를 거쳐 준비상태에 이르게 되는데 장기 스케줄러는 시작상태의 프로세스들 중 어떠한 프로세스를 준비큐에 삽입할건지 결저하는 역할을 한다.
    메모리에 동시에 올라가 있는 프로세스의 수를 조절하는 역할을 한다.
    그러나, 현대의 시분할 시스템에서 사용되는 운영체제는 일반적으로 장기스케줄러를 두지 않은 경우가 대부분이다.
    (장기 스케줄러는 과거에 자원이 매우 빈약하던 시절에 주로 사용되었다.)
    현대의 시분할 시스템용 운영체제에서는 프로세스가 시작상태가 되면, 장기스케줄러 없이 곧바로 그 프로세스에게 메모리를 할당해 준비큐에 넣어주게 된다.
    현대의 시분할 시스템용 운영체제에서는 장기 스케줄러 대신에 중기스케줄러를 두는 경우가 많다.

  • 중기 스케줄러
    중기스케줄러는 메모리에 적재된 프로세스의 수를 동적으로 조절하기 위해 추가된 스케줄러이다.
    너무 많은 프로세스가 메모리에 적재되어 프로세스당 보유 메모리 양이 지나치게 적어진 경우, 이를 완화하기 위해 일부 프로세스를 메모리에서 스왑 아웃(swap out)시키는 역할을 수행한다.
    이때, 스왑아웃 되는 0순위 프로세스는 봉쇄 상태에 있는 프로세스이다.
    (봉쇄상태에 있는 프로세스들의 경우는 당장 CPU를 획득할 가능성이 없기 때문에, 메모리를 보유하는것이 큰 의미가 없기 때문이다.)
    봉쇄상태인 프로세스를 모두 스왑아웃 시킨 후에도 메모리 공간이 부족한 경우, 중기스케줄러는 보통 타이머 인터럽트가 발생해 준비큐로 이동한 프로세스들을 추가적으로 스왑아웃 시킨다.
    중기 스케줄러의 등장으로 인해 프로세스의 상태는 실행, 준비, 봉쇄 외에 하나의 상태가 더 추가되었다.
    외부적인 이유로 프로세스의 수행이 정지된 상태를 나타내는 중지(suspended, stooped) 상태다.
    중지상태에 있는 프로세스는 외부에서 재개시키지 않는 이상 다시 활성화될 수 없으므로, 메모리 자원이 당장 필요하지 않다. 따라서, 중지상태의 프로세스는 메모리를 통째로 빼앗기고 디스크로 스왑아웃된다.
    중지 상태는 중지 준비 상태중지 봉쇄 상태로 세분화 할 수 있다.
    중지 상태에 있는 프로세스들은 중지 준비 상태에 있든 중지 봉쇄 상태이든 관계없이 메모리를 조금도 보유하지 않고 디스크에 통째로 스왑 아웃된 상태로 존재하게 된다.

  • 단기 스케줄러 = CPU 스케줄러
    준비상태의 프로세스들 중에서 어떤 프로세에게 CPU를 할당하여 다음번의 실행상태로 만들지를 결정.
    시분할 시스템에서는 타이머 인터럽트가 발생하면, 단기 스케줄러가 호출된다.

출저