IT recording...
[OS] 8. 프로세스 동기화 문제 - (2) 본문
[이화여자대학교 반효경 교수님의 강의를 듣고 정리한 글입니다.]
[그림과 함께 편하게 보려면 여기로]
https://adorable-aspen-d23.notion.site/OS-8-2-1934aee84bac41f1a81de05bdec0492f
1. Deadlock and Starvation
1. DeadLock
- 둘 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 event를 무한히 기다리는 현상
- ex) 하드웨어 A → B로 자료를 옮기는 과정에서 A,B 세마포어를 모두 가져야만 하는 프로세스가 두 개 일때
- P0에서 S를 획득한 상태에서 CPU를 뺏겨서 P1가 실행됨 → waiting
- P1가 Q를 획득한 상태에서 S를 기다림 → waiting
- 각각 S와 Q는 임계구역을 빠져나가고 release 되는데, 그렇지 못하므로 deadlock에 빠짐
- 해결
- 둘 다 S,Q로 순서를 맞춰주면 됨
2. Syncronization 문제
1. Bonded-Buffer Problem
- 크기가 유한인 버퍼 문제
1. Producer-Consumer Problem
- 생산자 프로세스는 데이터를 만들어서 버퍼에 넣는다.
- 소비자 프로세스는 데이터를 버퍼에서 꺼내간다.
2. 문제점
- 공유 데이터에 대한 Syncronization 문제
- 생산자 - 생산자
- 생산자가 도착해서 빈 곳에 데이터를 쓰고 있다. 근데 CPU를 빼앗기고, 다른 생산자가 도착해서 동일한 버퍼에 데이터를 쓴다 ⇒ 데이터 유실
- 소비자 - 소비자
- 소비자가 도착해서 데이터 하나 꺼내 쓰려고 했는데 CPU를 빼앗기고, 다른 소비자가 동일한 데이터를 가져간다면?
- 해결방법
- 공유 버퍼에 Lock을 걸어 해결한다. (Semaphore)
- 생산자 - 생산자
- 버퍼가 유한하기 때문에 생기는 문제
- 생산자 - 생산자
- 버퍼가 다 차있는데 생산자가 도착한다면, 사용할 수 있는 자원이 없는 상태이다.
- 생산자 입장 가용 자원 : 비어있는 버퍼의 수
- 소비자 - 소비자
- 버퍼가 비어있는데 소비자가 도착한다면, 사용할 수 있는 자원이 없는 상태이다.
- 소비자 입장 가용 자원 : 차있는 버퍼의 수
- 해결방법
- 버퍼가 비어있는지, 차있는지 확인하고 각 생산자, 소비자를 상대방이 깨워주자
- 생산자 - 생산자
2. Readers-Writers Problem
- 공유데이터 : DB, readCount
- 고려할 점
- Write는 동시에 하면 안되지만, Read는 동시에 해도 된다.
- Read가 왔는데도 Block시킨다면 비효율적
- 근데 Read에도 락을 걸기는 해야한다. (Write는 오면 안되니까!)
- Write는 동시에 하면 안되지만, Read는 동시에 해도 된다.
- Read 친구들이 lock을 공유할 수 있게 하자
- readCount도 공유변수이기 때문에 P(mutex)로 막는다.
- Read 하는 중에 Write가 오면 안되므로 (혹은 반대도) P(db)로 막는다.
- 처음 읽는 애가 P(db)설정
- 마지막에 읽고 나가는 애가 V(db)
- 단점
- Starvation
- Reader가 계속 SharedLock 차지시 Writer 기아/무한봉쇄 발생 가능하다.
- 해결방법
- Reader-Writer 대기큐를 두고 우선순위를 줘서 Writer도 동작하게끔 한다.
- Starvation
3. Dining-Philosophers Problem (Deadlock)
교착상태 발생
- 공유 데이터 : 젓가락
- 모든 철학자들은 왼쪽, 오른쪽의 젓가락을 들어야 밥을 먹을 수 있는데,
- 각각의 철학자마다 행동 주기가 다르다.
- 젓가락을 잡을 수 없는 상황이라면 기다린다.
- 밥을 다 먹었을 때만 왼쪽, 오른쪽 젓가락을 순서대로 놓는다.
- 문제점
- 모든 철학자가 왼쪽 젓가락만 잡은 경우, 누구도 내려놓지 않아서 누구도 식사할 수 없다. (DeadLock)
- 해결방안
- 4명만 동시에 테이블에 앉을 수 있게 한다.
- 젓가락을 동시에 집을 수 있을 때만 집게 한다.
- 비대칭
- 짝수는 왼쪽 먼저, 홀수는 오른쪽을 먼저 잡도록 한다.
- 생각해보면 짝수 입장에서 왼쪽 젓가락은 홀수 입장에서 오른쪽 젓가락이다.
- 그래서 같은 공유 자원을 잡을 수 있는 애가 먼저 잡도록 해서 해결 가능한 것
'Operating System' 카테고리의 다른 글
[OS] 10. 메모리 관리 - (1) (0) | 2022.05.15 |
---|---|
[OS] 9. 데드락 - (3) (0) | 2022.04.24 |
[OS] 7. 프로세스 동기화, 임계구역 - (1) (0) | 2022.04.24 |
[OS] 6. CPU 스케줄링 (0) | 2022.04.24 |
[OS] 5. 쓰레드 (0) | 2022.04.24 |
Comments