[시스템 소프트웨어]03-1 스케줄링

yesman·2021년 12월 16일
0

시스템 소프트웨어

목록 보기
6/23

CPU-I/O Burst Cycle

프로세스는 CPU execution과 I/O wait의 cycle로 구성된다.
CPU burst(CPU execution)는 CPU에 의해 직접 수행되는 작업의 부분이다. I/O작업이 거의 없고 CPU가 참여, 명령하고 실행한다.
I/O burst(I/O execution)는 CPU에 의하지 않고 일어나는 작업의 부분이다. CPU가 참여하는 순간이 잠시 있다.
일반적으로 프로세스는 많은 수의 짧은 CPU burst들 혹은 적은 수의 긴 CPU burst들로 구성되며, 이들의 편중에 따라 I/O-bound프로그램과 CPU-bound프로그램으로 나눌 수 있다.

따라서
I/O-bound 프로그램은 짧은 CPU burst들이 많이 있는 것이고 CPU-bound 프로그램은 긴 CPU burst들이 조금 있는 것이다.

CPU burst와 I/O burst들의 분포는 적절한 스케줄링 알고리즘을 선정하는데 매우 중요하다.

CPU Scheduler

Short-term scheduler는 빈도수가 가장 높다. Short-term scheduler가 레디큐에 있는 메모리의 프로세스 중에 선택한 다음 dispatcher가 CPU제어를 할당한다. CPU제어에는 컨텍스트 스위치, 유저 모드로 스위치, 유저 프로그램에서 재시작 하기 위해 적절한 위치로 이동하는 것을 할 수 있다.
short-term scheduler는 가능한 빨라야하며 매번 스위치가 일어날 때마다 디스패치 모듈이 구동된다.

Dispatch latency(디스패치 때문에 지연되는 시간)는 디스패치가 프로세스 하나를 정지시키고 다른 하나를 구동시키는데 걸리는 시간이다. (context swtich time + 레디큐에서 프로세스를 고르는 시간)

선점 스케줄링(preemptive): 강제성을 띄고 있으며 해당 프로세스 스스로가 아닌 타의에 의한 강제적인 스케줄링이다.
비선점 스케줄링(nonpreemptive): 강제성을 띄고 있지 않고 프로세스가 스스로 일을 수행하는 것이다. 자의에 의해 그만두기 전까지 수행한다.

CPU스케줄링에 있어서 결정이 필요한 4가지 경우가 있다.

  1. Running 상태에서 Blocked 상태로 바뀌는 것 또는 자식 프로세스 중 하나의 종료를 기다리는 것 --> nonpreemptive
  2. timer interrupt에 의해 Running 상태에서 Ready상태로 바뀌는 것. --> preemptive
  3. I/O의 완료로 인해 Waiting 상태에서 Ready상태로 바뀌는 것. --> preemptive
  4. 프로세스 종료 --> nonpreemptive

preemptive(선점) 스케줄링일 때 2개 이상의 프로세스들이 공유 데이터를 사용하는 경우 문제가 발생할 수 있다.
데이터를 변경하는 중에 강제로 할당된 CPU가 다른 프로세스에 할당된다면 문제가 생긴다.
그리고 어떤 프로세스가 커널 모드에서 중요한 데이터, 예를 들면 프로세스 테이블의 수정, 프로세스의 생성 등과 같은 중요 업무 수행 중에 선점될 경우 문제가 발생할 수 있다.
이러한 문제를 해결하기 위해서는 프로세스 동기화가 필요하다.

Scheduling Criteria

(스케줄링 알고리즘이 좋은지 판단하는 근거 기준)

  1. CPU utilization(CPU 사용률): 최대화하는 것이 좋다. 0.1< u <0.9
  2. Throughput(단위시간당 완료시키는 프로세스의 수): 최대화하는 것이 좋다.
  3. Turnaround time(작업이 수행되는 시간): 최소화 하는 것이 좋다. 이 시간은 CPU사용시간, I/O시간, 대기시간, 레디큐에 있는 시간을 포함한다.
  4. Waiting time(대기시간): 최소화하는 것이 좋다. 레디큐에서 기다리는데 걸리는 시간이다. 이 시간은 스케줄링 알고리즘에 따라 크게 다르다.
  5. Response time(응답시간):최소화하는 것이 좋다. 실시간 시스템에서 매우 중요한 요소로 다루고 있다.
profile
유니티

0개의 댓글