λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» Computer Science/λ°μ΄ν„°λ² μ΄μŠ€

[λ°μ΄ν„°λ² μ΄μŠ€] λ°λ“œλ½ DeadLock(ꡐ착 μƒνƒœ) μ΄λž€?

by Jay Din 2023. 11. 23.
728x90
λ°˜μ‘ν˜•

λ°λ“œλ½(DeadLock) λ˜λŠ” κ΅μ°©μƒνƒœλŠ” λ©€ν‹° ν”„λ‘œμ„ΈμŠ€μ™€ λ©€ν‹° μŠ€λ ˆλ“œ λ‘˜ λ‹€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이번 κΈ€μ—μ„œλŠ” νŽΈμ˜μƒ λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λ‘œ μΌκ΄„ν•΄μ„œ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

λ°λ“œλ½(DeadLock)은 κ΅μ°©μƒνƒœλ‘œλ„ μ–ΈκΈ‰λ˜λ©°,

이번 μ„€λͺ…μ—μ„œλŠ” 주둜 λ°λ“œλ½(DeadLock)μ΄λΌλŠ” μš©μ–΄λ₯Ό μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

λ°λ“œλ½ DeadLock(κ΅μ°©μƒνƒœ) μ΄λž€?

λ¬΄ν•œ λŒ€κΈ° μƒνƒœ

λ°λ“œλ½(DeadLock) λ˜λŠ” κ΅μ°©μƒνƒœλŠ” 두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ„œλ‘œμ˜ μž‘μ—…μ΄ λλ‚˜κΈ°λ₯Ό κΈ°λ‹€λ¦¬λŠ” 'λ¬΄ν•œ λŒ€κΈ° μƒνƒœ'μž…λ‹ˆλ‹€.

각 ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ λ³΄μœ ν•˜κ³  μžˆλŠ” μžμ›μ„ κΈ°λ‹€λ¦¬λŠ” λ™μ‹œμ— κ·Έ μžμ›μ„ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ œκ³΅ν•˜κΈ°λ₯Ό κΈ°λ‹€λ¦¬λŠ” 상황에 λ°œμƒν•©λ‹ˆλ‹€.

 

λ°λ“œλ½ 4가지 ν•„μš” 쑰건

λ°λ“œλ½μ€ λ‹€μ–‘ν•œ ν˜•νƒœμ˜ μžμ›μ— λŒ€ν•œ κ²½μŸμ—μ„œ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μžμ›μ€ 주둜 CPU μ‹œκ°„, λ©”λͺ¨λ¦¬, 파일, μž₯치 등을 ν¬ν•¨ν•©λ‹ˆλ‹€.

λ°λ“œλ½μ€ λ‹€μŒ 넀가지 ν•„μš” 쑰건이 λ™μ‹œμ— 성립할 λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

 

μƒν˜Έλ°°μ œ (Mutual Exclusion)

μžμ›μ€ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ‚˜ μŠ€λ ˆλ“œλ§Œμ΄ μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‚˜ μŠ€λ ˆλ“œκ°€ μ‚¬μš© 쀑인 μžμ›μ— λŒ€ν•œ 접근은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ μœ λŒ€κΈ° (Hold and Wait)

ν”„λ‘œμ„ΈμŠ€κ°€ 이미 μ–΄λ–€ μžμ›μ„ λ³΄μœ ν•œ μƒνƒœμ—μ„œ λ‹€λ₯Έ μžμ›μ„ μš”μ²­ν•˜κ³ , ν•΄λ‹Ή μžμ›μ„ μ–»κΈ° μœ„ν•΄ λŒ€κΈ°ν•˜κ³  μžˆλŠ” μƒνƒœμž…λ‹ˆλ‹€.

비선점 (No Preemption)

이미 λ³΄μœ ν•œ μžμ›μ„ κ°•μ œλ‘œ 빼앗을 수 μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‚˜ μŠ€λ ˆλ“œκ°€ 이미 μ‚¬μš© 쀑인 μžμ›μ„ κ°•μ œλ‘œ ν•΄μ œν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μˆœν™˜λŒ€κΈ° (Circular Wait)

ν”„λ‘œμ„ΈμŠ€ 집합 {P0, P1, ..., Pn}μ—μ„œ P0λŠ” P1이 μ μœ ν•œ μžμ›μ„ λŒ€κΈ°ν•˜κ³ , P1은 P2κ°€ μ μœ ν•œ μžμ›μ„ λŒ€κΈ°ν•˜λ©°, Pn은 P0이 μ μœ ν•œ μžμ›μ„ λŒ€κΈ°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ΄λ•Œ, n은 1보닀 ν¬κ±°λ‚˜ κ°™μŠ΅λ‹ˆλ‹€.

 

λ°λ“œλ½μ΄ λ°œμƒν•˜λ©΄ 각각의 ν”„λ‘œμ„ΈμŠ€λŠ” μ›ν•˜λŠ” μžμ›μ„ 얻지 λͺ»ν•΄ λ¬΄ν•œνžˆ λŒ€κΈ°ν•˜λ©°, 전체 μ‹œμŠ€ν…œμ΄ μ •μ²΄λ˜κ²Œ λ©λ‹ˆλ‹€.

λ°λ“œλ½μ„ ν•΄κ²°ν•˜κ±°λ‚˜ λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•„μš”μ‘°κ±΄ 쀑 ν•˜λ‚˜ 이상을 μ œκ±°ν•˜κ±°λ‚˜, λ°λ“œλ½μ΄ λ°œμƒν•˜λ©΄ 이λ₯Ό νƒμ§€ν•˜κ³  볡ꡬ할 수 μžˆλŠ” 방법을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λŒ€ν‘œμ μΈ λ°©λ²•μœΌλ‘œλŠ” λ°λ“œλ½μ˜ 쑰건 쀑 ν•˜λ‚˜ 이상을 κΉ¨νŠΈλ¦¬λŠ” 방법, 탐지 및 νšŒν”Ό μ•Œκ³ λ¦¬μ¦˜ 등이 μžˆμŠ΅λ‹ˆλ‹€.

 

λ°λ“œλ½ ν•΄κ²°λ°©λ²•

λ°λ“œλ½μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μ–‘ν•œ 방법이 μ‚¬μš©λ©λ‹ˆλ‹€.

μ£Όμš” λ°λ“œλ½ ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

예방 (Prevention)

λ°λ“œλ½μ΄ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•„μš” 쑰건을 μ œκ±°ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

ν•„μš” 쑰건 쀑 ν•˜λ‚˜ 이상을 λ°©μ§€ν•¨μœΌλ‘œμ¨ λ°λ“œλ½μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.

μƒν˜Έ 배제, μ μœ λŒ€κΈ°, 비선점, μˆœν™˜λŒ€κΈ° 쀑 ν•˜λ‚˜λΌλ„ λ§Œμ‘±λ˜μ§€ μ•ŠμœΌλ©΄ λ°λ“œλ½μ„ μ˜ˆλ°©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νšŒν”Ό (Avoidance)

λ°λ“œλ½μ΄ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” 경우, μ‹œμŠ€ν…œμ΄ νŠΉμ • μžμ›μ„ 할당할지 말지λ₯Ό κ²°μ •ν•˜λŠ” 동적인 λ°©λ²•μž…λ‹ˆλ‹€.

λ¦¬μ†ŒμŠ€ ν• λ‹Ή κ·Έλž˜ν”„ 등을 μ‚¬μš©ν•˜μ—¬ λ°λ“œλ½ λ°œμƒ μ—¬λΆ€λ₯Ό 미리 μ˜ˆμΈ‘ν•˜κ³ , λ°λ“œλ½μ΄ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 할당을 μ‘°μ ˆν•©λ‹ˆλ‹€.

μ΄λŠ” 보닀 적극적인 관리λ₯Ό 톡해 λ°λ“œλ½μ„ νšŒν”Όν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

κ²€μΆœ 및 회볡 (Detection and Recovery)

λ°λ“œλ½μ΄ λ°œμƒν•˜λ©΄ 이λ₯Ό κ²€μΆœν•˜μ—¬ νšŒλ³΅ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

주기적으둜 μ‹œμŠ€ν…œ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κ³ , λ°λ“œλ½μ΄ λ°œμƒν–ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό κ°μ§€ν•©λ‹ˆλ‹€.

λ°λ“œλ½μ΄ κ°μ§€λ˜λ©΄, νšŒλ³΅μ„ μœ„ν•œ 쑰치λ₯Ό μ·¨ν•˜μ—¬ λ°λ“œλ½μ„ ν•΄κ²°ν•©λ‹ˆλ‹€.

회볡 λ°©λ²•μœΌλ‘œλŠ” λ°λ“œλ½μ„ λ°œμƒμ‹œν‚¨ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ€‘μ§€μ‹œν‚€κ±°λ‚˜, μžμ›μ„ μ„ μ ν•˜μ—¬ νšŒλ³΅ν•˜λŠ” 방법 등이 μžˆμŠ΅λ‹ˆλ‹€.

선점을 ν†΅ν•œ 회볡

ꡐ착 μƒνƒœκ°€ 해결될 λ•ŒκΉŒμ§€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λΆ€ν„° μžμ›μ„ κ°•μ œλ‘œ λΉΌμ•—μ•„ ν•œ ν”„λ‘œμ„ΈμŠ€μ”© μžμ›μ„ λͺ°μ•„μ£Όμ–΄ (선점) ν•΄κ²°ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ„ΈμŠ€ κ°•μ œ μ’…λ£Œλ₯Ό ν†΅ν•œ 회볡

κ°€μž₯ λ‹¨μˆœν•˜λ©΄μ„œ ν™•μ‹€ν•œ λ°©λ²•μœΌλ‘œλŠ” ꡐ착 μƒνƒœκ°€ μ—†μ–΄μ§ˆ λ•ŒκΉŒμ§€ ꡐ착 μƒνƒœμ— 놓인 λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€ 전체 λ˜λŠ” ν•˜λ‚˜μ”© κ°•μ œλ‘œ μ’…λ£Œν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

단, 전체λ₯Ό μ’…λ£Œν•  κ²½μš°μ—” λ§Žμ€ μž‘μ—… 내역을 μžƒλŠ”λ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜λ‚˜μ”© μ’…λ£Œν•  κ²½μš°μ—” ꡐ착 μƒνƒœκ°€ μ—†μ–΄μ‘ŒλŠ”μ§€ ν™•μΈν•˜λŠ” κ³Όμ •μ—μ„œ μ˜€λ²„ν—€λ“œλ₯Ό μ•ΌκΈ°ν•œλ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.

타쑰 μ•Œκ³ λ¦¬μ¦˜

ꡐ착 μƒνƒœλ₯Ό μ™„μ „νžˆ λ¬΄μ‹œν•˜λŠ” λ°©λ²•μœΌλ‘œ 타쑰 μ•Œκ³ λ¦¬μ¦˜(orstrich algorithm)이 μžˆμŠ΅λ‹ˆλ‹€.

문제의 λ°œμƒ λΉˆλ„λ‚˜ 심각성에 따라 μ΅œλŒ€ νš¨μœ¨μ„ μΆ”κ΅¬ν•˜λŠ” μ—”μ§€λ‹ˆμ–΄ μž…μž₯μ—μ„œλŠ” 이 방법이 적합할 λ•Œλ„ λ§ŽμŠ΅λ‹ˆλ‹€.

 

 

728x90
λ°˜μ‘ν˜•