IPC

nyoung·2023년 9월 22일
0

cs

목록 보기
4/10

🗣️ IPC(Inter Process Communication)

IPC란?

프로세스 간 통신을 위한 메커니즘으로 프로세스 간 데이터 공유와 통신을 가능하게 한다.
독립된 프로세스간에 통신을 위하여 커널 영역에서 IPC라는 내부 프로세스간 통신을 제공하게 되고, 프로세스는 커널이 제공하는 IPC설비를 이용해서 프로세스간 통신을 할 수 있게 된다.


커널 영역이란?
커널의 사전적 의미는 '핵심' 으로 운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분을 가리킨다.
커널은 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원들을 관리하는 역할을 한다.
즉, 커널은 인터페이스로써 응용 프로그램 수행에 필요한 여러가지 서비스를 제공하고, 여러가지 하드웨어(CPU, 메모리) 등의 리소스를 관리하는 역할을 한다.

다만 이러한 커널은 항상 컴퓨터 자원들을 바라만 보고 있기에 사용자와의 상호작용은 지원하지 않는다.
따라서 사용자와의 직접전인 상호작용을 위해 프로그램을 제공하게 되는데, 대표적으로 쉘(Shell)이라는 명령어 해석기등이 있다.

IPC가 왜 필요할까?

  • 프로세스 간 데이터 공유 : 프로세스는 독립적인 공간이지만, 다수의 프로세스가 동작하는 상황에서 프로세스 간에 데이터를 공유해야 할 경우가 발생한다.

    • 프로세스의 병렬 작업, 정보 공유, 클라이언트-서버 프로그램 등
  • 응용 프로그램 분리 : 큰 응용 프로그램을 작은 모듈로 나누어 각 모듈을 별도의 프로세스로 실행하는 경우, IPC는 이러한 모듈 간의 통신을 담당한다.

  • 데이터 전송의 보안성 : IPC는 데이터를 안전하게 전송하고, 데이터 무결성과 기밀성을 보호하기 위한 메커니즘을 제공한다.

    • 데이터 암호화, 데이터 무결성 검사, 인증 및 권한 부여, 에러처리 등

IPC의 종류

  • IPC의 종류는 크게 메시지 전달(Message Passing), 공유 메모리(Shared Memory)로 나뉜다.
IPC 방식메시지 전달 (Message Passing)공유 메모리 (Shared Memory)
설명커널을 통해 메시지를 전달하는 방식으로, 자원이나 데이터를 주고 받음공유 메모리 영역을 구축하고 해당 영역을 통해 자원이나 데이터를 주고 받음
특징- 구현이 비교적 쉬움
- 시스템 콜이 필요하며 이로 인해 오버헤드 발생
- 한 프로세스에서 다른 프로세스로 데이터 전달 시 커널을 거치므로 안전성이 높음
- 커널 의존도가 낮아 속도가 빠르고 통신이 자유로움
- 공유 메모리를 통해 프로세스 간 데이터 공유가 가능하지만, 동시 접근 및 동기화 이슈 주의 필요
구현Pipe, Signal, Message Queueing, Socket 등공유 메모리 세그먼트, Semaphores 등

익명 Pipe

파이프는 여러개의 프로세스가 공통으로 사용하는 임시공간이라고 할 수 있다.
그 중 익명 파이프는 주로 부모 프로세스와 자식 프로세스 사이에서 사용된다. 즉, 통신할 프로세스를 명확히 알 수 있는 경우에 사용한다.
부모 프로세스가 자식 프로세스에 데이터를 전송하거나 그 반대로 데이터를 받을 때 사용되며, 프로세스 간 통신을 위해 파이프를 생성하고, 생성된 파이프의 파일 디스크립터를 통해 데이터를 주고받는다. 부모와 자식만이 파일 디스크럽터를 공유하기 때문에 외부 프로세스는 파일 디스크립터를 알 방법이 없다.
주로 단방향 통신을 지원하며, 양방향 통신을 위해서는 두 개의 파이프가 필요하다.


Named Pipe(FIFO)

네임드 파이프는 파일 시스템에 이름이 부여된 파이프로, 다수의 프로세스 간 통신을 지원한다.
네임드 파이프의 경우 다른 프로세스도 지정한 이름으로 파일 디스크립터를 열수 있기 때문에, 부모 자식 프로세스 간이 아니더라도 사용할 수 있다.
파일 시스템에 저장되기 때문에 파일처럼 접근 권한을 설정할 수 있다.
주로 양방향 통신을 지원하며, 읽기와 쓰기를 동시에 수행할 수 있다.

메시지 큐(Message Queues)

Queue(큐)는 선입선출의 자료구조를 가지는 통신설비로 커널에서 관리한다. 입출력 방식으로 보자면 위의 Named PIPE와 동일하다. Named PIPE와 다른 점이라면 Name PIPE가 데이터의 흐름이라면 메시지 큐는 메모리 공간이라는 점이다. 파이프가 아닌, 어디에서나 물건을 꺼낼 수 있는 컨테이너 벨트라고 보면 된다.

메시지 큐의 장점은 컨테이너 벨트에 올라올 물건에 라벨을 붙이면 동시에 다양한 물건을 다룰 수 있는 것과 같이, 메시지 큐에 쓸 데이터에 번호를 붙임으로써 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.

소켓(Sockets)

소켓은 네트워크 환경에서 프로세스 간 양방향 통신을 지원한다. 흔히 네트워크 통신 기법으로 많이 사용되며 데이터 교환을 위해 양쪽 PC에서 각각 임의의 포트를 정하고 해당 포트 간의 대화를 통해 데이터를 주고받는 방식이다.
소켓은 로컬 뿐만 아니라 원격 통신도 가능하며, 주로 사용되는 프로토콜은 TCP와 UDP이다. TCP는 신뢰성 있는 양방향 통신을 제공하고, UDP는 빠른 데이터 전송을 지원한다.

< 소켓 통신의 과정 >

1. 서버 소켓 생성 및 바인딩:
	서버는 특정 포트에서 클라이언트의 연결 요청을 대기하기 위해 서버 소켓을 생성하고 특정 포트에 바인딩한다.
2. 연결 수락: 
	클라이언트가 서버에 연결 요청을 보내면, 서버는 해당 요청을 수락하고 새로운 소켓을 생성하여 해당 클라이언트와 통신할 수 있도록 한다.
3. 데이터 송수신: 
	서버와 클라이언트 간에 데이터를 송수신한다. 데이터는 소켓을 통해 패킷 단위로 전송된다.
4. 연결 종료: 
	통신이 완료되면 연결을 종료하고 소켓을 닫는다.

프로토콜(Protocol): 컴퓨터 네트워크나 통신 시스템에서 데이터를 주고받는 데 사용되는 규칙과 규약의 집합을 나타낸다.

TCP (Transmission Control Protocol): TCP는 연결 지향형 프로토콜로, 데이터를 주고받기 전에 연결을 설정하고 데이터 전송 후에 연결을 해제하는 과정이 필요하다. 순서대로 데이터를 보내고 받아야 하며, 신뢰성이 높아 주로 웹 브라우징, 이메일, 파일 전송 등과 같이 데이터 정확성이 중요한 응용 프로그램에서 사용한다.

UDP (User Datagram Protocol): UDP는 비연결 지향형 프로토콜로, 연결 설정 및 해제 과정이 없고, 데이터를 그냥 보내고 받을 수 있다. 순서를 보장하지 않으며, 주로 실시간 스트리밍, 음성 통화, 온라인 게임 등에서 빠른 속도와 실시간 특성이 중요한 경우에 사용된다.

공유 메모리(Shared Memory)

공유 메모리는 프로세스 간에 메모리 공간을 공유하고 데이터를 공유하는 IPC 방법이다.
고성능 데이터 공유를 위해 사용된다. 메모리 자체를 공유하기에 불필요한 데이터 복사의 오버헤드가 발생하지 않기에 IPC 기법 중 가장 빠르다.


레퍼런스
https://jwprogramming.tistory.com/54
https://m.blog.naver.com/demonic3540/221671407431

profile
새싹 개발자

0개의 댓글