Рабушко Артур Германович




Кафедра «Безопасность информационных и автоматизированных систем»

 

УПРАВЛЕНИЕ ПАМЯТЬЮ

Методические указания

к выполнению лабораторной работы

по дисциплине «Операционные системы»

для студентов специальностей 090105, 230105, 090303, 090900

и направлению 231000

 

 

Курган 2012

 

Кафедра: «Безопасность информационных и автоматизированных систем»

 

Дисциплина: «Операционные системы» (специальность 090105, 230105, 090303, 090900 и направлению 231000)

 

 

Составил: ст. преподаватель А.Г. Рабушко

 

 

Утверждены на заседании кафедры 16 марта 2012 г.

 

Рекомендованы методическим советом университета «___» апреля 2012 г.

 

ПРИБОРЫ, оборудование и программное обеспечение

1Операционная система (Microsoft Windows Xp).

2 Используемая среда программирования (Visual Studio C++).

 

Цель работы

 

Изучение интерфейсов операционных систем (ОС) для работы с виртуальной памятью

 

Теоретическое введение

Каждому процессу выделяется собственное виртуальное адресное пространство. Для 32-разрядных процессов его размер составляет 4 Гб. Соответственно 32-битный указатель может быть любым числом от 0x00000000 до 0xFFFFFFFF. Всего, таким образом, указатель может принимать 4 294 967 296 значений, что как раз и перекрывает четырехгигабайтовый диапазон. Поскольку каждому процессу отводится закрытое адресное пространство, то, когда в процессе выполняется какой-нибудь поток, он получает доступ только к той памяти, которая принадлежит его процессу. Память, отведенная другим процессам, скрыта от этого потока и недоступна ему. Адресное пространство процесса закрыто. Отсюда вытекает, что процесс А в своем адресном пространстве может хранить какую-то структуру данных по адресу 0x12345678, и одновременно у процесса В по тому же адресу — но уже в его адресном пространстве — может находиться совершенно иная структура данных. Обращаясь к памяти по адресу 0x12345678, потоки, выполняемые в процессе А, получают доступ к структуре данных процесса А, Но, когда по тому же адресу обращаются потоки, выполняемые в процессе В, они получают доступ к структуре данных процесса В. Иначе говоря, потоки процесса А не могут обратиться к структуре данных в адресном пространстве процесса В, и наоборот.

Трансляция виртуального адреса в физический, в простейшем случае, осуществляется 2-уровневым преобразованием:

При работе с 4-кб страницами памяти, трансляции подвергаются лишь старшие 20 бит виртуального адреса. Поэтому младшие 12 бит PDE и PTE структур используются для хранения служебной информации.

Для работы с виртуальной памятью служат функции семейства Virtual.

Для распределения виртуальной памяти используется функция:

WINBASEAPI

LPVOID

WINAPI

VirtualAlloc(

__in_opt LPVOID lpAddress,

__in SIZE_T dwSize,

__in DWORD flAllocationType,

__in DWORD flProtect

);

Если lpAddress == 0, то выбор места распределения осуществляется ОС. Параметр flAllocationType может быть следующим:

#define MEM_COMMIT 0x1000

#define MEM_RESERVE 0x2000

#define MEM_RESET 0x80000

 

Для каждой виртуальной страницы определены атрибуты защиты:

#define PAGE_NOACCESS 0x01

#define PAGE_READONLY 0x02

#define PAGE_READWRITE 0x04

#define PAGE_WRITECOPY 0x08

#define PAGE_EXECUTE 0x10

#define PAGE_EXECUTE_READ 0x20

#define PAGE_EXECUTE_READWRITE 0x40

#define PAGE_EXECUTE_WRITECOPY 0x80

#define PAGE_GUARD 0x100

#define PAGE_NOCACHE 0x200

#define PAGE_WRITECOMBINE 0x400

Для освобождения виртуальной памяти используется функция

WINBASEAPI

BOOL

WINAPI

VirtualFree(

__in LPVOID lpAddress,

__in SIZE_T dwSize,

__in DWORD dwFreeType

);

 

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

WINBASEAPI

BOOL

WINAPI

VirtualProtect(

__in LPVOID lpAddress,

__in SIZE_T dwSize,

__in DWORD flNewProtect,

__out PDWORD lpflOldProtect

);

 

Для получения информации о диапазоне виртуальной памяти используется функция

WINBASEAPI

SIZE_T

WINAPI

VirtualQuery(

__in_opt LPCVOID lpAddress,

PMEMORY_BASIC_INFORMATION lpBuffer,

__in SIZE_T dwLength

);

 

Искомая информация будет получена в структуре

typedef struct _MEMORY_BASIC_INFORMATION {

PVOID BaseAddress;

PVOID AllocationBase;

DWORD AllocationProtect;

SIZE_T RegionSize;

DWORD State;

DWORD Protect;

DWORD Type;

} MEMORY_BASIC_INFORMATION

 

Поле Type может быть следующим:

MEM_IMAGE 0x1000000

MEM_MAPPED 0x40000

MEM_PRIVATE 0x20000

Следует отметить, что для работы с виртуальной памятью другого процесса, при наличии соответствующих прав, служат аналогичные функции семейства Virtual[…]Ex.

Необходимо упомянуть существование мощного механизма работы с виртуальной памятью - проецируемых в память файлов (memory-mapped files) Как и виртуальная память, проецируемые файлы позволяют резервировать регион адресного пространства и передавать ему физическую память. Различие между этими механизмами состоит в том, что в последнем случае физическая память не выделяется из страничного файла, а берется из файла, уже находящегося на диске. Как только файл спроецирован в память, к нему можно обращаться так, будто он целиком в нее загружен.

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

· загрузки и выполнения EXE- и DLL- файлов позволяют существенно экономить как на размере страничного файла, так и на времени, необходимом для подготовки приложения к выполнению,

· доступа к файлу данных, размещенному на диске, что позволяет обойтись без операций файлового ввода-вывода и буферизации его содержимого,

· разделения данных между несколькими процессами, выполняемыми па одной машине (В Windows есть и другие методы для совместного доступа разных процессов к одним данным — но все они так или иначе реализованы на основе проецируемых в память файлов.)

Для работы с проецируемыми файлами используется следующая последовательность:

С помощью функции CreateFile получаем хэндл файла

WINBASEAPI

HANDLE

WINAPI

CreateFile(

__in LPCSTR lpFileName,

__in DWORD dwDesiredAccess,

__in DWORD dwShareMode,

__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,

__in DWORD dwCreationDisposition,

__in DWORD dwFlagsAndAttributes,

__in_opt HANDLE hTemplateFile

);

 

С помощью функции CreateFileMapping определяем окно в виртуальной памяти:

WINBASEAPI

HANDLE

WINAPI

CreateFileMapping(

__in HANDLE hFile,

__in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes,

__in DWORD flProtect,

__in DWORD dwMaximumSizeHigh,

__in DWORD dwMaximumSizeLow,

__in_opt LPCSTR lpName

);

 

С помощью функции MapViewOfFile отображаем часть файла в ранее полученное окно:

WINBASEAPI

LPVOID

WINAPI

MapViewOfFile(

__in HANDLE hFileMappingObject,

__in DWORD dwDesiredAccess,

__in DWORD dwFileOffsetHigh,

__in DWORD dwFileOffsetLow,

__in SIZE_T dwNumberOfBytesToMap

);

Список заданий:

1. Выделить 1 мб виртуальной памяти с защитой – только чтение.

2. Выделить 2 мб виртуальной памяти по адресу 0x60000000.

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

4. Выделить 1 мб виртуальной памяти в процессе explorer.exe.

5. Зарезервировать 1 мб виртуальной памяти с защитой – только запись.

6. Зарезервировать 2 мб виртуальной памяти по адресу 0x70000000.

7. Зарезервировать 1 мб виртуальной памяти в процессе explorer.exe.

8. Вывести адреса всех свободных участков памяти текущего процесса.

9. Вывести адреса всех свободных участков памяти процесса explorer.exe.

10. Вывести полную карту памяти текущего процесса.

11. Вывести полную карту памяти процесса explorer.exe.

12. Вывести список адресов загруженных.dll текущего процесса на основе анализа поля Type структуры MEMORY_BASIC_INFORMATION.

13. Вывести список загруженных.dll текущего процесса на основе анализа заголовка PE-файла.

14. Вывести список адресов загруженных модулей, не являющиеся dll.

15. Загрузить собственную dll в адресное пространство процесса explorer.exe.

16. С помощью проецируемых в память файлов организовать межпроцессное взаимодействие.

17. Оценить скорость работы функций библиотеки C runtime library и функций отображения файлов.

 

Список литературы

1. Руссинович М., Соломон Д. Внутреннее устройство Microsoft Windows. Мастер-класс. Изд. “Питер”, 2005

2. Дейтел, Х.М. Операционные системы. Ч. 2: Распределенные системы, сети, безопасность / Х.М. Дейтел, П.Дж. Дейтел, Д.Р. Чофнес. – М.: Бином, 2006.

3. Дейтел, Х.М. Операционные системы. Ч. 1: Основы и принципы / Х.М. Дейтел, П.Дж. Дейтел, Д.Р. Чофнес. – М.: Бином, 2006.

4. Гордеев, А.В. Операционные системы: учебник для вузов / А.В. Гордеев. – СПб.: Питер, 2004. – 416 с.

5. Олифер, В.Г. Сетевые операционные системы / В.Г. Олифер, Н.А. Олифер. – СПб.: Питер, 2001. – 544 с.

6. Кастер, Х. Основы Windows NT и NTFS. Русская редакция / Х. Кастер. – М., 1996.

7. Проскурин, В.Г. Защита в операционных системах / В.Г. Проскурин, С.В. Крутов, И.В. Мацкевич. – М.: Радио и связь, 2000.

 

 

Рабушко Артур Германович

УПРАВЛЕНИЕ ПАМЯТЬЮ

Методические указания

к выполнению лабораторной работы

по дисциплине «Операционные системы»

для студентов специальностей 090105, 230105, 090303, 090900

и направлению 231000

 

Редактор Е.А. Устюгова

 

 
 


Подписано к печати Формат 60×84 1/16 Бумага тип. №1

Печать трафаретная Усл. печ.л. 0,75 Уч.-изд.л.0,75

Заказ Тираж э/в Цена свободная


РИЦ Курганского государственного университета.

640669, г. Курган, ул. Гоголя, 25.

Курганский государственный университет.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: