๐ ๊ณต์ ์์์ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ธฐ์ํ ๋ฐฉ๋ฒ์ธ ์ํธ๋ฐฐ์ (Mutual Exclusion)
- ์ํธ๋ฐฐ์ ๋ ?
: ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ์ํ ์ค์ด๋ฉด ๋ค๋ฅธ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ ๊ทธ ์๊ณ ์์ญ์ ๋ค์ด๊ฐ์ง ๋ชปํ๊ฒ ๋ง์
→ ์ธ๋งํฌ์ด์ ๋ฎคํ ์ค๋ ์ด๋ฅผ ์ํด ๊ณ ์๋ ๊ธฐ๋ฒ
๐ ๊ณต์ ์์์ ๋ํ์ฌ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง์ด ์ด์ ์ ๊ทผํ ์ ์๋๋ก ํต์ ํด์ผํ๋๋ฐ, ๊ทธ๋ฌํ ํต์ ๊ฐ ํ์ํ ์์ญ์ ์๊ณ์์ญ์ด๋ผ๊ณ ๋ถ๋ฆ
๐ฉ๐ป๐ป ์ธ๋งํฌ์ด(Semaphore)
- ์ธ๋งํฌ์ด๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ ์ํด ๊ณต์ ๋๋ ๋ณ์๋ก ์ ์
→ ์ด ๋ณ์๋ ์ค์ง wait๊ณผ signal์ด๋ผ๋ ์ฐ์ฐ์ ์ํด์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅwait
: ์ธ๋งํฌ์ด์ ์๋ฅผ 1์ค์. 0์ด๋๋ฉด lock.signal
: ์ธ๋งํฌ์ด์ ์๋ฅผ 1 ๋๋ฆผ
- ์ธ๋งํฌ์ด(๋ณ์)์ ๊ฐฏ์์ ๋ฐ๋ผ Counting Semaphore์ Binary Semaphore๋ก ๋๋จ
- Counting Semaphore : ์ธ๋งํฌ์ด๊ฐ ์์ ์ ์๊ฐ์ ๊ฐ์ง. ์ค์ ํ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ์์์ ์ ๊ทผํ๋ฉด lock์ด ์คํ๋จ
- Binary Semaphore : ์ธ๋งํฌ์ด๊ฐ 1์. ๋ฎคํ
์ค์ฒ๋ผ ์ฌ์ฉ๋จ
โถ๏ธ ์ธ๋งํฌ์ด ๋ฐฉ์
- Busy-Wait ๋ฐฉ์
- ์์์ด ๋ชจ๋ ์ฌ์ฉ์ค์ด๋ผ๋ฉด ํ๋ก์ธ์ค๊ฐ
wait
ํ๋ ๋ฐฉ์. - ์์์ ์ฌ์ ๊ฐ ์๊ธฐ๋ฉด ์์์ ํ๋, ์์์ ๋ชจ๋ ์ฌ์ฉํ๋ค๋ฉด ์์์ ๋ฐ๋ฉํจ.
- ์์์ ๋ค ์ฌ์ฉํ๊ณ ์๊ณ ์์ญ์์ ๋์จ ํ๋ก์ธ์ค๋
signal
์ฐ์ฐ์ ํ๊ธฐ ์ ๊น์ง Busy Waiting์ ํจ- Busy Waiting : ์๊ณ ์์ญ์ ์ง์ ์๋๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ
- ์์์ด ๋ชจ๋ ์ฌ์ฉ์ค์ด๋ผ๋ฉด ํ๋ก์ธ์ค๊ฐ
- Block-Wakeup ๋ฐฉ์
- ์์์ ๊ฐ์ ๊ฐ์์ํด. ์์์ ๊ฐฏ์๊ฐ ๋ถ์กฑํ๋ฉด ํ์ฌ ํ๋ก์ธ์ค๋ฅผ wait ํ์ ์ถ๊ฐ์ํจ ํ,
block()
. - ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์
์ ์๋ฃํ์ฌ ์์์ ๋ฐ๋ฉํ์ ๋, ์ฌ์ฉ ๊ฐ๋ฅํ ์์์ ์๊ฐ ์๋ค๋ฉด ํ์ฌ ์์์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ๋ค๋ ๋ป์. ๋ฐ๋ผ์ wait ํ์์ ํ๋ก์ธ์ค๋ฅผ ๊บผ๋ด์
wakeup
์ํด
- ์์์ ๊ฐ์ ๊ฐ์์ํด. ์์์ ๊ฐฏ์๊ฐ ๋ถ์กฑํ๋ฉด ํ์ฌ ํ๋ก์ธ์ค๋ฅผ wait ํ์ ์ถ๊ฐ์ํจ ํ,
๐ฉ๐ป๐ป ๋ฎคํ ์ค(Mutex)
- ํ๋ก์ธ์ค๊ฐ ์์ ํ ์ ์๋ key๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ฐฉ๋ฒ
- ์ด key๋ฅผ ์์ ํ ์ค๋ ๋/ํ๋ก์ธ์ค๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์์
- ๋ฎคํ
์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ณ ์์ญ์ ์ง์
ํ ๋, lock์ ๊ฑธ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค ํน์ ์ค๋ ๋๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํจ
- ์๊ณ์์ญ์ ๋์ค๋ฉด unlock์ ๊ฒ
'CS > OS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS] ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ (0) | 2024.03.01 |
---|---|
[CS] ํ์ด์ง๊ณผ ์ธ๊ทธ๋ฉํ ์ด์ (0) | 2024.03.01 |
[CS] ๊ฒฝ์ ์ํ(Race Condition) (0) | 2024.02.25 |
[CS] ๋ฐ๋๋ฝ (0) | 2024.02.06 |
[CS] CPU ์ค์ผ์ค๋ง (1) | 2024.02.06 |