모니터

원래벌레·2022년 10월 17일
0

🌞 모니터

  • 프로세스 동기화를 제공하는 Abstract Data Type(ADT)

    • 공유 데이터

    • 그 데이터에 접근하는 함수 (임계영역 포함)

  • 한 순간에 하나의 프로세스만이 모니터에서 (함수를) 수행

  • 공유자원을 모니터의 내부에 지역 변수로 정의

  • 모니터 내의 변수는 모니터의 함수로만 접근 가능

  • 클래스와의 차이점 : 클래스의 경우 여러 프로세스가 함수를 사용 할 수 있지만, 모니터는 오직 하나의 프로세스만 함수를 사용 할 수 있다.


🌼 모니터의 장단점

  • 장점

    • 상호 배제와 프로세스 동기화 제공
    • 병렬 프로그래밍이 쉽고 오류가 덜 발생
  • 단점

    • 컴파일러의 추가 부담 : 임계영역에 대한 접근제어 용으로 제공되는 OS의 기능을 활용해야 함 ( 운영체제에서 기계어 변환 로우레벨로 넣기 위해서 세마포로 만들어 줌 )

🌼 조건 변수가 있는 모니터의 구조

  • 조건 변수

    • 모니터 내에 정의 되는 변수
  • 프로세스 동기화

    • 바쁜대기와 교착상대 없이 프로세스가 대기하는 메커니즘 제공

  • 꽉찬 경우에 대해서 full condition_variable을 통하여 대기를 할 것이다. 그리고 remove를 하는 메소드가 실행이 되면 signal(full)을 통해서 부른다.

    큐가 비어 있어서 remove를 할 수 없는 상황일 때 empty condition_Variable을 통해서 대기를 하고, 이후에 add를 해주게 되면 empty변수로 signal을 보낸다.


🌼 모니터의 구현

  • 프로세스 P가 x.signal()을 호출하여, 대기하던 프로세스 Q를 x.wait()에서 깨우면?

  • 전자의 경우는 엔트리큐, 웨잇큐, 시그널큐로 나눠져 있다.

  • 후자의 경우는 엔트리큐와 웨잇큐로 나눠져 있다.

  • 전자의 예제

1 0 0 0

mutex = 1과 0
변수 mutex = 세마포로 자원에 들어갈 수 있는 자원

변수 next_count = 시그널을 보낸 프로세스 수

conditin_variable x = wait에 의해서

실행 순서 x > next > mutex

x가 실행이 되면 next를 확인하고 그리고 mutex를 확인한다.

시그널 발생시 : next_count를 늘려주어 signal에서 기다리고 있는 프로세스 수를 하나 눌려준다. 그리고 조건변수에 의해서 기다리고 있는 프로세스를 signal 하고, wait(next)를 통해서 signal 프로스를 기다려준다.

🌞 조건 대기 구조

wait의 우선권은 time 값이 작은 프로세스에게 부여한다.

  • 조건 대기 구조 : x.wait(c);

    c는 우선순위이다. x.signal 시 c 값이 (가장 작은) 높은 우선순위를 가진 프로세스를 먼저 재실행 한다.

세마포와 조건변수 비교

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글