Operating System Ch 7 : Synchronization Examples

이정빈·2024년 1월 12일
0

OS

목록 보기
7/15

7.1 Classic Problems of Synchronization

7.1.1 The Bounded Buffer Problem

유한 버퍼란? 데이터를 임시로 저장하는 고정된 크기의 메모리 영역임.
생산자는 데이터를 생산하고, 소비자는 데이터를 소비하는데, 동시에 일어나면 동기화 문제가 생김.
(가득차면 소비될때까지 기다리고, 비어있으면 생산될 때까지 기다려야함)

empty, full 세마포를 만드는 것으로 해결함
빈 버퍼와 가득 찬 버퍼의 상태를 나타내기 위함



생산자 프로세스에서 빈 공간이 있는지 확인하고 넣고, 차 있는 것을 알린다.


소비자 프로세스에선 가득 차 있는지 확인하거, 소비한 후, 비어 있는지 신호를 보냄

7.1.2 The Readers Writers Problem

하나의 데이터베이스에 여러 병행 프로세스간 공유를 하는 경우, 프로세스마다 하는 일은 다르겠지만 읽거나 쓰고(갱신)하는 프로세스들이 있을 것이다.

읽기만 하는 프로세스를 reader, 쓰는 프로세스를 writer이라고 한다.
reader만 있으면 아무런 문제가 없지만, writer는 동기화 문제가 발생할 수 있다.

이런 문제를 reader-writer 문제라고 한다.

  1. writer가 공유 객체를 사용할 허가를 받지 못했다면, 어느 reader도 기다리게 할 수 없다.
  2. writer가 준비되면 가능한 빨리 쓰기를 수행할 것을 요구한다. writer들이 접근을 기다리면, reader들은 시작 못함

첫 번째의 경우 writer가 starvation에 빠지고, 두 번째는 reader가 stravation에 빠진다.




7.1.3 The Dining Philosophers Problem

먹기 위해선 두 개의 젓가락을 들어야하는데, 한 명의 철학자가 젓가락을 들고 있으면 나머지는 들지 못한다.

7.1.3.1 Semaphore Solution

각 젓가락을 하나의 세마포로 표현하는 것
wait를 통해 잡으려고 시도하고, signal을 통해 젓가락을 놓는다.

  1. 최대 4명의 철학자만 앉을 수 있도록
  2. 젓가락 2개를 모두 집을 수 있을때만 젓가락을 집도록 허용
  3. 비대칭 해결안.

7.5 Alternative Apporaches

7.5.1 Transactional Memory

메모리 트랜잭션은 메모리 읽기와 쓰기연산의 원자적인 연속적 순서이다.
한 트랜잭션의 모든 연산이 완수되면 메모리 트랜잭션은 확정된다.

0개의 댓글