Skip to content

Latest commit

 

History

History
96 lines (59 loc) · 2.25 KB

5_3_병행제어.md

File metadata and controls

96 lines (59 loc) · 2.25 KB

병행제어 - (3)

데드락, 동기화 문제

Deadlock

  • 둘 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 이벤트를 무한히 기다리는 현상
  • 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴떄 무한 대기에 빠지는 현상

Starvation

  • Indefinite blocking : 프로세스가 suspend된 이유에 해당하는 세마포어 큐에서 빠져나갈수없는 현상
  • 프로세스가 컴퓨터 자원을 계속 가져오지 못하는 현상

동기화와 관련된 전통적인 문제

1. Bounded-Buffer Problem(크기가 유한한 버퍼)

  • 생산자 프로세스는 계속해서 자원을 넣으려고 하고 소비자는 계속해서 자원을 빼내려고 할 때
  • empty 빈 버퍼 개수 세마포어, mutex : lock을 위한 이진 세마포어, full : 차있는 버퍼 개수 세마포어

생산자

  1. empty 버퍼 있는가? -> 없으면 기다림
  2. 공유데이터에 lock을 검
  3. empty 버퍼 조작
  4. lock 푼다
  5. full buffer 하나 증가
do {
	// 자원 생성
	P(empty)
	P(mutex)
	
	// 자원 조작
	V(mutex)
	V(full)
}while(true)

소비자

  1. full 버퍼 있나? -> 없으면 기다림
  2. 공유데이터 lock 건다
  3. full 버퍼 조작
  4. lock 푼다
  5. empty 버퍼 하나 증가
do {
	P(full)
	P(mutex)
	
	V(mutex)
	V(empty)
	// 자원 사용
} while(true)

2. Readers-Writers Problem

  • 한 프로세스가 write 중일 때 다른 프로세스가 접근하면 안됨
  • read는 동시에 여럿이 해도 됨
  • mutex 사용
  • writer에서 starvation 발생할수있음
  • read 프로세스는 데이터를 수정하지않기때문에 데이터 일관성 유지되므로 비효율적이라는 의견 존재
  1. write 안할땐 아무나 read 가능
  2. read 아무도 안할때 write 가능
  3. write 중이면 read 불가능
  4. write 끝나면 read 가능

3. Dining Philosophers Problem

  • 왼쪽 젓가락 잡고 오른쪽 젓가락 잡고 식사함. 젓가락 둘다 없으면 생각하면서 대기
  • 데드락 가능성(ex. 모든 철학자가 왼쪽 잡을때)

해결책

  1. 젓가락 둘다 잡을수있을때만 잡게
  2. 짝수 철학자는 왼쪽 젓가락, 홀수는 오른쪽젓가락부터 잡게