Eu acho que depende do que você entende por "ciente".
Na medida em que a chamada de sistema read()
s é uma solicitação ao kernel para copiar o conteúdo de um arquivo que inicia na posição atual para o buffer de memória designado pelo programa, read()
em um arquivo regular executará a mesma tarefa forma ou não existe simultaneamente um mapeamento de memória do arquivo. Não há "consciência".
Agora, o arquivo é mmap()
ed e read()
, pode haver uma otimização de desempenho a ser alcançada. Por exemplo, se o arquivo for read()
primeiro, as seções do arquivo que foram lidas provavelmente já estarão no cache de páginas e, posteriormente, o acesso ao mapeamento de memória não precisará acessá-las novamente a partir do disco. Ou, inversamente, se houver um mapeamento de memória que já tenha sido paginado, um read()
subseqüente não precisará ir para o disco novamente. Então, nesse sentido, você pode, de alguma forma, considerar os mmap()
e read()
"conscientes" um do outro.