๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš— Major Study (Bachelor)/๐ŸŸง Operating System

[OS / ์šด์˜์ฒด์ œ] Mutual Exclusion using TestAndSet, Mutual Exclusion and Swap, Mutual Exclusion using CAS, Bounded Waiting Mutual Exclusion, Atomic Variable

by UKHYUN22 2022. 5. 9.
728x90

 

Mutual Exclusion using TestAndSet

  critical section ์•ž์— entry section์ด ์žˆ๋‹ค. Lock์˜ ์ดˆ๊นƒ๊ฐ’์ด false์ด๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์— ๋“ค์–ด๊ฐ€๋ ค๊ณ  ์‹œ๋„๋ฅผ ํ•œ๋‹ค. TestAndSet์€ ์ด์ „์˜ lock์˜ ๊ฐ’์„ return ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. while()๋ฌธ์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. ๋“ค์–ด๊ฐ€๋Š” ์ž…์žฅ์—์„œ while๋ฌธ์ด ๊นจ์ง€๋Š” ๊ฒƒ, Critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. lock = 0์ด๋ฏ€๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ณ  TestAndSet์€ ํ•ด๋‹น lock๊ฐ’์„ ๋ฌด์กฐ๊ฑด 1๋กœ ๋ฐ”๊พธ์–ด ์ค€๋‹ค. ๊ทธ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ true๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ TestAndSet์˜ ๋ฆฌํ„ด๊ฐ’์€ true์ด๋ฏ€๋กœ while ๋ฌธ์ด ์œ ์ง€๊ฐ€ ๋˜์–ด์„œ critical section์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•œ๋‹ค. ์ด ์ƒํ™ฉ์—์„œ๋Š” while ๋ฌธ์ด ์œ ์ง€๋˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ while๋ฌธ์ด ์œ ์ง€๋˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒํ™ฉ์ด๋‹ค.

  3๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์˜ค๋Š” ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ ํ”„๋กœ์„ธ์Šค๋„ while๋ฌธ์ด ์œ ์ง€๊ฐ€ ๋œ๋‹ค. ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ˜ธ์•„์—์„œ TestAndSet์˜ ์ƒํ™ฉ์€ ๋‹ค 1๋กœ ์œ ์ง€๊ฐ€ ๋œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ P1์€ ๋“ค์–ด๊ฐ€์ง€๋งŒ P2 P3๋Š” ๊ฑธ๋ ค์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค. P1์ด ๋‚˜๊ฐ€๋ ค๊ณ  ํ•  ๋•Œ lock = false๋กœ ๋ฐ”๊พผ๋‹ค. ํ•ด๋‹น ๊ฐ’์ด 0์œผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋˜๊ณ  P2, P3์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋œ๋‹ค. P2์˜ ๊ฒฝ์šฐ while๋ฌธ์ด 0์ด ๋˜์–ด๋ฒ„๋ ค์„œ Critical section์— ๋“ค์–ด๊ฐ€์„œ lock์˜ ๊ฐ’์„ 1๋กœ ๋ฐ”๊พธ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ P3๋Š” ๋“ค์–ด์˜ค์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๊ฒŒ ๋œ๋‹ค. ์‹ค์ œ๋กœ๋Š” Scheduling์„ ํ†ตํ•ด์„œ ๋จผ์ € ๋“ค์–ด๊ฐˆ ์ˆ˜ ์ž‡๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

Mutual Exclusion and Swap

  local variable์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ดˆ๊นƒ๊ฐ’์„ 1๋กœ ์„ค์ •์„ ํ•œ๋‹ค. P1์˜ key๊ฐ’์€ 1์ด ๋œ๋‹ค. while๋ฌธ์ด ๊ทธ๋Ÿฌ๋ฉด true๊ฐ€ ๋œ๋‹ค. ์ด ์ƒํƒœ์—์„œ swap Atomic Instruction์„ ์‚ฌ์šฉํ•œ๋‹ค. lock๊ณผ key๋ฅผ ๋ฐ”๊พธ๊ฒŒ ๋˜๋ฉด lock์€ 0์—์„œ 1๋กœ ๋˜๊ณ  key๋Š” 1์—์„œ 0์œผ๋กœ ๋ฐ”๋€๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด while๋ฌธ์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค P1์€ critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ ๋™์•ˆ P2๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ P2๋„ local variable์ด ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดˆ๊นƒ๊ฐ’์€ 1๋กœ ๋˜์–ด์žˆ๋‹ค. key๊ฐ€ true์ด๋ฏ€๋กœ swap์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๊ณ  lock์€ ํ˜„์žฌ ๊ฐ’์ด 1์ด๊ณ  key๋„ 1์ด๋ฏ€๋กœ ๋ฐ”๊ฟ”๋„ ๊ณ„์† 1์ด ๋œ๋‹ค.(ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ณ ์œ  ์ง€์—ญ ๋ณ€์ˆ˜ key๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ•ด๋‹น ๊ฐ’์€ ์ดˆ๊ธฐ์— ํ•ญ์ƒ ture๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋œ๋‹ค.)

  ํ•ด๋‹น While ๋ฌธ์ด ๊ณ„์† ๋ฐ˜๋ณต๋œ๋‹ค. critical section์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” ๋œป์ด๋‹ค. P2, P3๋Š” while์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค. P1์ด exit section์„ ๋งŒ๋‚  ๋•Œ lock์„ false๋กœ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ remainder section์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๊ทธ ๋•Œ์˜ P2, P3์˜ ์ƒํ™ฉ์„ ์‚ดํŽด๋ณด์ž.

 

  lock์ด 0์—์„œ ๋‹ค์‹œ 1๋กœ ๋˜๊ณ  key๋Š” 0์œผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. while ๋ฌธ์ด ๊นจ์ง€๊ฒŒ ๋˜๊ณ  critical section์œผ๋กœ P2๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์˜ฌ  ๋•Œ lock์„ 0์œผ๋กœ ๋ฐ”๊พธ์–ด์„œ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ ๋‹ค. TestAndSet๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ Mutual exclusion์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. lock์€ shared ๋ณ€์ˆ˜์ด๊ณ  key๋Š” local ๋ณ€์ˆ˜์ด๋‹ค.

 

 

Mutual Exclusion using CAS

  compare_and_swap์„ ํ•ด์„œ lock = 0 ์ธ ์ƒํƒœ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด 0์ด ๋ฆฌํ„ด์ด ๋˜์–ด์„œ ํ•ด๋‹น condition์— ์˜ํ•ด์„œ while๋ฌธ์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค๋Š” Critical section์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. lock๊ณผ ๋‘ ๋ฒˆ์งธ 0์˜ ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๊ฐ™์œผ๋ฉด ์„ธ ๋ฒˆ์งธ ๊ฐ’์„ lock์— ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋‹ค. while๋ฌธ์„ ์ง€๋‚˜๊ฐ€๊ฒŒ ๋˜๋ฉด์„œ lock์—๋Š” 1์ด๋ผ๋Š” ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค๋Š” ๋“ค์–ด๊ฐ€๊ณ  lock์˜ ๊ฐ’์„ 1๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ์ด๋‹ค. ๊ทธ ์ƒํƒœ์—์„œ P2๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ ๊ฒฝ์šฐ return ๊ฐ’์€ 1์ด ๋œ๋‹ค. (ํ˜„์žฌ lock์˜ ๊ฐ’์ด return ๋จ)

  while ๋ฌธ์ด ์œ ์ง€๊ฐ€ ๋˜๊ณ  ํ•ด๋‹น lock ๊ฐ’์€ 1๋กœ ์œ ์ง€๊ฐ€ ๋œ๋‹ค. P2๋Š” while ๋ฌธ์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. P1์ด ๋– ๋‚˜๋ฉด์„œ lock = 0์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋– ๋‚˜๊ฒŒ ๋œ๋‹ค. P2์™€ P3์— ์–ด๋–ค ์˜ํ–ฅ์„ ์ฃผ๋Š”๊ฐ€ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค. P2์˜ ๊ฒฝ์šฐ while๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด return ์ด 0์ด ๋˜๊ณ  while๋ฌธ์ด ๊นจ์ง€๊ฒŒ ๋˜๊ณ  ๋‹ค์‹œ lock ๊ฐ’์„ 1๋กœ ๋ฐ”๊พธ๊ฒŒ ๋˜๋ฉด์„œ P3๋ฅผ while๋ฌธ ์•ˆ์— ๋จธ๋ฌผ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. 

 

 

Bounded Waiting Mutual Exclusion

  ๋‚จ์ด ๋“ค์–ด๊ฐ€๋ฉด ๋‚ด๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ ์ตœ๋Œ€ํ•œ ๋ช‡ ๋ฒˆ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” Bounded Waiting์ด๋ผ๊ณ  ํ•œ๋‹ค. N๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์ตœ๋Œ€ํ•œ N-1๋ฒˆ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ƒ์‹์ ์ธ ๊ฒƒ์ด๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ 0๋ถ€ํ„ฐ N-1๋ฒˆ ๊นŒ์ง€ ์กด์žฌํ•˜๊ณ  Shared Process์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ๋ชจ๋“  ์ˆœ๊ฐ„์— Shared Process์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•œ๋‹ค. (X) ์ด ๊ฒฝ์šฐ critical section์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์กŒ๋‹ค๋Š” ๋ง์ด๋ฏ€๋กœ ํ‹€๋ฆฐ ๋ง์ด๋‹ค. ์ง„ํ•œ ํ™”์‚ดํ‘œ๋Š” Shared resource์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœ์„ธ์Šค์ด๋‹ค. ์–‡์€ ํ™”์‚ดํ‘œ๋Š” Critical section์— ๋“ค์–ด๊ฐˆ ์ƒ๊ฐ์ด ํ˜„์žฌ๋Š” ์—†๋Š” ์ƒํƒœ์ธ ๊ฒƒ์ด๋‹ค. ๋นจ๊ฐ„์ƒ‰ ํ™”์‚ดํ‘œ๋Š” ํ˜„์žฌ Critical section์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ฒ€์€์ƒ‰ ๊ตต์€ ํ™”์‚ดํ‘œ๋Š” Entry section์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ํ˜„์žฌ Lock์ด 1 ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. P1์ด ๋“ค์–ด๊ฐ”๋‹ค๊ฐ€ ๋‚˜์˜ค๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. lock = 0์œผ๋กœ ๋งŒ๋“ค์–ด์„œ๋Š” Bounded waiting์„ ๋ณด์žฅํ•˜๊ธฐ ํž˜๋“ค๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ถˆํŠน์ •ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ˆ„๊ฐ€ ๋“ค์–ด๊ฐˆ ์ง€๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค. ์•„๋งˆ Scheduling์„ ํ†ตํ•ด์„œ ๋‹ค์Œ์— ๋“ค์–ด๊ฐˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ ํ™•๋ฅ ์ด ๋†’๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ณด์žฅ์„ ํ•  ์ˆ˜ ์—†๋‹ค. N๊ฐœ์˜ Process๊ฐ€ ์žˆ์œผ๋ฉด ์ตœ๋Œ€ N-1๋ฒˆ ์ตœ๋Œ€ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 ๋“ค์–ด๊ฐ€๋‹ค ๋‚˜์˜ฌ ๋•Œ ํŠน์ • ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์•Œ๋ ค์ค˜์•ผ๋งŒ ์›ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. P1์ด ๋“ค์–ด๊ฐ”๋‹ค ๋‚˜์˜ค๋ ค๊ณ  ํ•  ๋•Œ ์–ด๋Š ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ„ฐ์น˜๋ฅผ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€. P3์—๊ฒŒ ํ„ฐ์น˜๋ฅผ ํ•ด์•ผ ํ•˜๊ณ  P3๋Š” P5์—๊ฒŒ ์‚ด์ง ํ„ฐ์น˜๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. P0๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚˜์˜ฌ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? ์ด ๊ฒฝ์šฐ๋Š” lock์„ false๋กœ ๋งŒ๋“ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. lock์„ ํ’€์–ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

Bounded Waiting Mutual Exclusion

critical section์— ์•„๋ฌด๋„ ์—†์„ ๋•Œ๋Š” lock = 0์ด๊ณ  ๋ˆ„๊ตฐ๊ฐ€ ์žˆ์„ ๋•Œ๋Š” lock = 1์ด ๋œ๋‹ค. ๊ตต์€ ํ™”์‚ดํ‘œ๊ฐ€ Critical section์— ๋“ค์–ด๊ฐ€๊ณ  ์‹ถ์ง€๋งŒ Waiting ํ•˜๋Š” ๊ฒƒ์ด ๋˜๊ณ  ๋นจ๊ฐ„์ƒ‰ ํ”„๋กœ์„ธ์Šค๋Š” ์ œ์™ธ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ waiting ๋ฐฐ์—ด๋กœ ์ง€์ •์„ ํ•œ๋‹ค. P1, P3, P5 ๋ชจ๋‘ 1์ด ๋˜๊ณ  ๋‚˜๋จธ์ง€ ๊ทธ๋ƒฅ ํ™”์‚ดํ‘œ๋“ค์€ 0์ด ๋œ๋‹ค. waiting ๊ฐ’์€ 0์ด ๋œ๋‹ค. waiting์€ Bounded Waitingํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ’์„ ๋”ฐ๋ผ๊ฐ€๋‹ค๊ฐ€ ๊ฐ’์ด 1์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋“ค์–ด์˜ค๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค. entry section๊ณผ exit section์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค. Bounded Waiting์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ์ค„์ด ๋Š˜์–ด๋‚ฌ๋‹ค. waiting[i] = 1์ธ ์นœ๊ตฌ๋“ค์€ Entry section์— ์žˆ๋Š” ์นœ๊ตฌ๋“ค์ด๋‹ค. Mutual Exclusioin์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ Entry section์— ์กด์žฌํ•œ๋‹ค. key = true์ด๋ฉด while test๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋‘ ๊ฐœ๊ฐ€ ๋‹ค True์—ฌ์•ผ While๋ฌธ์ด True๊ฐ€ ๋œ๋‹ค. waiting ๋„ true์ด๊ณ  key๋„ true์—ฌ์„œ TestAndSet์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค. lock์˜ ์ดˆ๊นƒ๊ฐ’์€ 0(false)์ด๊ณ  ๋ฆฌํ„ด ๊ฐ’์€ 0์ด ๋˜๊ณ  key๊ฐ’์ด 0์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ while์„ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด while๋ฌธ์ด false๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ while๋ฌธ์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ critical section์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๋“ค์–ด๊ฐˆ ๋•Œ TestAndSet์„ ์‹ค์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— lock์˜ ๊ฐ’์ด 1๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋˜๊ณ  waiting[i] ๋„ false(0)์œผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. 

 2๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ waiting[i] = True๋กœ ํ•˜๊ณ  key = true๋กœ ํ•˜๋ฉด while๋ฌธ์ด ์‹คํ–‰๋œ๋‹ค. TestAndSet์ด ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์€ lock์˜ ๊ฐ’์ด๋‹ค. ์ฆ‰ ๋ฆฌํ„ด๊ฐ’์€ 1์ด ๋˜๊ณ  key๋„ 1๋กœ ์œ ์ง€๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ while๋ฌธ์ด ๊ณ„์† ๋ฐ˜๋ณต๋˜์„œ Critical section์— ๋ชป๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. 

 J != I๋Š” ๋” ์ด์ƒ ๋Œ๋ฆฌ์ง€ ์•Š๊ณ  ํ•œ ๋ฐ”ํ€ด๋งŒ ๋Œ๊ณ  ๋๋‚ด๋ผ๋Š” ์กฐ๊ฑด์ด ๋œ๋‹ค. j == i ์ผ๋•Œ๋งŒ lock์„ ํ’€์–ด์ฃผ๊ฒŒ ๋œ๋‹ค. 

 

 

Atomic Variable

์ž„์˜๋กœ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน์ •ํ•œ Function์„ ์ด์šฉํ•ด์•ผ๋งŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Atomic Variable์˜ ๋œป์€ ํ•œ ๋ฒˆ์˜ operation์ด ๋ถ„๋ฆฌ๋  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋– ํ•œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ฆ๊ฐ€ํ•  ๋•Œ race condition์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด๋‹ค. increment function์„ ์ด์šฉํ•ด์•ผ๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜ Integer ๋ณ€์ˆ˜๋Š” ์ด ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ฐจ์ด์ ์ด๋‹ค. Atomic variable์€ OS๊ฐ€ ์ œ๊ณตํ•˜๋Š” Tool์ด๋‹ค. ์ผ๋ฐ˜ ๊ทธ๋ƒฅ Function์ด๋‹ค. ์–ด๋–ป๊ฒŒ Race condition์„ ๋ง‰์•„์ฃผ๋Š”๊ฐ€? ํ˜„์žฌ atomic ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์žˆ๋Š” ๋ฐ (v == 5) ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ v์˜ ๊ฐ’์„ 6์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. temp๋ผ๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. compare_and_swap์˜ ๋ฆฌํ„ด value๋Š” ์ด์ „์— ์žˆ์—ˆ๋˜ v์˜ ๊ฐ’์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฆฌํ„ด๊ฐ’์ด 5๊ฐ€ ๋˜๊ณ  temp๊ฐ€ 5์ด๋ฏ€๋กœ ํ•ด๋‹น ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ while๋ฌธ์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. (temp = 5) ๊นจ์ง€๊ณ  ๋‚˜์„œ๋Š” v๋Š” 6์ด ๋œ๋‹ค. increment function์ด ๋๋‚˜๊ฒŒ ๋˜๊ณ  ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋™์ž‘์ด ๋œ๋‹ค. v์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œ์ผฐ๊ณ  ์ •์ƒ์ ์œผ๋กœ ๋๋‚˜๊ฒŒ ๋๋‹ค.

 ์ค‘์š”ํ•œ ์ ์€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ v์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. temp์—๋‹ค๊ฐ€ v๋ฅผ ํ• ๋‹นํ•œ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์™€์„œ ๋จผ์ € increment ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ ๊ฒฝ์šฐ v๊ฐ€ 6์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค. v == 6, temp == 5๊ฐ€ ๋œ๋‹ค. compare_and_swap์€ ์ด๋•Œ 6์„ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋˜๊ณ  temp == 5์ด๋ฏ€๋กœ while๋ฌธ์ด ์œ ์ง€๊ฐ€ ๋œ๋‹ค. v == 6 temp == 5์ด๋ฏ€๋กœ temp+1์„ v์— ๋„ฃ์ง€ ์•Š๊ฒŒ ๋˜๋ฏ€๋กœ v๋Š” ๊ทธ๋Œ€๋กœ 6์ด ๋œ๋‹ค. ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด v = 6์œผ๋กœ ํ• ๋‹น์ด ๋˜๊ณ  v == 6, temp == 6์ด๋˜๋ฏ€๋กœ v์— temp+1์ธ 7์„ ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฆฌํ„ด๊ฐ’๊ณผ temp == 6์€ ๋™์ผํ•˜๋ฏ€๋กœ while๋ฌธ์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ผ์–ด๋“ค์–ด๋„ ์ •ํ™•ํ•˜๊ฒŒ ํ•˜๋‚˜ ์ฆ๊ฐ€ํ•˜๋Š” ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.