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

[OS / ์šด์˜์ฒด์ œ] Peterson's solution, Erroneus Algorithm, Peterson's Solution, Memory Barriers, Hardware Instructions, compare and swap, TestAndSet

by UKHYUN22 2022. 5. 2.
728x90

Peterson's solution

ํ”„๋กœ์„ธ์Šค๊ฐ€ 2๊ฐœ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •, 3๊ฐœ๋ถ€ํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€. Peterson์˜ solution์œผ๋กœ๋Š” ์•ˆ๋œ๋‹ค. Pi, Pj๋Š” ์ƒ๋Œ€์ ์ธ ์ด๋ฆ„์ด๋‹ค. ๋‚˜ ์ž์‹ ์ด P0๋ผ๋ฉด Pi๊ฐ€ P0๊ฐ€ ๋œ๋‹ค. Pi๋Š” ๋‚˜ ์ž์‹ ์„ ์ผ์ปซ๋Š” ๋ง์ด๋‹ค. turn, ๋ˆ„๊ฐ€ ๋“ค์–ด๊ฐˆ ์ฐจ๋ก€์ธ์ง€๊ฐ€ turn ๋ณ€์ˆ˜์— ํ•ด๋‹นํ•œ๋‹ค. flag๋ณ€์ˆ˜๋Š” ์‚ฌ์ด์ฆˆ๊ฐ€ 2์ธ ๋ฐฐ์—ด์ด๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ 2๊ฐœ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ. turn์˜ ์ดˆ๊นƒ๊ฐ’์€ 0 flag๋„ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด์žˆ๋‹ค.

 

 

Erroneus Algorithm

do while ๋ฃจํ”„ ์•ˆ์—์„œ critical section์ด ์กด์žฌํ•œ๋‹ค. entry section์ด while ์‹œ์ž‘๋ฌธ์ด๊ณ  exit section์€ ์•„๋ž˜ ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‚ด ์ฐจ๋ก€๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ธฐ๋‹ค๋ฆฌ๋ผ๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ๋œ๋‹ค. turn์ด i ์ธ ๊ฒฝ์šฐ false๊ฐ€ ๋˜์„œ critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์ฐจ๋ก€๋ฅผ ์ฃผ๋ฉด์„œ ๋๋‚˜๊ฒŒ ๋œ๋‹ค.

 

 

Erroneus Algorithm

0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด์žˆ์„ ๋•Œ ์‹œ์ž‘์€ P0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. condition์ด true์ด๋ฉด while๋ฌธ์„ ๊ณ„์† ๋Œ๊ฒŒ ๋œ๋‹ค. Process2๋Š” ๊ธฐ๋‹ค๋ฆฐ๋‹ค. Process1์ด ๋๋‚˜๋ฉด turn 1์ด ๋˜๋ฉด Process2๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. turn์„ 0์œผ๋กœ ๋งŒ๋“ค๋ฉด์„œ ๋‚˜์˜ค๋ฉด ๋‹ค์‹œ ์ƒ๋Œ€๋ฐฉ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. Mutual exclusion์€ ๋ณด์žฅ์ด๋œ๋‹ค. (์ดˆ๊ธฐํ™”๊ฐ€ ์ž˜ ๋˜์—ˆ๋‹ค๋Š” ์ „์ œ์กฐ๊ฑด์ด๋‹ค.) ๋™์‹œ์— ๋“ค์–ด์˜ค๋Š” ์ƒํ™ฉ์ด์–ด์•ผ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ๋‘˜์ด ๋™์‹œ์— ๋“ค์–ด์˜ค๊ณ  turn์˜ ๊ฐ’์— ๋”ฐ๋ผ์„œ 0์ด๋ƒ 1์ด๋ƒ์— ๋”ฐ๋ผ์„œ ํ•œ ๊ฐ€์ง€๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. Progress๋Š” ๋ณด์žฅ์ด ์•ˆ๋œ๋‹ค. remainder section์—์„œ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์‹ ํ˜ธ๋ฅผ ์ฃผ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— Critical section์— ์žˆ์ง€๋„ ์•Š์œผ๋ฉด์„œ ์ƒ๋Œ€๋ฐฉ์ด critical section์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ง‰๊ณ  ์žˆ๋‹ค.

 

 

Erroneus Algorithm2

flag[i] = true; ๋‚˜๋Š” critical section์— ๋“ค์–ด๊ฐˆ ๊ฑฐ๋ผ๊ณ  ์„ ์–ธ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. while(flag[j]);๋Š” ์ƒ๋Œ€๋ฐฉ์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ์ƒ๋Œ€๋ฐฉ์ด ๋“ค์–ด๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋‚ด๊ฐ€ critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. critical section์„ ๋– ๋‚  ๋•Œ flag๋ฅผ false๋กœ ํ•˜๊ณ  ๋– ๋‚˜๊ฒŒ ๋œ๋‹ค. 

 

 

Erroneous Algorithm2

Mutual exclusion์€ ๋ณด์žฅ์ด ๋œ๋‹ค. Progress๊ฐ€ ๋ณด์žฅ์ด ์•ˆ๋œ๋‹ค. (CPU๊ฐ€ ๋‘ ๊ฐœ์ธ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ) flag[0] =0  flag[1] = 0 -> flag[0] =1 flag[1] = 1 ๋˜๋ฉด ๋‘˜์ด ์„œ๋กœ๋ฅผ ์ง„์ž…ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. while๊ณผ true ํ• ๋‹น์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด?? mutual exclusion์ด ๋ณด์žฅ์ด ์•ˆ๋œ๋‹ค. 

 

 

Peterson's Solution

turn ํ•˜๊ณ  flag๋ฅผ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•œ๋‹ค. ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋งŒ false์ด๋ฉด critical section์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜์Œ์€ P0๊ฐ€ ์‹คํ–‰๋œ๋‹ค ์ € ์‚ฌ์ง„์—์„œ;..

๋‘˜์ด ๋™์‹œ์— ๋“ค์–ด์˜ฌ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ผ์ธ mutual exclusion ์ƒํƒœ๋ฅผ ์‚ดํŽด ๋ณด์ž. ๋™์‹œ์— ๋“ค์–ด์˜จ ๊ฒฝ์šฐ turn์˜ ๊ฐ’์€ 0์ผ ์ˆ˜๋„ 1์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋’ค์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด turn์˜ ๊ฐ’์ด ๋œ๋‹ค. while loop๊ฐ€ ๋‘˜ ๋‹ค false๋  ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด turn์ด 0์ธ ๋™์‹œ์— 1์ด์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.--> Mutual Exclusion ๋งŒ์กฑ

Progress๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€? P0๋งŒ ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ P0๋งŒ ์‹คํ–‰์ด ๋œ๋‹ค.

flag[1] = false; ๊ฐ€ Time quantum์ด ๋๋‚˜์ง€ ์•Š์•„์„œ remainder๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ Progress๊ฐ€ ๋ณด์žฅ๋œ๋‹ค. 

 

 

Peterson's Solution

Synchronization์€ thread๊ฐ„์—์„œ๋„ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋ณ€์ˆ˜ flag ๋ณ€์ˆ˜์™€ x ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. x๋Š” ๋ฌด์กฐ๊ฑด 100์ผ ๋•Œ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค. x๊ฐ€ 0์ผ ๋•Œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์ž…์žฅ์—์„œ Thread2๋ฅผ ์ปดํŒŒ์ผ ํ•  ๋•Œ thread 1์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค. Thread2๊ฐ„์˜ statement ๊ด€๊ณ„๊ฐ€ ์ „ํ˜€ ์—†๋‹ค. ๋ฐ”๊ฟ”์„œ ์†๋„ ๊ณ„์‚ฐ์ด ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๋จผ์ € flag = true๋กœ ๋ฐ”๊ฟ€ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” x ๊ฐ€ 0์œผ๋กœ ์ถœ๋ ฅ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•œ๋‹ค. 

 

 

Memory Model

CPU ํ•˜๋‚˜๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊ฟจ๋‹ค. ๊ทธ ๋ฐ”๊พธ์ž๋งˆ๋‹ค ๋ณ€ํ™”๋ฅผ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒฝ์šฐ Strongly ordered memory๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. cache์— ์žˆ๋Š” ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค. ํ•ด๋‹นํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ cache์—๋งŒ ์กด์žฌํ•˜๊ณ  memory์—๋งŒ ๋ฐ˜์˜๋˜๋Š” delay๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” if ๋ฌธ์ด ๋‹ค๋ฅด๊ฒŒ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. 

 

 

Memory Barriers

barrier์ด์ „์— ์žˆ์—ˆ๋˜ ๋ชจ๋“  ์ด์Šˆ๋“ค์€ ์ดํ›„์— ๋ชจ๋‘ ๋ฐ˜์˜์ด ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ œํ•œ์„ ๊ฑธ์–ด๋†“๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด x ๊ฐ€ 100์ด ๋œ ์ดํ›„์—๋งŒ ๋ฐ˜์˜์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ด ์•„๊นŒ์™€ ์ฐจ์ด์ ์ด ๋œ๋‹ค. 

 

 

Hardware Instructions

entry section๊ณผ exit section์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ. lock ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. lock ์ด 0์ด๋ฉด ๋“ค์–ด๊ฐ€๋„ ๋˜๊ณ  1์ด๋ฉด ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค. lock์€ ๋‹น์—ฐํžˆ shared variable์ด๋‹ค. entry section์—์„œ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ. ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ‘œ์‹œํ•˜๊ณ  ๋ˆ„๊ฐ€ ์ž ๊ทธ์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๋‚˜์˜ฌ ๋•Œ๋Š” ๋ฌธ์„ ์—ด์–ด ๋†“๊ณ  ๋‚˜์˜จ๋‹ค. 

 

 

Mutual Exclusion by Lock variable

while(lock) ์ž ๊ฒจ์žˆ์ง€ ์•Š์œผ๋ฉด ๋‚ด๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ. lock = true๋Š” ๋ฌธ์„ ์ž ๊ทธ๋Š” ๊ฒƒ์ด ๋œ๋‹ค. ๋‚˜์˜ฌ ๋•Œ๋Š” lock = false๋กœ ํ•˜๊ณ  ๋‚˜์˜จ๋‹ค. ๋™์‹œ์— ๋“ค์–ด๊ฐ€๋ฉด mutual exclusion์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. knocking๊ณผ locking ์‚ฌ์ด์— gap ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๊ฒƒ์ด ๋™์‹œ์— ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋Š”๋ฐ ๋”ฐ๋กœ ๋”ฐ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์ค‘๊ฐ„ ํƒ€์ž„์ด ์œ„๊ธฐ ์ƒํ™ฉ์ด ๋œ๋‹ค. lock๊ณผ knock์€ ๋ถ„๋ฆฌ ๋  ์ˆ˜ ์—†๋‹ค๋Š” ์กฐ๊ฑด์ด ๋“ค์–ด์˜ค๋ฉด ๋œ๋‹ค. ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์€ actomic์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

 

 

Interrupt disable

Interrupt๋ฅผ ๋ง‰์œผ๋ฉด Context Switching์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ค‘๊ฐ„์— ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ฐ€๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

 

Hardware Instruction

TestAndSet

machine instruction์ด๋‹ค. (Function์ด ์•„๋‹˜!!!!!!!!!) ์ค‘๊ฐ„ ๊ณผ์ •์ด ์—†๊ณ  ํ•œ ๋ฒˆ์— ํ™• ์‹คํ–‰์ด ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค. ๋ณ€์ˆ˜์˜ ์›๋ž˜ ๊ฐ’์„ local์— ์นดํ”ผํ•˜๊ณ  ๋ฌด์กฐ๊ฑด true๋กœ ์…‹์—…ํ•œ ํ›„ ์›๋ž˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์–ด๋–ค ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฉด์„œ ๋™์‹œ์— ๊ทธ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ 1๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. knocking์€ ๊ฐ’์„ ๊บผ๋‚ด์˜ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  lockingํ•˜๋Š” ๊ฒƒ์€ 1์„ ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ Machine Instruction์ด ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์˜ ์ˆ˜๋„ ์ฝ”๋“œ์ด๋‹ค(*******************)

lock ๋ณ€์ˆ˜ a , local ๋ณ€์ˆ˜ b๊ฐ€ ์žˆ๋‹ค. ๊ฐ’์„ ๊บผ๋‚ด๋Š” ๋™์‹œ์— 1๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๋™์‹œ์ ์ธ ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

 

compare and swap

value์— lock ๋ณ€์ˆ˜๊ฐ€ expected์™€ ๊ฐ™์œผ๋ฉด new_value๋ฅผ value์— ์ง‘์–ด ๋„ฃ์œผ๋ผ๋Š” ๊ฒƒ. value์˜ ๊ฐ’์„ ์ผ๋‹จ ๊บผ๋‚ด์˜จ๋‹ค. ๋ณ€์ˆ˜์˜ ๊ฐ’์ด 0์ด๋ฉด 1๋กœ overwriteํ•ด์•ผ ํ•œ๋‹ค. CAS๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. knocking๊ณผ locking์„ ํ•˜๋‚˜๋กœ ๋ฌถ๊ฒŒ ๋˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ๋œ๋‹ค.