다중 프로그램 시스템은 CPU의 사용을 최대화 하기 위한 시스템이다. 다중 프로그램 운영체제의 기본은 CPU스케줄링이다. CPU를 프로세스들 간에 교환함으로써, 컴퓨터를 생산적으로 만든다. 이 다수의 프로세스들을 교환할때 필요한 것이 CPU스케줄링이다.
CPU-입출력 버스트 사이클(CPU-I/O Burst Cycle)
-
버스트란 특정 기준에 따라 한 단위로서 취급되는 연속된 신호나 데이터의 모임을 말한다. 즉, 입출력 요청을 위해 CPU 사용을 사용했다가 쉬었다가를 반복한다.
-
프로세스가 CPU를 사용할 때를 CPU버스트, 입/출력을 기다릴 때를 입/출력 버스트라고 한다.
-
CPU 버스트 : CPU에 해당하는 접근이 많은 것이다. running 안에 들어가 있는 시간이 많다. 프로그램 수행 중에 연속적으로 CPU를 사용하는 단절된 구간을 말한다. 즉, CPU명령을 실행하는 것을 말한다.
-
I/O 버스트 : I/O에 해당하는 접근이 많은 것이다. waiting 안에 들어가 있는 시간이 많다.
-
프로세스의 실행은 CPU 버스트를 시작으로 뒤이어 입출력 버스트가 발생하는 식으로 두 버스트의 사이클로 구성된다. 마지막 CPU버스트는 또 다른 입출력 버스트가 뒤따르는 대신에 실행을 종료하기 위한 시스템 요청과 함께 끝난다.
-
입출력 중심의 프로그램은 CPU 버스트 시간이 짧을 것이다. 반대로 CPU 지향 프로그램은 CPU 버스트 시간이 길 것이다.
Preemptive Scheduling(선점 스케줄링)
-
수행되고 있는 프로세서의 권한을 가지고 올 수 있다.
-
빠른 응답시간을 요구하는 대화식 시분할 시스템에 사용한다.
-
선점으로 인해 많은 오버헤드를 초래할 수 있다.
-
선점을 위해 인터럽트 타이머 클럭이 필요하다.
-
종류 : 선점 우선순위, RR(Round Robin), 다단계 큐, 다단계 피드백 큐 알고리즘 등
non-Preemptive Scheduling(비선점 스케줄링)
-
이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없다.
-
한 프로세스가 실행 상태에서 대기 상태로 전환될 때, 프로세스가 종료할 때 비선점 스케줄링을 사용한다.
-
응답시간 예측이 쉽다.
-
협조적(cooperative)이며 모든 프로세스를 공정하게 처리한다.
-
종류 : FCFS, SJF, 우선순위, HRN, 기한부 알고리즘 등
Dispatcher(디스패처)
-
CPU의 제어를 단기 스케줄러가 선택한 프로세스에게 주는 모듈이다. 즉, ready에서 running으로 넘어갈 때 스케줄러에 의해 선택되는 것을 말한다.
-
context switch가 일어나는 일
-
사용자 모드로 전환하는 일
-
프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동하는 일
-
-
디스패처가 하나의 프로세스를 정지하고 다른 프로세스의 수행을 시작하는 데까지 소요되는 시간을 dispatch latency(디스패치 지연)라고 한다. 이는 ready queue에서 running queue로 넘어갈 때 PCB에 복사해 주는 시간을 말하며, 시스템 효율을 결정한다.
CPU스케줄링 알고리즘은 다양한 특성을 가지고 있다. 그에 따라 다섯 가지로 기준을 나눌 수 있다.
<기억합시다>
① utilization(CPU 이용률) : CPU를 최대한 바쁘게 유지하는 것이 좋다.
② throughput(처리량) : 단위 시간 당 완료된 프로세스의 개수를 말한다.
③ turnaround time(총 처리 시간) : 프로세스를 실행하는 데 소요된 시간을 말한다. 프로세스의 제출 시간과 완료 시간의 간격을 말한다.
④ waiting time(대기시간) : 프로세스가 ready/waiting queue에서 대기하는 시간을 말한다.
⑤ response time(응답시간) : 응답이 시작되는 데까지 걸리는 시간을 말한다. 처음 반응한 시간을 말한다.
** turnaround time(총 처리 시간) - running에 있는 시간 = waiting time(대기 시간)
'_정리&복습_' 카테고리의 다른 글
[node.js] 함수 선언식vs함수 표현식 (0) | 2019.05.08 |
---|---|
[OS] CPU스케줄링 - 스케줄링 알고리즘 (0) | 2019.04.29 |
[솝트] 2차 세미나 (Node js 모듈 정리) (0) | 2019.04.19 |
[솝트] 2차 세미나 (Node js란?) (0) | 2019.04.18 |
OAuth2.0 flow (0) | 2019.02.27 |