Aula 14: mmap() — Ficheiros Mapeados em Memória
mmap() mapeia um ficheiro ou memória anónima diretamente no VAS. Isso permite ler um ficheiro 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 ficheiro 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 ficheiro ou da swap) e retoma a execução.
- MAP_SHARED
- As escritas são propagadas de volta para o ficheiro e ficam visíveis para outros processos que mapeiam o mesmo ficheiro. 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 ficheiro. Ficheiros ELF são carregados com MAP_PRIVATE.
- mapeamento apoiado em ficheiro
- Um mmap que tnum ficheiro como fonte de dados. Os page faults carregam os dados do ficheiro. Contrasta com o mmap anónimo, cuja fonte são zeros.