[운영체제]7. 동기화 예제

sai06266·2023년 9월 23일
0

운영체제

목록 보기
7/8

Classical Problems of Synchronization

  • Bounded-Buffer problem
  • Readers and Writers Problem
  • Dining-Philosophers Problem

Bounded-Buffer Problem 유한 버퍼 문제

  • 생산자-소비자 문제
  • 생산자, 소비자의 프로세스가 존재하는데, 어느 생산자 프로세스가 버퍼 중 빈 공간에 데이터를 쓰려할 때, interrupt가 발생하여 다른 프로세스한테 공유 자원이 넘어가 다른 프로세스가 해당 공간에 데이터를 쓰려할 때 문제가 발생한다.
  • semaphore를 통해 해결

Readers-Writers Problem 독자-저자 문제

  • 독자(readers): 데이터를 읽는 것만 가능
  • 저자(writers): 데이터를 읽고 쓰기 가능

문제점

  • 많은 독자들은 한번에 읽을 수 있다.
  • 저자는 같은 시간에 오직 한 명만 공유 자원에 접근할 수 있다.
  • semaphore를 통해 해결
    - readcount: 현재 버퍼에 접근 중인 독자의 수를 나타낸다. (초기값=0)
    - wrt: 저자들 사이의 관계를 통제한다. 즉, 동기화한다. (초기값=1)
    - mutex: readcount와 wrt에 접근하는 것이 원자적으로 수행될 수 있도록 하는 세마포어 (초기값=1)

Dining-Philosophers Problem 철학자 식사 문제

  • 5명의 철학자가 있고 밥을 먹으려면 2개의 젓가락을 집어야한다.
  • 만약 모두가 왼쪽에 있는 젓가락을 집는다면, 모두가 밥을 먹을 수 없다.
  • 철학자들이 젓가락을 내려놓지 않는다면, 이 문제는 해결될 수 없음 -> deadlock

Linux Synchronization

  • 리눅스는 제공한다
    • Semaphores -> block & wakeup
    • Spinlocks -> busy waiting

0개의 댓글