Опубликован: 27.05.2013 | Уровень: для всех | Доступ: платный | ВУЗ: Вятский государственный гуманитарный университет
Лекция 8:

Управление памятью

Трансляция адресов

Трансляция виртуального адреса – это определение реального (физического) расположение ячейки памяти с данным виртуальным адресом, т. е. преобразование виртуального адреса в физический. Принцип трансляции показан на рис.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.

Трансляция адресов

Рис. 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.

Таблица 11.1. Ограничения на виртуальную память
Тип памяти 32-разрядные Windows 64-разрядные Windows
Виртуальное адресное пространство 4 ГБ 16 ТБ (16 000 ГБ)
Пользовательское ВАП 2 ГБ; до 3 ГБ в случае использования специальных ключей при загрузке 8 ТБ
Системное ВАП 2 ГБ; от 1 до 2 ГБ в случае использования специальных ключей при загрузке 8 ТБ
Таблица 11.2. Ограничения на физическую память в клиентских версиях
Версия 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)
Таблица 11.3. Ограничения на физическую память в серверных версиях
Версия 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 наличие большего объема физической памяти, чем виртуальной памяти процесса?
Фанис Гильманов
Фанис Гильманов
Россия, г. Нижнекамск
chunhu wu
chunhu wu
Аргентина, jhkh jk k