system modeling
system : with resource (with instance)
ex) CPU,메모리,I/O device 라는 리소스에 process,메모리영역 과같은 인스턴스
CS : 그 Resource를 접근하려는 code의 영역!
process의 resource활용
1. request > 2.use > 3. release
Deadlock with semaphore
공유변수) Data S1 =1 ,s2=2 (binary sema)
process) P1,P2
P1]
wait(s1) // 1. s1 : 실행 > C/S
wait(s2) // 3. P2에 의해 wait
[p2]
wait(s2) // 2. s2 : 실행 > C/S
wait(s1) // 4. P1 에 의해 wait
>> 교착상태 Deadlcok발생!
Deadlock의 발생조건 !!
1. Mutual exclusion : 1Process에서 1개의 Resource 사용
2. Hold and Wait : 1Process 가 1Resource 사용할때(Hold) 다른걸 요청시 wait
3. No preeption : 우선순위에 의한 뺏기 X
4. Circular wait : 서로가진채 서로의 것을 요구 > wait
> 4가지가 동시에 발생되어야함
Allocation Graph
둘다 Cycle 존재 O , 리소스안에 있는 동그라미 : instance
그림1) Deadlock 발생!
그림2) Deadlock 발생X !
그림1의 경우 Deadlock 발생 가능성 있음! ㅁ많이
그림 2의 경우 일시적 Deadlock 발생 하더라도 ex) R2에서 T3가 자원할당 해제시 Deadlock 해제!
> P가 2개라면 자원의 instance도 2개여야함
//
//Process -> Resource :: request 요청하는것
//Recource -> Process :: Assignment 할당된것
//
실제 사용은.. 데드락을 생겨도 OK 함
> 프로그래머의 잘못인 경우가 많으므로..
데드락이 안생기게 하려면?
> 위의 4가지 조건중 한개만이라도 발생하지 못하도록하자
1. CS 를 사용X(공유자원 update X) -> ReadOnly file만 사용
2. P1 -> R1 사용중이면 R2, R3에 접근못하도록함 or R1,R2,R3,, 모든 R을 한번에 사용할때만 허용
or 잡고있던 R을 놓고 가도록함
3. 우선순위가 높은 놈이 요청하면 내어줌 > preemption 허용
4. cycle 이존재하지않도록함 > 리소스에 순서를 매기고 , process들이 R을 순서대로 사용
Cuircular wait conditon 만족 X
first mutex = 1
second mutex =5
> 이런식으로 순서대로 하도록 해줘야함
safe state : 모든 프로세스에 대해 실행 완료할 수 있는 순서(sequence)가 존재하는 상태
process -> Available resource 요청
> 시스템이 줘도 유지가능한지 확인
> 가능 하면 OK
단점) 각 P가 리소스를 얼마나 요구하는지를 미리 알고있어야함
> resolve_allocation state
시스템은 P가 요청을 했을때도 시스템이 safe state를 유지해야함
> 유지가능하면 허용 <> 대기
>>
sequence (pi~pn)
pi 리소스가 즉시이용X > pi는 대기
or 허용 받아 pi 리소스 사용끝나면 반납후 끝냄
> pi + 1 이용가능
system in safe state : No dead lock
" unsafe : Dead lock 가능성 있음!
Avoidence : 시스템 All safe state
R당 instance 1개 : Resource allocation graph
R당 instance 여러개 : Banker's Algorithm
Resource allocation graph ( p==t)
1. clame edge : Pi -> Ri <- pj
(사용할거야) // T - - - > R : 점선
2. request edge : Pi -> Ri
( 사용할래 //지금) // T ---->R : 실선
3. assignment edge : R --->T
( 할당될때)
>>
2. -> 3. 으로 갈때 사이클이 없으면 허용함
즉, R한개를 한개의 P 만 사용하는 상황일때
> 사이클 생성 X
단점) 얼만큼 리소스를 Process하는지 알고있어야함