Note que page directories, page-table, e reserved pages não são trocadas, roubadas ou envelhecidas.

Eles são mapeadas no process page directories com reserved page tables. Eles são liberados somente na saída do processo.
The page Fault Handles Quando um processo é criado por fork, ele começa com um page directoru e uma página ou mais do executável. Deste modo the page fault handles é a forte da maioria da memória do processo.

The page fault handles do page-fault ( ) recupera o endereço faltando no registro c r 2. O código do erro ( recobrado no sys-call.s) diferencia o acesso do user / supervisior e a região para o fault-write proteção de uma página faltando. O anterior é sustentado pelo do-wp-page ( ) e o posterior pelo do-no-page ( ).

Se o endereço falatando é maior do que Task-Size, o processo recebe um SIGKILL [ Por que este controle? Isto pode acontecer somente em Kernel mode por causa da proteção do nível do segmento.

Estas rotinas tem algumas sutilezas como elas podem ser chamadas num interrompimento. Você não ode supor que é a tarefa corrente que está executando de-no-page ( ) sustenta três situações possíveis:

1) A página é trocada
2) A página pertence a biblioteca executável ou dividida.
3) A página está faltando – uma página de dados não foi distribuída

Em todas as causas get-empty-pgtable ( ) é chamada primeiro para assegurar a existência de uma page table que cobre o endereço falatando.

No terceiro para providenciar uma página no endereço requerido e no caso de uma página trocada, swap-in ( ) é chamado. No segundo caso, o handles calls share-page ( ) para ver se a página pode ser dividida com algum outro processo.

Se isto falhar leia a página do executável ou biblioteca (Isto repete a chamada para Share-page ( ) se um outro processo fez o mesmo enquanto isso). Qualquer porção da página fora do valor brK é zerada.

A página lida do disco é contada como um erro maior. Isto acontece com um swap-in ( ) ou quando é lida da executável ou uma biblioteca.

Outras casos são consideradas erros menores (mim-flt). Quando uma página divisível é achada ela é corite-protected. Um processo que escreve para uma página dividida vai precisar passar por um do-wp-page ( ) que faz o copy-on-write. Do-wp-page ( ) faça o seguinte:

• Mande SIGSEGV se qualquer usar process o está escrevendo para o corrente code-space.
• Se a página velha não é dividida, então simplesmente não proteja-o.
Senão get-free-page ( ) and copy-page ( ). A página adquirire a bandeira suja da página velha. Diminua a conta do mapa da página velha.


4.6 – Paginando (Paging)

Paginando é a troca numa base da página melhor do que os processos inteiros. Nós vamos usar trocando aqui para referir à "paginando" , uma vez que apenas Linux página, e não trocar, e pessoas são mais acostumadas à palavra "Swap" / "trocar" do que "page" / "paginar".

Kernel pages nunca são trocadas páginas limpas também não são escritas para trocar. Elas são liberadas e recarregadas quando é requerida.

O trocador mantém um único bit de informação de envelhecimento nas Páginas acessadas bit da page table cutries -[ O que são os detalhes de manutenção? Como isto é usado?]

Linux suporta múltiplos swap files ou projetos que podem ser ligados ou desligados pelas ligações de swapoff system. Cada swap file ou projeto é descrito por uma strut-swap-info.

O campo das bandeiras (SWP-USED ou SWP-WRITE ok) é usado para controlar acesso para o swap files. Quando SWP- WRITE ok é desligado, o espaço não vai ser distribuído neste arquivo. Isto é usado por Swapoff quando isto tenta de não usar um arquivo. Quando swapoff adiciona um arquivo de troca nova isto aplica SWP-USED.

Um variável imóvel no Swap files armazena o número dos arquivos ativos correntemente ativos.

Os campos lowest – bit e hihgest – bit limitam a região livre na pasta de troca e são usadas para adiantar a procura por espaço de troca livre. O programa do usuário m | < swap inicializa um swap device ou file.

A primeira página contém uma assinatura (swap-space) nos últimos 10 bytes, e contém um mapa de bit. Inicialmente 1's no bitmap significam páginas ruins A'1' no bitmap significa que a página correspondente é livre.

Esta página nunca é distribuída deste modo a inicialização precisa ser feita somente uma vez. The Syscall Swapor ( ) é chamado pelo user program swapon tipicamente de / etc / rc.

Algumas páginas da memória são distribuídas por swap-map e swap-lockmap, swap-map contém um byte para cada página no swapfile.

Isto é inicializado do bitmap para conter 0 para páginas disponíveis e 128 para páginas que não pode ser usadas. Isto é para manter uma conta das petições da troca em cada página no swap file.

Swap-lockmap contém um bit para cada página que é usada para assegurar exclusão mútua quando lendo ou escrevendo swap-files.

Quando uma página da memória está para ser trocada, um índice para posição da troca é obtido com uma chamada para get-swap-page ( ). Este índice é deste modo guardado em bits 1-31 da page table entry para que a página trocada possa ser localizada pela page fault handles, do-no-page ( ) quando necessário.

Os 7 bits mais altos do índice dão o swap file ( ou projeto) e os 24 bits mais baixos dão o número da página neste projeto. Isto faz até 128 swap files, cada um com espaço para mais ou menos 64 Gb, mas o espaço em cima devido o swap map seria grande. Ao invés o tamanho do swap file é limitado para 16 Mb, porque o swap map então toma 1 página.

A função swap-duplicate ( ) é usado por copy-page-tables ( ) para deixar o processo da child herdar páginas trocadas durante um fork. Isto somente incrementa a conta mantendo no Swap-map para aquela página.

Cada processo vai trocar numa cópia da página separa quando acessá-la. Swap-free diminui a conta mantendo no swap-map. Quando a conta abaixa para 0 a página pode ser redistribuída por get-swap-page ( ).

Isto é chamado cada vez que uma página trocada é lida na memória ( swap-inc ) ou quando uma página está para ser descartada ( free-one-table ( ), etc ).

Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Páginas ( 7 de 14 ): « Previous123456 7 891011121314Next »