반효경 [운영체제] 15. Process Synchronization 4

Namhee KIM·2022년 9월 14일
1

Process Synchronization

| process synchronization 프로세스 동기화
| concurrency control 병행제어


복습
semaphore : 추상자료형, p연산과 v연산으로 이루어어져있음
p연산 : 자원의 획득
v연산 : 자원 반환


  • 고전적인 프로세스 동기화 문제
  1. Bounded-Buffer Problem (Process-Consumer Problem)

  2. Reders-Writers Problem

  3. Dining-Philosophers Problem
    => 위 세가지 모두 세마포어를 이용한 해결법

  4. Monitor

    프로그래밍 언어 차원에서, 동시 접근에 대한 문제를 해결함으로써 프로그래머의 부담을 완화
    모니터 안에 공유 데이터를 정의함으로써 만약 프로세스가 공유 데이터에 접근하면 모니터를 거치도록 함. 다른 프로세스가 데이터를 점유중인 상황이면, 모니터는 다른 프로세스의 접근을 제한한다. lock-unlock을 모니터가 해줌.

    예. A프로세스가 모니터 안에서 공유데이터 접근 코드 실행중일 때, B프로세스가 cpu 뺏었으면, A는 모니터 안에서 active 상태로 남아있게 되어 다른 프로세스의 접근을 막음. active = 0 이 될 때, 접근이 가능해짐. 빠져나가거나 잠들면 active = 0 됨.


=> 내부에 데이터와, 데이터 접근 코드(함수)들이 정의되어 있어 객체 지향프로그래밍에서 주로 쓰임.

  • condition variable : 잠들게 하거나, 깨울 때
  • condition variable을 연산하는 함수들
    x.wait() : 잠들게 할 때, x조건을 만족하지 못할 때 호출
    x.signal() : 잠에서 깨울 때, 누군가 x를 다 쓰고 빠져나가서 잠들어 있는 프로세스가 있으면 깨워줘라
  • 생산자 소비자 문제 코드와의 비교, 아래 그림은 monitor가 적용 된 것

    모니터는 들어와서 코드 실행 중에 모니터가 알아서 막아주기 때문에, 생산자소비자 코드와 달리, 굳이 공유 버퍼에 lock할 필요가 없음
    프로세스 두가지 문제가짐 (1-공유 버퍼에 자원을 만들어서 넣는 문제 2-자원을 꺼내가는 문제)
    그래서 lock 걸어서 자원을 넣거나 lock걸어서 자원을 꺼내가는 식으로 구현함.

condition 변수가 정의되어 있어서 빈 버퍼를 기다리게 하고, 없으면 줄서서 잠들고, 빈 버퍼있으면 내용 기다리면서 잠들어있으면 깨워라
내용 x : 줄서서 기다리면서 잠듬
내용 o : 꺼내쓰고, 다음 기다리고 있는 애 있으면 깨워라~(:consumer)

세마포어와의 비교
1. lock을 나타내는 변수 mutex가 있음 (monitor엔 없음)
2. semaphore에서도

0개의 댓글