์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Eclipse
- IP ํ๋กํ ์ฝ
- Java
- binary search
- OS
- ๋น ๋ฅธ ์ฌ์ ์ก
- Java๋ฒ์
- ํ๋ก์ธ์ค ๋๊ธฐํ
- SWEA
- DP
- ๋ฐฑ์ค
- Floyd-Warshall
- ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ๊ธฐ๋ฒ
- Linux
- ์๊ณ ๋ฆฌ์ฆ
- VMware
- congestion control
- ์คํฐ๋
- ์ ๋ขฐ์ ๋ฐ์ดํฐ ์ ์ก
- algorhtim
- ์ด์์ฒด์
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- github
- java๋ฒ์ ๋ณ๊ฒฝ
- oxboxes
- ํผ๋๋ฐฑ
- Algorithm
- C++
- ํ๊ณ
- ๋ชจ์๋ฉด์
์ฒด๋ฑ๋ก๊ทธ
[์ด์์ฒด์ 3๊ธฐ] 4์ฃผ์ฐจ ์คํฐ๋ ์ ๋ฆฌ ๋ณธ๋ฌธ
๐น๋ณํ์ฑ/๋์์ฑ (Concurrency)
๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ
- ๋ ผ๋ฆฌ์ ์ธ ๊ฐ๋
- ์ฑ๊ธ ์ฝ์ด ๋ฉํฐ ์ค๋ ๋
- Time-sharing์ ํตํด CPU๋ฅผ ๋๋์ด ์ฌ์ฉํจ์ผ๋ก์ ๋์์ฑ ๊ตฌํ
- ๋ณ๋ ฌ์ด ์๋ ์์ฐจ์ ์ธ ๋์
- CPU๊ฐ 1๊ฐ์ด๊ธฐ ๋๋ฌธ์ context switching ๋ฐ์
- ๋ฉํฐ ์ฝ์ด ๋ฉํฐ ์ค๋ ๋
๐น๋ณ๋ ฌ์ฑ (Parallelism)
์ค์ ๋ก ๋์์ ์์ ์ด ์ฒ๋ฆฌ๋๋ ๊ฒ
- ๋ฌผ๋ฆฌ์ ์ธ ๊ฐ๋
- ๋ฉํฐ ์ฝ์ด ๋ฉํฐ ์ค๋ ๋
- ๋ฐ์ดํฐ ๋ณ๋ ฌ์ฑ๊ณผ ์์
๋ณ๋ ฌ์ฑ
- ๋ฐ์ดํฐ ๋ณ๋ ฌ์ฑ: ๊ฐ์ ์์ ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์๋ธ ๋ฐ์ดํฐ๋ก ๋๋์ด ๊ฐ์ ์์ ์ ๋์์ ์ฒ๋ฆฌ
- ์์ ๋ณ๋ ฌ์ฑ: ์๋ก ๋ค๋ฅธ ์์ ์ ๋์์ ์ฒ๋ฆฌ
๐นํ๋ก์ธ์ค ๋๊ธฐํ(Synchronization)
ํ๋ก์ธ์ค ๋๊ธฐํ๋ ๋์์ ์ ๊ทผํ ์ ์๋ ์์์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผํ๋๋ก ํ๊ธฐ ์ํด ํ๋ก์ธ์ค์ ์คํ ์์๋ฅผ ์ ์ดํ์ฌ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ณผ์ ์ ๋งํ๋ค.
์ด๋ฌํ ํ๋ก์ธ์ค ๋๊ธฐํ๋ ํ๋ก์ธ์ค ๊ฐ ํ๋ ฅ ๋ฐฉ๋ฒ(IPC) ์ค ํ๋์ธ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(Shared Memory) ๋ฐฉ์๊ณผ ๊ฐ์ด ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค ๊ฐ ์ฃผ์๋ฅผ ๊ณต์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ํฉ์ ๊ผญ ํ์ํ๋ค.
๊ทธ ์ด์ ๋ ์๋ ๋ด์ฉ์ ์์ฐจ์ ์ผ๋ก ์์ฑ๋์ด ์๋ค.
๐น์๊ณ ์์ญ(Critical Section)
์๊ณ ์์ญ์ด๋ ๋ ์ด์์ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํด์๋ ์๋๋ ๊ณต์ ์์์ ์ ๊ทผํ๋ ์ฝ๋์ ์ผ๋ถ๋ฅผ ์๋ฏธํ๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์๋ก ๋ค ์ ์๋ค. ์๋ ์ฝ๋๋ ๋ฎคํ ์ค๋ฅผ ๊ตฌํํ ์์์ด๋ค.
do {
wait(mutex); //์
์ฅ ๊ตฌ์ญ(entry section)
์๊ณ ๊ตฌ์ญ(critical section)
signal(mutex); //ํด์ฅ ๊ตฌ์ญ(exit section)
๋๋จธ์ง ๊ตฌ์ญ(remainder section)
} while (1);
๊ฐ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ์ง์ ํ๋ ค๋ฉด ์ง์ ํ๊ฐ๋ฅผ ์์ฒญํด์ผ ํ๋๋ฐ, ์ด ๋ถ๋ถ์ ์ ์ฅ ๊ตฌ์ญ(entry section)์ด๋ผ๊ณ ํ๋ค. ์๊ณ ์์ญ์์ ํ์ํ ์์ ์ ์ฒ๋ฆฌํ ํ ์๊ณ ์์ญ์ ๋์ค๋ฉด, ์๊ณ ์์ญ์ ํด์ฅํ๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ์ฝ๋์ธ ํด์ฅ ๊ตฌ์ญ(exit section)์ด ์๋ค.
ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์ ๋์์ ์ ๊ทผํ๊ฒ ๋๋ฉด ๊ฒฝ์ ์ํ(Race Condition)๊ฐ ๋์ด ์์์ ์ผ๊ด์ฑ์ด ๊นจ์ง๋ค.
๐น๊ฒฝ์ ์ํ(Race Condition)
๊ฒฝ์ ์ํ(Race Condition)๋ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ๋ณํ์ (Concurrently)์ผ๋ก ์ ๊ทผํ์ฌ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋์์ ์ํํ ๋, ๊ณต์ ์์์ ๋ํ ์ ๊ทผ ์์๋ ์ ๋ ฅ ๋๋ ์กฐ์ ํ์ด๋ฐ์ ๋ฐ๋ผ ์คํ ๊ฒฐ๊ด๊ฐ์ด ๋ฌ๋ผ์ง๋ ํ์์ ๋งํ๋ค.
๐คจ ๊ฒฝ์ ์ํ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ๋?
๊ฒฝ์ ์ํ(Race Condition)์ ๋ง๊ธฐ ์ํด์๋ ์ํธ ๋ฐฐ์ (Mutual Exclusion)๊ฐ ํ์ํ๋ค.
๐น์ํธ ๋ฐฐ์ (Mutual Exclusion)
์ํธ ๋ฐฐ์ (Mutual Exclusion)๋ ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์๊ณ ์์ญ(Critical Section)์ ์ง์ ํ๋ ๊ฒ์ ๋ง๋ ๊ฒ์ ์๋ฏธํ๋ค.
ํ๋์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ๊ทธ ์์์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ๋ง์ผ๋ฉด ๊ฒฝ์ ์ํ(Race Condition) ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋ค.
๐ฅธ ์ํธ ๋ฐฐ์ ๊ธฐ๋ณธ ์ฐ์ฐ (Mutual Exclusion Primitive)
โช๏ธ enterCS() primitive
- ์๊ณ ์์ญ ์ง์ ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ ์์ ์๋์ง ๊ฒ์ฌ
- ์๊ณ ์์ญ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ๋น์ด ์์ ๋๊น์ง ๋๊ธฐ
โช๏ธ exitCS() primitive
- ์๊ณ ์์ญ์ ๋ฒ์ด๋ ๋ ํ์ฒ๋ฆฌ ๊ณผ์
- ์๊ณ ์์ญ์ ๋ฒ์ด๋ฌ์์ ํ์
๐ ์ํธ ๋ฐฐ์ ๊ตฌํ ์กฐ๊ฑด
1. Mutual Exclusion (์ํธ ๋ฐฐ์ )
- ์๊ณ ์์ญ์ ํ๋ก์ธ์ค๊ฐ ์์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ง์ ๊ธ์ง
2. Progress (์งํ)
- ์๊ณ ์์ญ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์ ๊ฒฝ์ฐ ์๊ณ ์์ญ ์ง์ ๊ฐ๋ฅ
3. Bounded waiting (์ ํ/ํ์ ๋๊ธฐ)
- ํ๋ก์ธ์ค์ ์๊ณ ์์ญ ์ง์ ์ ์ ํํ ์๊ฐ ๋ด์ ํ์ฉ๋์ด์ผ ํจ
- ๊ธฐ์ ์ํ(Starvation) ๋ฐฉ์ง: ๋ฌดํ ๋๊ธฐ ๊ธ์ง
๐ค ์ํธ ๋ฐฐ์ ๊ตฌํ ๋ฐฉ๋ฒ
์ํธ ๋ฐฐ์ ๋ฅผ ์ํ ํ๋ก์ธ์ค ๋๊ธฐํ ๋ฐฉ์์ ๋ํ์ ์ผ๋ก ๋ฎคํ ์ค(Mutex), ์ธ๋งํฌ์ด(Semaphore)๊ฐ ์๋ค.
๐น๋ฎคํ ์ค(Mutex)
๋ฎคํ ์ค(Mutex)๋ ์ํธ ๋ฐฐ์ ๋ฅผ ์ํ ํ๋ก์ธ์ค ๋๊ธฐํ ๋ฐฉ์ ์ค ํ๋๋ก ๋ ๊ฐ์ง ์ฐ์ฐ์ ์ ๊ณตํ๋๋ฐ, Locking ๋ฐฉ์์ ์ฌ์ฉํ์ฌ lock์ ๊ฑด ์ค๋ ๋๋ง ์๊ณ ์์ญ์ ๋๊ฐ ๋ ์ ์ผํ๊ฒ unlock ํ ์ ์๋ค.
lock: ํ์ฌ ์๊ณ ์์ญ์ ๋ค์ด๊ฐ ๊ถํ์ ๋ถ์ฌ ๋ฐ๋๋ค. ๋ง์ผ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ์ข ๋ฃํ ๋๊น์ง ๋๊ธฐํ๋ค.(entry section)
unlock: ๋๊ธฐ ์ค์ธ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์๊ณ ์์ญ์ ์ง์ ํ ์ ์๋๋ก ํ์ฌ ์๊ณ ์์ญ์ ๋ชจ๋ ์ฌ์ฉํ์์ ์๋ ค์ค๋ค.(exit section)
๋ค์์ ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ ์ํธ ๋ฐฐ์ ๊ตฌํ ์์ ์ฝ๋์ด๋ค.
do {
wait(mutex); //์
์ฅ ๊ตฌ์ญ(entry section)
์๊ณ ๊ตฌ์ญ(critical section)
signal(mutex); //ํด์ฅ ๊ตฌ์ญ(exit section)
๋๋จธ์ง ๊ตฌ์ญ(remainder section)
} while (1);
๐น์ธ๋งํฌ์ด(Semaphore)
์ธ๋งํฌ์ด(Semaphore)๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ํธ ๋ฐฐ์ ๋ฅผ ์ํ ํ๋ก์ธ์ค ๋๊ธฐํ ๋ฐฉ์ ์ค ํ๋๋ก, ๊ณต์ ์์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ๊ฒ์ด๋ค.
์ธ๋งํฌ์ด ์ข ๋ฅ
โช๏ธ Binary semaphore (์ด์ง)
- S๊ฐ 0๊ณผ 1 ๋ ์ข ๋ฅ์ ๊ฐ๋ง ๊ฐ๋ ๊ฒฝ์ฐ
- ์ํธ ๋ฐฐ์ ๋ ํ๋ก์ธ์ค ๋๊ธฐํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
- ์ด๋ ๋ฎคํ ์ค๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅ
โช๏ธ Counting semaphore (์นด์ดํฐ)
- S๊ฐ 0 ์ด์์ ์ ์ ๊ฐ์ ๊ฐ์ง ์ ์๋ ๊ฒฝ์ฐ
- ์์ฐ์-์๋น์(Producer-Consumer) ๋ฌธ์ ๋ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ
์ธ๋งํฌ์ด ์ฐ์ฐ
์ธ๋งํฌ์ด๋ ํฌ๊ฒ ์ด๊ธฐํ ์ฐ์ฐ S์ P(), V() ์ฐ์ฐ์ด ์๋ค.
๋ชจ๋ ์ฐ์ฐ์ Atomic ์ฐ์ฐ์ด๋ค. ์ฆ, ์ฐ์ฐ์ด ์์ ํ ์ํ๋๊ฑฐ๋ ์ ํ ์ํ๋์ง ์์์ผ ํ๋ค.
โช๏ธ S - ์ธ๋งํฌ์ด ๊ฐ
โช๏ธ P() or wait() - ์ค์ํ ์ฒ๋ฆฌ ๋ถ๋ถ ๋ค์ด๊ฐ๊ธฐ ์์ P() ํจ์๋ฅผ ์คํํด ์ ๊ธ ๊ธฐ๋ฅ ์ํ
โช๏ธ V() or signal() - ์ฒ๋ฆฌ๋ฅผ ๋ง์น๋ฉด V() ํจ์๋ฅผ ์คํํด ์ ๊ธ ํด์
/* P(S) or wait(S) ์ฐ์ฐ */
P(S) { /* ์ ๊ธ */
if (S > 0)
then S <- S - 1; // ์์ ํ๋
else wait on the queue Qs;
}
Critical Section Code /* ์๊ณ ์์ญ */
/* V(S) or signal(S) ์ฐ์ฐ */
V(S) { /* ์ ๊ธ ํด์ */
if (∃ waiting processes on Qs)
then wakeup one of them;
else S <- S + 1; // ์์ ํด์
}
์คํ๋ฝ(Spinlock)์ ์ด์ฉํ ์ธ๋งํฌ์ด ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ ์๋ค.
์ด ๊ฒฝ์ฐ์๋ ์คํ๋ฝ์ ํน์ฑ์ Busy waiting ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
*. Busy waiting(๋ฐ์ ๋๊ธฐ): ์๊ณ ์์ญ์์ ์์ ์ค์ธ ์ค๋ ๋ B๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ A๋ ์๊ณ ์์ญ ๋ค์ด๊ฐ ์ ์์ ๋๊น์ง ์๋ฌด๋ฐ ์์ ์ ํ์ง ์๊ณ ์๊ณ ์์ญ์ ์ ๊ทผ ๊ฐ๋ฅํ์ง ๋ฌดํ ๊ฒ์ฌ๋ง ํ๊ณ ์๋ ์ํฉ
wait(S) {
while (S <= 0); // ์์์ด ์๋ค๋ฉด while ๋ฃจํ๋ฅผ ๋๋ฉฐ ๋๊ธฐ๋ฅผ ํจ.
S--; // ์์์ ํ๋ํจ.
}
signal(S) {
S++; // ์์์ ํด์ ํจ.
}
๐น๋ฎคํ ์ค vs ์ธ๋งํฌ์ด
์ฒซ ๋ฒ์งธ ์ฐจ์ด์ : ํ์ฉ๋๋ ํ๋ก์ธ์ค/์ค๋ ๋ ์
์ธ๋งํฌ์ด: ํ๋์ ํ๋ก์ธ์ค/์ค๋ ๋๋ง ๋ค์ด๊ฐ๊ฒ ํ ์๋ ์๊ณ , ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ๋ค์ด๊ฐ ์๋ ์๋ค.
๋ฎคํ ์ค: locking ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ๋ก์ธ์ค/์ค๋ ๋์ ์ ๊ทผ์ ๋ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ๋์์ ์ฌ์ฉํ ์ ์๊ณ ์ค์ง ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค/์ค๋ ๋๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ค.
๋ ๋ฒ์งธ ์ฐจ์ด์ : ์นด์ดํ ์
๋ฎคํ ์ค: ๋ณดํต 0 ๋๋ 1์ ์ด์ง ์ํ๋ฅผ ๊ฐ์ง๋ฉฐ, lock/unlock ์ํ๋ฅผ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ฐ๋ผ์, ์ด์ง ์ธ๋งํฌ์ด(Binary semaphore)๋ ๋ฎคํ ์ค๋ก ์ฌ์ฉํ ์ ์๋ค.
์ธ๋งํฌ์ด: ๋ณดํต 0 ์ด์์ ์ ์ ๊ฐ์ ๊ฐ์ง๋ฉฐ, ํ์ฉ๋๋ ๋์ ์ ๊ทผ ์ค๋ ๋ ์๋ฅผ ๋ํ๋ด๋ ์ญํ ์ ํ๋ค.
์ธ ๋ฒ์งธ ์ฐจ์ด์ : ์์ ๊ถ
๋ฎคํ ์ค: lock์ ๊ฑด ์ค๋ ๋๊ฐ ๋ค์ lock์ ํด์ ํ๊ธฐ ์ ๊น์ง๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํด๋น ๋ฎคํ ์ค๋ฅผ ์ป์ ์ ์๋ค.
์ธ๋งํฌ์ด: ์์ ๊ฐ๋ ์ด ์๋ค. ์ด๋ค ์ค๋ ๋๋ ์ง ์ธ๋งํฌ์ด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๐น๋ชจ๋ํฐ(Monitor)
์ธ๋งํฌ์ด๋๋ ๋ฎคํ ์ค๋ ์๋ชป ์ฌ์ฉํ์์ ๊ฒฝ์ฐ timing error๊ฐ ๋ฐ์ํ ์ ์๋ค.
timing error๋ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ๋ฐ์ํ๋ค.
1. P()์ V() ์ฐ์ฐ์ ์์๊ฐ ๋ฐ๋์์ ๊ฒฝ์ฐ
2. P()๋ V() ์ค ํ๋๋ผ๋ ๋๋ฝ์ด ๋์์ ๊ฒฝ์ฐ
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ high-level mechanism ์ค ํ๋๊ฐ ๋ชจ๋ํฐ(Monitor)์ด๋ค.
๋ชจ๋ํฐ(Monitor)๋ ์ํธ ๋ฐฐ์ ์ ์กฐ๊ฑด๋ถ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ํ ๋๊ธฐํ ๋๊ตฌ ์ค ํ๋์ด๋ค. ๋ชจ๋ํฐ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ผ๋ถ๋ก์, ๊ณ ๊ธ ์ธ์ด์์ ์ ๊ณต๋๋ ์ถ์ํ๋ ๋๊ธฐํ ๊ฐ๋ ์ด๋ค.
๋ชจ๋ํฐ ํน์ง
1. ๋ชจ๋ํฐ์ ๊ฐ์ฅ ํฐ ํน์ง์ Information hiding(์ ๋ณด ์ํ)์ด๋ค. ์ด ์๋ฏธ๋ ๊ณต์ ๋ฐ์ดํฐ(shared data)๋ ์ค์ง ๋ชจ๋ํฐ ๋ด์ ํ๋ก์ธ์ค๋ค๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
2. ๋ ๋ค๋ฅธ ํน์ง ์ค ํ๋๋ ํ ์์ ์์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
๋ชจ๋ํฐ์ ๋ํ ๊ตฌ์กฐ๋ ๋ค์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํด์ ์ค๋ช
ํ๊ฒ ๋ค.
๐ฅ๏ธ ๋ชจ๋ํฐ ๊ตฌ์ฑ ์์
โช๏ธ Mutual Exclusion Queue / Entry Queue (์ํธ ๋ฐฐ์ ํ, ์ง์ ํ) : ๋ชจ๋ํฐ์ ์ง์ ํ๋ ค๋ ํ๋ก์ธ์ค๋ค์ ํ
โช๏ธ Shared Resource / Shared data (๊ณต์ ์์ / ๊ณต์ ๋ฐ์ดํฐ) : ๋ชจ๋ํฐ ๋ด๋ถ์ ์กด์ฌํ๋ ๊ณต์ ์์, ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
โช๏ธ Procedure (ํ๋ก์์ ) : ๊ณต์ ์์์ ์ ๊ทผํ๊ธฐ ์ํ ์ ๊ทผ ํจ์, ํ ํ๋ก์ธ์ค๊ฐ ํ๋ก์์ ๋ฅผ ์ฌ์ฉํด ๊ณต์ ์์์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ์ ๊ทผ ๋ถ๊ฐ
โช๏ธ Initialization code (์ด๊ธฐํ ์ฝ๋) : ๊ณต์ ์์์ ์ด๊ธฐํํด์ฃผ๋ ์ฝ๋
โช๏ธ Condition variable (์กฐ๊ฑด ๋ณ์) : ๋ชจ๋ํฐ์ ์ ๊ทผํ๋ ํ๋ก์ธ์ค๋ค์ ์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ๋๊ธฐํ ๋ณ์๋ก, wait()๊ณผ signal() ์ฐ์ฐ์ ์ํด์๋ง ์ ๊ทผ ๊ฐ๋ฅ
์๋ ์์ ์ ๊ฐ์ด monitor ๋ธ๋ก ๋ด๋ถ์ ์ ์ธ๋ ํจ์๋ค์ ๋ชจ๋ ๋๊ธฐํ ๋๋ค.
monitor {
function p1(..){}
function p2(..){}
function p3(..){}
}
์ด๋ ๋ชจ๋ํฐ ์์ฒด์ ์ผ๋ก ๋๊ธฐํ ์ฒ๋ฆฌํ๊ธฐ๋ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด ๋ณ์(Condition Variable)๋ฅผ ์ ์ํ์ฌ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ฌํ ์กฐ๊ฑด ๋ณ์(Condition Variable)๋ ๋ชจ๋ํฐ ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
condition x y; // ์กฐ๊ฑด ๋ณ์ ์ ์ธ
x.wait();
y.signal();
์ด๋ ์กฐ๊ฑด ๋ณ์(Condition Variable) ๋ณ๋ก ๋๊ธฐ ํ(waiting queue)๊ฐ ๋ถ๋ฆฌ๋์ด ๋๊ธฐํ๊ฐ ๋๋ค.
x.wait()
- ํ๋ก์ธ์ค๊ฐ ์กฐ๊ฑด x์์ ๋๊ธฐํด์ผ ํ ๋ ํธ์ถ
- ํธ์ถํ ํ๋ก์ธ์ค๋ฅผ ์กฐ๊ฑด x์ ๊ด๋ จ๋ ๋๊ธฐ ํ(waiting queue)์์ ์ผ์ ์ค์ง(block)
y.signal()
- ํ๋ก์ธ์ค๊ฐ ์กฐ๊ฑด y์ ๋ณํ๋ฅผ ๋ฐ๊ฒฌํ์ ๋ ํธ์ถ
- y.wait()์ ์ํด ์ค์ง๋์ด ์๋ ํ๋ก์ธ์ค์ ์ํ์ ๋ค์ ์ฌ๊ฐ
- ์กฐ๊ฑด y์์ ์ค์ง๋ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ: ์ด ์ค ํ๋ ์ ํ
- ์กฐ๊ฑด y์์ ์ค์ง๋ ํ๋ก์ธ์ค๊ฐ ์์ ๊ฒฝ์ฐ: ์๋ฌด ๊ฒ๋ ํ์ง ์์
- ์ผ์ ์ค์ง๋ ํ๋ก์ธ์ค๊ฐ ์ฌ๊ฐ๋๋ฉด, signal์ ๋ณด๋ธ ํ๋ก์ธ์ค๋ ๋ฐ๋์ wait์ ํด์ผ ํจ
๐น๊ต์ฐฉ ์ํ(Deadlock)
๊ต์ฐฉ ์ํ(Deadlock)๋ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์๋ก ์๋๋ฐฉ์ด ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ด์ ๋ ์ด์ ์งํํ์ง ๋ชปํ๋ ์ํ๋ฅผ ๋งํ๋ค.
๐ ๊ต์ฐฉ ์ํ ๋ฐ์ ํ์ ์กฐ๊ฑด
์๋ 4๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ ๊ฒฝ์ฐ ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ๋ค.
1. Exclusive use of resources (๋ฐฐํ์ ์ฌ์ฉ)
- ํ ์๊ฐ์ ํ ํ๋ก์ธ์ค๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ์์
2. Non-preemptible resources (๋น์ ์ ์์)
- ์ ์ ๋นํ๋ฉด ์ดํ ์งํ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์์
- ์ ์ ์ด ๋ถ๊ฐ๋ฅํ ์์
3. Hold and wait(Partial allocation) (์ ์ ๋๊ธฐ, ๋ถ๋ถ ์์ ํ ๋น)
- ํ๋์ ์์์ ์ ์ (hold)ํ ์ํ์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ์์์ ๋๊ธฐ(wait)
4. Circular wait (์ํ ๋๊ธฐ)
- ์์ ์ ์์์ ๋ณด์ ํ ์ฑ๋ก ์๋ก ์๋๋ฐฉ ์์์ ์์ฒญํ ๋ ์ํ ์ฌ์ดํด์ด ์๊ธฐ๋ ํ์
๐ ๊ต์ฐฉ ์ํ ๋ง๋ ๋ฐฉ๋ฒ
1. Deadlock prevention (์๋ฐฉ)
4๊ฐ์ ๊ต์ฐฉ ์ํ ๋ฐ์ ํ์ ์กฐ๊ฑด ์ค ํ๋๋ฅผ ์ ๊ฑฐํ๋ฉด ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ๊ต์ฐฉ ์ํ๊ฐ ์ ๋ ๋ฐ์ํ์ง ์๋๋ค.
- Exclusive use of resources ์กฐ๊ฑด ์ ๊ฑฐ
- ๋ชจ๋ ์์ ๊ณต์ ๋ฅผ ํ์ฉ
- ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅ
- Non-preemptible resources ์กฐ๊ฑด ์ ๊ฑฐ
- ๋ชจ๋ ์์์ ๋ํด ์ ์ ํ์ฉ
- ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅ
- Hold and wait ์กฐ๊ฑด ์ ๊ฑฐ
- ํ์ ์์ ํ ๋ฒ์ ๋ชจ๋ ํ ๋น (Total allocation)
- ์์ ๋ญ๋น ๋ฐ์ → ํ์ํ์ง ์์ ์๊ฐ์๋ ๊ฐ์ง๊ณ ์์
- ๋ฌดํ ๋๊ธฐ ํ์ ๋ฐ์ ๊ฐ๋ฅ
- Circular wait ์กฐ๊ฑด ์ ๊ฑฐ
- Totally allocation์ ์ผ๋ฐํํ ๋ฐฉ์
- ์์๋ค์๊ฒ ์์ ๋ถ์ฌ
- ํ๋ก์ธ์ค๋ ์ค๋ฆ์ฐจ์ ๋ฐฉํฅ์ผ๋ก๋ง ์์ ์์ฒญ ๊ฐ๋ฅ → ์์ ๋ญ๋น ๋ฐ์
2. Deadlock avoidance (ํํผ)
Deadlock avoidance๋ ์์คํ ์ํ๋ฅผ ๊ณ์ ๊ฐ์ํ๋ฉด์ deadlock ์ํ๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์ ํ ๋น ์์ฒญ์ ๋ณด๋ฅํ๋ ๊ฒ์ ๋งํ๋ค.
์ฆ, ์์คํ ์ ํญ์ safe state๋ก ์ ์งํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
โช๏ธ safe state: ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃ๊ฐ ๊ฐ๋ฅํ ์ํ, deadlock ์ํ๊ฐ ๋์ง ์์ ์ ์์์ ๋ณด์ฅ
โช๏ธ unsafe state: deadlock ์ํ๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์์, ๋ฐ๋์ ๋ฐ์ํ๋ค๋ ์๋ฏธ๋ ์๋
Deadlock avoidance ๊ฐ์
- ํ๋ก์ธ์ค ์๊ฐ ๊ณ ์ ๋จ
- ์์์ ์ข ๋ฅ์ ์๊ฐ ๊ณ ์ ๋จ
- ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ๋ ์์ ๋ฐ ์ต๋ ์๋์ ์๊ณ ์์
- ํ๋ก์ธ์ค๋ ์์ ์ฌ์ฉ ํ ๋ฐ๋์ ๋ฐ๋ฉ
๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ
- Dijkstra's algorithm - Banker's algorithm
- Habermann's algorithm
์์ ์์ฒญ์ ๋ํ safe state์ ํ์ธํ๊ณ ์์ ํ ๊ฒฝ์ฐ์๋ง ์์์ ํ ๋นํ๋ค.
์ฆ, safe sequence(์์ ์ํ๋ฅผ ์ ์งํ๋ ์์ ํ ๋น ์์)๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ํ ๋นํ๋ค.
3. Deadlock detection and deadlock recovery (ํ์ง ๋ฐ ๋ณต๊ตฌ)
Deadlock์ ํ์งํ๊ณ , deadlock์ธ ๊ฒฝ์ฐ ํด๊ฒฐํ๋ ๊ณผ์
Deadlock detection
- Deadlock ๋ฐฉ์ง๋ฅผ ์ํ ์ฌ์ ์์ ์ ํ์ง ์์ (Deadlock ๋ฐ์ ๊ฐ๋ฅ)
- ์ฃผ๊ธฐ์ ์ผ๋ก deadlock ๋ฐ์ ํ์ธ
- ์์คํ ์ด deadlock ์ํ์ธ๊ฐ?
- ์ด๋ค ํ๋ก์ธ์ค๊ฐ deadlock ์ํ์ธ๊ฐ?
- Resource Allocation Graph (RAG) ์ฌ์ฉํ์ฌ deadlock ํ์ง
- ์ฃผ์ด์ง RAG์์ ๊ฐ์ (edge)๋ฅผ ํ๋์ฉ ์ง์๊ฐ๋ ๋ฐฉ๋ฒ
- ๋ชจ๋ ๊ฐ์ ์ด ์ ๊ฑฐ๋ ๊ฒฝ์ฐ deadlock์ ๋น ์ง ํ๋ก์ธ์ค๊ฐ ์๋ ๊ฒ
- ์ง์ธ ์ ์๋ ๊ฐ์ ์ด ์กด์ฌํ๋ฉด ํ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ deadlock ์ํ
Deadlock recovery
- Process termination(ํ๋ก์ธ์ค ์ข ๋ฃ): Deadlock ์ํ์ธ ํ๋ก์ธ์ค ์ค ์ผ๋ถ ์ข ๋ฃ
- Resource preemption(์์ ์ ์ )
- Deadlock ์ํ ํด๊ฒฐ์ ์ํด ์ ์ ํ ์์ ์ ํ
- ํด๋น ์์์ ๊ฐ์ง๊ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃ์ํด
- Deadlock ์ํ๊ฐ ์๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์๋ ์์
- ํด๋น ํ๋ก์ธ์ค๋ ์ดํ ์ฌ์์๋จ
๋ด ๋ธ๋ก๊ทธ: [์ด์์ฒด์ 3๊ธฐ] 2์ฃผ์ฐจ ์คํฐ๋ ์ ๋ฆฌ
https://nesoy.github.io/articles/2018-09/OS-Concurrency-Parallelism
https://memostack.tistory.com/49
https://www.robotstory.co.kr/raspberry/?vid=149
https://ko.wikipedia.org/wiki/%EC%9E%84%EA%B3%84_%EA%B5%AC%EC%97%AD
https://ko.wikipedia.org/wiki/%EA%B2%BD%EC%9F%81_%EC%83%81%ED%83%9C
https://iredays.tistory.com/125
https://yoongrammer.tistory.com/63
https://www.baeldung.com/cs/concurrency-vs-parallelism
https://yoongrammer.tistory.com/60
https://benlee73.tistory.com/11
https://velog.io/@octo__/%EB%AE%A4%ED%85%8D%EC%8A%A4Mutex
https://hpckoreatech.notion.site/Operating-System-CSE132-2023-b8aa98fe69cc4a8cb950051a04bc35ca
https://yonghwankim-dev.tistory.com/323
https://hyunah-home.tistory.com/entry/Monitor%EB%9E%80
https://coding-gongbu.tistory.com/47
https://blog.naver.com/kgr2626/222118655167
https://velog.io/@holim0/6.-%EA%B5%90%EC%B0%A9-%EC%83%81%ED%83%9CDeadlock
'CS > JSCODE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ 3๊ธฐ] 5์ฃผ์ฐจ ์คํฐ๋ ์ ๋ฆฌ (0) | 2024.02.05 |
---|---|
[์ด์์ฒด์ 3๊ธฐ] 4์ฃผ์ฐจ ํผ๋๋ฐฑ (0) | 2024.02.02 |
[์ด์์ฒด์ 3๊ธฐ] 3์ฃผ์ฐจ ํผ๋๋ฐฑ (0) | 2024.01.26 |
[์ด์์ฒด์ 3๊ธฐ] 3์ฃผ์ฐจ ์คํฐ๋ ์ ๋ฆฌ (0) | 2024.01.22 |
[์ด์์ฒด์ 3๊ธฐ] 2์ฃผ์ฐจ ํผ๋๋ฐฑ (0) | 2024.01.19 |