SMALL
CPU 가상화가 뭐에 관한 거였지?
- Time sharing
- Context switching
- Scheduling policy
=> 아무튼! OS가 제어권을 유지하면서 성능이 저하되지 않도록 유지 하는 것.
Direct Execution
OS가 프로그램에게 제어권을 넘기면 프로세서에서 실행되는 것
프로그램이 악성이 아님이 보장되어야 함
=> 악의적 사용을 막기 위해 CPU를 Kernel mode와 User mode를 나눔. 프로세스에는 일부 권한만 주려는 의도.
System Calls
- 프로세스는 시스템콜을 통해 제어권을 요청할 수 있음
- OS는 trap table(syscall table)을 이용해 trap handler를 저장함 → 부팅시 생성됨
- 프로세스가 시스템콜을 사용하려면 trap 명령어를 먼저 실행해야 함

System call vs Function call
생긴건 비슷하지만, 시스템콜은 trap 명령어를 포함하고 있어서 커널모드에서 실행되고 펑션콜은 유저모드에서 실행됨
프로세스 운영 방식
Timer Interrupt
- OS가 주기적으로 제어권을 뺏어옴
- timer interrupt발생시 중지된 프로세스 정보는 메모리(PCB)에 저장됨
Job Scheduling
- 프로세스를 job 또는 workload 라고도 부름
- 스케줄링은 "What to run next?"의 문제
Context Switching
- 스케줄링을 통해 다른 프로세스로 전환하는 것을 context switching 이라함

이제부터는 스케줄링에 관한 내용이라 줄을 그었다.
Scheduling Metrics
- Turnaround Time : job의 완수 시간 - 도착시간
스케줄러가 얼마나 빠르게 job을 끝낼 수 있는가
- Response Time : job의 처음 실행시간 - 도착시간
터미널 커맨드 같은데서 더 중요한 메트릭
- 둘은 trade-off 관계
Scheduling Policy
1. First In First Out (FIFO)
- 먼저 도착한 job을 먼저 처리
- 만약, 모든 job들이 동시에 도착한다면?
1) A, B, C 모두 20ms 2) A는 80ms B,C는 20ms

- Convoy Effect 발생 : 짧은 job이 긴 job의 종료를 기다리는 현상
2. Shortest Job First (SJF)
- 짧은 job을 먼저 처리

- 하지만 여전히 Convy Effect는 남아있음
A 80ms가 도착한 후에 B, C가 도착하는 경우
3. Shortest Time-to-Completion First (STCF)
- 남은 실행 시간이 짧은 job으로 context switching

4. Round Robin (RR)
- 하나의 job이 끝날 때까지 실행하지 않고, time slice마다 스케줄링하여 큐에 있는 다른 job으로 context switching
- response time을 줄이고, context switching시 발생하는 오버헤드를 줄이기 위한 적당한 time slice를 설정해야 함

그러나 실제 OS는 job들의 런타임 정보를 사전에 알 수 없다.
또한, turn-around time, response time 두 개 모두 최적화 하기에는 위의 스케줄링 방법들은 trade-off가 있다.
→ Multi Level Feedback Queue
Multi Level Feedback Queue
- queue가 여러개라는 의미
- 그리고 이 큐들에는 우선순위가 있음
- 매 time slice 마다 우선순위를 통해 job을 결정
- 그 우선순위는 관측된 job의 behavior를 통해 결정됨
- ex) 키보드 인풋을 기다리기 위해 CPU를 계속 포기하는 job은 interactive job일 것이므로 우선순위 up
- ex) 긴 시간동안 CPU를 사용하는 job은 우선순위 down
- 단, 같은 우선순위에서는 RR!
Job Scheduling in MLFQ
- 우선순위가 A>B라면, A를 run
- 우선순위가 A=B라면, A와 B는 RR로 실행
- 새로운 job이 들어오면, 가장 높은 우선순위로
- job이 주어진 time slice를 소진하면 한 큐 위로
- job이 주어진 time slice를 소진하지 않으면 현재 큐를 유지



Starvation Problem
- interactive job들이 많으면, 낮은 큐에 있는 job들은 run을 할 수 없음

Priority Boosting
- 주기적으로 모든 job들을 가장 높은 우선순위로 옮김
- 옮겨진 후에는 RR
- boosting 주기가 길면 starvation / 짧으면 interactive가 힘듦

Accounting
- job이 time slice 직전에 끝나도록 설계되면 CPU독점이 발생함

- 따라서, time slice 기준으로 낮추는 것이 아니라. 각 job에 할당된 time allotment를 기준으로 낮춤
- job의 run time을 계속해서 accounting(계산)한다는 의미

MLFQ 정리 - parameters
- 우선순위 레벨의 수
- time slice 간격
- boosting 주기
- time allotment (Accounting에 필요한)
Fair-Share Scheduling (공정배분)
- 같은 말로 proportional share(비례배분)
- 각 job들은 tickets를 CPU time에 비례해서 배정 받음
- 그리고나서 랜덤한 숫자가 지정되고, 그 숫자에 해당하는 ticket counts를 가진 job을 실행
Stride Scheduling
- stride = 큰 수를 지정하고, 그 수를 ticket counts로 나눈 값
- stride가 가장 작은 값이 next job이 되고 실행되면 stride를 더해감

'CS study > Operating System' 카테고리의 다른 글
| 6. 운영체제 Threads (0) | 2021.09.18 |
|---|---|
| 5. 운영체제 paging (0) | 2021.09.17 |
| 4. 운영체제 Virtual Memory (0) | 2021.09.15 |
| 2. 운영체제 Process (0) | 2021.09.09 |
| 1. 운영체제 Introduction (0) | 2021.09.09 |
댓글