출처: https://devraphy.tistory.com/413, https://devraphy.tistory.com/418
(출처는 위 링크! 형광펜은 개인적으로 공부하면서 체크한 부분입니다)






IPC 기법

= 프로세스간 통신 기법을 의미
원래 프로세스끼리는 커뮤니케이션이 불가능

이것을 가능하게 해주는 몇 가지 방법들이 있음




⭐ File 사용 기법


shared.txt와 같은 파일에 현재 커널 영역의 상태 정보를 기입한다.
통신이 필요한 프로세스의 상태정보를 알기위해 shared.txt 파일을 읽고 확인한다.
이 과정을 반복한다.

📌 File 사용기법을 잘 사용하지 않는 이유

프로세스에서 통신이 필요할 때마다 매번 shared.txt 파일을 읽어야 한다.
프로세스의 커널 영역의 상태정보가 변할 때마다 해당 파일을 update 해야한다.
그러므로 시간이 오래 걸린다.




파이프 기법

fork() 메소드를 이용해 자식 프로세스를 만들었을 때,
부모와 자식 프로세스 간의 통신을 위해 사용하는 기법
단방향 통신이 특징이다.


📌 fork() 메소드란?

시스템 콜의 한 종류
어떤 프로세스를 복제하여 자식 프로세스를 만드는 기능


📌 파이프 통신의 예시


📌 파이프 기법 요약

  • 부모 프로세스는 fd[1]과 write()라는 시스템 콜을 이용하여 프로세스 내부의 코드를 작성할 수 있다.
  • 자식 프로세스는 fd[0]과 read()라는 시스템 콜을 이용하여 부모 프로세스의 코드를 읽어올 수 있다.
  • 자식 프로세스에서 부모 프로세스의 코드르 읽어오는 그 지점이 통신이 이루어지는 시점이다.
  • 파이프 기법이 단방향 통신인 이유는 부모 프로세스는 작성(write)만, 자식 프로세스는 읽기(read)만 할 수 있기 때문이다.
  • 부모 프로세스에서 자식 프로세스로 전달되는 내용 또는 데이터는 커널영역 어딘가에 존재한다.



메세지 큐(Message Queue)

큐(Queue) 자료구조를 이용한 IPC 기법
기본적으로 FIFO 방식으로 데이터를 전송한다.


📌 그림으로 보는 메세지 큐 기법


간단하게, A라는 프로세스에서 데이터를 insert하면 B라는 프로세스에서 받아오는 방식으로 통신한다.


📌 파이프와 메세지 큐 기법의 차이

  • message queue는 부모/자식 관계없이 어떤 프로세스라도 데이터 송수신이 가능하다.
  • FIFO 정책으로 먼저 삽입된 데이터가 먼저 읽힌다.
  • message queue는 양방향 통신이 가능하다.
  • 프로세스 A, B 간의 양방향 통신을 위해서는 메세지 큐가 2개 필요하다.
    메세지 큐가 하나라면, 프로세스 A가 보낸 데이터는 프로세스 B만이 읽을 수 있다.

📌 공통점

파이프와 메세지 큐 모두 커널 영역에서 작동한다!




⭐ 공유메모리(shared memory) 기법

커널 영역에 메모리 공간을 만들고, 해당 공간을 변수처럼 쓰는 방식
message queue처럼 FIFO 방식이 아니라, 해당 메모리 주소를 마치 변수처럼 접근하는 방식
공유 메모리의 key를 가지고, 여러 프로세스가 접근 가능




⭐ Signal 기법

유닉스에서 30년 이상 사용된 전통적인 기법
어떤 커널 또는 프로세스에서 다른 프로세스에게 어떤 이벤트가 발생되었는지를 알려주는 기법
프로세스 코드에 시그널 핸들러를 등록하여, 해당 시그널을 처리하는 방식으로 동작한다.




⭐ Socket 이용

소켓은 네트워크 통신을 위한 기술
기본적으로 클라이언트서버로 나뉘어 컴퓨터간의 네트워크 통신을 가능하게 하는 기술.

소켓을 이용한 IPC를 간략하게 설명하자면, 네트워크 기기를 이용한 시스템 콜이라고 할 수 있음


📌 Socket을 IPC 기법으로 사용?

소켓은 다른 컴퓨터와의 통신을 위한 기술

그렇다면, 본인 스스로와 통신을 할 수 있지 않을까?
하나의 컴퓨터 내에서 서로 다른 프로세스간의 통신이 가능할 것

이런식으로 Socket을 IPC 기법으로 사용할 수 있음




profile
⛅🛩️ 먼 길을 돌아서 온 프론트엔드 개발자 ✈️⛅

0개의 댓글