IT이야기

Linux 공유 메모리: shmget() vs mmap()?

cyworld 2022. 6. 13. 22:30
반응형

Linux 공유 메모리: shmget() vs mmap()?

스레드에서는 OP를 사용하는 것이 좋습니다.mmap()대신shmget()Linux에서 공유 메모리를 가져옵니다.페이지와 이 페이지를 방문하여 문서를 얻었는데, 두 번째 페이지에는 다음과 같은 애매한 예가 있습니다.mmap().

거의 초보이고 두 프로세스 간에 (텍스트 형식으로) 정보를 공유해야 하기 때문에shmget()메서드 또는mmap()왜?

두 가지 방법 모두 실행 가능합니다. mmap방법은 보다 조금 더 제한적입니다.shmget, 단, 사용하기 편리합니다. shmget는 이전 System V 공유 메모리 모델이며 가장 광범위한 지원을 제공합니다. mmap/shm_open는 공유 메모리를 실행하는 새로운 POSIX 방식이며 사용하기 쉽습니다.만약 당신의 OS가 POSIX 공유 메모리를 사용할 수 있다면, 저는 그것을 추천합니다.

힌트:

  • 다음을 통해 자녀를 생성하는 경우fork그리고나서mmap와 함께MAP_ANONYMOUS | MAP_SHARED전화 한 통이면 됩니다. MAP_ANONYMOUS단, 는 POSIX에 의해 지정되지 않은 Linux 확장입니다.
  • 프로세스를 개별적으로 시작하지만 공유 메모리 이름을 지정할 수 있는 경우shm_open(+ftruncate) +mmap와 함께MAP_SHARED2/3 콜입니다.필요librtOS에 따라 다릅니다.
  • 사용하시는 OS가/dev/shm/그리고나서shm_open에서 파일을 여는 것과 같습니다./dev/shm/.

이것의 많은 부분이 역사와 미래 방향과 관련이 있다.

옛날에는 시스템 V와 BSD의 두 가지 주요(그리고 다소 경쟁적인) 버전의 unix가 있었습니다.SysV에는 빅3 공유 메모리, 세마포어 및 메시지 큐를 포함한 자체 버전의 IPC가 있습니다.POSIX가 함께 와서 힘을 합치려고 노력했습니다.

따라서 현재 Posix 공유 메모리, MQ, 세마포어 및 sysV 버전의 두 가지 버전이 있습니다.좀 더 혼란스럽게 하기 위해 sysV 버전도 Posix의 일부입니다.

따라서 기본적으로 Posix 또는 sysV 스타일의 공유 메모리를 사용하시겠습니까?일반적으로 대부분의 사람들은 장기적인 안목으로 Posix를 선택한다. 왜냐하면 그것은 미래로 가는 길처럼 보이기 때문이다.그러나 실제로는 sysV가 너무 많은 시스템에 내장되어 있기 때문에 문제가 해소되지 않을지 매우 의심해야 합니다.

즉, 장기적인 것은 배제하고, 고객의 프로젝트와 취향에 맞는 것이 무엇이냐에 따라 달라집니다.일반적으로 sysV 버전은 실제로 더 강력한 경향이 있지만, 대부분의 사람들이 처음 접했을 때 약간 당황스러워하는 투박한 인터페이스를 가지고 있습니다.특히 sysV 세마포어와 메시지큐에 해당됩니다.공유 메모리의 관점에서는 sysV와 posix가 모두 어색하다고 주장할 수 있다.sysV 버전은 투박하고ftokPosix가 여러 개의 콜을 받고 레이스 조건을 설정하게 되는 동안 중요한 정보를 얻을 수 있습니다. 프로그램 posix 버전)에 '같은 할 수 .ipcs가 필요합니다.

그래서 어떤 것을 사용해야 할까요?일반적으로 Posix 버전입니다.그러나 sysV 버전을 숙지해야 합니다.Posix 버전의 기능을 넘어서는 기능이 있어 특정 상황에서 활용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/21311080/linux-shared-memory-shmget-vs-mmap

반응형