Troque o gerenciamento de espaço durante a paginação por demanda pura

12

A seguir, é uma dúvida que me deparei enquanto fazia uma tarefa doméstica de SO - no entanto, parece mais baseada em conceitos do que uma pergunta simples de codificação, portanto, IMHO, não acho que a etiqueta da lição de casa seja apropriada para isso.

Em um esquema de paginação por demanda pura para vários processos em execução ao mesmo tempo, dada uma quantidade fixa de RAM e memória Swap, o que acontece nos 2 casos a seguir ocupa o espaço de troca, quando

  1. Um processo encontra uma falha de página e não há quadros livres disponíveis na RAM, exigindo, portanto, que uma das páginas do bloco de quadros do kernel do processo seja gravada para troca (por simplicidade, não estou considerando a cópia caso de gravação). Explicitamente, onde no espaço de Troca esse quadro seria gravado e quais estruturas de dados precisam ser atualizadas para isso?

  2. Quando um processo precisa paginar em uma página específica, onde fica a memória do Swap e como saberia se essa página específica estivesse presente no Swap?

Como você pode imaginar, estou tendo dificuldade em entender de que maneira gerenciar o espaço de swap durante o esquema de gerenciamento de demanda pura e quais estruturas de dados seriam essenciais. Seria ótimo se você pudesse consultar os links da sua resposta (procurei em "Conceitos de sistema operacional - 8ª edição por Silberschatz, não consegui encontrar uma resposta explícita para minha pergunta).

TCSGrad
fonte
3
Uma boa pergunta sobre o hard-core CS!
Dave Clarke

Respostas:

8

Para responder a essa pergunta, visitarei alguns pré-requisitos. A paginação por demanda pura não pode ser realizada sem o suporte de hardware. Todas as arquiteturas modernas de computadores oferecem suporte à paginação, no entanto, muitas possuem detalhes diferentes de implementação.

Os processadores x86 usam o que é chamado de tabela de páginas para rastrear os espaços de endereços virtuais e os mapeamentos de páginas, além de bits sobre privilégios de acesso e, mais relevante, se essa página está ou não presente na memória física. As violações acionam falhas de página que são capturadas pelo sistema operacional.

Para mais informações, consulte este artigo .

Para responder à questão da troca de páginas, devemos primeiro visitar a questão de como o sistema operacional controla quais páginas são usadas por qual processo e como elas são alocadas. Existem muitas estruturas de dados diferentes que podem ser usadas para isso. Uma matriz de bits simples que marca se um quadro está alocado ou não é uma maneira. Listas ou pilhas vinculadas é outra. Com paginação por demanda pura, as páginas alocadas não são realmente marcadas como presentes quando são alocadas. Isso tem o efeito de que nenhuma ram física é reservada para um processo até que ele realmente grave nele. Quando isso ocorre, o hardware lança uma falha que o sistema operacional intercepta e, em seguida, o sistema operacional usa um algoritmo de troca se não houver páginas físicas disponíveis para atribuir à página virtual já alocada.

Para mais informações sobre alocação de quadros de página, clique aqui . Lá você verá uma visão geral de algumas estruturas de dados adequadas.

Depois que um algoritmo adequado para alocação de página é implementado, outro para alocar espaço em disco para troca deve ser escolhido. O Windows, por exemplo, historicamente usou um arquivo simples no sistema de arquivos para troca de página. Eu imaginaria que, para cada nó na estrutura de dados, acompanhando as páginas alocadas, há um ponteiro associado a um deslocamento no arquivo, indicando a posição da página no disco. Os sistemas operacionais do tipo Unix tradicionalmente usam partições separadas para troca de páginas, o que é sem dúvida mais rápido, pois não existe uma camada do sistema de arquivos.

Também é possível separar as estruturas de dados do algoritmo de troca daquelas do algoritmo de alocação, no entanto, as duas estão relacionadas, portanto isso provavelmente não é feito com frequência.

Espero que isso responda à sua pergunta, apesar da relativa brevidade com que a tratei. Descobri que a melhor maneira de aprender sobre sistemas operacionais é mergulhar nos detalhes específicos da arquitetura, às vezes desagradáveis, que podem ser encontrados em sites como wiki.osdev.org e www.osdever.net, que lidam especificamente com a criação de sistemas operacionais e fornecem excelentes tutoriais em tais detalhes.

Dougvj
fonte
Sim, agora entendo como os detalhes das estruturas de dados, etc, podem variar bastante entre os sistemas operacionais - +1 nos links para osdev.org!
TCSGrad