Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АОПИ. Старое / АОПИ. Глава 3. Конспекты (06_06_19).rtf
Скачиваний:
62
Добавлен:
10.09.2019
Размер:
201.15 Кб
Скачать

Функция возврата (освобождение) физической памяти

BOOL VirtualFree(

LPVOID lpAddress, // Адрес начала региона

SIZE_T dwSize, /// Размер региона

DWORD dwFreeType /// Тип операции

);

Тип операции может быть одним из следующих:

MEM_DECOMMIT — возврат части памяти dwSize без освобождения региона.

MEM_RELEASE — возврат физической памяти региона и его освобождение.

Возвращаемое значение.

Возвращает TRUE, если успешно, иначе FALSE.

Возвращаются (освобождаются) все страницы в диапазоне от Address до Address + dwSize.

Если dwSize == 0 (адрес указывает на виртуальный адрес выделенного региона), то функция вернет системе весь диапазон выделенных страниц.

Узнать размер страницы, гранулярность выделения памяти и другую системную информацию можно с помощью функции GetSystemInfo.

Функция получения информации о текущей системе

void GetSystemInfo(

LPSYSTEM_INFO lpSystemInfo

);

В результате выполнения функции структура lpSystemInfo получит информацию о системе.

Функция позволяет возвращать:

— размер страницы памяти в байтах (x86 — 4096),

— минимальный адрес памяти доступного адресного пространства для каждого процесса,

— максимальный адрес памяти доступного адресного пространства для каждого процесса,

— гранулярность резервирования регионов адресного пространства.

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

void GlobalMemoryStatus(

LPMEMORYSTATUS lpBuffer

);

В результате выполнения функции структура lpBuffer получит информацию о системе.

Функция:

1. Возвращает объем физической памяти.

2. Возвращает объем свободной физической памяти.

3. Занятость от 0 до 100% под системой управления памятью.

4. Максимальный размер файла подкачки.

5. Размер свободного места файла подкачки.

6. Общий размер ВАП процесса.

7. Размер свободного места в ВАП процесса.

Вторичная память, которая имитирует память за счет использования дискового пространства располагается в страничном файле (paging file) или в файле подкачки.

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

Подкачка страниц (paging или swapping) — один из механизмов виртуальной памяти, при котором отдельные фрагменты памяти (обычно неактивные) перемещаются из ОЗУ во вторичное хранилище (жёсткий диск или другой внешний накопитель, такой как флеш-память), освобождая ОЗУ для загрузки других активных фрагментов памяти. Такими фрагментами в современных ЭВМ являются страницы памяти.

§2. Непрерывное распределение виртуальной памяти

Непрерывное распределение — схема реализации виртуальной памяти, согласно которой вся память делится на три части:

1) Область, занимаемая ОС,

2) Область, в которой размещается исполняемая задача,

3) Свободная область памяти.

Эта схема предполагает, что ОС не поддерживает многозадачный режим, поэтому не возникает проблем распределения памяти между задачами.

Программные модули необходимы для всех задач, располагаются в области памяти самой ОС, а вся оставшаяся память может быть предоставлена только одной задаче. В этом случае область памяти получается непрерывной.

Для создания программы, виртуальное адресное пространство которой превосходит свободную область памяти или даже весь возможный объем памяти, используется распределение с перекрытием (оверлеем).

Overlay (оверлей) — метод программирования, позволяющий создавать программы, занимающие больше памяти, чем установлено в системе.

В этой схеме предполагается, что вся программа может быть разделена на сегменты (фрагменты).

Каждая оверлейная программа имеет один главный сегмент, причем в памяти одновременно находится только её главный сегмент и один или несколько вторичных сегментов.

Пока в оперативной памяти располагаются исполняемые сегменты, остальные находятся во вторичной памяти. После завершения выполнения активного сегмента возможны два варианта:

1) Активный сегмент указывает ОС, какой сегмент должен быть загружен в память после него.

2) Активный сегмент возвращает управление главному сегменту задачи, и главный сегмент указывает ОС, какой сегмент должен быть загружен в память, после чего передает ему управление.