Sistemas Operativos
Gestão de memória no Windows NT
João Pedro Patriarca (jpatri@cc.isel. ipl.pt)
Centro de Cálculo
Instituto Superior de Engenharia de Lisboa
“Windows Internals”, Russinovich, cap. 9, Memory Management “Windows Via C/C++”, Richter, cap. 13, cap. 14.
MSDN, http://msdn.microsoft.com/en-us/library/aa366779(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/ms684884(v=vs.85).aspx
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Layout da área de sistema
NTLDR loads the kernel, HAL, and boot drivers here. The kernel then relocates the drivers to the
system PTE area.
Additional system PTEs, system cache, or special pool System mapped views
Session space Page tables
Hyperspace and process working set lists System cache structures
System cache
Start of paged system area System PTE area Nonpaged system area Crash dump driver area Reserved for HAL usage 0x80000000
0xFFFFFFFF
Lista de frames na base de dados PFN (Page Frame Number)
• PFN – array de estruturas que
representam as frames da
memória principal
• Estados das frames
– Active (valid)
– Standby
– Modified
– Free
– Zeroed
– Bad
– ...
• As frames Bad e Active não estão
em nenhuma lista
Active
Active
Active
.
:
PFN DatabaseZeroed
Free
Standby
Bad
Modified
bib: Windows Internals, fig. 9-38, Russinovich (simplificado)
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Diagrama de estados das Page Frames
Proccess
working
sets
Standby
page list
Modified
page
writer
Modified
page list
Free
page
list
Zero
page
thread
Zero
page
list
Working set replacementPage read from disk or kernel allocations Demand-zero page faults “Soft” page faults
Relação entre Page Tables e Page Frame Number
Database
In use Standby list In use In use Modified list . : PFN Database Valid Invalid: disk address Invalid: transition . : Process 1 Page Table Valid Invalid: disk address Valid . : Process 2 Page Table Invalid Invalid: transition Invalid: disk address . : Process 3 Page Table Prototype PTECCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Copy-on-write
• Otimização com o intuito de preservar a memória física
• A secção
de uma
pode ser marcada como
– Na primeira escrita é criada uma nova página privada marcada como
Read/Write para o processo que promoveu a escrita
• Passos:
– A exceção gerada é apanhada e o gestor de memória verifica se se trata
de uma página marcada como
– Em vez de reportar a exceção como um acesso de violação
• aloca uma página Read/Write na memória principal
• copia a página original para a nova página
• atualiza a informação de mapeamento da página
• executa novamente a instrução que provocou a excepção
• a nova execução e respectiva escrita já terá sucesso
– Cada processo que promova uma escrita na página obterá a sua própria
cópia privada
Working set
•
Carregamento
com clustering (pre-paging). São carregadas em antecipação
entre 1 a 8 páginas na vizinhança da página em falta
•
Substituição
– As políticas do Windows NT tem como objetivo manter (em situações de
escassez de memória) o conjunto de páginas físicas de cada processo
(resident set) o mais possível próximo do seu working set. Baseiam-se na
existência de limites (dinâmicos) que especificam o mínimo e máximo working
set do processo.
– Uma thread a executar em modo kernel, denominada de Balance Set Manager,
percorre periodicamente (em cada segundo) os espaços de endereçamento de
cada processo (começando dos antigos e grandes até aos novos e pequenos)
•
Primeiro, os limites mínimo e máximo dos working sets de cada processo são
ajustados de acordo com o número de page faults que ocorreram no processo
•
Depois disso são percorridas as tabelas que mapeiam o espaço de endereçamento
do processo. Para cada página, se esta não tiver marcada como acedida, é
incrementando um contador, associado à página. Caso contrário é feito reset ao
respetivo bit, e o contador é colocado a zero
•
Em caso de necessidade (se houver poucas page frames livres) são libertadas
páginas do processo que não tenham sido acedidas há mais tempo (aquelas cujo
contador está acima de determinado threshold) - variante local do algoritmo Clock
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Informação sobre memória no Task manager
Total de
memória
committed (incluindo
Paging files)
Memória RAM
disponível para OS
e aplicações
Somatório das listas
standby e modified
Memória utilizável de
imediato: somatório
das listas standby, free
e zeroed
Máximo de memória
committable
(incluindo
Subsistema Windows – Windows API
Kernel32.dll, Windows.h
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Subsistema Windows – Windows API
Subsistema Windows – Windows API
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Subsistema Windows – Windows API
Deve ter direitos de acesso
e
GetSystemInfo
GlobalMemoryStatusEx
GetPerformanceInfo
GetProcessMemoryInfo
•Apresenta informação global do sistema (3 primeiras funções)
•De 1 em 1 segundo apresenta ProcessMemoryInfo
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Alocação de memória / Espaços de endereçamento virtual
– Aloca região com dimensão quase sempre múltipla de 64 KB
• Campo
da estrutura
– Endereço base da região alocada alinhado com a dimensão de uma página
– Em termos de modelo de dados interfere nas VADs apenas (não são criadas
PTEs)
– Qualquer acesso gera violação de acesso
• Usado na gestão do espaço que um stack ocupa em memória
– Aloca região com granularidade igual à dimensão da página
– Pode alocar sobre uma região reservada
– Em termos de modelo de dados interfere nas PTEs e no Page File
– Garante existência de espaço no Page File para guardar região committed
– A página é alocada na memória principal apenas no primeiro acesso
Virtual Address Descriptors (VADs)
Range: 20000000 through 2000FFFF Protection: Read/Write Inheritance: Yes Range: 00002000 through 0000FFFF Protection: Read-only Inheritance: NoRange: 4E000000 through 4F000000 Protection: Copy-on-write
Inheritance: Yes
Range: 32000000 through 3300FFFF Protection: Read-only
Inheritance: No
Range: 7AAA0000 through 7AAA00FF Protection: Read/Write
Inheritance: No
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Page Faults
Razões para Page Faults Consequências do Page Fault
Acesso a página que não está residente em memória principal mas presente em disco
Aloca uma frame e lê a página do disco (“hard”
page fault)
Acesso a página presente nas listas standby ou modified
Coloca a página como válida actualizando a PTE do processo (“soft” page fault)
Acesso a página não presente na PT Violação de acesso
Acesso a página kernel a partir de user Violação de acesso
Escrita numa página read-only Violação de acesso
Acesso a uma demand-zero page Adiciona uma página com zeros ao working set
Escrita numa página guard page Violação guard page (se acesso ao user stack
expande-o)
Escrita numa página copy-on-write Copia a página para uma página privada ao
processo Escrita numa página válida mas que ainda não foi
escrita para o seu backing store
Coloca a 1 o bit dirty da PTE Executa código numa página marcada como não
executável
Violação de acesso (apenas presente em
Termos relevantes (glossário)
• Page: página no âmbito do espaço de endereçamento do processo
• Page Frame: página no âmbito da memória principal
• Page File: ficheiro na memória secundária (disco) que guarda
Frames da memória principal
• Resident set: quantidade de páginas presentes na memória principal
• Working set: conjunto de páginas que um processo deverá ter em
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Subsistema Windows – Windows API
– alocação de memória virtual
–
endereço virtual base onde se pretende alocar a região
• A função retorna 0 caso não exista espaço livre para a região especificada
–
NULL caso não seja relevante a localização da região
:
| [
]
–
Usadas em OR para reservar e commit na mesma chamada
•
A função
retorna
em caso de insucesso
:
:
igual ao endereço retornado pelo igual a 0
Kernel32.dll, Windows.h
Atributos de proteção de uma Page
Atributos de protecção
Descripção (violação nos acessos)
Leitura, escrita e execução
Escrita e execução
Execução
Leitura e escrita
Escrita
Nenhuma violação
Violação na execução;
Na escrita, o sistema cria cópia privada com
atributos read/write para o processo
Nenhuma violação;
Na escrita, o mesmo de cima
Podem ser combinados (OR bit a bit) com os
anteriores excepto
VirtualAlloc
•Observar com o VMMap o estado das páginas nas diferentes
fases do programa:
– Após reserva de um bloco
– Após commited de uma página
– Após acesso de escrita
Subsistema Windows – Windows API
– estado de uma região de páginas
VirtualQuery
•Aplicação consola equivalente à ferramenta VMMap baseado
Subsistema Windows – Windows API
– estado da(s) página(s) de um processo
QueryWorkingSet
•Determinar o número de páginas do espaço de
endereçamento do utilizador de um processo que não são
partilháveis
Subsistema Windows – Windows API (passo 1)
Mapeamento de dispositivos ficheiro –
Kernel32.dll, Windows.h
Retorna (-1)
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Subsistema Windows – Windows API (passo 2)
Memory Mapped Files
• Forma para associar ficheiros presentes em disco no espaço de
endereçamento de um processo
– Mapear um ficheiro em disco no espaço de endereçamento local
– Carregar em memória ficheiros EXE e DLLs
– Partilha de memória entre vários processos (na ausência de ficheiro)
• As páginas removidas da memória principal são mantidas no ficheiro
em disco
Subsistema Windows – Windows API (passo 3)
Mapeamento de uma vista do ficheiro –
• Realiza a reserva e commit no espaço de endereçamento do
processo para uma vista do ficheiro
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT
Subsistema Windows – Windows API (passos 4, 5 e 6)
Libertação de memória e dos objetos criados
•
Especiais cuidados se a vista foi mapeada com o atributo
•
Forçar a escrita em disco
•
Usado para fechar um objecto kernel (objectos obtidos por
e
)
•
A ordem de chamada é indiferente e pode acontecer antes da chamada de
CreateFile
CreateFileMapping
MapViewOfFile
•Demo com o atributo de acesso FILE_MAP_COPY
•Exemplo de utilização: leitura das últimas mensagens
CCISEL Sistemas Operativos: Gestão de Memória no Windows NT