Estão compartilhando um arquivo mapeado na memória e compartilhando uma região de memória implementada com base na outra?

3

Estão compartilhando um arquivo mapeado na memória e compartilhando uma região de memória implementada com base uns nos outros? As duas citações a seguir parecem dizê-lo e parecem um problema de ovo de galinha para mim.

O Operating System Concepts introduz o compartilhamento de um arquivo mapeado na memória a seguir. Os múltiplos processos compartilham o mesmo arquivo compartilhando a mesma região de memória física que contém o conteúdo do arquivo?

Multiple processes may be allowed to map the same file concurrently, to allow sharing of data. Writes by any of the processes modify the data in virtual memory and can be seen by all others that map the same section of the file. Given our earlier discussions of virtual memory, it should be clear how the sharing of memory-mapped sections of memory is implemented: the virtual memory map of each sharing process points to the same page of physical memory—the page that holds a copy of the disk block. This memory sharing is illustrated in Figure 9.22.

enter image description here

Ele também introduz a memória compartilhada a seguir.

  • Múltiplos processos compartilham uma região de memória compartilhando um arquivo mapeado na memória?

  • Um "arquivo mapeado por memória" reside no disco ou na memória principal? Eu acho que está no disco, mas "O arquivo mapeado na memória serve como a região do compartilhamento memória entre os processos de comunicação "parece significar que ela reside na memória principal.

Quite often, shared memory is in fact implemented by memory mapping files. Under this scenario, processes can communicate using shared memory by having the communicating processes memory-map the same file into their virtual address spaces. The memory-mapped file serves as the region of shared memory between the communicating processes (Figure 9.23).

enter image description here

Obrigado.

    
por Tim 12.10.2018 / 04:17

2 respostas

1

A memória compartilhada pode ser apoiada por um arquivo normal, um dispositivo de bloco ou uma troca. Depende de como a região da memória foi criada.

Quando vários processos estão usando a mesma região de memória compartilhada, seus endereços virtuais individuais estarão apontando para o mesmo endereço físico. As gravações de um processo se tornam visíveis para os outros diretamente, sem a necessidade de passar pelo arquivo de disco (se houver algum) ao qual a memória está conectada.

Se houver um arquivo por trás da memória compartilhada, o kernel ocasionalmente sincroniza as páginas alteradas da RAM para o arquivo. Os processos que usam a memória normalmente não precisam saber quando isso acontece, mas, se necessário, eles podem chamar msync para que isso aconteça mais cedo.

Se não houver nenhum arquivo por trás da memória compartilhada, o kernel pode mover páginas para trocar quando precisar liberar alguma RAM, assim como acontece com a memória de processo não compartilhada. Quando eles são trocados de volta, eles recebem um novo endereço físico que está imediatamente disponível para todos os processos que mapearam a memória compartilhada.

Há mais uma coisa que me confundiu na primeira vez que analisei: se você mapear um arquivo com mmap , precisará usar MAP_SHARED se quiser fazer alterações e salvá-las novamente no arquivo, mesmo que haja apenas um processo envolvido. Primeiro, achei que MAP_SHARED era o nome errado para essa funcionalidade, mas, pensando melhor, você está "compartilhando" suas modificações com outros processos que acessam o arquivo com read , ou processos que virão mais tarde e mmap isto. Então faz sentido, tipo.

    
por 12.10.2018 / 15:45
2

Are sharing a memory-mapped file and sharing a memory region implemented based on each other?

Praticamente, no final do dia /dev/shm é apenas um disco virtual.

Does a "memory-mapped file" reside on disk or main memory?

Sim!

As partes do arquivo que são acessadas são copiadas (pelo swapper) em buffers - o que é RAM.

Qualquer gravação nessa memória será imediatamente visível no arquivo, mas não será gravada no disco físico até que o buffer seja sincronizado ou liberado.

    
por 12.10.2018 / 06:17