Explicação enganosa da memória virtual no TLDP

4

Estou completamente confuso sobre a explicação da memória virtual no TLDP:

link

Eles dizem:

Each individual process runs in its own virtual address space and is not capable of interacting with another process except through secure, kernel managed mechanisms.

"Espaço de endereço virtual próprio" para mim lê como próprio 4Gb RAM no modo de 32 bits: 0000: 0000 - FFFF: FFFF. Mas eles não quiseram dizer isso, certo? Se dois processos apontam para o endereço virtual 1111: 1111, eles significam o mesmo endereço físico, então o mesmo espaço de endereço virtual de 4 Gb é compartilhado por todos os processos?

Além disso, eu li sobre o aqui do Windows , que realmente têm espaços de endereço virtuais individuais para cada processo, separam 2Gb RAM para o modo de usuário e compartilham 2Gb para o modo kernel, então dois processos diferentes podem apontar para 1111: 1111, que mapeia para diferentes memórias físicas. Eles? :)

UPDATE: ilustrações para minha pergunta. Qual das fotos é certa para o Linux:

Caso 1:

Caso2

    
por Boris Burkov 10.01.2013 / 00:44

2 respostas

7

O Linux, bem como o Windows, funcionam praticamente da mesma forma aqui. Todo processo recebe seu próprio espaço de endereço "virtual". Isso não significa que a memória esteja fisicamente disponível (obviamente, a maioria dos computadores de 32 bits nunca teve memória suficiente), por isso é virtual.

Além disso, os endereços usados não correspondem aos endereços físicos. Assim, segmento de memória física em AAAA: 0000 poderia corresponder a 9128: 2af2, o ponto é que você não precisa se preocupar. Tudo o que uma aplicação está interessada é onde a coisa de interesse reside em seu próprio segmento de memória. E sim, isso também significa que dois aplicativos podem apontar para o mesmo endereço em sua própria visão da memória e obter coisas diferentes.

Há também muitas coisas interessantes que podem ser mapeadas lá, além de uma página de memória física real do processo, por exemplo, endereços pertencentes a dispositivos (placa de vídeo), bibliotecas vinculadas dinamicamente ou memória compartilhada entre processos ( isso é parte do que significa "mecanismos seguros gerenciados pelo kernel").

Deixe-me recomendar um livro-texto como o Tanenbaum, Sistemas operacionais, se você quiser se aprofundar um pouco mais na memória virtual e processar o layout do espaço de endereço ou se não conseguir acessar facilmente um link também faz uma boa leitura.

    
por 10.01.2013 / 01:20
4

“Espaço de endereço virtual próprio” na verdade significa o oposto do que você diz: significa que o endereço 11111111 aponta para um local diferente na memória física em cada processo. Se os endereços virtuais correspondessem ao mesmo endereço físico em diferentes processos, os processos compartilhariam um espaço de endereço. Na verdade, parte do espaço de endereços é compartilhado entre vários processos (por exemplo, depois de fork , quase todas as páginas são compartilhadas entre o pai e o filho). Isso corresponde à sua foto “case 2”. Linux e Windows não são diferentes a esse respeito.

O Linux pode ser executado (em um modo degradado, que entre outros não suporta fork ) em alguns pequenos dispositivos incorporados que não possuem MMU , apenas um MPU (unidade de proteção de memória). Em tais dispositivos, não há espaços de endereço virtual (caso 2), mas ainda há separação entre os processos, porque cada processo tem seu próprio conjunto de permissões sobre as páginas de memória.

    
por 10.01.2013 / 01:57