### 연습문제 ###
(1) 프로세스 간 통신에서 데이터를 양방향으로 전송 가능하지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 통신 방식은 무엇인가?
반 양방향 통신
(2) 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 무엇이라 하는가?
바쁜 대기(busy waiting)
(3) 프로세스 간 통신에서 대기가 없는 통신과 대기가 있는 통신의 예를 각각 제시하시오.
대기가 없는 통신
- 대기가 없어 프로세스가 스스로 반복문을 통해 바쁜 대기를 해주어야 하는 통신이다.
- 비동기 통신이라 프로세스가 스스로 동기화를 해야한다.
- 전역변수, 파일
대기가 있는 통신
- 운영체제에서 대기와 동기화를 지원해주는 통신이다.
- 파이프, 소켓
(4) 파이프를 이용하여 통신할 때 파이프를 2개 사용하는 이유는 무엇인가?
단방향 통신인 파이프를 2개 사용하면 양방향 통신을 할 수 있다.
(5) 공유 자원을 병행적으로 읽거나 쓰는 상황을 무엇이라 하는가?
경쟁 조건(race condition)
(6) 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역은 무엇인가?
임계구역(critical section)
(7) 임계구역 해결조건 중 한 프로세스가 임계구역에 들어갔을 때 다른 프로세스는 임계구역에 들어갈 수 없는 조건을 무엇이라 하는가?
상호배제(mutual exclusion)
(8) 임계구역 해결조건 중 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다는 조건을 무엇이라 하는가?
진행의 융통성(progress flexibility)
(9) 임계구역 문제를 하드웨어적으로 해결한 방식으로, 하드웨어의 지원을 받아 명령어를 실행하는 도중에 타임아웃이 걸리지 않도록 하는 방식을 무엇이라 하는가?
검사와 지정(test and set)
(10) 세마포어의 Semaphore(n)에서 n은 무엇을 가리키는가?
사용할 수 있는 자원의 수
(11) 세마포어에서 내부 변수를 RS라고 할 때 세마포어 P()의 내부 코드를 쓰시오.
P() {
if(RS > 0) RS--;
else block();
}
(12) 세마포어에서 내부 변수를 RS라고 할 때 세마포어 V()의 내부 코드를 쓰시오.
V() {
RS++;
wake_up();
}
(13) 세마포어가 제대로 작동하지 않는 경우를 설명하시오.
사용자가 세마포어 코드를 직접 구현하면 실수할 확률이 있다. 이를 방지하기 위해 임계구역을 구현한 코드를 숨기고 사용을 위한 인터페이스만 제공해 내부적으로 알아서 처리하는 방식인 '모니터링'을 사용한다.
(14) 세마포어의 내부 코드도 타임아웃이 걸리면 문제가 발생할 수도 있다. 그래서 내부 코드는 무엇으로 보호받는가?
하드웨어적으로 원자성을 유지할 수 있도록 검사와 지정 방식을 사용한다.
(15) 공유 자원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만 제공함으로써 자원을 보호하고 프로세스 간에 동기화를 시키는 것으로, 세마포어의 단점을 해결하면서 임계구역 문제를 해결한 방식은 무엇인가?
모니터링
### 심화문제 ###
(1) 프로세스 간 통신을 통신 방향에 따라 분류하여 설명하시오.
양방향 통신
- 프로세스간에 동시에 데이터를 주고받을 수 있다.
- ex) 소켓
단방향 통신
- 프로세스간에 한 번에 한 방향으로의 데이터 전송만 가능하다.
- ex) 전역변수, 파일
(2) 대기가 있는 통신과 대기가 없는 통신의 의미를 설명하고 적절한 예를 제시하시오.
대기가 없는 통신
- 대기가 없어 프로세스가 스스로 반복문을 통해 바쁜 대기를 해주어야 하는 통신이다.
- 비동기 통신이라 프로세스가 스스로 동기화를 해야한다.
- 전역변수, 파일
대기가 있는 통신
- 운영체제에서 대기와 동기화를 지원해주는 통신이다.
- 파이프, 소켓
(3) 실생활의 예를 들어 임계구역 문제를 설명하시오.
대출계좌가 있는데 두 사용자가 동시에 접근한다. 한 명은 100원을 상환, 다른 한 명은 50원을 빌리려한다.
프로세스1
money = account.getMoney();
money += 100;
account.setMoney(money);
프로세스2
money = account.getMoney();
money -= 50;
account.setMoney(money);
프로세스1의 라인1이 실행되고 타임아웃이 되어 프로세스2가 라인1을 실행한다면? 이후에 누가 먼저 저장하는지에 따라 마지막에 저장한 값으로 바뀔 것이다.(-50 혹은 + 100)
실제로 잔액은 +50이 되어야하는데 임계구역을 보호하지 못해 잘못된 데이터가 입력된 상황이다.
(4) 다음 코드의 문제점을 설명하시오
프로세스1
while(lock==true);
lock = true;
//임계구역
lock = false;
프로세스2
while(lock==true);
lock = true;
//임계구역
lock = false;
lock이 false가 된 후 한 프로세스가 while(lock==true);를 탈출하고 타임아웃이 나고 또다른 프로세스도 while(lock==true);를 탈출한다면? 임계구역에 동시에 접근하게되어 상호배제의 원칙이 깨지게된다.
(5) 다음 코드의 문제점을 설명하시오
프로세스1
while(lock==2);
//임계구역
lock = 2;
프로세스2
while(lock==1);
//임계구역
lock = 1;
다음 상황을 가정해보자. 프로세스1이 임계구역 코드 실행을 마치고 lock을 2로 바꾸었다. 하지만 프로세스2는 임계구역 진입을 실행할 필요가 없다. 하지만 프로세스1은 이어서 또다시 임계구역에 접근하려고한다. 이 때 프로세스2가 임계구역을 실행하고 lock을 1로 바꿔주기 전까지는 임계구역에 진입할 수가 없다. 한 프로세스가 다른 프로세스의 임계구역 진입을 방해하는 것이다. 임계구역이 비어있을 때는 어떤 프로세스도 진행할 수 있어야 하는 '진행의 융통성' 원칙이 위배된 경우다.
(6) 파일을 이용하여 Test라는 문자를 주고받는 코드를 작성하시오.
프로세스1(전송, 쓰기)
int main()
{
int fd;
fd = open("file.txt", 0_WR);
write(fd, "Test", 5);
fd.close();
return 0;
}
프로세스2(수신, 읽기)
int main()
{
int fd;
char buffer[5];
fd = open("file.txt", 0_RD);
lseek(fd, 0, SEEK_SET);
read(fd, buffer, 5);
close(fd);
printf("%s", buffer);
return 0;
}
'CS > 운영체제' 카테고리의 다른 글
(운영체제) 7 - 물리 메모리 관리 연습문제 (0) | 2020.05.15 |
---|---|
(운영체제) 6 - 교착 상태(데드락) 연습문제 (0) | 2020.05.15 |
(운영체제) 4 - CPU 스케줄링 연습문제 (0) | 2020.05.15 |
(운영체제) 3 - 프로세스와 스레드 연습문제 (0) | 2020.05.15 |
(운영체제) 2 - 컴퓨터의 구조와 성능 향상 연습문제 (0) | 2020.05.15 |