프로세스 간에 메세지를 전달하여 데이터를 교환하는 방식이다.
동기화 : 공유되는 메모리가 없기 때문에 동기화 필요없음
데이터양: 적은 데이터 간단하게 처리가능
커널간섭: 커널 간섭이 높아서 오버헤드 큼
분산 시스템인 경우 편리
여러 프로세스가 동일한 메모리 공간을 공유하여 데이터를 교환하는 방식
동기화: user가 동기화해주어야함
데이터양: 많은 양을 보낼 수 있음
커널 간섭: 커널 간섭적음
캐시의 일관성을 유지해야함
비선점 스케줄링(nonpreemptive): 프로세스가 자발적으로 cpu를 양도하는 것
ex)시스템콜, i/o 요청장치
선점 스케줄링(preemptive): CPU를 강제적으로 다른 프로세스에 할당, 프로세스의 우선순위 허용
낮은 우선순위를 가진 프로세스보다 높은 우선순위를 가진 프로세스가 CPU를 선점하는 방식
ex)할당된 cpu시간이 끝나면 다른 프로세스에 할당
1)실행 상태에서 대기상태로 전환될 때
i/o인터럽트 nonpreemtive
2) 실행 상태에서 준비상태로 전환될때
자기한테 할당된 시간이 끝났을 때 preemtive
3)대기 상태에서 준비로 전혼될때
i/0가 끝나고 지금실행중인 프로세스가 끝나면 강제적으로 일어남 preemtive
4)종료
nonpreemtive
차이:
preemptive 스케줄링은 우선순위가 높은 프로세스가 실행 중인 동안 다른 프로세스가 그 실행을 중단할 수 있지만, nonpreemptive 스케줄링은 한 번 시작된 프로세스가 CPU를 해제할 때까지 실행된다.
프로세스가 도착한 순서대로 진행하는 스케줄링
호위효과 발생: 긴 프로세스에 의해 기다리는 시간이 길어짐
최소 평균 대기시간을 제공하는 가장 수행 시간이 짧은 job부터 수행하는 스케줄링
(어떤 게 수행시간이 짧은 지 알기 어려움)
(preemtive)한 SJF 스케줄링
수행시간이 짧은 job이 나타나면 CPU를 그 job에게 양도하는 스케줄링
(nonpreemtive) 우선순위가 높은 순대로 수행
(preemtive) 우선순위가 높은 job이 나타나면 cpu를 그 job에게 양도
문제 :(starvation)기아 - 낮은 우선순위가 실행되지 않을 수 있음
해결 :aging(노화)- 시간이 지날수록 프로세스의 우선순위를 높여주는 방법
일정 시간동안 순서대로 cpu를 할당하는 스케줄러(time slice, time 퀀텀)
일정 시간이 지나고 다시 실행이 덜 끝났으면 ready 큐의 끝으로 감
q가 너무 길어지면: 총 대기시간이 길어진다(FIFO)
q가 너무 짧으면:오버헤드 발생(문맥교환시간보다 길어야함)
SJT에 비해 총 처리시간이 길지만 응답시간이 짧음
각각의 프로세스를 특성에 맞게 서로 다른 ready큐에 지정하는 것(큐끼리의 이동 불가)
foreground에서는 상호작용(interactive)을 해야하는 프로세스를 rr스케줄링을 통해처리한다.
(응답시간이 빠르고 cpu벌스가 짧은)
background에서는 일괄처리(batch)를 해야하는 프로세스를 fcfs스케줄링을 통해 처리한다.
(총처리량이 많고 긴 시간을 필요로 하는)
큐를 스케줄링 하는 법
1)fixed priority scheduling (고정된 우선순위 스케줄링)
foreground에 서비스를 먼저 실행하고 background의 서비스를 실행한다.
2)time slice
각 큐에 time을 적절한 비율로 할당해야한다.(foreground 80%, background 20%)
멀티레벨 피드백 큐는 멀티레벨 큐랑 동일하나 프로세스가 하나의 큐에서 다른 큐로 이동 가능하다는 점이 다르다. (aging을 통해 이동가능)
다중 피드백 큐스케줄러는 다음과 같은 매개변수로 정의됩니다:
1)큐의 개수 정하기
2)큐마다의 스케줄링 알고리즘 지정
3) 프로세스를 업그레이드 시킬 때 사용하는 방식
4) 프로세스를 다운그레이드 시킬 때 사용하는 방식
5)프로세스가 들어오면 어떤 큐에 넣을 지 지정