스케줄링 방식:
스레드 스케줄링 : 스레드의 개수가 코어의 개수보다 많을 경우, 어떤 순서에 의해 동시성을 실행할 것 인지 결정하는 것.
스레드 스케줄러에 의해 여러 스레드들이 짧은시간동안 번갈아가며, 스레드의 run()메소드를 실행하게 된다.
방식:
프로세스 스케줄링:
메모리에 적재되어있는 프로그램을 CPU가 실행 할 수 있도록, 운영체제가 프로세스에 CPU를 할당하는 것.
다중 프로그램을 가능하게 한다.
선점과 비선점 방식이 있다.
스케줄링 정책:
선입 선처리 스케줄링(FCFS - First-Come First-Served)
큐에 등록된 순서 그대로 프로세스를 처리하는 기본적인 정책.
프로세스 생성 순이 아닌, 준비 큐에 등록된 순서임에 주의하자.
순차 처리되는 특성때문에 실행 중인 스레드가 다른 프로세스에 의해 선점될 수 없다.
비선점 방식의 스케줄링.
실행 시간이 긴 프로세스가 제일 처음 배치 될 수 있으므로, 대기시간이 길 수도 있다는 비효율적인 특징이 있다.
짧은 시간의 프로세스를 오랫동안 기다리게 하는걸 호송효과(convoy effect)라 한다.
순환 처리 스케줄링(RR - Round-Robin)
모든 프로세스에 CPU 할당 시간을 부여하여 CPU 사용 시간을 제한하는 시분할 시스템(time-sharing system)을 위해 개발된 선점방식의 스케줄링 정책.
모든 프로세스에 적절한 할당시간을 부여한다. 이후 준비 큐에 등록된 순서에 따라 프로세스를 처리.
할당 시간을 모두 사용했을 시, 준비 큐의 맨 뒤에 등록되어 다시 자신의 차례를 기다림.
다단계 피드백 큐 스케줄링 (multi-level feedback queue)
여러개의 준비 큐를 사용하여, 준비큐 들 중 우선순위를 부여하여 순서대로 처리하는 정책. 다단계 큐 정책에서 피드백이 추가된 정책이다.
기존 다단계 큐 :
우선순위가 높은 프로세스가 계속해서 들어올 경우, 순위가 낮은 프로세스는 무한정 대기하여 영원히 실행되지 않는 현상, 기아(Starvation)가 발생할 수 있다.
이 현상을 처리하는 기법을 에이징(aging)이라 한다.에이징: 오래 대기한 프로세스를 우선 순위가 높은 큐에 옮기는 기법.
다단계 피드백 큐에서는 우선순위가 높은 큐에는 상대적으로 적은 할당 시간을, 그리고 우선순위가 낮은 큐에는 상대적으로 많은 할당 시간을 부여하는데, 할당시간이 초과된 큐는 우선순위가 한 단계 낮은 준비큐에 등록된다.
이로 하여, 많은 CPU시간이 필요한 프로세스가 점점 낮은 단계로 이동하는 것.
멀티 스레드가 공용 리소스에 접근할 때 임계구역을 다루는 방식
세마포어(Semaphore):
뮤텍스(Mutex):