[OS] 프로세스 동기화

Wonbin Lee·2022년 5월 9일
0

Operating Systems

목록 보기
3/4

프로세스 동기화

운영체제는 다중 프로그래밍 시스템이기 때문에 여러 프로세스들이 존재한다.
하지만 이 때 비동기적 프로세스들이 공유 자원에 동시에 접근하게 된다면 치명적인 문제가 발생 할 수 있기 때문에, 이를 위해 프로세스 동기화를 해줘야 한다.

프로세스 동기화는 동일한 메모리 공간을 공유하는 프로세스가 OS에서 관리되는 방식으로, 한번에 하나의 프로세스만 공유메모리에 접근할 수 있도록 변수나 하드웨어를 사용하여 데이터의 일관성을 유지하도록 해야한다.



Race condition (경쟁조건)

  • 여러 프로세스들이 동시에 데이터에 접근하는 상황에서 어떤 순서로 데이터에 접근하느냐에 따라 결과값이 달라질 수 있는 상황.
  • 공유 데이터의 동시접근(Concurrent access)은 데이터의 불일치 문제를 발생 시킬수 있다.
  • Race condition을 막고 일관성을 유지 하기위해서는 협력 프로세스 간의 실행 순서를 정해주는 매커니즘인 동기화가 필요.
  • 3가지 경우에서 Race Condition이 발생
    1. 커널 모드로 수행중인 인터럽트가 발생하는 경우.
    2. 프로세스가 시스템 콜을 호출해서 커널 모드로 수행 중인데 Context switch가 발생하는 경우.
    3. 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근하는 경우.

Critical section(임계 영역)

  • 공유데이터를 접근하는 코드영역 (code segment)코드 상에서 Race condition이 발생할 수 있는 특정 부분을 말한다. 즉, 공유 데이터를 접근하는 코드 부분을 말한다.
  • 공유 데이터의 동시접근(Concurrent access)은 데이터의 불일치 문제를 발생 시킬수 있다.
  • 임계영역의 3가지 필요조건
    1. 상호 배제(Mutual exclusion) : 둘 이상의 프로세스가 임계 영역에 동시 진입 불가
    2. 진행의 융통성(Progress Flexibility) : 임계 영역에 프로세스 자리가 비었다면 언제든지 진입 가능해야 함
    3. 한정 대기(Bounded waiting) : 언젠가(유한 시간에)는 임계 영역에 프로세스가 진입 가능해야 함


동기화 관련 문제

은행 계좌 문제 (Back Account Problem)

  • 부모는 은행 계좌에 입금을 한다. 자식은 은행 계좌에서 출금한다.
  • 입금과 출금 과정이 별도로 이루어져야 한다.
  • 크리티컬 섹션 : 은행 계좌

독자 저자 문제 (Readers Writers Problem)

  • 독자는 책(공유 데이터베이스)에 쓰여있는 글을 읽는다. 저자는 책에 글을 써서 추가한다.
  • 독자가 글을 읽고 있다면, 독자는 추가적으로 글을 읽을 수 있지만, 저자는 글을 쓸 수 없다.
  • 저자가 글을 쓰고 있다면, 독자는 글을 읽을 수 없으며, 저자 또한 추가적으로 글을 쓸 수 없다.
  • 크리티컬 섹션 : 책 (공유 데이터베이스)

생산자 소비자 문제 (Producer Consumer Problem)

  • 한정 버퍼 문제(Bounded Buffer Problem)라고도 한다.
  • 생산자는 물건을 생산하여 창고(버퍼)에 넣는다. 소비자는 창고에서 물건을 꺼내서 소비한다.
  • 창고가 가득 차면 생산자는 물건을 넣을 수 없고, 창고가 비어 있으면 소비자는 물건을 소비할 수 없다.
  • 크리티컬 섹션 : 창고 (버퍼)

 식사하는 철학자 문제 (Dining Philosopher Problem)

  • 원형 테이블에 철학자들이 앉아있고 철학자의 수만큼 젓가락이 철학자 사이에 하나씩 놓여있다.
  • 철학자들이 식사를 하기 위해서는 양쪽에 하나씩 놓여있는 젓가락을 둘 다 들어서 사용해야 한다.
  • 어떤 철학자가 젓가락을 사용 중이라면, 다른 어떤 철학자는 식사를 할 수 없다.
  • 크리티컬 섹션 : 젓가락
profile
Developer who level up every day ✌️

0개의 댓글