Primeiro, você precisa entender os conceitos básicos da memória virtual . Você não precisa entender como funciona uma MMU, mas precisa entender o que é um espaço de endereço virtual e quando está lidando com endereços virtuais ou endereços físicos. Caso contrário, você não conseguirá entender o que vê.
No Linux, você pode acessar a memória física do sistema através de /dev/mem
: byte N de /dev/mem
é byte N na RAM ou em periféricos mapeados na memória. A menos que você já saiba o que está procurando e onde procurá-lo, será difícil encontrar coisas interessantes. O arquivo /proc/iomem
descreve o que está mapeado no espaço de endereço físico (RAM e periféricos).
Você pode acessar a memória virtual do kernel via /dev/kmem
: que dá acesso ao código do kernel e às estruturas de dados, e aos dispositivos atualmente mapeados no kernel, mas não para processar a memória. O Linux também possui /proc/kcore
, que é semelhante a /dev/kmem
, mas coloca um cabeçalho ELF no início, para facilitar a execução de um depurador no kernel. Um depurador pode abrir /proc/kcore
e trabalhar nele da mesma forma que funcionaria na memória de um processo. Você pode depurar um kernel em execução executando gdb /path/to/vmlinux /proc/kcore
(existem instalações mais convenientes, em particular para depuração remota).
Você pode acessar a memória virtual de um processo por meio de /proc/$PID/mem
. O arquivo /proc/$PID/maps
resume o que está mapeado no espaço de endereço do processo; /proc/$PID/smaps
entra em mais detalhes.
Não existe um “heap do sistema” ou um “gerenciador de heap centralizado”. O mais próximo disso é toda a memória do sistema e o gerenciador de memória (todos ~ 100kLoC dele no Linux, não incluindo partes específicas da arquitetura).