Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os_a_win.doc
Скачиваний:
15
Добавлен:
17.11.2019
Размер:
715.26 Кб
Скачать

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

32-х битные операционные системы Windows предоставляют каждому процессу виртуальное адресное пространство размером 4Гб (232=4294967296 байт). Адресное пространство каждого процесса закрыто, и один процесс не может обратиться к памяти другого процесса.

Организация виртуальной памяти Windows

Адресное пространство процесса разбивается на разделы, каждый из которых имеет свое назначение. Распределение разделов зависит от ядра операционной системы Windows. Распределение памяти в операционных системах Windows 98 и Windows 2000 показано в таблице:

Раздел

Windows 98

Windows 2000

Для выявления нулевых указателей

0x00000000

0x00000FFF

0x00000000

0x0000FFFF

Для совместимости с программами DOS и 16-разрядной Windows

0x00001000

0x003FFFFF

Нет

Для кода данных и пользовательского режима

0x00400000

0x7FFFFFFF

0x00010000

0x7FFFFFFF

Закрытый, размером 64 Кб

нет

0x7FFF0000

0x7FFFFFFF

Для общих проецируемых в память файлов

0x80000000

0xBFFFFFFF

Нет

Для кода данных и режима ядра

0xC0000000

0xFFFFFFFF

0x80000000

0xFFFFFFFF

Рис. Организация адресного пространства процесса в Windows.

Попытка обращения по нулевому указателю является одной из самых распространенных ошибок при работе с памятью. Для выявления таких ошибок адресное пространство начинается со специального раздела, любое обращение к которому вызывает ошибку доступа к памяти.

Так как в Windows 98 все процессы работают в одном адресном пространстве, то первые 4 МБ адресного пространства резервируются для 16-ти битных программ Windows 3x и DOS. Поскольку в Windows 2000 каждый процесс работает в собственном адресном пространстве, такой регион там не требуется.

Следующий раздел памяти используется для размещения кода и данных программ. В Windows 2000 в этот раздел загружаются все выполняемые файлы и динамически загружаемые библиотеки, а также проецируемые в память файлы, используемые приложением.

В Windows 98 в этом разделе располагается только код и данные пользовательских программ и библиотек. Системные библиотеки и все проецируемые в память файлы располагаются в отдельном разделе.

После раздела пользовательского кода и данных в Windows 2000 располагается закрытый для доступа раздел размером 64 КБ который используется для упрощения выявления попыток обращений к памяти, используемой операционной системой.

В последний раздел виртуальной памяти отображаются код и данные операционной системы, включая код ядра, драйвера устройств, области ввода-вывода, таблицы страниц.

Выделение памяти процессу

Адресное пространство процесса в момент его создания практически все свободно (не зарезервировано). Для того, чтобы процесс смог использовать память, ему необходимо запросить ее у операционной системы. Операция выделения региона виртуальной памяти процессу называется резервированием (reserving). При резервировании памяти начало региона выравнивается с учетом гранулярности выделения памяти операционной системой. Для рассматриваемых операционных систем она составляет 64 килобайта.

Резервирование региона памяти еще не означает, что его можно использовать. Для завершения получения памяти необходимо запросить у операционной системы выделение физической памяти для зарезервированных адресов. Такая операция называется передачей физической памяти (committing physical storage). При этом мы можем запросить передать физическую память не всему региону, а отдельным его частям. Передача физической памяти производятся страницами, размер которых составляет 4 килобайта.

Такая двухступенчатая схема позволяет экономить оперативную память. Процесс может зарезервировать большой регион адресного пространства, а затем, по мере необходимости, выделять оперативную память. Предварительное резервирование виртуального пространства позволяет гарантировать неразрывность используемой области памяти - это пространство не может быть использовано при последующих запросах на выделение памяти. А постепенное выделение физической памяти позволит использовать ровно столько физической памяти, сколько необходимо в каждый конкретный момент. Эта схема удобна для организации хранения разряженных матриц или

Освобождение памяти тоже проходит в два этапа: во-первых, мы можем освободить физическую память, не отменяя резервирования региона. Такая операция называется возврат физической памяти (decommitting physical storage). Во-вторых, мы можем отменить резервирование – это операция освобождения (releasing) региона.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]