λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CS/운영체제

12. 컀널 레벨 μŠ€λ ˆλ“œμ™€ μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œ

by 🐳 Laboon 2024. 4. 22.
μŠ€λ ˆλ“œμ˜ 레벨?

 

μŠ€λ ˆλ“œλŠ” μŠ€μΌ€μ€„λ§ 주체에 따라 두 μ’…λ₯˜μ˜ μŠ€λ ˆλ“œλ‘œ κ΅¬λΆ„λœλ‹€.

1. 컀널 레벨 μŠ€λ ˆλ“œ (Kernal-Level Thread) : 컀널에 μ˜ν•΄ μŠ€μΌ€μ€„λ§ λœλ‹€.

2. μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œ (User-Level Thread) : μŠ€λ ˆλ“œ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ˜ν•΄ μŠ€μΌ€μ€„λ§ λœλ‹€.

TCBλ₯Ό μ†Œμœ ν•˜κ³  μžˆλŠ” 주체에 따라 두 μ’…λ₯˜μ˜ μŠ€λ ˆλ“œλ‘œ κ΅¬λΆ„λ˜λŠ”λ° μžμ„Ένžˆ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² λ‹€.

 

컀널 레벨 μŠ€λ ˆλ“œ

 

컀널 레벨 μŠ€λ ˆλ“œλŠ” μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ ν†΅ν•΄μ„œλ§Œ μƒμ„±λœλ‹€. 즉, 컀널에 μ˜ν•΄μ„œλ§Œ μŠ€μΌ€μ€„λ§ λ˜λŠ” 것이닀.

ν•˜μ§€λ§Œ, 컀널 μ½”λ“œμ™€ 달리 컀널 레벨 μŠ€λ ˆλ“œμ˜ μ½”λ“œλ‚˜ 데이터가 컀널 곡간뿐 μ•„λ‹ˆλΌ μ‚¬μš©μž 곡간에도 μžˆμ„ 수 μžˆλ‹€.

이게 λ¬΄μŠ¨λ§μΈμ§€ 정말 ν—·κ°ˆλ Έλ‹€. thread_create() 뿐만 μ•„λ‹ˆλΌ ktread_create()λΌλŠ” μŠ€λ ˆλ“œ ν•¨μˆ˜λ„ μ‘΄μž¬ν•œλ‹€. ktread_create() ν•¨μˆ˜λ‘œ 컀널 μŠ€λ ˆλ“œλ₯Ό 생성할 수 μžˆλŠ”λ° μƒμ„±λœ 컀널 μŠ€λ ˆλ“œλŠ” 컀널 κ³΅κ°„μ—μ„œ TCBλ₯Ό κ΄€λ¦¬ν•˜κ²Œ λœλ‹€. ν•˜μ§€λ§Œ 이 μ½”λ“œλ₯Ό μž‘μ„±ν•œ 것은 μ‚¬μš©μž 곡간에 있기 λ•Œλ¬Έμ— μœ„μ™€ 같은 말이 λ‚˜μ™”λ‹€.

 

μ‘μš©ν”„λ‘œκ·Έλž¨μ„ μ μž¬ν•΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό 생성할 λ•Œ, μžλ™μœΌλ‘œ 컀널이 main μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•œλ‹€. κ·Έλž˜μ„œ main Thread도 μ»€λ„μ—μ„œ TCBλ₯Ό κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— 컀널 μŠ€λ ˆλ“œλ‹€.

 

κ·Έ 외에도 순수 컀널 레벨 μŠ€λ ˆλ“œ(pure kernel level thread)κ°€ μ‘΄μž¬ν•œλ‹€. λΆ€νŒ…ν•  λ•Œ, 컀널 κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜λ„λ‘ μž‘μ„±λœ μŠ€λ ˆλ“œμΈλ°, λŒ€λΆ€λΆ„ OSλŠ” λ‹€μˆ˜μ˜ 순수 컀널 레벨 μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•΄μ„œ μ‹€ν–‰ν•˜κ³  μžˆλ‹€κ³  ν•œλ‹€.

 

μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œ

 

μŠ€λ ˆλ“œ 라이브러리 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ„œ μƒμ„±λ˜λŠ” μŠ€λ ˆλ“œμ΄λ‹€.

μŠ€λ ˆλ“œ 정보λ₯Ό μ‚¬μš©μž 곡간에 μƒμ„±ν•˜κ³  μ†Œμœ ν•˜λŠ”λ° pthread_create()둜 μƒμ„±λœ μŠ€λ ˆλ“œλ₯Ό μ˜λ―Έν•œλ‹€.

컀널 μŠ€λ ˆλ“œλŠ” 컀널에 μ˜ν•΄ μŠ€μΌ€μ€„λ§ λ˜μ—ˆλ‹€λ©΄ μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œλŠ” μŠ€λ ˆλ“œ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ˜ν•΄ μŠ€μΌ€μ€„λœλ‹€.

 

즉, 컀널 μŠ€λ ˆλ“œλŠ” λ‹€μ–‘ν•œ 컀널 레벨 μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ‹€ν–‰λ˜κ³  μžˆμœΌλ―€λ‘œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ 자주 λ°œμƒν•˜κ²Œ 될 것이고 속도가 λŠλ¦¬λ‹€λŠ” 단점이 있고 μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œλŠ” ν˜„μž¬ 싀행쀑인 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•΄μ„œλ§Œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ°œμƒν•˜κ²Œ λ˜λ―€λ‘œ 속도가 컀널 μŠ€λ ˆλ“œλ³΄λ‹€ 100λ°° λΉ λ₯΄λ‹€κ³  ν•œλ‹€.

 

ν”„λ‘œμ„ΈμŠ€ 기반 μŠ€λ ˆλ“œ
λ©€ν‹°μ½”μ–΄ κΈ° μŠ€λ ˆλ“œ

 

정리

 

ν•˜λ‚˜μ˜ 코어에 μ§‘μ€‘λœ 일을 ν•˜κ³  μ‹Άλ‹€λ©΄ concurrencyλ₯Ό λ λŠ” μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜μž. 속도가 맀우 λΉ λ₯΄λ‹€. λ‹¨μ μœΌλ‘œ ν•˜λ‚˜μ˜ μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œκ°€ Block되면 ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ˜ λͺ¨λ“  μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œκ°€ Blockκ³Ό 같은 μƒνƒœκ°€ λœλ‹€.

λ©€ν‹° 코어에 일을 λΆ„μ‚°ν•΄μ„œ parallelism을 λ λŠ” μž‘μ—…μ„ ν•˜κ³  μ‹Άλ‹€λ©΄ 컀널 레벨 μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜μž. μ†λ„λŠ” λŠλ¦¬μ§€λ§Œ λ‹€μˆ˜μ˜ 일을 ν•œ λ²ˆμ— μ²˜λ¦¬ν•˜λ©΄μ„œ 상황에 따라 더 높은 속도 효율이 λ‚˜μ˜¨λ‹€.

 

μœ„ μ •λ¦¬λŠ” κ°œλ°œμ„ ν•  λ•Œ, μƒκ°ν•œ 뢀뢄이닀.

이 ν¬μŠ€νŠΈλŠ” OS에 λŒ€ν•œ λ‚΄μš©μ΄κΈ° λ•Œλ¬Έμ— μ˜€λŠ˜λ‚ μ˜ OSμ—μ„œλŠ” H/W μž…,좜λ ₯ 뿐만 μ•„λ‹ˆλΌ λ‹€μ–‘ν•œ 처리 등을 μœ„ν•΄ 컀널 레벨 μŠ€λ ˆλ“œλ₯Ό 많이 μ‚¬μš©ν•˜κ³  μžˆλ‹€. λ¬Όλ‘  μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œλ„ λ³‘ν•©ν•΄μ„œ μ‚¬μš©ν•˜κ³  μžˆλ‹€.