**CPU - Scheduling**
프로세서의 특성 분류
특성에 따라서 2가지로 나뉜다
- I/O - bounded process
이건 cpu를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 process이다
즉 중간중간에 I/O쓰는 경우가 많고 그 뜻은 **사람과의 Interaction**이 자주 일어난다 - cpu - bounded process
이건 cpu burst 즉 cpu쓰는 시간이 길다 뭐 복잡한 계산 이런거겠지
그러면 만약에 2개의 프로세스가 동시에 cpu를 쓰고 싶으면
어떤걸 우선 순위 줘야할까?
이런게 중요한데 이런걸 해주는게
CPU Scheduler
CPU scheduler & Dispatcher
Scheduler와 Dispatcher모두 운영체제에서 돌아간다
- CPU Scheduler
이거는 Ready 상태의 프로세스중에 CPU를 줄 프로세스를 정한다
스케줄러가 필요한 경우- Runnig → Block ex) I/O 작업이 필요한 경우
이러면 cpu가 비니깐 다음에 뭐가 들어올지 정해야한다
이런 경우는 자발적으로 CPU 비운다 -> nonpreemptive - Block → Ready ex) I/O 완료후 controller 에서 interrupt통해서
Ready 상태의 프로세스가 늘어나서 다시 순번 정해야지
이 상황은 interrupt로 인해 강제성 -> preemptive - Running -> Ready ex) timer interrupt
Ready 상태의 프로세스가 늘어나서 다시 순번 정해야지
preemptive - terminate nonpreemptive - 자진반납
이것도 결국 CPU가 빈거니깐 다시 순번 정해야지
- Runnig → Block ex) I/O 작업이 필요한 경우
- Dispatcher
스케줄러가 CPU를 줄 프로세스를 정하면 이걸 실제로 넘겨주는 역할을 한다.
전에 있던 프로세스 정보도 PCB에 저장하고 이번에 들어올 프로세스의 정보를 PCB에서 받아온다
이게 위에서 말한 Context - Switch 즉 문맥교환 이다
Scheduling Criteria 의 성능척도
다양한 CPU 스케줄링 알고리즘의 성능척도
- CPU utilization , 이용률
전체시간 중에서 CPU가 놀지 않고 일하는 시간 - Throughput , 처리량
단위 시간당 처리량 - Turn around time , 소요시간
대기시간이랑 CPU를 사용하는 시간을 더한것
CPU burst에 들어와서 I/O burst 까지 나가는데 걸리는 시간 - Waitig Time , 대기시간
cpu를 사용하기 위해 기다리는 전체시간 쓰고 뺏기고를 반복하면서 기다리는 시간 다 합친거 - Response Time , 응답시간
cpu 기다리는 queue에 들어와서 최초로 cpu를 얻기까지 걸리는 시간
자 쉽게 말하면 빨라야 좋겠지?
즉 3~5까지 짧을수록 좋은것이다
Scheduling의 종류
- FCFS 쉽게 말하면 선입 선출이다
만약에 프로세스를 길게쓰는 프로세스가 먼저 들어오면 효율적이지 않다. 앞에 있는 프로세스가 끝날때 까지 기다려야해서 기다리는 시간이 길다.
그래서 발생하는 문제가 Convoy effect → short process behind long process - SJF , Shortest - Job - First
CPU 사용하는 시간이 짧은 순으로 CPU를 사용한다.
이것도 2가지 방법으로 나뉜다- Nonpreemtive - 일단 CPU를 잡으면 대기줄에 더 짧은 프로세스가 와도 우선 CPU burst 될때까지는 기다린다.
- Preemtive - 만약에 cpu대기 queue에 더 짧은 cpu burst 가진 프로세스가 오면 cpu 사용을 종료시키고 더 짧은 프로세스 먼저 실행시키기 이걸
SRTF -> Short Remaining Time First 이라고 한다.
이게 optimal이다. 이것도 SJF중 하나이다 . 근데 이건 남아있는 시간이 최소인게 우선이다
- Priority Scheduling
이거역시 SJF와 비슷하게 nonpreemtive와 preemtive가 있다
역시 이것도 문제가 starvation인데 여기서는 해결책이 aging이다 →오래 기다리면 priority를 올려주자
SJF도 Priority Scheduling의 일부이다. priority number를 cpu burst time으로 한거
정수로 표현된 priority number가 작을수록 먼저 cpu할당 - Round Robin
지금 가장 많이 사용하는 알고리즘의 근간
각프로세스는 동일한 크기의 할당시간을 가진다. 그리고 할당시간이 지나면 프로세스는 interrupt당하고 ready queue맨뒤에 가서 줄을 선다
n개의 프로세스가 있고 q만큼의 할당시간이 있으면 어떤 프로세스도 n-1 * q 이상 기다리지 않는다
시간이 너무 길면 FCFS랑 다를것이없고
너무 짧으면 너무 자주 프로세스가 바뀌면서 overhead가 발생해서
I/O bound 프로세스는 한번에 처리되지만 CPU bound 프로세스는 몇번 거쳐야 처리되는 시간이 젤 적당하다
SJF보다 Response time이 짧다 - Multilevel Queue
CPU는 1개인데 줄은 여러개를 선다.
Ready Queue를 여러개로 분할한다- foreground →interative 짧은것이 줄서있고
- background → 긴거 batch 즉 사람과 no interaction
- foreground는 RR
- background →FCFS
- Fixed priority scheduling
무조건 foreground먼저 여기서 프로세스가 없어야 bakcground 실행
이러면 또 형평성 문제 발생 가능 - Time slice
각 큐텡 CPU 시간을 적절하게 분배
예를 들어 foreground 80% background 20%
그림에서 알 수 있듯이 하나의 cpu에 줄을 여러개 서고 어떤 줄을 먼저 실행해야하는지 순서가 정해져있다. - Multilevel Feedback Queue
프로세스가 다른 큐로 이동가능 즉 다른 줄을 설수 있다.
이걸 구현하는 여러가지 파라미터들이 존재한다
- Queue의 개수
- 각 큐의스케줄링 알고리즘
- 프로세스를 상위큐로 보내는 기준
- 프로세스를 하위큐로 보내는 기준
- 프로세스가 CPU서비스 받으러 갈때 들어갈 큐 정하는 기준
이게 예시이다.
우선 다 젤 상위큐로 들어와서 8초안에 처리되는 프로세스는 맨 상위 큐에서 처리한다
그리고 16초가 걸리는 큐들은 하위큐에서 실행하고 이것도 안되면 FCFS의 알고리즘이 있는 맨 마지막 큐에서 실행이 된다
특수한 경우의 CPU 스케줄링
- Real Time CPU Scheduling
Real Time 이 뭐지? Real Time job는 무조건 정해진 시간안에 끝내야하는 작업을 의미한다두가지 종류가 있는데- Hard Real -Time system
- 무조건 정해진 시간안에 task가 끝나야한다
- Soft real time system
- 일반 프로세스에 비해 높은 priority를 가지게 해야한다
- 예를 들어 초당 24프레임을 동양상에 보내야한다 이걸 안지킨다고 죽지는 않는다 조금의 끊김이 생기면 아 deadline을 못지키고 있구나
Real Time proceesor면 deadline이라는게 하나더 생긴다 - Hard Real -Time system
- Thread Scheduling
리마인드하자면 Thread란 ??
하나의 프로세서안에 다른건 다 공유하고 cpu를 수행하는 단위가 여러개인것
- Local Scheduling
User level thread 사용자선에서 thread를 만든거다 즉 운영체제는 이 프로세스가 여러개 thread있는지 몰라 그래서 그냥 cpu에서 그냥 프로세스인거처럼 사용되고 내부적으로 알아서 thread로 조절 - Global Scheduling
Kernel level thread 운영체제가 알고 있어서 cpu scheduling할때 어느 thread에게 줄지 결정까지 하는것
- Local Scheduling
'만도 ivs 3기 준비' 카테고리의 다른 글
만도 ivs 운영체제 공부 정리 (0) | 2024.11.24 |
---|---|
만도 ivs 3기 준비 (2) | 2024.11.24 |