수업/운영체제

5,6 병행프로세스-세마포어

MDanderson 2025. 4. 22. 22:25

P연산 : 검사, 감소시키려는 시도 

 

s 값이 양의 값이면 감소 시킴

0이 되면 프로세스를 대기시킴

 

V연산 : 증가 

 

대기중인 프로세스가 없다면 s값을 1증가시킴

대기중인 프로세스가 있으면 대기중인 프로세스 1개 진행

 

@진입영역

mutex가 1보다 크므로 0 으로 줄이고 임계영역 수행

다른프로세스가 봤을때 mutex가 0 이므로 해당 프로세스가 임계영역에 들어가지않고 대기함

 

@해제영역

대기하는게 있냐?  -> 대기하는거 깨워가지고 임계영역에 들어와도 된다고 알림

대기하는게 없다 - > mutex 1증가하고 끝 (누군가가 들어갈수 있는 상황을 만들어줌)

 

 

@생산자 소비자 문제

 

버퍼가 가득찬 경우 (생산자가 추가적으로 데이터를 못넣음)

데이터를 넣기전에  P(empty)를 넣음

데이터를 꺼낸 다음에 V(empty)를 넣음  ->자리가 생겼다고 알리는 역할

empty: 빈칸이 몇개 남아있는지를 얘기해줌(초기값n)

 

P(empty) empty가 0이면 여기서 생산자가 기다리게됨

 

 

 

 

버퍼가 빈 경우

full은 초기값이 0 (가득찬게 몇개가 있느냐, 처음에는 없다는말)

버퍼가 비어있으니까 소비자는 기다려야하니까

소비자코드 앞부분에 P(full)

 

생산자는 버퍼에 데이터를 넣은 후 V연산을 통해서 full값을 1 증가시켜준다

V(full)을 통해 1개가 채워졌다고 소비자에게 알려줌

 

 

 

 

@판독기-기록기 문제

 

제1판독기-기록기문제 : 판독기에 우선순위

기아상태:  당장 아무것도하지못하고 계속 대기하는상황(언제끝날지모르는걸 기다려야하는 상황)

 

 

 

제2 판독기 기록기 문제

판독기가 공유자원에 접근중이라면 판독기보다 기록기에 우선순위를줌

문제점) 판독기의 기아상태 유발 가능

기록기가 쓰고있으면 다음 기록기가 계속 오면  판독기들이 하염없이 기다리게 됨    --> 판독기의 기아상태 유발

 

 

'수업 > 운영체제' 카테고리의 다른 글

7. 교착상태  (0) 2025.04.22