๊ณต์ ์์(shared memory)
๊ณต์ ์์์ ์์คํ ์์์ ๊ฐ ํ๋ก์ธ์ค, ์ค๋ ๋๊ฐ ํจ๊ป ์ ๊ทผํ ์ ์๋ ๋ชจ๋ํฐ, ํ๋ฆฐํฐ, ๋ฉ๋ชจ๋ฆฌ, ํ์ผ, ๋ฐ์ดํฐ ๋ฑ์ ์์์ด๋ ๋ณ์ ๋ฑ์ ์๋ฏธํ๋ค.
์ด ๊ณต์ ์์์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฝ๊ฑฐ๋ ์ฐ๋ ์ํฉ์ ๊ฒฝ์ ์ํ(race condition)์ด๋ผ ํ๋ค.
๋์์ ์ ๊ทผ์ ์๋ํ ๋, ์ ๊ทผ์ ํ์ด๋ฐ์ด๋ ์์ ๋ฑ์ด ๊ฒฐ๊ด๊ฐ์ ์ํฅ์ ์ค ์ ์๋ ์ํ์ธ ๊ฒ์ด๋ค.
์ ์ญ ๋ณ์ '์๊ธ'์ 10๋ง์์ด ์ ์ฅ๋์ด ์๋ค. ํ๋ก์ธ์ค P1์ด ์๊ธ์ ํ์ธํ๊ณ , ํ๋ก์ธ์ค P2๊ฐ ์๊ธ์ ํ์ธํ ๋ค์ ์๊ธ์ 5๋ง์์ ์ถ๊ฐํ๊ณ ์๊ธ์ ์ ์ฅํ๋ค. ์ด๋ ์ถ๊ฐํ ์๊ธ์ด ํ๋ก์ธ์ค P1์๋ ์ ๋ฐ์ดํธ๋์ง ์๋๋ค.
๊ทธ ์ดํ์, ํ๋ก์ธ์ค P1์ด ํ๋ก์ธ์ค P2๊ฐ ์๊ธ์ ์ถ๊ฐํ๊ธฐ ์ ์ ํ์ธํด๋ ์๊ธ ๊ธ์ก์ 10๋ง์์ ์ถ๊ฐํ๊ณ ์๊ธ์ ์ ์ฅํ๋ค.
๊ทธ ๊ฒฐ๊ณผ, ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ์ 25๋ง์์ด์ง๋ง, ํ๋ก์ธ์ค P1, P2์์๋ ํ๋ฆฐ ์๊ธ ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค.
์๊ณ ์์ญ(critical section)
์๊ณ ์์ญ์ ๋ ์ด์์ ํ๋ก์ธ์ค, ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ ๋ ์์ ๋ฑ์ ์ด์ ๋ก ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ์ฝ๋ ์์ญ์ ๋งํ๋ค.
์๊ณ ์์ญ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ฎคํ ์ค, ์ธ๋งํฌ์ด, ๋ชจ๋ํฐ ์ธ ๊ฐ์ง๊ฐ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ํธ ๋ฐฐ์ , ํ์ ๋๊ธฐ, ์ตํต์ฑ์ด๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
์ด ๋ฐฉ๋ฒ์ ํ ๋๊ฐ ๋๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ธ(lock)์ด๋ค.
- ์ํธ ๋ฐฐ์ : ํ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ๋ค์ด๊ฐ์ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๋ค์ด๊ฐ ์ ์๋ค.
- ํ์ ๋๊ธฐ : ํน์ ํ๋ก์ธ์ค๊ฐ ์์ํ ์๊ณ ์์ญ์ ๋ค์ด๊ฐ์ง ๋ชปํ๋ฉด ์๋๋ค.
- ์ตํต์ฑ : ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ผ์ ๋ฐฉํดํด์๋ ์ ๋๋ค.
๋ฎคํ ์ค(mutex)
ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ lock()์ ํตํด ์ ๊ธ ์ค์ ํ๊ณ ์ฌ์ฉํ ํ์๋ unlock()์ ํตํด ์ ๊ธ ํด์ ํ๋ ๊ฐ์ฒด์ด๋ค.
์ ๊ธ์ด ์ค์ ๋๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ ์ ๊ธด ์ฝ๋ ์์ญ์ ์ ๊ทผํ ์ ์๊ณ ํด์ ๋ ๊ทธ์ ๋ฐ๋๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์ ๊ฒผ๋ ์ฝ๋ ์์ญ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
๋ํ ๋ฎคํ ์ค๋ ์ ๊ธ ๋๋ ์ ๊ธ ํด์ ๋ผ๋ ์ํ๋ง์ ๊ฐ์ง๋ค.
์ธ๋งํฌ์ด(semaphore)
์ธ๋งํฌ์ด๋ ์ผ๋ฐํ๋ ๋ฎคํ ์ค์ด๋ค. ๊ฐ๋จํ ์ ์ ๊ฐ๊ณผ ๋ ๊ฐ์ง ํจ์ wait(P ํจ์๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํจ) ๋ฐ signal(V ํจ์๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํจ)๋ก ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ์ฒ๋ฆฌํ๋ค.
wait()๋ ์์ ์ ์ฐจ๋ก๊ฐ ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ํจ์์ด๋ฉฐ, signal()์ ๋ค์ ํ๋ก์ธ์ค๋ก ์์๋ฅผ ๋๊ฒจ์ฃผ๋ ํจ์์ด๋ค.
ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ฉด ์ธ๋งํฌ์ด์์ wait() ์์ ์ ์ํํ๊ณ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ํด์ ํ๋ฉด ์ธ๋งํฌ์ด์์ signal() ์์ ์ ์ํํ๋ค.
์ธ๋งํฌ์ด์๋ ์กฐ๊ฑด ๋ณ์๊ฐ ์๊ณ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์ธ๋งํฌ์ด ๊ฐ์ ์์ ํ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ ๋์์ ์ธ๋งํฌ์ด ๊ฐ์ ์์ ํ ์ ์๋ค.
์ฆ, ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ฉด ์ธ๋งํฌ์ด์์ wait() ์์ ์ ์ํํ๊ณ ,
ํด๋น ๊ณต์ ์์์ ์ฌ์ฉ์ค์ธ ๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ๊ณต์ ์์์ ํด์ ํด์ ์ธ๋งํฌ์ด์์ signal()์ด ๋ฐ์ํ ๋๊น์ง ๋๊ธฐํ๋ค.
๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด
๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด๋ 0๊ณผ 1์ ๋ ๊ฐ์ง ๊ฐ๋ง ๊ฐ์ง ์ ์๋ ์ธ๋งํฌ์ด์ด๋ค.
๊ตฌํ์ ์ ์ฌ์ฑ์ผ๋ก ์ธํด ๋ฎคํ ์ค๋ ๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด๋ผ๊ณ ํ ์ ์์ง๋ง, ์๋ฐํ ๋งํ๋ฉด ๋ฎคํ ์ค๋ฅผ ์ ๊ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ํธ๋ฐฐ์ ๊ฐ ์ผ์ด๋๋ '์ ๊ธ ๋ฉ์ปค๋์ฆ'์ด๊ณ , ์ธ๋งํฌ์ด๋ ์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํธ ๋ฐฐ์ ๊ฐ ์ผ์ด๋๋ '์ ํธ ๋ฉ์ปค๋์ฆ'์ด๋ค.
์นด์ดํ ์ธ๋งํฌ์ด
์นด์ดํ ์ธ๋งํฌ์ด๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๊ฐ์ง ์ ์๋ ์ธ๋งํฌ์ด์ด๋ฉฐ, ์ฌ๋ฌ ์์์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ ํํ ๊ฐ์๋ฅผ ๊ฐ์ง ์์์ ์ ๊ทผ ์ ์ดํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ธ๋งํฌ์ด๋ ๊ฐ์ฉํ ์์์ ๊ฐ์๋ก ์ด๊ธฐํ ๋๋ฉฐ wait() ์ฐ์ฐ ์ํ์ ์ธ๋งํฌ์ด ๊ฐ์ ๊ฐ์ํ๋ค. ์ดํ signal() ์ฐ์ฐ์ ์ํํ๋ฉด ์ธ๋งํฌ์ด ๊ฐ์ ์ฆ๊ฐํ๋ค. ์ธ๋งํฌ์ด ๊ฐ์ด 0์ด ๋๋ฉด ๋ชจ๋ ์์์ด ์ฌ์ฉ ์ค์์ ๋ํ๋ธ๋ค.
์นด์ดํ ์ธ๋งํฌ์ด์ ๊ฐ๋จํ ์์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
semaphore s = 1;
void Process (int i) {
while (true)
{
wait(s); //์ธ๋งํฌ์ด ๊ฐ์ ๊ฐ์์ํจ๋ค.
/* ์๊ณ ์์ญ */
signal(s); //์ธ๋งํฌ์ด ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค.
/* ์๊ณ ์์ญ ์ดํ ์ฝ๋ */
}
}
๋ณ์ s๋ฅผ ๊ฐ์ฉํ ์์์ ๊ฐ์์ธ 1๋ก ์ด๊ธฐํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ์๊ณ ์์ญ ์ฝ๋๋ฅผ wait() ํจ์์ signal() ํจ์๋ก ๊ฐ์ธ์ค์, ์ด๋ค ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ํด๋น ์๊ณ ์์ญ์ ์ ๊ทผํ์ ๋ wait() ํจ์๋ก ์ธ๋งํฌ์ด ๊ฐ์ด 0์ธ ๊ฒฝ์ฐ(์ ๊ทผ ๊ฐ๋ฅํ ๊ณต์ ์์์ด ์๋ ๊ฒฝ์ฐ),
๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋์์ signal()์ด ์ํ๋์ด ์ธ๋งํฌ์ด ๊ฐ์ด 0๋ณด๋ค ์ปค์ง๋ฉด(์ ๊ทผ ๊ฐ๋ฅํ ๊ณต์ ์์์ด ๋๋ฉด), ๋๊ธฐ ์ํ๋ฅผ ๋น ์ ธ๋์ ์๊ณ ์์ญ ์ฝ๋์ ์ ๊ทผํ๊ณ , ๋ชจ๋ ์ํํ๋ฉด signal() ํจ์๋ฅผ ํตํด ์ธ๋งํฌ์ด ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค(๊ณต์ ์์์ ํด์ ํ๋ค).
๋ชจ๋ํฐ
๋ชจ๋ํฐ๋ ๋ ์ด์์ ์ค๋ ๋/ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๊ณต์ ์์์ ์จ๊ธฐ๊ณ ํด๋น ์ ๊ทผ์ ๋ํด ์ธํฐํ์ด์ค๋ง ์ ๊ณตํ๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ชจ๋ํฐ๋ ๋ชจ๋ํฐ ํ๋ฅผ ํตํด ๊ณต์ ์์์ ๋ํ ์์ ๋ค์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
๋ชจ๋ํฐ๋ ์ธ๋งํฌ์ด๋ณด๋ค ๊ตฌํํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๋ชจ๋ํฐ์์ ์์ ๋ค์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ํธ ๋ฐฐ์ ๋ ์๋์ด๋ค.
๋ฐ๋ฉด์, ์ธ๋งํฌ์ด์์๋ ์ํธ ๋ฐฐ์ ๋ฅผ ๋ช ์์ ์ผ๋ก ๊ตฌํํด์ผ ํ๋ ์ฐจ์ด์ ์ด ์๋ค.
'CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ (0) | 2023.09.01 |
---|---|
[์ด์์ฒด์ ] ๊ต์ฐฉ ์ํ(deadlock) (0) | 2023.08.31 |
[์ด์์ฒด์ ] ์ค๋ ๋์ ๋ฉํฐ์ค๋ ๋ฉ (1) | 2023.08.30 |
[์ด์์ฒด์ ] ๋ฉํฐํ๋ก์ธ์ฑ(multi-processing) (0) | 2023.08.29 |
[์ด์์ฒด์ ] PCB(Process Control Block) (0) | 2023.08.28 |