๐Ÿ“Œ Process Synchronization 1

๋ชจ๊น…ยท2023๋…„ 5์›” 9์ผ
0

๐Ÿ“– 01. ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ

  • ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ‘๊ทผ๋˜๋Š” ํŒจํ„ด
    -> ์ €์žฅ๋œ ๊ณณ์ด ์žˆ์„ ๊ฑฐ๊ณ  ๊ทธ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€์„œ ์—ฐ์‚ฐ์„ ํ•ด์„œ ์—ฐ์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์›๋ž˜ ์œ„์น˜์— ์ €์žฅํ•œ๋‹ค.

  • ์ฝ๊ธฐ๋งŒ ํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€์„œ ์—ฐ์‚ฐ์„ ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ €์žฅํ•˜๋Š” ๊ณผ์ •์€ ๋ˆ„๊ฐ€ ๋จผ์ € ์ €์žฅํ•˜๋Š”๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ณ  ๊ทธ ๋•Œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋ฅผ synchonization๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ“– 02. Race Condition

  • Storage box๋ฅผ ์—ฌ๋Ÿฌ Excution box๊ฐ€ ๊ณต์œ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ๊นŒ?
    -> count++๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜์˜๋˜๊ธฐ ์ „์— count--๊ฐ€ ์‹คํ–‰๋˜๊ณ  count++ ๋ฐ˜ํ™˜ํ›„ count--๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค๋ฉด count++์€ ์‹คํ–‰๋˜์ง€ ์•Š์€ ๊ฒƒ๊ณผ ๊ฐ™๊ฒŒ ๋œ๋‹ค. (1๋บ€๊ฑฐ๋งŒ ๋ฐ˜์˜)

  • ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ Race Condition์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • process๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ž๊ธฐ ์ฃผ์†Œ๊ณต๊ฐ„๋งŒ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Race Condition์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค
    -> ๊ทธ๋Ÿฌ๋‚˜ ์šด์˜์ฒด์ œ์— ์š”์ฒญํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์‹œ์Šคํ…œ์ฝœ์„ ํ•œ๋‹ค.
    -> ์ปค๋„์˜ ์ฝ”๋“œ๊ฐ€ ๊ทธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€์‹ ํ•ด์„œ ์‹คํ–‰์ด ๋˜๊ณ 
    -> ์ปค๋„์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์ปค๋„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
    -> ์ปค๋„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘ ๋‹ค๋ฅธ process์—๊ฒŒ CPU๊ฐ€ ๋„˜์–ด๊ฐ€๊ฒŒ ๋์„ ๋•Œ
    -> ์ด ์นœ๊ตฌ ์‹œ์Šคํ…œ์ฝœ์„ ํ•ด์„œ ์ปค๋„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค
    -> Race Condition ๋ฐœ์ƒ

  • ์ปค๋„์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰์ค‘์ผ ๋•Œ interrupt๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ํ•˜๋˜ ์ผ์„ ์ค‘์ง€ํ•˜๊ณ  interrupt๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    -> interrupt๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๋˜ํ•œ ์ปค๋„์˜ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— Race Condition์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • ์œ ์ € ๋ ˆ๋ฒจ์—์„  ๋ณ„ ์ผ์ด ์—†์ง€๋งŒ ์ปค๋„์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“– 03. OS์—์„œ race condition์€ ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?

๐Ÿ“– 04. OS์—์„œ race condition (1/3)

  • ๊ณ ๊ธ‰์–ธ์–ด๋กœ ๋œ 1์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฌธ์žฅ์ด CPU๋‚ด๋ถ€์—์„œ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ instruction์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
    -> ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” count๋ผ๋Š” ๋ณ€์ˆ˜ ๊ฐ’์„ CPU์•ˆ์— register๋กœ ๋ถˆ๋Ÿฌ๋“ค์ด๊ณ  ๊ฐ’์„ 1์ฆ๊ฐ€ ์‹œํ‚จ ํ›„ register์˜ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค์‹œ ์˜ฌ๋ ค๋‘”๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ register๋กœ ์ฝ์–ด๋“œ๋ฆฐ ์‹œ์ ์—์„œ interrupt๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
    -> interrupt handler ๋˜ํ•œ ์ปค๋„ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— count--๋ฅผ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”?
    -> ์ค‘์š”ํ•œ ๋ณ€์ˆ˜๋ฅผ ๊ฑด๋“ค์ด๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋Š” interrupt๊ฐ€ ๋“ค์–ด์™€๋„ interrupt ์ฒ˜๋ฆฌ๋ฃจํ‹ด์œผ๋กœ ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค. (instruction์ด ๋๋‚œ ํ›„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.)

๐Ÿ“– 04. OS์—์„œ race condition (2/3)

  • ์šด์˜์ฒด์ œ์—๊ฒŒ ํŠน์ • ์„œ๋น„์Šค๋ฅผ ๋ถ€ํƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • process๋งˆ๋‹ค CPU ํ• ๋‹น์‹œ๊ฐ„์ด ์กด์žฌํ•˜๊ณ  ๊ทธ ์‹œ๊ฐ„์ด ๋๋‚˜๋ฉด CPU๋ฅผ ๋ฐ˜๋‚ฉํ•ด์•ผ ํ•œ๋‹ค.

  • user๋ ˆ๋ฒจ์— ์žˆ๋‹ค๊ฐ€ ์‹œ๊ฐ„์ด ๋๋‚˜๋ฉด ์ƒ๊ด€์—†๋Š”๋ฐ
    -> system call์„ ํ†ตํ•ด kernel๋ชจ๋“œ๊ฐ€ ์ˆ˜ํ–‰์ค‘์ด๋‹ค.
    -> ์ด ๋•Œ, count์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋„์ค‘ CPU ํ• ๋‹น์‹œ๊ฐ„์ด ์ข…๋ฃŒ๋˜๋ฉด B์—๊ฒŒ CPU๊ฐ€ ๋„˜์–ด๊ฐ€๊ณ  count์— ์ ‘๊ทผํ•œ๋‹ค.
    -> count++์€ ํ•œ๋ฒˆ๋งŒ ์ ์šฉ ๋  ๊ฒƒ์ด๋‹ค. (๋ฎ์–ด์“ฐ๊ธฐ)

  • ํ•ด๊ฒฐ์ฑ…!
    -> ์ปค๋„๋ชจ๋“œ์— ์žˆ์„ ๋•Œ๋Š” CPU๋ฅผ ๋บ๊ธฐ์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค.

๐Ÿ“– 05. OS์—์„œ race condition (3/3)

  • CPU๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋Š” ํ™˜๊ฒฝ

๐Ÿ“– 06. Process Synchoronization ๋ฌธ์ œ

๐Ÿ“– 07. Example of a Race Condition

๐Ÿ“– 08. The Critical-Section Problem

  • Critical-Section(์ž„๊ณ„๊ตฌ์—ญ) : ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ

๐Ÿ“– 09. ํ”„๋กœ๊ทธ๋žจ์  ํ•ด๊ฒฐ๋ฒ•์˜ ์ถฉ์กฑ ์กฐ๊ฑด

  • critical ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” 3๊ฐ€์ง€ ์กฐ๊ฑด

  • Bounded Waiting : process๊ฐ€ critical section์— ๋“ค์–ด๊ฐ€๊ธฐ๊นŒ์ง€ ๋„ˆ๋ฌด ์˜ค๋žœ ์‹œ๊ฐ„ ๊ธฐ๋‹ค๋ ค์„œ๋Š” ์•ˆ๋œ๋‹ค.(starvation X)

๐Ÿ“– 10. Initial Attempts to Solve Problem

  • ์ฝ”๋“œ๋Š” critical-section์ด๊ฑฐ๋‚˜ ์•„๋‹ˆ๊ฑฐ๋‚˜ ์ฆ‰, ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์ด๊ฑฐ๋‚˜ ์•„๋‹ˆ๊ฑฐ๋‚˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ critical section์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ƒฅ ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜๋ฉด ๋™์‹œ์ ‘๊ทผ์„ ํ†ตํ•ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ‘๊ทผ ์ด์ „์— entry section์„ ๋„ฃ์–ด์„œ lock์„ ๊ฑธ์–ด์•ผ ํ•œ๋‹ค.
    -> critical section์ด ๋๋‚˜๋ฉด lock์„ ํ’€์–ด์„œ ๋‹ค๋ฅธ process๊ฐ€ critical section์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

๐Ÿ“– 11. Algorithm 1

  • ์ฝ”๋“œ์—์„œ lock์„ ๊ฑธ๊ณ  ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

  • critical section์— ๋“ค์–ด์™”๋‹ค ๋‚˜๊ฐ€๊ธฐ ์ „์— CPU๋ฅผ ๋บ๊ธฐ์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.
    -> ์ฆ‰, ๊ณ ๊ธ‰์–ธ์–ด์—์„œ instruction์ด ํ•œ๋ฒˆ์— ์‹คํ–‰๋˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚˜๋ˆ ์ ธ์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— CPU๋ฅผ ๋บ๊ธธ ์ˆ˜ ์žˆ๋‹ค. (๋ฌธ์ œ์ )

  • while (turn != 0) : ๋‚ด ์ฐจ๋ก€๊ฐ€ ์•„๋‹Œ ๋™์•ˆ์— ๊ณ„์† while๋ฌธ์„ ๋Œ๊ฒ ๋‹ค.

  • ์ด ์ฝ”๋“œ๋Š” mutual exclution์„ ๋งŒ์กฑ์‹œํ‚จ๋‹ค.
    -> ๊ทธ๋Ÿฌ๋‚˜ progress๋Š” ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•œ๋‹ค.

  • P0๊ฐ€ ๋” ๋นˆ๋ฒˆํ•˜๊ฒŒ critical section์— ๋“ค์–ด๊ฐ€๊ณ  ์‹ถ์–ด๋„ P1์ด critical section์— ๋“ค์–ด๊ฐ€์•ผ๋งŒ P0๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

  • P1์ด critical section์— ํ•œ๋ฒˆ๋งŒ ๋“ค์–ด๊ฐ„๋‹ค๋ฉด P0๋Š” ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋“ค์–ด๊ฐ€๊ณ  ์‹ถ์–ด๋„ ํ•œ ๋ฒˆ ๋ฐ–์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•œ๋‹ค.

  • ๋”ฐ๋ผ์„œ Algorithm 1์€ ๋ฌธ์ œ๋ฅผ ์ œ๋Œ€๋กœ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ๋‹ค.

๐Ÿ“– 12. Algorithm 2

  • flag๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. process๋Š” ๊ฐ๊ฐ ์ž์‹ ์˜ flag๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    -> flag๋Š” ๋ณธ์ธ์ด critical section์— ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•˜๋Š” ์˜์ง€๋ฅผ ํ‘œํ˜„ํ•œ ๋ณ€์ˆ˜

  • flag๋ฅผ true๋กœ ํ•œ ํ›„ CPU๋ฅผ ๋บ๊ธด ํ›„ ๋‹ค๋ฅธ process์—์„œ๋„ flag๋ฅผ true๋กœ ํ•˜๋ฉด ์„œ๋กœ while๋ฌธ์—์„œ ๋น ์ ธ๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ์—ฐ์ถœ ๋  ์ˆ˜ ์žˆ๋‹ค.
    -> critical section ์ดํ›„์— falg = falseํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    -> progress ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค.(์•„๋ฌด๋„ ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•œ๋‹ค.)

๐Ÿ“– 13. Algorithm 3 (Peterson's Algorithm)

  • flag : ๋‚ด๊ฐ€ critical section์— ๋“ค์–ด๊ฐ€๊ฒ ๋‹ค๋Š” ์˜์ง€

  • turn : ๋„ค ์ฐจ๋ก€๋ƒ ๋‚ด ์ฐจ๋ก€๋ƒ

  • ์ƒ๋Œ€๋ฐฉ์ด ๊นƒ๋ฐœ์„ ๋“ค๊ณ  ์žˆ์ง€ ์•Š๊ฑฐ๋‚˜ ๋“ค๊ณ  ์žˆ๋”๋ผ๋„ ๋‚ด ์ฐจ๋ก€๋ผ๋ฉด critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

  • Busy Waiting(=spin lock)์ด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.
    -> ๋ณธ์ธ์˜ CPU ํ• ๋‹น์‹œ๊ฐ„์„ ๋ฐ”๋€Œ์ง€ ์•Š์„ ์“ธ๋ชจ์—†๋Š” ๊ณณ์—๋‹ค๊ฐ€ ์‚ฌ์šฉํ•ด๋ฒ„๋ฆฐ๋‹ค.

๐Ÿ“– 14. Synchronization Hardware

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์„ ํ•˜๋‚˜์˜ instruction์œผ๋กœ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ผ์–ด๋‚˜๋Š” ์ผ์ด๋‹ค.
    -> ํ•˜๋‚˜์˜ instruction์ด๋ผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.
    -> inturrupt๋„ ํ•˜๋‚˜์˜ instruction์„ ํ•ด๊ฒฐํ•˜๊ณ  ํ™•์ธํ•œ๋‹ค.

  • ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…์ด ํ•˜๋‚˜์˜ H.W instruction์œผ๋กœ ์‹คํ–‰ ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋น„๊ต์  ๊ฐ„๋‹จํžˆ lock์„ ๊ฑธ๊ณ  ํ‘ธ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ๋  ์ˆ˜ ์žˆ๋‹ค.
    -> Test_and_set(a) : a๋ฅผ ์ฝ์–ด๋‚ด๊ณ  a์˜ ๊ฐ’์„ 1(True)๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ํ•˜๋‚˜์˜ instruction

  • lock ์ด 0(False) ์ด์—ˆ๋‹ค๋ฉด 1๋กœ ๋งŒ๋“ค๊ณ  while๋ฌธ ํ†ต๊ณผ

  • 1(True) ์ด์—ˆ๋‹ค๋ฉด while ๋ฌธ์—์„œ ๋Œ€๊ธฐํ›„ ๊ทธ๋Œ€๋กœ 1๋กœ ์œ ์ง€

๐Ÿ“– 15. Semaphores

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ข€ ๋” ๊ฐ„์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ข€ ๋” ์ถ”์ƒํ™”๋œ Semaphores์„ ์‚ฌ์šฉํ•œ๋‹ค.
    -> ์—ฐ์‚ฐ๋งŒ ์‚ฌ์šฉํ•ด์„œ




    [์ถœ์ฒ˜] ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜ ๊ฐ•์˜
profile
๋ฉˆ์ถ”์ง€ ์•Š๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€