Post

๐Ÿข chap14. ๋™์‹œํ™”

โญ 14.1 ๋™์‹œ์„ฑ ๋ฌธ์ œ

โœ… ๋™์‹œ์„ฑ ๋ฌธ์ œ

???๋™์‹œ์„ฑ์„ ๋” ํƒ๊ตฌํ•˜๋‹ค ๋ณด๋ฉด ๊ณผ์—ฐ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ???

  • ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์œ ํ˜•
  • 1 ๊ณ ์œ ํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ intrinsic concurrency issue

    • ๋™์‹œ์„ฑ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†์„ ๋•Œ๋งŒ ์กด์žฌํ•˜๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ
    1. ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐ๋ฆฌ๋น™์ด ์ „์ฒด ์ƒํƒœ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    2. ๋ชจ๋“  ๋™์‹œ ์‹œ์Šคํ…œ์— ๋ณธ์งˆ์ ์œผ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— โ€˜๊ณ ์œ โ€™
    3. ์ด ๋ฌธ์ œ๋Š” ํ”ผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ด์šฉํ•ด ๋‹ค๋ฃจ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
    1. ๋™๊ธฐํ™” ์ดํ›„ ๋ฌธ์ œ post-synchronization issue
      • ๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐœ์ƒ ํ•˜๋Š” ๋ฌธ์ œ
    2. ๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ์ˆ ๋กœ ์ธํ•œ ๋ฌธ์ œ๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ ์šฉ๋œ ์ดํ›„์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    3. ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๊ณ ์น  ๋•Œ ์†์„ฑ ๋ฐ ๊ทผ๋ณธ ์›์ธ์ด ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ์•ผ๊ธฐ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

โœ… 1๋ฒˆ๊ณผ 2๋ฒˆ ๋ฌธ์ œ์˜ ์˜ˆ์‹œ

  1. ์˜ˆ๋ฅผ ๋“ค์–ด ๋™์ผํ•œ ๊ณต์œ  ๋ฐ์ดํ„ฐ ์ž์›์— ๋ชจ๋‘ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ–๋Š” ์ž‘์—…์ด ๋งŽ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.
  2. ์ด ์ž‘์—…๋“ค์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค๋ฅธ ์ž‘์—…์„ ์œ„ํ•ด ์ž‘์„ฑํ•œ ์•Œ๊ณ ๋ฆฌ๋“ฌ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์€ ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•˜๋Š” ์šฐ์—ฐํ•œ ์ถฉ๋Œ ๋˜๋Š” ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.
  4. ์ด๋•Œ ์ถฉ๋Œ ๋ฐ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•˜๊ณ  ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ผ๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”> ๊ณ ์œ ํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ intrinsic concurrency issue


  1. ์•Œ๊ณ ๋ฆฌ๋“ฌ์„ ๊ณ„์† ๋ถ„์„ํ•ด์„œ ๋งˆ์นจ๋‚ด ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ๋ฐ์ดํ„ฐ ์ž์›์— ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ์ด ๋ฐœ์ƒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ์ด์ œ ๊ณต์œ  ๋ฐ์ดํ„ฐ ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ๋– ์˜ฌ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด, ๋†€๋ž๊ฒŒ๋„ ์ผ๋ถ€ ์ž‘์—…๋“ค์ด ๋ฐ์ดํ„ฐ ์ž์›์— ์•„์˜ˆ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜์—ˆ์Œ์„ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  4. ๊ธฐ์ˆ ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ž‘์—…๋“ค์„ ๊ธฐ์•„ ์ƒํƒœ starve๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  5. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋„์ž…ํ•œ ๊ฒฐ๊ณผ, ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ์™€๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ์„ฑ๊ฒฉ์„ ์ง€๋‹Œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

โ€”> ๋™๊ธฐํ™” ์ดํ›„ ๋ฌธ์ œ post-synchronization issue

โญ 14.2 ๊ณ ์œ ํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ

โœ… ๊ณ ์œ ํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ

์ธํ„ฐ๋ฆฌ๋น™์€ ๊ทธ ์ž์ฒด๋กœ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค!

ํ•˜์ง€๋งŒ ์–ด๋–ค ๊ฒฝ์šฐ ์ธํ„ฐ๋ฆฌ๋น™(์†์„ฑ)์€ ์ง€์ผœ์•ผ ํ•  ์ผ๋ถ€ (๋ถˆ๋ณ€ํ•ด์•ผ ํ•˜๋Š”)์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๊ฒŒ๋˜๊ณ  ๋ฐ”๋กœ ์ด๋•Œ ์ธํ„ฐ๋ฆฌ๋น™์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค

โ€”> ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ถˆ๋ณ€ํ•จ์„ ์œ ์ง€ํ•˜๋„๋ก ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋ผ๋Š”

1
   ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋„์ž…ํ•ด์•ผ ํ•œ๋‹ค!

โœ… ๋ถˆ๋ณ€ ์ œ์•ฝ์กฐ๊ฑด

๋ถˆ๋ณ€ ์ œ์•ฝ ์กฐ๊ฑด invariant constraint

  • ์กฐ๊ฑด ๋ฐ ๊ธฐ์ค€์— ๋Œ€ํ•œ ๋ชฉ๋ก์„ ํ†ตํ•ด ํ‘œํ˜„๋˜๋ฉฐ ๋™์‹œ ์‹œ์Šคํ…œ์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์— ํ•ด๋‹น ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์•ฝ์กฐ๊ฑด
  • ๋™์‹œ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ธํ„ฐ๋ฆฌ๋น™์€ ๊ธฐ์กด์— ์ •์˜๋œ ๋ถˆ๋ณ€ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค
  • ์‹œ์Šคํ…œ์˜ ๋ถˆ๋ณ€ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐ๋ฆฌ๋น™์ด ์กด์žฌํ•  ๋•Œ ์‹œ์Šคํ…œ์— ๊ฒฝ์Ÿ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
  1. [์ฝ”๋“œ๋ฐ•์Šค 14-1]์˜ [์˜ˆ์ œ 14-1]์€ ๋‹จ ํ•˜๋‚˜์˜ ๋ถˆ๋ณ€ ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ์œผ๋ฉฐ,
  2. ๊ณต์œ ๋œ ์นด์šดํ„ฐ ๋ณ€์ˆ˜์—๋Š” ์ตœ์ข…์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•˜๊ณ  ์ด ๊ฐ’์€ 3์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  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]์— ๋Œ€ํ•ด ์ •์˜๋œ ๋ถˆ๋ณ€ ์ œ์•ฝ ์กฐ๊ฑด์„ ์œ„๋ฐ˜ํ•˜๋Š” ์ธํ„ฐ๋ฆฌ๋น™

34.png

  • [์ฝ”๋“œ ๋ฐ•์Šค 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.1์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  2. ๋”ฐ๋ผ์„œ X์— ๋Œ€ํ•œ ๊ฐ’์€ ์ง€์—ญ ๋ณ€์ˆ˜ A๋กœ ๋ณต์ œ๋ฉ๋‹ˆ๋‹ค.
  3. ํ•˜์ง€๋งŒ ์ž‘์—… P๊ฐ€ ๊ทธ๋ฆฌ ์šด์ด ์ข‹์ง€ ๋ชปํ•ด์„œ ๋ฌธ๋งฅ ๊ตํ™˜์ด ๋ฐœ์ƒํ•˜๊ณ  CPU๋Š” ์ž‘์—… Q์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  4. ์ด์–ด์„œ ๋ช…๋ น์–ด 2.1์ด ์‹คํ–‰๋˜๋ฉฐ X์— ๋Œ€ํ•œ ๊ฐ’์€ ์ง€์—ญ ๋ณ€์ˆ˜ B๋กœ ๋ณต์ œ๋ฉ๋‹ˆ๋‹ค.
  5. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ณ€์ˆ˜ A์™€ B๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๊ฐ’์ธ 2๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  6. ์ด์ œ ์ž‘์—… Q๋Š” ์šด ์ข‹๊ฒŒ๋„ ์‹คํ–‰์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋‹ค์Œ ๋ช…๋ น์–ด 2.2๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ B๋Š” 5๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  7. ๊ณ„์†ํ•ด์„œ ์ž‘์—… Q๋Š” 5๋ฅผ ๊ณต์œ  ์ƒํƒœ X์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ X๋Š” 5๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  8. ์ด์ œ ๋‹ค์Œ ๋ฌธ๋งฅ ๊ตํ™˜์ด ๋ฐœ์ƒํ•˜๊ณ , 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ยป ์“ฐ๋ž˜๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ด€์ 

35.png

  1. ๊ณ ์œ ํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ค‘ ๋ช…๋ น์–ด์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ ๋ฐœ์ƒ์ „ ์ œ์•ฝ(๋ช…ํ˜•์–ด)์„ ๋ถ€๊ณผํ•˜๊ณ  ๋ถˆ๋ณ€์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

36.png

  1. ๊ธฐ์กด์— ์ฝ”๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ช…๋ น์–ด ๊ฐ„์— ํŠน์ •ํ•œ ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ• (์ƒˆ๋กœ์šด ์ธํ„ฐ๋ฆฌ๋ฐ์„ ํ†ตํ•ด ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋™์‹œ ์‹œ์Šคํƒฌ ์ƒ์„ฑ์„ ํ†ตํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.)

37.png

  1. happens-before constraints(๋ฐœ์ƒ ์ „ ์ œ์•ฝ) : ์ƒˆ๋กœ์šด ์ธํ„ฐ๋ฆฌ๋ฐ์„ ํ†ตํ•ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์ „์— ์ œ์•ฝ(๋ช…๋ น์–ด)๋ฅผ ์ฃผ์–ด์„œ ๋ฌธ์ œํ•ด๊ฒฐ ์œ ์ผํ•œ ๊ฐœ์ฒด ์‹œ์Šคํƒฌ ์ถ”๊ฐ€ํ•ด์•ผํ•จ (๋™๊ธฐํ•˜ ์ดํ›„์— ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•)

38.png

  • ์ƒˆ๋กœ์šด ๋™์‹œ ์‹œ์Šคํ…œ์ด๋ž€ ์ƒˆ๋กœ์šด ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. (์ง์ ‘์ ์ธ ๋™์‹œ ์‹œ์Šคํ…œ์ด์—ˆ์Šต๋‹ˆ๋‹ค.)
  • ํ”„๋กœ์„ธ์„œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ํ˜น์€ ์—ฌ๋Ÿฌ ๋™์‹œ ์‹œ์Šคํƒฌ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋ฌธ๋งฅ ๊ตํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์œ ์ผํ•œ ๊ฐœ์ฒด์ธ ์ž์—ฐ์ ์ธ 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. ์ž„๊ณ„๊ตฌ์—ญ์— ์žˆ๋Š” ์ž‘์—…์€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์ž„๊ณ„๊ตฌ์—ญ์ด ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ์„ ์ ํ•ด ๋ฐฐ๋‚ผ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • ์„ธ๋งˆ ํฌ์–ด๋กœ ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ์ด ์—†๋Š” ์ƒํ˜ธ ๋ฐฐ์ œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ

      1. ์–ธ์ œ๋“  ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋งŒ ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์ž‘์—…์€ ์ด ์ž‘์—…์ด ์ž„๊ณ„ ๊ตฌ์—ญ์„ ๋– ๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ๋ฉ๋‹ˆ๋‹ค.

      2. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—๋Š” ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„๊ตฌ์—ญ์— ์ž…์žฅํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—…์€ ๊ฒฐ๊ตญ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      3. ์ž„๊ณ„๊ตฌ์—ญ์— ํ•œ๋ฒˆ์— ๋‘๊ฐœ์ด์ƒ์˜ ์ž‘์—…์ด ๋“ค์–ด๊ฐˆ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฎคํƒ์Šค
    • ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์žˆ๋„๋ก ํ•˜๋ฉฐ, ์„ธ๋งˆํฌ์–ด์™€ ๋น„์Šทํ•˜๊ฒŒ ์ž ๊ธˆ๊ณผ ํ•ด์ œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์žฅ๋ฒฝ์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์˜ˆ์ œ

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 ๋˜๋Š” ๋ฎคํ…์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฎคํ…์Šค๋Š” ์„ธ๋งˆํฌ์–ด๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ผ๋ฐ˜์ ์ด๋ฉฐ ๋™์‹œ์ ์ธ ์ฝ”๋“œ์—์„œ ํ•ญ์ƒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒฝ์Ÿ ์ƒํƒœ๊ฐ€ ์—†๋Š” ์ƒํ˜ธ ๋ฐฐ์ œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

    1. ์–ธ์ œ๋“  ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋งŒ ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์ž‘์—…์€ ์ด ์ž‘์—…์ด ์ž„๊ณ„ ๊ตฌ์—ญ์„ ๋– ๋‚  ๋•Œ๊นŒ์ง€๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    2. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—๋Š” ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ž…์žฅํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—…์€ ๊ฒฐ๊ตญ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋•Œ์— ๋”ฐ๋ผ์„œ๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์˜ ์ƒํ•œ์„ (๊ฒฝํ•ฉ ์‹œ๊ฐ„contention time)์„ ์ •ํ•ฉ๋‹ˆ๋‹ค.
    3. ์ž„๊ณ„ ๊ตฌ์—ญ์— ์žˆ๋Š” ์ž‘์—…์€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์ž„๊ณ„ ๊ตฌ์—ญ์ด ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ์„ ์ 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)
 }
}

โœ… ์‹œ๋‚˜๋ฆฌ์˜ค

  • ์ด์ œ ์ด๋ฅผ ๋™์‹œ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๊ฒฐํ•ด ์„ธ๋งˆํฌ์–ด๊ฐ€ ์ด๋Ÿฌํ•œ ๋น„์œ  ์†์˜ ๋น„์„œ์™€ ๊ฐ™์€ ์ผ์„ ํ•˜๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.
  • ์˜ˆ์‹œ์—์„œ ์˜์‚ฌ๋Š” ๊ณต์œ  ์ž์›์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ™˜์ž๋Š” ์˜์‚ฌ์—๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์ž‘์—…๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„์„œ๋Š” ์„ธ๋งˆํฌ์–ด์ž…๋‹ˆ๋‹ค. ๋ชฉ๋ก์„ ๊ฐ€์ง„ ๋น„์„œ์ฒ˜๋Ÿผ, ๊ฐ ์„ธ๋งˆํฌ์–ด๋Š” ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํš๋“ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ์ž‘์—… ๋Œ€๊ธฐ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ง„๋ฃŒ์‹ค์€ ์ž„๊ณ„ ๊ตฌ์—ญ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž„๊ณ„ ๊ตฌ์—ญ์ด๋ž€ ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋ณดํ˜ธํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—…์€ ์„ธ๋งˆํฌ์–ด ๋’ค์—์„œ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ ์„œ๋Š” ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ฉด ์ž„๊ณ„ ๊ตฌ์—ญ์„ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์„ธ๋งˆํฌ์–ด์˜ ์—ญํ• ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์ด ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ€๋ ค๊ณ  ํ•  ๋•Œ๋งˆ๋‹ค ํŠน์ • ์„ธ๋งˆํฌ์–ด์— ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ณ  ์ž„๊ณ„ ๊ตฌ์—ญ์—์„œ ๋‚˜๊ฐ€๋ ค ํ•  ๋•Œ ์ž‘์—…์€ ๋™์ผํ•œ ์„ธ๋งˆํฌ์–ด์— ์ด๋ฅผ ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

39.png

โญ 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'
		}
}
  • ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์žˆ๋„๋ก ํ•˜๋ฉฐ, ์„ธ๋งˆํฌ์–ด์™€ ๋น„์Šทํ•˜๊ฒŒ ์ž ๊ธˆ๊ณผ ํ•ด์ œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์žฅ๋ฒฝ์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฎคํ…์Šค(ํ˜น์€ ์„ธ๋งˆํฌ์–ด)๋ฅผ ์ž ๊ธ€ ๋•Œ, ๋ฎคํ…์Šค๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด์ œ๋˜๋Š” ๊ฒฝ์šฐ

    1. ์ž‘์—…์ด Unlock ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฎคํ…์Šค๊ฐ€ ํ•ด์ œ ๋ฉ๋‹ˆ๋‹ค.
    2. ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ์ž ๊ธด ๋ฎคํ…์Šค๊ฐ€ ํ•ด์ œ ๋ฉ๋‹ˆ๋‹ค.
    3. ์ž‘์—…์ด ์ž ์ž๊ธฐ ๋ชจ๋“œ๊ฐ€ ๋˜๋ฉด ์ž ๊ฒผ๋˜ ๋ฎคํ…์Šค๊ฐ€ ํ•ด์ œ ๋ฉ๋‹ˆ๋‹ค.
  • ์žฌ๊ท€์ ์ธ ๋ฎคํƒ์Šค : ์ž‘์—…ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ๋ฒˆ์„ ์ž ๊ธ€์ˆ˜ ์žˆ๋‹ค.

โญ 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)๋ฅผ ๊ณต์œ ํ•  ๋•Œ๋„ ์“ฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ๊ณต์œ  ์ƒํƒœ์˜ ๊ฐ’ ์€ ์‹ ํ˜ธ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ shared memory: POSIX ํ˜ธํ™˜ ์šด์˜์ฒด์ œ ๋ฐ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„์šฐ์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ๊ณต์œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ด ๊ณต์œ  ์˜์—ญ์„ ์‚ฌ์šฉํ•ด ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฐ’์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๊ณต ์œ ์ƒํƒœ์— ๋Œ€ํ•œ ์ž๋ฆฌ ํ‘œ์‹œ์ž๋กœ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ดํ”„ pipe: POSIX ํ˜ธํ™˜ ์šด์˜์ฒด์ œ ๋ฐ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„์šฐ์—์„œ ํŒŒ์ดํ”„๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  ์ฑ„๋„์ž…๋‹ˆ๋‹ค.
    • ํŒŒ์ดํ”„๋Š” ๋‘ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๊ณต์œ  ์ƒํƒœ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ํŒŒ์ดํ”„๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํŒŒ์ดํ”„๋กœ๋ถ€ํ„ฐ ์ฝ์Šต๋‹ˆ๋‹ค.
    • ํŒŒ์ดํ”„๋Š” ๊ธฐ๋ช… ๋˜๋Š” ์ต๋ช…์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ํŒŒ์ดํ”„๋Š” ๊ณ ์œ ํ•œ ์œ ์Šค ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ ๋‹‰์Šค ๋„๋ฉ”์ธ ์†Œ์ผ“ Unix domain socket: POSIX ํ˜ธํ™˜ ์šด์˜์ฒด์ œ ๋ฐ ์ตœ๊ทผ์˜ ์œˆ๋„์šฐ 10์—๋Š” ์œ ๋‹‰์Šค ์†Œ์ผ“์ด๋ผ๋Š” ํ†ต์‹  ๋‹จ๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋™์ผํ•œ ๋จธ์‹ ์— ์žˆ๊ณ  ๋™์ผํ•œ ์šด์˜์ฒด์ œ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ์œ ๋‹‰์Šค ๋„๋ฉ”์ธ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด์„œ ์ „์ด์ค‘ ์ฑ„๋„ full-duplex channel์„ ํ†ตํ•ด ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์œ ๋‹‰์Šค ๋„๋ฉ”์ธ ์†Œ์ผ“์€ ๋„คํŠธ์›Œํฌ ์†Œ์ผ“๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜์ง€๋งŒ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ปค๋„์„ ํ†ตํ•ด ์ „์†ก๋˜๋ฉฐ ๋”ฐ๋ผ์„œ ์†Œ์ผ“์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์•„์ฃผ ๋น ๋ฅธ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค๋Š” ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ™์€ ์œ ๋‹‰์Šค ๋„๋ฉ”์ธ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์œ ๋‹‰์Šค ๋„๋ฉ”์ธ ์†Œ์ผ“ ๋˜ํ•œ ๋™์ผํ•œ ๋จธ์‹ ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํŒŒ์ผ ์„œ์ˆ ์ž๋ฅผ ์ „์†กํ•˜๋Š” ๋“ฑ์˜ ํŠน์ดํ•œ ์œ ์Šค์ผ€์ด์Šค์—๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์œ ๋‹‰์Šค ๋„๋ฉ”์ธ ์†Œ์ผ“์˜ ์ข‹์€ ์ ์€ ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ผํ•œ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ API๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด message queue: ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด์€ ๊ฑฐ์˜ ๋ชจ๋“  ์šด์˜์ฒด์ œ์— ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด์€ ๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์†ก์ˆ˜์‹ ํ•˜๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋„์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ์— ๋Œ€ํ•ด ์•Œ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ๋งŒ ์žˆ์œผ๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๊ธฐ์ˆ ์€ ๋™์ผํ•œ ๋จธ์‹ ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ๋•Œ๋งŒ ์“ฐ์ž…๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ environment variable: ์œ ๋‹‰์Šค ๊ณ„์—ด ์šด์˜์ฒด์ œ ๋ฐ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„์šฐ๋Š” ์šด์˜์ฒด์ œ ์ž์ฒด์—์„œ ๋ณด ๊ด€ํ•˜๋Š” ์ผ๋ จ์˜ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    • ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ผ๊ณ  ํ•˜๋ฉฐ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์‹œ์Šคํ…œ ๋‚ด์˜ ํ”„๋กœ์„ธ ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ ๋ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ์ œ์–ด ๊ธฐ์ˆ ์— ๊ด€ํ•ด, ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ๊ณผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ ์“ฐ์ด๋Š” ๊ธฐ์ˆ ์ด POSIX ํ‘œ์ค€์ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ API๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ฎคํ…์Šค๋‚˜ ์กฐ๊ฑด ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ตฌํ˜„์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ๊ณผ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ์‚ฌ์šฉ์— ์„œ ์„œ๋กœ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์˜ˆ๋Š” ๋‹ค์Œ 15์žฅ์—์„œ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

40.png

โญ 14.8 ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ

โœ… ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์€ ๋™์‹œ ํ™˜๊ฒฝ์—์„œ ๋ณ‘๋ ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ ์ด๋ฅผ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ main thread๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ๋‹จ์ผ ์Šค๋ ˆ๋“œsingle-threaded ํ”„๋กœ๊ทธ๋žจ
  • ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ณ€์ˆ˜ ์„ ์–ธํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์‚ฌ์šฉ)
  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ๋งค์šฐ ๋น„์Šทํ•œ ๋งŒํผ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ ๋“  ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ์ฐจ์ด์ 

  • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ๊ณผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๊ฐ„์— ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘๊ฐ„์— ๊ณต์œ  ์ƒํƒœ ์—†์ด ์ž‘๋™ํ•˜๋Š” ํ•œ,๊ทธ๋ฆฌ ํฐ ์ฐจ์ด๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ ๋Œ€์‹  ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋ฐ˜๋Œ€๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ํ•œ ๊ฐ€์ง€ ์ฐจ์ด์ ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋™๊ธฐํ™” ๊ธฐ์ˆ ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‚ฌ์šฉํ•˜๋„๋ก ์ œ๊ณตํ•˜๋Š” API๋Š” ๊ฑฐ์˜ ๊ฐ™์ง€๋งŒ, ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์€ ํ›จ์”ฌ ๋” ๋ณต์žกํ•˜๋ฉฐ ๊ธฐ๋ณธ ๊ตฌํ˜„๋„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ๊ณผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์‚ฌ์ด์˜ ๋˜ ๋‹ค๋ฅธ ์ฐจ์ด๋Š” ๊ณต์œ  ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์— ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์„ ์Šค๋ ˆ๋“œ๋„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•œํŽธ, ์Šค๋ ˆ๋“œ๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋ฉด, ํ”„๋กœ์„ธ์Šค๋Š” ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ์ด๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šค๋ ˆ๋“œ์—๋Š” ํ›จ์”ฌ ์‰ฌ์šด ์ผ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์Šค๋ ˆ๋“œ๋“ค์€ ๊ณต์œ  ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜ ๊ธฐ ์œ„ํ•ด ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

41.png

This post is licensed under CC BY 4.0 by the author.