CPU 스케줄링이라는 것에 대해 들어는 봤는데 무엇인지 기억이 안난다.
하나씩 더듬더듬 생각해보자.
모든 프로세스는 실행을 위해 CPU를 필요로 하고 먼저 사용하려고 하는데, 자원은 한정되어 있기 때문에 이 사용에 순서를 정해주어야한다.
이때 운영체제가 프로세스들에게 공정하고 합리적으로 CPU자원을 배분하는 것
이것이 CPU 스케줄링이다!
그렇다면 어떤 방식으로 CPU를 먼저 사용하게 하느냐, 우선순위가 높은 프로세스에게 먼저 할당을 해야한다.
또 그러면 우선순위가 높은 프로세스는 어떻게 정해주느냐,
그거슨 빨리처리해야하는 프로세스를 의미한다고 한다.
예를 들면 입출력 작업이 많은 프로세스가 있는데 이것이 왜 효율적인지를 알려면 프로세스가 어떤 과정을 거치며 실행되는지 알아야한다.
프로세스마다 CPU와 입출력장치를 이용하는 시간이 다르겠죠?
비디오 재생 등 입출력 작업이 많은 프로세스를 입출력 집중 프로세스라고 하고,
복잡한 수학연산, 컴파일 등 cpu 작업이 많은 프로세스를 CPU 집중 프로세스라고 한다.
더 많이 머물러 있는 상태는,
입출력 집중 프로세스 -> 실행 상태 < 대기 상태
CPU 집중 프로세스 -> 실행 상태 > 대기 상태
가 된다.
입출력 버스트(실행)에서는 CPU를 많이 사용하지 않기 때문에 빠르게 사용하고 대기상태로 넘겨
CPU 버스트가 되게 만든다고 하는데... 음 정확히 무슨 의미인지는 계속 읽어봐야겠다.
운영체제가 PCB에 순서를 명시해주는데 당연히 우선순위가 높은 프로세스가 많이, 빨리 실행된다.
그렇지만 해당 프로세스를 찾기위해 PCB를 일일이 찾아다니는 건 비효율적이므로 프로세스들을 줄세우는 스케줄링 큐를 구현하고 관리한다.
이걸 토대로 앞서 봤던 프로세스 상태 다이어그램을 확인할 수 있다.
따단
준비 큐, 대기 큐에 프로세스들이 들어가 순차적으로 실행된다.
그런데 평화로운 이 상황에 CPU를 아주 급하게 써야하는 프로세스가 등장했다고 생각해보자.
선택은 두 가지
1. 냉큼 지금 CPU를 사용하고 있는 프로세스에게서 빼앗아서 준다.
2. 실행되고 있는 프로세스가 끝날 때까지 기다리는다.
첫 번째 선택은 선점형 스케줄링이다.
프로세스마다 정해진 시간만큼 자원을 사용하고 정해진 시간이 지나 타이머 인터럽트가 발생하면 이를 뺏어 다음 프로세스에 할당하는 방식 역시 선점형 스케줄링이다.
두 번째 선택은 비선점형 스케줄링이다.
하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되고나 스스로 대기상태에 들어가기 전까지는 다른 프로세스가 끼어들 수 없다. 자원 사용을 독점할 수 있다는 것이다. wow
각각의 장단이 있는데,
선점형 스케줄링은 Context Switching 과정에서 오버헤드가 발생할 문제점이 있다.
문맥교환, 오버헤드는 정확히 뭔지에 대해서는 우리 발표자가 설명해주겠지? 히히
그리고 스케줄링 알고리즘에는 일곱가지가 있는데 하나씩 알아보자
: 단순히 큐에 삽입된 순서대로 프로세스를 처리하는 비선점형 스케줄링 방식
공정해보이지만 아주 적은 시간의 CPU를 사용해야하는 프로세스가 너무 오래 대기하는 문제 발생
-> 호위 효과라고 함
: 호위 효과를 방지하기 위해서는 위의 문제를 바로 해결해줄 수 있다.
CPU 사용시간이 짧은 프로세스 부터 먼저 실행해주는 것이다.
(비전섬형 스케줄링)
: 선입 선처리 스케줄링 + 타임 슬라이스
타임 슬라이스는 프로세스가 CPU 사용 시간이 정해져 있는 것을 말한다.
(선점형 스케줄링)
: 최단 작업 우선 스케줄링 + 라운드 로빈
정해진 타임 슬라이스만큼 CPU를 사용하지만, CPU를 사용할 다음 프로세스는 남아있는 시간이 가장 적은 프로세스가 선택된다.
: 우선순위가 높은 것부터 실행, 우선 순위가 낮은 프로세스들은 게속해서 연기될 수 있는 기아현상 발생
이를 방지하기 위해 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 에이징 기법을 사용
: 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식
: 다단계 큐 + 프로세스들이 큐 사이를 이동할 수 있음
-> 얘 너무 복잡한데 발표자가 잘 설명좀 ㅎㅎ
대충 이런 알고리즘들을 띄고 있다 ㅇㅅㅇ