IPC

박민서·2023년 7월 10일
0

운영체제

목록 보기
1/4

개념

프로세스 간 통신 (=Inter Process Communication)

  • 즉, 프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법을 뜻함
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없기 때문
  • 커널 영역에서 IPC 설비를 제공함



주요 IPC 방식

PIPE (파이프)

  • 파이프는 두 개의 프로세스를 연결함 (한 프로세스는 데이터를 쓰기만, 나머지 프로세스는 읽기만 함)
  • FIFO 구조로 동작함
  • 부모(write)-자식(read) 간의 단방향(반이중) 통신으로 자주 사용함
  • 만약 양방향(전이중) 통신을 하고 싶으면 두 개의 파이프를 만들어야 함
  • 한 프로세스에서 read/write 작업이 끝나기 전에는 다른 프로세스에서 작업을 할 수 없음
  • pipe 함수로 파이프를 생성할 수 있음
  • 간단하지만, 전이중 통신을 하려는 경우 구현이 복잡해지고 버퍼가 상대적으로 작기 때문에 overflow 될 확률이 높음


Named PIPE (지명 파이프)

  • PIPE와 달리 부모-자식 관계가 아닌 서로 다른 프로세스들끼리 통신이 가능함 (단, 통신할 PIPE의 이름이 존재하고, 두 프로세스가 PIPE의 이름을 알아야 함)
  • PIPE와 마찬가지로 FIFO 구조로 동작하며, 반이중 통신임
  • mkfifo or mknod 함수로 이름이 있는 파이프를 생성할 수 있음


Message Queue (메시지 큐)

  • 큐에 있는 데이터에 번호를 붙여 여러 개의 프로세스가 데이터를 읽고 쓸 수 있게 함 (메시지큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간!)
  • 입출력 방식은 PIPE와 동일함 (반이중 통신, FIFO 구조)
  • 각각의 데이터를 구조체 모양으로 큐 안에 저장함


Shared Memory (공유 메모리)

  • 프로세스 간 메모리 영역을 공유해서 사용할 수 있도록 허용함
  • 공유 메모리 정보들은 구조체에 의해 관리됨
  • 중개자 없이 곧바로 메모리에 접근할 수 있기 때문에 모든 IPC 방식 중에서 속도가 가장 빠름
  • 같은 자원을 공유해서 쓰기 때문에 동기화 문제, 교착 상태 발생 가능성이 있음


Memory Map (메모리 맵)

  • 메모리 영역을 공유한다는 점에선 공유 메모리와 비슷하지만, 차이점은 '파일'을 '메모리'에 '매핑'시켜 공유한다는 것
  • 메모리에 써진 내용이 파일에도 똑같이 써지고, 파일은 다른 프로세스에서도 접근 가능하기 때문에 데이터를 공유할 수 있게 됨
  • 일반적인 파일 I/O에 비해 성능은 좋지만 많은 메모리를 요구하며, 많은 데이터를 얼마나 오랫동안 메모리에 둘 것인지 컨트롤 할 수 없음


Socket (소켓)

  • 네트워크를 이용한 클라이언트 프로세스와 서버 프로세스 간 통신 (네트워크를 이용하므로 다른 시스템 간 통신이 가능함)
  • 서버에서는 bind, listen, accept를 진행해 소켓 연결을 위한 준비를 함
  • 클라이언트에서는 connect로 서버에 연결을 요청하고, 연결이 수립되면 서버와 클라이언트 간 데이터를 주고 받을 수 있음 -> 전이중 통신이 가능함

-> 네트워크 단원에서 자세히 다룰 예정!!




각각의 방식은 서로 다른 장단점을 가지고 있기 때문에, 대부분의 운영체제에서는 한 가지 방식만 사용하는 것이 아니라 모든 방식을 다 사용함



출처

https://ko.wikipedia.org/wiki/프로세스_간_통신
https://heeonii.tistory.com/13
https://mangkyu.tistory.com/9
https://computer-serendipity.com/message-queues/
https://dar0m.tistory.com/233

2개의 댓글

comment-user-thumbnail
2023년 7월 12일

공유 메모리와 메모리 맵의 차이점

답글 달기
comment-user-thumbnail
2023년 7월 12일

단방향과 반이중 차이, 양방향?

답글 달기