λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CS/운영체제

14. CPU Scheduling

by 🐳 Laboon 2024. 4. 22.
CPU μŠ€μΌ€μ€„λ§μ€ μ™œ μƒκ²Όμ„κΉŒ?

 

운영체제의 λ°œμ „μ„ κ³΅λΆ€ν•˜λ©΄μ„œ λ‹€μ€‘ν”„λ‘œκ·Έλž˜λ°μ΄ λ„μž…λœ 것을 μ•Œκ²Œλλ‹€.

닀쀑 ν”„λ‘œκ·Έλž˜λ°μ€ I/O 처리둜 μΈν•œ CPU Idle Time을 μ€„μ—¬μ„œ CPU ν™œμš©λ₯ μ„ ν–₯상 μ‹œν‚€κΈ° μœ„ν•΄μ„œ λ„μž… λ˜μ—ˆλŠ”λ° 이 λ•Œ, 닀쀑 처리λ₯Ό ν•˜κΈ° μœ„ν•œ 기법이 CPU μŠ€μΌ€μ€„λ§μ΄λ‹€. μŠ€λ ˆλ“œκΉŒμ§€ κ³΅λΆ€ν•˜λ©΄μ„œ μ•Œκ²Œ 된 λ‚΄μš©μ€ CPUλŠ” μŠ€λ ˆλ“œλ₯Ό μŠ€μΌ€μ€„λ§ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀. 근데 μ–΄λ–€ μŠ€λ ˆλ“œλ₯Ό 선택할 것인지 κ³¨λΌμ•Όν•œλ‹€.

 

μœ„μ™€ 같은 정책을 κ°€μ§„ μ•Œκ³ λ¦¬μ¦˜μ„ 크게 CPU μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬μ¦˜μ΄λΌκ³  ν•˜κ³  μ—„λ°€ν•˜κ²ŒλŠ” μŠ€λ ˆλ“œ μŠ€μΌ€μ€„λ§μ΄λΌκ³  ν•œλ‹€.

닀쀑 ν”„λ‘œκ·Έλž˜λ°μ€ 2κ°€μ§€ μŠ€μΌ€μ€„λ§μ„ 톡해 λ°œμƒν•œλ‹€.

1. μž‘μ—… μŠ€μΌ€μ€„λ§(job scheduling) - λ””μŠ€ν¬ μž₯μΉ˜λ‘œλΆ€ν„° λ©”λͺ¨λ¦¬μ— 올릴 μž‘μ—…μ„ μ„ νƒν•˜λŠ” 것이닀. ν”„λ‘œμ„ΈμŠ€κ°€ μ‹œμž‘ν•˜κ±°λ‚˜ μ’…λ£Œ ν•  λ•Œ, μ‚¬μš©ν•˜λŠ” 기법이닀.

2. CPU μŠ€μΌ€μ€„λ§(CPU Scheduling) - μž‘μ—… μŠ€μΌ€μ€„λ§μœΌλ‘œ λ©”λͺ¨λ¦¬μ— 적재된 μž‘μ—… 쀑 CPU에 μ‹€ν–‰μ‹œν‚¬ μŠ€λ ˆλ“œλ₯Ό μ„ νƒν•œλ‹€.

 

ν”„λ‘œκ·Έλž¨μ€ 일반적으둜 두 κ°€μ§€μ˜ νŠΉμ„±μ„ κ°€μ§„λ‹€.

1. CPU burst - CPU 집쀑 ν”„λ‘œμ„ΈμŠ€μ˜ νŠΉμ„±μ΄λ‹€. ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 CPU 연산이 자주 λ°œμƒν•˜λŠ” 상황이닀.

2. I/O burst - I/O 집쀑 ν”„λ‘œμ„ΈμŠ€μ˜ νŠΉμ„±μœΌλ‘œ I/O μž₯치의 μž…μΆœλ ₯이 자주 λ°œμƒν•˜λŠ” 상황이닀.

μ΄λ ‡κ²Œ ν”„λ‘œκ·Έλž¨μ€ CPU-burst와 I/O burstκ°€ λ°˜λ³΅ν•΄μ„œ μˆ˜ν–‰λ˜λŠ” νŠΉμ§•μ΄ μžˆμœΌλ―€λ‘œ 이 νŠΉμ§•μ„ μ΄μš©ν•΄μ„œ CPU μŠ€μΌ€μ€„λ§μ˜ 기쀀을 λͺ…ν™•ν•˜κ²Œ μ„€μ •ν•΄μ•Όν•œλ‹€.

 

Time slice, Time slot, Time quantum

 

μ‹œλΆ„ν•  λ‹€μ€‘ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” CPUμ—κ²Œ μŠ€μΌ€μ€„ μ‹œκ°„μ„ ν• λ‹Ήν•œλ‹€.

컀널이 μŠ€μΌ€μ€„μ„ μ²˜λ¦¬ν•˜λŠ” μ£ΌκΈ° μ‹œκ°„μœΌλ‘œ 타이머 μΈν„°λŸ½νŠΈλ‘œ νƒ€μž„ 슬라이슀 λ‹¨μœ„λ‘œ μŠ€μΌ€μ€„λ§ν•œλ‹€.

νƒ€μž„ 슬라이슀 내에 μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ κ°•μ œλ‘œ 쀑단(preemption)ν•˜κ³ , λŒ€κΈ° 큐에 μ‚½μž…ν•œλ‹€.

 

CPU μŠ€μΌ€μ€„λ§μ΄ μ‹€ν–‰λ˜λŠ” 상황

 

  1. μŠ€λ ˆλ“œκ°€ μ‹œμŠ€ν…œ 호좜 끝 I/O μš”μ²­μœΌλ‘œ λΈ”λ‘λ˜κ³  μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό μ„ νƒν•œλ‹€.
    • CPU ν™œμš©λ₯­ ν–₯상이 λͺ©μ 
  2. μŠ€λ ˆλ“œκ°€ 자발적으둜 CPUλ₯Ό λ°˜ν™˜ν•  λ•Œ, Yield() μ‹œμŠ€ν…œ 호좜둜 ν˜„μž¬ μŠ€λ ˆλ“œλŠ” λ ˆλ”” 큐에 μ‚½μž…λœλ‹€.
    • CPU의 자발적인 양보
  3. μŠ€λ ˆλ“œμ˜ νƒ€μž„ μŠ¬λΌμ΄μŠ€κ°€ μ’…λ£Œλ˜μ–΄ Timer Interruptκ°€ λ°œμƒν•˜μ—¬ μŠ€λ ˆλ“œκ°€ λ ˆλ”” 큐에 μ‚½μž…λœλ‹€.
    • CPU의 κ· λ“±ν•œ λΆ„λ°°
  4. 더 높은 μˆœμœ„μ˜ μŠ€λ ˆλ“œκ°€ μš”μ²­ν•œ μž…μΆœλ ₯ μž‘μ—…μ΄ μ™„λ£Œλ˜μ–΄ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜μ—¬ μŠ€λ ˆλ“œλ₯Ό λ ˆλ”” 큐에 μ‚½μž…ν•œλ‹€.
    • μŠ€λ ˆλ“œ μ‹€ν–‰ μš°μ„ μˆœμœ„λ₯Ό 지킨닀.

즉, μŠ€λ ˆλ“œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ°œμƒν•˜λŠ” μ‹œμ κ³Ό λ™μΌν•˜λ‹€. μš°μ„ μˆœμœ„ κ°œλ…μ΄ μΆ”κ°€λ§Œ λ˜μ—ˆλ‹€.

CPU μŠ€μΌ€μ€„λ§μ€ μ‹œμŠ€ν…œ 호좜이 λ°œμƒν•˜λ©΄ μŠ€λ ˆλ“œ μŠ€μΌ€μ€„λ§μœΌλ‘œ μ–΄λ–€ μŠ€λ ˆλ“œλ₯Ό μˆ˜ν–‰ν• μ§€ κ²°μ •ν•˜κ³  λ””μŠ€νŒ¨μ²˜(Dispatcher)에 μ˜ν•΄ ν•΄λ‹Ή μŠ€λ ˆλ“œμ˜ TCB κ΅¬μ‘°μ²΄μ—μ„œ PC μ£Όμ†Œλ₯Ό CPU에 μ „λ‹¬ν•˜λ©΄ μ‹€ν–‰μƒνƒœκ°€ λœλ‹€.

 

이 λ•Œ, μŠ€μΌ€μ€„λ§ μ½”λ“œλŠ” 컀널 λ‚΄ λͺ©μ  ν”„λ‘œκ·Έλž¨ ν˜•νƒœλ‘œ μ €μž₯λ˜μ–΄ μ‹€ν–‰λœλ‹€.

λ””μŠ€νŒ¨μ²˜ μ½”λ“œλŠ” μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ„ μ‹€μ§ˆμ μœΌλ‘œ μ‹€ν–‰ν•˜λŠ” 컀널 μ½”λ“œμ΄λ‹€.

CPU μŠ€μΌ€μ€„λ§μœΌλ‘œ μΈν•œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ κ³Όμ •

 

CPU μŠ€μΌ€μ€„λ§ νƒ€μž…μœΌλ‘œλŠ” 선점 μŠ€μΌ€μ€„λ§κ³Ό 비선점 μŠ€μΌ€μ€„λ§μ΄ μ‘΄μž¬ν•œλ‹€.

선점 μŠ€μΌ€μ€„λ§(Preemptive Scheduling)κ³Ό 비선점 μŠ€μΌ€μ€„λ§(Non-Preemptive Scheduling)

 

  • 비선점 μŠ€μΌ€μ€„λ§
    • ν˜„μž¬ 싀행쀑인 μŠ€λ ˆλ“œλ₯Ό κ°•μ œλ‘œ μ€‘λ‹¨μ‹œν‚€μ§€ μ•ŠλŠ”λ‹€.
    • 즉, I/Oκ°€ λ°œμƒν•˜κ±°λ‚˜ Yield, μ’…λ£Œμ™€ 같이 CPUκ°€ 쉴 λ•Œλ§Œ μŠ€μΌ€μ€„λ§μ„ ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€.
  • 선점 μŠ€μΌ€μ€„λ§ (였늘 λ‚ μ˜ 방식)
    • ν˜„μž¬ 싀행쀑인 μŠ€λ ˆλ“œλ₯Ό κ°•μ œ 쀑단 μ‹œν‚€κ³  λ‹€λ₯Έ μŠ€λ ˆλ“œλ₯Ό μ„ νƒν•œλ‹€.
    • 타이머 μΈν„°λŸ½νŠΈλ‚˜ μ‹œμŠ€ν…œ 호좜 λ“±μœΌλ‘œ μŠ€λ ˆλ“œμ— λŒ€ν•œ 역할이 끝났을 λ•Œ μŠ€μΌ€μ€„λ§ ν•œλ‹€.

μŠ€μΌ€μ€„λ§μ„ ν•˜λ©΄μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜κ²Œ λ˜λŠ”λ° λŒ€ν‘œμ μΈ μ˜ˆμ‹œκ°€ 기아이닀.

 

κΈ°μ•„(starvation) ν˜„μƒμ€ μŠ€λ ˆλ“œκ°€ λ ˆλ”” νμ—μ„œ 계속 λ¨Έλ¬΄λŠ” μƒνƒœμΈλ° 비선점 μŠ€μΌ€μ€„λ§μ΄λ“  선점 μŠ€μΌ€μ€„λ§μ΄λ“  λ‘˜ λ‹€ λ°œμƒν•  수 μžˆλ‹€. λŒ€ν‘œμ μΈ μ˜ˆμ‹œλ‘œ μš°μ„ μˆœμœ„ μ‹œμŠ€ν…œμ—μ„œ 더 높은 μˆœμœ„μ˜ μŠ€λ ˆλ“œκ°€ κ³„μ†ν•΄μ„œ λ ˆλ””νμ— μΆ”κ°€λ˜λŠ” κ²½μš°λ‹€.

에이징(aging) 기법을 κΈ°μ•„ ν˜„μƒμ˜ ν•΄κ²°μ±…μœΌλ‘œ λ‘λŠ”λ° μŠ€λ ˆλ“œκ°€ λŒ€κΈ° νμ—μ„œ λŒ€κΈ°ν•œ μ‹œκ°„μ— λΉ„λ‘€ν•΄ μŠ€μΌ€μ€„λ§ μš°μ„ μˆœμœ„λ₯Ό λ†’μ΄λŠ” 기법을 μ‚¬μš©ν•œ 것이닀. 에이징 기법도 μ²˜λ¦¬ν•˜λŠ”λ° 였래 걸릴 μˆ˜λŠ” μžˆμ§€λ§Œ κ°€μž₯ 높은 μˆœμœ„λ‘œ λ„λ‹¬ν•˜λŠ” 것이 보μž₯λœλ‹€.

 

CPU μŠ€μΌ€μ€„λ§μ˜ κΈ°μ€€(criteria)
  • CPU ν™œμš©λ₯  (CPU utilization), CPU μ‚¬μš© μ‹œκ°„ λΉ„μœ¨
  • 처리율 (throughput), μ‹œκ°„ λ‹Ή μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ 개수
  • 곡평성 (fariness), CPUλ₯Ό μŠ€λ ˆλ“œλ“€μ—κ²Œ κ³΅ν‰ν•˜κ²Œ λ°°λΆ„λ˜μ–΄μ•Ό ν•œλ‹€. 
    κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ κΈ°μ•„ μŠ€λ ˆλ“œκ°€ μƒκ²¨μ„œ λ¬΄ν•œμ • λŒ€κΈ°ν•˜λŠ” ν˜„μƒμ΄ λ°œμƒν•œλ‹€.
  • μ‘λ‹΅μ‹œκ°„ (response time), λͺ…령에 μ‘λ‹΅ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ μ§§μ„μˆ˜λ‘ μ’‹λ‹€.
  • λŒ€κΈ°μ‹œκ°„ (waiting time), μŠ€λ ˆλ“œκ°€ λ ˆλ”” νμ—μ„œ 머무λ₯΄λŠ” μ‹œκ°„
  • μ†Œμš”μ‹œκ°„ (turnaround time), μŠ€λ ˆλ“œκ°€ μ‹œμŠ€ν…œμ—μ„œ μ™„λ£Œλ  λ•ŒκΉŒμ§€ κ±Έλ¦°μ‹œκ°„
  • μ‹œμŠ€ν…œ μ •μ±… (policy enforcement), νŠΉλ³„ν•œ λͺ©μ 
    μ‹€μ‹œκ°„ μ‹œμŠ€ν…œμ˜ νŠΉμ • μ‹œκ°„ μ„€μ • λ“±
  • μžμ› ν™œμš©λ₯  (resource efficiency)