mmap efeito bandeira proteção para compartilhamento entre processos

StackOverflow https://stackoverflow.com/questions/601806

  •  03-07-2019
  •  | 
  •  

Pergunta

bandeira proteção afeta a partilha entre processos? Se eu tiver PROT_READ |? PROT_WRITE-protegidos região de memória mmapped, ainda é totalmente partilhada, desde que eu não tenho escrito para ele

int prot = PROT_READ|PROT_EXEC;
image = mmap(NULL, filesize, prot, MAP_PRIVATE, fildes, 0);

vs:

int prot = PROT_READ|PROT_WRITE|PROT_EXEC;
image = mmap(...)

Eu gostaria de fazer pequena modificação pequena porção da região de memória depois de eu ter mapeado-lo, em seguida, re-mprotect tudo, porque é mais simples do que mprotecting pequenas porções quando eu preciso fazê-lo.

A questão é se ele acaba forçando todo o arquivo copiado por processo ou apenas as partes que eu modificados por processo?

Foi útil?

Solução

De acordo com a mmap (2) página homem em um sistema Linux recente, aloca MAP_PRIVATE a memória usando copiar-on -Write (vaca). Isso significa que sua memória não será duplicada a menos que você alterá-lo. Como vaca é um método eficiente para implementar isso, presumo que também é feito desta forma em outros sistemas * nix.

A memória para mmap está organizado em igual tamanho pedaços, assim chamado páginas. Memória será sempre mapeados em múltiplos do tamanho da página, ou seja, páginas inteiras. Cada página pode ser trocada de forma independente. Então, se você escrever algo para este intervalo de memória mmap'ed, apenas a pelo menos uma página tem de ser copiado.

O tamanho da página depende do seu sistema, em x86 é normalmente 4096 bytes. Se você está interessado no tamanho da página do seu sistema, você pode usar sysconf (3) .

   #include <unistd.h>
   long pagesize = sysconf(_SC_PAGESIZE);

O ponteiro que você começa de mmap () já irá apontar para um múltiplo do tamanho da página e você deve passar mprotect () um endereço que está sendo alinhado com um limite de página.

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