Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
02.05.2014
Размер:
285.18 Кб
Скачать

5.4.3. Распределение памяти

5.4.3.1. Типы программных интерфейсов для распределения памяти

Для работы с памятью обычно предоставляется два набора программных интерфейсов:

  1. переносимые интерфейсы, удовлетворяющие стандартам ANSI;

  2. специфические для ОС интерфейсы.

5.4.3.2. Переносимые интерфейсы

К переносимым интерфейсам относят четыре функции управления памятью:

  1. выделить память заданного размера; malloc()

  2. выделить память под массив элементов calloc();

  3. перераспределить память realloc();

  4. освободить память free().

5.4.3.3. Специфические интерфейсы

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

Специфические интерфейсы дают следующие преимущества:

  1. позволяют использовать средства распределения памяти, соответствующие архитектуре ОС;

  2. предоставляют большие возможности управления памятью на нижнем уровне;

  3. используют конкретные схемы управления памятью;

  4. оптимизируют производительность.

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

  1. Alloc - выделение заданного числа байтов памяти из пула краткосрочного распределения памяти.

  2. Free - освобождение памяти, выделенной функцией Alloc.

  3. AllocNonMovableCashMemory - выделение памяти из пула кэш-буфера.

  4. FreeNonMovableCashMemory - освобождение памяти, выделенной предыдущей функцией.

  5. AllocSemiPermMemory - выделение памяти из пула долгосрочной памяти.

  6. FreeSemiPermMemory - освобождение памяти, выделенной предыдущей функцией.

NetWare 4.1 управление памятью полностью изменено. Схема пулов была очень запутанной и не очень эффективной из-за фрагментации. Новая ОС выделяет каждому процессу собственный пул памяти, с управлением запросами на основе рабочего множества. Запрос памяти осуществляется к общему пулу, спроектированному с учетом страничной архитектуры и защиты памяти.

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

UnixWare обеспечивает очень широкий набор средств и полную управляемость памятью. В основном объекты памяти представляются в виде именованных или неименованных файлов, доступ к которым может быть произведен средствами файловой системы.

  1. mmap - для виртуального объекта памяти задает отображение в адресном пространстве процесса;

  2. munmap - отменяет отображение.

ОС семейства Windows NT к стандартным средствам управления памятью добавляет следующие интерфейсы:

  1. функции Win32;

  2. функции виртуальной памяти;

  3. функции динамической памяти.

Win32 - это семейство интерфейсов, пригодных для программирования в любой Windows-среде.

Примеры функций Win32:

  1. GlobalAlloc - выделяет в памяти заданное число байтов. Тип выделяемого блока задается атрибутом: FIXED - неперемещаемый, MOVEABLE - перемещаемый, DISCARDABLE - выгружаемый.

  1. GlobalLock - блокирует блок, который становится неперемещаемым и невыгружаемым.

  2. GlobalUnlock - разблокирует блок;

  3. GlobalReAlloc - изменяет размер блока в сторону уменьшения или увеличения.

  4. GlobalFree - освобождает блок.

Функции виртуальной памяти позволяют разработчику использовать все возможности Windows NT по управлению памятью.

  1. VirtualAlloc - выделение памяти в пространстве виртуальных адресов.

  2. VirtualFree - освобождает память, выделенную с помощью предыдущей функцией.

  3. VirtualLock - физическая блокировка страниц в памяти;

  4. VirtualUnlock - разблокировка памяти;

  5. VirtualProtect - устанавливает атрибуты блока памяти, возможные значения атрибутов - PAGE_NOACCESS, PAGE_READONLY, PAGE_READWRITE.

Функции динамической памяти используются для вторичного распределения собственной памяти.

  1. HeapCreate - используется для создания в виртуальном адресном пространстве процесса динамически распределяемой области.

  2. HeapAlloc - выделяет память из области, созданной предыдущей функцией.

  3. HeapReAlloc - перераспределяет память в локальной динамической области.

  4. HeapFree - освобождает память;

  5. HeapDestroy - уничтожает объект динамически распределенной области.

OS/2 имеет три класса API для управления памятью:

  1. распределение собственной памяти;

  2. вторичное распределение памяти;

  3. распределение разделяемой памяти.

  1. DosAllocMem - выделяет память в собственном виртуальном адресном пространстве вызывающего процесса;

  2. DosFreeMem - освобождает память, ранее распределенную как собственную.

Функции вторичного распределения памяти, распределенной предварительно функцией DosAllocMem:

  1. DosSubSetMem,

  2. DosSubAllocMem,

  3. DosSubFreeMem,

  4. DosSubUnsetMem

Соседние файлы в папке Шпоры по СПО