However when commands are being run, a copy of their files from the hard disk is put into the RAM,
Isso está errado (em geral). Quando um programa é executado (através de execve (2) ...) o processo ( executando esse programa) está alterando seu espaço de endereço virtual e o kernel está reconfigurando o MMU para esse fim. Leia também sobre a memória virtual . Observe que os programas aplicativos podem alterar seu espaço de endereço virtual usando mmap (2) & munmap
& mprotect (2) , também usado pelo redutor dinâmico (consulte ld -linux (8) . Veja também madvise (2) & posix_fadvise (2) & mlock (2) .
Futuras falhas de página serão processadas pelo kernel para carregar páginas (lazily) do arquivo executável. Leia também sobre se debatendo .
O kernel mantém um grande cache de páginas . Leia também sobre copy-on-write . Veja também readahead (2) .
OK, so what I wonder about is if the double life of a command, one on the hard disk, the other in the RAM is also true for other kind of files, for instance those who have no logic programmed, but are simply containers for data.
Para chamadas de sistema como leia (2) & escreva (2) o cache de páginas também é usado. Se os dados a serem lidos estiverem armazenados, nenhum disco IO será executado. Se o disco IO for necessário, os dados lidos seriam muito provavelmente colocados no cache da página. Então, na prática, se você executar o mesmo comando duas vezes, pode acontecer que nenhuma E / S física seja feita no disco na segunda vez (se você tiver um disco rígido rotativo antigo - não um SSD - você poderá ouvir isso; ou observe atentamente o seu LED do disco rígido).
Eu recomendo ler um livro como Sistemas operacionais: três peças fáceis (disponível gratuitamente para download, um arquivo PDF por capítulo) que explica tudo isso.
Veja também Linux Ate My RAM e execute comandos como xosview
, top
, htop
ou cat /proc/self/maps
ou cat /proc/$$/maps
(consulte proc (5) ).
PS. Estou focando no Linux, mas outros sistemas operacionais também possuem memória virtual e cache de páginas.