Campo de endereço da tabela de páginas para página sem cache

Campo de endereço da tabela de páginas para página sem cache

De acordo com o modelo (um tanto abstrato) de tabela de páginas de Bryant e O'Hallaron em sistemas semelhantes ao Linux, cada entrada da tabela de páginas (PTE) tem um campo de endereço que contém um dos três tipos de valor: (1) o endereço físico (na verdade , o número da página) para a qual a página virtual é mapeada; (2) um identificador de localização equivalente para um dispositivo de armazenamento de longo prazo – onde a página pode ser encontrada; ou (3) 0, para uma página não alocada. Suponha que uma página tenha sido trocada do armazenamento de longo prazo para a memória principal. Nesta conta, o kernel substitui o endereço de armazenamento de longo prazo (2) pelo endereço físico (1). Agora, suponha que a mesma página da memória física precise ser removida para abrir espaço para a troca de outra página. Como o endereço de armazenamento original de longo prazo é restaurado no PTE, se ele foi substituído pelo endereço físico? Obrigado.

Responder1

Os representantes do PTEvirtualPáginas. Como você disse, quando uma página virtual está presente na memória principal, o campo de endereço do PTE conterá o número do quadro da página (PFN) físico.

Cadafísicopágina tem um arquivo struct page. Este tem:

A seguir flagsestá:

struct address_space *mapping;

Para páginas que estão no cache de páginas (uma grande parte das páginas na maioria dos sistemas), mappingaponta para as informações necessárias para acessar o arquivo que faz backup da página. Se, no entanto, a página for anônima (memória de espaço do usuário apoiada por swap), então mappingapontará para uma anon_vmaestrutura [...]

--Colocando mais na página struct, LWN.net

Em seguida, o page→indexcampo é usado para armazenar a swp_entry_testrutura das páginas anônimas. (Para páginas no cache de páginas, isso mantém um deslocamento de arquivo).

swp_entry_tcontém o índice do dispositivo de troca e a localização dentro desse dispositivo de troca.

Detalhes específicos de como isso funcionou em... 2004... podem ser encontrados emCompreendendo o Linux Virtual Memory Manager - Gerenciamento de troca, escrito por Mel Gorman.

Responder2

Não está totalmente claro para mim em sua pergunta se você está perguntando sobre mmap()arquivos ped, swap ou arquivos mapeados passivamente no cache da página, então responderei por todos.

No caso não-mmap, despejo é despejo: uma vez que a página esteja limpa, ela pode simplesmente ser descartada. Quando uma página não suportada por um arquivo é removida da memória principal, normalmente não há necessidade de restaurar nenhum endereço porque eles simplesmente causarão falha de página em uma nova entrada de cache na próxima vez que o arquivo for acessado. Uma coisa semelhante acontece no caso de troca: se falharmos em uma página de troca e mais tarde tivermos que despejar a mesma página, provavelmente forneceremos um novo endereço de troca na próxima vez e o definiremos no PTE (ou usaremos o cache de troca se a página está presente lá e está limpa).*

No caso do mmap, o ciclo de vida é controlado pela mmap()chamada do sistema. O intervalo é mapeado explicitamente para uma parte contígua da memória virtual em mmap(), e os metadados para esse mapeamento (como o FD de apoio no qual temos uma contagem de referência, o deslocamento, o tamanho, etc.) são armazenados na área de memória virtual relevante ( VMA). Mesmo quando as páginas são removidas, o VMA retém as informações de mapeamento, permitindo que o kernel saiba onde ocorrer a falha no próximo acesso.

* Na realidade, nem a troca nem a atividade geral de paginação normalmente acontecem no nível da página, mas geralmente acontecem em alguma granularidade mais baixa, como um cluster de troca ou lote de leitura antecipada.

informação relacionada