위의 그림에 따르면 Scheduling은 Long, Medium, Short 등 각 term별로 3가지로 나뉘어 있는데, 각 Scheduling은 Scheduler에 의하여 분류된다
Job Scheduler라 불리우는 이 스케줄러는 전체적으로는 시스템의 작업에 적합한 프로그램을 할당하는 기능을 한다. 이는 큐 내의 프로세스를 선택하고 CPU 스케줄링을 위한 메모리를 할당하여 준다
디스크와 메모리 사이의 할당, 해지 등의 스케줄링을 담당하며 Ready Queue로 보낼 상황에 적합한 프로세스를 선정하여 메모리를 할당해 준다
또한 I/O *바운드 프로세스와 **CPU 바운드 프로세스간의 적절한 균형을 맞추어 다중 프로그래밍 환경을 조정하는 역할을 가지고 있다
*I/O 바운드 프로세스 : 계산 과정보다 I/O에 더 많은 시간을 소비하는 프로세스
**CPU 바운드 프로세스 : 계산과정에 많은 시간을 소비하는 프로세스
Swapping Scheduler라고도 불리는데 Swapping중 swap in swap out 영역의 과정을 담당한다
프로세서를 메모리에서 할당 해지 시키는 역할을 맞으며 프로세서의 실행 등의 속도를 높여준다. 또한 다중 프로그래밍 정도를 감소시킨다
CPU Scheduler라고도 불리는데 Ready Queue에 존재하여 실행이나 할당 준비가 된 프로세스 중에서 어떤 CPU 코어를 할당할지 등을 정한다
정리하자면 메모리와 CPU사이의 스케줄링을 담당하며 다음에 실행할 프로세스를 결정한다
위의 사진 자료를 다시 보게되면 Ready, Suspend, Blocked등의 세가지가 존재한다
Ready는 준비 상태의 프로세스가 모여있는 큐이다
Suspend는 프로세스와 메모리의 할당을 전부 해지하게 되는 큐이다. 잠시 중지되었다가 트리거로 인하여 준비 상태로 돌아가는 상태이다
Blocked는 잠시 중지되었다가 I/O 작업 등을 기다리지 않고 할당 해지 되었다가 작업이 끝나면 다시 돌아오는 상태이다
Suspend Blocked 상태에서는 기타 나머지 자원 할당도 해지된다
이러한 메모리와 자원의 할당과 해지는 처리 능력의 효율을 높여주고 메모리의 초과사용을 방지하고 가용공간을 확보하기 위해 사용한다
이러한 큐의 변경은 어떠한 기준으로 진행되는걸까? 그 기준은 프로세스 수행에 걸리는 시간에 따라 나뉘어진다
B > R 의 경우 이벤트 발생 시간이 짧게되는 경우고 더 길어지게되면
B > BS큐로 스와핑되어 자원 할당이 전부 해지되고 특정 이벤트를 통하여 RS큐로 이동하게 되며(이 과정을 Wake up이라 표현) 특정 이벤트(I/O입력 등) 등이 발생하면 R큐로 돌아가 CPU에서 일을 수행하게 된다
정리하자면 프로세스는 CPU의 스케줄링을 통해 여러가지 상태로 이루어진 Queue를 왔다갔다 하며 메모리에 적재, 해지를 반복하며 CPU에 의해 실행되고 있는 것이다
CPU는 메모리에 저장되어있는 프로세스를 읽어와서 작업을 수행하게 되는데 현재 작업에 필요하지 않은 메모리를 선별하여 속도가 느린 메모리에서 빠른 메모리로 올려놓는 기능을 스왑이라고 한다
멀티 프로세스가 진행되는 도중 메모리에 적재된 프로세스가 메모리 내에 유지되고 있을 때, 단순히 프로세스를 유지하고 있는 경우 필요한 자원과 지원을 끊고 필요할 때 재할당을 하는 경우 두가지 상황이 있을 수 있다
이때 지원을 잠시 끊고 필요할 때 다시 자원을 재할당하는 경우가 효율적인 경우, 다시말해 다중 프로그래밍 정도를 줄이는 것이 효율적일 때 스왑이 진행되며 이러한 과정을 스와핑이라 한다
스와핑의 과정은 현재 중단된 위치를 기억, 적재된 프로세스를 메모리 내에서 스왑아웃(Swap Out)을 시켜주고 이후 하위수준의 메모리인 디스크 등에서 다시 메모리로 스왑인(Swap In)을 통해 기존의 상태를 복원하여 다시 프로세스를 실행 시켜줄 수 있다