λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ–₯ CS/운영체제

[운영체제] μŠ€λ ˆλ“œ (Thread)

λ³Έ κ²Œμ‹œκΈ€μ€ KOCW μ΄ν™”μ—¬μžλŒ€ν•™κ΅ 반효경 κ΅μˆ˜λ‹˜μ˜ <운영체제> κ°•μ˜λ₯Ό λ“£κ³  μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.
κ²Œμ‹œκΈ€μ— ν¬ν•¨λ˜λŠ” 이미지 μžλ£ŒλŠ” <운영체제> κ°•μ˜μ— ν¬ν•¨λœ κ°•μ˜ μžλ£Œμž…λ‹ˆλ‹€.

μŠ€λ ˆλ“œ(Thread)

μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬μ„±ν•˜λŠ” μ‹€ν–‰ λ‹¨μœ„μž…λ‹ˆλ‹€. (lightweight process라고도 λΆˆλ¦½λ‹ˆλ‹€)

ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œλ₯Ό κ°€μ§ˆ 수 있으며(μ΅œμ†Œ ν•˜λ‚˜λŠ” 가짐), μŠ€λ ˆλ“œλ₯Ό μ΄μš©ν•˜λ©΄ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ—¬λŸ¬ 뢀뢄을 λ™μ‹œμ— μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μŠ€λ ˆλ“œμ˜ ꡬ성

μŠ€λ ˆλ“œμ˜ ꡬ성

 

  • Thread의 ꡬ성: CPU μˆ˜ν–‰κ³Ό κ΄€λ ¨λœ 정보(곡유 ν•˜μ§€ μ•ŠλŠ” λΆ€λΆ„)
    • Program Counter
    • Register set
    • Stack space
  • Threadκ°„ κ³΅μœ ν•˜λŠ” μ˜μ—­ (= task)
    • λ©”λͺ¨λ¦¬ λ‚΄ Code, Data μ˜μ—­ (= λ©”λͺ¨λ¦¬ μ£Όμ†Œ 곡간)
    • OS resources

각 CPU μˆ˜ν–‰ λ‹¨μœ„λ§ˆλ‹€ ν˜„μž¬ register에 μ–΄λ–€ 값을 λ„£κ³  program counterκ°€ μ½”λ“œμ˜ μ–΄λ–€ 뢀뢄을 μ‹€ν–‰ν•˜κ³  μžˆμ—ˆλŠ”κ°€λ₯Ό λ³„λ„λ‘œ μœ μ§€ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μŠ€λ ˆλ“œ ν•˜λ‚˜κ°€ code μ˜μ—­μ˜ μ–΄λŠ 뢀뢄을 μ‹€ν–‰ν•˜λ‹€κ°€ ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•˜κ²Œ 되면 호좜 및 리턴과 κ΄€λ ¨λœ 정보λ₯Ό μŠ€νƒμ— μŒ“κ²Œ λ˜λŠ”λ°, CPU μˆ˜ν–‰ λ‹¨μœ„λ§ˆλ‹€ μ΄λŸ¬ν•œ 정보λ₯Ό λ‹΄λŠ” μŠ€νƒμ„ λ³„λ„λ‘œ λ‘‘λ‹ˆλ‹€.

μŠ€λ ˆλ“œμ˜ μž₯점

1. λΉ λ₯Έ 응닡성

닀쀑 μŠ€λ ˆλ“œλ‘œ κ΅¬μ„±λœ task κ΅¬μ‘°μ—μ„œλŠ” ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ blocked(waiting) μƒνƒœμΈ λ™μ•ˆμ—λ„ λ™μΌν•œ task λ‚΄μ˜ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μ‹€ν–‰(running)이 λ˜μ–΄ λΉ λ₯Έ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ ν•˜λŠ”λ™μ•ˆ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ λ³„λ„μ˜ μž‘μ—…μ„ ν•¨μœΌλ‘œμ¨ μ‚¬μš©μžμ—κ²Œ λΉ λ₯Έ 응닡성을 μ œκ³΅ν•  수 있게 λ©λ‹ˆλ‹€.

 

2. 닀쀑 μŠ€λ ˆλ“œλ₯Ό ν†΅ν•œ μ„±λŠ₯ ν–₯상

λ™μΌν•œ 일을 μˆ˜ν–‰ν•˜λŠ” 닀쀑 μŠ€λ ˆλ“œκ°€ ν˜‘λ ₯ν•˜μ—¬ 높은 처리율과 μ„±λŠ₯ ν–₯상을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜ λ§Œλ“€μ–΄μ§€λ©΄ λ…μžμ μΈ μ£Όμ†Œ 곡간이 λ§Œλ“€μ–΄μ Έμ•Ό ν•˜λŠ”λ°, μ΄λŠ” λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€ν•˜λŠ” 것이기 λ•Œλ¬Έμ— 같은 일을 ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬ 개 λ„μ›Œλ†“κ²Œ λœλ‹€λ©΄ λ©”λͺ¨λ¦¬ λ‚­λΉ„κ°€ μ‹¬ν•΄μ§€κ²Œ λ©λ‹ˆλ‹€. 닀쀑 μŠ€λ ˆλ“œλ₯Ό μ΄μš©ν•œλ‹€λ©΄ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ„ 수 있기 λ•Œλ¬Έμ— μ„±λŠ₯을 ν–₯상 μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

3. 병렬성을 높일 수 μžˆλ‹€.

CPUκ°€ μ—¬λŸ¬ 개인 μ»΄ν“¨ν„°μ—μ„œ μŠ€λ ˆλ“œ μ‚¬μš© μ‹œ 병렬성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€λ ˆλ“œμ˜ κ΅¬ν˜„

  • Kernel Threads
    • OSμ—μ„œ μ§€μ›ν•˜λŠ” μŠ€λ ˆλ“œ
    • μŠ€λ ˆλ“œκ°€ μ—¬λŸ¬ 개 μžˆλ‹€λŠ” 것을 OS 컀널이 μ•Œκ³  있기 λ•Œλ¬Έμ— CPUκ°€ thread μ‚¬μ΄μ—μ„œ 이동할 λ•Œλ„ OSκ°€ κ°œμž…ν•¨
  • User Threads
    • μ‚¬μš©μž μˆ˜μ€€μ—μ„œ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜λŠ” 것
    • 라이브러리λ₯Ό 톡해 지원됨
    • OS 컀널이 μŠ€λ ˆλ“œκ°€ μ—¬λŸ¬ 개 μžˆλ‹€λŠ” 것을 λͺ¨λ¦„
    • μœ μ € ν”„λ‘œκ·Έλž¨μ΄ 슀슀둜 관리