OS arrangement for test - Cooperating process and Synchronization (1)

in #operating-system6 years ago

It is just my opinion, so don't you attack me. please!

But if this posting has some incorrect informations, you comment about that

Please!!

Cooperating process and Synchronization


  • 결정성
    · 프로세스들이 순차적으로 실행 되는 것이 이야기합니다. 즉 비결정성을 띈다면 동기화를 통해 데이터의 무결성을 유지해야하겠죠.

    · 비간섭 관계의 정의
    1.프로세스 시스템에서 한 프로세스가 다른 프로세스를 선행할 때 이들이 서로 독립적
    2.한 프로세스의 출력 장소가 다른 프로세스의 입력 장소나 출력 장소가 아닐 때, 이 프로세스들은 비간섭 관계에 있다고 정의함.
    모든 쌍의 프로세스가 비간섭 → 시스템은 비간섭 <시스템에서 비간섭은 결정성과 필요 충분 조건>
    또한 공유 변수간의 간섭이 없어야 결정성을 만족합니다.

  • Critical section(임계 영역)
    · 두 개 이상의 프로세스가 동시에 사용할 수 없는 자원(임계자원(Critical Resource))에 대해 접근하고 실행하는 프로그램내의 코드 부분이다. 프로세스가 공유자료를 변경하는 영역이고, 하나의 프로세스만 공유 데이터에 접근하고 나머지 프로세스들은 공유 데이터에 접근할 필요가 있더라도 기다려야 합니다.
    임계구역은 가능한 한 빨리 수행되어야만 하며, 프로세스가 임계구역에 들어간 후 프로세스가 블록 상태로 되어서는 안 됩니다.

    · Critical section에 대한 요구사항 3가지
    1.상호 배제 (다른 어떤 프로세스도 C.S를 실행할 수 없다.)
    2.진행(비어있는 C.S에 두 P가 동시 접근한다면 적절한 결정기법(pipe)이 있어야 함.)
    3.제한된 대기 (진입 요청 후부터 수락까지 사이에 다른 P가 C.S에 실행할 수 있는 횟수에 제한이 있어야함.)

  • 상호 배제의 구현

function mutex() {
 var turn;
 function p0() {
   while(true) {
    while(turn == 1);
    criticalSection();
    turn = 1;
   }
  }
   function p1() {
    while(true) {
     while(turn == 0);
     criticalSection();
     turn = 0;
    }
   }


  turn = 0;  
  p0();
  p1();
}





  • 이 경우 발생할 수 있는 문제점
    · 첫 번째 진입은 P0만 가능함.
    · 교대로 1번씩만 접근할 수 있음.

    · 첫 진입이 고정되어있는 것입니다. 이는 C.S가 비어있을 때, 진입을 원하는 프로세스를 방해해서는 안된다는 원칙을 위배합니다.
    · 무조건 교대로 1번씩만 C.S에 들어갈 수 있는 상황입니다. 이는 누구든 C.S가 비어있으면 들어갈 수 있는 법칙을 위배합니다.
function mutex(lock)  {       
  lock = false;
}

function enterMutex(lock) {        
  while(lock);
  lock = true;
}
  • 이 경우 발생할 수 있는 문제점
    · while(lock);과 lock = true; 사이에서 context-switching이 일어난다면 C.S에 두 개의 프로세스가 들어가게 됨. 이는 상호배제를 위배합니다.
function mutex(lock)  {       
  lock = false;
}

function enterMutex(lock) {         
  lock = true;
  while(lock);
}
  • 이 경우 발생할 수 있는 문제점
    · lock = true;와 while(lock); 사이에서 context-switching이 일어난다면 C.S에 두 프로세스 모두 들어갈 수 없는 상태가 될 수 있습니다. 이는 교착상태에 빠지게 됩니다.


  • 올바른 상호 배제 구현 (Peterson's Solution)
function enterMutex(lock) {    
  flag[i] = 1;
  turn = j; //1
  while(flag[j] == 1 
         && turn == j);//3
}
function enterMutex(lock) {    
  flag[j] = 1;
  turn = i; //2
  while(flag[i] == 1 
         && turn == i);//4
}

· 1이 2보다 먼저 수행되었을 경우 3과 4의 while문 중 어느것이 걸국 먼저 유일하게 빠져나갈까요? 3
이유는 4가 3보다 먼저 수행되었어도, 결국 문맥 교화에 의해 언젠가는 3이 수행되어 들어감
· 즉, 먼저 양보한 사람이 들어가게 되어있는 구조입니다.

Coin Marketplace

STEEM 0.28
TRX 0.12
JST 0.032
BTC 66828.88
ETH 3113.92
USDT 1.00
SBD 3.75