МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра вычислительной техники
отчет
по лабораторной работе №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:
Попробуем снова зарезервировать память по этому адресу:
Память успешно зарезервирована, а значит ее освобождение было корректным.