[운영체제[2]]Process Synchronization 4

이유정·2024년 4월 22일
0

운영체제

목록 보기
39/43

Process Synchronization
= 프로세스 동기화
= Concurrency Control
= 병행 제어
동시 실행될 때 문제가 생기지 않게 한다.

semephore 와 monitor 목적의 차이

semephore

  • 자원을 획득하기 위해서 프로그래머가 P연산, 자원을 반납하기 위해서 V연산

monitor

  • 동시 접근을 막는것을 monitor 차원에서 지원

둘의 목적은 다르지만 코딩을 하면, 코드가 비슷해짐

Dining Philosophers Example (monitor 사용)


각각의 철학자들은 젓가락을 집고, 먹고, 내려놓고, 생각한다.
젓가락이라는 공유자원에 접근하기 위해서 monitor로 식사하는 철학자 문제 정의
젓가락을 잡는 코드는 monitor 내부에 있는 코드로 구현


밥을 먹기위해 젓가락을 잡은거니까 철학자의 상태는 hungry
state는 공유변수다.
본인만 본인 상태를 바꿀 수 있는게 아니라, 인접 철학자도 상태를 바꿀 수 있음.
그런데, monitor 안에서 공유데이터 접근하는 코드를 만들었기 때문에 lock을 걸거나 푸는 코드가 필요 없음.


i라는 철학자가 젓가락을 잡을 수 있는지 test 함수를 한다.
=> 왼쪽 젓가락과 오른쪽 젓가락 모두 available 해야 한다.

  • 왼쪽 철학자가 밥을 먹지 않고 있고,
  • 본인이 배고픈 상태이고, (이미 배고픈 상태 확인했는데 이 코드가 있는 이유는, 이 함수가 다른 곳에도 쓰이기 때문임)
  • 오른쪽 철학자가 밥을 먹고 않고 있고,

=> 이 상태를 모두 만족할 때만

  • 이 철학자의 상태를 eating 으로 변경
  • 철학자 i가 잠들어있다면, 깨워준다. (그런데 자고 있을리 없음. 그러니 여기선 이 코드는 무시됨) (함수가 다른 곳에도 쓰이기 때문에 그럼)

만약 test 함수에서 조건에 만족하지 않았으면, ~~ eating의 상태가 될 수 없었을 것임.


그럼 i의 철학자는 잠들게 된다.


밥 다먹고 젓가락 내려놓을 때 putdown 함수 실행


혹시 인접 철학자가 나 때문에 밥을 못먹고 잠들어 있다면, 깨워주는 코드가 여기 들어있음.

  • 왼쪽 철학자 test
  • 오른쪽 철학자 test


만약 i가 왼쪽 철학자라면

  • 배고픈 상태인지
  • 왼쪽 젓가락 가질 수 있는지,
  • 오른쪽 젓가락 가질 수 있는지, 확인 !

그 후, eating상태로 바꿔주고,
자고 있었으니까 자기 자신을 깨워준다 !

profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글