///////
Search
3️⃣

연습문제 9 ~ 12

9. 임계구역 문제를 하드웨어적으로 해결한 방식으로, 하드웨어의 지원을 받아 명령어를 실행하는 도중에 타임아웃이 걸리지 않도록 하는 방식을 무엇이라 하는가?

검사와 지정 코드, Test and Set 방식
왼쪽은 상호 배제 조건을 충족하지 않는 경우이다.
잠금이 걸렸는지 검사하는 while(lock==true); 문과 검사한 후 잠금 설정을 하는 lock=true; 문이 분리되어 실행되면, 두 명령어 중간에 타임아웃이 걸려 둘 다 임계구역이 진입하게 된다.
오른쪽은 위의 두 명령문을 한꺼번에 실행시켜 실행 중간에 타임아웃이 걸려 임계구역을 보호하지 못하는 문제를 해결할 수 있다.
편리하나 성능 좋은 하드웨어가 아니고서야 바쁜 대기를 사용하여 검사하기 때문에 자원 낭비가 있다.
바쁜 대기 : 작업을 할 필요가 없는 시간에도 계속 무한 루프를 돌면서 시스템 자원을 사용하는 것

10. 세마포어의 Semaphore(n)에서 n은 무엇을 가리키는가?

세마포어(알고리즘)
임계구역에 진입하기 전에 스위치를 사용 중으로 놓고 임계구역으로 들어간다.
이후에 도착하는 프로세스는 앞의 프로세스가 작업을 마칠 때까지 기다린다.
프로세스가 작업을 마치면 세마포어가 다음 프로세스에 임계구역 사용 신호인 동기화 신호를 보낸다.
다른 알고리즘과 달리 임계구역이 잠겼는지 점검하거나, 바쁜 대기, 다른 프로세스에 동기화 메시지를 보낼 필요가 없다.
전역 변수 RS 를 공유 가능한 자원의 수로 초기화한다. RS에는 현재 사용 가능한 자원의 수가 저장
공유 가능한 자원의 수

11. 세마포어에서 내부 변수를 RS라고 할 때 세마포어의 P()의 내부 코드를 쓰시오.

P()
잠금 수행 코드
RS가 0보다 크면(사용 가능 자원 존재) 1만큼 감소시키고, 임계구역 진입
RS가 0보다 작으면(사용 가능 자원 없음) 0보다 커질 때까지 대기
해당 과정을 나타낸 코드는 다음과 같다.
if RS>0 then RS=RS-1; else block();
Java
복사

12. 세마포어에서 내부 변수를 RS라고 할 때 세마포어 V()의 내부 코드를 쓰시오.

V()
잠금 해제와 동기화를 같이 수행하는 코드
RS 값을 1 증가시키고 세마포어에서 대기중인 프로세스에게 임계구역 진입해도 좋다는 wake_up 신호를 보냄
해당 과정을 나타낸 코드는 다음과 같다.
RS = RS + 1; wake_up();
Java
복사

추가 내용

잠금 해제를 기다리는 프로세스는 세마포어 큐에 저장되어 있음
바쁜 대기 과정이 없음
세마포어의 P() , V() 내부 코드가 실행될 땐 검사와 지정을 사용하여 완전히 실행되게끔 해야 함
단점 - 잘못된 사용으로 인한 임계구역 보호 불가
프로세스가 세마포어를 사용하지 않고 바로 임계구역에 들어간 경우는 당연히 보호 불가이다.
P()를 두 번 사용하여 wake_up신호가 발생하지 않은 경우 프로세스 간의 동기화가 이루어지지 않아 세마포어 큐에서 대기하고 있는 프로세스들이 무한 대기에 빠진다.
P()와 V()를 반대로 사용하여 상호 배제가 보장되지 않은 경우로 임계구역을 보호할 수 없다.

예시 - 예금 사라진 문제 해결

1.
공유 자원은 예금 하나이므로 RS 초기값은 1
2.
먼저 도착한 프로세스 P1 이 임계구역 진입, RS 1 감소
3.
나중에 도착한 프로세스 P2는 현재 RS 값이 0이므로 프로세스 P1이 임계구역을 빠져나올 때까지 세마포어 큐에서 대기
4.
프로세스 P1 작업 종료(예금 10만원 → 20만원)
5.
프로세스 P1이 V()를 실행하여 RS 값을 1 증가시키고 wake_up신호를 프로세스 P2에게 보냄
6.
wake_up신호를 받은 프로세스 P2가 작업 시작 후 작업 마무리(예금 20만원 → 25만원)