5-1.[os] 프로세스 간 통신

프로세스 간 통신의 개념

  • 통신(IPC): 프로세스끼리 데이터를 주고받는 것
  • 컴퓨터 내에 있는 프로세스뿐만 아니라 네트워크로 연결된 다른 컴퓨터에 있는 프로세스와의 통신도 포함

image.png

프로세스 내부 데이터 통신:

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

프로세스 간 데이터 통신:

  • 같은 컴퓨터에 있는 여러 프로세스끼리 통신
  • 공용 파일 또는 운영체제가 제공하는 파이프를 사용하여 통신한다.

네트워크를 이용한 데이터 통신:

  • 여러 컴퓨터가 네트워크로 연결되어 있을 때
  • 프로세스는 소켓을 이용하여 데이터를 주고받음
  • 네트워킹: 소켓을 이용하는 프로세스 간 통신
  • 다른 컴퓨터에 있는 함수를 호출하여 통신하는 원격 프로시저 호출도 포함

프로세스 간 통신의 분류

통신 방향에 따른 분류

  • 방향 통신:

    • 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조
    • 일반적인 통신
    • 소켓 통신
  • 반양방향 통신:

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

    • 한쪽 방향으로만 데이터 전송할 수 있는 구조
    • ex) 전역 변수, 파이프

image.png

  • 전역 변수가 단방향 통신인 이유
  • 양방향으로 데이터 보내면 2개 중 하나는 지워짐
  • 양방향으로 하려면 전역 변수 2개

통신 구현 방식에 따른 분류

  • 전역 변수- 데이터를 받는 쪽에서는 상대방이 데이터를 언제 보낼지 모른다
  • 바쁜 대기(busy waiting):

    • 데이터 받는 쪽에서 반복적으로 전역변수 값 점검
    • 상태 변화를 보기 위해 반복문을 무한 실행하며 기다림
    • 구린 프로그램의 예
  • 동기화(synchronization):

    • 바쁜 대기를 하지 않아도 데이터가 도착했다고 운영체제가 알아서 알려준다
  • 대기가 있는 통신(blocked communication):
    • 동기화 O
    • 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태
  • 대기가 없는 통신(non-blocking communication)
    • 동기화 X
    • 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터가 도착했는지 여부를 직접 확인
    • = asynchronous communication

image.png

프로세스 간 통신의 종류

  1. 전역 변수를 이용한 통신
  • 공동으로 관리하는 메모리를 사용하여 데이터를 주고 받음
  • 직접적으로 관련이 있는 프로세스 간에 사용
  • 예) 부모 프로세스가 전역 변수를 선언한 후 자식 프로세스를 만들면 부모 프로세스와 자식 프로세스가 통신

image.png

  • 동기화 문제가 있음 - 동시에 읽고 쓰기 불가능

  • 전역 변수의 값이 변할 때까지 바쁜 대기를 돌면서 계속 주시


파일을 이용한 통신

  • 저장장치에 파일을 읽고 쓰는 코드
  • 열기, 쓰기, 읽기, 닫기

파일 열기

  • open()
  • 준비 단계
  • 파일이 있는지, 쓰기 권한이 있는지
  • 정상: fd를 준다
  • fd(file descriptor, 파일 기술자)
    • 파일에 접근할 수 있는 권한
    • 작업이 끝나면 fd를 돌려줌

파일 닫기

  • 저장장치의 데이터를 읽고 쓰는 것: 일반 프로세스와 입출력 프로세스 간의 통신

image.png

  • 부모 프로세스가 wait() 함수로 자식 프로세스가 끝날 때까지 기다렸다가 작업함

파이프를 이용한 통신

  • 파이프: 운영체제가 제공하는 동기화 통신 방식
  • 단방향 통신
  • 양방향 하려면 파이프 2개
  • A에서 읽고 있는 도중에 B가 쓰고 있으면 A가 대기
  • 쓰기가 완료되면 대기 상태가 풀려서 동기화가 이루어짐

image.png

이름 없는 파이프: 일반적 파이프, 부모, 형제 등 서로 관련있는 프로세스 간 통신

이름 있는 파이프: FIFO 특수 파일을 이용하여 서로 관련 없는 프로세스 간 통신


소켓을 이용한 통신

  • 네트워킹: 여러 컴퓨터에 있는프로세스 간 통신
  • 원격 프로시저 호출, 소켓

  • 프로시저 호출: 한 컴퓨터에 있는함수를 호출

  • 원격 프로시저 호출: 다른 컴퓨터에 있는함수를 호출

image.png

  • 바쁜 대기를 하지 않아도 됨
  • 소켓은 하나만 사용해도 양방향 통신이 가능

  • 네트워크 프로그래밍을 흔히 소켓 프로그래밍이라고 부르는 이유는 네트워킹의 기본이 소켓이기 때문


정리

  • 프로세스 간에 데이테를 주고받는 행위는 읽기쓰기 연산으로 단순화
  • 부모-자식 관계로 연결되어 있는 프로세스끼리는 전역 변수, 파일, 이름 없는 파이프등 을 이용하여 통신
  • 서로 다른 시스템에 있는 프로세스끼리는 소켓을 이용하여 통신
  • 동기화를 지원하는 프로세스 간 통신에는 open()과 close() 함수가 사용됨
  • 전역 변수는 동기화 기능이 없기 때문에 open()과 close() 함수를 사용할 필요가 없음

image.png

Did you find this article valuable?

Support Software Engineer at Your Service by becoming a sponsor. Any amount is appreciated!