МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра вычислительной техники
отчет
по лабораторной работе №4
по дисциплине «Операционные системы»
Тема: «Управление памятью»
|
Студент гр. 6307 |
|
Лазарев С. О. |
|
Преподаватель |
|
Тимофеев А. В. |
Санкт-Петербург
2018
Задание 4.1. Исследование процесса трансляции виртуальных адресов в 64-разрядной операционной системе Windows

Рис. 4.1. Просмотр размеров списков страниц виртуальной памяти

Рис. 4.2. Вывод базовых сведений об управлении памятью
Выбран процесс ETDCtrl.exe (cid = 2C88).

Рис. 4.3. Информация о выбранном процессе для исследования

Рис. 4.4. Просмотр информации о регионах виртуального адресного пространства выбранного процесса

Рис. 4.5. Просмотр подробной информации о выбранном регионе виртуального адресного пространства

Рис. 4.6. Переключение контекста процессора

Рис. 4.7. Преобразование виртуального адреса ячейки в физический адрес

Рис. 4.8. Чтение физического адреса. В начале страницы размещена сигнатура MZ.
Вывод: Используемые программами адреса называются виртуальными и транслируются в физические адреса в памяти компьютера в ходе выполнения программы. Каждый процесс при запуске получает свое собственное виртуальное адресное пространство.
Задание 4.2. Исследование виртуального адресного пространства процесса

-
Выполнение пункта меню 1 – просмотр информации о вычислительной системе;
(функция winapi – GetNativeSystemInfo)

-
Выполнение пункта меню 2 – просмотр информации об использовании операционной системой виртуальной и физической памяти;
(функция winapi – GlobalMemoryStatusEx)

-
Выполнение пункта меню 3 – просмотр информации о состоянии участка виртуальной памяти;
(функция winapi – VirtualQuery)

-
Выполнение пункта меню 4 – поочередное резервирование и передача физ. памяти;
(функция winapi – VirtualAlloc)
-
Автоматический режим:

Получим информацию с помощью virtual query о начальном адресе региона зарезервированных страниц:

-
Режим ввода адреса с клавиатуры:

Получим информацию с помощью virtual query о базовом адресе региона зарезервированных страниц

Получим информацию с помощью virtual query о введенном изначально адресе для резервирования 9 байт:

Информация об
адресе сдвинутом на величину страницы
=
=
относительно начального адреса региона
= 0x12121000

Как видно, начиная с адреса 0x12122000, память не доступна процессу.
Таким образом, запросив с помощью virtualAlloc у операционной системы для резервирования 9 байт по адресу 0x12121212, мы получили область страниц длиной 4096 байт с базовым адресом 0x12120000.
-
Выполнение пункта меню 5 – одновременное резервирование и передача физ. Памяти;
(функция winapi – VirtualAlloc)
-
Автоматический режим

Информация о возвращенном адресе:

-
Режим ввода адреса с клавиатуры

Получение информации с помощью virtual query о возвращенном адресе:

Как
видно размер региона, базовым адресом
которого является 0x78780000
равен 32768 байт, этот размер является
характеристикой AllocationGranularity операционной
системы windows
10. Таким образом запросив 9 байт памяти
с начальным адресом 0х78787878 программе
была предоставлена область виртуальной
памяти, которая при обращении к ней
будет поставлена в соответствие некоторой
областью физической памяти находящейся
в ОЗУ или файле подкачки, равная 32768 байт
(AllocationGranularity отображенное в 1 пункте
меню) с начальным адресом 0x650000
который кратен
=
.
0x78780000/0х8000
= 0xF0F0.
То есть адрес 0x78787878
был округлен вниз до ближайшего кратного
AllocationGranularity.
-
Выполнение пункта меню 6 – запись данных в ячейки памяти;
Получим информацию о доступных адресах:

Запишем по адресу 78780000 число 981:

-
Выполнение пункта меню 7 – установка защиты доступа для региона памяти; (функция winapi – VirtualProtect)
Изменим тип защиты памяти по адресу, в который ранее было записано число 981 на NOACCESS.

Повторно проверим memory protection option с помощью пункта меню 3:

Сдвинув
адрес на величину страницы (
=
байт), заметим, что изменилась
защита только первой одной страницы.

Начиная со следующей страницы memory protection option осталась предыдущей –
READWRITE.
После изменения protection option страницы на NOACCESS с начальным адресом 0х78780000 функция WriteProcessMemory не смогла записать данные.
![]()
-
Выполнение пункта меню 8 – возврат физ. памяти и освобождение региона; (функция winapi – virtualFree)
Освободим страницу с начальным адресом 0x78980000 с помощью параметра MEM_RELEASE в функции virtualFree.

Повторно проверим состояние страницы с помощью пункта меню 3:

Попробуем снова зарезервировать память по этому адресу:

Память успешно зарезервирована, а значит ее освобождение было корректным.
