Quando a memória virtual não é mais tão virtual?

0

No Windows, Mac e amp; Linux há memória virtual em andamento para cada processo de software de aplicativo em uma pilha de RAM.

Mas em relação ao uso real da minha memória acessando tipos de dados, onde exatamente minha memória será mapeada, e quando ela se tornará física:

1. Depois da compilação.

2. Durante a compilação.

3.Após o carregador e a execução.

Eu pergunto porque desde que a memória deve ser protegida para evitar sobrescritos do kernel, acesso ou manipulação inválidos, como devo tratar a memória no meu programa se eu não souber exatamente onde a minha memória será de antemão, portanto, eliminando qualquer habilidades para acompanhar diretamente os bits de memória no total que meu programa usará com precisão.

    
por Dinosaur pawz 22.05.2013 / 17:07

2 respostas

4

O espaço de endereço que seu programa vê é SEMPRE virtual. (Pelo menos em todos os sistemas operacionais modernos.)
Você aloca memória chamando a API do sistema operacional para isso (ou o compilador faz isso quando você define variáveis em seu código). Os endereços (ou ponteiros, qualquer que seja a linguagem de programação que os chama) que você retorna para essa memória alocada, são válidos no contexto do seu programa.
Para a memória que você alocou, você é responsável por retorná-lo ao sistema operacional. Se o compilador fez coisas em seu nome, o compilador também terá incluído a limpeza necessária. Quando o seu programa sai, o SO também fará alguma limpeza.

Onde os dados reais do programa residem na RAM física do computador é completamente acadêmico. Seu sistema operacional mapeará o espaço de endereço virtual que seu programa vê na RAM física e / ou no espaço de troca. Você mesmo simplesmente não pode saber como isso é feito a qualquer momento.

Pode ser importante se você estiver programando um driver de dispositivo ou um componente do kernel, mas obviamente você não tem o conhecimento necessário sobre sistemas operacionais e programação para isso. Isso está claro na sua pergunta.
Esse software opera em um nível diferente e pode ter que interagir com a RAM física real. Existem métodos especiais e APIs para lidar com isso, mas você nunca encontrará aqueles em um programa normal escrito pelo usuário. Outra possibilidade é quando você está fazendo programação de baixo nível em um dispositivo embutido, onde não há sistema operacional para fornecer essa camada de abstração entre RAM virtual e física. Novamente: isso é algo para especialistas.

Isso simplesmente não é algo com o qual você terá que se preocupar se escrever programas corretos de acordo com as regras da linguagem de programação.
Claro: se o seu programa está incorreto (por exemplo, acessa a memória que nunca alocou), o programa pode falhar ou será encerrado pelo próprio SO, se o sistema operacional descobrir que o programa está se comportando mal. Descobrir o que deu errado e corrigir o problema no programa é um aspecto importante da programação. Isso é chamado de depuração.

    
por 22.05.2013 / 17:33
-1

Este artigo wiki descreve tudo o que você quer saber.

link

    
por 22.05.2013 / 18:06