12-1 ๋๊ธฐํ๋
๋๊ธฐํ์ ์๋ฏธ
- ๋์๋ค๋ฐ์ ์ผ๋ก ์คํ๋๋ ๋ง์ ํ๋ก์ธ์ค๋ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ํ๋ ฅํ๋ฉฐ ์คํ๋ ์ ์๋ค.
- ์๋ฌด๋ ๊ฒ๋ ๋ง๊ตฌ ๋์์ ์คํํด์๋ ์๋๊ธฐ ๋๋ฌธ์(๊ฒฝ์ ์ํ: race condition) ํ๋ก์ธ์ค(์ค๋ ๋) ๋๊ธฐํ๊ฐ ํ์.
- ์คํ ์์ ์ ์ด๋ฅผ ์ํ ๋๊ธฐํ๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ฐ๋ฅธ ์์๋๋ก ์คํํ๋ค.
- ์ํธ ๋ฐฐ์ ๋ฅผ ์ํ ๋๊ธฐํ๋ ๋์์ ์ ๊ทผํด์๋ ์ ๋๋ ์์์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผํ๊ฒ ํ๋ค.
์์ฐ์์ ์๋น์ ๋ฌธ์
- ๊ณต์ ๋ฒํผ๋ฅผ ์ฌ์ด์ ๋๊ณ , ์์ฐ์์ ์๋น์๊ฐ ๊ณต์ ๋ฒํผ๋ฅผ ๋ฌธ์ ์์ด ์ฌ์ฉํ๋๋ก ๋๊ธฐํ์ํค๋ ๋ฌธ์ .
- ์์ฐ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ฉด ์๋น์๋ ๊ทธ๊ฒ์ ์๋นํ๋ ํํ์์ ๋ฐ์ํ๋ ํ์.
- ๊ณต์ ๋ฒํผ์ ์ํธ ๋ฐฐ์ ํด๊ฒฐ.
- ๋น์ด ์๋ ๊ณต์ ๋ฒํผ๋ฅผ ์๋น์๊ฐ ์ฝ์ผ๋ฉด ์๋จ.
- ๊ฝ ์ฐฌ ๊ณต์ ๋ฒํผ์ ์์ฐ์๊ฐ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ฉด ์๋จ.
- ํด๊ฒฐ์ฑ : ์ฝ๊ธฐ์ฉ ์ธ๋งํฌ์ด์ ์ฐ๊ธฐ์ฉ ์ธ๋งํฌ์ด๋ฅผ ๊ตฌ๋ถ์ง์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๊ณต์ ์์๊ณผ ์๊ณ ๊ตฌ์ญ
- ๊ณต์ ์์(shared resource)์ ์์คํ
์์์ ๊ฐ ํ๋ก์ธ์ค(์ค๋ ๋)๊ฐ ํจ๊ป ์ ๊ทผํ ์ ์๋ ๋ชจ๋ํฐ, ํ๋ฆฐํฐ, ๋ฉ๋ชจ๋ฆฌ, ํ์ผ, ๋ฐ์ดํฐ ๋ฑ์ ์์์ด๋ ๋ณ์ ๋ฑ์ ๋งํ๋ค.
- ์ด ๊ณต์ ์์์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฝ๊ฑฐ๋ ์ฐ๋ ์ํฉ์ ๊ฒฝ์ ์ํ(race condition)์ด๋ผ ํ๋ค.
- ๋์์ ์ ๊ทผ์ ์๋ํ ๋ ์ ๊ทผ์ ํ์ด๋ฐ์ด๋ ์์ ๋ฑ์ด ๊ฒฐ๊ณผ๊ฐ์ ์ํฅ์ ์ค ์ ์๋ ์ํ.
- ์๊ณ ๊ตฌ์ญ(critical section)์ ๋ ์ด์์ ํ๋ก์ธ์ค(์ค๋ ๋)๊ฐ ๋์์ ๊ณต์ ์์์ ์ ๊ทผํ ๋ ์์ ๋ฑ์ ์ด์ ๋ก ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ์ฝ๋ ์์ญ์ ๋งํ๋ค.
- ์๊ณ ๊ตฌ์ญ ํด๊ฒฐ์ 3๊ฐ์ง ์์น
- ์ํธ ๋ฐฐ์ (mutual exclusion): ํ ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์๋ค.
- ํ์ ๋๊ธฐ(bounded waiting): ์ด๋ค ํ๋ก์ธ์ค๋ ๋ฌดํ๋๊ธฐ(infinite postpone)ํ์ง ์์์ผ ํ๋ค.
- ์งํ์ ์ตํต์ฑ(progress flexibility): ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์งํ์ ๋ฐฉํดํด์๋ ์๋๋ค.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋๊ธฐํ ๊ธฐ๋ฒ์ผ๋ก ๋ฎคํ ์ค ๋ฝ, ์ธ๋งํฌ์ด, ๋ชจ๋ํฐ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋ค.
- ์๊ณ ๊ตฌ์ญ ํด๊ฒฐ์ 3๊ฐ์ง ์์น
12-2 ๋๊ธฐํ ๊ธฐ๋ฒ
๋ฎคํ ์ค ๋ฝ(Mutex Lock)
- ๋์์ ์ ๊ทผํด์๋ ์ ๋๋ ์์์ ๋์์ ์ ๊ทผํ์ง ์๋๋ก ๋ง๋๋ ์๋ฌผ์ ๊ธฐ๋ฅ์ ํ๋ ๋๊ธฐํ ๋๊ตฌ
- ์๋ฌผ์ ์ญํ : ํ๋ก์ธ์ค๋ค์ด ๊ณต์ ํ๋ ์ ์ญ ๋ณ์ lock.
- ์๊ณ ๊ตฌ์ญ์ ์ ๊ทธ๋ ์ญํ : acquire ํจ์. ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ๊ธฐ ์ ์ ํธ์ถ.
- ์๊ณ ๊ตฌ์ญ์ ์ ๊ธ์ ํด์ ํ๋ ์ญํ : release ํจ์. ์๊ณ ๊ตฌ์ญ์์์ ์์ ์ด ๋๋๊ณ ํธ์ถ
- ํ๋ก์ธ์ค๋ ๋ฝ์ ํ๋ํ ์ ์๋ค๋ฉด(์๊ณ ๊ตฌ์ญ์ ์ง์ ํ ์ ์๋ค๋ฉด) ๋ฌด์์ ๊ธฐ๋ค๋ฆฌ๊ณ ,
- ๋ฝ์ ํ๋ํ ์ ์๋ค๋ฉด(์๊ณ ๊ตฌ์ญ์ ์ง์ ํ ์ ์๋ค๋ฉด) ์๊ณ ๊ตฌ์ญ์ ์ ๊ทผ ๋ค ์๊ณ ๊ตฌ์ญ์์์ ์์ ์ ์งํํ๊ณ ,
- ์๊ณ ๊ตฌ์ญ์์ ๋น ์ ธ๋์ฌ ๋์ ๋ค์ ์๊ณ ๊ตฌ์ญ์ ์ ๊ธ์ ํด์ ํจ์ผ๋ก์จ ์๊ณ ๊ตฌ์ญ์ ๋ณดํธ.
acquire() {
while(lock == true) /* ๋ง์ฝ ์๊ณ ๊ตฌ์ญ์ด ์ ๊ฒจ ์๋ค๋ฉด */
; /* ์๊ณ ๊ตฌ์ญ์ด ์ ๊ฒจ ์๋์ง๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํ์ธ */
lock == true; /* ๋ง์ฝ ์๊ณ ๊ตฌ์ญ์ด ์ ๊ฒจ ์์ง ์๋ค๋ฉด ์๊ณ ๊ตฌ์ญ ์ ๊ธ */
}
release() {
lock = false; /* ์๊ณ ๊ตฌ์ญ ์์
์ด ๋๋ฌ์ผ๋ ์ ๊ธ ํด์ */
}
acquire(); /* ์๋ฌผ์ ์ ๊ฒจ ์๋์ง ํ์ธ, ์ ๊ฒจ ์์ง ์๋ค๋ฉด ์ ๊ทธ๊ณ ๋ค์ด๊ฐ๊ธฐ */
// ์๊ณ ๊ตฌ์ญ /* ์๊ณ ๊ตฌ์ญ์์์ ์์
์คํ */
release(); /* ์๋ฌผ์ ๋ฐํ */
์ธ๋งํฌ์ด(Semaphore)
- ์ผ๋ฐํ ๋ ๋ฐฉ์์ ๋ฎคํ
์ค ๋ฝ.
- ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ ์ ์๋ ํ๋ก์ธ์ค์ ๊ฐ์(์ฌ์ฉ๊ฐ๋ฅํ ๊ณต์ ์์์ ๊ฐ์)๋ฅผ ๋ํ๋ด๋ ์ ์ญ๋ณ์ S
- ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ๋ ์ข์์ง, ๊ธฐ๋ค๋ ค์ผ ํ ์ง๋ฅผ ์๋ ค์ฃผ๋ wait ํจ์(Pํจ์)
- ์๊ณ ๊ตฌ์ญ ์์์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค์ ์์๋ฅผ ๋๊ฒจ์ฃผ๋ signal ํจ์(Vํจ์)
- ๋ฎคํ ์ค ๋ฝ์ ์ฌ์ฉํ ์ ์๋ ๊ณต์ ์์์ด ์๋ ๊ฒฝ์ฐ, ํ๋ก์ธ์ค๋ ๋ฌดํํ ๋ฐ๋ณตํ์ฌ S๋ฅผ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ธ๋งํฌ์ด๋ก ํด๊ฒฐ.
- wait ํจ์๋ ๋ง์ผ ์ฌ์ฉํ ์ ์๋ ์์์ด ์์ ๊ฒฝ์ฐ ํด๋น ํ๋ก์ธ์ค ์ํ์ ๋๊ธฐ ์ํ๋ก ๋ง๋ค๊ณ , ๊ทธ ํ๋ก์ธ์ค์ PCB๋ฅผ ์ธ๋งํฌ์ด๋ฅผ ์ํ ๋๊ธฐ ํ์ ๋ฃ๋๋ค.
- ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์์์ ์์ ์ด ๋๋๊ณ signal ํจ์๋ฅผ ํธ์ถํ๋ฉด signal ํจ์๋ ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋๊ธฐ ํ์์ ์ ๊ฑฐํ๊ณ , ํ๋ก์ธ์ค ์ํ๋ฅผ ์ค๋น ์ํ๋ก ๋ณ๊ฒฝํ ๋ค ์ค๋น ํ๋ก ์ฎ๊น.
wait() {
S--;
if ( S < 0 ) {
add this process to Queue; /* ํด๋น ํ๋ก์ธ์ค PCB๋ฅผ ๋๊ธฐ ํ์ ์ฝ์
ํ๋ค. */
sleep(); /* ๋๊ธฐ ์ํ๋ก ์ ์ด๋ ๋ค. */
}
}
signal() {
S++;
if ( S <= 0 ) {
remove a process p from Queue; /* ๋๊ธฐ ํ์ ์๋ ํ๋ก์ธ์ค p๋ฅผ ์ ๊ฑฐํ๋ค. */
wakeup(p); /* ํ๋ก์ธ์ค p๋ฅผ ๋๊ธฐ ์ํ์์ ์ค๋น ์ํ๋ก ๋ง๋ ๋ค. */
}
}
๋ชจ๋ํฐ(Monitor)
- ๋ ์ด์์ ํ๋ก์ธ์ค(์ค๋ ๋)๊ฐ ๊ณต์ ์์์ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๊ณต์ ์์์ ์จ๊ธฐ๊ณ ํด๋น ์ ๊ทผ์ ๋ํด ์ธํฐํ์ด์ค๋ง ์ ๊ณต.
- ์ธ๋งํฌ์ด๋ ๋งค๋ฒ ์๊ณ ๊ตฌ์ญ ์๋ค๋ก ์ํธ ๋ฐฐ์ (wait, signal)๋ฅผ ๋ช ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ํฐ๋ฅผ ์ด์ฉํด ๋ ํธ๋ฆฌํ๊ฒ ๊ตฌํ ๊ฐ๋ฅ.
- ์คํ ์์ ์ ์ด๋ฅผ ์ํ ๋๊ธฐํ๋ฅผ ์ํด ํน์ ์กฐ๊ฑด์ ๋ฐํ์ผ๋ก ๋ชจ๋ํฐ๋ ์กฐ๊ฑด ๋ณ์(condition variable)์ ์ฌ์ฉํ๋ค.
- ๋ชจ๋ํฐ๋ ๊ณต์ ์์์ ๋ค๋ฃจ๋ ์ธํฐํ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ํ ํ๋ฅผ ๋ง๋ค๊ณ , ๋ชจ๋ํฐ ์์ ํญ์ ํ๋์ ํ๋ก์ธ์ค๋ง ๋ค์ด์ค๋๋ก ํ์ฌ ์ํธ๋ฐฐ์ ๋ฅผ ์ํ ๋๊ธฐํ๋ฅผ ์ ๊ณต.
'๐ฅ๏ธ CS > ๐ป ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS] ํผ๊ณต์ปด์ด Chapter 14. ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ (0) | 2024.08.21 |
---|---|
[CS] ํผ๊ณต์ปด์ด Chapter 13. ๊ต์ฐฉ ์ํ (0) | 2024.08.19 |
[CS] ํผ๊ณต์ปด์ด Chapter 11. CPU ์ค์ผ์ค๋ง (0) | 2024.08.14 |
[CS] ํผ๊ณต์ปด์ด Chapter 10. ํ๋ก์ธ์ค์ ์ค๋ ๋ (0) | 2024.08.12 |
[CS] ํผ๊ณต์ปด์ด Chapter 9. ์ด์์ฒด์ ์์ํ๊ธฐ (0) | 2024.08.09 |