critical section
=> running ready cpu를 뺏김,
Dekkers Algorithm
혼용을 하여 해결함
문제해결
1. progress 조건 => 돌다가 repeat에서 죽어버렸을 경우
상대편이 깃발 안들고 있으니깐 안에 들어갈수 있다
2. 둘다 깃발을 들고 있어도 안에서 한번더 확인함으로서 문제 해결
Peterson's Algorithm
의사를 밝힌다
=> 양보를 해버린다
늦게 양보한애가 들어간다
다익스트라 알고리즘
1단계 => 의사를 밝힘 턴이 내가 아니면 기다린다 (조건 : 현재 턴인 친구 idle이 끝날때까지 기다린다)
그리고 턴을 내걸로 뺏어온다
2단계 => j루프를 위한 카운팅 변수
n보다 작을때 까지 돈다 나일떄를 제외하고
in-CS라는 방안에 누군가 있으면 빠져나온다
j가 n보다 작을경우 처음으로 돌아감
하드웨어 솔루션
=> test set을 만들어줌
실행중 Preemption을 받지 않음!!
TestAndSet => 한번에 수행이 된다
프로세스 3개일떄 위배됨
=> 1번 들어가고 false로 나가게 되면 한명은 계속 들어가지 못하게됨
waiting => 기다릴까?
buzy wating 문제
spinlick
=> 정수형 변수
p() v() 로만 접근가능
os support
preemption안도게 보장해줄게
\p연산 => 물건이 없다면 물건이 생기기를 기다린다 1이였다면 빠져나와서 물건을 가져간다
(물건을 ㄱ꺼내가는 과정)
v연산 => 물건을 반납하는 과정
들어가기기전에 p 나올때 ㅍ
물건이 있다 p연산 들어가면 가져가니깐 1이된다
active 물건이 생겼네? 하고
spinlock 예제
안에 들어가야하는데 pj는 돌고있으니깐 자원을 못받고 pi는 못들어가고
그래서 pi pj둘다 돌아야한다
buzy wating
semaphore
임의의 s 변수 하나에 ready queue 하나가 할당이 됨
binary semaphore
0 or 1
counting semaphore