Скачиваний:
15
Добавлен:
01.05.2014
Размер:
36.86 Кб
Скачать

Задание на лабораторную работу №3

Менеджеры динамической памяти.

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

- аппаратное управление памятью;

- управление памятью на уровне операционной системы;

- управление памятью на уровне прикладных программ.

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

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

В Л.Р. необходимо реализовать собственный менеджер динамической памяти. Главным его отличием от настоящего менеджера является способ получения непрерывного блока для пула. Обычно для этого используются средства ОС, вызовы системных функций brk или mmap, здесь же, для упрощения Л.Р., предлагается использовать средства стандартной библиотеки С, а именно функции malloc и free. То есть менеджер должен выделять память из пула выделенного malloc’ом.

Алгоритмы и структуры данных используемых в менеджере студент выбирает по своему усмотрению на основании предлагаемых статей.

Менеджер должен быть оформлен в виде разделяемой библиотеки (*.so) с тремя экспортируемыми функциями u_malloc, u_free, u_realloc. Интерфейс и их функциональность должны соответствовать аналогичным функциям из стандартной библиотеки С.

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

Контрольные вопросы:

  1. Какие системные вызовы к сервисам ОС используются менеджерами памяти?

  2. Каким образом в функции free определяется размер освобождаемого блока?

  3. Чему равны кванты выделения памяти ОС на платформе x86?

  4. Как распределено адресное пространство процесса в ОС Linux, как изменяется в процессе выполнения (вызовы процедур, загрузка библиотек, запросы дополнительной динамической памяти)?

  5. Какие основные алгоритмы используются менеджером для выделения по запросу памяти в пуле?

  6. Каковы особенности работы менеджера динамической памяти в многопоточном приложении?

  7. Для чего необходима виртуальная память?

  8. Каковы ограничения процесса на объем используемой памяти в своем адресном пространстве?

Литература:

  1. Dynamic Memory Allocation (Part I) http://www.linux-mag.com/content/view/803/2082/

  2. Dynamic Memory Allocation (Part II) http://www.linux-mag.com/content/view/823/2082/

  3. Внутри менеджера памяти. Выбор, подходы и реализация методов динамического выделения памяти. http://www.realcoding.net/article/view/2747

  4. Inside memory management http://www-128.ibm.com/developerworks/linux/library/l-memory/

  5. A Memory Allocator http://www.lisha.ufsc.br/~fauze/univali/os/dl/mem_alloc.html

  6. The Memory Management http://www.memorymanagement.org/

Соседние файлы в папке Лабораторная работа №36