Develop/Server

[IT 인프라] Ch4 κΈ°λ³Έ 이둠 (큐, 배타적 μ œμ–΄, μƒνƒœ μ €μž₯/λΉ„μ €μž₯)

bona.com 2025. 5. 3. 19:34

πŸ“š <그림으둜 κ³΅λΆ€ν•˜λŠ” IT 인프라 ꡬ쑰> λ₯Ό μ½κ³  κ·Έ λ‚΄μš©μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€ 

 

큐

'큐(Queue)'λŠ” 우리말둜 'λŒ€κΈ° ν–‰λ ¬'이라 ν‘œν˜„ν•  수 μžˆλ‹€. 

  • 큐(λŒ€κΈ° ν–‰λ ¬)μ—μ„œλŠ” 쀄을 μ„€ λ•ŒλŠ” κ°€μž₯ λ§ˆμ§€λ§‰μ— μ„œκ³ , μ²˜λ¦¬λŠ” 선두뢀터 μˆœμ„œλŒ€λ‘œ λœλ‹€.
  • λ¨Όμ € λ“€μ–΄μ˜¨ 데이터가 λ¨Όμ € λ‚˜κ°€λŠ” 큐 λ™μž‘μ„ FIFO(First In First Out) 방식이라고 ν•œλ‹€.

 

νλŠ” 컴퓨터 μ„Έκ³„μ—μ„œ λ‹€μ–‘ν•œ 곳에 행렬이 λ§Œλ“€μ–΄μ§„λ‹€.

  • CPU 처리λ₯Ό 기닀리고 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ‚˜ μŠ€λ ˆλ“œ ν–‰λ ¬
  • ν•˜λ“œ λ””μŠ€ν¬ λ“±μ˜ μ €μž₯μ†Œ 읽기 처리λ₯Ό 기닀리고 μžˆλŠ” I/O μš”κ΅¬ ν–‰λ ¬
  • λ„€νŠΈμ›Œν¬ 접속 성립을 기닀리고 μžˆλŠ” 접속 μš”κ΅¬ ν–‰λ ¬

 

 μ΄λ•Œ CPUλ₯Ό 기닀리고 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€ 행렬을 런큐(Run-Queue)라고 ν•œλ‹€.

'λŸ°νμ— μŒ“μΈ ν”„λ‘œμ„ΈμŠ€ 수λ₯Ό μ½”μ–΄ 수둜 λ‚˜λˆ„μ–΄μ„œ 1이라면 문제 μ—†λ‹€' λΌλŠ” 것이 μΌλ°˜μ μ΄λ‹€. 

참고둜, CPUμ—μ„œ 처리 쀑인 ν”„λ‘œμ„ΈμŠ€λ₯Ό 런큐둜 μΈμ‹ν• μ§€λŠ” OS μ’…λ₯˜μ— 따라 달라진닀. λ¦¬λˆ…μŠ€μ—μ„œλŠ” CPUμ—μ„œ μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€λ„ 런큐둜 μΈμ‹ν•œλ‹€. OS μ»€λ„μ—λŠ” ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λŸ¬λΌλŠ” κΈ°λŠ₯이 μžˆμ–΄μ„œ 런큐 등을 κ΄€λ¦¬ν•œλ‹€.

 

ν”„λ‘œμ„ΈμŠ€λ‚˜ μŠ€λ ˆλ“œκ°€ μ‚¬μš©ν•˜λŠ” λŒ€μƒμ΄ CPUκ°€ μ•„λ‹ˆλΌ HDDλ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ””μŠ€ν¬ I/O μ˜ˆμ‹œκ°€ λœλ‹€.

HDDλŠ” 데이터가 기둝돼 μžˆλŠ” νŠΉμ • μœ„μΉ˜μ— μ•‘μ„ΈμŠ€ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— CPU처럼 λΉ„μ–΄ μžˆλ‹€λŠ” 이유둜 λ‹€λ₯Έ 것을 μ‚¬μš©ν•  수 μ—†λ‹€. λ˜ν•œ, 곡유 μ €μž₯μ†Œμ—μ„œλŠ” 일반적으둜 μΊμ‹œλΌ λΆˆλ¦¬λŠ” λ©”λͺ¨λ¦¬λ₯Ό λ‚΄μž₯ν•˜κ³  μžˆμ–΄μ„œ I/Oκ°€ λ°œμƒν•˜λ©΄ μΊμ‹œμ— λ³΄κ΄€ν•˜κΈ° λ•Œλ¬Έμ— κΈ°λ‘λ˜κΈ°κΉŒμ§€ 기닀리지 μ•Šμ•„λ„ λœλ‹€.

 

배타적 μ œμ–΄

배타적 μ œμ–΄λŠ” 말 κ·ΈλŒ€λ‘œ 'λ‹€λ₯Έ 것을 λ°°μ œν•˜λŠ” μ œμ–΄'λ‹€.

 

컴퓨터 μ„Έκ³„μ—μ„œ μ˜ˆμ‹œλ₯Ό 듀어보면, 직렬 μ²˜λ¦¬μ—μ„œλŠ” 배타적 μ œμ–΄κ°€ ν•„μš” μ—†μ§€λ§Œ, 병렬 μ²˜λ¦¬μ—μ„œλŠ” ν•„μš”ν•˜λ‹€. 

μ΄λ ‡κ²Œ 배타적 μ œμ–΄λ₯Ό ν•˜λŠ” 뢀뢄은 병λͺ© ν˜„μƒμ΄ λ°œμƒν•˜κΈ° 쉽닀. 

일반적으둜 OSλ‚˜ DBMSλŠ” 병렬 처리λ₯Ό μœ„ν•΄ 배타적 μ œμ–΄λ₯Ό μ‚¬μš©ν•œλ‹€κ³  ν•œλ‹€.

 

νŠΉμ§•μ„ μ •λ¦¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  • 볡수의 μ²˜λ¦¬κ°€ 곡유 μžμ›(CPU, λ©”λͺ¨λ¦¬, λ””μŠ€ν¬ λ“±)에 λ™μ‹œμ— μ•‘μ„ΈμŠ€ν•˜λ©΄ λΆˆμΌμΉ˜κ°€ λ°œμƒν•  수 있기 λ•Œλ¬Έμ— 배타적 μ œμ–΄λ‘œ λ³΄ν˜Έν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.
  • 배타적 μ œμ–΄μ—μ„œλŠ” νŠΉμ • μ²˜λ¦¬κ°€ 곡유 μžμ›μ„ μ΄μš©ν•˜κ³  μžˆλŠ” λ™μ•ˆ λ‹€λ₯Έ μ²˜λ¦¬κ°€ μ΄μš©ν•  수 μ—†κ²Œ ν•΄μ„œ λΆˆμΌμΉ˜κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

 

DBMSμ—μ„œ μ‚¬μš©λ˜λŠ” 배타적 μ œμ–΄λ₯Ό μ•Œμ•„λ³΄μž.

1️⃣DBMS의 배타적 μ œμ–΄μ—μ„œλŠ” 맀우 짧은 μ‹œκ°„ λ™μ•ˆλ§Œ 락(Lock)을 μœ μ§€ν•˜λŠ” 래치(Latch)λΌλŠ” 것이 μžˆμ–΄μ„œ CPUμ—μ„œ μ˜λ―Έκ°€ μ—†λŠ” 처리λ₯Ό ν•˜λ©΄μ„œ λŒ€κΈ°ν•˜λŠ” 방식이 μžˆλ‹€. μŠ€ν•€λ½(Spin-Lock)이라고도 λΆˆλ¦°λ‹€. 

 

2οΈβƒ£ν•œνŽΈ 비ꡐ적 μž₯μ‹œκ°„ 락을 μœ μ§€ν•˜λ„λ‘ 큐λ₯Ό μ΄μš©ν•΄μ„œ κ΄€λ¦¬ν•˜λŠ” 방식인 슬립락(Sleep-Lock)μ΄λΌλŠ” 것도 μžˆλ‹€. 

 

3οΈβƒ£μŠ€ν•€λ½μ€ CPUμ—μ„œ 의미 μ—†λŠ” 처리λ₯Ό λ°˜λ³΅ν•˜λ©΄μ„œ λŒ€κΈ°ν•˜μ§€λ§Œ, λ‹¨μˆœνžˆ 계속 반볡만 ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μŠ€ν•€ν•΄μ„œ 락을 ν™•λ³΄ν•˜μ§€ λͺ»ν•˜λ©΄ μŠ¬λ¦½ν•˜λŠ” λ“± 상황에 따라 μŠ€ν•€ν• μ§€ μŠ¬λ¦½ν• μ§€λ₯Ό νŒλ‹¨ν•˜λŠ” μ–΄λŒ‘ν‹°λΈŒλ½(Adaptive-lock) 방식도 μžˆλ‹€.

 

λ¦¬λˆ…μŠ€ 컀널은 λΉ… 컀널락(Big Kernel Lock, BKL)이라 λΆˆλ¦¬λŠ”, ν•˜λ‚˜μ˜ μŠ€ν•€λ½μœΌλ‘œ μœ μ§€λœλ‹€.

μ»€λ„μ˜ BKL이 μ΄μš©λ˜λŠ” λΆ€λΆ„μ—μ„œλŠ” μ²˜λ¦¬κ°€ μ§λ ¬ν™”λΌμ„œ λ™μ‹œμ— ν•˜λ‚˜μ˜ CPU만 컀널 μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€. λ”°λΌμ„œ 이 뢀뢄이 병λͺ© 지점이 되기 쉽닀.

 

μƒνƒœ μ €μž₯/ μƒνƒœ λΉ„μ €μž₯

  • μƒνƒœ μ €μž₯(Stateful): μƒνƒœ 정보λ₯Ό 가짐
    • 정보λ₯Ό 많이 κ°€μ§€κ³  μžˆκΈ°μ— μ„ΈλΆ„ν™”λœ μ œμ–΄κ°€ κ°€λŠ₯ν•œ 반면, ꡬ쑰가 λ³΅μž‘ν•˜λ‹€.
    • μ˜ˆμ‹œ) ssh
  • μ„±νƒœ λΉ„μ €μž₯(Stateless): μƒνƒœ 정보λ₯Ό κ°€μ§€μ§€ μ•ŠμŒ
    • κ³ κΈ°λŠ₯은 μ•„λ‹ˆμ§€λ§Œ, μƒνƒœλ₯Ό κ³ λ €ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— κ°„λ‹¨ν•˜λ©° μ„±λŠ₯μ΄λ‚˜ μ•ˆμ •μ„± μΈ‘λ©΄μ—μ„œ μš°μˆ˜ν•˜λ‹€.
    • μ˜ˆμ‹œ) http

 

컴퓨터 λ‚΄μ—μ„œλŠ” 거의 λͺ¨λ“  곳에 μƒνƒœ μ €μž₯이 μ‚¬μš©λ˜κ³  μžˆλ‹€. λ³΅μž‘ν•œ 처리λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μƒνƒœ μ €μž₯은 ν•„μˆ˜λΆˆκ°€κ²°μ΄λ‹€.

일반 CPUλŠ” ν•˜λ‚˜μ˜ CPUμ—μ„œ 볡수의 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‘°κΈˆμ”© μ²˜λ¦¬ν•œλ‹€. 이 λ•Œλ¬Έμ— νŠΉμ • μ‹œμ μ— μ§„μ§œλ‘œ 처리λ₯Ό ν•˜κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λŠ” 1CPUλ‹Ή ν•˜λ‚˜λ‹€.

처리λ₯Ό ν•˜μ§€ μ•ŠλŠ” ν”„λ‘œμ„ΈμŠ€λŠ” λŒ€κΈ° μƒνƒœλ‘œ μžˆμ–΄μ•Ό ν•œλ‹€. 이λ₯Ό 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€μ—μ„œλŠ” μ•„λž˜μ™€ 같은 μƒνƒœλ‘œ μƒνƒœ 전이λ₯Ό ν•œλ‹€.

  • κ°œμ‹œ: μ–΄λ–€ λͺ…λ Ήμ΄λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰ν•˜λ©΄ ν”„λ‘œμƒˆμŠ€κ°€ μƒμ„±λ˜λ©΄ μ‹€ν–‰λœλ‹€.
  • μ‹€ν–‰ κ°€λŠ₯ μƒνƒœ: κ°€μž₯ λ¨Όμ € μ‹€ν–‰ 큐라 λΆˆλ¦¬λŠ” μˆœμ„œ λŒ€κΈ° 행렬에 쀄을 μ„œμ•Ό ν•œλ‹€.
  • μ‹€ν–‰ μƒνƒœ: μ°¨λ‘€κ°€ λŒμ•„μ˜€λ©΄ μ‹€ν–‰ μƒνƒœλ‘œ μ „μ΄ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ²˜λ¦¬ν•œλ‹€.
  • ν•˜λ‚˜μ˜ CPUκ°€ λ…μ ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μΌμ •λŸ‰μ„ μ²˜λ¦¬ν•˜λ©΄ CPUλ₯Ό λ‹€μ‹œ μ—΄λ©°, μ΄λ•Œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μ‹œ μˆœμ„œ ν–‰λ ¬λ‘œ λŒμ•„κ°€ 쀄을 μ„ λ‹€.
  • λŒ€κΈ° μƒνƒœ: λ§Œμ•½ λ””μŠ€ν¬ μ•‘μ„ΈμŠ€ λ“± I/O λŒ€κΈ°κ°€ λ°œμƒν•˜λŠ” 처리λ₯Ό μ‹€ν–‰ν•œ 경우 λŒ€κΈ° μƒνƒœλ‘œ μ „μ΄ν•œλ‹€.
  • μ’…λ£Œ: 이 λŒ€ν‘œμ μΈ μ„Έ κ°€μ§€ μƒνƒœ(μ‹€ν–‰ κ°€λŠ₯ μƒνƒœ, μ‹€ν–‰ μƒνƒœ, λŒ€κΈ° μƒνƒœ)λ₯Ό μ „μ΄ν•˜λ©΄μ„œ μ²˜λ¦¬κ°€ μ „λΆ€ λλ‚˜λ©΄ μ’…λ£Œν•œλ‹€.