문제

주제에 대해 조금 배운 후 누구나 POSIX 공유 메모리 (SHM_OPEN)와 POSIX 매핑 파일 (MMAP)의 실제 차이점은 무엇입니까?

둘 다 /dev /tmpfs 서브 시스템을 사용하는 것 같습니다.

그렇다면 공유 메모리를 통해 MMAP 파일을 사용한다는 장점이 있습니까?

감사.

도움이 되었습니까?

해결책

구별이 항상 명확하지는 않습니다. 공유 메모리는 메모리 매핑 파일을 통해 구현할 수 있습니다. 이에 대한 훌륭한 글은 여기에서 찾을 수 있습니다 (C/C ++ 프로그래밍에 적용).

다른 팁

내 이해는 공유 메모리가 매핑 된 파일 위에 구축되었지만 이 페이지 메모리 매핑 파일을 공유 메모리로 사용하는 기능은 조건부임을 나타냅니다.

MMAP () 함수의 사용은 QSHRMEMCTL 시스템 값에 의해 제한됩니다. 이 시스템 값이 0 인 경우 mmap () 함수는 prot_write 기능을 갖는 공유 매핑을 생성하지 않을 수 있습니다. 본질적으로 이것은 스트림 파일의 내용을 맵핑 할 수있는 메모리 맵의 생성을 방지합니다. 플래그 매개 변수가 표시된 MAP_SHARED가 표시되면 PROT 매개 변수는 Prot_Write를 지정하고 QSHRMEMCTL 시스템 값은 0이면 MMAP () 함수가 실패하고 EACCES 결과의 오류 번호가 실패합니다.

기본적으로 공유 메모리는 IPC의 형태입니다. 공유 영역은 /dev /shm에서 생성되어 메모리에서만 생성되며 디스크 작업이 필요하지 않으므로 IPC의 빠른 방법입니다. 디스크 파일과 MMAP를 사용하지만 비교적 느리게 사용됩니다. 대기적으로 디스크 파일로 백업되지 않는 MMAP와 함께 항상 map_anonymous를 사용할 수 있습니다.

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