ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6_1 동기화
    OS 2021. 5. 15. 17:03

    Cooperating process는 서로 영향을 주고 받을 수 있는 프로세스다. 

     

    - 메모리 주소를 직접 공유하거나, shared memory, code와 data

    - thread를 공유한다.

     

    →동시에 실행됨으로 인해 data inconsistency 발생

     

    1. Consumer-Producer problem

     

    circular buffer에서

    producer는 버퍼가 가득차서 저장할 수 없는 상태,

    consumer는 버퍼가 텅 비어서 가져올 수 없는 상태일때 문제가 발생한다.

     

    solution

    : producer는 buffer가 가득차지 않았을때만 버퍼를 생산한다.

    consumer는 buffer가 비어있지 않았을때만 버퍼를 소비한다.

     

    count라는 int 변수를 통해 구현한다.

     

    producer

    while (true)
    {
    /* produce an item in next produced */
    while (counter == BUFFER SIZE) ;
    /* do nothing */
    buffer[in] = next produced;
    in = (in + 1) % BUFFER SIZE;
    counter++;
    }

    consumer

    while (true)
    {
    while (counter == 0) ;
    /* do nothing */
    next consumed = buffer[out];
    out = (out + 1) % BUFFER SIZE;
    counter--;
    /* consume the item in next consumed */
    }

     

     

    2. race condition

    정수형 변수 i에 1을 더하는 연산인 i++의 과정은 atomic 하지 않다. 

    좀 더 low level하게 보면 다음과 같다.

    그렇다보니 shared memory에 있는 하나의 변수를 여러 프로세스에서 접근해서 수정하다보면 오류가 생긴다.

     

     

    동기화 도구들

    semaphore

    mutex locks

     

    mutex locks

    mutual exclusion의 약자이다. race condition으로부터 critical section을 보호하기 위한 것이다.

     

    critical section을 실행하기 전에 lock을 걸어잠그고

    critical section을 실행한 후에 lock을 푼다.

     

    lock을 걸어잠그면 다른 프로세스에서 critical section에  접근할 수 없게 된다.

    그러므로 consistency를 유지한다.

     

     

    semaphores

    semaphore S: 정수형 변수

    wait() 또는 P(): S가 0이하일때 멈춰있음. 이후 S--

    signal() 또는 V(): S++

     

     

    wait() - critical section - signal() 의 순서

    또는 한 프로세스가 끝난 다음에 다른 프로세스를 실행시켜야 할 때 다음과 같이 사용한다.

    먼저 실행한 프로세스가 마치면서 signal을 하면 wait하고 있던 프로세스가 실행된다.

     

    세마포어는 두가지 종류가 있다.

    a. binary semaphore : 0과 1의 정수값만을 가진다. mutex lock가 다를 바 없다.

    b. counting semaphore: 제약없는 정수값을 가진다. db에 접근하는 클라이언트의 수 제한 등에 사용가능하다.

     

     

    'OS' 카테고리의 다른 글

    Process  (0) 2021.03.30
    OS week5  (0) 2021.03.30
    컴퓨터 시스템 개요  (0) 2021.03.18
    컴퓨터의 성능  (0) 2019.07.11
Designed by Tistory.