Aula 14: mmap() — Arquivos Mapeados em Memória
mmap() mapeia um arquivo ou memória anônima diretamente no VAS. Isso permite ler um arquivo grande como se fosse um array na memória, sem chamadas explícitas de read(). Nesta aula vamos aprender a API, a diferença entre MAP_PRIVATE e MAP_SHARED, e a relação com o CUDA IPC.
mmap é como abrir um livro direto na sua mesa em vez de copiar capítulos toda vez. Você lê diretamente da fonte.
- mmap
- Uma chamada de sistema que mapeia um arquivo ou memória anônima diretamente no VAS do processo. Retorna um ponteiro para o início da região.
- page fault
- Uma exceção que ocorre quando um processo acessa uma página de memória que não está na RAM. O SO carrega a página (do arquivo ou da swap) e retoma a execução.
- MAP_SHARED
- As escritas são propagadas de volta para o arquivo e ficam visíveis para outros processos que mapeiam o mesmo arquivo. Usado para IPC.
- MAP_PRIVATE
- Copy-on-write: as escritas são privadas ao processo atual e não são gravadas de volta no arquivo. Arquivos ELF são carregados com MAP_PRIVATE.
- mapeamento apoiado em arquivo
- Um mmap que tem um arquivo como fonte de dados. Os page faults carregam os dados do arquivo. Contrasta com o mmap anônimo, cuja fonte são zeros.