ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS] 운영체제 - CPU 스케줄링
    CS📟 2022. 11. 3. 00:55

    CPU 스케줄링

     

    CPU and I/O burst ( 하나의 프로세스의 일생 ) 

    • CPU bound job
      • CPU를 길게 쓰는 프로그램
      • 예) 계산을 오래 하는 작업
    • I/O bound job
      • CPU를 비교적 짧게 사용
      • 예) 주로 사람과 인터렉션하는 프로그램
    • 여러 종류의 job이 섞여 있기때문에 CPU 스케줄링이 필요하다
    • I/O bound job을 먼저 CPU를 주면 짧게 쓰고 I/O 장치를 사용하러 가지만 CPU bound job을 먼저 주면 I/O 장치까지 놀게 될 수 있다.
    CPU Scheduler & Dispatcher
    • CPU Scheduler
      • 여러 작업이 존재하기에 스케줄링이 필요
      • Ready 상태의 프로세스 중 CPU를 줄 프로세스를 고른다.
    • Dispatcher
      • CPU의 제어권을 CPU Scheduler에 의해 선택된 프로세스에게 넘김
      • 이 과정을 context switch라고 한다.
    • CPU 스케줄링이 필요한 경우는 프로세스에게 다음과 같은 상태 변화가 있는 경우
    • nonpreemptive(자진 반납)
      • Running -> Blocked (ex: I/O System call)
      • Terminate
    • preemptive(강제로 반납)
      • Running -> Ready(ex: time out timer interrupt)
      • Blocked -> Ready(ex: interrupt after I/O Complete)
    스케줄링 성능 척도( Scheduling Criteria)
    • CPU utilization(이용료)
      • 높을수록 좋음
    • Throughput(처리량)
      • 많을수록 좋음
    • Turnaroind time( 소요시간, 반환 시간)
      • 사용시간과 대기시간 전부
      • 빠를수록 좋음
    • Waiting time(대기시간)
      • CPU를 사용하려고 와서 기다린 시간의 합
      • 큐에서 줄 선 모든 시간
      • 빠를수록 좋음
    • Response time(응답 시간)
      • 최초로 CPU를 얻기까지 시간(CPU를 사용하려고 하는 순간부터 최초로 CPU를 얻기까지)
      • 빠를 수록 좋음
    CPU 스케줄링 알고리즘
    • FCFS(First Come First Served)
      • nonpreemptive
      • 선착순으로 처리
      • 사용시간이 긴 프로세스에게 먼저 CPU를 주면 비효율적
      • Convoy effect
        • 1차 세계대전 때 잘 싸우는 사람이 앞에서 오래 싸워주면 뒤에 사람들이 오래 살아남는 효과에서 유래
    • SJF(Shortest Job First)
      • 각 프로세스의 다음번 CPU burst time을 가지고 스케줄링에 활용
      • CPU burst time이 가장 짧은 프로세스에게 먼저 CPU를 줌
      • nonpreemptive
        • 일단 CPU를 잡으면 CPU burst가 완료될 때까지 CPU를 선점당하지 않는다.
      • preemptive
        • 현재 수행 중인 프로세스의 CPU burst time보가 짧은 프로세스가 오면 CPU를 빼앗김(남은 시간 기준)
    • SRTF(Shortest Remaining Time First)
      • 가장 적은 평균 대기 시간을 보장 가능
      • 기아 현상이 발생
        • CPU burst time가 긴 프로세스가 CPU를 얻지 못하는 상황 발생
      • 다음 프로세스의 CPU burst를 미리 알 수 없음
      • 과거를 보고 예측해서 판단
        • 1에 가까울수록 직전 값을 사용
    • Priority 스케줄링
      • 우선순위로 CPU를 줌
      • SJF도 일종의 Priority 스케줄링이다.
      • nonpreemptive, preemptive로 구현 가능
      • Aging
        • 오래 기다릴 경우 우선순위를 높여준다 
    • RR(Round Robin)
      • Timer에 시간을 세팅해서 시간이 지나면 인터럽트를 걸어서 CPU를 뺏음
      • 보통 10 ~ 100m/s
      • 기아 현상 예방 가능
      • 할당 시간이 너무 길거나 짧으면 문제가 됨
      • 평균 turnaround 시간이 길어짐
      • 짧은 job과 긴 job이 섞여있어야 효율적
      • 똑같은 job이 계속 올 경우 다 같이 기다리다가 다 같이 종료될 수 있음
    • Multilevel Queue
      • Ready queue를 여러 개로 분할
        • foreground에 인터렉티브 한 Job
        • background에 인터렉티브 하지 않은 Job
      • 각 큐는 독립적인 스케줄링 알고리즘을 가짐
        • foreground - RR
          • 응답이 빨라야 함
        • background - FCFS
          • 시간이 긴 Job들은 차례로 처리하는 게 나음
      • 큐에 대한 스케줄링이 필요
        • Fixed priority 스케줄링
          • 모든 foreground 큐가 해결되면 background 큐를 처리
        • Time slice
          • 각 큐에 CPU time을 적절한 비율로 할당
          • foreground 80%, background 20%
    • Multilevel Feedback Queue
      • 큐 간에 이동이 가능
      • 각 큐에 스케줄링 알고리즘 존재
        • 상위 큐로 보내는 기준
        • 하위 큐로 보내는 기준
    • Multiple Processor 스케줄링
      • CPU가 여러 개인 경우 더 복잡
      • Homogeneous(균질한) processor 
        • Queue에 한 줄로 세워서 각 프로세서가 알아서 꺼내가게 할 수 있다.
        • 반드시 특정 프로세서에서 수행되어야 하는 프로세스가 있는 경우는 복잡
      • Load sharing
        • 일부 프로세서에 job이 몰리지 않도록 부하를 적절히 공유하는 메커니즘 필요
        • 별개의 큐를 두는 방법, 공동 큐를 사용
      • Symmetric Multiprocessing(SMP)
        • 모든 CPU가 대등
        • 각 프로세서가 각자 알아서 스케줄링
      • Asymmetric multiprocessing
        • 하나의 프로세서가 시스템에 데이터의 접근과 공유를 책임
    • Real Time 스케줄링
      • 데드라인이 있는 경우에 사용
        • Hard real time systems
          • 정해진 시간 안에 반드시 끝내야 함
          • 오프라인으로 스케줄링하는 경우도 있음
            • 오프라인은 미리 프로세스들의 도착시간을 알고 하는 것
        • Soft real time systems
          • 일반 프로세스보다 우선순위가 높아야 함 (예: 영상)
          • 데드라인을 반드시 지켜야 하는 것은 아님
    • Thread 스케줄링
      • Local 스케줄링
        • User level thread(운영체제가 모름)
        • 사용자 수준의 thread library에 의해 스케줄링
      • Global 스케줄링
        • Kenel level(운영체제가 알도 있음)
        • 일반 프로세스처럼 커널의 단기 스케줄러가 결정
    • Algorithm Evaluation
      • Queueing models
        • 확률 분포로 job의 도착률과 처리율이 주어짐
        • 수식을 통해 처리량, 대기 시간이 반환
    • implementation(구현) & Measurement(성능 측정)
      • 실제 시스템에 알고리즘을 구현
      • 실제 작업에 대해서 성능 측정(실제로 구현한 후 테스트해본다)
      • 리눅스 내부 코드를 수정해야 해서 난도가 높다
    • Simulation(시뮬레이션)
      • 모의 프로그램으로 작성하고 테스트
      • input data(trace)가 신빙성이 있어야 함
      • trace
        • 실제 프로그램에서 추출
        • 제작
Designed by Tistory.