Управление памятью
Трансляция адресов
Трансляция виртуального адреса – это определение реального (физического) расположение ячейки памяти с данным виртуальным адресом, т. е. преобразование виртуального адреса в физический. Принцип трансляции показан на рис.11.1, здесь мы рассмотрим подробности трансляции и детали реализации в WRK.
Из рис.11.1 видно, что информация о соответствии виртуальных адресов физическим хранится в таблицах страниц. В системе для каждого процесса поддерживается множество записей о страницах: если размер страницы 4 КБ, то чтобы хранить информацию обо всех виртуальных страницах в 32 разрядной системе требуется более миллиона записей (4 ГБ / 4 КБ = 1 048 576). Эти записи о страницах сгруппированы в таблицы страниц (Page Table), запись называется PTE (Page Table Entry). В каждой таблице содержится 1024 записи, таким образом, максимальное количество таблиц страниц для процесса – 1024 (1 048 576 / 1024 = 1024). Половина от общего количества – 512 таблиц – отвечают за пользовательское ВАП, другая половина – за системное ВАП.
Таблицы страниц хранятся в виртуальной памяти (см. рис.11.2). Информация о расположении каждой из таблиц страниц находится в каталоге страниц (Page Directory), единственном для процесса. Записи этого каталога называются PDE (Page Directory Entry). Таким образом, процесс трансляции является двухступенчатым: сначала по виртуальному адресу определяется запись PDE в каталоге страниц, затем по этой записи находится соответствующая таблица страниц, запись PTE которой указывает на требуемую страницу в физической памяти.
Откуда процесс знает, где в памяти хранится каталог страниц? За это отвечает поле DirectoryTableBase структуры KPROCESS (файл base\ntos\inc\ke.h, строка 958, первый элемент массива). Схема трансляции адресов показана на рис.11.3.
Записи PDE и PTE представлены структурой MMPTE_HARDWARE (base\ntos\mm\i386\mi386.h, строка 2508), содержащей следующие основные поля:
- флаг (однобитовое поле) Valid: если виртуальная страница расположена в физической памяти, Valid = 1;
- флаг Accessed: если к странице были обращения для чтения, Accessed = 1;
- флаг Dirty: если содержимое страницы было изменено (была произведена операция записи), Dirty = 1;
- флаг LargePage: если страница является большой (4 МБ), LargePage = 1;
- флаг Owner: если страница доступна из пользовательского режима, Owner = 1;
- 20 битовое поле PageFrameNumber: указывает номер страничного фрейма (PFN, Page Frame Number).
В поле PageFrameNumber хранится номер записи в базе данных PFN – системной структуре, отвечающей за информацию о страницах физической памяти. Запись PFN представлена структурой MMPFN (файл base\ntos\mm\mi.h, строка 1710) и подробно описана в [5, стр. 502].
Ошибки страниц
Страница может находиться либо в физической памяти (ОЗУ), либо на диске в файле подкачки.
Если в записи PTE флаг Valid = 1, то страница находится в физической памяти и к ней можно обращаться. Иначе (Valid = 0) – страница недоступна процессу. При попытке доступа к такой странице возникает страничная ошибка (page fault) и вызывается функция MmAccessFault (файл base\ntos\mm\mmfault.c, строка 101).
Причин страничных ошибок существует множество (см. [Руссинович и др., 2008, стр. 463]), мы рассмотрим только одну – страница выгружена в страничный файл (файл подкачки). В этом случае запись PTE имеет тип MMPTE_SOFTWARE (файл base\ntos\mm\i386\mi386.h, строка 2446) и вместо поля PageFrameNumber имеет 20 разрядное поле PageFileHigh, отвечающее за расположение страницы в страничном файле.
Страничные файлы описываются структурой MMPAGING_FILE (base\ntos\mm\mi.h, строка 4239), имеющей следующие поля:
- Size – текущий размер файла (в страницах);
- MaximumSize, MinimumSize – максимальный и минимальный размеры файла (в страницах);
- FreeSpace, CurrentUsage – число свободных и занятых страниц;
- PageFileName – имя файла;
- PageFileNumber – номер файла;
- FileHandle – дескриптор файла.
В 32 разрядных Windows поддерживается до 16 файлов подкачки размером до 4095 МБ каждый. Список файлов подкачки находится в ключе реестра HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PagingFiles. Соответствующий системный массив MmPagingFile[MAX_PAGE_FILES] типа PMMPAGING_FILE описывается в файле base\ntos\mm\mi.h (строка 8045).
Пределы памяти
В таблицах 8.1, 8.2 и 8.3 приведены ограничения на виртуальную и физическую память в 32 разрядных и 64 разрядных операционных системах Windows.
Тип памяти | 32-разрядные Windows | 64-разрядные Windows |
---|---|---|
Виртуальное адресное пространство | 4 ГБ | 16 ТБ (16 000 ГБ) |
Пользовательское ВАП | 2 ГБ; до 3 ГБ в случае использования специальных ключей при загрузке | 8 ТБ |
Системное ВАП | 2 ГБ; от 1 до 2 ГБ в случае использования специальных ключей при загрузке | 8 ТБ |
Версия Windows | 32-разрядные | 64-разрядные |
---|---|---|
Windows XP | От 512 МБ (Starter) до 4 ГБ (Professional) | 128 ГБ (Professional) |
Windows Vista | от 1 ГБ (Starter) до 4 ГБ (Ultimate) | от 8 ГБ (Home Basic) до 128 ГБ (Ultimate) |
Windows 7 | от 2 ГБ (Starter) до 4 ГБ (Ultimate) | от 8 ГБ (Home Basic) до 192 ГБ (Ultimate) |
Версия Windows | 32-разрядные | 64-разрядные |
---|---|---|
Windows Server 2003 R2 | От 4 ГБ (Standard) до 64 ГБ (Datacenter) | От 32 ГБ (Standard) до 1 ТБ (Datacenter) |
Windows Server 2008 | От 4 ГБ (Web Server) до 64 ГБ (Datacenter) | От 32 ГБ (Web Server) до 1 ТБ (Datacenter) |
Windows Server 2008 R2 | нет 32 разрядных версий | от 8 ГБ (Foundation) до 2 ТБ (Datacenter) |
Резюме
В лекции изучаются такие важные понятия как виртуальная и физическая память, виртуальное адресное пространство, рабочий набор процесса, файл подкачки. Рассматриваются структура виртуального адресного пространства процесса, способы выделения памяти процессам, дескрипторы виртуальных адресов, ошибки страниц. Описывается процесс трансляции виртуальных адресов в физические. Приводятся ограничения на размер виртуальной и физической памяти в различных версиях Windows.
Следующая лекция посвящена принципам обеспечения безопасности в Windows.
Контрольные вопросы
- Дайте определение "виртуальной памяти". Чем виртуальная память отличается от физической?
- Нарисуйте структуру виртуального адресного пространства в 32 разрядной системе Windows.
- Что такое страница памяти? Какие страницы используются в Windows?
- Опишите достоинства и недостатки различных способов выделения памяти.
- Опишите процесс трансляции адресов. Какую роль в этом процессе играют таблицы страниц? Каталоги страниц?
- Возможно ли в 32 разрядной системе Windows наличие большего объема физической памяти, чем виртуальной памяти процесса?