Распределение памяти фиксированными разделами — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Распределение памяти фиксированными разделами

2020-04-01 298
Распределение памяти фиксированными разделами 0.00 из 5.00 0 оценок
Заказать работу

Введение

 

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

На рис. 1 все алгоритмы распределения памяти разделены на два класса: алгоритмы, в которых используется перемещение сегментов процессов между оперативной памятью и диском, и алгоритмы, в которых внешняя память не привлекается.

Рис. 1. Классификация методов распределения памяти

 

Мы подробно рассмотрим алгоритмы работы с памятью без использования внешней памяти, а алгоритмы с использованием внешней памяти опустим.

 

Распределение памяти фиксированными разделами

 

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

 

Рис. 2. Распределение памяти фиксированными разделами:

а - с общей очередью; б - с отдельными очередями

 

Подсистема управления памятью в этом случае выполняет следующие задачи:

)   Сравнивая размер программы, поступившей на выполнение, и свободных разделов, выбирает подходящий раздел.

)   Осуществляет загрузку программы и настройку адресов.

При очевидном преимуществе - простоте реализации - данный метод имеет существенный недостаток - жесткость. Так как в каждом разделе может выполняться только одна программа, то уровень мультипрограммирования заранее ограничен числом разделов не зависимо от того, какой размер имеют программы. Даже если программа имеет небольшой объем, она будет занимать весь раздел, что приводит к неэффективному использованию памяти. С другой стороны, даже если объем оперативной памяти машины позволяет выполнить некоторую программу, разбиение памяти на разделы не позволяет сделать этого.


Распределение памяти в Windows

Кучи

Windows поддерживает пулы памяти, называемые кучами (heaps). Процесс может иметь несколько куч, которые используются для распределения памяти. Во многих случаях одной кучи вполне достаточно, но в силу ряда причин, о которых будет сказано ниже, иногда целесообразно иметь в своем распоряжении несколько куч. Если одной кучи вам хватает, можно обойтись использованием функций управления памятью, предоставляемых библиотекой С (malloc, free, calloc, realloc).

Кучи являются объектами Windows и, следовательно, имеют дескрипторы. Дескриптор кучи используется при распределении памяти. У каждого процесса имеется куча, заданная по умолчанию, которую использует функция malloc и для получения дескриптора которой используется следующая функция:GetProcessHeap(VOID)

Возвращаемое значение: дескриптор кучи процесса, в случае неуспешного завершения - NULL. Для создания и уничтожения куч применяются две функции, описания которых приводятся ниже.

Начальный размер кучи, устанавливаемый параметром dwInitialSize (который может быть нулевым), всегда округляется до величины, кратной размеру страницы, и определяет объем физической памяти (в файле подкачки), который передается (commit) в распоряжение кучи (для последующего распределения памяти по запросам) первоначально, а не в ответ на запросы распределения (allocation) памяти из кучи. Когда программа исчерпывает первоначальный размер кучи, куче автоматически передаются дополнительные страницы памяти вплоть до пор, пока она не достигнет установленного для нее максимального размера. Поскольку файл подкачки является ограниченным ресурсом, рекомендуется откладывать передачу памяти куче на более поздний срок, если только заранее не известно, какой размер кучи потребуется. Максимально допустимый размер кучи при ее увеличении в результате динамического расширения определяется значением параметра dwMaximumSize (если оно ненулевое). Рост куч процессов, заданных по умолчанию, также осуществляется динамическим путем.

HANDLE HeapCreate (DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize)

Возвращаемое значение: дескриптор кучи; в случае неудачного завершения - NULL. Типом данных обоих упомянутых полей, связанных с размерами кучи, является не DWORD, a SIZE_T. Тип данных SIZE_T определяется как 32-битовое целое число без знака.- этот параметр может объединять следующие два флага:

. HEAP_GENERATE_EXCEPTIONS: в случае ошибки при распределении памяти вместо возврата значения NULL генерируется исключение, которое должно быть обработано средствами SEH. Если установлен этот флаг, то такие исключения при сбоях будет возбуждаться не самой функцией HeapCreate, а такими функциями, как HeapAlloc.

. HEAP_NO SERIALIZE: при определенных обстоятельствах, о которых сказано ниже, установка этого флага может привести к незначительному повышению производительности.

Для уничтожения объекта кучи используется функция HeapDestroy. Она также может служить примером исключения из общих правил, в данном случае - правила, согласно которому для удаления ненужных дескрипторов любого типа используется функция CloseHandle.

BOOL HeapDestroy (HANDLE hHeap)

Параметр hHeap должен указывать на кучу, созданную посредством вызова функции HeapCreate. Необходимо следить за тем, чтобы случайно не уничтожить кучу процесса, заданную по умолчанию (дескриптор которой получают с помощью функции GetProcessHeap). В результате уничтожения кучи освобождается область виртуального адресного пространства и физическая область сохранения файла подкачки. Разумеется, правильно спроектированная программа должна уничтожать кучи, необходимости в которых больше нет. Уничтожение кучи позволяет быстро освободить память, занимаемую структурами данных, избавляя вас от необходимости отдельного уничтожения каждой из структур, однако экземпляры объектов C++ уничтожены не будут, поскольку их деструкторы при этом не вызываются. Применение операции уничтожения кучи имеет следующие положительные стороны:

. Отпадает необходимость в написании программного кода, обеспечивающего обход структур данных.

. Отпадает необходимость в освобождении памяти, занимаемой каждым из элементов, по отдельности.

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


Заключение

 

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

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


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

память virtualalloc windows зарезервированный

1. Сетевые операционные системы / В.Г. Олифер, Н.А. Олифер-СПб.: Питер, 2002.

. Операционные системы / А.В. Гордеев

. Ассемблер. Учимся программировать/ Калашников О.А.-СПб.: БХВ-Питербург, 2006.

. Assembler. Учебник для вузов. 2-е изд. / В.И. Юров - СПб.: Питер, 2003.

. Системное программирование в среде Windows, 3-е издание / Харт, Джонсон, М.: Издательский дом «Вильямс», 2005.

Введение

 

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

На рис. 1 все алгоритмы распределения памяти разделены на два класса: алгоритмы, в которых используется перемещение сегментов процессов между оперативной памятью и диском, и алгоритмы, в которых внешняя память не привлекается.

Рис. 1. Классификация методов распределения памяти

 

Мы подробно рассмотрим алгоритмы работы с памятью без использования внешней памяти, а алгоритмы с использованием внешней памяти опустим.

 

Распределение памяти фиксированными разделами

 

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

 

Рис. 2. Распределение памяти фиксированными разделами:

а - с общей очередью; б - с отдельными очередями

 

Подсистема управления памятью в этом случае выполняет следующие задачи:

)   Сравнивая размер программы, поступившей на выполнение, и свободных разделов, выбирает подходящий раздел.

)   Осуществляет загрузку программы и настройку адресов.

При очевидном преимуществе - простоте реализации - данный метод имеет существенный недостаток - жесткость. Так как в каждом разделе может выполняться только одна программа, то уровень мультипрограммирования заранее ограничен числом разделов не зависимо от того, какой размер имеют программы. Даже если программа имеет небольшой объем, она будет занимать весь раздел, что приводит к неэффективному использованию памяти. С другой стороны, даже если объем оперативной памяти машины позволяет выполнить некоторую программу, разбиение памяти на разделы не позволяет сделать этого.



Поделиться с друзьями:

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.025 с.