Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ ОС ЭКЗАМЕН.docx.doc
Скачиваний:
2
Добавлен:
16.09.2019
Размер:
185.86 Кб
Скачать

11. Управление памятью. Для чего используется.

Функция VirtualAlloc позволяет резервировать и/или передавать регион страниц в виртуальном адресном пространстве вызывающего процесса, а также указывать атрибуты защиты страниц при отображении страниц на физическую память региона, иногда этот процесс называют передачей физической памяти.

LPVOID VirtualAlloc(

LPVOID lpAddress, // стартовый адрес в памяти региона (указатель) или NULL.

SIZE_T dwSize, // размер резервируемого региона в байтах. Если в lpAddress передаётся //NULL, то будет зарезервировано количество страниц, необходимое, для размещения //требуемого количества байт от lpAddress до (lpAddress + dwSize).

DWORD flAllocationType, // Этот параметр описывает необходимый тип операции

// MEM_COMMIT, MEM_RESERVE

DWORD flProtect // Этот параметр определяет атрибуты защиты страниц региона и //может принимать следующие значения - P AGE_READONLY, PAGE_READWRITE и //имеют смысл только тогда, когда региону передана физическая память.

);

MEM_COMMIT - Выделяет физическую память или страничный файл на диске. Попытка повторного выделения той же области не приводит к ошибке.

MEM_RESERVE - Резервирует виртуальное адресное пространство заданного размера. Зарезервированный диапазон не может использоваться другими функциями, например LocalAlloc. Выделенный регион может быть связан в дальнейшем с физической памятью.

PAGE_READONLY - Разрешено только чтение.

PAGE_READWRITE - Разрешены чтение и запись данных в регионе страниц.

12.Блокирование памяти. В каком случае используется. Функции для блокирования.

Выделенные страницы можно заблокировать в памяти, т. е. запретить их вытеснение в файл подкачки. Такие страницы остаются в составе рабочего множества процесса до того момента, как будут разблокированы. Для этих целей служит пара функций VirtualLock() и VirtualUnlock(). Процессу не разрешается блокировать более 30 страниц.

Блокирует указанную область указанного виртуального пространства процесса в физической памяти:

BOOL VirtualLock(

LPVOID lpAddress, // Указатель на базовый адрес региона страницы будет заблокирован

DWORD dwSize // размер области будет заблокирован в байтах

); При удачном исходе результат не равен нулю.

Разблокирует область страницы в виртуальном адресном пространстве процесса:

BOOL VirtualUnlock(

LPVOID lpAddress, // начальный адрес

DWORD dwSize // размер

); При удачном исходе результат не равен нулю.

13.Управление памятью. Для чего используют функции:

Смотрим функцию создания кучи.

HANDLE HeapCreate

(

DWORD flOptions, // атрибуты

SIZE_T dwInitialSize, // начальный размер

SIZE_T dwMaximumSize // конечный размер

);

Атрибутов всего два:

HEAP_GENERATE_EXCEPTIONS - Говорит о том, что в случае ошибки нужно генерировать структурную исключительную ситуацию вместо возврата NULL.

HEAP_NO_SERIALIZE - указатель на то, что куча не должна синхронизировать доступ.

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

Результат зависит от флага либо исключение, либо NULL.

Создав кучу, есть возможность выделить в ней память.

LPVOID HeapAlloc

(

HANDLE hHeap, // указатель на кучу где можно выделить память

DWORD dwFlags, // флаги

SIZE_T dwBytes // обьем выделяемой памяти

);

Флаги могут быть следующие:

HEAP_GENERATE_ EXCEPTIONS - при ошибке будет исключение вместо NULL

HEAP_NO_SERIALIZE - доступ доложен быть не синхронизированный

HEAP_ZERO_MEMORY - установить содержимое выделяемой памяти в 0

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

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

BOOL HeapFree

(

HANDLE hHeap, // указатель на кучу

DWORD dwFlags, // флаги

LPVOID lpMem // указатель на память

);

Флаг может быть HEAP_NO_SERIALIZE что бы отключить механизмы синхронизации. При успешном выполнении возвращаемое значение ненулевое.