# Falta de página

Uma falta de página ou falha de página (page fault em inglês), no contexto da tecnologia da memória dos computadores, é uma interrupção (ou exceção) disparada pelo hardware quando um programa acessa uma página mapeada no espaço de memória virtual, mas que não foi carregada na memória física do computador. Uma página é um bloco de memória de tamanho fixo, utilizada como uma unidade de transferência entre a memória física e um dispositivo de armazenagem externo como, por exemplo, um disco rígido.
O dispositivo de hardware que detecta esta situação é a unidade de gerenciamento de memória do processador. O software de tratamento de exceção, que trata a ocorrência de falta de página, é geralmente parte do sistema operacional. O sistema operacional tenta tratar esta ocorrência fazendo a página acessível em uma locação da memória física ou interrompendo a execução do processo em caso de acesso ilegal.

## Faltas de página não são fatais

As faltas de página além de não serem fatais são ocorrências comuns e necessárias para possibilitar o aumento da memória disponível para os programas em qualquer sistema operacional que utiliza memória virtual, como o Microsoft Windows e o Linux.

## Razões para a ocorrência de faltas de página

O hardware gera interrupções de falta de página quando:
* a página correspondente ao endereço requisitado não está carregada na memória;
* a página correspondente ao endereço de memória acessado está carregada, mas o seu estado corrente não foi atualizado no hardware.
Uma exceção relacionada com a falta de página é conhecida como falha de proteção (protection fault em inglês) e é gerada para acessos de página quando:
* a página não é parte do programa, e portanto não é mapeada na memória do programa;
* o programa não tem privilégios suficientes para ler ou escrever a página;
* o acesso à página é legal, mas está mapeada como página sob demanda.
Uma exceção de falha de proteção pode ser gerada para muitos outros acessos inválidos que não são relacionados com a paginação.
Na arquitetura x86, uma tentativa de acesso a uma página em falta ou um acesso que não esteja em conformidade com os atributos de permissão da página requisitada são informados através do processador de falta de páginas. Internamente, o processador provê informação para o dispositivo de tratamento de falta de páginas que, por sua vez, indica que tipo de acesso disparou a falta, para que estes cenários possam ser diferenciados na perspectiva do sistema operacional. O uso do termo "falha de proteção" (quando utilizado em relação às faltas de página) não deve ser confundido com a exceção de falha geral de proteção, que é utilizada em casos de sinalização de violações de segmentação, assim como em uma variedade de outras violações gerais de proteção (como a utilização de uma instrução que não é válida no nível corrente de privilégio).
| Página mapeada | Página carregada | Estado da página | Acesso válido | Exceção |
| sim | sim | presente | sim | sem exceção |
| sim | -- | não presente | sim | falta de página |
| não | -- | -- | -- | falha de proteção |
| -- | -- | -- | não | falha de proteção |

## Grau importância da falta de página
### Menor

Se a página se encontra na memória no momento em que a falta é gerada, mas o seu estado não é atualizado no hardware como "presente", esta falta é considerada de menor importância ou "leve". Isto pode ocorrer se a memória é compartilhada por diferentes programas e a página já foi levada à memória por outros programas. Como estas faltas não envolvem latência relacionada com o disco, a resolução é mais rápida que as faltas de página de maior importância.

### Maior

Se uma página não se encontra na memória no momento em que uma página de falta é gerada, esta falta é considerada de maior importância ou também chamado por alguns sistemas de falta grave. Este tipo de falta não pode ser resolvida de maneira tão rápida como a descrita anteriormente, devido à latência do acesso ao disco necessária para obter a página em falta. Este é o mecanismo utilizado pelos sistemas operacionais para aumentar o montante de memória disponível aos programas. O sistema operacional posterga o carregamento de partes do programa situados no disco até que o programa tenta utilizar estas partes e uma falta de página é gerada.

## Falta de página inválida

Um sistema pode gerar uma "falta de página" inválida se um programa tentar acessar a memória referenciada por um ponteiro nulo, de forma alternativa à geração de uma "falta de página" simples. Neste caso o sistema operacional mapeia uma página "falsa" (dummy) para capturar os ponteiros nulos.

## Tratamento de acesso ilegal e falta de página inválida

Os sistemas operacionais, como o Windows ou Unix, disponibilizam diferentes mecanismos para a geração de informações a cerca de erros causados por faltas de página. O Windows utiliza tratamento estruturado de exceção para informar faltas de páginas baseadas em acessos inválidos como exceções de violação de acesso. Os sistemas baseados no Unix normalmente utilizam sinais, como o SIGSEGV, para reportar estas condições de exceção para os programas.
Se o programa que recebe a exceção não a trata, o sistema operacional normalmente realiza algum tipo de ação padrão, tipicamente envolvendo o término do processo em execução que causou e a notificação do usuário que o programa apresenta mal funcionamento.

## Desempenho

As faltas de página, pela sua própria natureza, degradam a performance de um programa de computador ou sistema operacional. Abordagens de otimização que reduzem a ocorrência de faltas de página melhoram o desempenho do programa e mesmo do sistema por completo. Um esforço de otimização pode passar pela redução do uso total de memória e pela melhora da localidade da memória. Geralmente, se o total de memória física disponível for aumentado a ocorrência de faltas de páginas diminuirá. Muitos algoritmos de paginação foram propostos, alguns baseados em heurística, para reduzir a ocorrência de faltas de páginas.