Fundamental Notes/Operating Systems

Process Synchronization

콩콩댕 2009. 1. 7. 20:12
반응형

1.Background

     - 협력적 프로세스는 공유 데이터를 동시 접근하여 데이터의 비일관성을 낳을 수 있다.

     - 동일한 자료를 접근하여 조작하고 그 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황을 RaceCondition(경쟁 상황)이라 한다. Race Condition에서 보고 하기 위해 동기화가 필요하다.

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

     - 상호 배제(mutual exclusion): 한 프로세스가 자신의 critial section 안에 들어가서 수행을 하는 동안 다른 프로세스들은 그들의 critical section을 들어갈수 없다.

     - 진행(progress): critical section에 실행되는 프로세스가 없고 critical section에 들어가려는 프로세스들이 있다면 사용가능하도록 한다.

     - 한정된 대기(bounded waiting): critical section에 집입하도록 허용되는 횟수에 한계가 있어야한다. 임의의 한 프로세스의 starvation을 예방한다.

3.알고리즘






    - OS는 메모리상의 shared memory 영역을 만들어 Turn과 flag[]변수를 공유하게 만들어준다.

    - OS가 적게 끼어들므로 시간 낭비가 없으나 OS의 도움을 받으면 코드가 짧아진다.

4.Bakery Algorithm

    - n개의 프로세스가 critical section에 들어가려한다.

    - critical section에 들어가기전에 프로세스에게 번호를 제공하며, 번호가 작은 프로세스들이 critical section에 들어간다.

    - OS가 도와주지 않으므로 순서를 정해주지 않고 application들이 알아서 정해야 한다. applicatin들이 순서를 정하면 같은 번호가 뽑힐 수 있다. -> 단 번호는 작아지지 않는다.

    - 만약 프로세스에게 제공된 번호가 같다면, 프로세스의 ID( 제공된 번호가 아니다.)가 작은 프로세스가 먼저 실행된다. 프로세스 ID는 OS가 제공하므로 같은 ID를 가질 수 없다.


do{

          choosing[i] = true;  // 번호를 뽑고 있는 동안에는 true

          number[i] = max(number[0],number[1]...number[n-1]) + 1;

                    //번호를 검색후 큰값에 +1을 해줌

          choosing[i] = false;

          for(j = 0l j< n;j++){         

                    while(choosing[i]);//상대방이 번호를 뽑을때까지 기다림, 해주는 이유는??

//없으면 critical section에 두개의 프로세스가 들어갈 수 있다.

                    while((number[j] !=0)//아직 번호를 뽑지 않은 상태 critical section에 들어갈 의사가 없다.

           && (number[j],j) < (number[i],i)); //번호 대조

          }

          critical section;

          number[i] = 0;

          remainder section;

}       

'Fundamental Notes > Operating Systems' 카테고리의 다른 글

Main Memory - Swapping & Contiguous Memory Allocation  (0) 2009.01.07
Deadlock  (0) 2009.01.07
CPU Scheduling  (0) 2009.01.07
Thread  (0) 2009.01.07
Process  (0) 2009.01.07