출처: https://devraphy.tistory.com/151 [개발자를 향하여:티스토리], https://latter2005.tistory.com/43, https://probe29.tistory.com/43,
(출처는 위 링크! 형광펜은 개인적으로 공부하면서 체크한 부분입니다)
: 다중 프로그래밍을 가능하게 하는 운영 체제의 동작 기법
프로세스들에게 CPU 등의 자원 배정을 적절히 함으로써 시스템의 성능을 개선하는 기법
스케줄러(Scheduler)는 이런 스케줄링(scheduling)을 수행하는 시스템을 지칭한다
하나의 프로세스가 다른 프로세스 대신에 CPU(프로세서)를 차지할 수 있음
현재 CPU를 사용중인 프로세스를 멈추고 다른 프로세스에 CPU를 할당할 수 있다.
ex) 시분할 시스템
하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음
현재 CPU를 사용중인 프로세스가 자발적으로 block(wait)상태로 전환되거나 실행이 끝나는 상태(terminated)가 아닌 경우, CPU를 다른 프로세스에 할당할 수 없다.
ex) 배치 처리 시스템
: 어떤 프로세스를 먼저 실행시킬지에 대한 알고리즘으로 비선점형 스케줄링 방식에 가깝다.
: 시분할 시스템을 위한 기본 알고리즘으로 선점형 스케줄링 방식이다.
스케줄러 정책에는 선점형, 비선점형 스케줄러가 있다. 그리고 스케줄링 알고리즘에는 여러가지가 존재한다.
전체적인 스케줄링은 비선점형으로 하지만, 각 프로세스의 상태를 담는 queue는 시분할 방식인 RoundRobin으로 설정하는 등 다양한 조합방식이 존재한다.
이해하고 넘어가야 할 부분은 스케줄링 정책과 알고리즘을 종류에 따라 구분하지말고, 필요한 기능과 목적에 따라 유연하게 조합할 수 있다는 것을 인지해야 한다.
: 프로세스마다 우선 순위를 미리 지정한다.
: 스케쥴러가 상황에 따라 우선 순위를 동적으로 변경한다.
(+)
출처 : https://probe29.tistory.com/43
우선 순위를 변경하는 시스템 콜
프로세스 중 root가 소유한 프로세스만 우선 순위를 높일 수 있다. root로 실행해야만 가능하다.
다른 프로세스는 우선 순위를 낮출 수만 있다.
스케쥴링 방식에 따라 우선 순위가 적용될 수 도 있고 안될 수 도 있다.
nice() 함수 사용의 예는 다음과 같다.
#include <unistd.h>
int nice (int inc); // inc 값에 우선순위 값을 넣어주면 해당 우선순위를 우선 실행하도록 되어있다.
프로세스의 우선 순위 값을 얻어내거나, 프로세스 리소스에 대해 우선 순위 값을 매겨주는 시스템 콜이다.
사용 예는 다음과 같다.
#include <sys/resource.h>
int getpriority(int which, id_t who);
//현재 시스템콜을 실행하고 있는 프로세스의 우선 순위 값을 얻어내는 시스템 콜
int setpriority(int which, id_t who, int value);
//현재 프로세스 또는 프로세스 관련된 리소스에 대해서 우선 순위 값을 매겨주는 시스템 콜