CS 스터디/운영체제

[프로세스 동기화] 1. 프로세스 간 통신

doobi 2023. 8. 2. 02:21

 


1. 프로세스 간 통신의 개념

 

프로세스는 시스템 내에서 독립적으로 실행되기도 하고 데이터를 주고받으며 협업하기도 한다.

프로세스가 다른 프로세스와 데이터를 주고 받는 프로세스 간 통신을 IPC(Inter Process Communication) 라고 한다. 

프로세스 간 통신은 동시에 실행되는 프로세스끼리 데이터를 주고받는 작업이다. 
함수 호출의 경우 데이터를 주고받는 의미에서 통신이라고 생각 할 수 있지만, 함수는 하나의 프로세스 내에서 순차적으로 실행되기 때문에 통신이라고 부르지 않는다. 

 

프로세스 간 통신(IPC)의 종류

 

  •  프로세스 내부 데이터 통신
    : 하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우의 통신. 전역 변수나 파일을 이용
  • 프로세스 간 데이터 통신
    : 같은 컴퓨터에 있는 여러 프로세스끼리 통신. 공용 파일 또는 os가 제공하는 파이프를 이용
  • 네트워크를 이용한 데이터 통신
    : 여러 컴퓨터가 네트워크로 연결되어 있을 때도 통신이 가능한데, 이 경우 소켓을 이용하여 통신. (= 네트워킹)

2. 프로세스 간 통신의 분류

 

통신 방향에 따른 분류

데이터가 전송되는 방향에 따라 나뉨

 

  • 양방향 통신
    : 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조. 일반적인 통신은 모두 양방향 통신이다. 
  • 반양방향 통신
    : 데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송 가능
  • 단방향 통신
    : 모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있는 구조

 

통신 구현 방식에 따른 분류

 

전역 변수를 사용하는 통신 방식의 문제점은 데이터를 받는 쪽에서 언제 데이터가 올 지 알 수 없다는 점이다. 

따라서 데이터를 받는 쪽에서 반복적으로 전역 변수의 값을 점검하는 수 밖에 없다. 

이렇게 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 바쁜 대기(busy waiting)이라고 하고,

시스템 차원에서 큰 자원 낭비이다. 

 

바쁜 대기 문제를 해결하기 위해서는 데이터가 도착했음을 알려주는 동기화(Synchronization)를 사용.

이 동기화 기능의 유무에 따라서 구분됨.

 

  • 대기가 있는 통신
    : 동기화를 지원하는 통신. 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있다.
  • 대기가 없는 통신
    ; 동기화를 지원하지 않는 통신. 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터 도착 여부를 직접 확인

 

프로세스 간 통신의 분류 예시

 

분류 방식 종류
통신 방향에 따른 분류 양방향 통신 일반적인 통신, 소켓
반양방향 통신 무전기
단방향 통신 전역 변수, 파일, 파이프
통신 구현 방식에 따른 분류 대기가 있는 통신(동기화) 파이프, 소켓
대기가 없는 통신(비동기화) 전역 변수, 파일

 


 

3. 프로세스 간 통신의 종류

프로세스 간 데이터를 주고 받는 행위는 읽기와 쓰기 연산으로 단순화 할 수 있다. 

부모-자식 관계로 연결되어 있는 프로세스끼리는 전역 변수, 파일, 이름 없는 파이프 이용

서로 독립적인 프로세스끼리는 이름 있는 파이프를 이용하여 통신

 

전역 변수를 이용한 통신

 

전역 변수를 이용한 통신은 공동으로 관리하는 메모리를 사용하여 데이터를 주고받는다. 

데이터를 보내는 쪽에서 전역 변수나 파일에 값을 쓰고, 

데이터를 받는 쪽에서 전역 변수의 값을 읽는다.

주로 직접적으로 관련이 있는 프로세스 간에 사용한다.

동기화 X , 바쁜 대기  해야함

 

파일을 이용한 통신

 

크게 open(), write(), close() 세 부분으로 구성되어 있다. 

  • open()
    : 파일이 있는지 확인, 파일 쓰기 권한 확인 -> fd(file descriptor) 반환
    파일을 연 다음에는 fd를 통해서만 접근이 가능하고, 작업이 다 끝나면 fd를 돌려줘야 한다. 
  • write() / read()
    : 파일에 쓰거나 읽는 함수 
  • close()
    : 파일 닫는 함수

동기화 X, 부모프로세스가 wait() 함수 이용

 

 

파이프를 이용한 통신

 

운영체제가 제공하는 동기화 통신 방식으로, 파일 입출력과 같이 open(), close() 사용

단방향 통신이기 때문에 파이프로 양방향 통신을 하려면 파이프 2개를 이용해야 한다.

동기화 지원, 바쁜 대기X

[동기화 방법]

프로세스 B가 파이프 1에 대해 읽기 연산(데이터 받음)을 수행했는데 프로세스 A가 파이프 1에 대해 아직 쓰기 연산을 하지 않았다면 프로세스 B는 대기 상태가 된다. 이런 대기 상태는 프로세스 A가 파이프 1에 데이터를 쓰는 순간 자동으로 풀려 동기화가 이루어짐. 

 

  • 이름 없는 파이프 : 일반적 파이프, 서로 관련 있는 프로세스 간 통신에 사용된다.
  • 이름 있는 파이프: FIFO 라 불리는 특수 파일을 이용하며 서로 관련 없는 프로세스 간 통신에 사용된다.

 

소켓을 이용한 통신

 

위 통신들은 한 컴퓨터 내에서의 프로세스 간 통신이다. 

여러 컴퓨터끼리의 통신, 즉 네트워킹 상황에서는  원격 프로시저 호출이나 소켓을 이용

동기화 지원

파이프와 달리 소켓은  하나만 사용해도 양방향 통신이 가능

 

 

 

출처 : 쉽게 배우는 운영체제