Skip to content

Latest commit

Β 

History

History
27 lines (14 loc) Β· 1.55 KB

File metadata and controls

27 lines (14 loc) Β· 1.55 KB

[OS] Race Condition

곡유 μžμ›μ— λŒ€ν•΄ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— μ ‘κ·Όν•  λ•Œ, 결과값에 영ν–₯을 쀄 수 μžˆλŠ” μƒνƒœ

λ™μ‹œ μ ‘κ·Ό μ‹œ 자료의 일관성을 ν•΄μΉ˜λŠ” κ²°κ³Όκ°€ λ‚˜νƒ€λ‚¨


Race Condition이 λ°œμƒν•˜λŠ” 경우

  1. 컀널 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 쀑에 μΈν„°λŸ½νŠΈ λ°œμƒ
    • 문제점 : 컀널λͺ¨λ“œμ—μ„œ 데이터λ₯Ό λ‘œλ“œν•˜μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ‹€κ°€ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜μ—¬ 같은 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” 경우
    • 해결법 : 컀널λͺ¨λ“œμ—μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ™μ•ˆ, μΈν„°λŸ½νŠΈλ₯Ό disable μ‹œμΌœ CPU μ œμ–΄κΆŒμ„ 가져가지 λͺ»ν•˜λ„둝 ν•œλ‹€.
  2. ν”„λ‘œμ„ΈμŠ€κ°€ 'System Call'을 ν•˜μ—¬ 컀널 λͺ¨λ“œλ‘œ μ§„μž…ν•˜μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 도쀑 λ¬Έλ§₯ κ΅ν™˜μ΄ λ°œμƒν•  λ•Œ
    • 문제점 : ν”„λ‘œμ„ΈμŠ€1이 컀널λͺ¨λ“œμ—μ„œ 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” 도쀑, μ‹œκ°„μ΄ μ΄ˆκ³Όλ˜μ–΄ CPU μ œμ–΄κΆŒμ΄ ν”„λ‘œμ„ΈμŠ€2둜 λ„˜μ–΄κ°€ 같은 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” 경우 ( ν”„λ‘œμ„ΈμŠ€2κ°€ μž‘μ—…μ— λ°˜μ˜λ˜μ§€ μ•ŠμŒ )
    • 해결법 : ν”„λ‘œμ„ΈμŠ€κ°€ 컀널λͺ¨λ“œμ—μ„œ μž‘μ—…μ„ ν•˜λŠ” 경우 μ‹œκ°„μ΄ μ΄ˆκ³Όλ˜μ–΄λ„ CPU μ œμ–΄κΆŒμ΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ λ„˜μ–΄κ°€μ§€ μ•Šλ„λ‘ 함
  3. λ©€ν‹° ν”„λ‘œμ„Έμ„œ ν™˜κ²½μ—μ„œ 곡유 λ©”λͺ¨λ¦¬ λ‚΄μ˜ 컀널 데이터에 μ ‘κ·Όν•  λ•Œ
    • 문제점 : λ©€ν‹° ν”„λ‘œμ„Έμ„œ ν™˜κ²½μ—μ„œ 2개의 CPUκ°€ λ™μ‹œμ— 컀널 λ‚΄λΆ€μ˜ 곡유 데이터에 μ ‘κ·Όν•˜μ—¬ μ‘°μž‘ν•˜λŠ” 경우
    • 해결법 : 컀널 내뢀에 μžˆλŠ” 각 곡유 데이터에 μ ‘κ·Όν•  λ•Œλ§ˆλ‹€, κ·Έ 데이터에 λŒ€ν•œ lock/unlock을 ν•˜λŠ” 방법