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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top