출처 : KMOOC / 운영체제 / 이화여대 반효경 교수님
2개의 자원을 다 가져야만 하는 작업이라고 생각해보자.
ex) A라는 데이터를 읽어서 B에다가 저장
만약에 하나씩 차지하게 되면?
P0가 S를 얻은 후 CPU를 뻇기면 P1이 Q를 획득하는데 S는 획득 못함
다시 P0로 넘어가서 Q를 획득하려고 했더니 없음 ...
일이 다 끝나야만 자원을 내어놓기 때문에
데드락
(다르게 이야기하면 각각의 입장에서는 starvation 이기도 한데 ..
이렇게 자원을 얻는 순서를 지정해주면 데드락이 생기지 않는다
Classical Problems of Synchronization
1. Producer-Consumer Problem
생산자 프로세스는 데이터를 만들어서 집어넣는 역할
소비자 프로세스는 데이터를 꺼내가는 역할
생산자 -생산자 lock 안걸면 데이터가 덮어 씌워지는 문제
-> lock 걸고 넣고 buffer 인덱스 옮기고? lock 푼다
소비자 프로세스도 비슷
생-소 사이에도,
여튼 lock 걸어서 딱 하나의 프로세스만 버퍼 사용하게 해야 한다
생산자 입장에서는 빈 버퍼가 자원
여러 생산자 프로세스가 밀어닥쳐서 꽉 채워버리면
소비자가 소비해서 빈 버퍼가 생길 때까지 기다린다
소비자 입장에서는 full 버퍼가 자원
생산자가 생산해서 내용이 있는 버퍼가 생길 떄까지 기다린다
counting semaphore 사용해서 full/empry buffer 수
binary semaphore로 생산자끼리 or 소비자끼리 lock/unlock (mutex 문제)
2. Readers and Writers Problem
db는 DB 자체에 거는 lock
writer가 걸었으면 접근 막고
reader가 걸었으면 readcount 참고해서 혼자 읽거나 같이 읽거나
근데 readcount도 공유 변수니까 mutex로 lock 걸고 증감해야한다
코드 잘보면 write 안하는 중에는 reader의 P(db)가 writer 막는 목적으로 작용
write 중에는 reader가 P(db)에 막혀서 읽지 못하게 됨
이 방식의 문제는 reader가 모두 나가야 write가 가능해진다는 것
starvation
신호등과 같은 원리로 일정 시간 이내에 들어온 reader들만 접근할 수 있게 해주고 그 이외에는 writer한테만.
으 귀찮다...
'CS > 운영체제' 카테고리의 다른 글
[ETL] Functions of OS (0) | 2022.05.14 |
---|---|
[ETL] Evolution of OS (0) | 2022.05.14 |
Process Synchronization I (0) | 2022.05.14 |
CPU 스케줄링 (0) | 2022.05.14 |
프로세스 관리 (0) | 2022.05.09 |