ν‹°μŠ€ν† λ¦¬ λ·°

CS

ν”„λ‘œμ„ΈμŠ€

mokhs 2021. 6. 26. 19:02

κ°œμš”

μš°μ•„ν•œν…Œν¬λŸ¬λ‹ 도쀑 dispatchλΌλŠ” 단어λ₯Ό μ•Œκ²Œ λ˜μ—ˆκ³ , 이 λ‹¨μ–΄μ˜ 어원을 μ°Ύμ•„κ°€λ˜ 쀑 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•΄μ„œ 이야기가 λ‚˜μ˜€κ³  머리 속에 잘 μ •λ¦¬λ˜μ§€ μ•Šμ€ 뢀뢄인 것 κ°™μ•„ κ³΅λΆ€ν•˜κ³  μ •λ¦¬ν•œ 글이닀.


ν”„λ‘œμ„ΈμŠ€

ν”„λ‘œμ„ΈμŠ€(process)λŠ” μ»΄ν“¨ν„°μ—μ„œ μ—°μ†μ μœΌλ‘œ μ‹€ν–‰λ˜κ³  μžˆλŠ” 컴퓨터 ν”„λ‘œκ·Έλž¨μ„ λ§ν•œλ‹€.
μ’…μ’… μŠ€μΌ€μ₯΄λ§μ˜ λŒ€μƒμ΄ λ˜λŠ” μž‘μ—…(task)λΌλŠ” μš©μ–΄μ™€ 거의 같은 의미둜 쓰인닀.
μ—¬λŸ¬ 개의 ν”„λ‘œμ„Έμ„œλ₯Ό μ‚¬μš©ν•˜λŠ” 것을 λ©€ν‹°ν”„λ‘œμ„Έμ‹±μ΄λΌκ³  ν•˜λ©° 같은 μ‹œκ°„μ— μ—¬λŸ¬ 개의 ν”„λ‘œκ·Έλž¨μ„ λ„μš°λŠ” μ‹œλΆ„ν•  방식을 λ©€ν‹°νƒœμŠ€ν‚Ήμ΄λΌκ³  ν•œλ‹€. ν”„λ‘œμ„ΈμŠ€ κ΄€λ¦¬λŠ” 운영 체제의 μ€‘μš”ν•œ 뢀뢄이닀.


ν”„λ‘œκ·Έλž¨κ³Ό ν”„λ‘œμ„ΈμŠ€

ν”„λ‘œκ·Έλž¨

  • 일반적으둜 ν•˜λ“œλ””μŠ€ν¬ 등에 μ €μž₯λ˜μ–΄ μžˆλŠ” μ‹€ν–‰ μ½”λ“œ

ν”„λ‘œμ„ΈμŠ€

  • ν”„λ‘œκ·Έλž¨μ„ κ΅¬λ™ν•˜μ—¬ ν”„λ‘œκ·Έλž¨ μžμ²΄μ™€ ν”„λ‘œκ·Έλž¨μ˜ μƒνƒœκ°€ λ©”λͺ¨λ¦¬ μƒμ—μ„œ μ‹€ν–‰λ˜λŠ” μž‘μ—… λ‹¨μœ„λ₯Ό 지칭

-> λ”°λΌμ„œ ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬ 번 κ΅¬λ™ν•˜λ©΄ μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€κ°€ λ©”λͺ¨λ¦¬ μƒμ—μ„œ μ‹€ν–‰λœλ‹€. 라고 말할 수 있음.

ν”„λ‘œμ„Έμ„œ

  • 처리기, μΈ‘ 쀑앙 처리 μž₯치(CPU)

ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ

컀널 λ‚΄μ—λŠ” μ€€λΉ„ 큐, λŒ€κΈ° 큐, μ‹€ν–‰ 큐 λ“±μ˜ μžλ£Œκ΅¬μ‘°κ°€ 있으며 컀널은 이것듀을 μ΄μš©ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό 관리함.

  • 생성(crete): ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜λŠ” 쀑인 μƒνƒœ
  • μ‹€ν–‰(running): ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό μ°¨μ§€ν•˜μ—¬ λͺ…령어듀이 μ‹€ν–‰λ˜κ³  μžˆλŠ” μƒνƒœ
  • μ€€λΉ„(ready): ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ§€λŠ” μ•Šμ§€λ§Œ μ–Έμ œλ“ μ§€ μ‚¬μš©ν•  수 μžˆλŠ” μƒνƒœλ‘œ, CPUκ°€ ν• λ‹Ήλ˜κΈ°λ₯Ό 기닀리고 있음. 일반적으둜 μ€€λΉ„ μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€ 쀑 μš°μ„ μˆœμœ„κ°€ 높은 ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό ν• λ‹Ή λ°›μŒ(μŠ€μΌ€μ€„λ§)
  • λŒ€κΈ°(waiting): 보λ₯˜(block)라고 λΆ€λ₯΄κΈ°λ„ 함. ν”„λ‘œμ„ΈμŠ€κ°€ μž…μΆœλ ₯ μ™„λ£Œ, μ‹œκ·Έλ„ μˆ˜μ‹  λ“± μ–΄λ–€ 사건을 기닀리고 μžˆλŠ” μƒνƒœ
  • μ’…λ£Œ(terminated): ν”„λ‘œμ„ΈμŠ€μ˜ 싀행이 μ’…λ£Œλ¨μ„ μ˜λ―Έν•¨

ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœμ „μ΄

ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄ κ·Έ ν”„λ‘œκ·Έλž¨μ— λŒ€μ‘λ˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜μ–΄ μ€€λΉ„ 리슀트의 끝에 λ“€μ–΄κ°„λ‹€. μ€€λΉ„ 리슀트 μƒμ˜ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ CPUλ₯Ό ν• λ‹Ήλ°›μ•„ μ€€λΉ„ 리슀트λ₯Ό λ– λ‚˜λ©΄, κ·Έ ν”„λ‘œμ„ΈμŠ€λŠ” 점차 μ€€λΉ„ 리슀트의 μ•žμœΌλ‘œ λ‚˜κ°€κ²Œ 되고, μ–Έμ  κ°€ CPUλ₯Ό μ‚¬μš©ν•  수 있게 λœλ‹€.

ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœμ „μ΄λŠ” κ°„λ‹¨νžˆ λ§ν•΄μ„œ ν”„λ‘œμ„ΈμŠ€μ˜ ν˜„μž¬ μƒνƒœκ°€ λ‹€λ₯Έ μƒνƒœλ‘œ μ΄λ™ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

  • λ””μŠ€νŒ¨μΉ˜(dispatch)
  • μ€€λΉ„ 리슀트의 맨 μ•žμ— 있던 ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό μ μœ ν•˜κ²Œ λ˜λŠ” 것, 즉 μ€€λΉ„ μƒνƒœμ—μ„œ μ‹€ν–‰ μƒνƒœλ‘œ λ°”λ€ŒλŠ” 것을 λ””μŠ€νŒ¨μΉ˜λΌκ³  ν•˜λ©°, λ‹€μŒκ³Ό 같이 ν‘œμ‹œν•¨
dispatch (processname) : ready -> running
  • 보λ₯˜(block)
  • μ‹€ν–‰ μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ ν—ˆκ°€λœ μ‹œκ°„μ„ λ‹€ μ“°κΈ° 전에 μž…μΆœλ ₯ λ™μž‘μ„ ν•„μš”λ‘œ ν•˜λŠ” 경우 ν”„λ‘œμ„ΈμŠ€λŠ” CPUλ₯Ό 슀슀둜 λ°˜λ‚©ν•˜κ³  보λ₯˜ μƒνƒœλ‘œ λ„˜μ–΄κ°„λ‹€. 이것을 보λ₯˜λΌκ³  ν•˜λ©° λ‹€μŒκ³Ό 같이 ν‘œμ‹œν•¨. -> μž…μΆœλ ₯ λ™μž‘ μ‹œμ— CPUλ₯Ό μ‚¬μš©ν•΄μ•Όν•˜λŠ” 것을 μ§μž‘ν•  수 μžˆλ‹€.
block (processname) : running -> blocked
  • 깨움(wakeup)
  • μž…μΆœλ ₯ μž‘μ—… μ’…λ£Œ λ“± κΈ°λ‹€λ¦¬λ˜ 사건이 일어났을 λ•Œ 보λ₯˜ μƒνƒœ(block)μ—μ„œ μ€€λΉ„ μƒνƒœ(ready)둜 λ„˜μ–΄κ°„λŠ 과정을 깨움이라고 ν•˜λ©° λ‹€μŒκ³Ό 같이 ν‘œμ‹œν•¨
wakeup (processname) : blocked -> ready
  • μ‹œκ°„μ œν•œ(timeout)
  • μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ ν”„λ‘œμ„Έμ„œ(CPU)λ₯Ό 계속 λ…μ ν•΄μ„œ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ clock interruptλ₯Ό λ‘μ–΄μ„œ ν”„λ‘œμ„ΈμŠ€κ°€ 일정 μ‹œκ°„λ™μ•ˆλ§Œ (μ‹œλΆ„ν•  μ‹œμŠ€ν…œμ˜ item slice) ν”„λ‘œμ„Έμ„œλ₯Ό μ μœ ν•  수 있게 함 -> 싀행쀑이닀가 μ€€λΉ„ μƒνƒœλ‘œ μ „μ΄ν•˜λŠ” 것! ν”„λ‘œμ„ΈμŠ€μ™€ ν”„λ‘œμ„Έμ„œλ₯Ό 잘 κ΅¬λΆ„ν•˜μž
timeout (processname) : running -> ready

μ°Έκ³ 

μœ„ν‚€λ°±κ³Ό

λ°˜μ‘ν˜•