P287
연습문제
✔ 프로세스 간 통신에서 데이터를 양방향으로 전송 가능하지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 통신 방식은 무엇인가?
// 반양방향 통신
✔ 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 무엇이라 하는가?
// 바쁜 대기
✔ 프로세스 간 통신에서 대기가 없는 통신과 대기가 있는 통신의 예를 각각 제시하시오.
// 대기가 없는 통신 : 전역 변수, 파일
대기가 있는 통신 : 파이프, 소켓
✔ 파이프를 이용하여 통신할 때 파이프를 2개 사용하는 이유는 무엇인가?
// 파이프는 단방향 통신으로 두 프로세스 간에 통신할 때 한 파이프는 한 쪽 방향으로만 데이터를 전송할 수 있습니다.
그래서 파이프를 하나 더 추가하여야 양측에서 데이터를 전송할 수 있습니다.
✔ 공유 자원을 병행적으로 읽거나 쓰는 상황을 무엇이라 하는가?
// 경쟁 조건
✔ 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 포로그램의 영역은 무엇인가?
// 임계 구역
✔ 임계구역 해결 조건 중 한 프로세스가 임계구역에 들어갔을 때 다른 프로세스는 임계구역에 들어갈 수 없는 조건을 무엇이라 하는가?
// 상호 배제
✔ 임계구역 해결 조건 중 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다는 조건을 무엇이라 하는가?
// 진행의 융통성
✔ 임계구역 문제를 하드웨어적으로 해결한 방식으로, 하드웨어의 지원을 받아 명령어를 실행하는 도중에 타임아웃이 걸리지 않도록 하는 방식을 무엇이라 하는가?
// 검사와 지정
✔ 세마포어의 Semaphore(n)에서 n은 무엇을 가리키는가?
// 현재 사용 가능한 자원의 수
✔ 세마포어에서 내부 변수를 RS라고 할 때 세마포어 P()의 내부 코드를 쓰시오.
if (RS > 0 )
RS = RS -1;
else
block();
✔ 세마포어에서 내부 변수를 RS라고 할 때 세마포어 V()의 내부 코드를 쓰시오.
RS = RS + 1;
wake_up();
✔ 세마포어가 제대로 작동하지 않는 경우를 설명하시오.
// 1) 세마포어 P()를 두 번 사용하여 wake_up 신호가 발생하지 않은 경
2) 세마포어를 사용하지 않고 임계 구역에 접근하는 경우
3) 세마포어 P()와 V()의 작동 순서가 바뀐 경우
✔ 세마포어의 내부 코드도 타임아웃이 걸리면 문제가 발생할 수도 있다. 그래서 내부 코드는 무엇으로 보호받는가?
// 검사와 지정
✔ 공유 자원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만 제공함으로써 자원을 보호하고 프로세스 간에 동기화를 시키는 것으로, 세마포어의 단점을 해결하면서 임계 구역 문제를 해결한 방식은 무엇인가?
// 모니터
심화 문제
✔ 프로세스 간 통신을 통신 방향에 따라 분류하여 설명하시오.
// 단방향 통신 - 데이터를 한 방향으로만 전송할 수 있음 (전역 변수, 파일, 파이프)
반방향 통신 - 데이터를 양쪽 방향으로 전송할 수 있지만, 동시 전송은 할 수 없음 (무전기)
양방향 통신 - 데이터를 양쪽 방향으로 동시에 전송할 수 있음. (소켓)
✔ 대기가 있는 통신과 대기가 없는 통신의 의미를 설명하고 적절한 예를 제시하시오.
// 대기가 있는 통신은 동기화를 지원하는 통신 방식입니다. (소켓, 파이프)
데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기상태에 머물러 있습니다.
대기가 없는 통신은 동기화를 지원하지 않는 통신 방식입니다. (전역 변수, 파일)
데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터가 도착했는지 여부를 직접 확인합니다.
✔ 실생활의 예를 들어 임계 구역 문제를 설명하시오.
// 온라인 쇼핑몰의 경우, 재고를 계산하고 있는 도중에 손님이 상품을 사는 경우가 있는데 이 때 재고를 잘 못 계산하면 판매에 어려움이 있을 수 있습니다.
✔ 다음 코드의 문제점을 설명하시오.
// 프로세스 P1이 while 문을 통과하고 타임 아웃 되어 프로세스 P2도 while을 통과하는 경우 임계 구역을 동시에 접근하게 된다.
✔ 다음 코드의 문제점을 설명하시오.
// 프로세스 P1이 임계 구역에 접근하고 lock의 값이 2로 변합니다. 그리고 프로세스 P2가 현재 실행될 필요가 없어 실행되지 않게 되면 프로세스 P1은 연속적으로 임계 구역에 접근할 수 없는 진행의 융통성 문제가 있습니다.
✔ 파일을 이용하여 Test라는 문자를 주고받는 코드를 작성하시오.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
void main()
{
int pid, fd;
char buf[5];
fd = open("com.txt", O_RDWR); // 파일 기술자 생성
pid = fork();
if (pid < 0 || fd < 0)
exit(-1);
else if (pid == 0)
{
write(fd, "Test", 5); // Test 문자 쓰기
close(fd); // 파일 기술자 반납
exit(0);
}
else
{
wait(0); // 자식 프로세스 대기
lseek(fd, 0, SEEK_SET); //파일 기술자를 0번 위치로 이동
read(fd, buf, 5); // buf에 파일의 5글자 읽기
printf("%s", buf);
close(fd); // 파일 기술자 반납
exit(0);
}
}
// fork() 이전에 파일을 open() 하면 생성된 파일 기술자도 함께 자식 프로세스에게 상속됩니다.
그렇기 때문에 파일 기술자 반납이 자식에서 1번 부모에서 1번 총 2번 일어나게 됩니다.
[쉽게 배우는 운영체제] 6장 연습문제 및 심화문제 - 정리
'CS > OS' 카테고리의 다른 글
[쉽게 배우는 운영체제] 6장 연습문제 및 심화문제 - 정리 (1) | 2022.10.14 |
---|---|
[쉽게 배우는 운영체제] 4장 연습문제 및 심화문제 - 정리 (1) | 2022.10.11 |
[쉽게 배우는 운영체제] 3장 연습문제 및 심화문제 - 정리 (0) | 2022.10.11 |
[쉽게 배우는 운영체제] 2장 연습문제 및 심화문제 - 정리 (0) | 2022.10.10 |
[쉽게 배우는 운영체제] 1장 연습문제 및 심화문제 - 정리 (0) | 2022.10.09 |