본문 바로가기
🖥️ Computer Science

[쉽게 배우는 운영체제] ch.5 프로세스 동기화 - 연습 & 심화 문제

by GroovyArea 2022. 11. 4.

연습 문제

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)
    • 상태 변화를 살펴보기 위해 반복문을 통해 무한 실행하며 기다리는 것.
    • 데이터가 도착함을 알려주는 동기화를 통해 해결
    • 사용할 경우 운영 체제가 알아서 알려준다.
  1. 대기 O
    • 동기화 통신
    • 동기화를 지원하는 통신 방식
    • 데이터 도착까지 대기 상태
    • 파이프, 소켓
  2. 대기 X
    • 비동기화 통신
    • 데이터 수신쪽은 바쁜 대기 사용
    • 전역 변수, 파일

3. 실생활의 예를 들어 임계구역 문제를 설명

  • 영화관 동일 좌석 동시 예매 상황

4. 다음 코드의 문제점을 설명

심화문제 4번

  • 상호 배제 문제가 발생하는 전형적 예시
  • 두 개의 프로세스가 각각 while문을 실행하여 임계 구역에 진입하는 상황이다.

5. 다음 코드의 문제점을 설명

심화문제 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);
    }
}
반응형