운영체제

06. 프로세스간 통신의 실제

syom 2021. 9. 6. 14:56

IPC 시스템의 예제

  • Shared Memory : POSIX Shared Memory: 운영체제의 표준화(의도대로는 안됨,,)
  • ⇒ Potable Operating System Interface (for uniX)
  • Message : Pipes
  • ⇒ One of the earliest IPC mechanisms on UNIX systems

POSIX shared memory

/* create */ fd = shm_open(name, O_CREAT | ORDWD, 0666); /* configure the size of the object in bytes */ ftruncate(fd, 4096); // (fd, byte 사이즈) /* establish 메모리 매핑 */ mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

  • send 예제 코드

=> 컴파일시 -lrt 플래그 추가

 

  • receive 예제 코드

=>컴파일시 -lrt 플래그 추가

  • memory-mapped file 을 사용한다 → 메모리에 올리기 때문에 빠르다

Pipes

  • 초창기 메커니즘이라 간단함

Pipe 의 네가지 이슈

  • 파이프는 unidirect 나 bidirect 를 허용하는가
  • 파이프는 왔다 갔다 할 수 있는가 (two-way comm : half-duplex or full-duplex)
  • ⇒ 파이프 두개 만들면 해결 됨
  • 소통하는 프로세스간의 관계가 필요한가
  • ⇒ 부모관계여야 함
  • 이 Pipe 가 네트워크에서도 사용되는가
  • ⇒ ㄴㄴ, 네트워크에선 소켓 사용

Pipe 의 타입

  • Ordinary pipes: 두개의 프로세스, Producer 가 write 하고 Consumer 가 read 할 수 있다

  • 예제 코드

  • unidirectional : one-way 커뮤니케이션 ⇒ two-way 하려면 파이프 2개 필요
  • : P(Parent) 가 pipe를 create 하고 Q(child) 와 소통하는데 쓰인다
  • Named pipes
  • : 파이프에 이름을 붙이는 것, 부모관계가 아니여도 사용가능
  • 이런 방법들은 예전에 사용하던 방식이고, 요즘에는 거의 다 네트워크 통신

Client-server 시스템에서의 프로세스 통신

  • sockets
  • : 커뮤니케이션을 위한 endpoint(IP address 와 port)가 필요
  • RPCs (Remote Procedure Calls : 원격에 있는 함수를 호출)
  • : 네트워크 시스템의 프로세스들 사이의 원격 호출을 추상화

Socket

  • Id address 와 ports 를 이용하여 통신
  • JAVA 의 경우 좀 더 편리한 인터페이스 제공

JAVA 소켓의 타입

  1. Server Socket class
    • TCP
  2. DatagramSocket class
    • UDP
  3. MulticastSocket class
    • 특정 recipents 한테만 제공

RPC (Remote Procedure Call)

  • 네트워크를 통해 원격의 Procedure 를 호출
  • client 는 원격 호스트에 있는 함수를 호출

RPC system

  • stub : client 에서 원격 호스트에서 가져올 함수(skeleton)가 무엇인지 제공하는 것
  • 호출할 때 Parameter 를 보낸다면, 보내야할 정보가 계속 해서 다른 객체들을 참조하고 참조하면 복잡한 구조가 되는데 이를 한번에 보내기 위해서 객체 직렬화가 필요하다
  • marshals : 이러한 문제들 때문에 마샬링 된 객체를 주고받는다
  • IDL(interfacedefine language)로 정의된 stub, skeleton, marshals 를 주고 받는다
  • IPC 의 확장 개념

'운영체제' 카테고리의 다른 글

08. 멀티스레딩  (0) 2021.09.08
07. 스레드의 이해  (0) 2021.09.07
05. 프로세스간 통신  (0) 2021.09.05
04. 프로세스의 생성  (0) 2021.09.04
03. 프로세스의 이해  (0) 2021.09.03