println
2k
2018-12-10 03:18:27 작성 2018-12-10 03:19:44 수정됨
0
251

[운영체제] 모니터에서 signal이 없어지면 어떤 일이 생기나요??


운영체제를 공부하다 보니 모니터라는 개념이 나왔는데요, Reader-writer 문제라는 구간에서 나오는 코드가 이해가 안가서 질문드리게 되었습니다.

※Reader-writer 문제란 무엇이냐면... reader/writer 프로세스들 간의 데이터 무결성 보장 기법으로 writer 프로세스에 의한 데이터 접근 시에만 상호 배제 및 동기화 필요하다고 합니다.



모니터의 구성은 다음과 같습니다.

- 변수 2개
현재 읽기 작업을 진행하고 있는 reader 프로세스의 수
현재 writer 프로세스가 쓰기 작업을 진행중인지 표시
 
 
- 조건 큐 2개
reader/writer프로세스가 대기해야 할 경우에 사용
 
 
- 프로시져 4개
reader(writer) 프로세스가 읽기(쓰기) 작업을 원할 경우에 호출, 읽기(쓰기) 작업을 마쳤을 때 호출
cs





그리고 뜬금포로 나온 소스코드입니다 (주석 한줄 없고 아무 설명도 없네요)

가독성을 위해 비슷한 패턴을 보이는 구간을 넓게 Enter를 쳐서 코드를 나눠봤는데 각 패턴마다 signal이라는 구간이 존재하네요. 이게 핵심인 모양인데, 제가 밑에 11줄 부분을 노랗게 색칠해놨습니다. 만약 이 11줄이 사라진다면 어떤 결과가 생기나요? 그것만 알려주시면 나머지 내용 모두 한방에 이해가 될 것 같습니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
monitor readers_and_writers;
var numReaders : integer,
      writing : boolean,
      readingAllowed, writingAllowed : conditon;
 
 
procedure beginReading;
begin
   if (writing or queue(writingAllowed)) then readingAllowed.wait();
   numReaders <- numReaders + 1;
   if (queue(readingAllowed)) then readingAllowed.signal();
end;
 
 
procedure finishReading:
begin
  numReaders <- numReaders - 1;
  if (numReaders = 0then writingAllowed.signal();
end;
 
 
procedure beginWriting;
begin
   if (numReaders > 0 or writing) then writingAllowed.wait()
   writing <- true;
end;
 
 
procedure finishWriting:
begin
  writing <- false;
  if (queue(readingAllowed)) then readingAllowed.signal();
  else writingAllowed.signal();
end;
 
 
begin
   numReaders <- 0;
   writing <- false
end.
 
cs



0
0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.