쉽게 배우는 운영체제 Chapter05 프로세스 동기화

Eunkyung·2021년 10월 24일
0

OS

목록 보기
6/9

1. 프로세스 간 통신

1.1 프로세스 간 통신 통신(IPC)

프로세스가 다른 프로세스와 데이터를 주고받음

프로세스 간 통신의 종류

  1. 프로세스 내부 데이터 통신
    하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우, 스레드가 전역 변수나 파일을 이용하여 데이터를 주고받는 통신이다.

  2. 프로세스 간 데이터 통신
    같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로, 공용 파일이나 파이프를 사용하여 통신한다.

  3. 네트워크를 이용한 데이터 통신
    여러 컴퓨터가 네트워크로 연결되어 있을 때 소켓을 이용하여 데이터를 주고받는다.

1.2 프로세스 간 통신의 분류

  1. 통신 방향에 따른 분류
  • 양방향 통신
    데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조
    ex) 소켓 통신

  • 반양방향 통신
    데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 구조
    ex) 무전기

  • 단방향 통신
    모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있는 구조
    ex) 전역 변수와 파이프

  1. 통신 구현 방식에 따른 분류
  • 대기가 있는 통신
    동기화를 지원하는 통신 방식으로, 데이터를 받는 쪽은 데이터가 도착할 때까지 자동적으로 대기 상태에 머물러 있다.
    ex) 파이프, 소켓

  • 대기가 없는 통신
    동기화를 지원하지 않는 통신 방식으로, 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터 도착 여부를 직접 확인한다.
    ex) 전역 변수, 파일

1.3 프로세스 간 통신의 종류

  • 전역 변수를 이용한 통신

    • 공동으로 관리하는 메모리를 사용하여 데이터를 주고받는 것
    • 데이터를 보내는 쪽에서 전역 변수나 파일에 값을 쓰고, 데이터를 받는 쪽에서 전역 변수의 값을 읽는다.
  • 파일을 이용한 통신

    • 파일 열기
    • 읽기 또는 쓰기 연산
    • 파일 닫기
  • 파이프를 이용한 통신

    • 운영체제가 제공하는 동기화 통신 방식으로, 단뱡향 통신이다.
    • 양방향 통신을 위해서 2개의 파이프가 필요하다.
    • 이름 없는 파이프 : 부모-자식 프로세스와 같이 서로 관련있는 프로세스 간 통신에 사용
    • 이름 있는 파이프 : 독립적인 프로세스 간 통신에 사용
  • 소켓을 이용한 통신

    • 여러 컴퓨터에 있는 프로세스끼리 통신하는 방법
    • 소켓 바인딩 후 쓰기 연산을 하면 데이터가 전송되고, 읽기 연산을 하면 데이터를 받을 수 있다.

2. 공유 자원과 임계구역

2.1 공유 자원의 접근

공유 자원은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있다.
2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓸 때 경쟁 조건이 발생할 수 있는데, 이 때 공유 자원 접근 순서에 따라 실행 결과가 달라질 수 있다.

2.2 임계구역

공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램 영역으로 임계구역에서는 프로세스들이 동시에 작업하면 안된다.
어떤 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역 밖에서 기다려야 하며 임계구역의 프로세스가 나와야 들어갈 수 있다.

2.3 생산자-소비자 문제

생산자 프로세스와 소비자 프로세스가 서로 독립적으로 작업을 하는데 전역 변수에 접근하는 타이밍을 서로 맞추지 않을 경우 문제가 발생한다.

2.4 임계구역 해결 조건

  • 상호 배제
    한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없다.

  • 한정 대기
    어떤 프로세스도 무한 대기하지 않고 임계구역에 진입해야 한다.

  • 진행의 융통성
    한 프로세스가 다른 프로세스의 진행을 방해해서는 안된다.

3. 임계구역 해결 방법

임계구역 문제를 해결하는 단순한 방법은 잠금을 이용하여 잠금 해제 시 동기화 신호를 보내는 것이다.

3.1 임계구역 해결 조건을 고려한 코드 설계

  1. 상호 배제 문제

    1. 공유변수 lock의 초기값은 false로 프로세스 p1과 p2는 임계구역에 진입하기 전에 잠금 여부를 확인한다.
    2. 만약 잠겨 있다면 잠금이 해제될 때까지 무한 루프를 돌면서 기다린다.
    3. 임계구역에 있는 프로세스가 작업을 마치고 잠금을 해제하면 다른 프로세스에 동기화 신호를 보낸다.
    4. 잠금이 풀려 새로 임계구역에 진입하는 프로세스는 다른 프로세스가 진입하지 못하도록 잠금을 걸고 작업을 하고 작업이 종료되면 잠금을 해제한다.

만약, 잠금을 걸기 전에 프로세스 p1이 타임아웃되어 프로세스 p2가 실행 상태로 바뀐다면 상호 배제 조건을 충족하지 못한다.
1. 프로세스 p1이 잠금을 걸기 전이기 때문에 프로세스 p2가 임계구역에 진입한다.
2. 프로세스 p1이 lock=true;문을 실행하여 임계구역에 잠금을 걸고 진입한다.
3. 프로세스 p2도 lock=true;문을 실행하여 임계구역에 잠금을 걸고 진입하면 동시에 임계구역에 진입하게 된다.

  1. 한정 대기 문제

출처

profile
꾸준히 하자

0개의 댓글