📍 한정적인 메모리를 여러 프로세스가 효율적으로 사용할 수 있도록 다음 실행 시간에 실행할 수 있는 프로세스를 선택하는 역할
수많은 Process/Thread 가 있고, 이를 수행할 CPU core/thread는 한정되어 있기 때문에, 우리는 Process/Thread를 어떻게 처리를 할지 Scheduling을 해야한다.
이러한 프로세스는 여러 State의 상태를 가지며 이에따라 다르게 Scheduling을 해야한다. 이를 위해 3가지 종류의 Queue가 존재한다.
▪️ Job Queue(batch queue) : 현재 시스템 안의 모든 프로세스의 집합
▪️ Ready Queue : 현재 메모리 내에 적재되어 있으며 ready 상태인 모든 프로세스의 집합
▪️ Device Queue : I/O 장치 사용을 대기하는 프로세스의 집합
각각의 Queue에 프로세스들을 넣고 빼주는 스케줄러는 크게 세 가지 종류가 존재한다.
✅ 초, 분 단위로 비교적 가끔 호출되므로 속도가 느린 것이 허용된다.
✅ 메모리-디스크 사이의 스케쥴링을 담당하며
✅ 프로세스에 메모리 및 각종 자원을 할당한다.
✅ 메모리에 동시에 올라가 있는(실행 중인) 프로세스의 수를 조절한다.
📍 Swapping ?
✅ 장기 스케줄러와 마찬가지로 메모리에 올라와있는 프로세스의 수를 조절하는 역할을 한다.
✅ 만약 메모리에 많은 수의 프로세스가 적재되어 프로세스 당 보유하고 있는 메모리량이 극도로 적어지면 CPU 수행에 당장 필요한 프로세스의 주소 공간조차도 메모리에 올려놓기 어려운 상황이 발생한다.
✅ 이로인해 디스크 I/O가 수시로 발생하게 되어 시스템의 성능이 심각하게 저하될 수 있다.
✅ 가상 메모리 체제에서 너무 많은 프로세스가 적재되면 하드디스크 입출력이 과다해져서 시스템이 거의 멈추는 현상(Trashing, 메모리 영역에 접근할 때 메모리에 페이지 부재율이 높은 것을 의미함)이 발생한다.
✅ 이런 경우 메모리에 올라와 있는 프로세스 중 일부의 메모리를 통째로 빼앗아 디스크의 스왑 영역에 저장한다.(Swap Out) 이때, 스왑아웃의 대상은 suspended 상태에 놓인 프로세스가 1순위이다.
✅ suspended 프로세스를 swap out 했는데도 문제가 해결되지 않는다면 준비큐로 이동하는 프로세스를 추가적으로 swap out 시킨다.
✅ 메모리에 여유가 생기면 다시 swap in!