Race Condition

Race Condition

Definitions

Race Conditionμ΄λž€ 두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 곡톡 μžμ›μ„ Concurrentlyν•˜κ²Œ μ½κ±°λ‚˜ μ“°λŠ” λ™μž‘μ„ ν•  λ•Œ,

곡용 데이터에 λŒ€ν•œ 접근이 μ–΄λ–€ μˆœμ„œμ— 따라 μ΄λ£¨μ–΄μ‘ŒλŠ”μ§€μ— 따라 κ·Έ μ‹€ν–‰ κ²°κ³Όκ°€ κ°™μ§€ μ•Šκ³  λ‹¬λΌμ§€λŠ” 상황을 λ§ν•œλ‹€.


EXAMPLES

  1. 컀널 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 쀑에 μΈν„°λŸ½νŠΈ λ°œμƒ

문제점 : 컀널 λͺ¨λ“œμ—μ„œ 데이터λ₯Ό λ‘œλ“œν•˜μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ‹€κ°€ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜μ—¬ 같은 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” 경우

해결법 : 컀널λͺ¨λ“œμ—μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ™μ•ˆ, μΈν„°λŸ½νŠΈλ₯Ό disable μ‹œμΌœ CPU μ œμ–΄κΆŒμ„ κ°€μ Έκ°€μ§€ λͺ»ν•˜λ„둝 ν•œλ‹€.

  1. ν”„λ‘œμ„ΈμŠ€κ°€ System Call을 ν•˜μ—¬ 컀널 λͺ¨λ“œλ‘œ μ§„μž…ν•˜μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 도쀑 λ¬Έλ§₯ κ΅ν™˜(Context Switching)이 λ°œμƒν•  λ•Œ.

문제점 : ν”„λ‘œμ„ΈμŠ€1이 컀널λͺ¨λ“œμ—μ„œ 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” 도쀑, μ‹œκ°„μ΄ μ΄ˆκ³Όλ˜μ–΄ CPU μ œμ–΄κΆŒμ΄ ν”„λ‘œμ„ΈμŠ€2둜 λ„˜μ–΄κ°€ 같은 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” 경우. ( ν”„λ‘œμ„ΈμŠ€2κ°€ μž‘μ—…μ— λ°˜μ˜λ˜μ§€ μ•ŠμŒ )

해결법 : ν”„λ‘œμ„ΈμŠ€κ°€ 컀널λͺ¨λ“œμ—μ„œ μž‘μ—…μ„ ν•˜λŠ” 경우 μ‹œκ°„μ΄ μ΄ˆκ³Όλ˜μ–΄λ„ CPU μ œμ–΄κΆŒμ΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ λ„˜μ–΄κ°€μ§€ μ•Šλ„λ‘ 함.

  1. λ©€ν‹° ν”„λ‘œμ„Έμ„œ ν™˜κ²½μ—μ„œ 곡유 λ©”λͺ¨λ¦¬ λ‚΄μ˜ 컀널 데이터에 μ ‘κ·Όν•  λ•Œ

문제점 : λ©€ν‹° ν”„λ‘œμ„Έμ„œ ν™˜κ²½μ—μ„œ 2개의 CPUκ°€ λ™μ‹œμ— 컀널 λ‚΄λΆ€μ˜ 곡유 데이터에 μ ‘κ·Όν•˜μ—¬ μ‘°μž‘ν•˜λŠ” 경우

해결법 : 컀널 내뢀에 μžˆλŠ” 각 곡유 데이터에 μ ‘κ·Όν•  λ•Œλ§ˆλ‹€, κ·Έ 데이터에 λŒ€ν•œ lock/unlock을 ν•˜λŠ” 방법


Race의 뜻 κ·ΈλŒ€λ‘œ, κ°„λ‹¨νžˆ λ§ν•˜λ©΄ κ²½μŸν•˜λŠ” μƒνƒœ, 즉 두 개의 μŠ€λ ˆλ“œκ°€ ν•˜λ‚˜μ˜ μžμ›μ„ 놓고 μ„œλ‘œ μ‚¬μš©ν•˜λ €κ³  κ²½μŸν•˜λŠ” 상황을 λ§ν•œλ‹€.

μ΄λŸ¬ν•œ 경쟁 ν”„λ‘œμ„ΈμŠ€μ˜ 경우, λ‹€μŒ μ„Έ κ°€μ§€ μ œμ–΄λ¬Έμ œμ— μ§λ©΄ν•œλ‹€.


Mutual Exclusion

Race condition을 막기 μœ„ν•΄μ„œλŠ” 두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 곡용 데이터에 λ™μ‹œμ— 접근을 ν•˜λŠ” 것을 막아야 ν•œλ‹€.

즉, ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ 곡용 데이터λ₯Ό μ‚¬μš©ν•˜κ³  있으면 κ·Έ μžμ›μ„ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 λ§‰κ±°λ‚˜,

λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ κ·Έ μžμ›μ„ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 λ§‰μœΌλ©΄ 이 문제λ₯Ό ν”Όν•  수 μžˆλ‹€. 이것을 μƒν˜Έ 배제(mutual exclusion)라고 λΆ€λ₯Έλ‹€.


DeadLock

κ·ΈλŸ¬λ‚˜ μœ„μ™€ 같은 μƒν˜Έ 배제λ₯Ό μ‹œν–‰ν•˜λ©΄ 좔가적인 μ œμ–΄ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€. ν•˜λ‚˜λŠ” κ΅μ°©μƒνƒœ 즉 μ—¬κΈ°μ„œ λ§ν•˜λŠ” Deadlock이닀.

ν”„λ‘œμ„ΈμŠ€κ°€ 각자 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ 두 μžμ› λͺ¨λ‘μ— μ—‘μ„ΈμŠ€ ν•΄μ•Ό ν•œλ‹€κ³  κ°€μ •ν•  λ•Œ,

ν”„λ‘œμ„ΈμŠ€λŠ” 두 μžμ› λͺ¨λ‘λ₯Ό ν•„μš”λ‘œ ν•˜λ―€λ‘œ ν•„μš”ν•œ 두 λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν–‰ν•  λ•ŒκΉŒμ§€ 이미 μ†Œμœ ν•œ λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•˜μ§€ μ•ŠλŠ”λ‹€.

μ΄λŸ¬ν•œ μƒν™©μ—μ„œ 두 ν”„λ‘œμ„ΈμŠ€λŠ” ꡐ착 μƒνƒœμ— λΉ μ§€κ²Œ λ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.


Starvation

이 μ œμ–΄ λ¬Έμ œλŠ” β€˜κΈ°μ•„ μƒνƒœβ€™λΌκ³ λ„ ν•œλ‹€. μ΄λŸ¬ν•œ λ¬Έμ œλŠ” ν”„λ‘œμ„ΈμŠ€λ“€μ΄ 더 이상 진행을 ν•˜μ§€ λͺ»ν•˜κ³  영ꡬ적으둜 λΈ”λ‘λ˜μ–΄ μžˆλŠ” μƒνƒœλ‘œ,

μ‹œμŠ€ν…œ μžμ›μ— λŒ€ν•œ 경쟁 도쀑에 λ°œμƒν•  수 있고 ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신 과정에도 λ°œμƒν•  수 μžˆλŠ” λ¬Έμ œμ΄λ‹€.

두 개 μ΄μƒμ˜ μž‘μ—…μ΄ μ„œλ‘œ μƒλŒ€λ°©μ˜ μž‘μ—…μ΄ λλ‚˜κΈ°λ§Œμ„ 기닀리고 있기 λ•Œλ¬Έμ— κ²°κ³Όμ μœΌλ‘œλŠ” 아무것도 μ™„λ£Œλ˜μ§€ λͺ»ν•˜λŠ” μƒνƒœκ°€ 되게 λœλ‹€.


μ΄λ ‡κ²Œ race condition 인 κ²½μš°μ—λŠ” μŠ€λ ˆλ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό 잘 μ‘°μ ˆν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ μ΄μƒν•œ μƒνƒœ, 비정상적인 μƒνƒœκ°€ λ‚˜μ˜€κ²Œ λœλ‹€.

이 λ¬Έμ œλŠ” 항상 λ°œμƒν•˜λŠ” 것이 μ•„λ‹ˆλΌ νŠΉμ •ν•œ μˆœμ„œλŒ€λ‘œ μˆ˜ν–‰λ˜μ—ˆμ„ λ•Œ λ°œμƒν•˜λŠ” 것이닀.

이 λ¬Έμ œλŠ” 디버깅을 ν•  λ•Œμ—λŠ” μ „ν˜€ 보이지 μ•ŠλŠ” 문제점이고,

λ°œμƒ μ‹œμ— λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ— μ›ν•˜λŠ” κ²°κ³Όκ°€ λ°œμƒν•˜λŠ” 것을 보μž₯ν•  수 μ—†μœΌλ―€λ‘œ 후에 λ”μš± 큰 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆμœΌλ―€λ‘œ λ°˜λ“œμ‹œ ν”Όν•΄μ•Ό ν•˜λŠ” 상황이닀.

μ΄λŸ¬ν•œ λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘, OSλŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μ˜λ„ν•˜μ§€ μ•Šμ€ κ°„μ„­μœΌλ‘œλΆ€ν„° 각 ν”„λ‘œμ„ΈμŠ€μ˜ 데이터 및 물리적 μžμ›μ„ λ³΄ν˜Έν•΄μ•Ό ν•˜λ©°

여기에 λ©”λͺ¨λ¦¬, 파일 및 I/O μž₯μΉ˜μ™€ κ΄€λ ¨λœ λ‚΄μš©μ΄ ν¬ν•¨λœλ‹€.

그리고 ν”„λ‘œμ„ΈμŠ€μ—μ„œ μˆ˜ν–‰ν•˜λŠ” λ‚΄μš©κ³Ό ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±ν•˜λŠ” κ²°κ³ΌλŠ”, λ‹€λ₯Έ λ™μ‹œ ν”„λ‘œμ„ΈμŠ€μ˜ μ‹€ν–‰ 속도와 무관, 즉 κΈ°λŠ₯κ³Ό κ²°κ³ΌλŠ” μ„œλ‘œ 독립적이어야 ν•œλ‹€.


Sources

Last updated