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

Механизмы управления памятью Windows.

1) Виртуальная память

2) Работа со стеками

3) Кучи (Heaps)

4) Файлы, проецируемые в память

1) Виртуальное адресное пространство Windows.

Виртуальная память – это совокупность программно-аппаратных средств, позволяющая пользователю составлять программы, размер которых превосходит имеющийся размер ОЗУ.

Для этого виртуальная память решает следующие задачи:

  • Размещает данные в запоминающих устройствах разного типа, например, часть в ОЗУ, часть на жестком диске.

  • Перемещает по мере необходимости данные между устройствами разного типа. Например, подгружает нужную часть программы с диска в ОЗУ.

  • Преобразует виртуальный (линейный) адрес в физический.

Все эти действия используются без участия программиста.

ОЗУ

В Windows NT, 95 каждому процессу предоставляется адресное пространство 4 Гб. Адресное пространство каждого процесса скрыто от других процессов. Каждый процесс получает доступ только к той памяти, которая принадлежит ему. Память других процессов скрыта.

1234567816 – А

1234567816 – В

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

ОЗУ в виртуальном адресном пространстве выделяется разделами. Выделения разделов различны для различных разделов. Например, в Windows из 4 Гб: 2 Гб программе, а 2 Гб ОС. В Windows 2000 advanced server теоретически можно выделить до 3 Гб. С чем связано такое расположение? Это связано с тем, что Windows NT создавалась под различные платформы, например, в MIPS 4000 так надо. Для работы с ОЗУ.

kernel32.dll

Win32API

пользовательский

ядра

В кольце 0. ntoskrnl.exe - Win NT

vmm.vxd - Win 95, 98

Документированные функции в kernel32.dll. Разбиение адресного пространства на разделы в Windows 95, 98.

FFFF:FFFF

С000:0000

5 Драйверы виртуальных устройств

BFFF:FFFF

8000:0000

4 Win32 модули системные DLL

7FFF:FFFF

0040:0000

3 Win32 процессы

003F:FFFF

0000:1000

2 MS-DOS и 16-битная Windows

0000:0FFF

0000:0000

1 MS-DOS и 16-битная Windows

Разделы 1 и 2 предназначены для совместимости с MS-DOS и 16-битной Windows. Разница в том, что 1 не доступен. При попытке доступа возникает нарушение доступа. Раздел 2 доступен по чтению/записи. Раздел 3 имеет размер 2 Гб - 4 Мб. В нем находится личное адресное пространство процесса. В Win32 никакой другой процесс не имеет доступа к этому разделу. Основной объем данных принадлежащий процессу хранится именно в этом разделе, то есть, если посмотреть заголовок, то адрес любого exe файла для Win 95, 98 будет 0040:0000. В разделе 4 размером 1 Гб Windows 95, 98 хранит данные, доступные всем Win32 процессам. Сюда загружаются kernel32.dll, gdi32.dll, user32.dll. Линейные адреса этого раздела отображаются на одни и те же страницы физической памяти, если сюда записать что-нибудь, то Windows зависнет. В разделе 5, размер которого 1 Гб, находится код ОС, то есть тот код, который находится в кольце 0. Это виртуальные драйверы, низкоуровневые процедуры управления файлами. Этот раздел также доступен всем процессам. Искажение информации в этом разделе грозит краху ОС.

Деление на разделы в Windows NT, 2000.

FFFF:FFFF

8000:0000

7FFF:FFFF

7FFF:0000

0000:FFFF

0000:0000

7FFE:FFFF

0001:0000

4 ОС

3 Для выявления указателей с неправильным значением

2 Адресное пространство процесса

1 Для выявления указателей с неправильным значением

Разделы 1 и 3 предназначены для выявления указателей с неправильным значением. При выявлении неправильного значения ОС генерирует нарушение доступа. Эти разделы "охраняют" разделы 2 и 4.

Раздел 2 - это область размером 2 Гб-128 Кб. Это личное адресное пространство конкретного процесса, причем эта область доступна данному процессу. В этой же области находятся все системные библиотеки пользовательского режима kernel32.dll и user32.dll. Если какой-либо процесс искажает системную dll, то эта ошибка скажется только на этом процессе. Если посмотреть любое exe приложение под Windows NT, Windows 2000, то начальный адрес будет 0001:0000.