실제적으로 IPC를 사용하는 방법 살펴보기!

스크린샷 2022-06-08 오후 1.41.48.png

스크린샷 2022-06-08 오후 1.41.55.png

  1. POSIX shared memory 사례

    cf> fd = fopen()을 통해 파일을 열 경우, 일반적인 경우 HDD(하드디스크)의 스토리지 시스템에 영역을 잡게 된다.

    POSIX는 memory-mapped files을 이용하는데, 이는 메모리에 파일을 생성해서 훨씬 빠른 속도로 읽을 수 있다. memory-mapped files를 사용하려면 다음과 같은 과정을 거친다.

    먼저 공유 메모리를 메모리 영역에 생성해서,

    스크린샷 2022-06-08 오후 1.47.20.png

    read, write 하는 단위(chunk)의 크기를 정해주고,(ex > 4096)

스크린샷 2022-06-08 오후 1.48.07.png

memory-mapped file을 공유메모리에다가 mapping 시켜준다.

스크린샷 2022-06-08 오후 1.48.28.png

ex >

스크린샷 2022-06-08 오후 6.04.37.png

스크린샷 2022-06-08 오후 1.51.03.png

shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);

⇒creat 및 read, write 권한을 준다.

ftruncate로 사이즈를 준다.(read, write 하는 청크 단위 사이즈 정해주기)

ptr = (char *)mmap(~~~,shm_fd, 0);

⇒ 메모리에 shared-file 영역을 주었다.(shm_fd가 메모리에 생성된 영역을 가리키게 된다)

sprintf(ptr, “%s”, message_0);

⇒ptr 포인터가 가리키는 영역에 message_0의 문자열을 write한다.

ptr += strlen(message_0);

⇒ message_0문자열의 길이 만큼 ptr이 가리키는 위치를 뒤로 이동시킨다.

스크린샷 2022-06-09 오전 10.29.32.png

스크린샷 2022-06-09 오전 10.29.38.png

소비자의 경우, shm 오픈 및 메모리 맵핑 시키는 것도 똑같다.