์ผ๋ถ ์์์ ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ์๋๋ฐฉ์ด ์ํ๋ ์์์ ์๊ตฌํ๊ณ ์๋๋ฐ ์๋๋ฐฉ์ด ์ํ๋ ๊ฒ์ ๋ด๋๊ณ ์์ง ์์ ๋ ์ด๋ฅผ deadlock์ด๋ผ๊ณ ํ๋ค.
์ด๋ ๋๊ตฌ๋ ์๋ณดํ์ง ์์ผ๋ฉด ์งํ๋์ง ์๋ ์ํ
์์์ ์ธ์คํด์ค๊ฐ ํ๋๋ฐ์ ์์ ๋ ์ฌ์ดํด์ด ์๊ธฐ๋ฉด deadlock์ ์๋ฏธํ๋ค.
์์์ ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ๊ฐ ์๋ค๋ฉด?
-> Deadlock ์ผ์๋ ์๊ณ ์๋ ์๋ ์๋ค.
์ฒซ๋ฒ์งธ ๊ทธ๋ฆผ
-> R2์ ์์์ด 2๊ฐ์์๋ ๋ถ๊ตฌํ๊ณ ์ฌ์ดํด์ด 2๊ฐ์ด๋ค. => Deadlock
๋๋ฒ์งธ ๊ทธ๋ฆผ
-> P4๊ฐ ์์์ ๋ค์ฐ๊ณ ๋ด๋์ผ๋ฉด P3๊ฐ ๊ทธ ์์์ ๊ฐ์ ธ๊ฐ๊ฒ ๋๊ณ ์ฌ์ดํด์ด ์์ด์ง๊ฒ ๋๋ค. => Deadlock X
์๋ก ๊ฐ์๋ก Deadlock ์ฒ๋ฆฌ๋ฐฉ๋ฒ์ด ๊ฐํ ๊ฒ
Deadlock Ignorance
-> ์ด์์ฒด์ ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ๋ฉด ์ด๋ป๊ฒ Deadlock์ด ์ฒ๋ฆฌ๋๋?
-> ํ๋ก์ธ์ค๋ฅผ ๋๋ฆฌ๋ค๊ฐ ์ด์ํ ๋์ธ๊ฐ ๋๊ปด์ง๋ฉด(๋๋ ค์ง๋ ๋ฑ) ์ฌ๋์ด ์์์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃ ํ ๊ฒ์ด๋ค.
-> Deadlock์ ์์ฃผ ๋ฐ์ํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฏธ์ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด์ ํจ์ฌ ๋ ๋ง์ ์ค๋ฒํค๋๋ฅผ ๋ค์ด๋ ๊ฒ์ด ๋นํจ์จ์ ์ด๋ค.
Mutual Exclusion : ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ฌ์ฉํ ์ ์๋ ์์์ด๋ผ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ ํ ์ ์๋ ์กฐ๊ฑด์ ์๋๋ค.
Hold and Wait : ๋ด๊ฐ ๊ฐ์ง ์์์ ๋ด๋์ง ์์ผ๋ฉด์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฌ๊ธฐ ๋๋ฌธ์ Deadlock์ด ์๊ธด๋ค.
-> ์ด ์กฐ๊ฑด์ ์์ ๋ ค๋ฉด?
-> ์์์ ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์์๋ ์์์ ๋ณด์ ํ๊ณ ์์ง ์์ผ๋ฉด ๋๋ค.
-> ๋ฐฉ๋ฒ 1: ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์์ ๋ ๋ ์ด ํ๋ก์ธ์ค๊ฐ ํ์์ ํ์๋ก ํ๋ ๊ฒ์ ๋ชจ๋๋ค ํ ๋น๋ฐ๊ฒ ํ๋ฉด ์ด ์น๊ตฌ๊ฐ ๋ค ์ฐ๊ณ ๋์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ ๋ ๋ ์์์ ๋ฐ๋ฉ์ ํ ๊ฒ์ด๋ค.
-> ์ค๊ฐ์ ํ์ํ ์์์ด ์์ ๊ฒ์ด๋ค.
-> Wait์ ํ ์ผ์ด ์์ ๊ฒ์ด๋ค.
-> ๊ทธ๋ฌ๋ ๊ทธ ๋ ๋ง๋ค ํ์ํ ์์๋ง ์์ผ๋ฉด ๋๋๋ฐ ์ฒ์๋ถํฐ ๋ค ๊ฐ์ง๊ณ ์์ผ๋ฉด ์์๋ฐฐ๋ถ์ ๋ํ ๋นํจ์จ์ด ์๊ธธ ๊ฒ์ด๋ค.
๋ฐฉ๋ฒ 2: ๋ด๊ฐ ์์์ ๊ฐ์ง๊ณ ์๋ ๋์ค ๊ธฐ๋ค๋ ค์ผ ํ๋ค๋ฉด ๊ฐ์ง๊ณ ์๋ ์์์ ๋ชจ๋ ๋ด๋ ค๋๊ณ ๋ค์ ์์ฒญํ๋ค.
No Preemption : ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์์ ๊ฐ์ ธ๊ฐ ์ ์๋๋ก ํ๋ค๋ฉด Deadlock์ด ๊ฑธ๋ฆฌ์ง ์์ ๊ฒ์ด๋ค.
CPU๋ timer๊ฐ์ ๊ฒ์ ๊ฑธ์ด์ Preemptiveํ๊ฒ ํ ์ ์์๋ค.
-> ์ด๋ฐ ์์์ Deadlock์ด ๊ฑธ๋ฆฌ์ง ์๋๋ค.
-> ์ฆ, ๋นผ์์ ์ฌ ์ ์๋ ์์์ด๋ผ๋ฉด Deadlock์ ๊ฑธ๋ฆฌ์ง ์๋๋ค.
Circular Wait : ํ์ํ ์์๋ค์ด ๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ ์์ผ๋ฉด์ ์ฌ์ดํด์ด ํ์ฑ๋ ๊ฒฝ์ฐ Deadlock์ด ์์ฑ๋ ์ ์๋ค.
-> ์๋ฅผ ๋ค์ด ๋ด๊ฐ 1, 3, 5๋ฒ ์์์ด ํ์ํ๋ค๋ฉด ๋ฎ์ ๋ฒํธ๋ถํฐ ์์์ ํ๋ํด์ผ ๋์ ๋ฒํธ๋ฅผ ํ๋ ํ ์ ์๋๋ก ํ์.
-> 1๋ฒ์ ๊ฐ์ง๊ณ ์๊ณ 3๋ฒ์ ์์ฒญํ๊ณ 3๋ฒ์ ๊ฐ์ง๊ณ ์๊ณ 1๋ฒ์ ์์ฒญํด์ผํ๋ ๊ฒฝ์ฐ Deadlock์ด ๊ฑธ๋ฆฌ๋๋ฐ ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์งํํ๋ค๋ฉด Deadlock์ด ๊ฑธ๋ฆฌ์ง ์๋๋ค.
Prevention์ Deadlock์ ๋ง์ ์ ์์ง๋ง ์์์ ๋ํ ์ด์ฉ๋ฅ ์ด ๋ฎ์์ง๊ณ ์ ์ฒด ์์คํ ์ ๋ํ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ฉฐ starvation ํ์์ด ๋ฐ์ ํ ์ ์๋ค.
-2๋ฒ์งธ ๊ทธ๋ฆผ์ด ๋ํ์ ์ธ ๊ทธ๋ฆผ
-> ์์์ ๊ฐ์ง๊ณ ์์์๋ ์ฃผ๊ฒ๋๋ฉด ์ฌ์ดํด์ด ๋ง๋ค์ด์ง ์ํ์ด ์๊ธฐ๋ฏ๋ก P2์๊ฒ ์์์ ์ฃผ์ง ์๋๋ค.
-> ๋ง์ฝ P1์ด R2์๊ฒ ์์ฒญํ๋ค๋ฉด ์์์ ์ค๋ค.
-> ์คฌ์ ๋ ์ด๋ค์ผ์ด ์๊ฒจ๋ ์ฌ์ดํด์ ๋ง๋ค์ด์ง์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
-> ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒ ๊ฐ๋ค๋ฉด ์์์ด ๋จ์์๋๋ผ๋ ์ฃผ์ง ์๋๋ค.
์์ ๊ฐ์ ์ํฉ์์ P1์ด A:1๊ฐ, C:2๊ฐ๋ฅผ ์์ฒญํ๋ค๊ณ ํ์.
-> ์ถ๊ฐ ์์ฒญํ ์ ์๋ ์์ด ๊ฐ์ฉ์์๊ฐ์ง๊ณ ๋ชจ๋ ์ถฉ์กฑ ์ํฌ ์ ์๋์ง ํ์ธํ์.
-> P1์ ๊ฒฝ์ฐ ์์ผ๋ก ํ์๋ก ํ๋ ์์(Need)์ด 1, 2, 2์ธ๋ฐ ๊ฐ์ฉ์์์ด 3, 3, 2๋ก ์ด๋ฅผ ๋๋๋ค.
-> ์์์ ๋๊ฒจ ์ค ์ ์๋ค๋ ์๊ธฐ!! (Deadlock์ผ๋ก๋ถํฐ ์์ ํ๋ค)
P0์ด B๋ฅผ 2๊ฐ ์์ฒญํ๋ค.
-> B๋ 3๊ฐ๋ก ์ฌ๋ถ์ด ์กด์ฌํ์ง๋ง ์ถ๊ฐ ์์ฒญ(Need)๊ฐ ๋จ์์๋(Available)์ ์ถฉ์กฑ์ํค์ง ๋ชปํ๋ค.
-> P0ํํ
์ค ์์์ด ์์ง๋ง ์ฃผ์ง ์๋๋ค.
-> ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
-> ์ข
๋ฃ๋ ํ๋ก์ธ์ค๋ ํ ๋น๋ ์์์ ๋ฑ์ด๋ด๋ฉฐ ๊ฐ์ฉ์์์ ๋ฐ๊พธ๊ณ ํ์๋ก ํ๋ ์์๋ณด๋ค ๊ฐ์ฉ์์์ด ๋ง์์ง๋ค๋ฉด ์์ํ ๋น์ด ๊ฐ๋ฅํด์ง๋ค.
๊ฐ์ฉ์์ > ์์ฒญํ ์ ์๋ ์์ ์ด ์ฑ๋ฆฝํ ๊ฒฝ์ฐ ์์์ ์ค ์ ์๋ค.
P0, P3์ Request๊ฐ ์์ผ๋๊น ์ ๋๋๊ณ ์์์ ๋ฐ๋ฉํ ๊ฒ์ด๋ค.
-> Available (3,1,3)
-> ์ด์ฉ ๊ฐ๋ฅํ ์์์ด ์๊ฒผ์ผ๋ P1๋ ์ ๋๋ผ ์ ์์ ๊ฒ์ด๋ค.
-> ์ด๋ฐ์์ผ๋ก ๋งํ์ง ์๊ณ sequence๊ฐ ์๊ธด๋ค๋ฉด Deadlock์ด ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ค!
P2๊ฐ ์์ C๋ฅผ ์์ฒญํ๋ฉด?
์ด๋ ๋๊ตฌ์ ์์ฒญ๋ ๋ฐ์๋๋ฆด ์ ์๋ ์ํฉ์ด ์ด๋๋๋ค.
-> Deadlock!
Deadlock์ด ๋ฐ์ํ๋ฉด Recoveryํ์
Process termination : Deadlock์ ์ฐ๋ฅ๋ ํ๋ก์ธ์ค๋ค์ ์ข
๋ฃํ์!
-> 1. ๋ชจ๋ ์ฃฝ์ด์.
-> 2. ํ๋์ฉ ์ฃฝ์ฌ๋ด์ Deadlock์ด ์์ด์ง๋ฉด ok
-> Deadlock์ด ์์ด์ง ๋๊น์ง
Resource Preemption : Deadlock์ ์ฐ๋ฅ๋ ํ๋ก์ธ์ค๋ก๋ถํฐ ์์์ ๋บ์!
Deadlock์ด ์ผ์ด๋๋ ์ผ์ด๋์ง ์๋ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋ ๊ฒ์ ๋งํจ
Deadlock์ด ๋ฐ์ํ์ง ์๊ฒ ํ๋ ๊ฒ๋ ์์์ ๋นํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋๊ณ Deadlock์ Detection ํ๋ ๊ฒ๋ Detection์ด ๋ฐ์ํ์ ๋ rutine์ ์คํํ๋ ๊ฒ ๋ํ ์ค๋ฒํค๋๊ฐ ๋๋ค.
-> ๋ฐ๋ผ์, Deadlock์ด ์๊ธฐ๋ ๊ทธ๋ ์ง ์๋ ์ด์์ฒด์ ๋ ์ฑ
์์ ์ง์ง ์๊ณ ๊ทธ๋ฅ ๋๋ ๊ฒ์ด๋ค.
-> ์์คํ
์ด ๋๋ ค์ง๊ณ ์ ์ง ํ ๊ฒ์ด๋ค.
-> ์ฌ์ฉ์๊ฐ ์์์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ!
-> ํ์ฌ ๋๋ถ๋ถ์ ์ด์์ฒด์ ๋ ์ด๋ฅผ ์ฑํํ๋ค.
[์ถ์ฒ] ๋ฐํจ๊ฒฝ ๊ต์๋ ๊ฐ์