[전공 CS]/[컴퓨터 구조론][운영체제]

[운영체제] 5장 CPU 스케줄링

우당탕탕 개발 일지 2025. 12. 7. 00:45
728x90

수업 내용을 정리한 내용입니다. [명품 운영체제]를 바탕으로 수업이 진행됐습니다. 

 

1. 선점, 비선점 스케줄링 구분 
2. 작업 스케줄링과 CPU스케줄링 차이점 
3. 선점 : RR,SRTF | 비선점 :FCFS, SJF ⭐️⭐️⭐️

(연습문제 7,8번 잘보기)

 

CH01

작업 스케줄링 & CPU 스케줄링 ____ 두개 차이점 잘 알아두기! 

 

오늘날의 스케줄링은  준비 상태의 스레드 중 하나를 선택하는 스레드 스케줄링.
  • 작업 스케줄링 : 메모리에 적재된 프로세스가 종료하면 디스크에서 기다리는 작업 중 하나를 선택하여 메모리에 적재하는 것. 
  • cpu 스케줄링 : 실행중인 프로세스가 I/O를 실행할 때 메모리에 적재된 다른 프로세스 중 CPU에 실행시킬 프로세스를 선택하는 과정.
  작업 스케줄링 cpu 스케줄링
위치 하드 디스크에 있을때 ( 작업 큐, 배치 큐) 메모리에 적재된 작업 중 ( 준비 큐 )
목적 메모리에 올릴 작업 선택  cpu에 실행시킬 프로세스 선택 
  new → ready ready → running
작업 빈도 느림( 새로운 작업이 있을때만 실행) 빠름 ( cpu가 유휴 상태가 되거나 타임슬라이스 만료 될때 마다 실행 )

 

 

(공통점) 스케줄링 도입 목적 : 다중 프로그래밍의 cpu 유휴시간을 줄이기 위해 도입됨.

 



 

CPU brust & I/O brust

  • CPU brust  : 프로그램 실행 중 cpu가 코드를 집중적으로 실행하는 상황(계산 연산)
  •  I/O brust :  I/O 장치에 의해 입출력이 이루어지는 상황.
CPU-burst – I/O burst – CPU-burst – I/O burst의 반복 ...

 

cpu 스케줄링 기준 ( =스케줄링 알고리즘을 평가하는 기준)

기존 목표는 cpu활용률과 처리율 향상이지만 아닌 경우도 있음.

 

 

cpu 활용률 : 전체 시간 중 cpu의 사용시간 비율[운영체제 입장]⭐️                      

EX) cpu활용률 10% : 10시간중 1시간만 cpu가 스레드를 실행하고 나머지 9시간은 놀고 있음.  

 

처리율: 단위 시간 당 완료된 작업의 수⭐️[운영체제 입장]

EX) 처리율 10개/초 : cpu가 1초에 10개의 작업을 끝낸다는 의미. 

 

공평성 :cpu 스레드들에게 공평하게 배분 → 시분할로 스케줄링 사용 ( 기아 스레드가 생기지 않도록 !!!!) [사용자 입장]

EX) 10개의 스레드 중 1시간 동안 9개의 스레드만 계속 실행되고 1개는 전혀 할당 받지 못하면 공평성이 부족한 상황 ( 기아 상태 발생 )

⭐️ 공평성이 높아지면 cpu 활용률은 떨어진다 (RR생각하면 됨)

 

응답시간 : 사용자에 대한 응답 시간 최소화 [사용자 입장]

EX) 사용자가 웹에서 페이지를 클릭했을때 뜨기까지의 시간이 5초 걸렸다면 응답 시간이 5초인것임. 

 

대기시간 : 스레드가 준비큐에서 머무르는 총 시간. [운영체제, 사용자 입장]

EX)  [ new - Ready - Running ]

 

소요시간:작업을 시작시킨 사용자가 결과를 얻기까지 걸린 총 시간.[사용자 입장]

대기 시간 + 실행 시간 + I/O 시간 등 모든 시간

EX) 사용자가 웹 페이지를 클릭하기전 대기 10초(대기시간) 클릭한 후 뜨는 시간이 5초(응답 시간)이면 소요 시간은 15초임.

 

시스템 정책 우선 : 컴퓨터 시스펨의 특별한 목적을 달성하기 위한 스케줄링.[ 운영체제 입장]

EX) 급여 시스템에서 안전을 관리하는 스레드를 우선 실행하는 정책.

 

자원 활용률 : CPU나 I/O장치 등 자원이 놀지 않도록 자원 활용률을 극대화 하는 것. 

 

 

 

 

타임 슬라이스 , RR

: 하나의 스레드가 너무 오래 cpu를 사용하도록 허용하지 않음→ 스케줄된 스레드에게 한번 할당하는 cpu 시간

RR( 라운드 로빈) 스케줄링을 구현하는데 핵심적인 매개변수 


 

CH02

스케줄링이 언제 시행 될까

1)CPU 활용률 향상  목적: 스레드가 I/O를 요청하는 시스템 호출을 실행하여  블록 상태가  될거나 ,

자원이 기다리는 상태가 될때 다른 스레드에 cpu를 할당하는 경우

 

2) cpu 자발적 양보 : 스레드가 yield() 호출을 통해 스스롤 실행을 중단하고 cpu를 자발적으로 내놓을때, 

현재 스레드를 Ready 상태로 만들어 준비 리스트에 넣고 cpu 스케줄링 실행.

 

3)균등한 CPU 분배 목적 :스레드에 할당된 타임 슬라이스가 소딘되어 타이머 인터럽트 발생할때,

ISR내에서 cpu 스케줄링 실행.

 

4)우선 순위를 지키기 위한 목적 : 현재 실행중인 스레드 보다 우선순위가 더 높은 스레드가 요청한 입출력 작업이 완료되어 I/O인터럽트 발생한 경우, ISR에서 현재 스레드를 강제로 중단(선점) 시켜 준비 상태로 만들고 I/O를 기다렸던 더 높은 스레드를 스케줄링하여 실행. 

 

 

 

CPU 스케줄링 코드의 위치와 실행 시점 

1. CPU스케줄링을 담당하는 별도의 커널 스레드나 프로세스가 있는가? 없다 

스케줄링 코드는 시스템 호출이나 ISR에 의해 호출되는 코드(함수 ) 형태로 존재 

 

2. 스케줄링 코드가 실행되는 시점은 어디인가? 

CPU 스케줄링 코드는 시스템이나 ISR이 서비스를 마치는 마지막 단계에서 실행. 

 

 

디스패치

1) 스케줄러에 의해 선택된 스레드를 cpu가 실행하도록 하는 커널 코드 중 일부.

2) 컨텍스트 스위칭을 실행하는 커널 코드로 이전에 중단되었던 B 스레드가 다시 실행을 시작함. 

 

⭐️   디스패치 코드와 스케줄링 코드 둘다 실행 시간이 가능한 짧아야 함. 

 

 

 


선점 스케줄링  & 비선점 스케줄링
(선점 2가지, 비선점 3가지 발생 경우)

선점: 현재 실행 중인 스레드를 강제로 중단 시켜 준비리스트로 이동 시키고 스케줄링함. 

비선점: 실행 중인 스레드가 더이상 cpu를 사용할 수 없는 상황에서 스케줄링함. 강제 종료 없이 무조건 끝까지 수행함.

 

 

 

비선점: 현재 실행중인 스레드를 강제로 중간시키지 않는 타입.

⭐️⭐️⭐️

1) 실행 중인 스레드가 더이상 cpu를 사용할 수 없는 상황 : I/O로 인한 블록 상태, sleep()

2) 자발적 CPU 양보 : yield() 시스템 호출

3) 스레드 종료 

 

 

 

 

 

 

선점 : 현재 실행중인 스레드를 강제 중단 시키 준비 상태로 만들고 다른 스레드 선택. (현재 방식) 

⭐️⭐️⭐️

1) 타임슬라이스가 소진되어 타이머 인터럽트가 발생될 때

2) 인터럽트나 시스템 호출 종료 시점에서, 더 높은 순위의 스레드가 준비 상태일 때.

 

선점 환경에서 모든 종류의 스케줄링 유발 사례를 보여주고 있음.

 

 


기아 & 에이징 

 

기아

: 스레드가 스케줄링에서 선택되지 못한 채 오랜동안 준비 리스트에 있는 상황

: 언제 cpu를 사용할지 알 수 없는 경우

 

에이징 (기아 해결책)

: 스레드가 준비 리스트에 머무르는 시간(대기시간)에 비례하여 스케줄링 순위

→ 예를 들면 경로 우대라 생각하면 된다고 하심.

오래 기다릴 수는 있지만 언젠가는 가장 높은 순위에 도달하는 것 보장


CH03 CPU 스케줄링 알고리즘

선점에 들어가 있는 스케줄링 기법 / 비선점에 있는 스테줄링 기법 구분하기 (중요)

 

 

1. FCFS(First Come First Served)(비선점 스케줄링)

  • 도착한 순서대로
  • 먼저 도착한 스레드 먼저 스케줄링 (선입선처리)
  • 기아가 발생하지 않음
  • 스레드 우선순위 없음. 
    → 평균 대기 시간 계산 하는거 알아두기
  대기 시간 ( 반환-실행) 반환시간 (종료-도착) : 대기 +실행 OR 종료 -도착
t1 0 4
t2 3 6
t3 5 6
t4 3 6
소요 시간  11+11=22 22

 

 

 

2. SJF(Shortest Job First)(비선점 스케줄링)

  • 가장 짧은 스레드 우선 처리 | 이건 기아 발생함.
  • 실행시간이 제일 짧은 스레드를 먼저 처리함. , 실행시간을 아는건 비현실적임
  • 스레드 우선순위 없음.
    현재는 같은 크기의 스레드에 대해서 FCFS를 적용해서 T2가 선택됨.
  대기 시간 ( 반환-실행) 반환시간 (종료-도착) : 대기 +실행 OR 종료 -도착
t1 0 4
t2 4 7
t3 2 3
t4 3 6
  9(대기)+11(실행) 20

 

 

 

3. SRTF (Shortest Remaining Time First)(선점 스케줄링)

  • 남은 시간이 짧은 스레드가 준비 큐에 들어오면 이를 우선 처리
  • 최소 잔여 시간 우선 스케줄링
  • 남은 실행 시간이 가장 짧은 스레드 선택
  • 기아 발생 | 스레드 우선순위 없음.
  • 실행시간 예측이 불가능하므로 현실에서는 거의 사용되지 않음(이런게 있다 정도만 알아두기)
      대기 시간 ( 반환-실행) 반환시간 (종료-도착) : 대기 +실행 OR 종료 -도착
    t1 1 5
    t2 4 7
    t3 0 1
    t4 3 6
    소요시간 8+11=19 19

 

4. Round-Robin(선점 스케줄링)

  • 스레드들을 돌아가면서 할당된 시간(타임 슬라이스)만큼 실행.
  • 스레드들에게 공평한 실행 기회를 줌.
  • 큐에 대기중인 스레드들을 타임 슬라이스 주기로 돌아가면서 선택함.
  • 기아 없음, 스레드 우선순위 없음.
  • 스케줄링 파라미터 : 타임 슬라이스
  • 균형된 처리율 : 타임슬라이스가 크면 FCFS에 가까움, 적으면 SJF/SRTF에 가까움
  • 단점 : 오버헤드가 많이 일어남 (타임 슬라이스가 작으면 오버헤드가 너무 많이 발생함)

타임 슬라이스 2일때→스케줄링이 총 6번 일어남.

 

  대기 시간 ( 반환-실행) 반환시간 (종료-도착) : 대기 +실행 OR 종료 -도착
t1 3 7
t2 4 7
t3 2 3
t4 3 6
소요 시간  12+11=23 23

 

타임 슬라이스가 1일때

  대기 시간 ( 반환-실행) 반환시간 (종료-도착) : 대기 +실행 OR 종료 -도착
t1 5 9
t2 4 7
t3 1 2
t4 3 6
소요 시간  13+11=24 24

 

 

5. Priority Scheduling(선점/비선점 스케줄링 둘 다 구현 가능)

  • 우선 순위를 기반으로 하는 스케줄링. 가장 높은 순위의 스레드 먼저 실행
  • 스레드 우선순위 있음. | 기아 발생 가능           

6. MLQ(Multilevel queue scheduling)(선점/비선점 스케줄링 둘 다 구현 가능)

  • 스레드와 큐 모두 n개의 우선순위 레벨로 구분, 레벨이 높은 스레드를 우선 처리하는 목적. 
  • 스레드는 다른 큐로 이동하지 못함
  • 예) background process, Foreground process
  • 우선순위 있음. | 기아가 발생함. (레벨이 높은 순위만 먼저 들어가고 레벨 낮은건 무한정 대기함) 

→ 멀티 레벨 큐임.

→EX) 내가 입출금한다고 대기하고 있는데 갑자기 대출 상담 갈 순 없음 (이걸 개선한게 밑에꺼)

 

 

7. MLFQ(Multilevel feedback queue scheduling)(선점/비선점 스케줄링 둘 다 구현 가능) 

 

  • 큐만 n개의 우선순위 레벨을 둠. || 스레드는 동일한 우선순위 (우선 순위가 없는것 = 동일한 우선순위)
  • 스레드는 제일 높은 순위의 큐에 진입하고 큐타임슬라이스가 다하면 아래 레벨의 큐로 이동
  • 낮은 레벨의 큐에 오래 있으면 높은 레벨의 큐로 이동
  • Multilevel queue scheduling의 단점을 보완해주는 거
  • 최하위 레벨 큐는 주로 FCFS나 긴 타임 슬라이스의 RR로 스케줄.  스레드들은 다른 큐로 이동 못함
  • 기아가 발생하지 않음 !! MLQ와 차이점 (대기하는 시간이 높아지면 다른 레벨 큐로 이동시켜줌)

MLQ와 MLFQ의 차이점 : 기아 발생 여부 (처리 방식 알아두기 - 기아가 발생하는 이유, 발생하지 않는 이유)

CPU burst가 짧은 스레드나 I/O작업이 많은 스레드 or 대회식 스레드를 우선 실행시켜 스레드의 평균 대기 시간을 줄이기 때문.

 

 

i/o완료후 어디서 나오는지 봐두기

 

 

 

T1이 i/o 작업이 가장 많이 발생함.

T3를 따라가면 개념에서 말하는 대기하는 시간이 높아지면 다른 레벨 큐로 이동시켜줌 이 말이 이해가 감.

Q3=2ms임.

 

 

EX) 대학에서 교수, 교직원, 대학원생, 학부생 등 사용자를 4개의 레벨로 나누고, 사용자에 따라 실행시킨 스레드 레벨로 스케줄링


CH04 멀티 코어 CPU에서의 스케줄링

프로세스1 : 싱글 스레드

프로세스 2 : 스레드 2개 이용

프로세스 3 : 스레드 3개 이용

 

멀티코어 시스템에서 싱글 코어 CPU 스케줄링을 사용할 때 문제점

  • (문제 1) 컨텍스트 스위칭 후 오버헤드 문제
    • 이전에 실행된 적이 없는 코어에 스레드가 배치될 때,
    • 컨텍스트 스위칭 후, 실행 중에 새로운 스레드의 코드와 데이터가 캐시에 채워지는 긴 경과 시간
  • (문제 2) 코어별 부하 불균형 문제
    • 스레드를 무작위로 코어에 할당하면, 코어마다 처리할 스레드 수의 불균형 발생

 

 

컨텍스트 스위칭 후 오버헤드 문제 해결( 중요)

-cpu 친화성 적용 : 스레드를 동일한 코어에서만 실행하도록 스케줄링. 

-코어 당 스레드 큐 사용 : 한 코어에서 실행이 중단된 스레드를 다시 동일한 코어의 큐에 삽입하는 방법. 

코어당 스레드 큐

 

부화 균등화 기법( 그냥 참고만)

  1. 푸시 마이그레이션 기법 : 감시 스레드가 짧거나 빈 큐를 가진 코어에 다른 코의 스레드를 옮기는 기법.
  2. 풀 마이그레이션기법 : 코어가 처리할 스레드가 없으면 다른코어의 스레드를 자신의 큐로 가져와 실행