๐ข chap14. ๋์ํ
โญ 14.1 ๋์์ฑ ๋ฌธ์
โ ๋์์ฑ ๋ฌธ์
???๋์์ฑ์ ๋ ํ๊ตฌํ๋ค ๋ณด๋ฉด ๊ณผ์ฐ ์ด๋ค ์ข ๋ฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น???
- ๋ฐ์ํ ์ ์๋ ๋์์ฑ ๋ฌธ์ ์ ๋ํ ์ฌ๋ฌ ์ ํ
1 ๊ณ ์ ํ ๋์์ฑ ๋ฌธ์ intrinsic concurrency issue
- ๋์์ฑ ์ ์ด ๋ฉ์ปค๋์ฆ์ด ์์ ๋๋ง ์กด์ฌํ๋ ๋์์ฑ ๋ฌธ์
- ์๋ก ๋ค๋ฅธ ์ธํฐ๋ฆฌ๋น์ด ์ ์ฒด ์ํ๋ฅผ ๋ค๋ฅด๊ฒ ๋ง๋ค ๋ ๋ฐ์ํฉ๋๋ค.
- ๋ชจ๋ ๋์ ์์คํ ์ ๋ณธ์ง์ ์ผ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ โ๊ณ ์ โ
- ์ด ๋ฌธ์ ๋ ํผํ ์ ์์ผ๋ฉฐ ์ ์ด ๋ฉ์ปค๋์ฆ์ ์ด์ฉํด ๋ค๋ฃจ์ด์ผ ํฉ๋๋ค
- ๋๊ธฐํ ์ดํ ๋ฌธ์ post-synchronization issue
- ๋์์ฑ ์ ์ด ๊ธฐ์ ์ ์ฌ์ฉํด์ ๋ฐ์ ํ๋ ๋ฌธ์
- ๋์์ฑ ์ ์ด ๊ธฐ์ ๋ก ์ธํ ๋ฌธ์ ๋ ์์ ์ฌํญ์ด ์ ์ฉ๋ ์ดํ์๋ง ๋ฐ์ํฉ๋๋ค.
- ๋์์ฑ ๋ฌธ์ ๋ฅผ ๊ณ ์น ๋ ์์ฑ ๋ฐ ๊ทผ๋ณธ ์์ธ์ด ์์ ํ ๋ค๋ฅธ ์๋ก์ด ๋ฌธ์ ๊ฐ ์ผ๊ธฐ๋ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค.
- ๋๊ธฐํ ์ดํ ๋ฌธ์ post-synchronization issue
โ 1๋ฒ๊ณผ 2๋ฒ ๋ฌธ์ ์ ์์
- ์๋ฅผ ๋ค์ด ๋์ผํ ๊ณต์ ๋ฐ์ดํฐ ์์์ ๋ชจ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ ๊ทผ ๊ถํ์ ๊ฐ๋ ์์ ์ด ๋ง๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
- ์ด ์์ ๋ค์ ์ฌ๋ฌ ๋ฒ ์คํํ๋ฉด ๋ค๋ฅธ ์์ ์ ์ํด ์์ฑํ ์๊ณ ๋ฆฌ๋ฌ์ด ์์๋๋ก ์๋ํ์ง ์์ต๋๋ค.
- ์ด๋ฌํ ํ์์ ๋ฌด์์๋ก ๋ฐ์ํ๋ ์ฐ์ฐํ ์ถฉ๋ ๋๋ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ก ์ด์ด์ง๋๋ค.
- ์ด๋ ์ถฉ๋ ๋ฐ ์๋ชป๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌด์์๋ก ๋ฐ์ํ๊ณ ์์ธกํ ์ ์์ผ๋ฏ๋ก, ๋์์ฑ ๋ฌธ์ ๋ผ๊ณ ํฉ๋ฆฌ์ ์ผ๋ก ์ถ์ ํ ์ ์์ต๋๋ค.
โ> ๊ณ ์ ํ ๋์์ฑ ๋ฌธ์ intrinsic concurrency issue
- ์๊ณ ๋ฆฌ๋ฌ์ ๊ณ์ ๋ถ์ํด์ ๋ง์นจ๋ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํฉ๋๋ค. ๊ณต์ ๋ฐ์ดํฐ ์์์ ๋ฐ์ดํฐ ๊ฒฝ์์ด ๋ฐ์ ํ์ต๋๋ค.
- ์ด์ ๊ณต์ ๋ฐ์ดํฐ ์์์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๋ ํด๊ฒฐ ๋ฐฉ์์ ๋ ์ฌ๋ ค์ผ ํฉ๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ตฌํํด ์์คํ ์ ๋ค์ ์์ํ๋ฉด, ๋๋๊ฒ๋ ์ผ๋ถ ์์ ๋ค์ด ๋ฐ์ดํฐ ์์์ ์์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ๋์์์ ์๊ฒ ๋ฉ๋๋ค.
- ๊ธฐ์ ์ ์ผ๋ก ์ด๋ฌํ ์์ ๋ค์ ๊ธฐ์ ์ํ starve๋ผ๊ณ ํฉ๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋์ ํ ๊ฒฐ๊ณผ, ์ฒซ ๋ฒ์งธ ๋ฌธ์ ์๋ ์์ ํ ๋ค๋ฅธ ์ฑ๊ฒฉ์ ์ง๋ ์๋ก์ด ๋ฌธ์ ๊ฐ ๋ํ๋ฌ์ต๋๋ค.
โ> ๋๊ธฐํ ์ดํ ๋ฌธ์ post-synchronization issue
โญ 14.2 ๊ณ ์ ํ ๋์์ฑ ๋ฌธ์
โ ๊ณ ์ ํ ๋์์ฑ ๋ฌธ์
์ธํฐ๋ฆฌ๋น์ ๊ทธ ์์ฒด๋ก๋ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค!
ํ์ง๋ง ์ด๋ค ๊ฒฝ์ฐ ์ธํฐ๋ฆฌ๋น(์์ฑ)์ ์ง์ผ์ผ ํ ์ผ๋ถ (๋ถ๋ณํด์ผ ํ๋)์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๊ฒ๋๊ณ ๋ฐ๋ก ์ด๋ ์ธํฐ๋ฆฌ๋น์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค
โ> ๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ฆฌ๋ ์ ์ฝ ์กฐ๊ฑด์ด ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ ๋ถ๋ณํจ์ ์ ์งํ๋๋ก ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ด๋ผ๋
1
์ ์ด ๋ฉ์ปค๋์ฆ์ ๋์
ํด์ผ ํ๋ค!
โ ๋ถ๋ณ ์ ์ฝ์กฐ๊ฑด
๋ถ๋ณ ์ ์ฝ ์กฐ๊ฑด invariant constraint
- ์กฐ๊ฑด ๋ฐ ๊ธฐ์ค์ ๋ํ ๋ชฉ๋ก์ ํตํด ํํ๋๋ฉฐ ๋์ ์์คํ ์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ํด๋น ํ ์ ์๋ ์ ์ฝ์กฐ๊ฑด
- ๋์ ์์คํ ์์ ๋ฐ์ํ๋ ์ธํฐ๋ฆฌ๋น์ ๊ธฐ์กด์ ์ ์๋ ๋ถ๋ณ ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค
- ์์คํ ์ ๋ถ๋ณ ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ์ธํฐ๋ฆฌ๋น์ด ์กด์ฌํ ๋ ์์คํ ์ ๊ฒฝ์ ์ํ๊ฐ ๋ฐ์ํ๋ค๊ณ ํ๋ค.
- [์ฝ๋๋ฐ์ค 14-1]์ [์์ 14-1]์ ๋จ ํ๋์ ๋ถ๋ณ ์ ์ฝ ์กฐ๊ฑด์ด ์์ผ๋ฉฐ,
- ๊ณต์ ๋ ์นด์ดํฐ ๋ณ์์๋ ์ต์ข ์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฐ์ด ์์ด์ผ ํ๊ณ ์ด ๊ฐ์ 3์ด์ด์ผ ํฉ๋๋ค.
- ์ด ์์ ์๋ ์ธ ๊ฐ์ ๋์ ์์ ์ด ์์ต๋๋ค. ๋ชจ๋ ์์ ์ ์นด์ดํฐ๋ฅผ 1์ฉ ์ฆ๊ฐํด์ผ ํ๋ฉฐ ์ด๋ [์ฝ๋ ๋ฐ์ค 14-1]์ ๋ชฉํ๋ก์ง์ ๋๋ค.
์ฝ๋ ๋ฐ์ค 14-1 [์์ 14-1] ํ๋์ ๊ณต์ ๋ณ์๋ก ์์ ํ๋ ์ธ ๊ฐ์ ๋์ ์์ ์ด ์๋ ์์คํ
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
๋์ ์์คํ
{
๊ณต์ ์ํ {
์นด์ดํฐ : ์ ์ = 0
}
์์
T1 {
A: ์ ์
1.1. A = ์นด์ดํฐ
1.2. A = A + 1
1.3. ์นด์ดํฐ = A
}
์์
T2 {
B: ์ ์
2.1. B = ์นด์ดํฐ
2.2. B= B + 1
2.3. ์นด์ดํฐ = B
}
์์
T3 {
A: ์ ์
3.1. A = ์นด์ดํฐ
3.2. A = A + 1
3.3. ์นด์ดํฐ = A
}
}
- A, B ๋ผ๋ ๊ฐ์ ๊ฐ์ ๊ฐ๋ ์ง์ญ๋ณ์๋ ํด๋น ๋ณ์๋ฅผ ์์ ํ ์์ ์ ํ์ ๋์ด์ผ ํฉ๋๋ค.
- ์์ ์ ๊ณต์ ๋ ๋ณ์์์ ์ง์ ์๋ํ์ง ์์ผ๋ฉฐ ์์ ๋ค์ ์ค์ง ๊ณต์ ๋ ๋ณ์ซ๊ฐ์ ์ฝ๊ฑฐ๋ ๋ณ๊ฒฝํ ์๋ง ์์ต๋๋ค.
[์ฝ๋ ๋ฐ์ค 14-1]์ ์์ ๋ ๊ฒฝ์ ์ํ๊ฐ ์ด๋ป๊ฒ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ผ์ผํค๋์ง ๋ณด์ฌ์ค๋๋ค. ๊ณต์ ๋ ์นด์ดํฐ ๋ณ์์์ ๊ฐ 2๋ฅผ ๋์ถํ๋ ์ธํฐ๋ฆฌ๋น์ ์ฐพ๋ ๊ฒ์ ์ฝ์ต๋๋ค.
์ฝ๋ ๋ฐ์ค 14-2 [์ฝ๋ ๋ฐ์ค 14-1]์ ๋ํด ์ ์๋ ๋ถ๋ณ ์ ์ฝ ์กฐ๊ฑด์ ์๋ฐํ๋ ์ธํฐ๋ฆฌ๋น
- [์ฝ๋ ๋ฐ์ค 14-1]์ ๋ณด์ด๋ ๋ช ๋ น์ด 2.3๊ณผ 3.3์ ๋ ๋ค ๊ณต์ ๋ ์นด์ดํฐ ๋ณ์์ ๋ด๋ถ์ ๊ฐ 2๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋ฌํ ์ํฉ์ ๋ฐ์ดํฐ ๊ฒฝ์์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฒ์๋ C๋ก ์์ฑ๋ ์ฝ๋์์ ์ธ๊ทธ๋ฉํ ์ด์ ์ค๋ฅ๋ฅผ์ ์ผ์ผํค๋ ์ํฉ์ ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
๋์ ์์คํ
{
๊ณต์ ์ํ {
char *ptr = NULL; // ํ ๊ณต๊ฐ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ
// ๊ฐ๋ฆฌ์ผ์ผ ํ๋
// ๊ณต์ ๋ char ํฌ์ธํฐ๋
// ๊ธฐ๋ณธ๊ฐ์ด null์ด ๋ฉ๋๋ค.
}
์์
P{
1.1. ptr = (char*)malloc(10 * sizeof(char));
1.2. strcpy(ptr, "Hello!");
1.3. printf("%s\n", ptr);
}
์์
Q{
2.1. free(ptr);
2.2. ptr = NULL;
}
}
์ด ์์ ์ ์ถฉ๋์ ์ผ์ผํค๋ ์ธํฐ๋ฆฌ๋น์?
๋ช ๋ น์ด 2.1์ด ๋จผ์ ์คํ๋๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
โ ptr์ด null์ด๋ฏ๋ก ์์ Q์์ ์ถฉ๋์ด ๋ฐ์ํ๊ฒ ์ง๋ง ์์ P๋ ๊ณ์๋ฉ๋๋ค.
โ ๊ทธ ๊ฒฐ๊ณผ ๋ ์์ (์ค๋ ๋) ๋ชจ๋ ๊ฐ์ ํ๋ก์ธ์ค์ ์ํ๋ ๋ฉํฐ์ค๋ ๋ฉ ์ฌ์ฉ ์ฌ๋ก์์, ๋ ์์ ์ ํฌํจํ๋ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค. ์ถฉ๋์ ์ฃผ์ ์์ธ์ null ํฌ์ธํฐ๋ฅผ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค๋ฅธ ์ธํฐ๋ฆฌ๋น์ ๋ช ๋ น์ด 1.1 ์ดํ 1.2 ์ด์ ์ 2.2๊ฐ ์คํ๋ ๋์ ๋๋ค.
โ ์ด๋ ์์ P์์ ์ถฉ๋์ด ๋ฐ์ํ์ง๋ง, ์์ Q๋ ๋ฌธ์ ์์ด ์๋ฃ๋ฉ๋๋ค. ์ด ์ถฉ๋์ ์ฃผ๋ ์ด์ ๋ null ํฌ์ธํฐ๋ฅผ ์ญ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๊ฒฝ์ํ์ง๊ธฐ race detector
- ๊ฒฝ์ํ์ง๊ธฐ race detector๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ๋น๋๊ฐ ๋ฎ์ ์ฝ๋์ ๋ถ๊ธฐ์์ ๊ธฐ์กด์ ๊ฒฝ์ ์ํ๋ฅผ ์ฐพ์๋ด์ด ๊ฒฝ์ ์ํ๋ฅผ ์ ๋ฐํ๋ ์ธํฐ๋ฆฌ๋น์ ์๋ณํ ์ ์์ต๋๋ค
- ์ ์ ๊ฒฝ์ ํ์ง๊ธฐ static race detector๋ ์์ค ์ฝ๋๋ฅผ ์ดํด๋ณด๊ณ ๊ด์ฐฐํ ๋ช ๋ น์ด์ ๊ธฐ๋ฐํด ๋ชจ๋ ์ธํฐ๋ฆฌ๋น์ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
- ๋์ ๊ฒฝ์ ํ์ง๊ธฐ dynamic race detector๋ ๋จผ์ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ๋์ ๊ฒฝ์ ์ํ๊ฐ ์์ฌ๋๋ ์ฝ๋๊ฐ ์คํ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๊ฒฝ์ ์ํ๊ฐ ๋ฐ์ํ ์ํ์ ์ค์ด๊ณ ์ ๋ ๋ค ๊ฒฐํฉํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฒฝ์์ํ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ ๊ทผํ ๋ ๊ณต์ ๋ฐ์ดํฐ์ ๋ํ ์คํ์์์ ๋ฐ๋ผ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ์ํฉ ์๊ณ ๊ตฌ์ญ critical section์ด๋ผ๋ ์์ ๋ช ๋ น์ด ์งํฉ์ด ์์๋๋ก ์คํ๋์ง ์์ ๋๋ง ๋ฐ์ํ๋ค ๊ฒฝ์์ํ ํด๊ฒฐ์ ์ํด์๋ ๋๊ธฐํ ๋งค์ปค๋์ฆ์ ๋์ ํ์ฌ์ผํ๋ค!
โ ๋ชจ๋ ๊ฐ๋ฅํ ์ธํฐ๋ฆฌ๋น์ ์ฃผ์ด์ง ์์๋ฅผ ๋ฐ๋ฅด๊ฒ ํ๋ค.
โ ๋ฐ์ดํฐ ๊ฒฝ์๊ณผ ๊ฒฝ์์ํ์ ์ฐจ์ด์
๋ฐ์ดํฐ ๊ฒฝ์์ด ์กด์ฌํ๋ค.
- ์ผ๋ถ ์ธํฐ๋ฆฌ๋น์ด ๊ณต์ ์ํ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ํ ์ ์ฝ ์กฐ๊ฑด์ ์๋ฐํ ๋, ๊ณต์ ์ํ์ ๋ํ ๋ฐ์ดํฐ ๊ฒฝ์์ด ์กด์ฌํ๋ค๊ณ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ฒฝ์์ด ๋ฐ์ํ๋ ค๋ฉด ์๋ก ๋ค๋ฅธ ์์ ๊ฐ์ ๊ณต์ ์ํ๊ฐ ์์ด์ผ ํ๊ณ , ๊ทธ ๊ณต์ ์ํ๋ ๋ฐ๋์ ์ต์ํ ํ๋ ์ด์์ ์์ ์ด ์์ (์์ฑ)ํ ์ ์์ด์ผ ํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ํผ์ํ ์ ์๊ฒ๋๋ค
์ฝ๋ ๋ฐ์ค 14-7 [์์ 14-5] ์ฝ๊ธฐ ์ ์ฉ ๊ณต์ ์ํ๊ฐ ์๋ ๋์ ์์คํ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
๋์ ์์คํ
{
๊ณต์ ์ํ {
X: ์ ์(์ฝ๊ธฐ ์ ์ฉ)=5
}
์์
P{
A: ์ ์
1.1. A = X
1.2. A = A + 1
1.3. A๋ฅผ ์ถ๋ ฅ
}
์์
0{
2.1. X๋ฅผ ์ถ๋ ฅ
}
์์
R{
B: ์ ์
3.1. B = X + 1
3.2. B=B+ 1
3.3. B๋ฅผ ์ถ๋ ฅ
}
}
- ์ด [์์ 14-5]์์ ๋ถ๋ณ ์ ์ฝ ์กฐ๊ฑด์ด X์ ๋ํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ณ 5, 6, 7์ ์ถ๋ ฅํ๋ ๊ฒ์ด ๋ผ๊ณ ๊ฐ์ ํฉ์๋ค.
- ์๋ก ๋ค๋ฅธ print ๋ช ๋ น์ด ์ฌ์ด์๋ ์๊ฒฉํ ์์๊ฐ ํ์ํ๋ฏ๋ก ๊ฒฝ์ ์ํ๊ฐ ์๊น๋๋ค.
- ํ์ง๋ง ๊ณต์ ๋ณ์๊ฐ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฏ๋ก ๋ฐ์ดํฐ ๊ฒฝ์์ ์์ต๋๋ค. ์ฐธ๊ณ ๋ก ๋ช ๋ น์ด 1.2์ 3.2๋ ์ ์ ์ ์ง์ญ ๋ณ์๋ง์ ์์ ํ ์ ์์ผ๋ฉฐ, ๋ฐ๋ผ์ ๊ณต์ ์ํ๋ฅผ ์์ ํ๋ค๊ณ ๋ณผ ์๋ ์์ต๋๋ค.
โ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด๋ ๊ฐ๋จํ ๋งํด ๋ชจ๋ ์์ ์ด ์ธ์ ๋ ๊ณต์ ์ํ์ ์ต์ ๊ฐ์ ์ฝ์ ์ ์์ด์ผ ํ๋ค๋ ์๋ฏธ์ ๋๋ค.
- ์ฆ, ๊ณต์ ์ํ๋ฅผ ๊ณ์ ํด์ ์์ ํ๊ธฐ ์ ์ ๊ณต์ ์ํ์ ์ ๋ฐ์ดํธ ๋ด์ญ์ ์ธ์งํ ์ ์์ด์ผ ํฉ๋๋ค.
[์ฝ๋ ๋ฐ์ค 14-6]์ ๋ณด์ด๋ [์์ 14-4]๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์กฐ๊ฑด์ ์ค๋ช ํฉ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
๋์ ์์คํ
{
๊ณต์ ์ํ {
X: ์ ์=2
}
}
์์
P{
A: ์ ์
1.1. A = X
1.2. A = A+ 1
1.3. X = A
}
์์
Q{
}
B: ์ ์
2.1. B = X
2.2. B = B+3
2.3. X = B
}
}
- ๋ค์ ์ธํฐ๋ฆฌ๋น์ ๊ณ ๋ คํด๋ด ์๋ค. ๋จผ์ ๋ช ๋ น์ด 1.1์ด ์คํ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ X์ ๋ํ ๊ฐ์ ์ง์ญ ๋ณ์ A๋ก ๋ณต์ ๋ฉ๋๋ค.
- ํ์ง๋ง ์์ P๊ฐ ๊ทธ๋ฆฌ ์ด์ด ์ข์ง ๋ชปํด์ ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ๊ณ CPU๋ ์์ Q์ ํ ๋น๋ฉ๋๋ค.
- ์ด์ด์ ๋ช ๋ น์ด 2.1์ด ์คํ๋๋ฉฐ X์ ๋ํ ๊ฐ์ ์ง์ญ ๋ณ์ B๋ก ๋ณต์ ๋ฉ๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ๋ณ์ A์ B๋ ๋ชจ๋ ๊ฐ์ ๊ฐ์ธ 2๋ฅผ ๊ฐ์ต๋๋ค.
- ์ด์ ์์ Q๋ ์ด ์ข๊ฒ๋ ์คํ์ ๊ณ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ช ๋ น์ด 2.2๊ฐ ์คํ๋๋ฉฐ B๋ 5๊ฐ ๋ฉ๋๋ค.
- ๊ณ์ํด์ ์์ Q๋ 5๋ฅผ ๊ณต์ ์ํ X์ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ X๋ 5๊ฐ ๋ฉ๋๋ค.
- ์ด์ ๋ค์ ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ๊ณ , CPU๋ ๋ค์ ์์ P์ ํ ๋น๋ฉ๋๋ค. ์ด์ด์ ๋ช ๋ น์ด 1.2๋ฅผ ์ํํฉ๋๋ค. ์ด ์ง์ ์ด ๋ฐ๋ก ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์ ๋์น ๊ณณ์ ๋๋ค. โโP๊ฐ ์ด์ ์ 2๊ฐ์ ์ฌ์ฉ!
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑ์ํค๋ ค๋ฉด ๋ช ๋ น์ด 1.1์ด ๋ช ๋ น์ด 2.3 ๋ฐ๋ก ๋ค์ ์คํ๋ ์ ์๋๋ก ํ๊ฑฐ๋, ๋ช ๋ น์ด 2.1์ด ๋ช ๋ น์ด 1.3 ์งํ์๋ง ์คํ๋๋๋ก ํด์ผ ํฉ๋๋ค.
โญ 14.3 ๋๊ธฐํ ์ดํ ๋ฌธ์ - CH
โ ๋ณธ์ง์ ์ธ ๋์์ฑ ๊ด๋ จ ๋ฌธ์ (intrinsic concurrency-related issues)
โ ์๋ก์ด ๊ณ ์ ํ ๋ฌธ์ : ์ฌ๋ฌ ํ๋ก์ธ์ค/์ฐ๋ ๋๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ์ ๊ทผ์ ํ๋ ๊ฒฝ์ฐ
- ์ ์ด ๋งค์ปค๋์ฆ์ ์ ์ฉํ ๊ฒฐ๊ณผ ๋ค๋ฅธ ๊ฒฝ์ ์ํ๋ ๋ฐ์ดํฐ ๊ฒฝ์์ด ์ผ์ด๋๋ ํ์ (๊ณ ์ ์ ์ธ ๋ฌธ์ )
- 1๊ฐ์ ๊ฐ์ฒด๊ฐ 2๊ฐ์ ์ฐ๋ ๋๋ฅผ ์ ๊ทผ ํ๋ ๊ฒฝ์ฐ (having different race conditions or data races. Control)
- ์๋ก์ด ์ธํฐ๋ฆฌ๋น์ ๋์ ํ๋ฉด์ ์๊ธฐ๋ ๊ฒฝ์ฐ
- ์๋ก์ด ๊ฒฝ์ ์ํ๋ ๋ฐ์ดํฐ ๊ฒฝ์์ด ๋ฐ์ํ ๊ฒฐ๊ณผ
- ํด๊ฒฐ๋ฒ : ๋๊ธฐํ ๊ธฐ์ ์ ํ๋ก๊ทธ๋จ์ ๋ก์ง์ ๋ฐ๋ผ ์ดํผ๊ณ ์กฐ์
โ ๊ธฐ์ ์ํ (Starvation): ๋์ ์์คํ ์ ์๋ ์์ ์ด ์ค๋ซ๋์ ๊ณต์ ์์์ ์ ๊ทผํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
- ํน์ ํ๋ก์ธ์ค๊ฐ ์ํ ๊ฐ๋ฅ ์ํ์์๋ ๋ถ๊ตฌํ๊ณ , ๋งค์ฐ ์ค๋ ์๊ฐ๋์ ์ค์ผ์ค๋ง ๋์ง ๋ชปํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์ ์ด ๊ธฐ์ ์ํ์ธ ์์ ์ ์์กดํ๋ค๋ฉด ๋ค๋ฅธ ์์ ์ญ์ ๊ธฐ์ ์ํ๊ฐ ๋ฉ๋๋ค.
โ ๊ต์ฐฉ ์ํ (Deadlock):๋์์ ์์คํฌ์ ๋ชจ๋ ์์ ์ด ์๋ก๋ฅผ ๋๊ธฐํ๋๋ผ ๋ชจ๋ ์์ ์ด ์งํ๋์ง ์๋ ๊ฒฝ์ฐ** (์ต์ ์ ๊ฒฝ์ฐ์ด๋ค.)**
- ํน์ ํ๋ก์ธ์ค๊ฐ ์ํ ๊ฐ๋ฅ ์ํ์์๋ ๋ถ๊ตฌํ๊ณ , ๋งค์ฐ ์ค๋ ์๊ฐ๋์ ์ค์ผ์ค๋ง ๋์ง ๋ชปํ ๊ฒฝ์ฐ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ์์ ์ ์ ๋ฅผ ์์ฒญํ ๋ ๋ฐ์ (์์คํฌ ํผ์์ํ์ ๊ฐ์ ์ํฉ์ด ๋๋ค.)
- ๋ค๋ฅธ ์์ ์ด ๊ณต์ ์์์ด๋ ์ ๊ธด ๊ฐ์ฒด๋ฅผ ํด์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ฌดํ ๋ฃจํ์ ๋น ์ง๊ฒ ๋๋ฉด์ ๋ฐ์ํฉ๋๋ค.
- ๋ฐ๊ต์ฐฉ ์ํ (semi-deadlock) :์์ ์ค ์ผ๋ถ, ํ๋ ๋๋ ๋ ๊ฐ์ ์์ ๋ง ๋ฉ์ถฐ ์๊ณ ๋ค๋ฅธ ์์ ์ ๊ณ์ํ ์ ์๋ ์ํฉ๋ ์ข ์ข ์์ต๋๋ค.
โ ์ฐ์ ์์ ์ญ์ :๋๊ธฐํ ๊ธฐ์ ์ ๋์ ํ ์ดํ, ๊ณต์ ์์์ ์ฌ์ฉํ ๋ ๋์ ๊ถํ์ ๊ฐ๋ ์์ ์ด ์ฐ์ ์์๊ฐ ๋ฎ์ ์์ ๋ค๋ก ๋ธ๋กํน๋ ๊ฒฝ์ฐ
- ์ฐ์ ์์ ์ญ์ priority inversion์ด ๋ฐ์ํฉ๋๋ค. ์๋ชป ๊ตฌํ๋ ๋๊ธฐํ ๊ธฐ์ ๋๋ฌธ์ ๋ฐ์ํ ์ ์๋ ๋ถ์์ ์ธ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ํด๋นํฉ๋๋ค.
- ๊ธฐ์ ์ํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด์์ฒด์ ์ ๊ณต์ ์์ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค๋ค.
- ํ์ง๋ง ๊ธฐ์ ์ํ๋ ๊ฐ๋ฐ์์ ๋งค์ปค๋์ฆ์ผ๋ก ์ธํด ๋ฐ์ํ๋ค. (๋ฐ์ดํฐ์ ๊ฒฝ์์ด ์ผ์ด๋์ง ์๋๋ก ์ธํฐ๋ฝํธ ๊ฑธ์ด์ฃผ๊ฑฐ๋ ์๋ก์๊ฒ ์ ๊ธ์ ๋ฃ์ด์ค๋ค)
- ๋๋ถ๋ถ์ ๊ต์ฐฉ ์ํ๋ ํน์ ํ๋ก์ธ์ค/์ฐ๋ ๋ ์์ ์ ์๋ก๊ฐ ์ ๊ธ์ ํ์ด์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค
- ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์์ํ๋ณด๋ค ๊ต์ฐฉ ์ํ๊ฐ ๋ ๋ง์ด ์ผ์ด๋๋ค๊ณ ํฉ๋๋ค.
โญ 14.4 ๋๊ธฐํ ๊ธฐ์ - CH
โ Intrinsic concurrency issues (๋ณธ์ง์ ์ธ ๋๊ธฐํ ๋ฌธ์ ์ ) ๊ฒฝ์์ํ ๊ทน๋ณต ๊ธฐ์
- ๊ฐ๊ฐ ๊ณ ์ ๋ถ๋ณ์ ์ ์ฝ์กฐ๊ฑด์ด ์์ผ๋ฉฐ (์ ์ด ๋ฉ์ปค๋์ฆ์ ์ผ๋ถ ์ธํฐ๋ฆฌ๋น์ด ์์คํ ์์ ์ผ์ด๋๋ ๋ฌธ์ )
- ๊ณต์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ํ๋์ ํ๋ก์ธ์ค/์ค๋ ๋๋ง ์ง์ ํด์ ์คํ๊ฐ๋ฅํ ์์ญ์ด ๋๋ ํ์์ ์ ์งํ๊ธฐ ์ํด ๊ฐ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด์ ๋ํด ์ค๋ช ์ค์ด๋ค.
- ์ฐธ๊ณ : ๋๊ธฐํ ๊ธฐ์ ์ ๋์ ํ๋ ค๋ฉด ์๋ก์ด ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ธฐ๋ณธ์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค.
- happens-before constraints(๋ฐ์ ์ ์ ์ฝ) : ์ฝ์ด 1๊ฐย ยป ํ๋ก์ธ์ 1ยป ์ฐ๋๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ด์
- ๊ณ ์ ํ ๋์์ฑ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ค ๋ช ๋ น์ด์ ์์๋ฅผ ๋ณ๊ฒฝํด์ ๋ฐ์์ ์ ์ฝ(๋ช ํ์ด)์ ๋ถ๊ณผํ๊ณ ๋ถ๋ณ์ ์ ์ฝ์กฐ๊ฑด์ ๋ง์กฑํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
- ๊ธฐ์กด์ ์ฝ๋ค์ ์์๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ช ๋ น์ด ๊ฐ์ ํน์ ํ ์์๋ฅผ ๋ถ์ฌํ๋ ๋ฐฉ๋ฒ (์๋ก์ด ์ธํฐ๋ฆฌ๋ฐ์ ํตํด ์์ ํ ์๋ก์ด ๋์ ์์คํฌ ์์ฑ์ ํตํ ํด๊ฒฐ๋ฐฉ๋ฒ์ด ์๋ค.)
- happens-before constraints(๋ฐ์ ์ ์ ์ฝ) : ์๋ก์ด ์ธํฐ๋ฆฌ๋ฐ์ ํตํด ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ์ ์ ์ ์ฝ(๋ช ๋ น์ด)๋ฅผ ์ฃผ์ด์ ๋ฌธ์ ํด๊ฒฐ ์ ์ผํ ๊ฐ์ฒด ์์คํฌ ์ถ๊ฐํด์ผํจ (๋๊ธฐํ ์ดํ์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ)
- ์๋ก์ด ๋์ ์์คํ ์ด๋ ์๋ก์ด ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๋ค๋ ์๋ฏธ์ ๋๋ค. (์ง์ ์ ์ธ ๋์ ์์คํ ์ด์์ต๋๋ค.)
- ํ๋ก์ธ์๊ฐ ์ฌ๋ฌ๊ฐ ํน์ ์ฌ๋ฌ ๋์ ์์คํฌ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ์์ ์ค์ผ์ค๋ฌ๊ฐ ๋ฌธ๋งฅ ๊ตํ์ ์ํํ๋ ์ ์ผํ ๊ฐ์ฒด์ธ ์์ฐ์ ์ธ natural ๋ค. (์์ ์ ์์์ ์ธ ๊ฐ์ ๋ฃ์ด์ ๋ฌธ๋งฅ ๊ตํ์ ์์์ ์ธ ๊ฐ์ ์ฃผ์ด ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ฒ์ด๋ค.)
- ํ์ง๋ง ์๋ก์ด ๋์ ์์คํ ์์๋ ์์ ์ค์ผ์ค๋ฌ๋ฟ๋ง ์๋๋ผ, ์ธ๊ฐ์ ์์ด ๋ฟ์ ์ธ๊ณต์ ์ธ artificial ๋์ ์์คํ ๊ณผ ๋ง์ฃผํ๊ฒ ๋ฉ๋๋ค.
- ์ฌ๋ฌ ์์ ์ ๋๊ธฐํํ๊ณ ์ด ์์ ๋ค์ ํน์ ์์์ ๋ฐ๋ฅด๋๋ก ํ๊ธฐ์ ์๋ง์ ๋๊ธฐํ ๊ธฐ์ ์ ๋์ ํ๋ ์ผ์ ์ง์ ์ ์ธ ๋์ ํ๊ฒฝ์ ๋ฌ๋ ค ์์ต๋๋ค.
- ์๋ฅผ ๋ค๋ฉด ๋ฉํฐํ๋ก์ธ์ฑ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋ ์ ์ด ๋ฉ์ปค๋์ฆ์ ๋ฉํฐ์ค๋ ๋ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋ ๋ฐฉ์๊ณผ๋ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ๊ตฌํ ๋ฐฉ์๊ณผ ๊ด๊ณ์์ด ๋ชจ๋ ๋์ ์์คํ ์์ ๊ฐ๋ฅํ ์ถ์์ ์ธ ๋ฐฉ์์ผ๋ก ์ด ๋ฉ์ปค๋์ฆ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์ ๊ธฐ์ ๊ณผ ๊ฐ๋ ์ ๋ชจ๋ ๋์ ์์คํ ์์ ์ ํจํฉ๋๋ค. ํ์ง๋ง ๊ทธ ๊ตฌํ์ ์ฃผ๋ณ ํ๊ฒฝ๊ณผ ์์คํ ์์ฒด์ ์ค์ ์์ฑ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ค๋ฅผ ์ ์์ต๋๋ค.
โ ์คํ๋ฝ (๋ฐ์๋๊ธฐ)
- ๋ฐ์๋๊ธฐ ์๊ณ ๋ฆฌ์ฆ
- ์คํ๋ฝ
- ๋ฝ์ ๊ฐ์ง์ ์๋๋ก ๋ฐ๋ณตํด์ ์๋ ์๊ณ ๊ตฌ์ญ์ ์ ๊ทผ ๊ถํ์ ์ป๋ ๊ฒ
- ์คํ๋ฝ์ ๋ฐฉ๋ฒ
- ๊ณต์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ํ๋์ ํ๋ก์ธ์ค/์ค๋ ๋๋ง ์ง์ ํด์ ์คํ๊ฐ๋ฅํ ์์ญ์ด ๋๋ ํ์์ ๋ชฉํ๋ก ๋ช ๋ น์ด์ ์์๋ฅผ ์์ฑ
- ์ผ๋ฐ์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ํ ์์ ์ ๋ช ๋ น์ด๊ฐ ๋ค๋ฅธ ์์ ์ ๋ค๋ฅธ ๋ช ๋ น์ด ์ดํ์ ์คํ๋๋๋ก ํ๊ธฐ์ํด, ํด๋น ์์ ์ ํ์ ์์ ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋๋ก ๋๊ธฐํด์ผ ํฉ๋๋ค.
- ๋์์ ์ด ์์ ์ ๋ฌธ๋งฅ ๊ตํ์ ํตํด CPU๋ฅผ ์ป๊ฒ๋ ์๋ ์์ง๋ง ์คํ๋์ง ์์ ์ฑ ๋๊ธฐํด์ผ ํฉ๋๋ค. ์ฆ, ํด๋น ์์ ์ ํ์ ์์ ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ ๋๊น์ง๋ ๋ฉ์ถฐ์ ๋๊ธฐํด์ผ ํฉ๋๋ค.
- ํ์ ์์ ์ด ๋ช ๋ น์ด์ ๋ํ ์คํ์ ์๋ฃํ ์ ์์ ๋ ๋น๋ก์ ๋ ๊ฐ์ง ์ ํ์ ํ ์ ์์ต๋๋ค.
- ์ด์ ์์ ์ ํ์ ์์ ์ด ์๋ฃ๋์๋์ง ๋ค์ ํ๋ฒ ํ์ธํ๊ฑฐ๋, ๋๋ ํ์ ์์ ์ด ์ด์ ์์ ์ ๋ํด ์ด์ ๋ช ๋ น์ด๋ฅผ ๊ณ์ํด์ ์คํํด๋ ๋๋ค๊ณ ์๋ฆด ์ ์์ต๋๋ค.
- ์ ์ด ๋ฉ์ปค๋์ฆ์์ ์ผ์ด๋๋ ํ์์ ๊ณ ๋ คํ๋ฉด์ ์คํ๋ฝ์ ์ฌ์ฉํ์ฌ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค.
14-8 ์ฝ๋ (์ ์ด ๋ฉ์ปค๋์ฆ ๋์ ์ด์ ์ ๋์ ์์คํฌ)
1
2
3
4
5
6
7
8
9
10
11
Concurrent System
{
Task P
{
1.1. print 'A'
}
Task Q
{
2.1. print 'B'
}
}
14-9 ์ฝ๋ ๋ฐ์ ๋๊ธฐ๋ฅผ ์ด์ฉํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Concurrent System
{
Shared State // ๊ณต์ ์ํ // ๋ฝ์ ๊ฐ์ง์ ์๋๋ก ๋ง๋ค์ด์ค ์กฐ๊ฑด 0๊ณผ1
{
Done : Boolean = False // ๋ฝ์ ๊ฐ์ง๋ ์กฐ๊ฑด : ๋ถ๋ฆฌ์ธ
} //๋น ์ ๋๊ฐ๋ฉด์ 1.1์ 2.2 ๋ช
๋ น์ด ์ด์ ์ ์คํ
Task P // a๊ฐ ์ถ๋ ฅ ๋ ๋๋ง๋ค ์ฐธ์ผ๋ก ์ค์ 1.2 ์ฐธ์ผ๋ก ์ค์
{
1.1. print 'A'
1.2. Done = True
}
Task Q
{
2.1. ์๋ฃ๋์ง ์๋ ๋์ ์๋ฌด๊ฒ๋ ํ์ง ์์ //
2.2. print 'B'
}
}
- ์์ ์ ๋๊ธฐํํ๊ธฐ ์ํด ๋ช ๋ น์ด๋ฅผ ๋ ์ถ๊ฐํด์ผ ํ์ต๋๋ค. ๋ฐ๋ผ์ ์๋ก์ด ์ธํฐ๋ฆฌ๋น์ด ๋ ์ถ๊ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ๋ ์ ํํ๊ฒ ๋งํ๋ฉด, ์ด์ ๊ณผ ๋น๊ตํด ์์ ํ ์๋ก์ด ๋์ ์์คํ ์ ๋ง์ฃผํ ๊ฒ์ ๋๋ค.
- ์ด ์๋ก์ด ์์คํ ์ ์ด์ ์์คํ ์ ์ธํฐ๋ฆฌ๋น๊ณผ ๋น๊ต๊ฐ ๋์ง ์๋ ๊ณ ์ ํ ์ธํฐ๋ฆฌ๋น์ ์งํฉ์ ๊ฐ์ต๋๋ค.
- ์ํ๊ฐ ์ฐธ์ด ๋ ๋๊น์ง ๋ฐ์ ๋๊ธฐ์์ ๊ณ์ ๋ชจ๋ํฐ๋ง (ํ๋ง)ํ ๋ค์ ๋ฐ์ ๋๊ธฐ๋ฅผ ๋น ์ ธ๋๊ฐ๋๋ค.
โญ 14.4.2 ์ ์๊ธฐ/์๋ฆผ ๋ฉ์ปค๋์ฆ
- ์ ๊ธ์ ์ฝ๊ฒ ๋งํด ๊ฐ์ฒด ๋๋ ๋ณ์์ด๋ฉฐ, ์ํ๊ฐ ์ถฉ์กฑ๋๊ฑฐ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์ ์ฌ์ฉํฉ๋๋ค.
- ์ ์ ์์ ๋ค๋ฃฌ ๋๋ก ๋ฐ์ ๋๊ธฐ ๋ฃจํ๋ฅผ ์ด์ฉํ๋ ๋์ , ๋ค๋ฅธ ์๋๋ฆฌ์ค๋ ์์ํด๋ณผ ์ ์์ต๋๋ค.
- ์์ Q๋ ์๋ฃ ํ๋๊ทธ์์ ๋ฐ์ ๋๊ธฐ๋ฅผ ํ๋ ๋์ ์ ๋ค ์ ์์ผ๋ฉฐ, ์์ P๋ ํ๋๊ทธ๋ฅผ ์ฐธ์ผ๋ก ๋ง๋ค ๋ ํ๋๊ทธ์ ๋ณ๊ฒฝ์ ๋ํด ์์ Q์ ์๋ฆด ์ ์์ต๋๋ค.
- ์ฆ, ์์ Q๋ ํ๋๊ทธ๊ฐ ์ฐธ์ด ์๋์ ์์๋ง์ ์ ์๊ธฐ์ ๋ค์ด๊ฐ๋ฉฐ ์์ P๊ฐ CPU ์ฝ์ด๋ฅผ ๋ ๋นจ๋ฆฌ ์ป๋๋ก ํด์ ๋ก์ง์ ์คํํ๊ฒ ํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์์ P๋ ํ๋๊ทธ๋ฅผ ์ฐธ์ผ๋ก ์์ ํ ๋ค์ ์์ Q๋ฅผ ๊นจ์๋๋ค.
14-10์ ์๊ธฐ ์๋ฆผ์ ์ฌ์ฉํ๋ ํด๊ฒฐ๋ฒ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Concurrent System
{
Task P
{
1.1. print 'A' //
1.2. Notify Task Q // CPU ์ ์ ํ์ง ์์ a๋ฅผ ์ถ๋ ฅ์ ์๋ฆผ key
} //์์
์ค์ผ์ค๋ฌ๋ ์ ๋ ์์
์ผ๋ก ํ์ ์ฌ๋ผ์ด์ค๋ฅผ ์ฃผ์ง ์์ต๋๋ค.
//์ ํธ ์ ๋ฌ signaling
//a์ ์๋ฆผ์ด ์ฐ๋ฆฌ๊ธฐ ์ ๊น์ง ์ค์ผ์ค๋ฌ๊ฐ ํ์ ๋ฃ์ด ์ ์๊ธฐ ๋ชจ๋ ์คํ
Task Q // a๊ฐ ์ถ๋ ฅ ๋๋ฉด q ๊ฐ์ถ๋ ฅ
{
2.1. Go To Sleep Mode //์ ์๊ธฐ ๋ชจ๋ ๋ฝ์ ๊ฑธ์ด์ค
2.2. print 'B'
}
}
- ์๋ฆผ = ํค
- ์์ ์ด ์ ๋ค๋ฉด ์ด์ : CPU์ ์๊ฐ์ ๋ญ๋นํ์ง ์์ต๋๋ค.
- ์ํ๋ฅผ ์คํ ๋๊ธฐ ์ํด ๋ฐ์ ๋๊ธฐ๋ฅผ ์์ํ๋ ๋์ , ์์ ์ ์ ์ ์๋ฉฐ ์ํ๊ฐ ์ถฉ์กฑ๋ ๋ ์๋ฆผ์ ๋ฐ์ต๋๋ค.
14-11 : ๊ฒฐ๊ณผ (๋ฐ ๊ต์ฐฉ ์ํ)
1
2
3
4
1.1 print 'A' // Task P ๋ A๋ฅผ ์ถ๋ ฅํ๊ณ
1.2. Notify Task Q // a๋ฅผ ์ถ๋ ฅ์ ์๋ฆผ key
2.1. Go To Sleep Mode //์์
Q๋ CPU๋ฅผ ์ป์ผ๋ฉด ์ฆ์ ์ ๋ค๊ธฐ ๋ชจ๋๋ก ๋ค์ด๊ฐ๋๋ค
2.2. print 'B'
14-12 ์ ๋ค๊ธฐ ์๋ฆผ ์ ๊ทผ๋ฒ์ ๋ฐ๋ฅธ ๊ฐ์ ๋ ํด๊ฒฐ๋ฒ
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
Concurrent System
{
Shared State // ๋ฝ์ ๊ฐ์ง์ ์๋๋ก ๋ง๋ค์ด์ค ์กฐ๊ฑด 0๊ณผ1
{
Done : Boolean = False
}
Task P
{
1.1. print 'A'
1.2. Done = True
1.3. Notify Task Q
}
Task Q // ์ฌ์ ํ p๋ฅผ ํตํด์ ์๋ฆผ ํด์ ๋ฅผ ๋ฐ๋๋ค.
{
2.1. While Not Done { //์๋ฃ๊ฐ ๊ฑฐ์ง์ผ ๋๋ง ์ ๋ญ๋๋ค.
2.2. Go To Sleep Mode If Done is False (Atomic)// 2.2๋ ํ๋๊ทธ๋ฅผ ์ฒดํฌํ๋ ๋ฃจํ ์์ ๋์ด๋ฉฐ
2.3. }//๋ฐ๋์ ์์ ๋ช
๋ น์ด์ฌ์ผ ํ๋ค๋ ์ ์
๋๋ค.
2.4. print 'B'
}
}
/*
NOTE_ ๋ง์ฝ ๋์ ์์คํ
์ ๊ฒฝํ์ด ์๋ค๋ฉด, ์ด ๋ช
๋ น์ด๊ฐ ์์์ ์ด๋ผ๊ณ ํ์ ๋ ์ฝ๊ฐ ๋๋ ์๋ ์์ต๋๋ค.
๊ทธ ์ฃผ์ ์ด์ ๋ ์์ ์์ ์์ ๋ช
ํํ ์๊ณ ๊ตฌ์ญ์ ์ ์ํ๊ณ ์๊ณ ๊ตฌ์ญ์ ๋ฎคํ
์คmutex๋ฅผ ์ฌ์ฉํด
๋ณดํธํ ๋๋ง ์ง์ ์ผ๋ก ์ฒด๊ฐํ ์ ์๋ ๋๊ธฐํ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ง๋๋ฅผ ๋๊ฐ๋ฉด์ ๋ ๋ช
ํํด์ง ๊ฒ
์ด๋ฉฐ, ๋ ๊ฐ๋
์ ์ธ ์ฃผ์ ๋ฅผ ๋ค๋ฃฌ ๋ค์์ผ ์ค์ง์ ์ธ ํด๊ฒฐ์ฑ
์ ์ดํด๋ณผ ์ ์์ต๋๋ค.
*/
- ๋ฐ ๊ต์ฐฉ ์ํ (์ฑ
์์ ๋งํ๋) (์ธ๋ฏธ ๋ฐ๋๋ฝ)
- ์์ 1์ ์ผ์ ํ๋๋ฐ ์์ 2๋ ์์ํ ์ ์ ์๋ฒ๋ฆฌ๋ ํ์
- ๋ฝ์ ๊ฐ์ง๋ฉด์ ์๋ฆผ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
- ํค๋ฅผ ๋ฐ๋ก ๊ฐ์ง ๊ฐ์ฒด(ํจ์) ๋๋ ๋ณ์๋ก ์ฃผ์ง ์์ ์ํ
- 1๋ช ์ ํค๋ฅผ ๊ฐ์ง๊ณ 1๋ช ์ด ์ผ์ ๋ง์น๋ฉด ์ผ์ ๋ง์น ์ฌ๋์ด ์๋ฆผ์ ํด์ฃผ๋ ํํ
- ์ ๋ ์์ ์ ์์ P๋ฟ๋ง ์๋๋ผ ์์คํ ์ ๋ฌด์ธ๊ฐ์ ์ํด ์๋ฆผ์ ๋ฐ์ผ๋ฏ๋ก ๋ฃจํ๊ฐ ํ์ํฉ๋๋ค.
- ์ค์ ์์คํ ์์ ์ด์์ฒด์ ๋ ๋ค๋ฅธ ์์ ์ ํ ์์ ์ ์๋ฆผ์ ์ค ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์์๋ ์์ P๊ฐ ๋ฐ๋ ์๋ฆผ๋ง ์ดํด๋ด ๋๋ค.
โญ 4.4.3 ์ธ๋งํฌ์ด์ ๋ฎคํ ์ค
- ์ธ๋งํฌ์ด: Signaling mechanism. ํ์ฌ ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ ์ฐ๋ ๋, ํ๋ก์ธ์ค์ ์๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ๋์ด ์ํธ๋ฐฐ์ ๋ฅผ ๋ฌ์ฑํ๋ ๊ธฐ๋ฒ
๋ฎคํ ์ค : ํ๋ฒ์ 1๊ฐ์ ์์ ๋ง ์๊ณ๊ตฌ์ญ์ผ๋ก ๋ค์ด๊ฐ๋ ์ธ๋งํฌ์ด
- ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ๋๊ธฐํํ ๋ ์ฌ์ฉํ๋ ๋ณ์ ๋๋ ๊ฐ์ฒด์ ๋๋ค.
๋ฎคํ ์ค๋ก ๋ฐ์ดํฐ ๊ฒฝ์์ด ์๋ ์ํธ ๋ฐฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ์ ํด๊ฒฐ
์ธ์ ๋ ์์ ์ค ํ๋๋ง ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ์์ ์ ์ด ์์ ์ด ์๊ณ ๊ตฌ์ญ์ ๋ ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ๋ฉ๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ์๋ ๊ต์ฐฉ ์ํ๊ฐ ์์ด์ผ ํฉ๋๋ค. ์๊ณ๊ตฌ์ญ์ ์ ์ฅํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์์ ์ ๊ฒฐ๊ตญ ๋ค์ด๊ฐ ์ ์์ด์ผ ํฉ๋๋ค.
- ์๊ณ๊ตฌ์ญ์ ์๋ ์์ ์ ๋ค๋ฅธ ์์ ์ด ์๊ณ๊ตฌ์ญ์ด ๋ค์ด๊ฐ๊ธฐ ์ํด ์ ์ ํด ๋ฐฐ๋ผ์ ์์ต๋๋ค.
์ธ๋ง ํฌ์ด๋ก ๋ฐ์ดํฐ ๊ฒฝ์์ด ์๋ ์ํธ ๋ฐฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ์ ํด๊ฒฐ
์ธ์ ๋ ์์ ์ค ํ๋๋ง ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ์์ ์ ์ด ์์ ์ด ์๊ณ ๊ตฌ์ญ์ ๋ ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ๋ฉ๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ์๋ ๊ต์ฐฉ ์ํ๊ฐ ์์ด์ผ ํฉ๋๋ค. ์๊ณ๊ตฌ์ญ์ ์ ์ฅํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์์ ์ ๊ฒฐ๊ตญ ๋ค์ด๊ฐ ์ ์์ด์ผ ํฉ๋๋ค.
- ์๊ณ๊ตฌ์ญ์ ํ๋ฒ์ ๋๊ฐ์ด์์ ์์ ์ด ๋ค์ด๊ฐ์ ์์ต๋๋ค.
- ๋ฎคํ์ค
- ํ๋์ ์์ ๋ง ์๊ณ ๊ตฌ์ญ์ ์๋๋ก ํ๋ฉฐ, ์ธ๋งํฌ์ด์ ๋น์ทํ๊ฒ ์ ๊ธ๊ณผ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฅ๋ฒฝ์ผ๋ก ์์ฉํ ์ ์์ต๋๋ค.
์ฝ๋ ์์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Concurrent System {
Shared State { // ์ธ๋ง ํฌ์ด ์์ฑ
S : Semaphore which allows only 1 task at a time
Counter: Integer = 0
}
Task P {
A : Local Integer
1.1. EnterCriticalSection(S) // ์๊ณ๊ตฌ์ญ ์ง์
1.2. A = Counter
1.3. A = A + 1
1.4. Counter = A
1.5. LeaveCriticalSection(S) // ์๊ณ๊ตฌ์ญ ๋ ๋๊ธฐ
}
Task Q {
B : Local Integer
2.1. EnterCriticalSection(S) // ์๊ณ๊ตฌ์ญ ์ง์
2.2. B = Counter
2.3. B = B + 2
2.4. Counter = B
2.5. LeaveCriticalSection(S) //์๊ณ๊ตฌ์ญ ๋ ๋๊ธฐ
}
}
์ค์ ํฌ์ธํธ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Shared State { // ์ธ๋ง ํฌ์ด ์์ฑ
S : Semaphore which allows only 1 task at a time
Counter: Integer = 0
}
//์ธ๋งํฌ์ด๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ์์ ์๊ณ ๊ตฌ์ญ์ ์
์ฅํ๋ ํ์๋ ์ธ๋งํฌ์ด ์ ๊ธ lock๊ณผ ๊ฐ์ต๋๋ค.
//์ธ๋งํฌ์ด๋ฅผ ๋ ๋๊ฑฐ๋ ์ธ๋งํฌ์ด๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ฒ ์ญ์ ์ธ๋งํฌ์ด ์ ๊ธ ํด์ unlock์ ๊ฐ์ต๋๋ค.
Task P {
A : Local Integer
1.1. EnterCriticalSection(S) // ์๊ณ๊ตฌ์ญ ์ง์
1.2. A = Counter
1.3. A = A + 1
1.4. Counter = A
1.5. LeaveCriticalSection(S) // ์๊ณ๊ตฌ์ญ ๋ ๋๊ธฐ
}
- ์๊ณ๊ตฌ์ญ์ ์ง์ ์ง์ ํด์ค์ผ๋ก ๋๊ธฐ์ค์ธ ์์ ์ ๋ฝ์ ๊ฑธ์ด์ค ์ ์์ต๋๋ค.
- ์ธ๋งํฌ์ด S๋ ํ๋์ ์์ ๋ง์ด ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์๋๋ก ์ฌ์ฉ๋์์ต๋๋ค.
- ์ธ๋งํฌ์ด๋ ๋ณดํต ์ด์ง ์ธ๋งํฌ์ด binary semaphore ๋๋ ๋ฎคํ ์ค๋ผ๊ณ ํฉ๋๋ค. ๋ฎคํ ์ค๋ ์ธ๋งํฌ์ด๋ณด๋ค ํจ์ฌ ๋ ์ผ๋ฐ์ ์ด๋ฉฐ ๋์์ ์ธ ์ฝ๋์์ ํญ์ ๋ณผ ์ ์์ต๋๋ค.
๊ฒฝ์ ์ํ๊ฐ ์๋ ์ํธ ๋ฐฐ์ ์ํ๊ฐ ๋ฉ๋๋ค.
์ธ์ ๋ ์์ ์ค ํ๋๋ง ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ์์ ์ ์ด ์์ ์ด ์๊ณ ๊ตฌ์ญ์ ๋ ๋ ๋๊น์ง๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ์๋ ๊ต์ฐฉ ์ํ๊ฐ ์์ด์ผ ํฉ๋๋ค. ์๊ณ ๊ตฌ์ญ์ ์ ์ฅํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์์ ์ ๊ฒฐ๊ตญ ๋ค์ด๊ฐ ์ ์์ด์ผ ํฉ๋๋ค. ๋์ ๋ฐ๋ผ์๋ ๋๊ธฐ ์๊ฐ์ ์ํ์ (๊ฒฝํฉ ์๊ฐcontention time)์ ์ ํฉ๋๋ค.
- ์๊ณ ๊ตฌ์ญ์ ์๋ ์์ ์ ๋ค๋ฅธ ์์ ์ด ์๊ณ ๊ตฌ์ญ์ด ๋ค์ด๊ฐ๊ธฐ ์ํด ์ ์ preemptionํด ๋นผ๋ผ ์ ์์ต๋๋ค.
- ์ฆ, ์ด ํด๊ฒฐ ๋ฐฉ์์ ์ ์ ์ด ์์ด์ผ ํ๊ณ preemption free ํ์กฐ์ collaborative ์ด์ด์ผ ํฉ๋๋ค.
- ์ธ๋งํฌ์ด์ ๋ฎคํ ์ค๋ ์ ๊ธ ์ ์๋ ๊ฐ์ฒด๋ผ๊ณ ํฉ๋๋ค.
- ์ธ๋งํฌ์ด์ ์ ๊ธ๊ณผ ํด์ ๋ ๊ฐ๊ฐ ์๊ณ ๊ตฌ์ญ์ ๋ํ ๋๊ธฐ ๋ฐ ์ ๊ทผ ํ๋, ์๊ณ ๊ตฌ์ญ ํด์ ์ ์ฌ์ฉ๋๋ ๋ ๊ฐ์ง ์๊ณ ๋ฆฌ๋ฌ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Concurrent System {
Shared State {// ๊ณต์ ์ํ
S : Semaphore which allows only 1 task at a time//ํ๋ฒ์ ํ๋์ ์์
์ ํ์ฉํ๋ ์ธ๋งํฌ์ด
Counter: Integer = 0
}
Task P {
A : Local Integer
1.1. Lock(S) // ์ธ๋งํฌ์ด / ๋ฎคํ
์ค ์ ๊ธ
1.2. A = Counter
1.3. A = A + 1
1.4. Counter = A
1.5. Unlock(S)// ์ธ๋งํฌ์ด / ๋ฎคํ
์ค๋ ํด์
}
Task Q {
B : Local Integer
2.1. Lock(S)
2.2. B = Counter
2.3. B = B + 2
2.4. Counter = B
2.5. Unlock(S)
}
}
โ ์๋๋ฆฌ์ค
- ์ด์ ์ด๋ฅผ ๋์ ์ปดํจํฐ ์์คํ ๊ณผ ์ฐ๊ฒฐํด ์ธ๋งํฌ์ด๊ฐ ์ด๋ฌํ ๋น์ ์์ ๋น์์ ๊ฐ์ ์ผ์ ํ๋์ง ์์๋ด ์๋ค.
- ์์์์ ์์ฌ๋ ๊ณต์ ์์์ ๋๋ค. ์ฌ๋ฌ ํ์๋ ์์ฌ์๊ฒ ์ ๊ทผํ ์ ์๋๋ฐ, ์ด๋ ๊ณต์ ์์์ ์ ๊ทผํ๋ ค๋ ์์ ๊ณผ ๋น์ทํฉ๋๋ค.
- ๋น์๋ ์ธ๋งํฌ์ด์ ๋๋ค. ๋ชฉ๋ก์ ๊ฐ์ง ๋น์์ฒ๋ผ, ๊ฐ ์ธ๋งํฌ์ด๋ ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ํ๋ํ๊ธฐ ์ํด ๋๊ธฐํ๋ ์์ ๋๊ธฐ์ด์ด ์์ต๋๋ค.
- ์ง๋ฃ์ค์ ์๊ณ ๊ตฌ์ญ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
- ์๊ณ ๊ตฌ์ญ์ด๋ ์ธ๋งํฌ์ด๊ฐ ๋ณดํธํ๋ ๊ฐ๋จํ ๋ช ๋ น์ด ์งํฉ์ ๋๋ค.
- ์์ ์ ์ธ๋งํฌ์ด ๋ค์์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์๋ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
- ๋ฐ๋ฉด ์๊ณ ๊ตฌ์ญ์ ๋ณดํธํ๋ ๊ฒ์ด ์ธ๋งํฌ์ด์ ์ญํ ์ ๋๋ค. ์์ ์ด ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ๋ ค๊ณ ํ ๋๋ง๋ค ํน์ ์ธ๋งํฌ์ด์ ์๋ ค์ผ ํฉ๋๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์ด ์๋ฃ๋๊ณ ์๊ณ ๊ตฌ์ญ์์ ๋๊ฐ๋ ค ํ ๋ ์์ ์ ๋์ผํ ์ธ๋งํฌ์ด์ ์ด๋ฅผ ์๋ ค์ผ ํฉ๋๋ค.
โญ 14.4.4 ๋ฉํฐํ๋ก์ธ์ ์ ๋
- ๋ฉํฐํ๋ก์ธ์ ์ ๋์ด๋
- ๋ ๊ฐ ์ด์์ ์ฝ์ด๊ฐ ์๋ CPU ๋๋ ์ฝ์ด์ ์์ ์๊ด์์ด CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฉํฐ ํ๋ก์ธ์ ์ ๋์ ๋ฆฌ์คํฌ
- CPU ์ฝ์ด์์ ์คํ๋๊ณ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ฃผ์์์ ์์ ํ ๋ ๋ฉํฐ ํ๋ก์ธ์ ์ ๋์ ๋ฆฌ์คํฌ ๋ฐ์
โ CPU ์ฝ์ด์์ ์คํ๋๊ณ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ฃผ์์์ ์์ ํ ๋
- ๋ฉํฐ ํ๋ก์ธ์ ์ ๋์ ๋ฆฌ์คํฌ๋ฅผ ๋ฐ์ํ๋ ์ด์
- CPU ์ฝ์ด๋ ์์ ์ ์ง์ญ ์บ์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ์ ์ฅํฉ๋๋ค.
- ๋ง์ฝ ํ ์์ ์ด ๊ณต์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ฐ๊ธฐ ์์ ์ ํ ๋๋ ์ง์ญ ์บ์์๋ง ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๋ฉฐ, ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ ๋ค๋ฅธ CPU ์ฝ์ด์ ์ง์ญ ์บ์์๋ ์ ์ฉ๋์ง ์๋๋ค.
- ์ต์ ๊ฐ์ ์ฝ์ผ๋ ค ํ ๋, ์ด ์์ ๋ค์ ์ต์ ๊ฐ์ ๊ฐ์ง ์์ ์์ ์ ์ง์ญ ์บ์์์ ์ฝ์ผ๋ ค๊ณ ํ๋ฏ๋ก ์ต์ ๊ฐ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ผ๊ด์ฑ ํ๋กํ ์ฝ memory coherence protocol์ ๋์ ํด ํด๊ฒฐํฉ๋๋ค.
- ๋์ ์์คํฌ์์ ๊ณ ๋ คํด์ผํ ๋๊ฐ์ง ์์ธ
- ๋ฉ๋ชจ๋ฆฌ ์ผ๊ด์ฑ ๋์ ์ cpu ์ฝ์ด ์ค ํ๋์ ๊ฐ์ ๋ณ๊ฒฝํ ๋ ์์ ๋ค์ ์ง์ญ์บ์์์ ๊ฐ์ ๊ฐ์ ๋ณผ ์ ์๋ค.
- ํด๊ฒฐ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ฐ์์ฑ์ ๋์ ํ์ฌ ํด๊ฒฐ
์์ 14-6 ์์ ๋ถ๋ณ์ ์กฐ๊ฑด a๋ฅผ ๋จผ์ ์ถ๋ ฅํ๊ณ b๋ฅผ ์ถ๋ ฅํด๋ผ ํ์๋ ์ํ๋ ์์๋๋ก ์คํํ๋ ์ ์๊ธฐ / ์๋ฆผ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Concurrent System
{
Shared State
{
Done : Boolean = False
}
Task P {
1.1. print 'A'
1.2. Done = True
1.3. Memory Barrier
1.4. Notify Task Q
}
Task Q {
2.1. Do {
2.2. Memory Barrier
2.3. Go To Sleep Mode If Done is False (Atomic)
2.4. } While Not Done
2.5. print 'B'
}
}
์ฝ๋ ๋ฐ์ค 14-17 ๋ฎคํ ์ค๋ก [์์ 14-6]์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ ํฅ์ํ๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
shared State
{
Done : Boolean = False
M : Mutex
}
Task P
{
1.1. print 'A'
1.2. Lock(M)
1.3. Done = True
1.4. Unlock(M)
1.5. Notify Task Q
}
Task Q
{
2.1. Lock(M)
2.2. While Not Done {
2.3. Go To Sleep Mode And Unlock(M) (Atomic)
2.4. Lock(M)
2.5. }
2.6. Unlock(M)
2.7. print 'B'
}
}
- ํ๋์ ์์ ๋ง ์๊ณ ๊ตฌ์ญ์ ์๋๋ก ํ๋ฉฐ, ์ธ๋งํฌ์ด์ ๋น์ทํ๊ฒ ์ ๊ธ๊ณผ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฅ๋ฒฝ์ผ๋ก ์์ฉํ ์ ์์ต๋๋ค.
๋ฎคํ ์ค(ํน์ ์ธ๋งํฌ์ด)๋ฅผ ์ ๊ธ ๋, ๋ฎคํ ์ค๊ฐ ์๋์ผ๋ก ํด์ ๋๋ ๊ฒฝ์ฐ
- ์์ ์ด Unlock ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฎคํ ์ค๊ฐ ํด์ ๋ฉ๋๋ค.
- ์์ ์ด ์๋ฃ๋๋ฉด ๋ชจ๋ ์ ๊ธด ๋ฎคํ ์ค๊ฐ ํด์ ๋ฉ๋๋ค.
- ์์ ์ด ์ ์๊ธฐ ๋ชจ๋๊ฐ ๋๋ฉด ์ ๊ฒผ๋ ๋ฎคํ ์ค๊ฐ ํด์ ๋ฉ๋๋ค.
- ์ฌ๊ท์ ์ธ ๋ฎคํ์ค : ์์ ํ๋๋ก ์ฌ๋ฌ๋ฒ์ ์ ๊ธ์ ์๋ค.
โญ 14.5 ์คํ๋ฝ
โ ์คํ๋ฝ
- ์ฝ๊ฒ๋งํ์ฌ ๋ฐ์ ๋๊ธฐ(spinning) ์๊ณ ๋ฆฌ๋ฌ
- ์คํ๋ฝ ๋ฎคํ ์ค๋ฅผ ์ ๊ธ ๋๋ง๋ค ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ ๋๊น์ง ๋ฐ์ ๋๊ธฐ ๋ฃจํ์ ๋ค์ด๊ฐ๊ณ ๋์ ๊ทธ๋ค์์ ๊ณ์ํฉ๋๋ค.
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
๋์ ์์คํ
{
๊ณต์ ์ํ (
์๋ฃ: ๋ถ๋ฆฌ์ธ = ๊ฑฐ์ง
M: ๋ฎคํ
์ค
}
์์
P{
1.1. 'A'๋ฅผ ์ถ๋ ฅ
1.2. ์คํ๋ฝ: SpinLock(M)
1.2. ์๋ฃ =์ฐธ
1.3. ์คํ๋ฝ ํด์ : SpinUnlock(M)
}
์์
Q{
2.1 ์คํ๋ฝ: SpinLock(M)
2.2. ์๋ฃ๊ฐ ์๋ ๋์{
2.3. ์คํ๋ฝ ํด์ : SpinUnlock(M)
2.4. ์คํ๋ฝ: SpinLock(M)
2.5. }
2.6. ์คํ๋ฝ ํด์ : SpinUnlock(M)
2.7. 'B'๋ฅผ ์ถ๋ ฅ
}
}
- ๋ฃจํ ์์ 2.3 2.4 ๋ช ๋ น์ด๋ค์ ์ด์ํ ์ฐ์์ ์ธ ์ ๊ธ ๋ฐ ํด์ ๋ช ๋ น์ด์ ๋๋ค.
์์ Q๊ฐ CPU ์ฝ์ด๋ฅผ ๊ฐ์ง๋ ๋์, ์คํ๋ฝ ๋ฎคํ ์ค M์ ์ ๊ทธ๊ณ ํด์ ํ๋ ์ผ์ด ์ฐ์ํด์ ์งํ ์ค์ ๋๋ค.
- ๋ง์ฝ ๋ช ๋ น์ด 2.3๊ณผ 2.4๊ฐ ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๋ช ๋ น์ด 2.1์์ ์ ๊ธ์ ๋ช ๋ น์ด 2.6์ด ๋ ๋๊น์ง ๋ฎคํ ์ค๊ฐ ์ ๊ธด ์ํ๊ฐ ๋๋๋ก ํฉ๋๋ค.
โ์ด๋ ์์ P๊ฐ ๊ณต์ ํ๋๊ทธ ์๋ฃ์ ์ ๊ทผํ ๊ธฐํ๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ ์๋ฏธ์ ๋๋ค.
โ์์คํ ์ด ๋ฐ๊ต์ฐฉ ์ํ๊ฐ ๋ฉ๋๋ค.
์ ๊ธ๊ณผ ํด์ ๋ช ๋ น์ด๋ ์์ P๊ฐ ์ ๊ทผ ๊ธฐํ๋ฅผ ์ฐพ๊ณ ๋ช ๋ น์ด 1.2๋ฅผ ํตํด ํ๋๊ทธ ์๋ฃ๋ฅผ ์ ๋ฐ์ดํธํ๋๋ก ํฉ๋๋ค.
โ ์กฐ๊ฑด๋ณ์
- ์ฝ๊ฒ ๋งํด ๋ณ์(ํน์ ๊ฐ์ฒด)
- ์์ ์ ์ ์๊ธฐ ๋ชจ๋๋ก ๋ง๋ค๊ฑฐ๋ ๋ค๋ฅธ ์ ๋ ์์ ์ ์๋ฆฌ๊ณ ๊นจ์ธ ์ ์์ต๋๋ค.
- ์ฌ๊ธฐ์ ์ ์๊ธฐ๋์ง์ฐ์ด ์๋ ์ด๋ ์์ ์ด ๋ ์ด์ CPU ๊ณต์ ๋ฅผ ๋ฐ์ง ์๋๋ค๋ ์๋ฏธ์ ๋๋ค.
- ์กฐ๊ฑด ๋ณ์๋ ์๋ก ๋ค๋ฅธ ์์ ๊ฐ์ ์ ํธ ์ ๋ฌ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ ๊ธ๊ณผ ํด์ ์์ ๊ณผ ๊ด๋ จํ ๋ฎคํ ์ค์ฒ๋ผ ์กฐ๊ฑด ๋ณ์๋ ์ ์๊ธฐ ๋ฐ ์๋ฆผ ์์ ์ด ์์ต๋๋ค.
- ์ ์๊ธฐ์ ์๋ฆผ ๋์ ์ ๋๊ธฐ wait์ ์ ํธsignal ๋ก๋ ์ฌ์ฉ
์กฐ๊ฑด ๋ณ์๋ ๋ฐ๋์ ๋ฎคํ ์ค์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
โ ์ํธ ๋ฐฐ์ mutual exclusion ์์ฑ
- ๋ค์ [์ฝ๋ ๋ฐ์ค 14-19]์ ์์ฌ์ฝ๋๋ ์ผ๋ฐ์ ์ผ๋ก ํน์ ์กฐ๊ฑด ๋๋ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์กฐ๊ฑด ๋ณ์ ๋ฐ ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฒ์ ๋ํ๋ ๋๋ค. ํนํ [์์ 14-6]์์ ๊ณต์ ํ๋๊ทธ ์๋ฃ๊ฐ ์ฐธ์ด ๋ ๋๊น์ง ๋๊ธฐํ๋๋ก ํฉ๋๋ค.
์ฝ๋ ๋ฐ์ค 14-19 [์์ 14-6]์ ๋ํด ์กฐ๊ฑด ๋ณ์๋ฅผ ์ฌ์ฉํ ํด๊ฒฐ ๋ฐฉ๋ฒ
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
๋์ ์์คํ
{
๊ณต์ ์ํ {
์๋ฃ: ๋ถ๋ฆฌ์ธ= ๊ฑฐ์ง
CV : ์กฐ๊ฑด ๋ณ์
M: ๋ฎคํ
์ค
}
์์
P {
1.1. 'A'๋ฅผ ์ถ๋ ฅ
1.2. ์ ๊ธ: Lock(M)
1.3. ์๋ฃ = ์ฐธ
1.4. ์๋ฆฌ๊ธฐ: Notify(CV)
1.5. ์ ๊ธ ํด์ : Unlock(M)
}
์์
Q {
2.1. ์ ๊ธ: Lock(M)
2.2. ์๋ฃ๊ฐ ์๋ ๋์ {
2.3. ์ ์๊ธฐ: Sleep(M, CV)
2.4. }
2.5. ์ ๊ธ ํด์ : Unlock(M)
2.6. 'B'๋ฅผ ์ถ๋ ฅ
}
}
๋์ ์์คํ ์์ ๋ ๋ช ๋ น์ด ๊ฐ ์๊ฒฉํ ์์๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์กฐ๊ฑด ๋ณ์๋ฅผ ์ฌ์ฉ!
- ๋ช ๋ น์ด 1.4์ 2.3์ ์กฐ๊ฑด ๋ณ์ CV๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ Sleep์ ๋ฎคํ ์ค M๊ณผ ์กฐ๊ฑด ๋ณ์ CV์ ๋ํด ๋ ๋ค ์์์ผ ํฉ๋๋ค.
- ์์ Q๊ฐ ์ ๋ค ๋๋ ์ ๊ธ์ ํด์ ํด์ผ ํ๊ณ , ์์ Q๊ฐ ์๋ฆผ์ ๋ฐ์์ ๋๋ Sleep ์์ ๋ด๋ถ์ ์๋ ๋ก์ง์ ๊ณ์ํด์ M์ ๋ค์ ์ ๊ธ๋๋ค
๋ช ๋ น์ด 1.4 ๋ํ M์ ๋ํ ์ ๊ธ์ ํ๋ํ์ ๋๋ง ์๋ํ๋ฉฐ, ์ ๊ธ์ ํ๋ํ์ง ์์๋ค๋ฉด ๊ฒฝ์ ์ํ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ๋ฎคํ ์ค ๊ฐ์ฒด์ ์กฐ๊ฑด ๋ณ์๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ํฐ ๊ฐ์ฒด monitor object๋ผ๊ณ ํ๋ค.
- ๋ํ ๋์์ฑ๊ณผ ๊ด๋ จ๋ ์ค๊ณ ํจํด๋ ๋ชจ๋ํฐ ๊ฐ์ฒด๋ผ๊ณ ํ๋ ๋ฐ, ์ด๋ค ๋์ ์์ ์์ ๋ช ๋ น์ด์ ์์๋ฅผ ๋ค์ ์ ํ๊ธฐ ์ํด ์์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ฉ๋๋ค.
- ์ ์ ์์๋ ์ฌ๋ฌ ๊ฐ์ ๋์ ์์ ์ ์๋ ๋ช ๋ น์ด ์ฌ์ด์์ ์์๋ฅผ ์๊ฒฉํ ์งํค๊ฒ ํ๊ณ ์๊ณ๊ตฌ์ญ์ ๋ณดํธํ๊ธฐ ์ํด ์ธ๋งํฌ์ด, ๋ฎคํ ์ค, ์กฐ๊ฑด ๋ณ์ ๋ฐ ์ ๊ธ ํด์ , ์ ์๊ธฐ, ์๋ฆผ ์๊ณ ๋ฆฌ๋ฌ์ ์ฌ์ฉ ํ๋ ๋ฐฉ์์ ๋ณด์ฌ์คฌ์ต๋๋ค.
โญ 14.6 POSIX์ ๋์์ฑ
โ POSIX์ ๋์์ฑ
- POSIX ํธํ ์ด์์ฒด์ ์ ๋์์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. ๋์ ํ๋ก๊ทธ๋จ์
- ๋ฉํฐํ๋ก์ธ์ฑ multiprocessing์ด๋ผ๊ณ ํ๋ ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์คํํ๊ฑฐ๋
- ๋ฉํฐ์ค๋ ๋ฉ multithreading์ด ๋ผ๊ณ ํ๋ ๋์ผํ ํ๋ก์ธ์ค์ ์๋ ์๋ก ๋ค๋ฅธ ์ค๋ ๋๋ก ์คํํ ์ ์์ต๋๋ค.
โ ๋์์ฑ์ ์ง์ํ๋ ์ปค๋
- ๋ชจ๋ ์ปค๋์ ์คํ ์ค์ธ ์ฌ๋ฌ ํ๋ก์ธ์ค ๋ฐ ์ค๋ ๋์ฌ์ด ์์ CPU ์ฝ์ด๋ฅผ ๊ณต์ ํ๋ ์์ ์ค์ผ์ค๋ฌ ์ ๋task scheduler unit์ด ์์ต๋๋ค.
ํ๋ก์ธ์ค์ ์ค๋ ๋๊ฐ ๋ฌด์์ธ์ง ๋์์ฑ ์ธก๋ฉด์์ ์ฐจ์ด์ ์?
- ํ๋ก์ธ์ค ํ๋ก๊ทธ๋จ์ ์คํํ ๋๋ง๋ค ์ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๊ณ , ํ๋ก๊ทธ๋จ ๋ก์ง์ ํด๋น ํ๋ก์ธ์ค ๋ด๋ถ์์ ์คํ๋ฉ๋๋ค. ํ๋ก์ธ์ค๋ ์๋ก ๋จ์ด์ ธ ์์ผ๋ฉฐ, ๋ง์น ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ํ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ค๋ ๋ ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ๋งค์ฐ ์ ์ฌํ์ง๋ง, ํน์ ํ๋ก์ธ์ค์ ๊ตญํํฉ๋๋ค. ์ค๋ ๋๋ ๋์์ ์ธ ๋ฐฉ์์ผ๋ก ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ํจ๊ป ์คํํ๋ ์ฌ๋ฌ ์คํ ์ค๋ ๋๋ฅผ ์ด์ฉํด ๋จ์ผ ํ๋ก์ธ์ค์ ๋์์ฑ์ ๋์ ํฉ๋๋ค. ๋จ์ผ ์ค๋ ๋๋ ๋ ํ๋ก์ธ์ค ๊ฐ์ ๊ณต์ ๋ ์ ์์ผ๋ฉฐ, ์ค๋ ๋๋ฅผ ์์ ํ ํ๋ก์ธ์ค์ ๊ตญํ ๋์ด ๋ฐ์ธ๋ฉ๋ฉ๋๋ค. ์ค๋ ๋๋ ํ๋ก์ธ์ค์์ ์ฌ๋ฌ ๊ฐ ์กด์ฌ๊ฐ๋ฅํ๋ค! ์ปค๋ ์์ค์์ ์ด์ผ๊ธฐํ ๋๋ ์ค๋ ๋๋ ํ๋ก์ธ์ค๋ผ๋ ์ฉ์ด ๋์ ์์ ask
- ํ ํ๋ก์ธ์ค์ ๋ชจ๋ ์ค๋ ๋๋ ๊ณต์ ์์์ผ๋ก์จ ์์ ๋ค์ ์์ ํ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ๋ชจ๋ ์ค๋ ๋์๋ ๊ฐ์ ์ฃผ์์ ์๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ ๊ทผํ ์ ์๋ ์คํ ์์ญ์ด ์กด์ฌํฉ๋๋ค
- ๊ฒ๋ค๊ฐ ํ๋ก์ธ์ค์ ์ค๋ ๋๋ ๋ชจ๋ CPU๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฉฐ, ๋๋ถ๋ถ ์ ์ปค๋์ ์๋ ์์ ์ค์ผ์ค๋ฌ๋ ์ด๋ค ์ฌ์ด์ CPU ์ฝ์ด๋ฅผ ๊ณต์ ํ๋ ๊ฐ์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ๋ฌ์ ์ฌ์ฉํฉ๋๋ค.
โ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ๋ฌ ์ข ๋ฅ
๋น์ ์ ์ค์ผ์ค๋ง cooperative scheduling
- ์์ ์ CPU ์ฝ์ด๋ฅผ ๋ถ์ฌํ๊ณ ํ๋ ฅ ์์ ์ด CPU ์ฝ์ด๋ฅผ ํด์ ํ๊ธฐ๋ฅผ ๋๊ธฐํ๋ ๊ฒ์ ๋๋ค.
- ์์ ์์ CPU๋ฅผ ํ์ํ๋ ๊ฐ์ ๋ ฅ์ด ์๋ค โ ์ ์ ์ preemptive์ด์ง ์์ต๋๋ค.
์ ์ ์ค์ผ์ค๋ง preemptive scheduling
- ์ค์ผ์ค๋ฌ ๊ฐ CPU ์ฝ์ด๋ฅผ ํ์ํ ๋๊น์ง ์์ ์ด CPU ์ฝ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ค์ผ์ค๋ฌ๊ฐ ์ ์ ์ ํตํด CPU๋ฅผ ํ์ํ๋ ค๋ฉด ์ฐ์ ์ ์๊ฐ ๋์ ์ ์ ์ ํธpreemptive signal๊ฐ ์์ด์ผ ํฉ๋๋ค
- ํน์ ์ ํ์ ์ ์ ์ค์ผ์ค๋ง์์๋ ์์
์ด ํน์ ์๊ฐ ๋์ ์ฃผ์ด์ง CPU ์ฝ์ด๋ฅผ ์ฌ์ฉ๊ฐ๋ฅ
- ์ด๋ฌํ ์ ํ์ ์ ์ ์ค์ผ์ค๋ง์ ์๋ถํ ์ด๋ผ๊ณ ํ๋ฉฐ, ํ์ฌ ์ปค๋์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ค์ผ์ค๋ง ์ ๋ต์ ๋๋ค. CPU๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์์ ์ ์ฃผ์ด์ง๋ ์๊ฐ ๊ฐ๊ฒฉ์๋ ๋ค์ํ ์ด๋ฆ์ด ์๋๋ฐ, ์ฌ๋ฌ ํ์ ๋ฌธํ ์์ ํ์์ฌ๋ผ์ด์ค, ํ์ ์ฌ๋กฏtime slot, ๋๋ ์์ํ quantum๋ผ๊ณ ํฉ๋๋ค.
โญ 14.7 ๋ฉํฐํ๋ก์ธ์ฑ
โ ๋ฉํฐ ํ๋ก์ธ์ฑ
- ๊ฐ๋จํ๊ฒ๋ ๋์ ์์
์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ค๋ ์๋ฏธ
- EX) ๊ณต์ฉ ๊ฒ์ดํธ์จ์ด ์ธํฐํ์ด์ค common gateway interface (CGI)
- ํ๋ก์ธ์๋ค์ ์ํํธ์จ์ด๊ฐ ๊ณ์ ๊ธฐ๋ฅํ๋๋ก ํ์ ์ ๋ณด๋ฅผ ๊ณต์ ํด์ผ ํฉ๋๋ค
โ ํ๋ก์ธ์ ๊ฐ ๊ณต์ ์ํ์ ์ ๊ทผํ ๋ ์ฌ์ฉํ ์ ์๋ ๊ธฐ์
- ํ์ผ ์์คํ
file system: ํ๋ก์ธ์ค ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
- ์ด ์ ๊ทผ๋ฒ์ ์์ฃผ ์ค๋๋์์ผ๋ฉฐ ๊ฑฐ์ ๋ชจ๋ ์ด์์ฒด์ ์์ ์ง์ํฉ๋๋ค.
- ํ ๊ฐ์ง ์๋ ์ํํธ์จ์ด ํ๋ก์ ํธ์ ์ ๋ง์ ํ๋ก์ธ์ค๊ฐ ์ฝ๋ ๊ตฌ์ฑ ํ์ผ configuration file์ ๋๋ค.
- ๋ง์ฝ ํ๋ก์ธ์ค ์ค ํ๋๊ฐ ํ์ผ์ ์ฝ์ผ๋ ค๊ณ ํ ๋ค๋ฉด, ๋ฐ์ดํฐ ๊ฒฝ์ ๋ฐ ๋์์ฑ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋งต ํ์ผ memory-mapped file: ๋ชจ๋ POSIX ํธํ ์ด์์ฒด์ ๋ฐ ๋ง์ดํฌ๋ก์ํํธ ์๋์ฐ์์๋ ๋์คํฌ์ ์๋ ํ์ผ์ ๋งคํ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ์์ต๋๋ค.
- ์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฝ๊ฑฐ๋ ์์ ํ ์ ์๋ ์ฌ๋ฌ ํ๋ก์ธ ์ค ์ฌ์ด์ ํด๋น ์์ญ์ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ์ด ๊ธฐ์ ์ ํ์ผ ์์คํ ์ ๊ทผ๋ฒ๊ณผ ๋งค์ฐ ๋น์ทํ์ง๋ง, ํ์ผ API ๋ฅผ ์ฌ์ฉํ๋ ํ์ผ ์์ ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ ๋ ๋ฐ์ํ๋ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ ์ ์ต๋๋ค.
- ๋งคํ๋ ์์ญ์ ๋ํ ์ ๊ทผ ๊ถํ์ด ์๋ ํ๋ก์ธ์ค๊ฐ ์ด ์์ญ์ ๋ด์ฉ์ ์์ ํ ์ ์์ ๋, ์ ์ ํ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉ ํด์ผํฉ๋๋ค.
- ๋คํธ์ํฌ network: ๋ค๋ฅธ ์ปดํจํฐ์ ์๋ ํ๋ก์ธ์ค๋ค์ด ํต์ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋คํธ์ํฌ ์ธํ๋ผ ๋ฐ ์์ผ ํ๋ก๊ทธ๋๋ฐ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
- ์์ผ ํ๋ก๊ทธ๋๋ฐ API๋ SUS ๋ฐ POSIX ํ์ค์์ ์ค์ํ๋ฉฐ, ๊ฑฐ ์ ๋ชจ๋ ์ด์์ฒด์ ์ ์์ต๋๋ค.
- ์ด ๊ธฐ์ ์ ๋ํ ์ธ๋ถ์ ์ธ ๋ด์ฉ์ ๋๋ฌด ๋ฐฉ๋ํ๊ณ ์ด๋ฅผ ๋ค๋ฃจ๋ ์ฑ ๋ ๋ง์ต๋๋ค.
- ์ ํธ signal: ๊ฐ์ ์ด์์ฒด์ ๋ด์์ ์คํ๋๋ ํ๋ก์ธ์ค๋ ์๋ก ์ ํธ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
- ์ด๋ ๋ช
๋ น ์ ํธ๋ฅผ ์ ๋ฌํ ๋ ๋ง์ด ์ฐ์ด์ง๋ง, ์์ ์ํ(ํ์ด๋ก๋payload)๋ฅผ ๊ณต์ ํ ๋๋ ์ฐ์ผ ์ ์์ต๋๋ค.
- ๊ณต์ ์ํ์ ๊ฐ ์ ์ ํธ๋ก ์ ๋ฌํ ์ ์์ผ๋ฉฐ ๋์ ํ๋ก์ธ์ค์์ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค.
- ์ด๋ ๋ช
๋ น ์ ํธ๋ฅผ ์ ๋ฌํ ๋ ๋ง์ด ์ฐ์ด์ง๋ง, ์์ ์ํ(ํ์ด๋ก๋payload)๋ฅผ ๊ณต์ ํ ๋๋ ์ฐ์ผ ์ ์์ต๋๋ค.
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ shared memory: POSIX ํธํ ์ด์์ฒด์ ๋ฐ ๋ง์ดํฌ๋ก์ํํธ ์๋์ฐ์์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค ์ฌ์ด์ ๊ณต์ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ์์ต๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ํ๋ก์ธ์ค๋ค์ ์ด ๊ณต์ ์์ญ์ ์ฌ์ฉํด ๋ณ์๋ฅผ ์ ์ฅํ๊ณ ๊ฐ์ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ ๊ฒฝ์์ผ๋ก๋ถํฐ ๋ณดํธ๋์ง ์์ผ๋ฉฐ, ๋ฐ๋ผ์ ์์ ๊ฐ๋ฅํ ๊ณต ์ ์ํ์ ๋ํ ์๋ฆฌ ํ์์๋ก ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ ํ๋ก์ธ์ค๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ํ๋ก์ธ์ค๋ค์ ์ด ๊ณต์ ์์ญ์ ์ฌ์ฉํด ๋ณ์๋ฅผ ์ ์ฅํ๊ณ ๊ฐ์ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ํ์ดํ pipe: POSIX ํธํ ์ด์์ฒด์ ๋ฐ ๋ง์ดํฌ๋ก์ํํธ ์๋์ฐ์์ ํ์ดํ๋ ๋จ๋ฐฉํฅ ํต์ ์ฑ๋์
๋๋ค.
- ํ์ดํ๋ ๋ ํ๋ก์ธ์ค ๊ฐ์ ๊ณต์ ์ํ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ ํ๋ก์ธ์ค๋ ํ์ดํ๋ฅผ ์์ฑํ๊ณ ๋ค๋ฅธ ํ๋๋ ํ์ดํ๋ก๋ถํฐ ์ฝ์ต๋๋ค.
- ํ์ดํ๋ ๊ธฐ๋ช ๋๋ ์ต๋ช ์ผ ์ ์์ผ๋ฉฐ, ๊ฐ ํ์ดํ๋ ๊ณ ์ ํ ์ ์ค ์ผ์ด์ค๊ฐ ์์ต๋๋ค.
- ์ ๋์ค ๋๋ฉ์ธ ์์ผ Unix domain socket: POSIX ํธํ ์ด์์ฒด์ ๋ฐ ์ต๊ทผ์ ์๋์ฐ 10์๋ ์ ๋์ค ์์ผ์ด๋ผ๋ ํต์ ๋จ๋ง์ด ์์ต๋๋ค.
- ๋์ผํ ๋จธ์ ์ ์๊ณ ๋์ผํ ์ด์์ฒด์ ๋ด์์ ์คํ๋๋ ํ๋ก์ธ์ค๋ค์ ์ ๋์ค ๋๋ฉ์ธ ์์ผ์ ์ฌ์ฉํด์ ์ ์ด์ค ์ฑ๋ full-duplex channel์ ํตํด ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
- ์ ๋์ค ๋๋ฉ์ธ ์์ผ์ ๋คํธ์ํฌ ์์ผ๊ณผ ๋งค์ฐ ๋น์ทํ์ง๋ง, ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ปค๋์ ํตํด ์ ์ก๋๋ฉฐ ๋ฐ๋ผ์ ์์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์์ฃผ ๋น ๋ฅธ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
- ๋ฉํฐํ๋ก์ธ์ค๋ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ํต์ ํ๊ธฐ ์ํด ๊ฐ์ ์ ๋์ค ๋๋ฉ์ธ ์์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ ๋์ค ๋๋ฉ์ธ ์์ผ ๋ํ ๋์ผํ ๋จธ์ ์ ์๋ ํ๋ก์ธ์ค ๊ฐ ํ์ผ ์์ ์๋ฅผ ์ ์กํ๋ ๋ฑ์ ํน์ดํ ์ ์ค์ผ์ด์ค์๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ์ ๋์ค ๋๋ฉ์ธ ์์ผ์ ์ข์ ์ ์ ๋คํธ์ํฌ ์์ผ์ธ ๊ฒ์ฒ๋ผ ๋์ผํ ์์ผ ํ๋ก๊ทธ๋๋ฐ API๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ์ ์ ๋๋ค.
- ๋ฉ์์ง ๋๊ธฐ์ด message queue: ๋ฉ์์ง ๋๊ธฐ์ด์ ๊ฑฐ์ ๋ชจ๋ ์ด์์ฒด์ ์ ์์ต๋๋ค.
- ๋ฉ์์ง ๋๊ธฐ์ด์ ๋ง์ ๋ฉ์์ง๋ฅผ ์ก์์ ํ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ์ปค๋์์ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค.
- ํ๋ก์ธ์ค๋ ์๋ก์ ๋ํด ์ ํ์๊ฐ ์์ผ๋ฉฐ, ๋ฉ์์ง ๋๊ธฐ์ด์ ๋ํ ์ ๊ทผ ๊ถํ๋ง ์์ผ๋ฉด ์ถฉ๋ถํฉ๋๋ค.
- ์ด ๊ธฐ์ ์ ๋์ผํ ๋จธ์ ์ ์๋ ํ๋ก์ธ์ค๊ฐ ์๋ก ํต์ ํ ์ ์๋๋ก ํ ๋๋ง ์ฐ์ ๋๋ค.
ํ๊ฒฝ ๋ณ์ environment variable: ์ ๋์ค ๊ณ์ด ์ด์์ฒด์ ๋ฐ ๋ง์ดํฌ๋ก์ํํธ ์๋์ฐ๋ ์ด์์ฒด์ ์์ฒด์์ ๋ณด ๊ดํ๋ ์ผ๋ จ์ ๋ณ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ด๋ฌํ ๋ณ์๋ฅผ ํ๊ฒฝ ๋ณ์๋ผ๊ณ ํ๋ฉฐ, ํ๊ฒฝ ๋ณ์๋ ์์คํ ๋ด์ ํ๋ก์ธ ์ค์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ฌ๋ฌ ์ค๋ ๋ ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋๊ธฐํํ๋ ์ ์ด ๊ธฐ์ ์ ๊ดํด, ๋ฉํฐํ๋ก์ธ์ฑ๊ณผ ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์ ์ฐ์ด๋ ๊ธฐ์ ์ด POSIX ํ์ค์ด ์ ๊ณตํ๋ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ API๋ฅผ ๊ณต์ ํ๋ค๋ ์ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
- ํ์ง๋ง ๋ฎคํ ์ค๋ ์กฐ๊ฑด ๋ณ์์ ๋ํ ๊ธฐ๋ณธ ๊ตฌํ์ ๋ฉํฐ์ค๋ ๋ฉ๊ณผ ๋ฉํฐํ๋ก์ธ์ฑ ์ฌ์ฉ์ ์ ์๋ก ๋ค๋ฅผ ์ ์์ต๋๋ค. ์์ธํ ์๋ ๋ค์ 15์ฅ์์ ์ ๊ณตํ๊ฒ ์ต๋๋ค.
โญ 14.8 ๋ฉํฐ์ค๋ ๋ฉ
โ ๋ฉํฐ ์ค๋ ๋ฉ
- ๋ฉํฐ์ค๋ ๋ฉ์ ๋์ ํ๊ฒฝ์์ ๋ณ๋ ฌ ์์ ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ค๋ ๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค.
- ๊ฐ ํ๋ก์ธ์ค๋ ์ต์ํ ํ๋์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๋๋ฐ ์ด๋ฅผ ๋ฉ์ธ ์ค๋ ๋ main thread๋ผ๊ณ ํฉ๋๋ค.
- ๋จ์ผ ์ค๋ ๋๋ฅผ ์ฌ์ฉํด ๋ชจ๋ ์์ ์ ์ํํ๋ ํ๋ก๊ทธ๋จ์ ๋จ์ผ ์ค๋ ๋single-threaded ํ๋ก๊ทธ๋จ
- ํ๋ก์ธ์ค ๋ด์ ๋ชจ๋ ์ค๋ ๋๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผ ํ ์ ์์ต๋๋ค. (๋ณ์ ์ ์ธํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ฌ์ฉ)
- ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ๋งค์ฐ ๋น์ทํ ๋งํผ, ํ๋ก์ธ์ค๊ฐ ์ํ๋ฅผ ๊ณต์ ํ๊ฑฐ๋ ์ ์กํ ๋ ์ฌ์ฉํ๋ ๋ชจ ๋ ๊ธฐ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ ๋ฉํฐํ๋ก์ธ์ค์ ๋ฉํฐ์ค๋ ๋ฉ์ ์ฐจ์ด์
๋ฉํฐํ๋ก์ธ์ฑ๊ณผ ๋ฉํฐ์ค๋ ๋ฉ ๊ฐ์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์ค๊ฐ์ ๊ณต์ ์ํ ์์ด ์๋ํ๋ ํ,๊ทธ๋ฆฌ ํฐ ์ฐจ์ด๋ ์์ต๋๋ค. ์ค๋ ๋ ๋์ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ทธ ๋ฐ๋๋ ๊ฐ๋ฅํฉ๋๋ค.
ํ ๊ฐ์ง ์ฐจ์ด์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ธฐํ ๊ธฐ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉํ๋๋ก ์ ๊ณตํ๋ API๋ ๊ฑฐ์ ๊ฐ์ง๋ง, ๋ฉํฐํ๋ก์ธ์ค ํ๊ฒฝ์์ ์๋ํ๋ ๊ฒ์ ํจ์ฌ ๋ ๋ณต์กํ๋ฉฐ ๊ธฐ๋ณธ ๊ตฌํ๋ ๋ค๋ฆ ๋๋ค.
๋ฉํฐํ๋ก์ธ์ฑ๊ณผ ๋ฉํฐ์ค๋ ๋ฉ ์ฌ์ด์ ๋ ๋ค๋ฅธ ์ฐจ์ด๋ ๊ณต์ ์ํ๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์ ์ ์์ต๋๋ค. ํ๋ก์ธ์ค์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ์ ์ ์ค๋ ๋๋ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ํํธ, ์ค๋ ๋๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํด์ ์ํ๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
๋ ์์ธํ ์ค๋ช ํ๋ฉด, ํ๋ก์ธ์ค๋ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ด๋ฅผ ์ฝ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ค๋ ๋์๋ ํจ์ฌ ์ฌ์ด ์ผ์ ๋๋ค. ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ๋ชจ๋ ์ค๋ ๋๋ ๊ฐ์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ค๋ ๋๋ค์ ๊ณต์ ์ํ๋ฅผ ์ ์ฅํ ๊ธฐ ์ํด ๊ฐ์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.