• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

모니터 질문

21.09.26 00:03 작성 조회수 196

1

안녕하세요 교수님, 모니터 관련 질문 드릴 게 있습니다.

 

질문 1. 모니터와 세마포어의 정확한 차이를 모르겠습니다.

모니터 방식이 "프로그래머가 정의한 특정 영역에 접근하려면 모니터 락을 얻어야 한다" 라는 방식이라고 설명하셨는데.. 이는 결국 임계영역에 들어가기 위해 sleep(), wakeup() 하는 세마포어와 동일한 것 아닌가요?

정확히 어떤 차이점이 있는지 와닿지가 않습니다.

(질문 1 보충 설명)
자바 동기화를 생각했을 때는 차이점이 인지가 됩니다.

"세마포어는 프로그래머의 실수로 인해 타이밍 오류가 발생할 수 있지만 자바에서 synchronized 키워드를 사용하면 JVM이 모니터 락을 알아서 관리해주니까 세마포어에서 발생하는 실수에 대한 걱정이 없다"

정도로요.

그런데, conditional variables 을 사용하는 경우에서는 모니터와 세마포어의 차이를 모르겠다는 이야기입니다.

condition x;
x.wait(), x.signal() 
이러한 호출도 결국 프로그래머가 직접 해주는 것 아닌가요? 그렇다면 이게 세마포어와 어떤 차이점이 있는 것인지...

요런 질문입니다.

 

질문 2. 컨디션 변수의 작용 범위?

컨디션 변수를 사용한 모니터 구현 방식에서.. 각 컨디션 변수의 wait, signal은 하나의 공유 자원에 대해 동작하는 건가요?

아니면 모니터 내부에서 미니 모니터(?)같은 느낌으로 또 다시 영역을 나누고 그 영역에 대해서 동작하는 건가요?

 

질문 3. 컨디션 변수가 하나만 있는 경우?

만약 컨디션 변수가 하나만 있다고 한다면.. 이러한 경우에서는 이 역시 결국 세마포어와 완전히 동일한 것 아닌가 하는 생각이 드는데요.

제가 이해하지 못한 다른 차이점이 있을까요?

 

 

지금까지는 강의 내용을 이해하는 것에 큰 무리는 없었는데.. 이번 강의는 뭔가 난이도가 확 올라간 느낌이네요;

답변 부탁드립니다.

 

감사합니다!!

답변 1

답변을 작성해보세요.

0

비유적으로 설명하는 것은 오해의 소지가 많기 때문에 경계해야 하지만,

이 경우는 비유적 설명이 필요할 것 같습니다.

 

C++ 언어로 스택을 구현한다고 해 봅시다.

전역 변수로 스택을 두고, push() 함수와 pop() 함수를 구현할 수 있겠지요?

이 경우는 세마포어라고 보면 되겠습니다.

 

대신, class Stack을 선언하고,  멤버 변수로 스택을 두고

push(), pop()을 메서드로 선언해도 되겠지요?

이 경우는 모니터라고 보면 되겠습니다.

 

이렇게 개념을 잡고 다시 모니터 부분을 들여다 보면 나머지 문제는 해결이 될 것 같습니다.

노파심에서 말하지만, 비유는 비유일 뿐, 이 설명이 정확하다고는 생각마시고,

교재 내용을 천천히 음미하면서 읽어보면 좀 더 깊은 이해가 가능할 것 같습니다.

 

임현강님의 프로필

임현강

질문자

2021.09.26

한 번에 이해는 잘 안 되지만 답변주신 내용 토대로 더 생각해보겠습니다.
감사합니다!