Основные задачи управления памятью.
Из всех задач по управлению памятью выделяются такие основные:
Поиск, выделение памяти.
Распределение памяти.
Освобождение, использованной памяти.
Расширение объёма памяти.
Дефрагментирование пространства памяти.
Поиск и выделение памяти
Некоторые вопросы этой задачи были уже рассмотрены в части 2, когда разговор зашёл о технологии ускользающих. И, тем не менее, автор снова в полном объёме вернётся к нему, но теперь уже в общем.
Итак, поскольку видов памяти несколько, то и видов процедур поиска, алгоритмов обязано быть несколько. Очевидно хотя бы, что для медленной памяти – это один алгоритм, для быстрой – другой, не вспоминая ускользающую память и т.д. Разница в этих алгоритмах поиска концентрируется на предпочтении толи времени выполнения, толи эффективности выделения. Ясно, что для медленной памяти MRS может думать столько, сколько потребуется лишь бы выделить память наиболее эффективно, а для быстрой памяти постараться всё сделать как можно быстрее.
Что, значит, выделить память эффективно? Этот вопрос оказывается не совсем понятным. Степень эффективности памяти объясняется одной целью: выделить память так, чтобы при последующем её выделении, время выполнение данной операции было минимальным, а ресурс использовался полностью. Говоря проще, эффективно выделить память это значит:
Не допустить фрагментацию памяти.
Выделить память в той зоне, которая соответствует запросу, (мы говорили, что MRS будет разделять зоны в зависимости от вида памяти).
Задача расширение объёма памяти – есть оптимизационной, и зависит от «тяжести» приложения. Расширение объёма памяти должно стремиться удовлетворить следующие требования:
Частота выделения памяти обязана быть на несколько порядков меньше, чем частота обращений к памяти (если этот процесс медленный).
Новая память должна быть выделена максимально эффективно как для приложения, так и для ОС.
Процесс выделения памяти, обязан быть устойчив к сбоям.
Дефрагментация пространства памяти
Задача дефрагментации пространства памяти состоит в том, чтобы, не занимая активное время приложения, оптимизировать пространство памяти.
Кэширование диска. Таблица размещения файлов.
Кэширование файловой системы на диске
В простейшем случае кэш работает с диском и пытается оптимизировать обращения файловой системы к физическому устройству — диску. Собственно, никаких важных особенностей кэширование диска как такового не имеет — это просто кэширование однородного блочного устройства. Это достаточно полезная функция, хотя можно сильно повысить эффективность работы кэша, если он будет не просто кэшированть диск, но и активно файловой системы.
секторы, принадлежащие открытому какой-то задачей файлу, следует удерживать в кэше, предпочитая сбрасывать секторы, принадлежащие закрытому файлу;
чем больше задач удерживате файл открытым, тем важнее удерживать в кэше секторы этого файла;
чем выше приоритет задачи, открывшей файл, тем важнее удерживать секторы этого файла в кэше;
чем мельче запросы к диску, тем важнее их кэшировать — чем мельче запросы, тем больше таких запросов можно разместить в отведённом под кэш объёме памяти, а время выполнения запроса мало зависит от объёма запроса (на современных дисках при размере запроса до ста килобайт ожидание прихода сектора под головку значительно превышает время выполнения операции чтения или записи);
исходя из предыдущего соображения, мелкие кэшировать мелкие файлы выгоднее, чем крупные.
Таблица размещения файлов
FileAllocationTable (FAT) — таблица индексов, указывающих местоположение файлов на диске. Поскольку каждый файл может занимать несколько блоков на диске, таблица FAT указывает последовательность блоков, занятых файлом.
FAT создается для каждого тома. Операционная система NetWare разбивает каждый том на блоки выделения дискового пространства. Можно установить размер блока 4, 8, 16, 32 или 64 КБ. (Все блоки в пределах одного тома имеют одинаковый размер).
NetWare сохраняет файлы на томах в этих блоках. Если файл состоит из одного или нескольких блоков, эти блоки могут располагаться не последовательно.
Элементы таблицы FAT соответствуют блокам тома. Первому элементу соответствует первый блок тома, второму элементу — второй блок и т.д.
Доступ к FAT обеспечивается через DET. Блоки FAT кэшируются в памяти сервера, что обеспечивает более быстрый доступ к данным.
Индекс Turbo FAT. Если файл занимает более 64 блоков (соответственно, более 64 элементов FAT), NetWare создает индекс Turbo FAT для группирования всех элементов FAT данного файла.