- •Глава 8 Виртуальная память
- •8.1. Аппаратное обеспечение, управляющее структурой
- •1. В основной памяти может поддерживаться большее количество процессов.
- •8.2. Программное обеспечение операционной системы
- •2 3 2 1 5 2 4 5 3 2 5 2
- •Фиксированное распределение, локальная область видимости
- •8.3. Управление памятью bunix
- •Листинг 8.1. Алгоритм "ленивой" системы двойников
- •8.4. Управление памятью в linux
- •8.5. Управление памятью в windows 2000
- •8.6. Резюме. Ключевые термины и контрольные вопросы
- •Рекомендуемая литература
- •8.8. Задачи
- •Приложение. Хеш-таблицы
8.5. Управление памятью в windows 2000
Система управления виртуальной памятью Windows2000 (W2K) контролирует распределение памяти и работу страничной организации. Диспетчер памяти сконструирован для работы на множестве платформ и использует страницы размером от 4 до 64 Кбайт. На платформахIntel,PowerPCиMIPSразмер страницы составляет 4096 байт, а уDECAlpha— 8192 байт.
Карта виртуальных адресов W2K
Каждый пользовательский процесс W2K получает отдельное 32-битовое адресное пространство, предоставляющее процессу до 4 Гбайт памяти. По умолчанию часть памяти зарезервирована для операционной системы, так что каждому пользователю на самом деле доступны 2 Гбайт виртуального адресного пространства, и все процессы совместно используют одни и те же 2 Гбайт системного пространства. W2Kпредоставляет возможность увеличения пользовательского адресного пространства до 3 Гбайт, оставляя системе только 1 Гбайт. В документации W2K указано, что эта возможность предназначена для поддержки интенсивно использующих большое количество памяти приложений, работающих на серверах со многими гигабайтами оперативной памяти, и что использование большего адресного пространства может существенно повысить производительность таких приложений, как системы поддержки принятия решений или огромных баз данных.
На рис. 8.23 показано виртуальное адресное пространство по умолчанию, видимое пользовательскому процессу. Оно состоит из четырех областей.
• От 0х00000000 до OxOOOOFFFF: предназначено для помощи программисту в перехвате присвоений указателюNULL.
• От 0х00010000 до Ox7FFEFFFF: адресное пространство, доступное пользователю. Это пространство разделяется на страницы, которые могут быть за гружены в основную память.
• От Ox7FFFOOOOOдоOx7FFFFFFF: защитная страница, недоступная пользователю. Эта страница облегчает операционной системе проверку выхода указателя за границы блока памяти.
• От 0х00000000 до OxOOOOFFFF: системное адресное пространство. Этот 2-Гбайтовый процесс предназначен для исполняющей системы W2K, микроядра и драйверов устройств.
Страничная организация W2K
При создании процесса в принципе ему полностью доступно пользовательское пространство размером 2 Гбайт (минус 128 Кбайт). Это пространство разделяется на страницы фиксированного размера, каждая из которых может быть загружена в основную память. На практике для простоты учета страница может находиться в одном из трех состояний.
1. Доступна. Страница в настоящее время не используется процессом.
2. Зарезервирована. Множество смежных страниц, которые диспетчер виртуальной памяти предназначает процессу, но которые не учитываются в квоте памяти процесса до их использования. Когда процесс требует записи в память, часть зарезервированной памяти передается процессу.
3. Размещена. Страницы, для которых диспетчер виртуальной памяти выделяет память в страничном файле (т.е. дисковом файле, в который записываются страницы при удалении их из основной памяти).
Различие между зарезервированной и размещенной памятью (1) позволяет минимизировать дисковое пространство, предназначенное определенному процессу, тем самым сохраняя это пространство для других процессов, и (2) разрешает потоку или процессу объявить объем памяти, который будет быстро выделен при необходимости.
Схема управления резидентным множеством, используемая в W2K, — переменное распределение с локальной областью видимости (см. табл. 8.4). При первой активации процесса ему в качестве рабочего множества передается некоторое количество кадров основной памяти. Когда процесс обращается к странице, отсутствующей в памяти, одна из резидентных страниц этого процесса выгружается и на ее место загружается требующаяся страница. Рабочие множества активных процессов настраиваются во время работы с использованием следующих общих соглашений.
• При большом размере основной памяти диспетчер виртуальной памяти позволяет расти резидентным множествам активных процессов. Для этого при генерации прерывания из-за отсутствия страницы новая страница загружается в память, но старая при этом не выгружается.
• При малом размере основной памяти диспетчер виртуальной памяти возвращает память системе, удаляя давно не использовавшиеся страницы из рабочих множеств активных процессов, снижая тем самым их размеры.