Process Synchronization (2)

Classical Problems of Synchronization

Bounded-Buffer Problem(Producer-Consumer Problem)

  • Shared data
    • buffer 자체 및 buffer 조작 변수
  • Synchronizaiton variables
    • mutual exclusion: Need binary semaphore(Shared data의 mutual exclusion을 위해)
    • resource count: Need integer semaphore(남은 full/empty buffer의 수 표시)

Readers-Writers Problem

  • 한 프로세스가 Database에 write 중일 때 다른 프로세스가 접근하면 안 됨
  • read는 동시에 여럿이 해도 됨
  • 해결책
    • Writer가 DB에 접근 허가를 아직 얻지 못한 상태에서는 모든 대기 중인 Reader들은 다 DB에 접근 가능케 해줌
    • Writer는 대기 중인 Reader가 하나도 없을 때 DB 접근이 허용
    • 일단 Writer가 DB에 접근 중이면 Reader들은 접근이 금지
    • Writer가 DB에서 빠져나가야만 Reader의 접근 허용
  • Shared data
    • Database 자체
    • int readcount; //(현재 DB에 접근 중인 Reader의 수)
  • Synchronization variables
    • mutex: 공유 변수 readcount를 접근하는 critical section의 mutual exclusion을 보장하기 위해 사용
    • db: Reader와 Writer가 공유 DB 자체를 올바르게 접근 하는 역할

  • 최초의 Reader는 readcount를 증가시켜주어, db에 lock을 걸어줌
  • readcount 자체도 공유 변수이기 때문에 Semaphore 사용하여, Lock/Unlock 처리를 해줌
  • readcount가 0이 되는 경우, db에 건 lock을 unlock 해주며 Reader 마무리
  • 너무 늦게 들어온 Reader보다 Writer가 우선순위 높게 하는 방식 등으로 Starvation 문제 해결 가능할 것

Dining Philosophers Problem

  • Problem
    • 모든 철학자가 동시에 왼쪽 젓가락을 집어버리면 Deadlock이 생김
  • Solution
    • 4명의 철학자만이 테이블이 동시에 앉을 수 있도록 함

    • 젓가락을 두 개 모두 집을 수 있을 때에만 젓가락을 집을 수 있게 함(좌/우측 철학자가 식사 중이 아닐 때, 내가 젓가락을 들 수 있음)
    • 비대칭
      • 짝수 철학자는 왼쪽 젓가락부터 잡음
      • 홀수 철학자는 오른쪽 젓가락부터 잡음

Monitor

  • Semaphore의 문제점
    • 코딩의 어려움
    • 정확성의 입증이 어려움
    • 자발적 협력이 필요
    • 한 번의 실수가 모든 시스템에 치명적 영향


  • Monitor: 동시 수행 중인 프로세스 사이에서 추상 데이터 타입의 안전한 공유를 보장하기 위한 high-level synchronization construct
    • Monitor 내부에 공유 데이터를 두고, 하나의 프로세스 씩 동작하게 하는 식으로 진행
    • 프로그래머가 동기화 제약 조건을 명시적으로 코딩 할 필요가 없음
    • 프로세스가 모니터 안에서 기다릴 수 있도록 condition variable 사용
    • Condition variable은 _wait_와 signal 연산에 의해서만 접근 가능
      • signal을 사용할 때 suspend 상태인 프로세스가 없는 경우, 아무 일도 일어나지 않음
  • Monitor를 이용한 Dining Philosophers 문제의 해결
    • 상대의 state를 변경할 수 있기에 공유 변수 처리


'Software Convergence > OS, Linux ' 카테고리의 다른 글

8. Memory Management  (0) 2018.09.26
7. Deadlocks  (0) 2018.09.25
6. Process Synchronization (1)  (0) 2018.09.20
5. CPU Scheduling  (0) 2018.09.17
4. Process Management  (0) 2018.09.16

+ Recent posts