CPU bound program이 CPU를 잡고 안놓아주면 I/O bound program을 쓰려고한(키보드, 마우스) 사람이 너무 답담함.
빈도수 자체도 I/O bound program이 더 높다.
1) I/O-bound process
사람과 주로 Interaction하는 Job이다. CPU사용 시간이 빈번하고 짧다.(대기시간이 길다)
2) CPU-bound process
계산위주의 Job이다. 빈번하지 않은 대신에 CPU를 연속적으로 쓰기 때문에 시간이 길게 소요된다.
1) CPU Schedualr (결정)
Ready 상태 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다.
2) Dispatcher (실제로 넘긴다)
CPU의 제어권을 CPU 스케줄러에 의해 선택된 프로세스에게 넘긴다.
이 과정을 문맥교환이 함
결론: CPU를 실제로 주는거는 문맥교환이라 하고이는 Dispatcher가 관여하다. 어떤 프로세스에게 CPU를 줄지는 스케줄러가 관여한다.
CPU를 어떤 프로세스가 잡고 있다가 I/O 작업하러 간 경우
CPU 요청한 프로세스에게 무한정 줄 수는 없음
ex> 타이퍼 인터럽트3) Blocked -> Ready
CPU를 얻을 수 있는 상태 됨
ex> I/O 완료 후 인터럽트
프로세스가 종료되어서 새로운 프로세스에게 CPU를 주어야 함
위의 1)과 4)는 프로세스가 CPU를 자진반납한다. 그러나 2,3은 CPU를 강제로 뺏는다.
몇개의 작업 처리
CPU 사용을 다 하고 나갈때까지
CPU받을 때 까지 기다린 시간
레디큐에 들어와서 처음 CPU를 얻을 때 까지 기다린 시간
말 그대로 먼저온 순서대로 처리하는 알고리즘이다.
별로 효율적이지 못하다.
CPU burst time이 가장 짧은 프로세스를 제일 먼저 스케줄
SJF는 주어진 프로세스들에 minimum average waiting time을 보장한다.
일단 지금 기다리는 프로세스 중 CPU를 제일 짧게 쓰는 프로세스에게 CPU 줬으면 더 짧은 프로세스가 도착하더라도 전자의 CPU 사용권을 보장해줌
더 짧은거 오면 그냥 CPU를 넘김
-> Non Preemptive보다 더 짧은 Average Time을 보장한다.
SRTF(Shortest-Remaining-Time-First)라고도 부른다.
CPU 사용시간이 긴 프로세스는 영원히 CPU를 못받을 수 있다.
내가 얼마나 쓰고 나갈지 미리 알 수 없다.
그러나 과거의 흔적을 통해 추정은 가능하다.
우선순위 높은거에 CPU를 준다. SJF는 일종의 우선순위 스케줄링 이다.(우선순위: 예측한 다음번 CPU burst time)
더 높은 우선순위 와도 안넘김
더 높은 우선순위 오면 넘김
낮은 우선순위는 영원히 CPU를 못받는다.
오래기다리면 우선순위를 높여준다.
1) 각 프로세스는 동일한 크기의 할당시간을 가진다.(q time)
2) 할당시간이 지나면 프로세스는 Timer 인터럽트에 의해 CPU를 빼앗기고 Ready Queue의 맨 뒤에가서 줄을 선다.
3) 응답시간(response time): 최로로 CPU를 얻는데 걸리는 시간을 짧게 가져갈 수 있다.
n개의 프로세스가 Ready Queue에 있고 할당시간은 최대 q time 단위를 갖는다.
- 결국 CPU를 오래쓰는 프로세스는 더 오래 기다린다. (q가 다수, 인터럽트 계속 걸림)
- 반면 CPU를 짧게쓰는 프로세스는 더 짧게 기다린다. (q가 적음, 한번에 끝나거나 수가 적음)
FCFS와 똑같아 짐 -> q의 의미가 사라지고 먼저온 순서대로 처리된다.
문맥교환의 오버헤드가 커지고 성능이 안좋아진다.
q는 일반적으로 10~100 m/s
foreground가 비어있을때만 background에게 CPU를 줌
-> starvation문제 발생
각 큐에 CPU time을 적절한 비율로 할당
80% to foreground(RR)
20% to background(FCFS)
프로세스가 다른 큐로 이동가능
에이징을 이와 같은 방식으로 구현할 수 있다.
1) new job이 Q0으로 들어감
2) CPU를 잡아서 할당시간 8 ms 동한 수행됨
3) 8ms 동안 다 못 끝내면 Q1로 내려감 (강등)
4) Q1에 줄서서 기다렸다가 CPU를 잡아서 16ms 동안 수행됨
5) 16ms에 끝내지 못한 경우 Q2로 내려감 (강등)
CPU가 여러개 = 화장실이 여러칸
큐에 한줄로 세워서 각 CPU가 알아서 꺼내 가게끔
일부 CPU에 job이 몰리지 않도로 함
각 CPU가 각자 알아서 스케줄링 결정
하나의 CPU가 시스템 데이터의 접근과 공유를 책임지고, 나머지 CPU는 거기에 따름
정해진 시간안에 끝내야함
정해진 시간안에 반드시 끝내도록 스케줄링 해야함
우선순위만 높여주어 CPU를 얻을 수 있게함
쓰레드 유형에 따라 CPU 할당방식을 다르게 한다.
유저레벨 쓰레드인 경우 OS는 쓰레드를 모른다.
만약 그 프로세스에게 CPU가 가면 내부에서 어떤 쓰레드에게 CPU를 줄지 결정한다.
A의 라이브러리가 A의 쓰레드중 어떤거를 CPU에게 줄지 결정한다.
커널레벨 쓰레드인 경우 커널의 단기 스케줄러(OS)가 어떤 스레드를 스케줄링 할지 결정한다. OS는 쓰레드에 대해 알고있기 때문...
확률분포로 주어지는 arrival rate와 service rate를 통해 performance index값을 계산
실제 시스템에 알고리즘을 구현하여 실제 작업에 대해 성능을 측정하고 비교
알고리즘을 모의 프로그램으로 작성 후 trace를 입력으로 하여 결과 비교