Архитектура памяти в Windows
ЧАСТЬ III УПРАВЛЕНИЕ ПАМЯТЬЮ
ГЛАВА 13Архитектура памяти в Windows
Архитектура памяти, используемая в операционной системе, — ключ к пониманию
того, как система делает то, что она делает. Когда начинаешь работать с новой операционной системой, всегда возникает масса вопросов Как разделить данные между двумя приложениями? Где хранится та или иная информация? Как оптимизировать свою программу? Список вопросов можно продолжить.
Обычно знание того, как система управляет памятью, упрощает и ускоряет поиск ответов па эти вопросы. Поэтому здесь мы рассмотрим архитектуру памяти, применяемую в Microsoft Windows.
Поскольку каждому процессу отводится закрытое адресное пространство, то, ког да в процессе выполняется какой-нибудь поток, он получает доступ только… NOTE: В Windows 2000 память, принадлежащая собственно операционной системе,… Итак, как я уже говорил, адресное пространство процесса закрыто. Отсюда вытекает, что процесс А в своем адресном…
Как видите, ядра 32- и 64-разрядной Windows 2000 создают разделы, почти одинаковые по назначению, но отличающиеся по размеру и расположению. Однако… Таблица 13-1. Так адресное пространство процесса разбивается на разделы
NOTE: Microsoft активно работает над 64-разрядной Windows 2000. На момент напиcания книги эта система все еще…
Резервируя регион в адресном пространстве, система обеспечивает еще и кратность размера региона размеру страницы. Так называется единица объема… тоже будет работать со страницами размером 8 Кб. Однако в зависимости от… NOTE: Иногда система сама резервирует некоторые регионы адресного пространства в интересах Вашего процесса, например,…
Передавая физическую память регионам, нет нужды отводить ее целому региот Можно, скажем, зарезервировать регион размером 64 Кб и нередать физическую… Когда физическая память, переданная зарезервированному региону, больше не…
ющие вплоть до 16 Мб памяти Современные операционные системы умеют имитировать память за счет дискового пространства. При этом на диске создается… Разумеется, операции с виртуальной памятью требуют соответствующей поддержки… С точки зрения прикладной программы, страничный файл просто увеличивает объем памяти, которой она может пользоваться…
WINDOWS 2000
Windows 2000 может использовать несколько страничных файлов, и, если они…
На процессорных платформах x86 и Alpha атрибут PAGE_EXECUTE не поддерживается, хотя в операционных системах такая поддержка предусмотрена… WINDOWS 98 В Windows 98 страницам физической памяти можно присвоить только… Защита типа «копирование при записи»
Флаг PAGE_NOCACHE отключает кэширование переданных страниц. Как правило, использовать этот флаг не рекомендуется; он предусмотрен главным образом… Флаг PAGE_WRITECOMBINE тоже предназначен для разработчиков драйверов… Флаг PAGE_GUARD позволнет приложениям получать уведомление (через механизм исключений) в тот момент, когда на страницу…
Карта в таблице 13-2 показывает регионы, расположенные в адресном пространстве процесса. Каждому региону соответствует своя строка в таблице, а… В первом (крайнем слева) поле проставляется базовый адрес региона. Наверное,… ства, который начинается по адресу 0x7FFE0000. Все регионы непрерывны. Почти все базовые адреса занятых регионов…
Таблица 13-3. Образец карты адресного пространства процесса (с указанием блоков внутри регионов) в Windows 2000 на 32-разрядном процессоре типа… Разумеется, в свободных регионах блоков нет, поскольку им не переданы страни… В первом поле показывается адрес группы страниц с одинаковыми состоянием и атрибутами защиты. Например, по адресу…
Таблица 13-4. Образец карты адресного пространства процесса (с указанием блоков внутри регионов) в Windows 98
Главное отличие двух карт адресного пространства в том, что под управлением… Наверное, Вы заметили, что размер большинства регионов кратен 64 Кб (это значение определяется гранулярностью…
Процессоры работают эффективнее, когда имеютдело с правильно выровненными данными. Например, значение типа WORD всегда должно начинаться с четного… Вот фрагмент кода, обращающийся к невыровненным данным:
VOID SomeFunc(PVOID pvDataBuffer) {