DeadLockμ΄λ?
DeadLockμ΄λ λ κ° μ΄μμ νλ‘μΈμ€λ€μ΄ μλ‘μ μμμ μꡬνλ©° Block μνλ‘ λ¬΄νμ λκΈ°νλ κ²μ λ§νλ€.
μ΄λ¬ν νμμ μλ‘κ° μλ‘μκ² μλ μμμ μνμ§λ§ μμμ΄ Release λμ§ μμκΈ° λλ¬Έμ λ°μνλ€.
κ·Έλ¦Όμ 보면 DeadLock λ°μνλ μν©μ κ° νλ‘μΈμ€κ° μμμ κ°μ§κ³ μμ§λ§, μλ νλ‘μΈμ€μκ² μλ μμμ κΈ°λ€λ¦¬λ©° μΌμ΄λλ€.
λ°λλ½μ 걸릴 μ μλ μμμ μ’ λ₯λ‘λ λ κ°μ§κ° μλ€.
- Reusable Resources(μ¬μ¬μ© κ°λ₯ν μμ)
- releaseλ μ΄νμ μ¬μ©κ°λ₯νλ€.
- μ€μ§ νλμ νλ‘μΈμ€μ μν΄μλ§ μ¬μ©λλ€.
- κ° νλ‘μΈμ€κ° νλμ 리μμ€λ₯Ό κ°μ§κ³ μκ³ , κ·Έμ λμμ λ€λ₯Έ 리μμ€λ₯Ό μμ²ν λ λ°λλ½μ΄ λ°μνλ€.
- Consumable Resources
- ν λ² μμμ΄ νλ‘μΈμ€μκ² ν λΉλλ©΄, λ€μλ λ€λ₯Έ νλ‘μΈμ€μκ² ν λΉλμ§ μλλ€.
- ν λ² μμμ΄ μ¬μ©λλ©΄, μμ΄μ§λ€.
Reusable Resourcesλ νλμ μμμ 곡μ νκΈ° λλ¬Έμ νμ λ μμμ λ νλ‘μΈμ€κ° λͺ¨λ μμ²νμ§ λͺ»νλ μν©μ΄ λ°μνλ€. μλ₯Ό λ€λ©΄, 200 Kbytesμ 곡κ°λ§ λ©λͺ¨λ¦¬μμ μ¬μ©ν μ μλ€κ³ κ°μ ν΄ λ³΄μ.
μ΄λ, P1μμ 80 Kbytesλ§νΌ μ¬μ©νκ³ Time sliceκ° λ°μνμ¬ P2λ‘ μ μ΄κΆμ΄ λμ΄κ°λ€. μμ§κΉμ§ 200 - 80 = 120μ 곡κ°μ΄ λ¨μμμΌλ―λ‘ 70 Kbytesλ₯Ό ν λΉν μ μλ€. νμ§λ§ κ·Έ μ΄νμ P1μ P2μμ μμ²μ 보λ΄μΌ νλ μμμ μ©λμ λ¨μ μ©λ(10 Kbytes) λ³΄λ€ νμ ν ν¬λ€. λ μ΄μ λ νλ‘μΈμ€λ μμ²μ 보λ΄μ§ λͺ»νλ κ²μ΄λ€.
Consumable Resourcesλ κ° νλ‘μΈμ€κ° receive λκΈΈ λ°λΌλ Block μνμ μμ λ λ°μνλ€. μλ₯Ό λ€μ΄ Signalμ΄λ Interruptsμ κ°μλ°, μλ μν©μ 보μ.
P1μμλ P2λ‘λΆν° μμ²μ λ°κΈ° μν΄ λκΈ°νκ³ μλ€. μ΄λ P2 λν P1μΌλ‘λΆν° μμ²μ λ°κΈ° μν΄ λκΈ°νλ€. μ¦, μλ‘κ° μλ‘μκ² μμ²μ 보λ΄μ£ΌκΈΈ κΈ°λ€λ¦¬κ³ μμ λΏ μ΄λ λꡬλ μμ²μ 보λ΄μ§ μλλ€.
μ κ·Έλ¦Όμ λ°λλ½μ΄ λ°μνλ κ²κ³Ό λ°μνμ§ μλ κ²κ³Όμ μ°¨μ΄λ₯Ό λνλΈ κ·Έλ¦Όμ΄λ€. λ°λλ½μ΄ μΌμ΄λλ μν© λ¨Όμ μ΄ν΄λ³΄μλ©΄ P1 νλ‘μΈμ€λ RaλΌλ μμμ μμ²ν¨κ³Ό λμμ RbλΌλ μμμ μ΄λ―Έ μ°¨μ§νκ³ μλ€. λ°λΌμ νμ¬ μνλ Blockμ΄λ€. P2 νλ‘μΈμ€λ Rb μμμ μμ²ν¨κ³Ό λμμ Raλ₯Ό μ΄λ―Έ μ°¨μ§νκ³ μλ€. λ§μ°¬κ°μ§λ‘ Blockμνμ΄λ€.
λ νλ‘μΈμ€κ° λͺ¨λ Blockμνμ΄λ©΄μ λλμ§ μλλ€. λ°λλ½ μνμΈ κ²μ΄λ€.
λ°λλ‘ μΌμ΄λμ§ μλ μν©μμλ Raμ RbλΌλ μμμ΄ λͺ¨λ 2κ° μ΄μμ΄λ€. μμ²μ νμ λ κ° νλ‘μΈμ€λ Block μνλ‘ λ€μ΄κ° μ΄μ κ° μμ΄μ§λ€. λ°λΌμ λ°λλ½ μνκ° μλλ€.
DeadLockμ΄ λ°μνλ 쑰건?
λ°λλ½μ κ²°κ΅ λ°μνλ μ‘°κ±΄μ΄ μ ν΄μ Έ μλ€. μ΄ μ€ μ΄λ νλλΌλ μ§μΌμ§μ§ μλλ€λ©΄ λ°λλ½μ μΌμ΄λμ§ μλλ€.
- Mutual Exclusion
- μ€μ§ νλμ νλ‘μΈμ€λ§μ΄ ν λ²μ νλμ 리μμ€λ₯Ό μ¬μ©νλ€.
- Hold and Wait
- νλ‘μΈμ€λ μμμ νλ μ°¨μ§ν¨κ³Ό λμμ λ€λ₯Έ μμμ μμ²ν΄μΌ νλ€.
- No preemtion
- μ΄λ―Έ μ μ λ μμμ μ΄λ λ€λ₯Έ νλ‘μΈμ€μ μν΄ κ°λ‘μ±μ§ μ μλ€.
- Circular wait
- νλ‘μΈμ€κ° μμ²νλ μμμ μ΄λ λ€λ₯Έ νλ‘μΈμ€κ° μ΄λ―Έ μ μ ν κ²μ΄ λλλ°, μ΄λ¬ν κ΅¬μ‘°κ° κΌ¬λ¦¬λ₯Ό 무λ λ°©μμΌλ‘ ꡬνλμ΄μΌ νλ€.
λ€μμ μ 쑰건μ λͺ¨λ λ§μ‘±μν€λ Deadlockμ ν μμμ΄λ€.
DeadLockμ μ΄λ»κ² ν΄κ²°ν κΉ?
λ°λλ½μ ν΄κ²°νλ λ°©λ²μ ν¬κ² μΈ κ°μ§λ€.
- μμ€ν μ΄ μ λ λ°λλ½ μνμ λ€μ΄κ°μ§ μλλ‘ νλ€.
- λ°λλ½ μνλ‘ μ§μ ν΄λ μ’μΌλ κ·Έ μ΄νμ 볡ꡬνλ€.
- OSλ μ무κ²λ νμ§ μκ³ , μ¬λμ΄ νλλ‘ λ΄λ²λ €λλ€.
- λλΆλΆμ μ΄ λ°©μμ μ¬μ©νλ€.
μΌν 보면 1λ²μ΄λ 2λ²μ μ¬μ©ν κ² κ°μ λ° μ€μμ κ·Έλ μ§ μλ€. μ κ·Έλ΄κΉ?
1λ²λΆν° μ°¨κ·Όμ°¨κ·Ό μ΄ν΄λ³΄λλ‘ νμ.
1. λ°λλ½μ μλ°©νκΈ°
λ°λλ½μ λ§μ‘±νκΈ° μν΄μλ μμ λ°°μ λ 4κ°μ§ λ°λλ½μ 쑰건μ μ§μΌμΌ νλ€. λ°λλ‘ λ§νμλ©΄ μ΄ 4κ°μ§ 쑰건μ μ§ν€μ§ μμΌλ©΄ λ°λλ½μ κ±Έλ¦¬μ§ μλλ€.
첫 λ²μ§Έλ‘ Mutual Exclusionμ κΉ¨λ²λ¦°λ€. νμ§λ§ μ΄λ μ¬μ€μ λΆκ°λ₯νλ€. Mutual Exclusionμ Race Conditionμ μ§μΌμ£ΌκΈ° μν΄ κ°μ₯ μ€μν κ°λ μ΄κΈ° λλ¬Έμ΄λ€.
λ λ²μ§Έλ Hold and Waitμ μ§ν€μ§ μλλ€. λμ μμμ μ΄κΈ°μ λͺ¨λ κ°λλ‘ ν΄μΌ νλ€. κ·ΈλμΌ λμ€μ μλ‘μ΄ μμμ μμ²νμ§ μκΈ° λλ¬Έμ΄λ€. νμ§λ§ μ΄ λ°©λ²λ μ¬μ ν μ’μ§ μλ€. ν νλ‘μΈμ€κ° μ΄κΈ°μ λͺ¨λ μμμ μ μ ν΄ λ²λ¦°λ€λ©΄ ν΄λΉ μμμ μ¬μ©νλ λ€λ₯Έ νλ‘μΈμ€ μ μ₯μμλ κ΅μ₯ν λΉν¨μ¨μ μ΄λ€.
μΈ λ²μ§Έλ No preemptionμ μ§ν€μ§ μλλ€. λ€λ₯Έ νλ‘μΈμ€κ° μμμ λΊλ κ±Έ κ°λ₯νκ² νλ κ²μ΄λ€. νμ§λ§ 99νΌμΌνΈλ§νΌ μλ£λ νλ‘μΈμ€μΈλ° μμμ λΊκ²¨μ λ€μ μ€νν΄μΌ νλ€κ³ μκ°ν΄ 보μ. μ¬μ©μ μ μ₯μμλ μκ°λ§ ν΄λ νλ κ²μ΄λ€.
λ€ λ²μ§Έλ Circular Waitμ μ§ν€μ§ μλ κ²μΈλ°, μ¬μ€μ κ°μ₯ κ°λ₯ν λ²ν μκΈ°λ€. 꼬리λ₯Ό 무λ λ°©μμΌλ‘ ꡬμ±νμ§ μμΌλ©΄ μΈμ κ°λ λͺ¨λ νλ‘μΈμ€κ° μμμ μ¬μ©νλ€. λ€λ§, 꼬리λ₯Ό λ¬Όμ§ μλλ‘ ν΄μΌ νκΈ° λλ¬Έμ νλμ νλ‘μΈμ€λ μ΄κΈ°μ λͺ¨λ μμμ κ°μ§κ³ μμ΄μΌ νλ, Hold and Waitμ μ΄κ²¨μΌλ§ νλ€.
μ΄ λ°©μμ λ¬Έμ κ° μμ΄ λ³΄μ΄λ, μ΄κΈ°μ λͺ¨λ μμ κ°μ§κ³ μλ νλμ νλ‘μΈμ€(μ¦, 꼬리μ ν΄λΉλλ νλ‘μΈμ€)κ° κ°μ₯ λ¨Όμ μ€νλλλ‘ μ½λ©νλ€λ©΄ λ°λλ½μ΄ λ°μνλ€.
λ°λΌμ λ°λλ½μ μλ°©νλ λ°©λ²μ μλ²½νμ§ μμΌλ©° νμ€μ μΌλ‘ λΆκ°λ₯νλ€.
Hold and Waitλ₯Ό μ§ν€μ§ μλ λ°©λ²
Dining Philosophers Plomblemμμ Hold and Waitμ μ§ν€μ§ μλ λ°©λ²μΌλ‘ λ°λλ½μ μλ°©ν΄λ³΄μ.
μ΄ λ¬Έμ λ μ² νμ 5λͺ μ΄ μν ν μ΄λΈμμ νλμ μμμ λλκ³ λ°₯μ λ¨Ήκ³ μκ°νλ κ³Όμ μ λ°λ³΅νλ€. μ΄λ μμμ λ¨ΉκΈ° μν΄μ μμ κ³Ό μμ μ μ€λ₯Έμͺ½ μ¬λμ ν¬ν¬λ₯Ό λ€μ΄μΌ νλ€. μμμ λ€ λ¨Ήμ νμλ ν¬ν¬λ€μ λ΄λ €λκ³ μκ°νλ€κ° λ€μ λ°°κ³ νμ§λ©΄ ν¬ν¬λ₯Ό λ λ€.
λ¨Όμ λ°λλ½μ΄ λ°μνλλ‘ μ½λλ₯Ό μ§λ©΄ μλμ κ°λ€.
semaphore fork [5] = {1};
int i;
void philosopher (int i) {
while (true) {
think(); // μκ°νκΈ°
wait (fork[i]);
wait (fork[(i+1) mod 5)]);
eat(); // λ¨Ήλλ€.
signal(fork[(i+1) mod 5]);
signal(fork[i]);
}
void main(0 {
parbegin (philosopher(0), philosopher(1), philosopher(2), philosopher(3), philosopher(4));
...
}
μΈλ» 보면 μ¬λ°λ₯Έ μ½λμ²λΌ 보μΈλ€. κ° μ¬λμ΄ μμ μ ν¬ν¬λ₯Ό λ€κ³ μμ μ μ€λ₯Έμͺ½ μ¬λμ ν¬ν¬λ₯Ό λ λ€.
μΈλ§ ν¬μ΄ κ°μ΄ 1λ©΄ waitμ λ€μ΄κ° μλ λμ λ€λ₯Έ μ¬λμ μμ μ ν¬ν¬λ μμ μ μ€λ₯Έμͺ½ μ¬λμ ν¬ν¬λ₯Ό λ€μ§ λͺ»νλ€.
κ·Έλ¦¬κ³ μμμ λ¨Ήκ³ ν¬ν¬λ₯Ό λ΄λ €λλ κ²μ ν΅ν΄ λ€λ₯Έ μ¬λλ€μ΄ μμμ λ¨Ήλλ‘ νλ€.
νμ§λ§ μ¬κΈ°μλ ν° λ¬Έμ μ μ΄ μλ€. λ§μ½ λͺ¨λ μ¬λλ€μ΄ _wait (fork [i])_νλ μμ€μ Context Switch νλ€κ³ κ°μ ν΄ λ³΄μ. κ° μ¬λλ€μ μ΄μ μμ μ μ€λ₯Έμͺ½ μ¬λμ ν¬ν¬λ₯Ό λ€μ΄μΌ νλ λͺ¨λκ° μμ μ ν¬ν¬λ₯Ό λ€κ³ μμ΄ κ°μ Έμ€μ§ λͺ»νλ€.
λͺ¨λκ° μμ μ μ€λ₯Έμͺ½ μ¬λμ ν¬ν¬λ§ λ°λΌλ³Έ μ± μ무λ μμμ λ¨Ήμ§ λͺ»νλ κ²μ΄λ€.
μ΄ μ½λλ₯Ό λ°λλ½μ΄ λ°μνμ§ μλλ‘ νλ €λ©΄ μΈλ§ν¬μ΄λ₯Ό λ μΆκ°ν΄μΌ νλ€.
semaphore fork [5] = {1};
semaphore room = {4};
int i;
void philosopher (int i) {
while (true) {
think(); // μκ°νκΈ°
wait (room);
wait (fork[i]);
wait (fork[(i+1) mod 5)]);
eat(); // λ¨Ήλλ€.
signal(fork[(i+1) mod 5]);
signal(fork[i]);
signal (room);
}
void main(0 {
parbegin (philosopher(0), philosopher(1), philosopher(2), philosopher(3), philosopher(4));
...
}
_room_μ΄λΌλ μΈλ§ν¬μ΄κ° μΆκ°λλ€. 4λͺ μ μ¬λμ΄ ν¬ν¬λ₯Ό λ€κ³ μλ€λ©΄ λλ¨Έμ§ ν μ¬λμ μ΄λ ν μ¬λμ΄ ν¬ν¬λ₯Ό λ΄λ €λμ λκΉμ§ μμ μ ν¬ν¬λ₯Ό μ§μ§ λͺ»νλ κ²μ΄λ€.
λ°λΌμ, λ°λλ½ μν©μ μλ°©ν μ μλ€.
2. λ°λλ½μ΄ κ°μ§λ μ΄νμ 볡ꡬνκΈ°
μ€μν κ²μ λ°λλ½μ΄ νμ§λλ μκ³ λ¦¬μ¦μ΄ μ μ©λμλμ΄λ€.
볡ꡬ μ체λ μ¬λμ΄ κ²°μ ν μΌμ΄λ€. λ¬Όλ‘ μ΄λ¬ν 볡ꡬ νλ‘μΈμ€λ κ΄λ¦¬μμ μ½λ λ¨μμ ꡬννλ€.
λ°λλ½μ΄ λ°μνκ³ λμ λͺ¨λ νλ‘μΈμ€λ₯Ό μ’ λ£μν¨λ€λ©΄, μ¬μ€μ λ°λλ½μ μμ΄μ§ κ²μ΄λ€.
μ΄λ¬ν λ°©λ²μ κ΅μ₯ν λΉν¨μ¨μ μ΄λ€. λμ νλμ νλ‘μΈμ€λ§ μ’ λ£μν€λ λ°©λ²μ μ¬μ©νλ€.
μ’ λ£μμΌμΌ νλ νλ‘μΈμ€λ κ·Έ μ°μ μμλ μ¬λμ΄ μ νλ€. μ΄λ νλ‘μΈμ€ μ체μ μ°μ μμλ₯Ό λ³΄κ³ κ²°μ νκΈ°λ νλ©°, CPUκ° ν λΉλ μκ°μ λ°λ₯΄κΈ°λ νλ λ± λ³΅ν©μ μΈ μμλ€λ‘ κ²°μ νλ€.
3. OSλ μ무κ²λ νμ§μκ³ , μ¬λμ΄ νλλ‘ λ΄λΉλκΈ°
μ΄ λ°©λ²μλ λ°λλ½ νμ§ μκ³ λ¦¬μ¦μ μ μ©νμ§ μλλ€. μ¬λμ΄ κ·Έλ₯ νλ‘μΈμ€κ° μ λΆ Block μνμ κ±Έλ¦° κ²μ λ³΄κ³ μ, λ°λλ½μ΄ κ±Έλ Έκ΅¬λ νμ νλ κ²μ΄λ€.
κ·Έλ¦¬κ³ λ³΅κ΅¬κ³Όμ λν μ¬λμ΄ μμμ νλ¨νμ¬ μ²λ¦¬νλ€.(μ¬μ€ μ 볡ꡬ νλ‘μΈμ€λ 2λ²κ³Ό λμΌνλ€.)
Banker's Algorithm
Banker's Algorithmμ μμ 보μλ λ°λλ½ ν΄κ²° λ°©λ² μ€μ 첫 λ²μ§Έμ ν΄λΉλλ λ°©μμ μνλ€.
λ€λ§ λ€λ₯Έ μ μ λ°λλ½ μν©μ νΌνκΈ° μν΄μ μμ 4κ°μ§ 쑰건μ κΉ¨λ²λ¦¬λ κ²μ΄ μλλΌ λ―Έλ¦¬ κ³μ°μ νκ³ μμμ ν λΉνμ§ λͺ»νλ€λ©΄ CPU μ μ΄κΆμ λ€λ₯Έ νλ‘μΈμ€λ‘ λ겨λ²λ¦°λ€.
μμ 보μλ, 200 Kbytesλ₯Ό ν λΉν μ μλ μμμμ λ°λλ½ μν©μ νΌν΄λ³΄μ.
λ§μ½ 80 KBλ§νΌμ μμμ P1μμ ν λΉνκ³ P2λ‘ Context Swtich λλ€κ³ ν΄λ³΄μ.
κ·Έλ¬λ©΄ 70KBμ ν λΉ μ¬λΆλ₯Ό νμΈνκΈ° μν΄μ λͺ¨λ νλ‘μΈμ€μμ μμΌλ‘ ν λΉν΄μΌ ν λ©λͺ¨λ¦¬λ₯Ό κ°κ° κ³μ°νλ€.
μ΄λ 120 - 70 = 50λ°μ λ¨μ§ μμΌλ―λ‘, μμΌλ‘ λ¨μ P1μ P2μ μμμ ν λΉνμ§ λͺ»νλ€.
λ°λΌμ P2μμ 70KBλ₯Ό ν λΉνλ©΄ λ°λλ½ λ¬Έμ κ° λ°μν μ μλ€. μ΄λ₯Ό λ°©μ§νκΈ° μν΄ 70 KBμ ν λΉνμ§ μκ³ P1μΌλ‘ λμ΄κ° 60 KBλ₯Ό μ²λ¦¬ν ν μμμ Release νλλ‘ ν΄μΌ νλ€.
Banker's Algorithmμ κ΅μ₯ν μ’μ 보μ΄λ λͺ¨λ νλ‘μΈμ€κ° μμΌλ‘ μ¬μ©ν μμμ κ³μ°ν΄μΌ νλ€. μ΄λ νμ€μ μΌλ‘ λΆκ°λ₯νκ³ λͺ μ λλ λ°λλ½ μκ°μ μν΄ λ§€λ² μμμ κ³μ°ν΄μΌ νλ―λ‘ λ§€μ° λΉν¨μ¨μ μ΄λ€.
'π Knowledge > μ΄μ체μ (OS)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ΄μ체μ ] λλ ν 리λ₯Ό μμ보μ. (0) | 2024.04.28 |
---|---|
[μ΄μ체μ ] Fileκ³Ό Device File (0) | 2024.04.14 |
[μ΄μ체μ ] μΈλ§ν¬μ΄(Semaphores)μ μΈλ§ν¬μ΄μ νμ© (1) | 2024.04.07 |
[μ΄μ체μ ] Testset μΈμ€νΈλμ (0) | 2024.04.06 |
[μ΄μ체μ ] νλ‘μΈμ€ λκΈ°ν, Race Condition, Critical Section (0) | 2024.03.31 |