Pergunta

Nota: Eu estou tentando estudar uma visão geral de alto nível de alocação de memória virtual

O espaço é dividido endereço virtual de um processo inteiro em páginas, de um tamanho específico:

  .text
  .bss
  .data

Será que isso também incluem espaço de pilha e pilha - ou isso é sempre não-paginável

?
Foi útil?

Solução

Primeiro nota que "páginas" são simplesmente regiões de um espaço de endereço. Uma região que é "não-paginável" (por que eu suponho que você quer dizer que não pode ser trocado para o disco) ainda é logicamente dividido em páginas, mas o OS pode implementar uma política diferente nessas páginas.

O tamanho da página mais comum é de 4096 bytes. Muitos usam suporte arquiteturas de vários tamanhos de página, ao mesmo tempo (por exemplo, páginas de 4K, bem como páginas 1MB). No entanto, sistemas operacionais muitas vezes ficar com apenas um tamanho de página, uma vez que na maioria das circunstâncias, os custos de gerenciamento de múltiplos tamanhos de página são muito mais elevados do que os benefícios que este proporciona. Exceções existem, mas eu não acho que você precisa se preocupar com eles.

Cada página virtual tem determinadas permissões ligados a ele, como se é legível, gravável, executável (varia de acordo com suporte de hardware). O sistema operacional pode usar isso para ajudar a reforçar a segurança, a coerência de cache (para memória compartilhada), e páginas trocar de memória física.

regiões

O .text, .bss e .data não precisam ser conhecidos para o sistema operacional (embora a maioria dos sistemas operacionais sei sobre eles, por razões de segurança e desempenho).

O sistema operacional não pode realmente alocar memória para uma página pilha / pilha até que a primeira vez que a página é acessada. O sistema operacional pode fornecer chamadas de sistema para solicitar mais páginas de espaço de pilha / pilha. Alguns sistemas operacionais fornecem memória compartilhada ou compartilhado funcionalidade biblioteca que leva a mais regiões que aparecem no espaço de endereço. Depende do OS.

Outras dicas

Normalmente, em um sistema operacional paginada um processa todo espaço de endereços é dividida em páginas. Cada endereço linear contém dois componentes -. Um número de página nos bits mais significativos, e um deslocamento dentro da página nos bits menos significativos

Por exemplo, com 32 bit linear endereços e páginas de 4KB, os superiores 20 bits são um número de página e os menores de 12 bits são um deslocamento página.

.data é onde as variáveis ??globais inicializados do programa leigos. .bss contém os globals sem um inicializador explícito (com um valor padrão de 0). A pilha e pilha são zonas de memória separados destes grupos e de um do outro. Toda a memória visto por um processo é toda dividida memória virtual em páginas. Um processo não ver qualquer outra coisa do que a memória virtual.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top