largando

Ch.7 교착상태 (Dead Lock) 본문

Operating System

Ch.7 교착상태 (Dead Lock)

ensoojn 2019. 8. 11. 23:56

7.1 시스템 모델

  • 작업 순서
    • 요청 - 사용 - 해제
  • 교착 상태
    • 결코 만족될 수 없는 자원 요청을 함으로써 process가 중지되어 기다리는 상태

 자원의 개념

1) Serially Reusable Resource (SR)
ex) Tap, CPU
특징)

  • Number of units is constant
  • Each unit is either available or allocated for exclusive use.
  • A process may release a unit only after it has previously acquired that unit.

2) Consumable Resource (CR)
ex) message, signal
특징)

  • Number of units vary
  • Producer process increase number of units.
  • Consumer process decrease number of units.

3) SR CR에 대한 dead lock 대처 방법 상이

 → CR일 경우 time limited RECEIVE or WAIT으로 해결

 

7.2 Dead Lock의 특징

 

7.2.1 dead lock 4가지 필요 조건

(1) 상호 배제 (Mutual Exclusion)

  • 한번에 하나의 프로세스만이 그 자원을 사용 가능

(2) 점유와 대기 (Hold & Wait)

  • 자원을 점유하면서 다른 자원을 대기

(3) 비 선점 조건 (Non-preemption)

  • 자원을 강제로 빼앗을 수 없고, 해제될 때까지 대기

(4) 순환 대기(Circular Wait)

  • 자원할당 그래프에서 cycle을 형성

 

7.2.2 자원 할당 그래프

  • 모든 프로세스에 대해 가능한 모든 할당 순서를 찾음
  • 자원 할당 그래프에 cycle이 존재
    :
    교착상태일 수도 있고, (자원이 하나씩만 있는 경우) 아닐 수도 있다.
  •  자원 할당 그래프에 no-cycle -> no dead lock

 자원 할당 그래프의 소거

  • 프로세스의 자원요구가 만족될 수 있으면 그 프로세스는 소거 가능하다.
  • 모든 프로세스를 소거할 수 없으면 교착 상태이다.

7.3 Dead Lock 처리 방법

(1) 예방(Prevention)

  • Dead lock의 필요조건 네가지 중 하나를 부정

(2) 회피(Avoidance)

  • 은행원 알고리즘(Banker's Algorithm)

(3) 발견과 복구 (Detection & Recovery)
(4)
무시 (Ignore)

 

7.4 Dead Lock 예방

  • Dead Lock 필요조건 네가지 중 하나를 부정

7.4.1 '상호배제' 조건의 방지

  • 일반적으로 부정할 수 없음

7.4.2 '점유와 대기' 조건의 방지

가)   수행 전에 필요한 모든 자원을 요구하여 할당 받는 방법

나)   각 프로세스는 점유하고 있는 자원이 없을 때만 요구하여 할당 받는 방법

단점) 자원의 비효율성, 기아상태 발생 가능

 

7.4.3 '비선점'조건의 방지

  • 자원을 점유하고 있으면서 더 이상 요구가 받아들여지지 않으면 점유하고 있던 자원을 해제하고 대기
  • register memory 공간에 이용 가능
  • 기아상태 발생 가능

7.4.4 '순환대기' 조건의 방지

  • 각 자원에 고유 번호를 붙여 자원의 번호가 커지는 순서대로만 요청할 수 있게 함
  • 자원 낭비

7.5 Dead Lock의 회피

7.5.2 자원할당 그래프 알고리즘

  • 각 자원이 종류마다 한개씩만 있을 경우에 사용 (cycle을 형성하며 무조건 D/L)

7.5.3 Dijkstra의 Banker's algorism

  • 안전상태 (safe state)

  • 불안전 상태 (unsafe state)

  • 안전 상태만 갖도록 자원을 할당하는 방법

  • 표기법t: 자원의 총 개수avail :    사용 가능한 자원의 총 갯수alloc(i): 프로세스 i에게 할당된 자원의 갯수 max(i): 프로세스 i가 최대로 필요로 하는 자원의 갯수need(i): 프로세스 i가 추가로 필요로 하는 자원의 갯수프로세스 - 고객자원 - 돈반남할지 안할지 모르면 빌려주지 않음자원을 반드시 회수할 수 있을 때 빌려줌

가) 안전 상태의 예

 총 12개의 Tape

proc    alloc(i)     max(i)    need(i)   avail

p1        1             4          3          6          

p2        4             6          2          2

p3        5             8          3          6

안전 순서: p2 → p3 → p1

or p2 → p1 → p3

=>안전상태

 

나) 불안전 상태의 예

총 12개의 Tape

proc    alloc(i)     max(i)    need(i)   avail

p1        8            10          2         1(누가한테 주더라도 끝나지 않아 자원 회수 불가 )          

p2        2             4          2          

p3        1             3          2          

- 불안전한 상태가 D/L을 의미하지 않음(발생 가능성 있음)

- 시스템이 항상 안전 상태를 유지하도록 자원을 할당한다.

 

7.5.3.1 안정성 알고리즘

1. work와 Finish를 각각 m과 n인 벡터라 하자.

      work := Available

      Finish[i] := false, i = 1,2,3,...,n

2. 다음을 만족하는 i를 찾는다.

 

'Operating System' 카테고리의 다른 글

운영체제 과제(1)  (0) 2019.08.25
운영체제 과제(2) DeadLock_MainMemory_VirtualMemory  (0) 2017.12.12