๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
HYU/์šด์˜์ฒด์ œ(OS)

5. Process Synchronization (1)

by Jaeguk 2023. 3. 30.

Process Synchronization (ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”)

์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค ๋˜๋Š” ์Šค๋ ˆ๋“œ๋“ค์ด ๋™์‹œ์— ๋™์ž‘ํ•  ๋•Œ, ๊ทธ๋“ค์ด ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ

 

ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

๋งŒ์•ฝ ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋”๋ผ๋„ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ทธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ, ๋™์‹œ์— ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ๋ฐ”๊พธ๋ ค๊ณ  ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

Race Condition

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

=> ์ •์ƒ์ ์ธ ์‚ฐ์ˆ ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹Œ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ์“ด ๊ฐ’์œผ๋กœ ๊ฐ’์ด ๊ฒฐ์ •๋˜์–ด ๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

=> ์˜๋„์น˜ ์•Š๊ฒŒ ์ตœ์ข…์ ์ธ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ์ž˜๋ชป๋œ ๊ฐ’์œผ๋กœ ๊ฒฐ์ •

 

Q. ๊ทธ๋ ‡๋‹ค๋ฉด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” Write๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Read๋งŒ ํ•œ๋‹ค๋ฉด ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?

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

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ์ปค์„œ, Writeํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ, ์ „์ฒด ์ค‘ ์ผ๋ถ€ ๋น„ํŠธ์—๋งŒ ๊ฐ’์„ ์“ด ์™€์ค‘์— Read๋ฅผ ํ•œ๋‹ค๋ฉด ๊นจ์ง„ ๊ฐ’์„ ์ฝ๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ.

=> ๊ฒฐ๊ตญ, Writeํ•˜๊ณ  ์žˆ์„ ๋•Œ๋Š” Read๋ฅผ ํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ๋งž์Œ.

 

ํ”„๋กœ์„ธ์Šค๋“ค์ด ์„œ๋กœ๊ฐ€ ์„œ๋กœ์˜ ์ƒํ™ฉ์„ ์•Œ๊ณ  ๊ทธ์— ๋งž๊ฒŒ ์ž˜ ํŒ๋‹จํ•ด์„œ ์ ์ ˆํ•˜๊ฒŒ ์›€์ง์ผ ๋•Œ ๋™๊ธฐํ™”๋˜์–ด ์›€์ง์ธ๋‹ค๊ณ  ํ•œ๋‹ค.

=> ๋™๊ธฐํ™”๋Š” ์„œ๋กœ๊ฐ€ ์—ฐ๊ด€์ด ์žˆ์„ ๋•Œ๋งŒ ํ•„์š”ํ•˜๋‹ค. ์ฆ‰, Race Condition์ด ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ์ด์—๋งŒ ํ•„์š”ํ•˜๋‹ค.

 

Race Condition์— ์˜ํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ ์ƒํ™ฉ์„ ๋ณด์ž

X์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚ค๋Š” Operation๊ณผ 1 ๊ฐ์†Œ์‹œํ‚ค๋Š” Operation์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ–ˆ๋Š”๋ฐ, ์ตœ์ข…์ ์ธ ๊ฒฐ๊ณผ๋Š” ๊ธฐ์กด X์˜ ๊ฐ’์ธ 2์—์„œ 1์„ ๊ฐ์†Œ์‹œํ‚จ 1์ด ์ €์žฅ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฐ์ˆ ์ ์œผ๋กœ ์ •์ƒ์ ์ธ ๊ฐ’์€ 2๊ฐ€ ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค. 

๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋‘ Operation์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์ „์—, ๋จผ์ € ๋ฌธ์ œ๋ฅผ ์ •ํ˜•ํ™” ํ•ด์•ผ ํ•œ๋‹ค.

 

Critical Section Problem

n๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๊ฒฝ์Ÿ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ๋•Œ, ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ๋œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ ์ฝ”๋“œ ๋ถ€๋ถ„์„ ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ critical section์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ฆ‰, ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” critical section์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ณต์œ ๋œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ด์„œ ๊ฐ’์„ ๋ฐ”๊ฟ€ ๊ฒƒ์ด๋‹ค.

์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ์˜ critical section์„ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉด ๋‹ค๋ฅธ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ ์ž์‹ ์˜ critical section์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” ๊ฒƒ์ด Problem์ด๋‹ค.

=> ์ฆ‰, 2๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ž์‹ ์˜ critical section์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ์ด ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

=> Solution์€ ์ด๊ฒƒ์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•˜๋Š” ๊ฒƒ

 

Requirements for the Solution

Critical Section Problem์˜ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ œ์‹œ๋  Solution์ด ๊ฐ–์ถฐ์•ผ ํ•  ์กฐ๊ฑด๋“ค์ด๋‹ค.

Mutual Exclusion

: ์ƒํ˜ธ ๋ฐฐํƒ€์ ์œผ๋กœ critical section์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ.
ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์„ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ์˜ critical section์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ๋ชป ๋“ค์–ด๊ฐ€๊ฒŒ ๋ง‰๋Š” ๊ฒƒ์€ ์‰ฝ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋„ˆ๋ฌด ๊ณผ๋„ํ•˜๊ฒŒ ๋ง‰์œผ๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰๋˜, ๋“ค์–ด๊ฐ€๋„ ๋˜๋Š” ์ƒํ™ฉ์—๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผ throughput์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ํ•ด๊ฒฐ์ฑ…์€ ๋ง‰๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์€ ํ—ˆ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.

=> ์ด๊ฑธ ์œ„ํ•ด์„œ Progress์™€ Bounded Waiting์ด ํ•„์š”

Progress

ํ˜„์žฌ critical section์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค๋ฉด, ๋ˆ„๊ตฐ๊ฐ€๋Š” ๋“ค์–ด๊ฐ€๋„ ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ƒํ™ฉ์—์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ critical section์œผ๋กœ ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•˜๋ฉด ๊ทธ ๋†ˆ์€ ๋ฐ˜๋“œ์‹œ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
๋„ˆ๋ฌด ๊ณผ๋„ํ•˜๊ฒŒ ๋ง‰์•„์„œ, ์•„๋ฌด๋„ critical section์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š”๋ฐ๋„ critical section์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

Bounded Waiting

์ด๋ฏธ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์— ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section ์ˆ˜ํ–‰์„ ๋งˆ์น˜๋ฉด ๋‚ด๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ๊ทธ ์‚ฌ์ด์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ๋“ค์–ด๊ฐ€ ๋ฒ„๋ฆฌ๋ฉด ๋˜ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ํ•œ์ •์—†์ด ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ๋ง‰์•„์•ผ ํ•œ๋‹ค. 
์ฆ‰, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•  ๋•Œ ์–ธ์  ๊ฐ€๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ Bound๊ฐ€ ์ œ๊ณต๋˜์–ด์•ผ ํ•œ๋‹ค.

=> ์ง€๋‚œ ์‹œ๊ฐ„์— ๋ฐฐ์šด Starvation๊ณผ ๋น„์Šทํ•œ ๋А๋‚Œ.

 

์ด์ œ Mutual Exclusion, Progress, Bounded Waiting์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” Solution์ด ๋  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•ด๋ณด์ž.

์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋‹จ 2๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

critical section์— ๋ฌด์ž‘์ • ๋“ค์–ด๊ฐ€ ๋ฒ„๋ฆฌ๋ฉด ์•ˆ ๋œ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ critical section์„ ์ˆ˜ํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ์„ ํ•˜๊ณ  ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.

๊ทธ ํ™•์ธ์„ ํ•˜๋Š” ๋ถ€๋ถ„์ด entry section.
๊ทธ๋ฆฌ๊ณ  ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์–ด ๋“ค์–ด๊ฐ”๋‹ค๊ณ  ์น˜์ž. ๊ทธ ์ผ์„ ๋‹ค ๋๋‚˜๊ณ  ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ, ๊ทธ๋ƒฅ ๋น ์ ธ๋‚˜์˜ค๋ฉด ์•ˆ ๋œ๋‹ค. ๋‚ด๊ฐ€ ๋“ค์–ด์žˆ์–ด์„œ ๋ชป ๋“ค์–ด์˜ค๊ณ  ์žˆ๋Š” ์• ๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ๋น ์ ธ ๋‚˜์™”์œผ๋‹ˆ๊นŒ ์ด์ œ ๋“ค์–ด๊ฐ€๋„ ๋ผ ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ๋ถ€๋ถ„์ด exit section.

๊ทธ๋ž˜์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ critical section problem์„ ํ•ด๊ฒฐํ•˜๋Š” Solution๋“ค์€ critical section ์•ž๋’ค๋กœ entry section๊ณผ exit section์„ ๋ฐ˜๋“œ์‹œ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

์ด entry section๊ณผ exit section์— ์–ด๋–ค ๋‚ด์šฉ์ด ๋“ค์–ด๊ฐˆ์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด์ž. turn์ด๋ผ๋Š” ๊ณต์œ  ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ณ , turn == i ์ผ ๋•Œ i ๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

while๋ฌธ์„ ํ†ตํ•ด ์ž์‹ ์˜ turn์ด ์•„๋‹ˆ๋ฉด ๊ณ„์† ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

turn์˜ ์ดˆ๊ธฐ๊ฐ’์€ 0์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—” 0๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  critical section์„ ๋งˆ์นœ ํ›„ ๋น ์ ธ๋‚˜์˜ค๋ฉด์„œ turn์„ 1๋กœ ๋ฐ”๊พผ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋‹ค์‹œ ๋Œ์•„๊ฐ”์„ ๋•Œ๋Š” turn์ด 1์ด๊ธฐ ๋•Œ๋ฌธ์— 0๋ฒˆ ํ”„๋กœ์„ธ์Šค๋Š” while๋ฌธ์— ๊ฑธ๋ ค์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์‚ฌ์ง„์—” ๋‚˜์™€์žˆ์ง€ ์•Š์ง€๋งŒ, Process 1์˜ ์ฝ”๋“œ๋Š” while(turn != 1) ๋กœ ์ž์‹ ์˜ ํ„ด์„ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ critical section์„ ๋๋‚ด๊ณ  ๋น ์ ธ๋‚˜์˜ฌ ๋• turn์„ 0์œผ๋กœ ๋ฐ”๊ฟ€ ๊ฒƒ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ P0์™€ P1์€ ์„œ๋กœ ํ•œ ๋ฒˆ์”ฉ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ํ•œ ๋ฒˆ์”ฉ ๋Œ์•„๊ฐ€๋ฉด์„œ ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ•ด์„œ  Swap-turn์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ตœ๋Œ€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Mutual exclusion์˜ ์กฐ๊ฑด์€ ๋งŒ์กฑํ•˜์ง€๋งŒ Progress๋Š” ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์™œ?

๋งŒ์•ฝ, 0๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์„ ์ˆ˜ํ–‰ํ•˜๊ณ  turn์„ 1๋กœ ๋ฐ”๊พผ ํ›„ ๋น ์ ธ๋‚˜์™”๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿผ 0๋ฒˆ ํ”„๋กœ์„ธ์Šค๋Š” 1๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ turn์„ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ณ„์† while๋ฌธ์„ ๋Œ๋ฉด์„œ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ ๋งŒ์•ฝ P1์€ critical section๊ณผ ์ „ํ˜€ ๊ด€๋ จ ์—†๋Š” ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์–ด์„œ critical section์— ๋“ค์–ด๊ฐ€๋Š” ์‹œ๋„์กฐ์ฐจ ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค๋ฉด? ํ˜„์žฌ ์•„๋ฌด๋„ critical section์— ๋“ค์–ด๊ฐ€์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ P0๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ๋“ค์–ด๊ฐ€์ง€ ๋ชป ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

Algorithm 1์˜ ๋ฌธ์ œ๋Š” ์ƒ๋Œ€๋ฐฉ์ด critical section์— ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•˜๋Š” ์˜์ง€๊ฐ€ ์—†๋Š”๋ฐ๋„ ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

=> ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ƒ๋Œ€๋ฐฉ์ด critical section์— ๋“ค์–ด๊ฐ€๋ ค๋Š” ์˜์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‘ ๋ฒˆ์งธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์ƒ๋Œ€๋ฐฉ์˜ ์˜์ง€๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด flag๋ผ๋Š” ๊ณต์œ  ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

flag[i] == true๋ผ๋Š” ๊ฒƒ์€ i๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์— ๋“ค์–ด๊ฐ€๋ ค๋Š” ์˜์ง€๊ฐ€ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋‚˜์˜ flag๋ฅผ true๋กœ ๋ฐ”๊พธ๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ flag๋ฅผ ํ™•์ธํ•œ๋‹ค.
์ƒ๋Œ€๋ฐฉ์˜ flag๊ฐ€ false๊ฐ€ ๋˜๋ฉด while๋ฌธ์„ ๋น ์ ธ๋‚˜์™€์„œ critical section์œผ๋กœ ์ง„์ž…ํ•˜๋Š” ๊ตฌ์กฐ
=> ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Swap-turn ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ƒ๋Œ€๋ฐฉ์ด ๋“ค์–ด๊ฐˆ ์˜์ง€๊ฐ€ ์—†์œผ๋ฉด, ์—ฐ์†ํ•ด์„œ ๊ณ„์† ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Algorithm 1์—์„œ์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒ๋Œ€๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•˜๋ฉด ๋‚˜๋Š” while๋ฌธ์„ ๋Œ๋ฉด์„œ ๊ธฐ๋‹ค๋ฆฌ๋‹ˆ๊นŒ Mutual exclusion๋„ ๋งŒ์กฑํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ Progress ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•œ๋‹ค.

์™œ?

Pi์™€ Pj ๋‘˜ ๋‹ค ๋“ค์–ด๊ฐ€๊ฒ ๋‹ค๊ณ  flag๋ฅผ true๋กœ ๋ฐ”๊พธ๋ฉด ๋‘˜์ด ๋™์‹œ์— while๋ฌธ์„ ๋Œ๊ฒŒ ๋œ๋‹ค.
=> critical section์—” ์•„๋ฌด๋„ ์•ˆ ๋“ค์–ด๊ฐ”๋Š”๋ฐ, ์„œ๋กœ ์–‘๋ณดํ•˜๋А๋ผ ์•„๋ฌด๋„ ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

=> ๋”ฐ๋ผ์„œ Algorithm 2๋„ Solution์ด ๋˜์ง€ ๋ชปํ•œ๋‹ค.



Algorithm 2๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•  ๋•Œ, ๋„ˆ๊ฐ€ ๋“ค์–ด๊ฐ€! ๋ผ๊ณ  ํ†ต์ œํ•ด์ฃผ๋Š” ์• ๊ฐ€ ์—†๋Š” ๊ฒƒ์ด ๋ฌธ์ œ.

๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ์—ญํ• ์„ ํ•˜๋Š” ์• ๊ฐ€ Algorithm 1์—” ์žˆ์—ˆ๋‹ค. ๋ฐ”๋กœ turn์ด๋‹ค. turn์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ด๋ฒˆ์— ๋“ค์–ด๊ฐˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ์—ญํ• ์„ ํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ 1๋ฒˆ๊ณผ 2๋ฒˆ Algorithm์„ ์„ž์€ ๊ฒƒ์ด Peterson's Algorithm์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ์„ธ ๋ฒˆ์งธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

flag[i] = true๋กœ ๋ณ€๊ฒฝํ•ด์„œ ๋“ค์–ด๊ฐ€๊ฒ ๋‹ค๋Š” ์˜์ง€๋ฅผ ๋ฐํžŒ๋‹ค. ๊ทธ๋ฆฌ๊ณ  turn = j๋กœ ์„ค์ •ํ•ด์„œ ์ƒ๋Œ€์—๊ฒŒ ํ„ด์„ ๋จผ์ € ์–‘๋ณดํ•œ๋‹ค.

while(flag[j] and turn == j)๋ฅผ ํ†ตํ•ด ํ„ด์€ ์ด๋ฏธ ์ƒ๋Œ€๋กœ ๋ฐ€์–ด์คฌ์œผ๋‹ˆ, ์ƒ๋Œ€๊ฐ€ ๋“ค์–ด๊ฐˆ ์˜์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— turn์„ ์„œ๋กœ์—๊ฒŒ ๋ฐ€์–ด์ค„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์•„๋ฌดํŠผ ์ตœ์ข…์ ์œผ๋กœ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ turn์„ ๊ฐ€์งˆํ…Œ๋‹ˆ ์„œ๋กœ ์–‘๋ณดํ•˜๋А๋ผ ๋‘˜ ๋‹ค critical section์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ณ  ๋ฃจํ”„๋ฅผ ๋„๋Š” ์ƒํ™ฉ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

=> ์—ฌ๊ธฐ์„œ turn์„ ๋ฐ€์–ด์คฌ์ง€๋งŒ ์ƒ๋Œ€๊ฐ€ ์˜์ง€๊ฐ€ ์—†์œผ๋ฉด flag[j] == false ์ผํ…Œ๋‹ˆ while ๋ฃจํ”„๋ฅผ ํƒˆ์ถœํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ Swap-turn์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒ๋Œ€๋ฐฉ์ด critical section์„ ๋๋‚ด๊ณ  ์ž์‹ ์˜ flag๋ฅผ false๋กœ ๋ฐ”๊พธ๋Š” ์ˆœ๊ฐ„ while๋ฌธ์„ ํƒˆ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Mutual Exclusion๋„ ์ง€ํ‚ค๊ณ , Progress๋„ ๋งŒ์กฑํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ Solution์ด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ CPU๋ฅผ ์“ฐ๋ฉด์„œ while loop๋ฅผ ๋Œ๊ฒŒ ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

=> ์‹œ์Šคํ…œ์—์„œ ๋ฌด์˜๋ฏธํ•˜๊ฒŒ CPU๋ฅผ ์“ฐ๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค๊ณ  ํ–ˆ๋‹ค.

 

ํ”ผํ„ฐ์Šจ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ Lock์„ ์‚ฌ์šฉํ•ด์„œ critical section problem์„ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

critical section์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ํ”„๋กœ์„ธ์Šค๋Š” lock์„ ์žก์œผ๋ ค๋Š” ์‹œ๋„๋ฅผ ํ•œ๋‹ค. lock์„ ์žก์œผ๋ฉด critical section์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ  lock์„ ์žก์ง€ ๋ชปํ•˜๋ฉด ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  critical section์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ lock์„ ๋ฐ˜๋‚ฉํ•ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ lock์„ ์žก์•„์„œ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

์˜ค์ง ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ lock์„ ์žก์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ „์ œ ์กฐ๊ฑด๋งŒ ๋งŒ์กฑํ•œ๋‹ค๋ฉด Solution์ด ๋  ๊ฒƒ์ด๋‹ค.

locking system์ด๋ผ๊ณ  ํ•˜๋ฉด ํ•˜๋“œ์›จ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋Š”๋ฐ, locking system์ด๋ผ๋Š” ๊ฒƒ์˜ ๋ฒ”์œ„๋Š” ์—„์ฒญ ๋„“๋‹ค. ์—ด์‡ ๋ฅผ ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ , ์—ด์‡ ๋ฅผ ์žก์€ ํ”„๋กœ์„ธ์Šค๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜ ์ž์ฒด๊ฐ€ locking system์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

 

๊ฐœ๋ฐœ์ž์˜ ์ž…์žฅ์—์„œ ํ”ผํ„ฐ์Šจ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ Lock์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ค‘์— ์–ด๋–ค ๊ฒƒ์ด ๋” ํŽธํ• ๊นŒ?

ํ”ผํ„ฐ์Šจ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ํ”ผํ„ฐ์Šจ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•œ ๊ฐœ๋ฐœ์ž๋งŒ critical section์ด ํฌํ•จ๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ lock์„ ์ด์šฉํ•˜๋ฉด ๊ทธ๋Ÿฌํ•œ ์ดํ•ด ํ•„์š”์—†์ด critical section ์•ž๋’ค๋กœ acquire lock๊ณผ release lock๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ›จ์”ฌ ํŽธ๋ฆฌํ•  ๊ฒƒ์ด๋‹ค.

 

 

ํ•˜๋“œ์›จ์–ด๋ฅผ ์ด์šฉํ•ด์„œ๋„ critical section problem์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

critical section problem์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ์•„๊นŒ X=X+1์ด๋ผ๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ๋กœ๋Š” Load, Add, Store 3๋‹จ๊ณ„์˜ instruction์ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  P0์™€ P1์˜ Load, ์—ฐ์‚ฐ, Store instruction๋“ค์ด ์„œ๋กœ ์„ž์—ฌ์„œ interleaved ํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜๋‹ค ๋ณด๋‹ˆ Critical section problem์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด P0์˜ instruction์„ ์ญ‰ ์ˆ˜ํ–‰ํ•˜๊ณ  P1์˜ instruction์ด ์ญ‰ ์ˆ˜ํ–‰๋˜๊ฒŒ ํ•˜๋ฉด ๋˜๋Š”๋ฐ ์–˜๋„ค๊ฐ€ ์™œ ์„ž์—ฌ์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ผ๊นŒ?
CPU Scheduling ๋•Œ๋ฌธ์ด๋‹ค. 
P0๊ฐ€ Load instruction์„ ๊ฐ€์ ธ์™€์„œ ์ˆ˜ํ–‰ํ–ˆ๋Š”๋ฐ CPU Scheduling์ด ๋ฐœ์ƒํ•ด์„œ P1์—๊ฒŒ CPU๋ฅผ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋˜๊ณ , P1์ด Load instruction์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋˜ CPU Scheduling์ด ๋ฐœ์ƒํ•˜๊ณ  P0๊ฐ€ CPU๋ฅผ ๋ฐ›์•„ Add instruction์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ด๋Ÿฐ ์‹์ด๋‹ค.

๋งŒ์•ฝ P1์ด Load instruction์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— CPU Scheduling์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆฐ๋‹ค๋ฉด?
Load, Sub, Store๋ฅผ ํ•œ ๋ฒˆ์— ๋‹ค ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ์ ˆ๋Œ€ ๋‘ ํ”„๋กœ์„ธ์Šค์˜ instruction์ด ์„ž์—ฌ์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ผ์€ ์—†๋‹ค.

๋‚ด๊ฐ€ CPU๋ฅผ ์žก๊ณ  ์žˆ๋‹ค๊ฐ€ ๋†“์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
I/O๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ, Time quantum์ด ๋์ด ๋‚˜์„œ ๋†“์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ.
critical section์—์„œ๋Š” I/O๊ฐ€ ๋ฐœ์ƒํ•  ์ผ์€ ์—†๋‹ค.
๋”ฐ๋ผ์„œ critical section์—์„œ CPU๋ฅผ ๋†“์•„์•ผ ํ•˜๋Š” ์ผ์€ Time quantum์„ ๋ชจ๋‘ ์†Œ์ง„ํ•œ ๊ฒฝ์šฐ ๋ฟ์ด๋‹ค.

Time quantum์ด ๋๋‚œ ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ์ฃผ์ฒด๋Š” Timer. ์–˜๊ฐ€ ์‹œ๊ฐ„์„ ์ธก์ •ํ•ด์„œ ๋๋‚˜๋ฉด interrupt๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.
๋”ฐ๋ผ์„œ ์ด Timer device์˜ interrupt๋ฅผ disabled ์‹œ์ผœ๋ฒ„๋ฆฌ๋ฉด, interrupt๋ฅผ ์ฒดํฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ฃผ์–ด์ง„ Time quantum์„ ๋‹ค ์†Œ์ง„ํ•ด๋„ Timer interrupt๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— CPU๋ฅผ ๊ณ„์† ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

critical section์„ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— Timer interrupt๋ฅผ disabled ์‹œํ‚จ ๋‹ค์Œ์— critical section์— ๋“ค์–ด๊ฐ€๋ฉด CPU ์Šค์ผ€์ค„๋ง์ด ๋ฐœ์ƒํ•  ์ˆ˜๊ฐ€ ์—†์Œ. ๊ทธ๋ฆฌ๊ณ  ๋น ์ ธ ๋‚˜์˜ค๋ฉด์„œ enable ์‹œํ‚จ๋‹ค.
 
=> ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒŒ ๋งŒ๋ณ‘ํ†ต์น˜์•ฝ์€ ์•„๋‹ˆ๋‹ค, CPU๊ฐ€ ํ•˜๋‚˜์ธ ์‹ฑ๊ธ€ ์ฝ”์–ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

๊ทธ๋ž˜์„œ instruction๋“ค์ด atomicํ•˜๊ฒŒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ์žˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋ฐ”๋กœ Synchronization Hardware๋‹ค.

๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฆ˜ CPU๋Š” ํŠน๋ณ„ํ•œ ํ•˜๋“œ์›จ์–ด ํšŒ๋กœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
์ด ํšŒ๋กœ๋Š” single cycle์— ๊ธฐ๋Šฅ์„ ๋‹ค ๋๋งˆ์น  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•œ๋‹ค.
์ด ํšŒ๋กœ๊ฐ€ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ด ํ•จ์ˆ˜๊ฐ€ ์ผ๋‹จ ์‹คํ–‰๋˜๋ฉด ๋๊นŒ์ง€ ๊ฐ„๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ด์ค€๋‹ค.
=> Atomic Hardware

์ด ํ•˜๋“œ์›จ์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ Test and Set (TAS)๊ณผ Swap 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.


TAS( Test and Set )

TAS ํ•˜๋“œ์›จ์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ TestAndSet ๋กœ์ง์„ atomicํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌํ˜„๋œ ํ•˜๋“œ์›จ์–ด์ด๋‹ค.

TestAndSet ํ•จ์ˆ˜๋Š” target ๊ฐ’์„ true๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „ ๊ธฐ์กด์˜ target๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๋‹จ์ˆœํ•œ ํ•จ์ˆ˜์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” TAS๋ฅผ ์ด์šฉํ•ด์„œ ์–ด๋–ป๊ฒŒ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ๊นŒ?

๋งจ ์ฒ˜์Œ ์ง„์ž…์„ ์‹œ๋„ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” TestAndSet์„ ํ˜ธ์ถœํ•˜์—ฌ lock์„ true๋กœ ๋ฐ”๊พธ๊ณ  ์ดˆ๊ธฐ lock ๊ฐ’์ธ false๋ฅผ ๋ฆฌํ„ด๋ฐ›์•„ critical section์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„์ž…์„ ์œ„ํ•ด TestAndSet์„ ํ˜ธ์ถœํ•˜๋ฉด, lock์€ true๋กœ ๋ฐ”๋€Œ์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— true๋ฅผ ๋ฆฌํ„ด๋ฐ›์•„ while๋ฌธ์„ ๋Œ๋ฉฐ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด์— ์ง„์ž…ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์„ ๋๋‚ด๊ณ  lock์„ false๋กœ ๋ฐ”๊พธ๋Š” ์ˆœ๊ฐ„ lock์„ true๋กœ ๋ฐ”๊พธ๊ณ  false๋ฅผ ๋ฆฌํ„ด๋ฐ›์•„ critical section์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

atomic ํ•˜๋“œ์›จ์–ด ๋•๋ถ„์— ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์ž๋Š” TestAndSet(lock)์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

Swap

Swap์€ ๊ธฐ์กด์— ์ž˜ ์•Œ๋ ค์ง„ Swap ์ฝ”๋“œ๋ฅผ atomicํ•˜๊ฒŒ ์‹คํ–‰ํ•ด์ฃผ๋Š” ํ•˜๋“œ์›จ์–ด์ด๋‹ค.

์ด๋Ÿฌํ•œ Swap ํ•˜๋“œ์›จ์–ด๋ฅผ ์ด์šฉํ•ด์„œ ์–ด๋–ป๊ฒŒ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ๊นŒ?

critical section์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ key = true๋กœ ์„ค์ •ํ•˜๊ณ  Swap์„ ํ˜ธ์ถœํ•œ๋‹ค.

์ด๋ฏธ ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ Swap์„ ํ†ตํ•ด lock ๊ฐ’์„ true๋กœ ๋ฐ”๊ฟ”๋†“์•˜์„ ๊ฒƒ์ด๋ฏ€๋กœ key์™€ lock์„ ์„œ๋กœ swapํ•ด๋„ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋จผ์ € ์ง„์ž…ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์„ ๋๋‚ด๊ณ  lock์„ false๋กœ ๋ฐ”๊พธ๋Š” ์ˆœ๊ฐ„ lock์ด false์ด๋ฏ€๋กœ Swap์„ ํ˜ธ์ถœํ•œ ํ”„๋กœ์„ธ์Šค๋Š” key = false๊ฐ€ ๋˜์–ด while ๋ฃจํ”„๋ฅผ ํƒˆ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์ด 2๊ฐ€์ง€๋Š” atomic hardware๊ฐ€ ์ œ๊ณต๋˜์–ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•˜๋“œ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

( ์—ฌ๊ธฐ์„œ์˜ ๋ชฉ์ ์€ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด์„œ๋„ ๊ฐœ๋ฐœ์ž์˜ ๋ถ€๋‹ด์„ ๋œ์–ด์ฃผ๋Š” ๊ฒƒ )

 

Semaphore

์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜ S๋Š” integer variable์ด๊ณ  2๊ฐœ์˜ atomicํ•œ operation P(), V() ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ๋  ์ˆ˜ ์žˆ๋‹ค.

P๋Š” S๊ฐ€ ์–‘์ˆ˜๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ ์–‘์ˆ˜๊ฐ€ ๋˜๋ฉด ๋น ์ ธ๋‚˜์˜ค๋ฉด์„œ S๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

V๋Š” ๋‹จ์ˆœํžˆ S์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚ค๋Š” Operation์ด๋‹ค.

์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜ ํ•˜๋‚˜์™€ P(), V() Operation์„ ํ†ตํ•ด ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ดˆ๊ธฐ์˜ mutex ๊ฐ’์€ 1์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งจ ์ฒ˜์Œ ์ง„์ž…์„ ์‹œ๋„ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ P๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด while๋ฌธ์— ๊ฑธ๋ฆฌ์ง€ ์•Š๊ณ  mutex๊ฐ’์„ 0์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ๊ทธ๋ฆฌ๊ณ  critical section์— ์ง„์ž…ํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋•Œ ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„์ž…์„ ์‹œ๋„ํ•˜๊ธฐ ์œ„ํ•ด P๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด mutex๊ฐ€ 0์ด๊ธฐ ๋•Œ๋ฌธ์— while๋ฌธ์— ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์•ž์„œ ์ง„์ž…ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์„ ๋๋‚ด๊ณ  ๋‚˜์˜ค๋ฉด์„œ V๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด mutex๊ฐ’์ด 1 ์ฆ๊ฐ€๋˜์–ด 1์ด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๊ธฐ๋‹ค๋ฆฌ๋˜ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ  ๋˜ mutex ๊ฐ’์„ 0์œผ๋กœ ๋ฐ”๊พธ๊ฒŒ ๋œ๋‹ค.

 

๊ฐœ๋ฐœ์ž๋Š” ๊ทธ๋ƒฅ critical section ์•ž ๋’ค๋กœ P์™€ V๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ• ๊นŒ?

์•ž์„œ ๋งํ–ˆ๋“ฏ์ด P์™€ V๊ฐ€ atomicํ•œ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

P์™€ V๊ฐ€ atomicํ•˜์ง€ ์•Š๊ฒŒ ๋™์ž‘ํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?

์ง„์ž…ํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์‹œ์— P๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด mutex ๊ฐ’์„ Loadํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, atomicํ•˜์ง€ ์•Š๊ฒŒ ์ˆ˜ํ–‰๋˜๋ฉด ๋ชจ๋‘ mutex ๊ฐ’์„ 1๋กœ Load ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— critical section์— ์ง„์ž…ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

์•„๋‹ˆ ์–ด๋–ป๊ฒŒ software๋งŒ์œผ๋กœ atomicํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์„๊นŒ??

์‹ฑ๊ธ€ ํ”„๋กœ์„ธ์Šค์ธ ๊ฒฝ์šฐ์—๋Š” ๊ฐ„๋‹จํ•˜๋‹ค.

P์™€ V๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— Timer interrupt๋ฅผ disable ์‹œํ‚ค๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด Timeout์ด ๋˜์–ด๋„ CPU๋ฅผ ๋บ๊ธฐ์ง€ ์•Š๊ณ , ๋ชจ๋“  instruction์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Q. ๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ๊ถ๊ธˆํ•œ ์ ์ด ํ•˜๋‚˜ ์ƒ๊ฒผ๋‹ค. ์„ธ๋งˆํฌ์–ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด P, V ํ•จ์ˆ˜๊ฐ€ atomicํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด๊ฑด ๋‹จ์ผ ํ”„๋กœ์„ธ์„œ์ผ ๋•Œ์˜ ์–˜๊ธฐ ์•„๋‹Œ๊ฐ€? ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด atomicํ•˜๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์„œ์—์„œ atomicํ•œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ฉด ๊ฒฐ๊ตญ์€ Race condition์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์ด์—ˆ๋‹ค.

atomicํ•˜๋‹ค๋Š” ๋ง์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ์ค‘ ๋‹จ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค๋Š” ๊ฐœ๋…์ด ํฌํ•จ๋œ ๊ฑด๊ฐ€? ํ—ท๊ฐˆ๋ ธ๋‹ค.

๊ทธ๋ž˜์„œ ๊ต์ˆ˜๋‹˜๊ป˜ ์งˆ๋ฌธ์„ ๋“œ๋ ธ๋‹ค.

 

A. ๋งž์Šต๋‹ˆ๋‹ค. ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๊ทธ๋ž˜์„œ ๊ทธ ์ ์„ ๊ณ ๋ คํ•ด์„œ atomic operation์„ "๊ตฌํ˜„" ํ•ด์•ผ ํ•˜๋ฉฐ, ๋”ฐ๋ผ์„œ multi-core ์‹œ์Šคํ…œ์—์„œ์˜ atomic operation ๊ตฌํ˜„์€ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ atomic operation์ด multi-core ์‹œ์Šคํ…œ์—์„œ๋„ "atomic" ํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, operation์ด ์‚ฌ์šฉํ•˜๋Š” memory data (์˜ˆ: test-and-set์—์„œ์˜ 'target' )์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๋ฐฐํƒ€์ ์œผ๋กœ (exclusively) ์ผ์–ด๋‚˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์–ด๋–ค core์—์„œ test-and-set์„ ํ˜ธ์ถœํ•˜๋ฉด์„œ target์„ ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฅธ core์—์„œ ๋™์‹œ์— (๊ทธ๋Ÿฌ๋‚˜ ๊ฐ„๋ฐœ์˜ ์ฐจ์ด๋กœ ๋Šฆ๊ฒŒ) test-and-set์„ ์‹คํ–‰ํ•˜๋ฉด target์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์—ฌ๋Ÿฌ core ์—์„œ test-and-set์ด ๊ฐ๊ฐ ์‹คํ–‰๋˜๋”๋ผ๋„ ๊ทธ๋“ค ์‚ฌ์ด์— ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋˜์–ด "atomic"ํ•˜๊ฒŒ ๋˜์ฃ . Memory data์— ๋Œ€ํ•œ ๋ฐฐํƒ€์  ์ ‘๊ทผ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€, memory์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ๋จผ์ € memory bus์— LOCK signal์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ signal์€ ๋‹ค๋ฅธ core๋“ค์˜ memory ์ ‘๊ทผ์„ operation ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ๊ธˆ์ง€์‹œํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋œ atomic hardware๋ฅผ ์‚ฌ์šฉํ•ด์„œ P(), V()๋ฅผ atomicํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด, multi-core ๋˜๋Š” multi-processor ์‹œ์Šคํ…œ์—์„œ๋„ semaphore๋ฅผ ๋™๊ธฐํ™” ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  peterson์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌ๋ฉด ์ดํ•ด๊ฐ€ ํ›จ์”ฌ ๋” ์‰ฌ์›Œ์งˆ ๊ฒƒ์ด๋‹ค. P, V๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜์—๋Š” ๋‹จ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์„œ๋งŒ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ๋œป์€ critical section์— ๋“ค์–ด๊ฐ€๋Š” ํ”„๋กœ์„ธ์Šค๋„ ํ•˜๋‚˜ ๋ฐ–์— ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.



=> ์•„๋‹ˆ ๊ทธ๋Ÿฌ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ทธ๋ƒฅ ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€, ๊ตณ์ด ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ P,V๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์„œ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋‚˜?

์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด critical section์„ ๋งŒ๋‚  ๋•Œ๋งˆ๋‹ค ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

=> ๊ทธ๋Ÿฐ๋ฐ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด P์™€ V ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ๋งŒ ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด์„œ ์ฝ”๋”ฉํ•ด๋‘๋ฉด, critical section์„ ๋งŒ๋‚˜๋ฉด P์™€ V๋ฅผ ๊ทธ๋ƒฅ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
=> ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ์ฝ”๋”ฉ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ด์ง„๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์—ฌ์ „ํžˆ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ while๋ฌธ์„ ๋Œ์•„์•ผ ํ•˜๋Š” busy waiting์ด ๋ฐœ์ƒํ•œ๋‹ค.

=> ์ด ์˜ค๋ฒ„ํ—ค๋“œ๋Š” critical section์ด ์ปค์งˆ ์ˆ˜๋ก ๊ฐ™์ด ์ปค์ง„๋‹ค.

 

Block/Wakeup Implementation

ํ”„๋กœ์„ธ์Šค๋“ค์ด while๋ฌธ์„ ๋Œ๋ฉด์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Sleep(Block)์œผ๋กœ ์žฌ์šด ๋‹ค์Œ, critical section์— ์ง„์ž…ํ•  ์กฐ๊ฑด์ด ๋˜๋ฉด Wakeup์œผ๋กœ ๊นจ์›Œ์ฃผ์ž.

์ด๋•Œ๋Š” ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋ฅผ integer variable์ด ์•„๋‹Œ ๊ตฌ์กฐ์ฒด๋กœ ์„ ์–ธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Linked List์˜ ํ˜•ํƒœ๋กœ ํ˜„์žฌ ์ž ๋“ค์–ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค.

critical section์—์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋น ์ ธ๋‚˜์˜ค๋ฉด ์ด ๋ฆฌ์ŠคํŠธ์˜ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ๊นจ์›Œ์ค€๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์— ์ง„์ž…ํ•˜๊ธฐ ์œ„ํ•ด P๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ผ๋‹จ S.value ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  S.value๊ฐ€ 0๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์ด๋ฏธ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ณ  ์žฌ์šด๋‹ค.

(์ดˆ๊ธฐ์˜ S.value ๊ฐ’์€ 1์ด๋ฏ€๋กœ, ๋งจ ์ฒ˜์Œ์—” S.value๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚ค๋ฉด S.value๊ฐ€ 0์ผ ๊ฒƒ์ž„)

critical section ์ˆ˜ํ–‰์„ ๋งˆ์น˜๋ฉด V๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ S.value๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  S.value <= 0 ์ด๋ผ๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ํ”„๋กœ์„ธ์Šค ์ค‘์— ํ•˜๋‚˜๋ฅผ ๊นจ์šด๋‹ค.

์™œ S.value <= 0 ์ผ๋•Œ๋งŒ ๊นจ์šฐ๋А๋ƒ, S.value๋ฅผ 1 ์ฆ๊ฐ€์‹œ์ผฐ๋Š”๋ฐ S.value๊ฐ€ 0๋ณด๋‹ค ์ž‘๋‹ค๋Š” ๊ฒƒ์€ S.value๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚ค๊ณ  ์ž ๋“ค์–ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ๋œป์ž„. ๋งŒ์•ฝ ์—†์—ˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ S.value๋ฅผ 0์œผ๋กœ ๋งŒ๋“ค๊ณ  ์ง„์ž…ํ–ˆ์œผ๋‹ˆ๊นŒ ๋‹ค์‹œ 1 ์ฆ๊ฐ€์‹œ์ผฐ์„ ๋• 1์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์—ฌ๊ธฐ์„œ S.value๊ฐ€ ์ค‘์š”ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. S.value์˜ ์ ˆ๋Œ€๊ฐ’์€ ํ˜„์žฌ ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉด integer semaphore๋ผ๊ณ  ํ•œ๋‹ค.

๋‹จ์ง€, ์žˆ๋‹ค/์—†๋‹ค๋ฅผ ํŒŒ์•…ํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉ๋˜๋ฉด binary semaphore๋ผ๊ณ  ํ•œ๋‹ค.

 

Busy waiting or Block/Wakeup overhead ?

ํ”„๋กœ์„ธ์Šค๋ฅผ Block ์‹œํ‚ค๊ณ  List์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋‚˜์ค‘์— Wakeup ์‹œํ‚ค๋Š” ๊ฒƒ๋„ ๋‹ค ์˜ค๋ฒ„ํ—ค๋“œ๋‹ค.

๊ทธ๋ž˜์„œ Critical section์ด ์—„์ฒญ ์ž‘๋‹ค๊ณ  ํ•˜๋ฉด ๊ทธ๋ƒฅ while ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์„ธ๋งˆํฌ์–ด ๋ฐฉ์‹์ด ๋” ๋น ๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค.

critical section์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ์„œ block/wakeup ์„ธ๋งˆํฌ์–ด๋ฅผ ์“ธ์ง€ ๊ทธ๋ƒฅ ์ผ๋ฐ˜ ์„ธ๋งˆํฌ์–ด๋ฅผ ์“ธ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.

๋˜๋Š” ๋™์‹œ์— ๋Œ๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งค์šฐ ๋งŽ๋‹ค๊ณ  ํ•˜๋ฉด ๊ทธ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ฐ์ž while๋ฃจํ”„๋ฅผ ๋„๋Š” ๊ฒƒ์€ ์—„์ฒญ ๋‚ญ๋น„๋‹ค.
๊ทธ๋Ÿด ๋• ๊ทธ๋ƒฅ ์žฌ์šฐ๋Š” ๊ฒŒ ๋” ์ข‹์„ ์ˆ˜๋„ ์žˆ๋‹ค. 

์ด๊ฑด ๊ฐœ๋ฐœ์ž๊ฐ€ ํŒ๋‹จํ•ด์•ผ ํ•  ์š”์†Œ

 

์ง€๊ธˆ๊นŒ์ง€ Critical Section Problem์„ ํ•ด๊ฒฐํ•˜๋Š” Solution์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ดค๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ๊ฑธ ์™œ Operating System ์‹œ๊ฐ„์— ๋ฐฐ์šฐ๋Š” ๊ฑธ๊นŒ?

์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ์ ‘๊ทผํ•˜์—ฌ ์ผ์„ ํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ OS ๋‚ด์—์„œ ๋ฐœ์ƒํ• ๊นŒ?

์ด๋Ÿฐ ๊ฑด ๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์—์„œ ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ๋“ค์ด ์•„๋‹Œ๊ฐ€. ๊ณต์œ ๋œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•ด์„œ DB์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ž์ฃผ ์ผ์–ด๋‚  ๊ฒƒ ๊ฐ™์€๋ฐ, ๊ทธ๋Ÿผ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์‹œ๊ฐ„์— ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ๊ฐ€??

๋‹ต์€ OS ๋‚ด์—์„œ๋„ ๋ฐœ์ƒํ•œ๋‹ค.

1. Interrupt ํ•ธ๋“ค๋Ÿฌ์™€ Kernel Code ์‚ฌ์ด์— critical section problem ๋ฐœ์ƒ

CPU๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด critical section ์•ž ๋’ค๋กœ interrupt๋ฅผ disable ์‹œํ‚ค๊ณ  enable ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜๋Š” ์•ž์—์„œ ๋ฐฐ์šด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์Œ.

 

2. ๊ฐ Userprogram์—์„œ ํ˜ธ์ถœํ•œ ์ปค๋„ ์ฝ”๋“œ ์‚ฌ์ด์˜ critical section problem

3. Multiprocessor

CPU๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” Interrupt๋ฅผ dis/enable ์‹œํ‚ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ critical section problem์ด ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ชจ๋“  ์ปค๋„ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด์„œ ์„ธ๋งˆํฌ์–ด๋กœ ๋ณดํ˜ธ๋ฅผ ํ•˜๋“ , ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ณดํ˜ธ๋ฅผ ํ•˜๋“ , atomic ํ•˜๋“œ์›จ์–ด๋กœ ๋ณดํ˜ธ๋ฅผ ํ•˜๋“  ๋ชจ๋“  ์ปค๋„ ๋ณ€์ˆ˜ ํ•˜๋‚˜ ํ•˜๋‚˜๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

๋˜๋Š” OS ์ž์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ critical section์œผ๋กœ ์ทจ๊ธ‰ํ•ด์„œ ์–ด๋–ค ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ OS ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉด (๋ชจ๋“œ ๋น„ํŠธ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€) ๋‹ค๋ฅธ CPU๋Š” ์ปค๋„ ๋ชจ๋“œ๋กœ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

OS ์ปค๋„ ์ž์ฒด๋ฅผ ํ•˜๋‚˜์˜ critical section์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•˜๋‚˜์˜ CPU๊ฐ€ ์ปค๋„ ๋ชจ๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ์—” ๋‹ค๋ฅธ CPU๋Š” ์ปค๋„ ๋ชจ๋“œ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜๊ฐ€ ์—†์–ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ System call์„ ํ˜ธ์ถœํ•ด๋„ ์ˆ˜ํ–‰ํ•ด ์ค„ ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์„ฑ๋Šฅ์ƒ์˜ ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

=> ๋‹จ์ˆœํ•˜๊ณ  ์„ฑ๋Šฅ์ด ์กฐ๊ธˆ ๋–จ์–ด์ง€๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ๊ฒƒ์ธ๊ฐ€, ๋ณต์žกํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ์œ ์ง€๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

 

โ€ป๋ชจ๋“  ๋‚ด์šฉ์€ ํ•œ์–‘๋Œ€ํ•™๊ต ๊ฐ•์ˆ˜์šฉ ๊ต์ˆ˜๋‹˜์˜ ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

728x90

'HYU > ์šด์˜์ฒด์ œ(OS)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

8. Memory Management (1)  (0) 2023.05.02
6. Process Syncronization (2)  (1) 2023.04.07
4. CPU Scheduling  (3) 2023.03.24
3. Processes and Threads  (0) 2023.03.23
2. Operating System Overview (2)  (0) 2023.03.23