프로세스 동기화
운영체제는 다중 프로그래밍 시스템이기 때문에 여러 프로세스들이 존재한다.
하지만 이 때 비동기적 프로세스들이 공유 자원에 동시에 접근하게 된다면 치명적인 문제가 발생 할 수 있기 때문에, 이를 위해 프로세스 동기화를 해줘야 한다.
프로세스 동기화는 동일한 메모리 공간을 공유하는 프로세스가 OS에서 관리되는 방식으로, 한번에 하나의 프로세스만 공유메모리에 접근할 수 있도록 변수나 하드웨어를 사용하여 데이터의 일관성을 유지하도록 해야한다.
Race condition (경쟁조건)
- 여러 프로세스들이 동시에 데이터에 접근하는 상황에서 어떤 순서로 데이터에 접근하느냐에 따라 결과값이 달라질 수 있는 상황.
- 공유 데이터의 동시접근(Concurrent access)은 데이터의 불일치 문제를 발생 시킬수 있다.
- Race condition을 막고 일관성을 유지 하기위해서는 협력 프로세스 간의 실행 순서를 정해주는 매커니즘인 동기화가 필요.
- 3가지 경우에서 Race Condition이 발생
- 커널 모드로 수행중인 인터럽트가 발생하는 경우.
- 프로세스가 시스템 콜을 호출해서 커널 모드로 수행 중인데 Context switch가 발생하는 경우.
- 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근하는 경우.
Critical section(임계 영역)
- 공유데이터를 접근하는 코드영역 (code segment)코드 상에서 Race condition이 발생할 수 있는 특정 부분을 말한다. 즉, 공유 데이터를 접근하는 코드 부분을 말한다.
- 공유 데이터의 동시접근(Concurrent access)은 데이터의 불일치 문제를 발생 시킬수 있다.
- 임계영역의 3가지 필요조건
- 상호 배제(Mutual exclusion) : 둘 이상의 프로세스가 임계 영역에 동시 진입 불가
- 진행의 융통성(Progress Flexibility) : 임계 영역에 프로세스 자리가 비었다면 언제든지 진입 가능해야 함
- 한정 대기(Bounded waiting) : 언젠가(유한 시간에)는 임계 영역에 프로세스가 진입 가능해야 함
동기화 관련 문제
은행 계좌 문제 (Back Account Problem)
- 부모는 은행 계좌에 입금을 한다. 자식은 은행 계좌에서 출금한다.
- 입금과 출금 과정이 별도로 이루어져야 한다.
- 크리티컬 섹션 : 은행 계좌
독자 저자 문제 (Readers Writers Problem)
- 독자는 책(공유 데이터베이스)에 쓰여있는 글을 읽는다. 저자는 책에 글을 써서 추가한다.
- 독자가 글을 읽고 있다면, 독자는 추가적으로 글을 읽을 수 있지만, 저자는 글을 쓸 수 없다.
- 저자가 글을 쓰고 있다면, 독자는 글을 읽을 수 없으며, 저자 또한 추가적으로 글을 쓸 수 없다.
- 크리티컬 섹션 : 책 (공유 데이터베이스)
생산자 소비자 문제 (Producer Consumer Problem)
- 한정 버퍼 문제(Bounded Buffer Problem)라고도 한다.
- 생산자는 물건을 생산하여 창고(버퍼)에 넣는다. 소비자는 창고에서 물건을 꺼내서 소비한다.
- 창고가 가득 차면 생산자는 물건을 넣을 수 없고, 창고가 비어 있으면 소비자는 물건을 소비할 수 없다.
- 크리티컬 섹션 : 창고 (버퍼)
식사하는 철학자 문제 (Dining Philosopher Problem)
- 원형 테이블에 철학자들이 앉아있고 철학자의 수만큼 젓가락이 철학자 사이에 하나씩 놓여있다.
- 철학자들이 식사를 하기 위해서는 양쪽에 하나씩 놓여있는 젓가락을 둘 다 들어서 사용해야 한다.
- 어떤 철학자가 젓가락을 사용 중이라면, 다른 어떤 철학자는 식사를 할 수 없다.
- 크리티컬 섹션 : 젓가락