- Today
- Total
프로그래밍 농장
CPU Scheduling [ 임베디드 설계 ] 본문
System calls
-> os에서 자체적으로 제공해주는 프로그램 인터페이스 / os에서 제공하는 함수
os : 하드웨어를 컨트롤하는 소프트웨어
- File Open
O_APPEND : 시작지점에서 파일을 오픈할떄 , 파일의 마지막부분에 추가하는것
O_CREAT : 파일이 존재하지않으면, 새로만드는것
O_DIRECTORY : 디렉토리를 여는것
O_EXEL : 이미 존재할경우 에러
O_TRUNC : 일반적인 파일일 경우, 파일을 다 지우고 처음부터 새로 씀
- Mode
( S_I 는 공통)
write와 append의 차이
write는 오픈시 그냥 긴 문자열들의 나열 ->이후 풀이는 사용자의 몫 (위치지정. 등) ( 기본적으로 파일의 첫지정으로감)
append 은 오픈시 앞의 내용은 보전하고 뒤부터 ..
- CPU Scheduling
프로세스 스케줄링 vs 스레드 스케줄링
-> CPU 스케줄러는 OS 내부에 존재하며, CPU가 놀고있으면 안되므로, ready queue에 있는 것을 하나를 선택하여 수행함 : = cpu scheduler의 업무중 하나
CPU I/O burst : 실제 cpu를 점유하고 사용하는데 걸리는 시간을 의미
Nonpreemtive
-> 어떤 프로세스가 cpu를 장악하여 running 상태가 되었을떄, 스스로 이제 cpu를 사용하지않고 리소스를 넘겨주겠다고 하는것
Preemtive
-> 프로세스가 cpu내에서 수행하고있을떄, 외부에서 이제 그만작업하라고 할떄
- Dispatcher
레디큐에 있는 프로세스를 cpu 스케줄러가 선택을하면, cpu에 그 프로세스를 할당하여 실행하라고 해주는 것
Scheduling Criteria
좋은 스케줄링이란 ?
CPU utilization : cpu를 켜놨을떄 실제로 몇번이나 움직였나 . .
Throughput : 프로세스를 몇개 실행했을떄 얼마만에 끝났나 .. (시간측정)
Turnround time : 프로세스 하나가 끝나는데 걸리는 평균시간 ( 평균시간이 너무 들쭉날죽이면 안된다 . .)
Waiting time : 프로세스가 들어가면 ready에서 들어가는 시간이 얼마나 되나를 따짐
Response time : 프로세스가 요청을 받은 후에 반응하는데까지 걸리는시간
Process - Burst Time
Burst Time? : 프로세스를 돌리는데 걸리는 시간
-> 위 사진과 같다면, 프로세스 1,2,3 전체 프로세스를 돌리는데 걸리는 Burst Time은 30이다 .
여기서, Waiting time 은 각, P1은 0, P2는 24, P3는 27 이다. ( 순서대로 실행되기 때문 )
그렇다면 Average waiting time 은 ( 0 + 24 + 27 )/3 = 17 이다.
이떄 만약, 프로세스 수행의 순서가 다르다할시, Waiting time은 6,0,3 순서이다.
-> 그렇다면 Average waiting time 은 ( 6 + 0 + 3)/3 = 3이다.
-> 이것을 Convoy effect 라고 한다.
ex) 계산할떄 껌하나살때는 먼저 양보하는등의 효율적 구조 . but, 컴퓨터는 직접 알려주어야함
-> ' Shortest-Job-First '(SJF) : 빨리 끝나는 작업부터 수행
: 순서에 상관없이 Burst-time 순서대로 수행 -> average waiting time을 줄이는데 가장 효과적인 방법
P1,2,3,4 를 버스트타임순서대로 수행하였을떄 아래와 같이 평균 waiting time 을 누적, 계산할수있다.
-> but, 프로그램(프로세스)가 수행되기 전까지 얼마나걸릴지 정확히 계산불가 . (예측은 가능)
how to 예측? : 유저에게 물어보기 , 예측 . .
Prediction of Next CPU Burst
-> 최근 결과값들을 더 많이 반영하여 예측하는 구조를 가진다.
Tn* = 지난번에 예측했던 값
-> ' Shortest-Remaining-Time-First '( Preemptive 버전의 SJF) : 빨리 끝나는 작업부터 수행
위와 같이 P1이 0번쨰로 가장먼저 들어왔기떄문에(Arrival Time 0) 일단 한번 실행된다 .
하지만 그다음부터 Arrival Time 1 에 P2 가 들어오고, 이떄, Burst Time(남은 수행시간)이 P1 보다 낮으므로, 가장 우선순위로 배정 및, 수행을 시작한다.
그 이후, 순서대로 P3가 들어왔지만, 여전히 P2가 버스트타임이 가장 낮으므로 계속 P2를 수행한다.
P4가 들어온 Arrival Time3 에서도 마찬가지이다.
이후, P2의 수행이 끝나고, P4가 그다음으로 낮으므로, 수행 -> 이후 그다음으로 낮은 P1 -> P3 순으로 수행한다.
이런 작업이 완료 되면 최종적으로 보았을떄 평균 waiting time은 위의 표와 같이 된다.
-> 'Round Robin' ( RR )
: 타임슬라이스를 나누어서 한번에 사용할수있는 타임슬라이스를 사용하면, 한번씩 양보하면 돌아가며 수행하는 방법
-> 아래와 같이 P1 =24 / P2 =3 / P3 =4 일 경우, 4칸씩 타임슬라이스를 나누어서, P1(24)에서 4번 / P2(3)에서 3번만에 종료 후 , / P3(3) 에서도 3번만에 종료 / 이후 하나남은 P1이 쭉 수행
구현이 쉽다는 장점이 있다.
-> Average waiting time : [(10-4)+4+7]/3 = 5.66
: preemptive 하나는 성질이있음
-> 'Priority Scheduling'
수행시간에 상관없이 공평한 스케쥴링
-> Average waiting time : [6+0+16+18+1]/5 = 8.2
-> Starvation
: 처음 들어온 프로세스가 이후 들어오는 프로세스들에 순위가 밀려 무한대기를 하게되는 상태
-> 가장 일반적인 해법 : Aging : 일정 시간이 지나면, 대기하고있던 프로세스의 Priority를 올려줌
: RR 과 Priority 스케쥴링을 믹스하여 수행
Multilevel Queve
Priority 의 등급 기준
- Simulaneous Multithreading (SMT)
코어에서 하드웨어적으로 스레드를 지원하는것
-> 멀티스레딩을 사용할떄 CPU를 두개이상내는 것과 성능이 같지는 않다.
-> ( Hyper 스레딩을 한다고 성능이 두배가 되진않음 )
- Real-Time CPU Scheduling
Soft real-Time systems : 시간을 안지키면 급격하게 품질이 낮아짐
Hard real-Time systems : 시간을 안지키면 끝
- Practice 1
- nonpreemptive 스케줄링을 사용하는 아래와 같은 프로세스 입력이있다.
nonpreemptive 일시, 기본적으로 첫번쨰 프로세스는 그냥 수행 ?
1. 위와 같을시, FCFS 스케줄링으로 계산했을떄, Average turnaround time 은 ?
-> 그냥 순서대로 P1 = 8 / P2 는 12초 기다렸지만 0.4 를뺴고, / P3 = 13 - 1.0 -> 평균값 계산
1-1. 만약, FCFS 스케줄링으로 계산했을떄, Average waiting time 은 ?
-> 말그대로 waiting time 이므로, P1 = 0, P2 = 7.6 , P3 = 11 -> ( 0+7.6+11)/3
2. 위와 같을시, SJF 스케줄링으로 계산했을떄, Average turnaround time 은 ?
-> nonpreemptive 일시, 기본적으로 첫번쨰 프로세스는 그냥 수행 이므로 P1 8 전부다 먼저 수행 - >이후 SJF 스케줄링으로 P3 1먼저 수행 -> 이후 P2 수행 -> 이후 각 arrival time별로 뺴줌
'Linux' 카테고리의 다른 글
Process 처리방식 [ 임베디드 설계 ] (0) | 2021.10.19 |
---|---|
Assembley [ 임베디드 설계] (0) | 2021.10.19 |
Process Concept3 [ 임베디드 시스템 설계 ] (0) | 2021.10.17 |
Process Concept 1 [ 임베디드시스템 설계 ] (0) | 2021.10.16 |
Thread [Linux] (0) | 2021.10.12 |