본문 바로가기

CS/운영체제

운영체제(9) - 고전적인 동기화 문제들

반응형

이전 포스팅에서는 동기화 도구인 Semaphores와 Monitor를 알아보았다

이번 포스팅에서는 고전적인 동기화 문제들 3가지를 살펴보겠다.

Bounded- Buffer Problem ( Producer - Consumer Problem ,유한 버퍼 문제)

그림과 같이 버퍼가 존재한다고 가정하자

Producer, 생산자 프로세스는 공유 버퍼에 데이터를 하나 만들어서 넣는 역할

Consumer, 소비자 프로세스는 공유 버퍼에서 데이터를 꺼내는 역할

만약 둘 이상의 생산자가 버퍼를 동시에 보고 데이터를 만들어 넣는다면 문제가 발생할 수 있다. 마찬가지로 둘 이상의 소비자가 동시에 동일한 버퍼의 데이터를 사용한다면 문제가 발생할 수 있다.

그러므로 동시에 버퍼에 접근할 수 없도록 락을 걸어줘야 한다.

락을 걸고 푸는 용도, 자원의 개수를 카운팅 하는 용도로 세마포어 변수를 사용한다.

 

Readers - Writers Problem

  • 한 Process가 DB에 write 중일 때 다른 Process각 접근하면 안됨
  • Read는 동시에 여럿이 해도 됨, 근데 Read 할 때마다 Lock을 걸면 비효율적이다

Soution

  • Writer가 DB에 접근 허가를 아직 얻지 못한 상태에서는 모든 대기중인 Reader들을 다 DB에 접근하게 해준다
  • Writer는 대기 중인 Reader가 하나도 없을 때 DB 접근이 허용된다
  • 일단 Writer가 DB에 접근 중이면 Reader들은 접근이 금지된다
  • Writer가 DB에서 빠져나가야만 Reader의 접근이 허용된다

Shared data (공유 데이터)

  • DB 그 자체
  • readCount ( 현재 DB에 접근 중인 Reader의 수)

Synchronization variables ( 동기화 변수)

  • mutex ( 공유 변수 readCount를 접근하는 코드, 임계 구역의 상호 배제를 보장하기 위해 사용)
  • db ( Reader와 Writer가 공유 DB 자체를 올바르게 접근하게 하는 역할)

 

발생 가능한 문제점으로는 위의 그림에서 볼 수 있듯이 Writer프로세스가 Starvation에 빠질 수 있다.

만약 Reader가 계속 Read 작업을 실행 한다면 Writer는 임계 구역에 접근이 안되기 때문이다.

 

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

철학자 다섯이서 원형 식탁에 둘러앉아 생각에 빠지다가, 배고플 땐 밥을 먹는다. 그들의 양쪽엔 각각 젓가락 한 짝씩 놓여있고, 밥을 먹으려 할 땐 다음의 과정을 따른다.

1. 왼쪽 젓가락부터 집어든다. 다른 철학자가 이미 왼쪽 젓가락을 쓰고 있다면 그가 내려놓을 때 까지 생각하며 대기한다.

2. 왼쪽을 들었으면 오른쪽 젓가락을 든다. 들 수 없다면 1번과 마찬가지로 들 수 있을 때까지 생각하며 대기한다.

3. 두 젓가락을 모두 들었다면 일정 시간동안 식사를 한다.

4. 식사를 마쳤으면 오른쪽 젓가락을 내려놓고, 그 다음 왼쪽 젓가락을 내려놓는다.

5. 다시 생각하다가 배고프면 1번으로 돌아간다.

 

여기서 발생 할 수 있는 문제는 바로 Deadlock( 다음 포스팅에서 설명 예정)이다. 만약 모든 철학자가 동시에 왼쪽 

왼쪽 젓가락을 집어든다면 2번의 상황에서 빠져나오지 못하고 계속 오른쪽 젓가락이 내려지기를 기다릴 것이다.

 

해결방법

  • 4명의 철학자만이 테이블에 동시에 앉을 수 있게 한다
  • 젓가락 2개 모두 집을 수 있을 때에만 젓가락을 집을 수 있게한다
  • 짝수(홀수) 철학자는 왼쪽(오른쪽) 젓가락부터 집도록 한다
  • 젓가락 개수를 5개에서 6개로 늘린다

 

이 포스팅은 이화여대에서 무료로제공하는 반효경님의 운영체제강의를 수강하며 정리한 내용입니다.

필자가 잘 이해하지 못해서 잘못된 내용이 있을 수 있으므로 주의바라며, 발견되면 알려주시면 감사하겠습니다.

http://www.kocw.net/home/search/kemView.do?kemId=1046323 

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

 

 

반응형