Добавил:
github.com Кофедра ВТ-помойка Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тимофеев 2018 / ОС 4 лаб.docx
Скачиваний:
26
Добавлен:
26.01.2019
Размер:
2.6 Mб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра вычислительной техники

отчет

по лабораторной работе №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. Выполнение пункта меню 1 – просмотр информации о вычислительной системе;

(функция winapi – GetNativeSystemInfo)

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

(функция winapi – GlobalMemoryStatusEx)

  1. Выполнение пункта меню 3 – просмотр информации о состоянии участка виртуальной памяти;

(функция winapi – VirtualQuery)

  1. Выполнение пункта меню 4 – поочередное резервирование и передача физ. памяти;

(функция winapi – VirtualAlloc)

    1. Автоматический режим:

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

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

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

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

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

Как видно, начиная с адреса 0x12122000, память не доступна процессу.

Таким образом, запросив с помощью virtualAlloc у операционной системы для резервирования 9 байт по адресу 0x12121212, мы получили область страниц длиной 4096 байт с базовым адресом 0x12120000.

  1. Выполнение пункта меню 5 – одновременное резервирование и передача физ. Памяти;

(функция winapi – VirtualAlloc)

    1. Автоматический режим

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

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

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

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

  1. Выполнение пункта меню 6 – запись данных в ячейки памяти;

Получим информацию о доступных адресах:

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

  1. Выполнение пункта меню 7 – установка защиты доступа для региона памяти; (функция winapi – VirtualProtect)

Изменим тип защиты памяти по адресу, в который ранее было записано число 981 на NOACCESS.

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

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

Начиная со следующей страницы memory protection option осталась предыдущей –

READWRITE.

После изменения protection option страницы на NOACCESS с начальным адресом 0х78780000 функция WriteProcessMemory не смогла записать данные.

  1. Выполнение пункта меню 8 – возврат физ. памяти и освобождение региона; (функция winapi – virtualFree)

Освободим страницу с начальным адресом 0x78980000 с помощью параметра MEM_RELEASE в функции virtualFree.

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

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

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

Соседние файлы в папке Тимофеев 2018