POSIX Memória compartilhada versus arquivos mapeados
-
20-09-2019 - |
Pergunta
Tendo aprendido um pouco sobre o assunto, alguém pode dizer, qual é a diferença real entre a memória compartilhada POSIX (SHM_OPEN) e os arquivos mapeados do POSIX (MMAP)?
Ambos parecem usar o subsistema /dev /tmpfs, e não o mecanismo IPC mais antigo.
Então, existe alguma vantagem de usar o arquivo MMAP sobre a memória compartilhada?
Obrigado.
Solução
A distinção nem sempre é clara. A memória compartilhada pode ser implementada por meio de arquivos mapeados de memória. Uma excelente gravação sobre isso pode ser encontrada aqui (conforme aplicado à programação C/C ++).
Outras dicas
Meu entendimento é que essa memória compartilhada é construída sobre os arquivos mapeados, mas Esta página parece indicar que a capacidade de usar arquivos mapeados de memória como memória compartilhada é condicional.
O uso da função mmap () é restrito pelo valor do sistema QSHRMEMCTL. Quando esse valor do sistema é 0, a função mmap () pode não criar um mapeamento compartilhado com capacidade prot_write. Essencialmente, isso impede a criação de um mapa de memória que possa alterar o conteúdo do arquivo de fluxo que está sendo mapeado. Se o parâmetro dos sinalizadores indicou map_shared, o parâmetro prote especificará prot_write e o valor do sistema QSHRMEMCTL é 0, as funções mmap () falharão e um número de erro dos resultados do EACCES.
A memória basicamente compartilhada é uma forma de IPC. Arquivo de disco e, em seguida, usando o MMAP também, mas seria comparado de maneira lenta.