학교/운영체제

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

daykim 2023. 1. 30. 16:39
아래 도서 기반 정리
 

운영체제 | Abraham Silberschatz - 교보문고

운영체제 | ▶ 이 책은 운영체제론을 다룬 이론서입니다. 운영체제론의 기초적이고 전반적인 내용을 학습할 수 있습니다.

product.kyobobook.co.kr

 

목차

  • 고전적인 동기화 문제들
  • 커널 안에서의 동기화
  • POSIX 동기화
  • JAVA에서의 동기화
  • 대체 방안들

 

고전적인 동기화 문제들


유한 버퍼 문제 (The Bounded-Buffer Problem)

  • 생산자 소비자 문제

 

Readers-Writers Problem

  • Readers : 데이터를 읽기만하는 프로세스
  • Writers : 데이터를 갱신하는 프로세스

reader가 동시에 공유데이터에 접근해도 문제가 발생하지 않는다.

그러나 여러 writer나 스레드가 동시에 접근하면 문제가 발생할 수 있다.

한 번에 하나의 writer가 공유데이터에 접근하도록 할 필요가 있다.

이러한 문제를 Reader-Writers 문제라고 한다.

Starvation problem

  • reader 프로세스 우선순위를 높게 한다.
    -> writer 프로세스가 공유 데이터에 접근 못 할 수 있다.
  • writer 프로세스의 우선순위를 높게 한다.
    -> reader 프로세스가 공유 데이터에 접근 못 할 수 있다.

 

식사하는 철학자들 문제 (The Dining-Philosophers Problem)

  • 음식 : data set
  • 젓가락 : 공유 자원

  1. 철학자는 배가 고파지면, 자신의 왼쪽, 오른쪽에 있는 두 개의 젓가락을 집으려 시도한다.
  2. 철학자는 한 번에 하나의 젓가락만 집을 수도 있다.
  3. 이미 옆 사람이 잡은 젓가락을 집을 수는 없다.
  4. 철학자가 동시에 두 개의 젓가락을 집으면, 놓지 않고 식사를 한다.
  5. 식사를 마치면, 젓가락 두 개를 모두 놓고 다시 생각하기 시작한다.

이는 많은 부류의 병행 제어 문제의 한 예다.
교착 상태와 기아를 발생시키지 않고, 여러 스레드에게 여러 자원을 할당해야 할 필요를 표현한 문제다.

  • Deadlock 문제
    동시에 왼쪽 젓가락을 집으면, 젓가락이 모두 lock이 걸린다.
    모두 자신의 오른쪽 lock이 풀리길 기다린다.

철학자들 해결방법

  1. 세마포어 해결안
    • 각 젓가락을 하나의 세마포로 표현한다.
      semaphore chopstick[5];
    • 이 방법은 인접한 두 철학자가 동시에 식사하지 않는다는 것을 보장한다.
    • 하지만 교착 상태를 야기할 수 있다.
  2. 위의 교착상태 해결방법
    1. 최대 4명의 철학자만 앉게 한다.
    2. 한 철학자가 젓가락 두 개를 모두 집을 수 있을때만, 집도록 허용한다.
    3. 비대칭 해결한을 사용한다.
      홀수 번호 철학자는 왼쪽 먼저 집고 오른쪽을 집는다.
      짝수 번호 철학자는 오른쪽 젓가락을 집고 왼쪽 젓가락을 집는다.
  3. 모니터 해결방법
    • 철학자가 양쪽 젓가락 모두 잡을 수 있을 때만 젓가락을 집을 수 있도록 강제한다.
    • 이 방법은 두 철학자가 동시에 식사하지 않는 것과 교착 상태가 발생하지 않는다는 것을 보장한다.
    • 그러나 기아문제가 발생할 수 있다.

 

JAVA에서의 동기화


 

 

대체 방안들


트랜잭션 메모리

데이터베이스의 트랜잭션 개념이다.

메모리 읽기와 쓰기 연산을 원자적인 연속적 순서로 수행한다.

모든 연산이 완료되면, 메모리 트랜잭션은 확정된다. (commit)

그렇지 않으면 그 시점까지 완수된 모든 연산은 취소되고, 트랜잭션 시작 이전 상태로 되돌린다. (roll-bakc)

 

함수형 언어

Erlang, Scala

함수형 언어는 변경 가능 상태를 허용하지 않기 때문에, race condition이나 데드락 상태와 같은 문제에 신경 쓸 필요가 없다.

 

OpenMP