[쉽게 배우는 운영체제] 제 5장 프로세스 동기화 연습문제 풀이 정답 (심화문제)
연습 문제
1. 프로세스 간 통신에서 데이터를 양방향으로 전송 가능하지만 동시 전송은 불가능 하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 통신 방식은 무엇인가?
- 단방향 통신
2. 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 무엇이라 하는가?
- 바쁜 대기
3. 프로세스간 통신에서 대기가 없는 통신과 대기가 있는 통신의 예를 각각 제시하시오.
- 대기가 없는 통신 : 파일, 전역변수
- 대기가 있는 통신 : 파이프, 소켓
4. 파이프를 이용하여 통신할 때 파이프를 2개 사용하는 이유는 무엇인가?
- 파이프가 단방향 통신이라 한쪽 방향으로만 데이터를 전송할 수 있어 두개 필요
5. 공유 자원을 병행적으로 읽거나 쓰는 상황을 무엇이라 하는가?
- 경쟁 조건
6. 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역은 무엇인가?
- 임계구역
7. 임계구역 해결 조건 중 한 프로세스가 임계구역에 들어갔을때 다른 프로세스는 임계구역에 들어갈 수 없는 조건을 무엇이라 하는가?
- 상호 배제
8. 임계구역 해결 조건 중 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다는 조건을 무엇이라 하는가?
- 진행의 융통성
9. 임계구역 문제를 하드웨어적으로 해결한 방식으로, 하드웨어의 지원을 받아 명령어를 실행하는 도중에 타임아웃이 걸리지 않도록 하는 방식을 무엇이라 하는가?
- 검사와 지정 test - and - set 코드
10. 세마포어의 Semaphore(n)에서 n은 무엇을 가르키는가?
- 사용 가능한 자원의 수
11. 세마포어에서 내부변수를 RS라고 할때 세마포어 P()의 내부 코드를 쓰시오.
- if RS>0 then RS = RS - 1;
else block;
12. 세마포어에서 내부변수를 RS라고 할때 세마포어 V()의 내부 코드를 쓰시오.
- RS = RS + 1;
wake_up();
13. 세마포어가 제대로 동작하지 않는 경우를 설명하시오.
- 프로세스가 세마포어를 사용하지 않고 바로 임계구역에 들어간 경우 임계구역을 보호할 수 없다.
P()를 두번 사용하여 wake_up 신호가 발생하지 않은 경우 프로세스 간의 동기화가 이루어지지 않아 세마포어 큐에서 대기하고 있는 프로세스들이 무한 루프에 빠진다.
P()와 V()를 반대로 사용하여 상호 배제가 보장되지 않은 경우 임계구역을 보호할 수 없다.
14. 세마포어의 내부코드도 타임아웃이 걸리면 문제가 발생할 수도 있다. 그래서 내부 코드는 무엇으로 보호받는가?
- 검사와 지정
15. 공유 자원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만 제공함으로써 자원을 보호하고 프로세스 간에 동기화를 시키는 것으로 세마포어의 단점을 해결하면서 임계구역 문제를 해결한 방식은 무엇인가?
- 모니터 방식
심화문제
1. 프로세스 간 통신을 통신 방향에 따라 분류하여 설명하시오.
- 양방향 통신 : 데이터를 동시에 양쪽방향으로 전송가능 (소켓통신)
반양방향 통신 : 데이터를 양쪽 방향으로 전송할 수 있지만 동시전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송가능 ( 무전기)
단방향 통신 : 데이터를 한쪽 방향으로만 전송할 수 있는 구조 (무전기)
2. 대기가 있는 통신과 대기가 없는 통신의 의미를 설명하고 적절한 예를 제시하시오.
- 대기가 있는 통신은 동기화를 지원하는 통신방식으로 수신측이 데이터가 도착할 때 까지 자동으로 대기 상태에 머물러 있다. 파이프와 소켓이 해당된다.
대기가 없는 통신은 동기화를 지원하지 않는 통신 방식으로 수신측은 바쁜대기를 통해 데이터가 도착했는지 여부를 확인한다. 전역변수와 파일이 해당된다.
3. 실생활의 예를 들어 임계구역 문제를 설명하시오.
- 믹서기라는 공유자원을 같이 사용하면 오렌지를 가는데 다른 재료가 투입되어 문제 발생
4. 다음 코드의 문제점을 설명하시오.
boolean lock = false; // 공유변수
프로세스 1 = 2
while (lock == true);
lock = true;
임계구역
lock = false;
- 상호 배제 문제 : 프로세스 1이 while문을 실행후에 임계구역에 프로세스가 없기때문에 무한루프를 나오는 중에 CPU시간을 모두 사용하여 (타임아웃)준비상태로 옮겨진다. 이때 문맥교환이 발생하고 프로세스 2가 실행상태로 바뀐다. 프로세스 2도 lock이 걸려있지 않기때문에 while문을 탈출하고 임계구역에 진입한다. 후에 서로 lock = ture를 걸고 둘다 임계구역에 진입한다.
5. 다음 코드의 문제점을 설명하시오.
int lock = 1; // 공유변수
프로세스 1
while(lock ==2 );
임계구역
lock = 2;
프로세스 2
while (lock == 1);
임계구역
lock = 1;
- 진행의 융통성 문제 : 프로세스의 우선순위에 상관없이 번갈아가며 임계구역에 진입한다. 프로세스 1은 프로세스 2가 임계구역에 진입 후에 나온다음에야 진입할 수 있음으로 프로세스 2가 프로세스 1을 방해하는 구조이다. 이를 경진된 동기화라고 한다.
6. 파일을 이용하여 Test라는 문자를 주고받는 코드를 작성하시오.
- 그림 5-38 파일을 이용한 통신 코드