๐Ÿšง

๊ต์ฐฉ์ƒํƒœ(Deadlock)

purpplee 2022. 1. 16. 19:46

Concurrency Control, ๋ณ‘ํ–‰์ œ์–ด

์ž„๊ณ„์˜์—ญ์ด๋ž€?

์ž„๊ณ„์˜์—ญ์ด๋ž€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ด์šฉํ•˜๊ฒŒ๋” ํ•ด์ฃผ๋Š” ์˜์—ญ์ด๋‹ค.

 

์ž„๊ณ„์˜์—ญ ๋ณด์žฅ ์กฐ๊ฑด

์ž„๊ณ„์˜์—ญ์„ ๋ณด์žฅํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” 3๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•œ๋‹ค.

 

1) Mutual exclution

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„์˜์—ญ์— ์ง„์ž…์‹œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ์ง„์ž… ๋ถˆ๊ฐ€

 

2) Progress

์ž„๊ณ„์˜์—ญ์— ์•„๋ฌด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ์—์„œ ๋“ค์–ด๊ฐ€๋ ค๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ •ํ•ด์ค˜์•ผ ํ•จ.

 

3) Bounded waiting

๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ starvation ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•œ๋ฒˆ ์ž„๊ณ„์˜์—ญ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๋ฒˆ์— ๋“ค์–ด๊ฐˆ ๋•Œ ์ œํ•œ์„ ๋‘ฌ์•ผ ํ•จ.

 

Concurrency Control, ๋ณ‘ํ–‰ ์ œ์–ด or ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™” ๊ธฐ๋ฒ•

์ด ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•, ์ฆ‰ ํ”„๋กœ์„ธ์Šค์˜ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1) Semaphores

์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜(S)๋ฅผ ํ•˜๋‚˜ ๋‘๊ณ , ์ž„๊ณ„์˜์—ญ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— S๋ฅผ 0์œผ๋กœ ๋‘ฌ์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ง„์ž…์„ ๋ง‰๋Š”๋‹ค. ์ž„๊ณ„์˜์—ญ์—์„œ ๋‚˜์˜ฌ ๋•Œ๋Š” S๋ฅผ 1๋กœ ๋‘๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.

 

2) monitor

Semaphores ๋Š” ๊ตฌํ˜„์ด ๊นŒ๋‹ค๋กœ์›Œ์„œ high-level ์ˆ˜์ค€์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•. library, framework ์ˆ˜์ค€์—์„œ ์ œ๊ณต๋œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์“ฐ๋Š” syncrhonized ์ปค๋งจ๋“œ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 


๊ต์ฐฉ์ƒํƒœ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

๊ต์ฐฉ์ƒํƒœ๋ž€?

ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ƒ๋Œ€๋ฐฉ์˜ ์ž์›(ํ•˜๋“œ์›จ์–ด or ์†Œํ”„ํŠธ์›จ์–ด)์„ ์š”์ฒญํ–ˆ์ง€๋งŒ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ์ „๋ถ€ block ๋œ ์ƒํƒœ

* ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์„ ์š”์ฒญ > ํ• ๋‹น > ๋ฐ˜๋‚ฉ ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นจ.

 

๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒ 4๊ฐ€์ง€ ์กฐ๊ฑด(์ด๋ก ์ ...)

1. Mutual exclusion, ์ƒํ˜ธ๋ฐฐ์ œ

๋งค ์ˆœ๊ฐ„ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

 

2. No preemption (๋น„์„ ์ )

์ž์›์„ ๋นผ์•—๊ธฐ์ง€ ์•Š์Œ.

 

3. Hold and wait (๋ณด์œ ๋Œ€๊ธฐ)

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณด์œ  ์ž์›์„ ๋†“์ง€ ์•Š์œผ๋ฉด์„œ ๋‹ค๋ฅธ ์ž์›์„ ์š”์ฒญํ•จ.

 

4. Circular wait (์ˆœํ™˜๋Œ€๊ธฐ)

์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋จ.

 

์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„

๊ต์ฐฉ์ƒํƒœ๋Š” ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„(Resource-Allocation Graph)๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๊ฐ€ ์‚ฌ์ดํด์ด ์žˆ๊ณ  resource instance ๊ฐ€ ํ•˜๋‚˜๋ฉด deadlock ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ์™ผ์ชฝ์€ ๋ฐ๋“œ๋ฝ์ด๋‹ค. ์˜ค๋ฅธ์ชฝ์€ P2๋ฒˆ ํ˜น์€ P4๋ฒˆ์ด ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฏ€๋กœ ๋ฐ๋“œ๋ฝ์ด ์•„๋‹ˆ๋‹ค.

๊ต์ฐฉ์ƒํƒœ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•

1. Deadlock Prevention (์˜ˆ๋ฐฉ, ๋ฐฉ์ง€)

4๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑ๋˜์ง€ ์•Š๋„๋ก ๋ฏธ์—ฐ์— ๋ฐฉ์ง€

- Mutual Exclusion : ์ด ์กฐ๊ฑด์€ ๋ฐ˜๋“œ์‹œ ์„ฑ๋ฆฝํ•ด์•ผ ํ•จ.

- Hold and Wait : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ์ž์›์„ ํ• ๋‹น๋ฐ›๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์ž์›์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณด์œ  ์ž์›์„ ๋ชจ๋‘ ๋†“๊ณ  ์š”์ฒญ.

- No Preemption : ์ž์›์˜ ์‚ฌ์šฉ ์ƒํƒœ๋ฅผ save ํ•˜๊ณ  restore ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์— ํ•œํ•ด ๋บ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. 

- Circular Wait : ์ž์› ํ• ๋‹น ์ˆœ์„œ๋ฅผ ์ •ํ•ด์„œ 1๋ฒˆ ์ž์›์„ ํš๋“ํ•ด์•ผ๋งŒ 3๋ฒˆ ์ž์›์„ ํš๋“ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์„œ ์‚ฌ์ดํด์ด ์ƒ๊ธฐ์ง€ ์•Š๊ฒŒ ํ•จ.

๋ฐ๋“œ๋ฝ์„ ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•ด์„œ ์ œ์•ฝ์กฐ๊ฑด์„ ๋‹ฌ์•„๋†“๊ธฐ ๋•Œ๋ฌธ์— utilization(์ž์›์ด์šฉ๋ฅ ) ์ €ํ•˜, throughput(์‹œ์Šคํ…œ ์„ฑ๋Šฅ) ๊ฐ์†Œ, starvation ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. Deadlock Avoidance

์ž์› ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๋ฐ๋“œ๋ฝ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž์› ํ• ๋‹น.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์“ธ ์ž์›์˜ ์ตœ๋Œ€๋Ÿ‰(๋ถ€๊ฐ€์ •๋ณด)์„ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•ด์„œ ๋ฐ๋“œ๋ฝ์„ ํ”ผํ•ด๊ฐ.

 

1) ์ž์› instance ๊ฐ€ 1๊ฐœ ์ผ ๋•Œ, ์ž์›ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ์ด์šฉํ•ด์„œ ๋ฏธ๋ฆฌ ํŒŒ์•…. ์ ์„  ํ™”์‚ดํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋ฏธ๋ž˜์— ์“ธ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•จ.

์ฆ‰, ์ตœ์•…์˜ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด์„œ ๋ฐ๋“œ๋ฝ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉด ์ž์› ํ• ๋‹น X.

 

2) ์ž์› instance ๊ฐ€ 2๊ฐœ ์ด์ƒ์ผ ๋•Œ, Banker's Algorithm ์„ ์ด์šฉํ•จ. 

์œ„ ๊ทธ๋ฆผ์€ 5๊ฐœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ๊ฐ 10๊ฐœ, 5๊ฐœ, 7๊ฐœ์˜ instance ๋ฅผ ๊ฐ€์ง„ ์ž์› A, B, C ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘์—…ํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค. Allocation ์€ ํ• ๋‹น ๋ฐ›์€ ์ž์›, Max ๋Š” ํ‰์ƒ ์‚ฌ์šฉํ•  ์ž์›์˜ ์ตœ๋Œ€๋Ÿ‰, Avaliable ์€ ํ˜„์žฌ ๊ฐ€์šฉ๊ฐ€๋Šฅํ•œ ์ž์›, Need ๋Š” ์ถ”๊ฐ€๋กœ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์˜ ์ •๋ณด๋‹ค.

 

๋งŒ์•ฝ P1 ์ด A1, C2 ๊ฐœ๋ฅผ ์š”์ฒญํ–ˆ๋‹ค๋ฉด Need ๋ฅผ Avaliable ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๊ณ  ๋œ๋‹ค๋ฉด ํ• ๋‹นํ•จ. ๋งŒ์•ฝ P0์ด B2 ๋ฅผ ์š”์ฒญํ–ˆ๋Š”๋ฐ Need ๋ฅผ ๋ณด๋‹ˆ Avaliable ๋งŒ์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ• ๋‹น x.

 

์ด์ฒ˜๋Ÿผ Banker's Algorithm ์€ ํ•ด๋‹น ์‹œ์ ์—์„œ๋Š” ์ดํ›„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ , ์š”์ฒญํ•˜๋Š” ์ˆœ๊ฐ„ ์ตœ๋Œ€ Need ๋ฅผ Avaliable ์ž์›์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€๋งŒ ๋ด„. ๋‹จ Allocation ์—์„œ Max ๋ฅผ ์ถฉ์กฑํ–ˆ๋‹ค๋ฉด ์ดํ›„ ๋ฐ˜ํ™˜ํ•œ ๊ฒƒ์„ Avalicable ์— ๋ฐ˜์˜ํ•˜๊ณ  ๊ณ„์‚ฐํ•จ.

 

ํ˜น์‹œ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์— ๋Œ€๋น„์— ๋‚จ์•„๋„๋Š” ์ž์›์„ ์ด์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•.

 

3. Deadlock Detection and recovery

๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ํ—ˆ์šฉํ•˜๋˜ ๋ฐ๋“œ๋ฝ detection ๋ฃจํ‹ด์„ ๋งŒ๋“ค๊ณ  ๋ฐœ๊ฒฌ์‹œ recover

๋ฐ๋“œ๋ฝ์€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋ฐ ๊ทธ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๊ณ  ์ž์› ๊ฐ€์šฉ๋ฅ ์„ ๋‚ฎ์ถ”๋Š” ๊ฑด ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๊ฒฐ.

์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•จ.

 

- ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„

์—ฌ๊ธฐ์„œ๋Š” ์ž์› ์ตœ๋Œ€ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฏธ๋ฆฌ ์•Œ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ ์„ ์ด ์—†์Œ.

๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์ดํด์ด ์ƒ๊ฒผ๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ detection ํ•จ. 

 

- ํ…Œ์ด๋ธ” ์ด์šฉ

- recover

1) ๋ฐ๋“œ๋ฝ์— ์—ฐ๋ฃจ๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ฃฝ์ด๊ฑฐ๋‚˜ ํ•˜๋‚˜์”ฉ ์ฃฝ์ž„.

2) ๋ฐ๋“œ๋ฝ์— ์—ฐ๋ฃจ๋œ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜์˜ ์ž์›์„ ๋บ์Œ. ์ž์›์„ ๋บ๋Š” ํŒจํ„ด์€ ๋งค๋ฒˆ ๋‹ฌ๋ผ์ ธ์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ.

 

4. Deadlock Ignorance

ํ˜„๋Œ€ OS ๊ฐ€ ์ฑ„ํƒ. ์‹œ์Šคํ…œ์ด ์ฑ…์ž„์ง€์ง€ ์•Š์Œ.

 

 

๋ฐ˜์‘ํ˜•