Главная
К библиотеке


Память в Windows NT

 

Обзор памяти

Windows NT имеет 32-битное линейное пространство памяти (здесь "линейное" означает линейность адресов памяти, примером нелинейного адресного пространства является сегментная организация памяти Intel x86). Каждому приложению доступно собственное адресное пространство размером 4 гигабайта. Обычно, верхние два гигабайта зарезервированы для системных нужд и доступны только процессам работающим в привилегированном режиме (privileged mode). В Windows NT Server 4.0 Enterprise Edition существует возможность увеличить адресное пространство доступное пользовательским приложениям путем уменьшения максимального размера памяти, отводимого ядру с 2Gb до 1. Для более полной информации об этом рекомендую почитать статью  Q171793 в Knowledge Base.

Обзор менеджера памяти

Как нетрудно догадаться, менеджер памяти (memory manager) управляет памятью в Windows NT. Физическая память разделена на блоки - страницы (pages) размером 4K для Intel, PPC и MIPS платформ и 8K для DEC Alpha. Страница является в некотором смысле атомарным объектом для менеджера памяти: все его операции над памятью сводятся к операциям над страницами.

В Windows NT страницы памяти могут быть сброшены на диск (paged), при этом они помещаются в файл подкачки (page file). Однако, не каждая страница может быть сброшена на диск: в NT все системные объекты храняться в так называемых пулах (pools):

  • сбрасываемый пул (paged pool) хранит объекты, которые могут быть при необходимости сброшены на диск
  • несбрасываемай пул (non-paged pool) хранит объекты, которые не могут быть сброшены на диск ни при каких обстоятельствах

В несбрасываемом пуле храняться, например ядро системы и драйвера, если в реестре в ключе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management параметр DisablePagingExecutive имеет значение 1. Пользовательские приложения используют обычно сбрасываемый пул.

С каждым процессом ассоциирован рабочий набор (working set) - множество страниц, находящихся в физической памяти, доступных процессу. С ростом объемы физической памяти в системе рабочие наборы также растут, а при уменьшении, соответственно, уменьшаются. Если процесс в ходе выделения памяти превысил максимальный размер рабочего набора, то его рабочий набор урезается (trim), в ходе чего наиболее "старые" страницы сбрасываются на диск. 

Выделение памяти в NT аналогично UNIX. Когда процесс запрашивает память, то фактически, выделения памяти не происходит, а менеджер памяти просто резервирует какое-то количество адресов за процессом. Это множество адресов называют зарезервированной памятью (reserved memory). При попытке процесса впервые воспользоваться полученным адресным пространством, память выделяется процессу и для нее резервируется место в файле подкачки. Такая память называется выделенной (committed).

Память, которая не является выделенной или зарезервированной называется доступной памятью (available memory).

Если процесс обращается к некоторой странице и она не может быть найдена в рабочем наборе процесса, то возникает исключение сбой страницы (page fault). При этом, если нужная страница была найдена в физической памяти, то эта ситуация называется легким сбоем страницы (soft page fault). Если же нужная страница должна быть подгружена с диска, то ситуация называется тяжелым сбоем страницы (hard page fault).

Файл подкачки

Файл подкачки pagefile.sys хранит либо сброшенные страницы, либо зарезервированное место для страниц выделенной памяти. Это отличается от файла подкачки в Win9x, где при выделении памяти для нее не резервируется место в файле подкачки, и, поэтому, можно иметь файл подкачки нулевого размера.


Материал с сайта http://win-all.ru
Hosted by uCoz