SYSV 또는 POSIX 공유 메모리 대 MMAP ()를 사용하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1123490

  •  13-09-2019
  •  | 
  •  

문제

IPC를 사용하여 OS X 10.4 이상의 아동 프로세스에서 부모에게 다량의 데이터 (200KB+)를 전달하기 위해 UNIX, 특히 System V 및 POSIX 공유 메모리 메커니즘의 공유 메모리를 읽습니다. 그런 다음 MMAP ()가 MAP_ANON 및 MAP_SHARED 플래그와 함께 사용하여 유사한 작업을 수행 할 수 있음을 깨달았습니다 (또는 일반 파일이 생성되는 경우 MAP_SHARED 플래그만으로).

내 질문은 mmap () 만 사용하지 않는 이유가 있습니까? 훨씬 간단 해 보이고 메모리가 여전히 공유되며 map_anon을 사용하는 경우 실제 파일을 만들 필요가 없습니다. 부모 프로세스에서 파일을 작성한 다음 Fork () 및 exec ()를 자식으로 만들어 어린이 프로세스에서 사용할 수 있습니다.

질문의 두 번째 부분은이 접근법이 충분하지 않다는 이유는 무엇이며 Sysv 또는 Posix 공유 메모리 메커니즘을 사용해야하는 이유는 무엇입니까?

다른 커뮤니케이션에 필요한 파이프를 사용하여 동기화를 계획하고있었습니다. 즉, 부모는 파이프를 통한 데이터를 요청하고, 자식은 공유 메모리에 글을 쓰고, 준비된 파이프를 통해 응답합니다. 여러 독자 나 작가가 관련되어 있지 않습니다. 이식성은 우선 순위가 아닙니다.

도움이 되었습니까?

해결책

부모/자식 관계가있는 경우 MMAP를 사용하는 것이 좋습니다.

SYSV_SHM은 관련 및 관련없는 프로세스가 메모리를 공유 할 수있는 원래 UNIX 구현입니다. posix_shm 표준화 된 공유 메모리.

MMAP가없는 POSIX 시스템을 사용하는 경우 POSIX_SHM을 사용합니다. posix_shm이없는 유닉스에 있다면 sysv_shm을 사용합니다. 메모리와 부모/자식 만 공유 해야하는 경우 가능한 경우 MMAP를 사용합니다.

다른 팁

메모리가 제공되는 경우 SYSV/POSIX를 사용하는 유일한 이유 mmap 이식성입니다. 특히 오래된 UNIX 시스템은 지원하지 않습니다 MAP_ANON. Solaris, Linux, BSDS 및 OS X 하다, 그러나 실제로 사용하지 않는 이유는 거의 없습니다. mmap.

shm Linux에서는 일반적으로 a를 통해 구현됩니다 /dev/shm 가져 오는 파일 mmapPED, 그래서 성능은 동등해야합니다. mmap (w/MAP_ANON 그리고 MAP_SHARED 당신이 언급 한 바와 같이) 단순성을 위해, 내가 알고 있다면, 당신이 말하는 것처럼, 당신이 말하는 것처럼, 당신이 말하는 것처럼, 당신이 말하는 것처럼.

까지 선적 서류 비치 당신을 알고 있습니다 ~ 해야 하다 사용하려면 SYSV Shared-Memory를 사용하십시오 xlib/XCB 공유 메모리 이미지.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top