λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“– Algorithm/μ½”λ”©ν…ŒμŠ€νŠΈ

2022.05.31 γ€ŒLv.3 λ””μŠ€ν¬ μ»¨νŠΈλ‘€λŸ¬γ€

by GroovyArea 2022. 5. 31.
μ˜€λžœλ§Œμ— μ½”ν…Œ 문제λ₯Ό ν’€μ–΄λ³΄μ•˜λ‹€. 
νž™ 자료ꡬ쑰λ₯Ό μ΄μš©ν•œ 문제인데, 주둜 μš°μ„ μˆœμœ„ 큐λ₯Ό μ΄μš©ν•΄ 문제λ₯Ό ν’€λ©΄ λœλ‹€λŠ” 것을 λ°°μ› λ‹€.
ν”„λ‘œμ νŠΈ λ•Œλ¬Έμ— μ‹œκ°„μ΄ 거의 μ•ˆ λ‚˜λŠ”λ° 짬짬히 ν‘Έλ €κ³  λ…Έλ ₯을 μ’€ ν•΄μ•Όκ² λ‹€. 
풀이 과정을 μ„€λͺ…ν•˜κ² λ‹€.

문제 μ„€λͺ…

ν•˜λ“œλ””μŠ€ν¬λŠ” ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ””μŠ€ν¬ 컨트둀러λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법은 μ—¬λŸ¬ κ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ 일반적인 방법은 μš”μ²­μ΄ λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ œν•œ 사항

  • jobs의 κΈΈμ΄λŠ” 1 이상 500 μ΄ν•˜μž…λ‹ˆλ‹€.
  • jobs의 각 행은 ν•˜λ‚˜μ˜ μž‘μ—…μ— λŒ€ν•œ [μž‘μ—…μ΄ μš”μ²­λ˜λŠ” μ‹œμ , μž‘μ—…μ˜ μ†Œμš”μ‹œκ°„] μž…λ‹ˆλ‹€.
  • 각 μž‘μ—…μ— λŒ€ν•΄ μž‘μ—…μ΄ μš”μ²­λ˜λŠ” μ‹œκ°„μ€ 0 이상 1,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • 각 μž‘μ—…μ— λŒ€ν•΄ μž‘μ—…μ˜ μ†Œμš”μ‹œκ°„μ€ 1 이상 1,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • ν•˜λ“œλ””μŠ€ν¬κ°€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μžˆμ§€ μ•Šμ„ λ•Œμ—λŠ” λ¨Όμ € μš”μ²­μ΄ λ“€μ–΄μ˜¨ μž‘μ—…λΆ€ν„° μ²˜λ¦¬ν•©λ‹ˆλ‹€.

문제 해석

이 λ¬Έμ œλŠ” μ°Ύμ•„λ³΄λ‹ˆ SJF μŠ€μΌ€μ€„λ§μ„ κ΅¬ν˜„ν•˜λŠ” λ¬Έμ œμ΄λ‹€

=> μž‘μ—…μ˜ μš”μ²­λΆ€ν„° μ’…λ£ŒκΉŒμ§€ κ±Έλ¦° μ‹œκ°„μ˜ 평균을 μ€„μ΄λŠ” 기법

 

SJF(Shortest Job First)

- λ‹€μŒ μž‘μ—…μ‹œκ°„μ΄ κ°€μž₯ 짧은 순으둜 μŠ€μΌ€μ€„λ§ (= λ‹€μŒ CPU λ²„μŠ€νŠΈ μ‹œκ°„μ΄ κ°€μž₯ 짧은 ν”„λ‘œμ„ΈμŠ€ 순으둜 μŠ€μΌ€μ€„λ§)

- 평균 λŒ€κΈ° μ‹œκ°„ μΈ‘λ©΄μ—μ„œλŠ” μ΅œμ μ— κ°€μž₯ κ°€κΉŒμ›€

 → ν•˜μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€μ˜ λ‹€μŒ CPU λ²„μŠ€νŠΈ μ‹œκ°„μ„ μ˜ˆμΈ‘ν•˜λŠ” 것이 어렀움 (μ΄λŸ¬ν•œ 이유둜 컴퓨터 OSμ—μ„œ SJF μŠ€μΌ€μ€„λ§μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€)

- 선점 SJF = SRTF(Shortest Remaining Time First) : μƒˆ ν”„λ‘œμ„ΈμŠ€κ°€ μ€€λΉ„ 큐에 λ„μ°©ν–ˆμ„ λ•Œ, 이 ν”„λ‘œμ„ΈμŠ€μ™€ ν˜„μž¬ μˆ˜ν–‰μ€‘μΈ ν”„λ‘œμ„ΈμŠ€μ˜ 남은 μ‹œκ°„μ„ λΉ„κ΅ν•΄μ„œ 더 적으면 κΈ°μ‘΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°•μ œλ‘œ μ’…λ£Œν•˜κ³  μƒˆ ν”„λ‘œμ„ΈμŠ€ ν• λ‹Ή

 

문제 풀이

SJF μŠ€μΌ€μ₯΄λ§ μ΄λΌλŠ” 기법을 κ΅¬ν˜„ν•΄ λ¬Έμ œμ— μ μš©μ‹œν‚€λ €λ©΄ μš°μ„ μ μœΌλ‘œ μš°μ„ μˆœμœ„ 큐λ₯Ό μ„ μ–Έν•΄μ•Όκ² λ‹€λŠ” 생각을 ν–ˆλ‹€.

 

λ¨Όμ €, μ‹€ν–‰μ‹œκ°„μ΄ 짧은 μˆœμ„œλŒ€λ‘œ μš°μ„ μˆœμœ„ 큐λ₯Ό μ‚¬μš©ν•˜μ—¬ 정렬을 ν•˜κ³ , jobs 배열을 μ‹œμž‘ μ‹œκ°„ μˆœμ„œλŒ€λ‘œ 정렬을 ν•œλ‹€. 

 

while 문을 ν†΅ν•΄μ„œ μš°μ„  μˆœμœ„ 큐에 λ‹¨μœ„ μž‘μ—… 배열을 λ„£μ–΄μ£Όκ³  순차적으둜 μ²˜λ¦¬ν•œλ‹€.

λ§Œμ•½ 큐가 λΉ„μ—ˆλ‹€λ©΄ λ‹€μŒ μž‘μ—… λ°°μ—΄λ‘œ λ„˜μ–΄κ°„λ‹€.

 

큐가 λΉ„μ–΄μžˆμ§€ μ•Šμ„ 경우 poll()을 톡해 제일 μ•žμ˜ μž‘μ—… 배열을 κΊΌλ‚΄μ–΄ μš”μ²­ 및 μ’…λ£Œ μ‹œκ°„μ„ κ³„μ‚°ν•œλ‹€. 

μš”μ²­ μ‹œκ°„μ€ μž‘μ—… μ‹œμž‘ μ‹œκ°„κ³Ό κ°™κ³ , μ’…λ£Œ μ‹œκ°„μ€ ν˜„μž¬ μ‹œκ°„μ—μ„œ μž‘μ—…μ΄ λλ‚˜λŠ” μ‹œκ°„μ„ λ”ν•˜κ³  μš”μ²­ μ‹œκ°„μ„ λΉΌμ„œ κ³„μ‚°ν•œλ‹€.

 

μ½”λ“œ

λ°˜μ‘ν˜•