TanzDev

TIL 43 (CS ν”„λ‘œμ„ΈμŠ€ 생성주기) λ³Έλ¬Έ

κΈ°λ‘λ³΄λ“œ/TIL

TIL 43 (CS ν”„λ‘œμ„ΈμŠ€ 생성주기)

Tanz-dev 2024. 3. 20. 20:53

πŸ“Œ ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ³€ν™” = ν”„λ‘œμ„ΈμŠ€ 생λͺ…μ£ΌκΈ°

ν”„λ‘œμ„ΈμŠ€ 생λͺ…주기와 ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ³€ν™”λŠ” 같은 의미 μž…λ‹ˆλ‹€.

  • πŸŸ μ€ ν”„λ‘œμ„ΈμŠ€λ“€μ˜ μƒνƒœλ₯Ό μ˜λ―Έν•˜κ³ 
  • πŸ”œ μ€ μŠ€μΌ€μ₯΄λ§μ— 따라 μƒνƒœκ°€ λ³€ν™”λ˜λŠ” λ™μž‘μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • μƒνƒœλ³€ν™” = 생λͺ…μ£ΌκΈ° 

https://gusdnd852.tistory.com/82

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

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

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

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

  • λ””μŠ€νŒ¨μΉ˜(dispatch)

μ€€λΉ„ 리슀트의 맨 μ•žμ— 있던 ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό μ μœ ν•˜κ²Œ λ˜λŠ” 것, 즉 μ€€λΉ„ μƒνƒœμ—μ„œ μ‹€ν–‰ μƒνƒœλ‘œ λ°”λ€ŒλŠ” 것을 λ””μŠ€νŒ¨μΉ˜λΌκ³  ν•˜λ©° λ‹€μŒκ³Ό 같이 ν‘œμ‹œν•œλ‹€.

dispatch (processname) : ready → running
  • 보λ₯˜(block)

μ‹€ν–‰ μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ ν—ˆκ°€λœ μ‹œκ°„μ„ λ‹€ μ“°κΈ° 전에 μž…μΆœλ ₯ λ™μž‘μ„ ν•„μš”λ‘œ ν•˜λŠ” 경우 ν”„λ‘œμ„ΈμŠ€λŠ” CPUλ₯Ό 슀슀둜 λ°˜λ‚©ν•˜κ³  보λ₯˜ μƒνƒœλ‘œ λ„˜μ–΄ κ°„λ‹€. 이것을 보λ₯˜λΌκ³  ν•˜λ©° λ‹€μŒκ³Ό 같이 ν‘œμ‹œν•œλ‹€.

block (processname) : running → blocked
  • 깨움(wakeup)

μž…μΆœλ ₯ μž‘μ—… μ’…λ£Œ λ“± κΈ°λ‹€λ¦¬λ˜ 사건이 일어났을 λ•Œ 보λ₯˜ μƒνƒœμ—μ„œ μ€€λΉ„ μƒνƒœλ‘œ λ„˜μ–΄κ°€λŠ” 과정을 깨움이라고 ν•˜λ©° λ‹€μŒκ³Ό 같이 ν‘œμ‹œν•œλ‹€.

wakeup (processname) : blocked → ready
  • μ‹œκ°„μ œν•œ(timeout)

μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ ν”„λ‘œμ„Έμ„œλ₯Ό 계속 λ…μ ν•΄μ„œ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ clock interruptλ₯Ό λ‘μ–΄μ„œ ν”„λ‘œμ„ΈμŠ€κ°€ 일정 μ‹œκ°„λ™μ•ˆλ§Œ (μ‹œλΆ„ν•  μ‹œμŠ€ν…œμ˜ time slice) ν”„λ‘œμ„Έμ„œλ₯Ό μ μœ ν•  수 있게 ν•œλ‹€

timeout(processname) : running -> ready