[OS] Process 동기화(2)
CS/Operating System

[OS] Process 동기화(2)

[OS] Process 동기화(2)

 

전통적 동기화 예제

Producer-Consumer Problem

  • 생산자가 데이터를 생산 -> 소비자가 그 데이터를 소비하는 형태
  • 예시: 컴파일러->어셈블러, 웹 서버->웹 클라이언트
  • 생산한 데이터는 중간의 buffer라는 저장공간에 저장해두고 소비자는 여기서 필요한 만큼 가져감
  • 동기화 문제: 생산자와 소비자가 동시에 접근하는 변수를 동시에 업데이트, 즉 임계구역에 동시에 접근

Readers-Writers Problem

  • 임계구역에 접근하는 프로세스의 종류를 reader와 writer로 나눈다.
  • reader는 임계구역에서 데이터를 바꾸지 않고 읽기만 하는 프로세스, writer는 임계구역에서 데이터를 바꾸는 프로세스를 말한다.
  • 여기서 writer는 mutal exclusion을 보장하고, reader는 여러개가 동시에 데이터에 접근하는 것을 허용한다.
  • The first Reader Writer problem (readers-preference): reader 프로세스에 우선권을 줌. reader 프로세스가 데이터를 읽는 동안 writer 프로세스가 오면 기다리게 되고, reader 프로세스가 오면 writer 프로세스가 기다리는 것을 무시하고 데이터에 접근하여 읽음
  • The second Reader Writer problem (writers-preference): writer 프로세스에 우선권을 줌. 위와 같은 상황이라고 가정하자. writer 프로세스가 기다리는데 다른 reader 프로세스가 오면 writer 프로세스 다음 순서로 기다려야함.
  • The third Reader Writer problem: 아무에게도 우선순위를 주지 않는다.

Dining Philosopher Problem

  • 식사하는 철학자 문제
  • 원형 테이블에 5명의 철학자와 5개의 젓가락이 한짝식 있는 상황에서 일어나는 문제다.
  • 각 철학자는 "생각하기"와 "식사하기"를 반복한다. 단, 식사를 하기 위해서는 1쌍, 즉 2개의 젓가락이 필요하다.
  • 만약 0번 철학자가 4번 젓가락을 사용하게 되면 4번 철학자는 식사를 할 수 없어 0번 철학자가 식사를 마칠때까지 기다려야한다. 
  • 여기서 철학자를 스레드 혹은 프로세스, 젓가락을 세마포어로 생각할 수 있다. 
  • 그런데 여기서 문제가 생길 수 있다. 모든 철학자가 동시에 식사를 하려고 왼쪽 젓가락을 집으면 5명의 철학자가 5개의 젓가락을 모두 집어든 상황이 된다. 그 결과, 남아있는 젓가락은 없고 모든 철학자가 반대편 젓가락을 들기 위해 기다리게 된다. 하지만 식사할 수 있는 철학자는 없으므로 아무도 젓가락을 내려놓지 않고 하염없이 기다린다. 
  • 이런 상황을 교착상태(Deadlock)라고 한다. 교착상태에 대해서는 다음 게시글에서 알아보도록 한다.

 

 

Reference

velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-9.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94-2

 

 

728x90
반응형

'CS > Operating System' 카테고리의 다른 글

[OS] Computer System Overview  (0) 2021.09.07
[OS] Process 동기화 (3) Deadlock  (0) 2021.02.11
[OS] Process 동기화(1)  (0) 2021.01.28
[OS] 동기와 비동기  (0) 2021.01.24
[OS] 멀티스레딩 & 메모리 공간  (0) 2021.01.20