Home Schedule
Post
Cancel

Schedule

Process State


Active status


  • 프로세스의 상태를 정리해보자.
  • 생성, 준비, 실행, 대기, 완료 -> 5가지 상태

  • Ready

    • cpu 스케줄러의 호출을 기다리는 상태
  • Running

    • cpu를 사용하고 있는 상태
    • I/O 요청 시 cpu를 뺏김 -> I/O까지 wait
    • timeslice를 모두 소모하면 뺏김
  • Waiting

    • blocking status
    • 입출력이 완료될 때까지 기다리는 상태이다.
    • 입출력이 끝나면 인터럽트 발생
      • 해당 프로세스 준비 상태로 이동
  • Zombie

    • pcb만 남기고 다 지워짐
    • 이후 부모에게 신호를 보낸다. ( 회수 요청 )
    • 부모 프로세스는 wait 시스템 콜을 통해 자식 프로세스의 종료 상태를 읽어 들인다.
      • 부모가 os에게 자식이 종료되었는지 확인함
      • 이후 완전히 pcb까지 소멸된다.

고아 프로세스
부모가 wait 대신 그냥 종료되버림
init을 부모로 삼는다. init은 주기적은 wait 요청으로 고아를 거둠

특별한 상태


휴식 상태


  • pause status
  • 작업을 일시적으로 쉬고 있는 상태

보류 상태


  • suspend status
  • 메모리에서 잠시 쫓겨난 상태
    • 메모리가 꽉차서 밀려남
    • 오류 발생
    • 바이러스, 악의적 행동
    • 매우 긴 주기
    • 입출력 계속 지연
  • 메모리 밖인 swap area에 보관됨
  • 이후 보류 준비 상태를 지나 준비 상태로 이동한다.

Process scheduler


스케줄링 단계


  • 스케줄링은 3단계로 나뉜다.
    1. 고수준 스케줄링
    2. 저수준 스케줄링
    3. 중간 수준 스케줄링

High level scheduling


  • 작업 스케줄링 ( job )이라고도 부른다. 전체 작업 수를 조절한다.
  • 작업은 os의 가장 큰 일의 단위로 하나 혹은 여러 개의 프로세스로 이루어진다.
  • 작업이 시작되면 자원이 소모되기에 기존 작업에 영향이 간다.
    • 이에 작업을 승인할지 거부할지 결정한다.
    • Admission scheduling 승인 스케줄링이라고도 부른다.
  • 동시에 실행 가능한 프로세스의 총 개수가 정해진다.

Middle level scheduling


  • suspend와 active로 활성화된 프로세스 수를 조절한다.
    • 일부 프로세스를 suspend 상태로 돌려 나머지가 원활하게 만든다.
  • 고수준과 저수준 스케줄링 사이의 버퍼 역할

Low level scheduling


  • cpu에 프로세스를 배당하는 작업을 한다.
  • 빠르게 작동하여 short-term scheduling 이라도 부른다.

Preemptive & Non preemptive scheduling


  • 선점형 스케줄링
    • 운영체제가 강제로 cpu를 뺏을 수 있다.
  • 비 선점형 스케줄링
    • 운영체제가 강제로 뺏을 수 없다.

Preemptive


  • 선점형 스케줄링은 인터럽트처럼 cpu를 뺏을 수 있다.
    • 문맥 교환 같은 낭비가 생긴다.
    • 시분할 시스템에 사용된다.
      • 사실상 대부분

Non preemptive


  • 한 프로세스가 실행 상태에 들어가면 프로세스가 멈추지 않으면, cpu를 뺏을 수 없다.
  • 스케줄링이나 문맥 교환의 오버헤드가 낮다.
  • 다만 전체 시스템의 처리율이 떨어진다.
    • 과거 일괄 작업 시스템에서 사용되었다.

Priority


  • 프로세스는 큐로 관리된다.
  • 이때 우선순위와 그 척도가 필요하다.
    • 기본적으로 커널 프로세스가 일반 프로세스보다 우선순위가 높다.
    • 임의로 사용자가 지정할 수 있다.
    • 전면 프로세스가 후면 프로세스보다 우선순위가 보통 높다.
    • 입출력 집중 프로세스가 cpu 집중 프로세스보다 보통 높다.
      • 입출력 집중 프로세스는 cpu를 잠깐 쓰고 넘기기 때문이다.

Queue


cpu 사용하는 프로세스들

  • pcb를 연결한 큐가 있다.
  • 이때 우선순위에 따라 여러 큐를 만들어 multiple queue로 관리된다.
    • 모두 검색하는 오버헤드를 줄임

  • 이때 bitmap 배열을 이용해서 해당 우선순위의 큐가 pcb(task)를 가지고 있는지 확인한다.
    • 만약 1이라면 해당 큐를 순회하며 cpu를 할당한다.

  • 프로세스가 time slice를 모두 소모하면 expired array로 넘어간다.
    • 해당 우선순위에 맞게
  • active array가 사용이 다 되면 expired 에 time slice를 배정하고 active array로 바꾼다.

대기 상태의 프로세스들

  • 위에서 설명한 큐는 실행 상태를 다룬다.

    • 대기 상태의 프로세스도 큐를 가지고 있다.
  • 대기 상태 다단계 큐는 같은 입출력 장치끼리 모아 놓는다.

    • 입출력이 동시에 끝나면 여러 인터럽트가 한번에 처리된다.
    • 이를 위해 인터럽트 벡터를 사용하며 입출력이 완료된 pcb 들은 준비 상태로 이동한다.

정리

Scheduling algorithm


  • 스케줄링 알고리즘을 알아보자.

종류


구분종류
비선점형FCFS, SJF, HRN
선점형라운드 로빈, SRT, 다단계 큐, 다단계 피드백 큐
둘 다 가능우선순위 스케줄링

성능 기준


  • 대기 시간 : 프로세스 생성 후 실행까지 걸린 시간
  • 응답 시간 : 첫 작업을 시작한 후 첫 번째 반응까지 걸린 시간
  • 실행 시간 : 프로세스 작업이 시작된 후 종료되기까지 시간
  • 반환 시간 : 대기 시간을 포함하여 실행이 종료될 때까지의 시간

기준

  • 보통 스케줄링 알고리즘 성능 비교에는 평균 대기 시간을 사용한다.
    • 모든 프로세스들이 실행되기까지 걸린 대기 시간의 평균
    • 다만 순서나 작업 패턴에 따라 역전되기도 한다.

FCFS


  • 비선점형 방식
  • first come first served
  • 선입선출 스케줄링
    • 큐가 하나라 모든 프로세스는 우선순위가 동일하다.
  • 즉 하나씩 순서대로 실행된다.
    • 일괄 작업 시스템

단점

  • convoy effect
  • 입출력 요청시 cpu가 놀게됨

SJF


  • 비선점형 방식
  • shortest job first
    • shortest process first, 최단 프로세스 우선 스케줄링
  • 실행 시간이 가장 짧은 작업부터 cpu를 할당
  • convoy 효과를 완화함

단점

  1. 운영체제가 프로세스의 종료 시간을 정확히 예측하기 어렵다.
    • 즉 프로세스의 작업 길이를 알아야 스케줄을 하는데 길이를 모른다.
      • 현대 프로세스는 사용자와의 상호작용이 빈번하기 때문이다.
    • 고로 적용하기 어렵다.
  2. 공평하지 않다.
    • starvation
    • infinite blocking
    • 이를 완화하기 위한 방법으로 aging이 있으나 기준 선정의 한계가 있다.

HRN


  • 비선점형
  • highest response ratio next
  • SJF의 아사 현상을 해결하기 위한 알고리즘이다.
    • HRN은 서비스를 받기 위해 기다린 시간과 cpu 사용 시간을 고려하여 스케줄링한다.
    • 즉 대기 시간을 고려해 아사를 완화한다.
    • 스케줄링에 에이징을 구현한 것

우선순위=대기 시간 + CPU 사용 시간 CPU 사용시간  \text{우선순위} ={ \text{대기 시간 + CPU 사용 시간 } \over \text{CPU 사용시간 }}

단점

  • 여전히 공평성이 위배되어 많이 사용되지 않는다.

RR


  • 선점형 알고리즘 중 가장 단순하고 대표적인 방식
  • round robin
  • 한 프로세스가 할당 받은 시간 동안만 작업하고 큐의 맨 뒤로 보내지는 알고리즘
    • 완료 될 때까지 계속 순환
  • FCFS와 차이점은 time slice가 있다는 것이다.
    • 이는 convoy 효과를 완화한다.

유의점

  • 문맥 교환에 대한 오버헤드를 생각해야 한다.
    • 이에 타임 슬라이스의 크기가 중요하다.
  • 타임 슬라이스가 너무 크면 FCFS와 다르지 않다.
  • 타임 슬라이스가 너무 작으면 문맥 교환 오버헤드가 커진다.

SRT


  • shortest remaining time
    • 최소 잔류 시간 우선 스케줄링
  • SJF와 RR을 혼합한 방법
  • 기본적으로 RR 이다.
    • 다만 작업 시간이 가장 적은 프로세스를 선택하여 cpu를 할당한다.

단점

  • 실행중인 프로세스와 큐의 프로세스들의 시간을 주기적으로 계산해야한다.
  • 문맥 교환 오버헤드
  • 프로세스의 종료 시간 예측 어려움, 아사 현상
  • 잘 안쓰임

Priority


  • 중요도를 기준으로 우선 순위를 반영해 스케줄링한다.

단점

  • 공평성 위배와 아사 현상

MLQ


  • MultiLevel Queue Scheduling 다단계 큐 스케줄링

  • 우선 순위에 따라 준비 큐를 여러 개 사용하는 방식

  • 고정형 우선순위를 사용한다.

    • 프로세스가 시간을 소모하면 원래 큐로 돌아간다.
    • 상단의 큐의 모든 프로세스의 작업이 끝나야 다음 큐의 작업이 실행된다.
    • 선점형 방식으로 우선순위가 높은 프로세스가 먼저 작동한다.
      • 만약 하위 큐의 프로세스 진행 중 상위 단계 큐에 프로세스가 도착하면 뺏어버림
  • 각각의 큐에 대한 다른 스케줄링 알고리즘 적용가능하다.

  • 큐의 우선순위에 따라 타임 슬라이스를 조절할 수 있다.

단점

  • 우선 순위가 높은 큐가 완료되어야 다음 큐가 실행된다.
    • 기아 현상

MFQ


  • multilevel feedback queue
  • 우선순위가 낮은 프로세스들의 문제를 보완한 방식
  • cpu를 사용한 프로세스는 우선순위가 한 단계 낮아진다.
    • 즉 다음 단계 큐로 들어간다.
  • 우선순위에 따라 큐의 타임 슬라이스가 다르다.
    • 낮은 순위는 cpu를 얻을 확률이 상대적으로 낮다.
    • 그래서 오래 사용하도록 타임 슬라이스를 크게 만들어준다.
    • 마지막 큐의 타임 슬라이스는 무한대의 타임 슬라이스를 가지며 이는 FCFS 로 동작하는 것과 같다.
  • MFQ는 오늘날의 운영체제가 사용하는 방식이다. 변동 우선순위 알고리즘의 전형적인 예이다.

물론 커널 프로세스는 일반 프로세스의 큐로 삽입되지 않는다.

  • 짧은 작업에 우선권이 있다.
  • 입출력 관련 프로세스에 우선권을 준다.

This post is licensed under CC BY 4.0 by the author.