Skip to content

Latest commit

ย 

History

History
149 lines (80 loc) ยท 7.41 KB

synchornization.md

File metadata and controls

149 lines (80 loc) ยท 7.41 KB

ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”

1. ๊ฒฝ์Ÿ์ƒํƒœ(Race Condition)

์ •์˜

์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์‹œ์— ๋ฐ์ดํ„ฐ ์ ‘๊ทผํ•˜๋Š” ์ƒํ™ฉ

๋™๊ธฐํ™”(Synchornization)

๊ณต์œ  ๋ฐ์ดํ„ฐ์˜ ๋™์‹œ ์ ‘๊ทผ์€ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์–ด๋–ค ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ• ์ง€ ์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ด๋Ÿฐ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์‹คํ–‰์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ๋™๊ธฐํ™”(Synchornization) ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ฐœ์ƒ ์˜ˆ์‹œ

๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์ด ๋…๋ฆฝ์ ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ณดํ†ต ๊ฒฝ์Ÿ์ƒํƒœ๋Š” ์Šค๋ ˆ๋“œ ๋‹จ์œ„์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ฒฝ์Ÿ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋Š”, ์‹œ์Šคํ…œ ์ฝœ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ฐ™์€ ์ปค๋„ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ์ด๋‹ค.

  1. ์ปค๋„๋ชจ๋“œ ์ˆ˜ํ–‰ ์ค‘ ์ธํ„ฐ๋ŸฝํŠธ
  2. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•ด ์ปค๋„๋ชจ๋“œ ์ˆ˜ํ–‰ ์ค‘์ธ๋ฐ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋ฐœ์ƒ
  3. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ์ปค๋„ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ

2. ์ž„๊ณ„ ๊ตฌ์—ญ(Critical Section)

์ •์˜

์œ„์˜ ๊ฒฝ์Ÿ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์—ญ์„ ์ž„๊ณ„๊ตฌ์—ญ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ฌธ์ œํ•ด๊ฒฐ ์กฐ๊ฑด

์œ„์˜ ์ž„๊ณ„๊ตฌ์—ญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  1. ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion) : ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋‹จ์œ„(ํ”„๋กœ์„ธ์Šค) ๋งŒ์ด ์ž์›์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ์ง„ํ–‰(Progress) : ์ž„๊ณ„๊ตฌ์—ญ์— ์ ‘๊ทผ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค๋ฉด, ์ ‘๊ทผ์„ ์›ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„์ž… ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
  3. ํ•œ์ • ๋Œ€๊ธฐ(Bounded Waiting) : ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌดํ•œ์ • ๋Œ€๊ธฐํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ๋งŒ ์ž„๊ณ„์˜์—ญ ์ง„์ž…์„ ์œ„ํ•ด ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค.

3. ๋™๊ธฐํ™”(Synchronization) ์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜ 1

ํ˜„์žฌ Critical Section์— ๋“ค์–ด๊ฐˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์ธ์ง€๋ฅผ turn ๋ณ€์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด์–ด

์ผ์น˜ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋งŒ ์ง„์ž…ํ•œ๋‹ค.

์ฆ‰, ๋“ค์–ด๊ฐ€๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋นˆ๋„๊ฐ€ ์ˆœ์„œ๊ฐ€ ์žˆ๊ณ  ๋™์ผํ•˜๋‹ค!

(A ๊ธฐํšŒโ†’B ๊ธฐํšŒโ†’A ๊ธฐํšŒโ†’B ๊ธฐํšŒ)

Untitled

๋ฌธ์ œ: progress ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค. B ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ๋งŽ์ด ์ž์›์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์–ด๋„ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ 2

ํ”„๋กœ์„ธ์Šค๋“ค์€ flag ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ž์‹ ์ด ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ€๊ณ  ์‹ถ๋‹ค๊ณ  ์˜์‚ฌ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

Untitled

๋ฌธ์ œ : ์—ญ์‹œ Progress ๋งŒ์กฑ ๋ชปํ•œ๋‹ค.

๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ flag = true๊นŒ์ง€๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด,

๋‘ ํ”„๋กœ์„ธ์Šค ๋ชจ๋‘ ๋ฌดํ•œํžˆ Critical Section์— ์ง„์ž…ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ํ”„๋กœ์„ธ์Šค๋“ค์ด ์„œ๋กœ ๋Š์ž„์—†์ด ์–‘๋ณดํ•˜๊ฒŒ ๋œ๋‹ค!

์•Œ๊ณ ๋ฆฌ์ฆ˜ 3 (์ตœ์ข…) : Petersonโ€™s Algorithm

์œ„ ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ†ตํ•ฉ!

  • ๊นƒ๋ฐœ๋กœ ์˜์‚ฌ ํ‘œ์‹œ + ์ˆœ์„œ ํ™•์ธ
  • ์ƒ๋Œ€๋ฐฉ์ด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๋‚ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ€๊ฒ ๋‹ค!

Untitled

โ†’ ์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œํ•ด๊ฒฐ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•œ๋‹ค!

ํ•˜์ง€๋งŒ ์Šคํ•€๋ฝ์˜ busy waiting ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹คโ€ฆ

4. ์Šคํ•€๋ฝ

๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋Š” ์ง„์ž… ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ ์ž„๊ณ„๊ตฌ์—ญ ์ ‘๊ทผ์„ ์žฌ์‹œ๋„!

๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋Š” ์ง„์ž… ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ ์ž„๊ณ„๊ตฌ์—ญ ์ ‘๊ทผ์„ ์žฌ์‹œ๋„!

๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† ์ž์‹ ์ด ํ”„๋กœ์„ธ์Šค์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ด์•ผ ํ•จ.

๋”ฐ๋ผ์„œ, CPU, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์ƒ๊ธด๋‹ค!

์ด๋ฅผ Busy Waiting ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋‹ค๋งŒ, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ๋ณด๋‹ค ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋น„์šฉ์ด ๋” ํšจ์œจ์ ์ผ ๋•Œ,

์ฆ‰ ์ž„๊ณ„์˜์—ญ ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง์„ ์‹œ์—” ์Šคํ•€๋ฝ์ด ๋” ์œ ์šฉํ•˜๋‹ค.

๋ณดํ†ต ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

5. Synchronization Hardware

ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•!

Untitled

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ์„ ๋•Œ๋งˆ๋‹ค ๋ฝ์„ ๊ฑธ์–ด์ฃผ๊ณ , ์ฝ์€ ๊ฐ’์„ ํ•ด๋‹น ์ฝ์€ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ(์žฌํ• ๋‹น)ํ•œ๋‹ค!

5. ๋ฎคํ…์Šค(Mutex)

Untitled

ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„์˜์—ญ์— ์ง„์ž…ํ•ด ์ž‘์—… ์ค‘์ผ ์‹œ, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ž„๊ณ„์˜์—ญ์— ๋ชป ๋“ค์–ด๊ฐ„๋‹ค!

์ฆ‰, ํ•˜๋‚˜์˜ ์ž‘์—…๋‹จ์œ„๋งŒ ์ž„๊ณ„์˜์—ญ ์ง„์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค!

๋ฌธ์ œ : ์œ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 3๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์ด๋ฏ€๋กœ, ์Šคํ•€๋ฝ์˜ busy waiting ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

6. ์„ธ๋งˆํฌ์–ด(Semaphores)

๋ฎคํ…์Šค์™€ ๋‹ฌ๋ฆฌ busy waiting ๋ฐฉ์‹์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„์˜์—ญ ์ง„์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค!

Untitled

๋ฐฉ์‹

  1. busy waiting : ๊ณ„์† ์ด์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ๋ฌผ์–ด๋ณธ๋‹ค
  2. block & wakeup : ์ผ๋‹จ ์ž ๋“ค์—ˆ๋‹ค๊ฐ€, ์ž์›์ด ๋ฐ˜๋‚ฉ๋  ๋•Œ ๊นจ์›€๋‹นํ•œ๋‹ค. ๋ณดํ†ต ๋” ์ข‹๋‹ค.

ํŠน์ง•

  • ์นด์šดํ„ฐ๋ฅผ ํ†ตํ•ด ๋™์‹œ ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค ์ˆ˜(์ž์› ๊ฐœ์ˆ˜)๋ฅผ ์ œํ•œํ•œ๋‹ค.
  • ์ ‘๊ทผํ•œ ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž„๊ณ„์˜์—ญ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณ€์ˆ˜ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ฐ ์ ‘๊ทผํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ž์› ํš๋“ ์—ฐ์‚ฐ(P ์—ฐ์‚ฐ), ์ž์› ๋ฐ˜๋‚ฉ ์—ฐ์‚ฐ(V ์—ฐ์‚ฐ) ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์ข…๋ฅ˜

  • Binary Semaphore : 0,1๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์„ธ๋งˆํฌ์–ด. ์ฆ‰, ๋ฎคํ…์Šค!
  • Counting Semaphore : ๋ฎคํ…์Šค๊ฐ€ ์•„๋‹Œ ์„ธ๋งˆํฌ์–ด. ์ฆ‰, ์นด์šดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ 2 ์ด์ƒ์ธ ์„ธ๋งˆํฌ์–ด.

์ฐธ๊ณ ์ž๋ฃŒ

[์šด์˜์ฒด์ œ(OS)] 6. ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”(Process Synchronization)

์šด์˜์ฒด์ œ