CS-Oh-Yeahs / os_study

μš΄μ˜μ²΄μ œμ™€ μ •λ³΄κΈ°μˆ μ˜ 원리 μŠ€ν„°λ””
7 stars 1 forks source link

πŸ€” [CH06]Q5 ν”„λ‘œμ„ΈμŠ€ 동기화와 κ΄€λ ¨λœ 고전적 문제 3가지에 λŒ€ν•΄ 각각 κ°„λ‹¨νžˆ μ„€λͺ…ν•΄μ£Όμ„Έμš”. #61

Closed gzgzg2 closed 2 years ago

dianestar commented 2 years ago

첫 번째 Bounded Buffer Problem은 μƒμ‚°μž-μ†ŒλΉ„μž λ¬Έμ œλΌκ³ λ„ 뢈리며, μ΄λŠ” 버퍼가 곡유 λ²„νΌλΌλŠ” μ μ—μ„œ λ‹€μˆ˜μ˜ μƒμ‚°μžκ°€ λ™μΌν•œ 버퍼에 데이터λ₯Ό μž…λ ₯ν•˜κ³ μž ν•˜κ±°λ‚˜ λ‹€μˆ˜μ˜ μ†ŒλΉ„μžκ°€ λ™μΌν•œ 버퍼에 μžˆλŠ” 데이터λ₯Ό κΊΌλ‚΄κ°€λ €κ³  ν•  λ•Œ λ¬Έμ œκ°€ λ°œμƒν•  수 있으며, λ˜ν•œ 버퍼가 μœ ν•œ λ²„νΌλΌλŠ” μ μ—μ„œ μ†ŒλΉ„μžμ˜ μš”μ²­μ€ μ—†κ³  버퍼가 full인 μƒνƒœμ—μ„œ μƒμ‚°μžκ°€ κ³„μ†ν•΄μ„œ 데이터λ₯Ό μž…λ ₯ν•˜κ³ μž ν•˜κ±°λ‚˜ λ°˜λŒ€λ‘œ μƒμ‚°μžμ˜ μž…λ ₯은 μ—†κ³  버퍼가 empty인 μƒνƒœμ—μ„œ μ†ŒλΉ„μžκ°€ κ³„μ†ν•΄μ„œ 데이터λ₯Ό κΊΌλ‚΄κ°€κ³ μž ν•  λ•Œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 두 번째 Readers-Writers Problem은 읽기 μž‘μ—…λ§Œ μˆ˜ν–‰ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ 곡유 μžμ›μ— μ ‘κ·Ό 쀑일 λ•Œμ—λŠ” μ“°κΈ° μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ 접근을 막기 μœ„ν•œ lock은 ν•„μš”ν•˜μ§€λ§Œ 좔가적인 읽기 ν”„λ‘œμ„ΈμŠ€κ°€ μ ‘κ·Όν•˜κ³ μž ν•  λ•Œμ—λŠ” 접근을 ν—ˆμš©ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€λŠ” κ΄€μ μœΌλ‘œ, Readersκ°€ Writers보닀 μš°μ„ μˆœμœ„λ₯Ό κ°–κ²Œ λ˜λ―€λ‘œ Writers의 Starvation λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, Dining Philosophers Problem은 5λͺ…μ˜ μ² ν•™μžκ°€ 원탁 ν…Œμ΄λΈ”μ— μ•‰μ•„μžˆκ³  μ² ν•™μžλ“€ 사이에 젓가락이 ν•˜λ‚˜μ”© λ†“μ—¬μžˆμœΌλ©° 각각의 μ² ν•™μžλŠ” μžμ‹ μ˜ μ–‘μͺ½μ— 놓인 젓가락 두 개λ₯Ό λͺ¨λ‘ 집어야 식사가 κ°€λŠ₯ν•˜λ‹€κ³  κ°€μ •ν•  λ•Œ, λͺ¨λ“  μ² ν•™μžκ°€ μžμ‹ μ˜ μ™Όμͺ½μ— μžˆλŠ” 젓가락을 λ™μ‹œμ— 집을 경우 λͺ¨λ“  μ² ν•™μžκ°€ 식사λ₯Ό ν•  수 μ—†κ²Œ λ˜λŠ” 문제둜, Deadlock이 λ°œμƒν•˜λŠ” 원인을 μ§κ΄€μ μœΌλ‘œ λ³Ό 수 μžˆλŠ” μ˜ˆμ‹œλΌκ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

gzgzg2 commented 2 years ago

ν”„λ‘œμ„ΈμŠ€ 동기화와 κ΄€λ ¨λœ 세가지 λ¬Έμ œλŠ” 1. Bounded-Buffer Problem, 2. Readers and Writers Problem, 3. Dining-Philosophers Problem κ°€ μžˆλŠ”λ°

첫번째 문제점인 Bounded-Buffer Problem은 μƒμ‚°μžμ™€ μ‚¬μš©μžμ˜ λΉ„μœ¨μ΄ λ§žμ§€μ•Šμ•„μ„œ μ‚¬μš©μžλ‚˜ μƒμ‚°μžκ°€ λ¬΄ν•œνžˆ λŒ€κΈ°ν•˜κ±°λ‚˜, κ³΅μš°λ°μ΄ν„°μ— λ™μ‹œμ— μ ‘κ·Όν•˜μ—¬ 데이터 톡일성이 깨질 수 μžˆλŠ” λ¬Έμ œμ μ„ μ–˜κΈ°ν•©λ‹ˆλ‹€.

Readers and Writers ProblemλŠ” λ‹€μˆ˜μ˜ Reader Writerκ°€ 곡용 λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜μ—¬ 데이터 일관성을 ν•΄μΉ˜λŠ” λ¬Έμ œμ μ„ λ§ν•©λ‹ˆλ‹€.

Dining-Philosophers Problem은 ν•˜λ‚˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ κ³΅μœ λ°μ΄ν„° 쀑 μ„œλ‘œμ—κ²Œ ν•„μš”ν•œ μžμ›μ„ μ–‘λ³΄ν•˜μ§€ μ•Šμ•„μ„œ Deadlock이 λ°œμƒν•  수 μžˆλŠ” 문제λ₯Ό λ§ν•©λ‹ˆλ‹€.

codenamehee commented 2 years ago

ν”„λ‘œμ„ΈμŠ€ 동기화와 κ΄€λ ¨λœ λ¬Έμ œμ—λŠ” μƒμ‚°μž-μ†ŒλΉ„μž 문제 / readers-writers 문제 / μ‹μ‚¬ν•˜λŠ” μ² ν•™μž λ¬Έμ œκ°€ μžˆλ‹€. λ¨Όμ € μƒμ‚°μž-μ†ŒλΉ„μž λ¬Έμ œλŠ” λ²„νΌμ˜ 크기가 μœ ν•œν•œ ν™˜κ²½μ—μ„œ λͺ¨λ“  버퍼에 데이터가 μ±„μ›Œμ Έ μžˆμ„ 경우 μƒμ‚°μž μž…μž₯μ—μ„œ κ°€μš© μžμ›μ΄ λΆ€μ‘±ν•˜κ²Œ 되고, 데이터가 λͺ¨λ‘ λΉ„μ›Œμ Έ μžˆμ„ 경우 μ†ŒλΉ„μž μž…μž₯μ—μ„œ κ°€μš© μžμ›μ΄ λΆ€μ‘±ν•΄μ§€λŠ” λ¬Έμ œμ™€ 데이터λ₯Ό μƒμ‚°ν•˜λŠ” μ—¬λŸ¬ 개의 μƒμ‚°μžλ“€μ΄ ν•˜λ‚˜μ˜ 버퍼에 λ™μ‹œμ— λ„μ°©ν•΄μ„œ λ™μ‹œμ— 데이터λ₯Ό μΆ”κ°€ν•˜κ²Œ 될 경우 λ°œμƒν•  수 μžˆλŠ” 동기화 문제λ₯Ό λ§ν•œλ‹€. Readers-Writers λ¬Έμ œλŠ” 데이터λ₯Ό λ³€κ²½ν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” ν•œλ²ˆμ— ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œμ΄ 곡유 데이터에 μ ‘κ·Όν•  수 μžˆμ–΄μ•Ό ν•˜κ³ , λ‹¨μˆœνžˆ 데이터λ₯Ό 읽기만 ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” ν•œλ²ˆμ— μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ 곡유 데이터에 μ ‘κ·Όν•  수 있게 ν•΄μ•Όν•œλ‹€λŠ” 관점이닀. 이λ₯Ό κ΅¬ν˜„ν•˜λŠ” κ³Όμ •μ—μ„œ writer ν”„λ‘œμ„ΈμŠ€λŠ” λͺ¨λ“  reader ν”„λ‘œμ„ΈμŠ€λ“€μ΄ 데이터λ₯Ό 읽고 λ‚˜κ°ˆ λ•ŒκΉŒμ§€ κ³„μ†ν•΄μ„œ κΈ°λ‹€λ €μ•Όν•˜λŠ” starvation ν˜„μƒμ΄ λ°œμƒν•  수 있게 λœλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ μ‹μ‚¬ν•˜λŠ” μ² ν•™μž λ¬Έμ œλŠ” λ°λ“œλ½ ν˜„μƒμ„ μ„€λͺ…ν•œ 것이닀. 원탁에 μ•‰μ•„μžˆλŠ” 5λͺ…μ˜ μ² ν•™μžκ°€ λ°₯을 λ¨ΉκΈ° μœ„ν•΄ μžμ‹ μ˜ μ–‘μͺ½μ— μžˆλŠ” 젓가락을 λͺ¨λ‘ μž‘μ•„μ•Ό ν•  λ•Œ, 5λͺ…μ˜ μ² ν•™μžκ°€ λͺ¨λ‘ μžμ‹ μ˜ μ™Όμͺ½ 젓가락을 작으면 μ–΄λ–€ μ² ν•™μžλ„ 였λ₯Έμͺ½ 젓가락을 μž‘μ„ 수 μ—†κ²Œ λ˜μ–΄ 더 이상 ν”„λ‘œμ„ΈμŠ€κ°€ μ§„ν–‰λ˜μ§€ μ•ŠλŠ” λ°λ“œλ½κ³Ό 같은 ν˜„μƒμ΄ λ°œμƒν•  수 μžˆμŒμ„ μ‹œμ‚¬ν•œλ‹€.