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 소켓의 타입
- Server Socket class
- TCP
- DatagramSocket class
- UDP
- 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 |