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

13. λ©€ν‹°μŠ€λ ˆλ“œ κ΅¬ν˜„

by 🐳 Laboon 2024. 4. 22.
λ©€ν‹° μŠ€λ ˆλ“œ κ΅¬ν˜„ ?

 

개발자둜 κ±°λ“­λ‚˜λ €λ©΄ κΌ­ ν•„μš”ν•œ κ°œλ…μ΄λ‹€. μš°λ¦¬λ„ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄μ„œ λ‹€μ–‘ν•œ μ‚¬μš©μžμ— λŒ€ν•΄ μž‘μ—…μ„ ν•΄μ•Όν•  것이닀.

κ·Έ λ•Œ, μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ μš°λ¦¬κ°€ λ§Œλ“  μŠ€λ ˆλ“œκ°€ μ‹œμŠ€ν…œμ—μ„œ μŠ€μΌ€μ€„ 될 수 μžˆλ„λ‘ ν•˜λŠ” 방법이닀.

 

크게 N:1 λ§€ν•‘, 1:1 λ§€ν•‘, N:M 맀핑이 μžˆλ‹€. X : Y 꼴둜, X개의 μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œλ₯Ό Y개의 컀널 레벨 μŠ€λ ˆλ“œλ‘œ λ§€ν•‘ν•œλ‹€λŠ” λ‚΄μš©μΈλ° 이 외에도 1:N 맀핑도 μžˆλ‹€. ν•˜μ§€λ§Œ μ€‘μš”ν•œ N:1, 1:1 만 μž‘μ„±ν•˜λ„λ‘ ν•˜κ² λ‹€

 

.N(User):1(Kernel) λ§€ν•‘

 

말 κ·ΈλŒ€λ‘œ N개의 μ‚¬μš©μž μŠ€λ ˆλ“œκ°€ 1개의 컀널 μŠ€λ ˆλ“œλ‘œ λ§€ν•‘ν•˜λŠ” κ°œλ…μ΄λ‹€.

운영체제(컀널 μž…μž₯)λŠ” λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λ₯Ό Main μŠ€λ ˆλ“œλΌλŠ” 단일 ν”„λ‘œμ„ΈμŠ€λ‘œ μ²˜λ¦¬ν•œλ‹€.

이 말은 컀널 μ˜μ—­μ— μ €μž₯λ˜λŠ” 컀널 레벨 μŠ€λ ˆλ“œμ˜ TCBκ°€ 1κ°œλΌλŠ” μ˜λ―Έμ΄λ‹€.

 

즉, μŠ€λ ˆλ“œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ€ μ‚¬μš©μž λ ˆλ²¨μ—μ„œλ§Œ λ°œμƒν•˜κ²Œ λœλ‹€λŠ” μ˜λ―Έμ΄λ‹€.

μž₯μ μœΌλ‘œλŠ” μ‚¬μš©μž λ ˆλ²¨μ—μ„œλ§Œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ 속도가 맀우 λΉ λ₯΄λ‹€.

λ‹¨μ μœΌλ‘œλŠ” ν˜„λŒ€ PCλŠ” λ©€ν‹° μ½”μ–΄ CPUκ°€ λ³΄νŽΈν™”λ˜μ–΄ 있기 λ•Œλ¬Έμ— λΉ„νš¨μœ¨μ μ΄λΌλŠ” 점이닀.

κ·Έ 외에도 ν•˜λ‚˜μ˜ μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œκ°€ λΈ”λ‘λ˜λ©΄ ν”„λ‘œμ„ΈμŠ€ 전체가 λΈ”λ‘λ˜λŠ” 단점이 λ°œμƒν•œλ‹€.

 

μŠ€λ ˆλ“œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ 생λͺ…주기에 λ”°λ₯΄λ©΄ Block 된 λ‚΄μš©μ΄ 있으면 Ready Queue에 λŒ€κΈ° 쀑인 λ‹€λ₯Έ Threadλ₯Ό μ²˜λ¦¬ν•˜λŠ” 것이 λ§žλ‹€. ν•˜μ§€λ§Œ 그건 ν”„λ‘œμ„ΈμŠ€ 기반 운영체제일 κ²½μš°λ‹€. ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜μ—μ„œ TCBλ₯Ό κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— κ·Έλ ‡λ‹€.

ν•˜μ§€λ§Œ λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ N:1 맀핑이 λ˜μ–΄μžˆμ„ 경우, 컀널 κ³΅κ°„μ—μ„œλŠ” μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œμ˜ μ–΄λ–€ μŠ€λ ˆλ“œκ°€ Block λ˜μ—ˆλŠ”μ§€ μ•Œ 수 μ—†λ‹€. μ™œλƒν•˜λ©΄ μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œμ˜ TCBκ°€ μ‚¬μš©μž 곡간에 있기 λ•Œλ¬Έμ΄λ‹€.  κ·Έλž˜μ„œ 컀널 레벨 μŠ€λ ˆλ“œλ„ Block이 되고 λ‹€λ₯Έ μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œλŠ” μ‹€ν–‰ν•  수 μ—†λŠ” μƒνƒœκ°€ λ˜μ–΄ 버린닀.

N:1 λ§€ν•‘μ˜ 문제점

1(User) : 1(Kernel) λ§€ν•‘

 

말 κ·ΈλŒ€λ‘œ μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œμ™€ 컀널 레벨 μŠ€λ ˆλ“œκ°€ 1κ°œμ”© μ—°κ²°λ˜μ–΄ μžˆλŠ” ꡬ쑰이닀.

 

μž₯점으둜 κ°œλ…μ΄ λ‹¨μˆœν•΄μ„œ κ΅¬ν˜„μ΄ 쉽고, 높은 병렬성을 μ œκ³΅ν•˜κ³  μžˆλ‹€λŠ” 것이닀.

그리고 N:1 λ§€ν•‘μ˜ λ‹¨μ μ΄μ—ˆλ˜ μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œκ°€ Block λ˜μ–΄λ„ μ‘μš© ν”„λ‘œκ·Έλž¨ 전체가 Blockλ˜μ§€ μ•ŠλŠ”λ‹€.

 

λ‹¨μ μœΌλ‘œ μ»€λ„μ˜ μ§„μž…νšŸμˆ˜κ°€ μ¦κ°€ν•΄μ„œ μ»€λ„μ˜ 뢀담이 μƒκΈ΄λ‹€λŠ” 것이닀. μ‚¬μš©μž 레벨 μŠ€λ ˆλ“œκ°€ λ§Žμ•„μ§ˆμˆ˜λ‘ μ»€λ„μ˜ 뢀담이 컀진닀. ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„ ν˜„λŒ€ OSμ—μ„œλŠ” 1:1 맀핑을 μ±„νƒν•˜κ³  μžˆλ‹€.

 

μΆ”κ°€λ‘œ Java의 JVM λ˜ν•œ 1:1 λ§€ν•‘μœΌλ‘œ κ΅¬μ„±λ˜μ–΄μžˆλ‹€.

1:1 Mapping


κ·Έ μ™Έ, N:M λ§€ν•‘, 1:N 맀핑도 μžˆμ§€λ§Œ 잘 μ‚¬μš©ν•˜μ§€λ„ μ•Šμ•„μ„œ λ„˜μ–΄κ°€λ„λ‘ ν•œλ‹€.

 

λ©€ν‹° μŠ€λ ˆλ”©μ˜ μž₯점
  • 병렬 μ‹€ν–‰μœΌλ‘œ 높은 μ‹€ν–‰ μ„±λŠ₯을 보인닀.
  • μš°μˆ˜ν•œ 응닡성을 보인닀.
    • λ™μ‹œ 처리, ν•œ μŠ€λ ˆλ“œκ°€ λΈ”λ‘λ˜μ–΄λ„ λŒ€μ•ˆ κ°€λŠ₯
  • μ‹œμŠ€ν…œ μžμ› μ‚¬μš©μ΄ ν”„λ‘œμ„ΈμŠ€μ— λΉ„ν•΄ νš¨μœ¨μ μ΄λ‹€.
  • ν”„λ‘œμ„ΈμŠ€μ— λΉ„ν•΄ μž‘μ„±μ΄ 쉽고 톡신이 νš¨μœ¨μ μ΄λ‹€.
    • μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬ ν•¨μˆ˜λ‘œ λΆ„ν• ν•˜μ—¬ ꡬ쑰가 λ‹¨μˆœν•΄μ§.
    • ν™•μž₯성이 μš°μˆ˜ν•¨.
λ©€ν‹° μŠ€λ ˆλ”©μ˜ μ£Όμ˜ν•  점
  • ν•œ μŠ€λ ˆλ“œκ°€ fork() ν˜ΈμΆœμ„ ν•  경우, ν”„λ‘œμ„ΈμŠ€μ˜ λ‹€λ₯Έ μŠ€λ ˆλ“œλ“€μ€ μ’…λ£Œλ˜κ³  fork()λ₯Ό ν˜ΈμΆœν•œ μŠ€λ ˆλ“œλ§Œ main() μŠ€λ ˆλ“œλ₯Ό λ§Œλ“€κ²Œ λ˜λŠ” μ΄μŠˆκ°€ μžˆλ‹€.
  • ν•œ μŠ€λ ˆλ“œκ°€ exec()λ₯Ό ν˜ΈμΆœν•  경우 λͺ¨λ“  μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜κ³  ν”„λ‘œμ„ΈμŠ€κ°€ μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹€ν–‰λœλ‹€.
  • 동기화 문제, 이후에 닀룬닀.