연습 문제
1. 프로세스 간 통신에서 데이터를 양방향으로 전송 가능하지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 통신 방식?
- 반양방향 통신
2. 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것?
- 바쁜 대기 (busy waiting)
- 자원 낭비의 예시
3. 프로세스 간 통신에서 대기가 없는 통신과 대기가 있는 통신의 예
- 대기 x : 전역 변수, 파일 방식
- 대기 o : 파이프, 소켓 방식
4. 파이프를 이용하영 통신할 때 파이프를 2개 사용하는 이유?
- 양방향 통신을 하기 위함이다.
- 서로 다른 프로세스가 각각 하나의 파이프를 읽고 쓴다.
5. 공유 자원을 병행적으로 읽거나 쓰는 상황?
- 경쟁 조건 (race condition)
6. 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
- 임계 구역 (critical section)
7. 임계구역 해결 조건 중 한 프로세스가 임계구역에 들어갔을 때 다른 프로세스는 임계구역에 들어갈 수 없는 조건?
- 상호 배제 (mutual exclusion)
- 임계구역에는 한 번에 하나의 프로세스만 존재 가능.
8. 임계 구역 해결 조건 중 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다는 조건?
- 진행의 융통성 (progress flexibility)
9. 임계 구역 문제를 하드웨어적으로 해결한 방식으로, 하드웨어의 지원을 받아 명령어를 실행하는 도중에 타임아웃이 걸리지 않도록 하는 방식?
- 검사와 지정 (test - and - set)
- 편리한 방식이지만 busy wait을 사용하므로 자원의 낭비가 있다.
10. 세마포어의 Semaphore(n)에서 n은 무엇을 가리키는가?
- 공유 가능한 자원의 개수
11. 세마포어에서 내부 변수를 RS라고 할 때 세마포어 P()의 내부 코드를 쓰시오
if(RS>) {
then RS = RS - 1;
} else {
block();
}
12. 세마포어에서 내부 변수를 RS라고 할 때 세마포어 V()의 내부 코드를 쓰시오
RS = RS + 1;
wake_up();
13. 세마포어가 제대로 작동하지 않는 경우를 설명
- 프로세스가 세마포어를 사용하지 않고 임계구역에 바로 들어간 경우
- P()를 두번 이상 사용하여 wake_up 신호가 미발생한 경우,
프로세스 간 동기화가 이뤄지지 않으므로 세마포어의 큐에서 대기하는 프로세스들은 무한 대기 상태가 된다.
14. 세마포어의 내부 코드도 타임아웃이 걸리면 문제가 발생할 수도 있다. 그래서 내부 코드는 무엇으로 보호받는가?
- P(), V()의 내부적 코드는 검사와 지정을 사용해서 분리 실행을 방지한다.
15. 공유 자원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만 제공함으로써 자원을 보호하고 프로세스 간 동기화를 시키는 것으로, 세마포어의 단점을 해결하면서 임계구역 문제를 해결한 방식?
- 모니터
심화 문제
1. 프로세스 간 통신을 통신 방향에 따라 분류하여 설명
- 단방향 통신
- 한 방향으로만 데이터 전송 가능.
- 전역 변수와 파이프
- 반양방향 통신
- 양방향으로 전송 가능
- 동시 전송 불가
- 무전기
- 양방향 통신
- 데이터를 동시에 양방향으로 전송 가능
- 일반적인 통신 구조
2. 대기가 있는 통신과 대기가 없는 통신의 의미를 설명하고 적절한 예를 제시하시오.
- 바쁜 대기 (busy waiting)
- 상태 변화를 살펴보기 위해 반복문을 통해 무한 실행하며 기다리는 것.
- 데이터가 도착함을 알려주는 동기화를 통해 해결
- 사용할 경우 운영 체제가 알아서 알려준다.
- 대기 O
- 동기화 통신
- 동기화를 지원하는 통신 방식
- 데이터 도착까지 대기 상태
- 파이프, 소켓
- 대기 X
- 비동기화 통신
- 데이터 수신쪽은 바쁜 대기 사용
- 전역 변수, 파일
3. 실생활의 예를 들어 임계구역 문제를 설명
- 영화관 동일 좌석 동시 예매 상황
4. 다음 코드의 문제점을 설명
- 상호 배제 문제가 발생하는 전형적 예시
- 두 개의 프로세스가 각각 while문을 실행하여 임계 구역에 진입하는 상황이다.
5. 다음 코드의 문제점을 설명
- 진행의 융통성 문제가 발생하는 전형적 예시
- 하나의 프로세스가 임계구역에 두번 진입하고 싶어도 그러지 못한다.
- 우선순위의 의미가 없다.
6. 파일을 이용해 Test라는 문자를 주고 받는 코드 작성
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
void main() {
int pid, fd;
char buf[5];
fd = open("test.txt", O_RDWR);
pid = fork();
if (pid < 0 || fd < 0)
exit(-1);
else if (pid == 0)
{
write(fd, "Test", 5);
close(fd);
exit(0);
}
else
{
wait(0);
lseek(fd, 0, SEEK_SET);
read(fd, buf, 5);
printf("%s", buf);
close(fd);
exit(0);
}
}
반응형
'🖥️ Computer Science' 카테고리의 다른 글
[쉽게 배우는 운영체제] ch.7 물리 메모리 관리 - 연습 & 심화 문제 (1) | 2022.11.06 |
---|---|
[쉽게 배우는 운영체제] ch.6 프로세스 동기화 - 연습 & 심화 문제 (0) | 2022.11.06 |
[쉽게 배우는 운영체제] ch.4 CPU 스케줄링 - 연습 & 심화 문제 (0) | 2022.11.04 |
[쉽게 배우는 운영체제] ch.3 프로세스와 스레드 - 연습 & 심화 문제 (0) | 2022.11.02 |
[쉽게 배우는 운영체제] ch.2 컴퓨터의 구조와 성능 - 연습 & 심화 문제 (0) | 2022.11.01 |