※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.
일상 생활 속에서도 스케줄링이 존재합니다.

컴퓨터 시스템 안에서도 역시 여러 스케줄링이 존재합니다.
다중 프로그래밍을 도입함으로써 여러 프로세스가 하나의 CPU 를 돌아가며 사용하게 되었습니다.
이를 위해 어떤 순서로 작업을 시킬지에 대한 스케줄링 개념이 필요하게 되었습니다.
그래서 다중 프로그래밍에선 2가지 스케줄링 개념이 필요합니다.

발생하는 빈도 및 할당 자원에 따라 구분됩니다.


CPU 스케줄링의 기본적인 목표는 CPU 활용률을 극대화 하는 것 입니다.
( CPU 를 놀지 않게 하는 것! )
이걸 어떻게 설정하냐 하면, 타임 슬라이싱을 도입해서 설정합니다.
즉, 대부분 운영체제에선 타임 슬라이싱 기법을 도입하여 하나의 쓰레드 ( 혹은 프로세스 ) 가 너무 오랫동안 CPU 를 사용하는 걸 허락하지 않습니다.
그러면.. 한번에 어느정도의 시간을 할당해야 적당한지는 아래와 같은 기준들을 고려해서 정해집니다.
- CPU 활용률 ( CPU utilization ) / Efficiency
- 전체 시간 중 CPU 의 사용 시간 비율, 운영체제 입장
- 처리율 ( throughput )
- 단위시간당 처리하는 프로새스의 갯수, 운영체제 입장
- 공평성 ( fairness ) / Load balancing
- CPU 를 쓰레드들에게 공평하게 배분, 사용자 입장
- 기아현상이 발생하지 않도록 스케줄링
■ 시스템 적인 측면, 높을 수록 좋음
- 응답시간 ( response time )
- 명령에 응답하는데 걸리는 시간, 사용자 입장
- 대기시간 ( waiting time )
- 쓰레드가 준비 큐에 머무르는 시간, 운영체제와 사용자 입장
- 소요 시간 ( turnarount time )
- 프로세스 ( 혹은 쓰레드 ) 가 컴퓨터 시스템에 도착한 후 완료될 때 까지 걸린 시간, 사용자 입장
■ 알고리즘적인 측면, 낮을수록 좋음
- 시스템 정책 ( policy enforcement )
- 컴퓨터 시스템의 특별한 목적을 달성하기 위한 스케줄링, 운영체제 입
- 자원 활용률, 우선순위 등등

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!