CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • IPC 종류
  • 파이프 Pipe
  • 메시지 큐 Message Queue
  • 공유 메모리 Shared Memory
  • 메모리 맵 Memory Map
  • 소켓 Socket
  • RPC
  • 세마포어 Semaphore
  1. operating-system

IPC (Inter Process Communication)

IPC는 Inter Process Communication의 약자로 프로세스 간의 통신을 의미한다.

프로세스는 각각 독립적으로 실행되기 때문에 이들간의 통신은 커널 영역에서 IPC 설비를 이용해야 한다. 반대로 스레드는 다른 스레드들과 메모리공간과 자원을 공유하기에 프로세스 통신보다 구현이 쉽다.

IPC 종류

파이프 Pipe

  • 초기 UNIX 시스템의 IPC 기법으로 메시지 전달 방식의 일종

  • 파일 I/O를 통해 프로세스 간 데이터를 주고 받는다.

  • FIFO 구조를 갖는다.

  • 파이프 생성 시 두 개의 파일 디스크립터(read, write) 가 return 된다.

  • 파이프는 두 개의 프로세스에 대해 단방향 통신을 지원한다.

  • 통신을 위한 메모리공간(버퍼)를 생성하여 프로세스가 데이터를 주고 받는다.

  • 양쪽 모두 송/수신을 해야 하는 상황이라면 2 개의 파이프를 생성해야 한다.

    • 때문에 전이중 통신을 고려해야 한다면 파이프는 좋은 선택이 아니다.

PIPE의 장단점

익명 파이프 Anonymous Pipe

  • 익명의 파이프를 통해서 동일한 PPID를 가진 프로세스들 간의 단방향 통신을 지원한다.

  • 부모 - 자식 또는 형제 프로세스 간 통신에 사용된다.

  • pipe 함수로 생성한다.

네임드 파이프 Named Pipe

  • 이름을 가진 파이프를 통해서 프로세스 간에 양 방향 통신을 지원한다.

    • 기본적으로 단방향을 많이 사용한다.

    • 양방향 통신을 위해서는 O_RDWR mode 로 열어야 한다.

  • 연관이 전혀 없는 프로세스 간 통신에 사용된다.

  • mkfifo or mknod 함수로 생성한다.

메시지 큐 Message Queue

  • 메모리를 사용한 파이프이다.

  • 구조체 기반으로 통신을 한다.

  • 프로세스간 다양한 통신을 할 때 사용할 수 있다.

    • 사용할 데이터에 번호를 붙여 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.

  • msgtype에 따라 다른 구조체를 가져올 수 있다.

  • 커널에서 제공하는 Message queue 이기 때문에 EnQueue 하는데 제한이 존재 한다.

공유 메모리 Shared Memory

  • 파이프, 메시지 큐가 통신을 위한 설비라면, 공유 메모리는 데이터 자체를 공유하도록 지원하는 설비이다.

  • 즉 공유 메모리는 시스템 상의 공유 메모리를 통해 통신한다.

  • 일정한 크기의 메모리를 프로세스 간에 공유 하는 구조이다.

  • 공유 메모리는 커널에서 관리된다.

  • 단순히 공유 메모리를 point 함으로써 프로세스에서 사용되는 메모리가 증가되지는 않는다.

  • 중개자 없이 곧바로 메모리에 접근이 가능하여 IPC 중에서 가장 빠르게 작동한다.

  • 프로세스 간 read, write를 모두 필요로 할 때 사용한다.

  • 주의할 점은 프로세스간의 상요할려면 메모리 크키가 동일 해야 한다.

메모리 맵 Memory Map

  • 메모리를 공유한다.

  • 열린 파일을 메모리에 매핑시켜 공유하는 방식

    • 공유 매개체 => 파일 + 메모리

  • 주로 파일로 대용량 데이터를 공유해야 할 때 사용한다.

  • 메모리 맵 파일은 파일의 크기를 바꿀 수는 없으며 메모리 맵 파일을 사용하기 이전, 또는 이후에만 파일의 크기를 바꿀 수 있다.

소켓 Socket

  • 네트워크 소켓 통신을 통해 데이터를 공유한다.

  • 클라이언트와 서버가 소켓을 통해서 통신하는 구조이다.

  • 원격에서 프로세스 간 데이터를 공유할 때 사용한다.

  • 소켓을 사용하려면 소켓을 생성하고, domain, type 그리고 protocol을 지정해야 한다.

  • 서버단에서는 bind, listen, accept를 하여 소켓 연결을 위한 준비를 한다.

  • 클라이언트단에서는 connect를 통해 서버에 요청한다.

  • 연결 수립 후 send를 통해 데이터를 주고받고, 종료는 close()를 사용한다.

RPC

  • RPC(Remote Procedure Call)는 마치 함수를 호출하는 것처럼 원격 컴퓨터의 함수를 호출 할 수 있도록 하는 기술입니다.

  • Socket과의 주요한 차이점은 RPC는 네트워크 통신에 대한 세부적인 내용을 알지 않고도 원격 함수를 호출할 수 있지만 소켓방식은 소켓 연결, 데이터 전송, 에러 처리 등을 직접 코딩해야 한다는 추상화 레벨에서의 차이점이 있습니다.

세마포어 Semaphore


IPC 종류
익명 파이프
네임드 파이프
메시지 큐
공유 메모리
메모리 맵
소켓

사용 시기

부모 자식 간 단방향 통신시

다른 프로세스와 단방향 통신시

다른 프로세스와 단방향 통신시

다른 프로세스와 양방향 통신시

다른 프로세스와 양방향 통신시

다른 시스템간 양방향 통신시

공유 매개체

파일

파일

메모리

메모리

파일 + 메모리

소켓

통신 단위

스트림

스트림

구조체

구조체

페이지

스트림

통신 방향

단방향

양방향

단방향

양방향

양방향

양방향

통신 가능 범위

동일 시스템

동일 시스템

동일 시스템

동일 시스템

동일 시스템

동일 + 외부 시스템


ref

Previousoperating-systemNext인터럽트

Last updated 1 year ago

img1 daumcdn
img1 daumcdn
img1 daumcdn
img1 daumcdn
img1 daumcdn
img1 daumcdn

프로세스 간의 데이터 통신 및 공유 시에 데이터 불일치가 발생하지 않도록 가 사용된다.

세마포어
[프로세스간 통신] IPC(inter process communication) 종류 (Linux)
IPC(Inter Process Communication)
IPC의 종류와 특징
[메모리] share memory 사용법