CS/운영체제

[운영체제] CPU μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬μ¦˜

1eehyunji 2023. 9. 1. 20:52

CPU μŠ€μΌ€μ€„λŸ¬λŠ” CPU μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬μ¦˜μ— 따라 ν”„λ‘œμ„ΈμŠ€μ—μ„œ ν•΄μ•Ό ν•˜λŠ” 일을 μŠ€λ ˆλ“œ λ‹¨μœ„λ‘œ CPU에 ν• λ‹Ήν•œλ‹€. 

ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ CPU μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬μ¦˜μ΄ μ–΄λ–€ ν”„λ‘œκ·Έλž¨μ— CPU μ†Œμœ κΆŒμ„ 쀄 것인지 κ²°μ •ν•œλ‹€.

이 μ•Œκ³ λ¦¬μ¦˜μ€ CPU 이용λ₯ μ„ λ†’κ²Œ, μ£Όμ–΄μ§„ μ‹œκ°„μ— λ§Žμ€ 일을 ν•˜κ²Œ, μ€€λΉ„ 큐에 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λŠ” 적게, 응닡 μ‹œκ°„μ€ 짧게 μ„€μ •ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•œλ‹€. 

 

CPU μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬μ¦˜ μ’…λ₯˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • λΉ„μ„ μ ν˜•
    • FCFS(First come, First Served)
    • SJF(Shortest Job First)
    • μš°μ„ μˆœμœ„
  • μ„ μ ν˜•
    • λΌμš΄λ“œ 둜빈(RR, Round-Robin)
    • SRF(Shortest Remaining Time First)
    • 닀단계 큐

 

λΉ„μ„ μ ν˜• 방식(non-preemptive)

λΉ„μ„ μ ν˜• 방식은 ν”„λ‘œμ„ΈμŠ€κ°€ 슀슀둜 CPU μ†Œμœ κΆŒμ„ ν¬κΈ°ν•˜λŠ” 방식이며, κ°•μ œλ‘œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ€‘μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€. 

λ”°λΌμ„œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μœΌλ‘œ μΈν•œ λΆ€ν•˜κ°€ 적닀.

FCFS

κ°€μž₯ λ¨Όμ € 온 것을 κ°€μž₯ λ¨Όμ € μ²˜λ¦¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

λ¨Όμ € 온 길게 μˆ˜ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€ λ•Œλ¬Έμ— 'μ€€λΉ„ νμ—μ„œ μ˜€λž˜κΈ°λ‹€λ¦¬λŠ” ν˜„μƒ(convoy effect)'이 λ°œμƒν•˜λŠ” 단점이 μžˆλ‹€. 

좜처 : https://haun25ne.tistory.com/53

SJF

SJFλŠ” μ‹€ν–‰ μ‹œκ°„μ΄ κ°€μž₯ 짧은 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°€μž₯ λ¨Όμ € μ‹€ν–‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 

κΈ΄ μ‹€ν–‰ μ‹œκ°„μ„ κ°€μ§„ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” κΈ°μ•„ ν˜„μƒ(starvation)이 μΌμ–΄λ‚˜λ©° 평균 λŒ€κΈ° μ‹œκ°„μ΄ κ°€μž₯ μ§§λ‹€.

ν•˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” μ‹€ν–‰ μ‹œκ°„μ„ μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— 과거에 μ‹€ν–‰λλ˜ μ‹œκ°„μ„ ν† λŒ€λ‘œ μΆ”μΈ‘ν•΄μ„œ μ‚¬μš©ν•œλ‹€.

좜처 : https://wonit.tistory.com/104

μš°μ„ μˆœμœ„

κΈ°μ‘΄ SJF μŠ€μΌ€μ€„λ§μ˜ 경우 κΈ΄ μ‹œκ°„μ„ κ°€μ§„ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” ν˜„μƒμ΄ μžˆμ—ˆλ‹€. 

μ΄λŠ” 였래된 μž‘μ—…μΌμˆ˜λ‘ 'μš°μ„  μˆœμœ„λ₯Ό λ†’μ΄λŠ” 방법(aging)'을 톡해 단점을 λ³΄μ™„ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 

 

μ„ μ ν˜• 방식(preemptive)

μ„ μ ν˜• 방식은 ν˜„λŒ€ μš΄μ˜μ²΄μ œκ°€ μ“°μ΄λŠ” λ°©μ‹μœΌλ‘œ, μ§€κΈˆ μ‚¬μš©ν•˜κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€μ„ μ•Œκ³ λ¦¬μ¦˜μ— μ˜ν•΄ μ€‘λ‹¨μ‹œμΌœ 버리고 κ°•μ œλ‘œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ— CPU μ†Œμœ κΆŒμ„ ν• λ‹Ήν•˜λŠ” 방식을 λ§ν•œλ‹€.

λΌμš΄λ“œ 둜빈

λΌμš΄λ“œ λ‘œλΉˆμ€ ν˜„λŒ€ 컴퓨터가 μ“°λŠ” μŠ€μΌ€μ€„λ§μΈ μš°μ„ μˆœμœ„ μŠ€μΌ€μ€„λ§μ˜ μΌμ’…μœΌλ‘œ 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ™μΌν•œ ν• λ‹Ή μ‹œκ°„μ„ μ£Όκ³  κ·Έ μ‹œκ°„ μ•ˆμ— λλ‚˜μ§€ μ•ŠμœΌλ©΄ λ‹€μ‹œ μ€€λΉ„ 큐의 λ’€λ‘œ κ°€λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 

좜처 : https://velog.io/@chappi

예λ₯Ό λ“€μ–΄, 10만큼의 ν• λ‹Ή μ‹œκ°„μ΄ λΆ€μ—¬λ˜μ—ˆκ³ , 3개의 ν”„λ‘œμ„ΈμŠ€κ°€ μš΄μ˜λœλ‹€κ³  ν•˜λ©΄ 2*10만큼의 μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ μžμ‹ μ˜ μ°¨λ‘€κ°€ λŒμ•„μ˜€κ²Œ λœλ‹€. 즉, ν• λ‹Ή μ‹œκ°„μ΄ q이고, ν”„λ‘œμ„ΈμŠ€ κ°œμˆ˜κ°€ N개 일 λ•Œ, (N-1)*q μ‹œκ°„λ§ŒνΌ μ§€λ‚˜λ©΄ λ‹€μ‹œ μžμ‹ μ˜ μ°¨λ‘€λ‘œ λŒμ•„μ˜€λŠ” 것이닀.

 

μœ„ μ˜ˆμ‹œμ˜ 경우, p1이 λ“€μ–΄μ˜€κ³  10msλ™μ•ˆ μ§„ν–‰λœλ‹€. 그리고 10msκ°€ λλ‚˜κ²Œλ˜λ©΄ p1은 μΈν„°λŸ½νŠΈμ— 걸리게 λ˜μ–΄ ready qeueu 맨 λ’€λ‘œ κ°€κ³  p2μ—κ²Œ CPU μžμ›μ΄ ν• λ‹Ήλœλ‹€. p2λŠ” 10ms λ™μ•ˆ μ‹€ν–‰λ˜μ–΄ 20ms에 CPUμžμ›μ„ λ°˜ν™˜ν•˜κ³  ready queue에 λ“€μ–΄κ°„λ‹€. p3κ°€ CPU μžμ›μ„ μ΄μ–΄λ°›μ§€λ§Œ P3λŠ” μž‘μ—… μ‹œκ°„μ΄ 9ms이기 λ•Œλ¬Έμ— νƒ€μž„ μŠ¬λΌμ΄μŠ€λ³΄λ‹€ μ‹œκ°„μ΄ 적닀. λ•Œλ¬Έμ— p3λŠ” 10ms인 νƒ€μž„μŠ¬λΌμ΄μŠ€ λ™μ•ˆ 싀행이 μ™„λ£Œλ˜κ³  μ’…λ£Œλœλ‹€. p1은 20ms, p2λŠ” 8msκ°€ 남은 μ‹œμ μ—μ„œ p1의 μ°¨λ‘€κ°€ λ˜μ–΄ 10msλ™μ•ˆ μ‹€ν–‰λœλ‹€. 이후 p2κ°€ μ‹€ν–‰λ˜κ³  10ms보닀 적게 μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— 8ms만 μ‹€ν–‰λœλ‹€. λ•Œλ¬Έμ— 39~47ms κΉŒμ§€λ§Œ μ‹œκ°„μ„ μ‚¬μš©ν•˜κ³  p1μ—κ²Œ μ°¨λ‘€λ₯Ό λ„˜κΈ΄λ‹€. p1은 10ms만큼 λ‚¨μ•˜μœΌλ―€λ‘œ νƒ€μž„ 슬라이슀 10msκ°€ λλ‚˜λ©΄ μ’…λ£Œλœλ‹€. 이후에 ready queueμ—λŠ” 아무것도 μ—†κ²Œ λœλ‹€.

 

ν• λ‹Ή μ‹œκ°„μ΄ λ„ˆλ¬΄ 크면 λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€κ°€ ν• λ‹Ή μ‹œκ°„ μ•ˆμ— λͺ¨λ‘ μˆ˜ν–‰ν•  수 있게 λ˜λ©΄μ„œ κ°€μž₯ λ¨Όμ € λ“€μ–΄μ˜¨ μž‘μ—…μ„ κ°€μž₯ λ¨Όμ € μ‹€ν–‰ν•˜λŠ” FCFS μ•Œκ³ λ¦¬μ¦˜μ΄ 되고, λ„ˆλ¬΄ μž‘μœΌλ©΄ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ„ˆλ¬΄ μž¦μ•„μ Έμ„œ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•œλ‹€. 

일반적으둜 전체 μž‘μ—… μ‹œκ°„μ€ κΈΈμ–΄μ§€μ§€λ§Œ 평균 응닡 μ‹œκ°„μ€ μ§§μ•„μ§„λ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€. 

참고둜, 이 μ•Œκ³ λ¦¬μ¦˜μ€ λ‘œλ“œλ°ΈλŸ°μ„œμ—μ„œ νŠΈλž˜ν”½ λΆ„μ‚° μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ 쓰인닀.

 

SRF(Shortest Remaining Time First)

SJFλŠ” 쀑간에 μ‹€ν–‰ μ‹œκ°„μ΄ 더 짧은 μž‘μ—…μ΄ λ“€μ–΄μ˜€λ”λΌλ„ 기쑴에 μˆ˜ν–‰ν•˜λ˜ μž‘μ—…μ„ μ™„λ£Œν•˜κ³  κ·Έ λ‹€μŒ 짧은 μž‘μ—…μ„ μ΄μ–΄κ°€λŠ”λ°, SRFλŠ” 쀑간에 더 짧은 μž‘μ—…μ΄ λ“€μ–΄μ˜€λ©΄ μˆ˜ν–‰ν•˜λ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ€‘μ§€ν•˜κ³  ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€λ₯Ό μˆ˜ν–‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 

좜처 : https://wonit.tistory.com/104

  • p1은 아무 ν”„λ‘œμ„ΈμŠ€κ°€ μ—†κΈ° λ•Œλ¬Έμ— λ°”λ‘œ μ‹€ν–‰λœλ‹€.
  • μ‹œκ°„μ΄ 흐λ₯΄κ³  μ‹€ν–‰ μ‹œκ°„μ΄ 1μΌλ•Œ p2κ°€ λ“€μ–΄μ˜€λŠ”λ°, p2의 μ‹€ν–‰ μ‹œκ°„(28)보닀 p1의 μ‹€ν–‰ μ‹œκ°„(10-1=9)κ°€ 더 μ§§κΈ° λ•Œλ¬Έμ— 계속 μ§„ν–‰ν•œλ‹€.
  • 또 μ‹œκ°„μ΄ 흐λ₯΄κ³  μ‹€ν–‰ μ‹œκ°„ 2일 λ•Œ p3κ°€ λ“€μ–΄μ˜€λŠ”λ° p1의 μ‹€ν–‰ μ‹œκ°„(10-2=8)보닀 p3의 μ‹€ν–‰ μ‹œκ°„(6)이 더 μ§§κΈ° λ•Œλ¬Έμ— p1의 싀행을 μž μ‹œ μ€‘λ‹¨ν•˜κ³  p3λ₯Ό μ‹€ν–‰μ‹œν‚¨λ‹€.
  • μ‹œκ°„μ΄ 흐λ₯΄κ³  μ‹€ν–‰ μ‹œκ°„ 3μΌλ•Œ p4κ°€ λ“€μ–΄μ˜€λŠ”λ° p3의 μ‹€ν–‰ μ‹œκ°„(6-1=5)보닀 p4의 μ‹€ν–‰ μ‹œκ°„(4)κ°€ 더 μ§§κΈ° λ•Œλ¬Έμ— p3λ₯Ό μž μ‹œ μ€‘λ‹¨μ‹œν‚€κ³  p4λ₯Ό μ‹€ν–‰ μ‹œν‚¨λ‹€.
  • μ‹œκ°„μ΄ 흐λ₯΄κ³  μ‹€ν–‰ μ‹œκ°„μ΄ 4일 λ•Œ p5κ°€ λ“€μ–΄μ˜€λŠ”λ°, p4의 μ‹€ν–‰ μ‹œκ°„(4-1=3) 보닀 p5의 μ‹€ν–‰ μ‹œκ°„(14)이 κΈΈκΈ° λ•Œλ¬Έμ— p4λ₯Ό κ·ΈλŒ€λ‘œ μœ μ§€μ‹œν‚¨λ‹€.
  • μ‹œκ°„μ΄ 흐λ₯΄κ³  μ‹€ν–‰ μ‹œκ°„μ΄ 7일 λ•Œ p4의 싀행을 끝내고 κ·Έ λ‹€μŒμœΌλ‘œ 짧은 p3λ₯Ό μ‹€ν–‰μ‹œν‚¨λ‹€.
  • 이와 같은 과정을 λ°˜λ³΅ν•œλ‹€.

닀단계 큐

닀단계 νλŠ” μš°μ„  μˆœμœ„μ— λ”°λ₯Έ μ€€λΉ„ 큐λ₯Ό μ—¬λŸ¬ 개 μ‚¬μš©ν•˜κ³ , νλ§ˆλ‹€ λΌμš΄λ“œ λ‘œλΉˆμ΄λ‚˜ FCFS λ“± λ‹€λ₯Έ μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬μ¦˜μ„ μ μš©ν•œ 것을 λ§ν•œλ‹€.

큐 κ°„μ˜ ν”„λ‘œμ„ΈμŠ€ 이동이 μ•ˆλ˜λ―€λ‘œ μŠ€μΌ€μ€„λ§ 뢀담이 μ μ§€λ§Œ μœ μ—°μ„±μ΄ λ–¨μ–΄μ§€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

닀단계 큐