[OS] Chapter.7 Process Synchronization

Computer/OS | 2006/07/06 09:04 | adioshun

Process Synchronization


Background

- 동시에 shared data를 access할경우 결과가 틀리게 된다!

- 협력적 프로세스의 규율있는 실행을 책임지기위해 데이타 일관성을 유지하는 메커니즘을 요구한다.

- shared-memory 해결방법을 bounded-buffer 문제로 재해석 해보잔다 ㅡㅡ;


Bounded Buffer

- 제한된 Buffer에 뭔가 넣기; 이때 i++ , i--를 사용하는데 이것이 한번에(Atomically) 실행되지 않고 인터럽트가 걸리게 되면 문제가 발생한덴다..ㅡㅡ;

- 왜냐면 asembly(스펠링이...덜덜덜;)로 보면 i++은 하나의 명령어가 아니라 3개의 명령어 이기 때문이다.......하드웨어...-_-ㅋ...컴공들은.. 하드웨어는 전자의 전유물로 알고있고 전자는 소프트웨어를 자신들의 하위개념으로 이해하고 있다.....하드웨어...-_-ㅋ 일.반.적.으.로..


Race Condition

- 그냥 서로그냥 달리겠다고 하다가 결론적으로 둘다 넘어지는 경우를 말한다. 인터럽트가 걸리면서..

- 그러므로 반드시 동기화가 되어져야 한다.


Critical-Section Problem(임계구역문제)

- n개의 프로게스들이 경쟁한다 shared data로

- 각가의 프로세스들은 shared data가 access되는 CRITICAL SECTION이라 불리는 구역을 가진다.

- 문제 : 한프로세스가 critical-section에서 실행될때 타프로세스가 참견안하도록 확실히 해야한다.

  ㅁMutual Exclusion(상호배제)

     : Critical-section에서 한 프로세스가 실행되고 있다면 침범하지 않는다.

  ㅁProgress(진행)

     : Critical-section에서 실행되는기 없으면 암꺼나 드가라고!

  ㅁBounded Waiting(한정된 대기)

     : 배고파죽는거 없다~ 그랄라믄 드간놈 바로 드가지 마!


알고리즘 1번

do {
        while (turn != i) ;
              critical section
        turn = j;
              reminder section
    } while (1);

turn 변수를 두어 0으로 초기화

while(turn != i); 하다가

불만족 하면!

critical-section하고 나서 turn을 상대방 (turn = j;)를 한다.

//M.E.는 만족 P.R.은 불만족


알고리즘 2번

do {
         flag[i] := true;
         while (flag[j]) ;  
                 critical section
         flag [i] = false;
                 remainder section
    } while (1);

flag를 두어 false로 초기화

자신의 프로세스에서 자신을 true로 만든후 상대방을 지켜본다.

critical-section하고 나서 자신의 flag를 false로 만든다.

//M.E.는 만족 P.R.은 불만족

true를 만들어주는것과  while을 바꿔도 해결되지 않고 단지 M.E.가 불만족되어진다.


알고리즘 3번

1번과 2번의 변수를 합친다.

do {

      flag[i] = true;

      turn = j;

      while(flag[j] and turn = j);

                critical section

      flag [i] = false;

                remaind

  }while(1);

//M.E. P.R. B.W. 만족 for two processes


Bakery Algorithm

- Critical section for n processes

- critical section에 들어가기 전에 프로세스를 번호를 받는다. 작은거 일찍들어가는...

  ex) 1.2.3.3.3.4.4.5

- 만약에 3이라는 숫자를 Pi Pj가 받으면 프로세스ID(PID)가 작은놈이 먼저 실행(걍 무조건 작은놈이 대가리여~)

- 번호메기는데 있어 요점은 무조건 늘어만 나는것!

- shared data : boolean choosing[n], int number[n];

                   : init false                    init 0

do {
        choosing[i] = true;
        number[i] = max(number[0], number[1], …,
                  number [n ? 1])+1;
        choosing[i] = false;
        for (j = 0; j < n; j++) {
                  while (choosing[j]) ;
                  while ((number[j] != 0) && (number[j],j     < number[i],i)) ;
        }
        critical section
        number[i] = 0;
        remainder section
} while (1);

Synchronization Hardware(B.W. 가 안됨!)


그럼..choosing은..A,B가 있는데 A가 뽑는중이이었고 결국에 A,B의 번호가 같아 질것이다

그런데 B는 critical section에 들어가버리고 A는 뽑기를 마쳤다. A의 PID가 B보다 작고 그래서 A도 들어가버린다.

Deadlock : 깨워줄놈끼리 큐에 들어가버려서 wake up 못시켜줄때

Starvation : 영~원히


Binary Semapore로 Counting Semapore 구현 모르겠음 ㅡ,.ㅡ;


7.5 고전적인 동기화 문제들

- Bounded-Buffer Problem

  ㅁ 생산자는 FULL뮤텍스를 증가

  ㅁ 소비자는 EMPTY뮤텍스를 증가

  ㅁ empty와 full세마포의 위치를 바꿔버리면 생산자는 한번생산했는데 소비자는 계속 소비하는 이상한 결과가 발생된다.

- Readers and Writers Problem

  ㅁ Readers에서는 readcount를 두어 1개의 reader가 있을때 writer가 들어오는것을 방지하기 위해 조건문 if를 사용 2개 이상일때는 이미 그 조건문을 지나쳐 1개의 writer만 지날수 있는 뮤텍스 값이 0이기 때문에 그냥 지나감ㅋ

  ㅁ Writers에서는 별거 없고 뮤텍스 wrt만을 검사한다.

- Dining-Philosophers Problem

  ㅁ 짝수이면 왼쪽먼저 홀수이면 오른쪽먼저..


Monitors

- 좋은거!

- condition varable은 한 프로세스를 모니터 내부에서 wait하는것을 허용하기 위해 반드시 선언되어야한다. ex) condition x,y;

- Condition variable은 wait와 signal 명령으로 인해서만 사용되어질수 있다.

  ㅁ x.wait();

     ㅇ 그 프로세스를 중지한다.

  ㅁ x.signal();

     ㅇ 중지된 프로세스를 재시작한다. 중지된 프로세스가 없으면 아무효과가 없다.

- condition variable로 해결한 dining philosophers problem

  ㅁ 그냥 해결...중요한것은 test문장 마지막에 자신을 signal시켜준다는것.. 그 이유는 putdown에서 양옆의 녀석들을 체크 해주기 때문이다.

- 나쵸스에서의 condition은...아마도..ㅡ,.ㅡ;

  ㅁ waiter는 condition variable로써 내부적으로 wait될놈과 signal될놈들 결정(철학자에서 여러철학자중 한명(양옆중 1명이 밥먹고 있을때)을 wait시킴과 같음

  ㅁ conditionLock은 monitor자체의 큐로써 내부적으로 놀다가 waiter로 block되면 밖의 놈을 불러 들이기 위함, signal에 의해 waiter된놈이 살아나면 conditionLock을 Acquire시켜 딴놈 못들어 오게 막고 critical section을 수행한다.

2006/07/06 09:04 2006/07/06 09:04
Trackback address :: http://4ellene.net/tt/trackback/961

Comments List

  1. kiss my country ass 2008/05/23 05:56

  2. female triathletes 2008/05/24 01:32

Write a comment.

[로그인][오픈아이디란?]