Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

ЛЕКЦИЯ №5

2. Набор функций вирт. с префикс. (ВП), которые предназначены для непосредственной работы с памятью. Работают минимально со страницей.

 

LPVOID VirtualAlloc(

 

LPVOID Addres,

SIZE_T Bytes,

DWORD Alloctype,

DWORD Protection,

);

Небольшое отступление:

В Windows ВП могут находиться в трех состояниях

1. Free – свободное

2. Reserve – зарезервированное

3. Commit – выделенная

 

Free – физических носителей не выделено, адресного пространства не выделено

Reserve – выделено множество адресов, а физической памяти не выделено

Commit – есть адреса и физическое хранилище

 

Функция VirtualAlloc позволяет двигаться в направлении Free->Reserve->Commit

Addres – адрес, по которому мы хотели бы выделить память, если все равно где выделять, то можно указать 0.

Bytes – размер участка, который нам нужен. Но размер будет округлен в большую сторону до размера страницы

Alloctype – что именно мы хотим сделать:

MEM_RESERVE – зарезервировать

MEM_COMMIT – выделить кусок

MEM_RESET - указывает системе, что вам временно указанный участок памяти не нужен, но мы его не освобождаем

MEM_DOWN – приказ системе найти участок памяти в как можно более старших адресах

Protection – атрибуты защиты системы

PAGE_READONLY – страницу можно только читать

PAGE_READWRITE – данные, которые можно и читать и писать

PAGE_EXECUTE – код, но его нельзя ни читать ни писать

PAGE_EXECUTE_READ – код, который можно читать как данные

PAGE_EXECUTE_READWRITE – код, который можно и читать и писать как данные

PAGE_NOACCESS – никакого доступа (нельзя читать и писать)

PAGE_WRITECOPY:

PAGE­­­­­­­_NOCACHE – не кэшировать страницы в проц-ый кэш

Небольшое отступление:

ПИРАМИДА ПАМЯТИ

Чем ниже память, тем она больше и дешевле. Кэширование: используется часть из более быстрой памяти для хранения данных из более медленной с целью уменьшить среднее время доступа.

PAGE_GUARD - защитная страница

3.

BOOL VirtualFree(

LPVOID Ptr,

SIZE_T Bytes,

DWORD FreeType

);

FreeType: MEM_DECOMMIT – переводим из COMMIT в RESERVE(физической памяти нет, а адреса остались)

MEM_RELEASE – освобождаем память

Указатель Ptr должен быть установлен на начало выделенного блока, а размер установлен в 0, Bytes округляется в меньшую сторону до размера страницы.

 

BOOL Virtual[lock/unlock](

LPVOID Ptr,

SIZE_T Bytes

);

Virtuallock блокирует участок страниц в физической памяти, запрещая механизм SWAP. Процесс не может заблокировать страниц памяти меньше, чем размер его рабочего набора, который по умолчанию =32страницы – 128 Кб. Увеличивать рабочий размер можно, но для этого нужны права администратора.

 

Virtualunlock – наоборот.

 

BOOL VirtualProtect(

LPVOID Ptr,

SIZE_T Bytes,

DWORD Protection,

DWORD OldProtect

);

Изменяет защиту страницы.

Protection – новые атрибуты защиты

В OldProtect будет записан старый атрибут защиты.

4. Функции для работы с кучей.

Куча – системный объект, который в участке ВП организует динамическое выделение памяти. Используется, когда надо работать с небольшими участками с постоянным выделением и освобождением памяти. Кучу можно создать.

 

Возвращает дескриптор системного блока.

HANDLE HeapCreate(

DWORD Options,

SIZE_T ImtSize,

SIZE_T MaxSize

);

Options – опции при создании кучи:0.

ImtSize – начальный размер кучи.

MaxSize – максимальный размер кучи.

Если не получается создать кучу, то функция возвращает значение INVALID_HANDLE_VALUE.

 

Выделить кусок памяти из кучи

LPVOID HeapAlloc(

HANDLE heap,

DWORD Options,

SIZE_T Bytes

);

heap – из какой кучи выделить.

Options – HEAP_ZERO_MEMORY – выделить и занулить участок памяти.

Bytes – размер в байтах.

 

Освободить память:

BOOL HeapFree(

HANDLE heap,

DWORD Options,

LPVOID Ptr

);

 

Заблокировать/разблокировать общую кучу(с этой кучей могут/не могут выполнять различные операции другие процессы)

BOOL Heap[lock/unlock] (HANDLE heap);

 

Удаляет кучу полностью:

BOOL HeapDestroy (HANDLE heap);

 

<== предыдущая лекция | следующая лекция ==>
Принципы. Алгоритмы выгружения страниц из ОЗУ | Управление процессами
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 284; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.