티스토리 뷰

CS/OS

프로세스 간 통신(IPC)

bool-flower 2022. 8. 8. 21:33

인프런에 무료로 공개되어 있는 주니온님의 운영체제 공룡책 강의 내용을 정리한 글입니다. 수강해보시는 걸 추천드려용

프로세스 간 통신(IPC)


여러 프로세스가 동시에 실행되면서 서로 협력해야 하는 경우가 생긴다. 이를 위해 데이터를 공유하거나 메시지를 주고받는 것프로세스 통신이라 한다.

IPC의 방식

  • 공유 메모리 (shared memory) 방식
  • 메시지 전송 (message passing) 방식

(a) 공유 메모리 (b) 메시지 전송

Producer-Consumer 문제

생산자는 정보를 생성하고, 소비자는 정보를 소비하는 모델.

공유 메모리 방식으로 해결

두 개의 프로세스가 동시에 실행되면서 cpu를 번갈아가면서 선점할 때, buffer를 공유메모리로 만들어 통신하는 방식

 

  • 생산자는 buffer를 채우고 소비자는 buffer를 비움.
  • 만약 buffer가 가득 차면 생산자는 wait
  • buffer가 비어있으면 소비자가 wait

프로세스별 private 한 메모리를 보장해야 하기 때문에, 둘 모두가 접근할 수 있는 메모리를 shared memory로 OS가 관리한다. 배열을 통해 buffer를 생성하고 in, out 변수를 통해 buffer 상의 읽은 위치 또는 채운 위치를 저장한다.

메시지 전송 방식으로 해결

메모리 공유 방식은 애플리케이션을 만드는 사람이 직접 명시해서 작업해줘야 한다. 이러한 문제를 OS가 알아서 해결해주는 메시지 패싱 방식을 사용한다. 메시지 패싱에서는 send()와 receive() 두 시스템 콜만 사용할 수 있게 한다.

 

Communication Link 구현 방식

direct 방식

 

  • 각 프로세스가 통신하고자 하는 상대방을 아는 것, 누가 누구한테 주고받는지 명시
  • 이 경우 communication link가 자동으로 생성되는 것
  • 두 프로세스 간에 링크는 하나밖에 있을 수 없음

indirect 방식

 

  • 중간에 매개체가 있고 그 매개체를 통해 통신하는 것, 이 매체를 mailboxes 또는 ports라고 함
  • 메시지를 보내고 받는 저장소 존재, 두 프로세스 간에 공유하는 저장소가 있을 때 Communication link가 생기는 것
  • 두 개 이상의 프로세스 간에 통신이 가능, 여러 개의 링크도 가능

OS 입장에서는 프로세스가 새로운 저장소를 생성, 삭제, 메시지 보내기, 받기가 가능하게 하면 된다.

 

blocking과 non-blocking

 

  • blocking send - 메시지를 다 받을 때까지 sender process가 block 되어 있는 것, 동기화
  • non-blocking send - sender process가 메시지를 보낸 뒤, 다른 일을 계속할 수 있는 것, 비동기화

blocking receive, non blocking receive도 마찬가지이다.

IPC의 실제


POSIX Shared Memory (공유 메모리 방식)

memory-mapped files을 이용한다. 파일을 열 때 memory에 영역을 잡는 것이다.

Pipes (메시지 전송 방식)

Ordinary pipe

  • 부모 자식 관계
  • 양방향 통신을 위해 파이프가 두 개 필요

Named pipe

  • pipe에 이름을 지음
  • 부모 자식 관계가 없어도 됨

클라이언트-서버 시스템 통신

Socket

ip address와 port를 묶어서 네트워크 상에서 통신할 컴퓨터와 파이프를 특정한다. 이를 소켓이라 한다.

RPC (Remote Procedure Calls)

네트워크 시스템에서 프로세스 간의 원격호출을 추상화한 것이다. 클라이언트 측에 있는 stub을 통해 서버와 통신할 때 객체 직렬화를 하여서 보낸다. 이를 marshals라고 하는데, 이 marshals 된 데이터를 주고받는 것이다. IPC의 확장 개념이라고 볼 수 있다.

'CS > OS' 카테고리의 다른 글

페이징과 스와핑  (0) 2022.08.18
스토리지와 입출력  (0) 2022.08.13
주 메모리  (0) 2022.08.13
프로세스  (0) 2022.08.08
CPU 스케쥴  (0) 2022.08.07
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday