| « Кусочек нашего устройства под рентген-контролем | R3-FS файловая система для роботов » |
Решения... Рассказать в двух словах не получается.
Продолжение:
Решение:
Структура носителя хранится в виде списка "векторов размещения". Векторами мы назвали указатели на дисковое пространство, которые содержат два числа - смещение и протяженность. Вектора организуются в списки. Определены операции над "векторами". Вектора могут удлиняться, можно перераспределять протяженность между соседними векторами, можно вырезать из одного вектора другой вектор, можно объединять вектора.
Тезис: При потоковой записи данных на носитель, не выделяется динамической памяти. Вектора просто перекладываются из одного списка в другой или отрезается фрагмент от одного вектора и присоединяется к другому. Например, отрезается от вектора свободного пространства и присоединяется к вектору размещения файла.
один из парадоксальных тезисов: список битых блоков хранить не надо. Битые блоки -- это пропуски в пространстве - дырка от бублика. Черно-белое изображение описывается либо только белым цветом либо только черным.
Одно из основных решений - принцип распределения динамической памяти для хранения структуры носителя, директорий и векторов размещения, в оперативной памяти.
Для распределения памяти используется отдельный менеджер динамических объектов, аналогичный SLICE, как они определены в Glib. Распределение памяти "слайсами" определенного фиксированного размера эффективно для таких динамических объектов как деревья и списки. В нашем случае был использован свой уникальный способ хранения слайсов и способ сбора мусора. Процедура выделения места под слайс не содержит цикла и работает одинаково эффективно при любом количестве динамических объектов.
Тезис: Не надо хранить размещение данных, если размещение подчиняется алгоритму выделения места. Т.е. когда я повторяю туже последовательность действий, я получаю тоже самое размещение. Поэтому можно хранить алгоритм и транзакции, последовательность воздействий на алгоритм. При включении устройства производится процедура инициализации файловой системы, в ходе которой структура носителя и размещение данных генерируется последовательностью команд-транзакций. Понятию "таблица размещения файлов" мы противопоставили "журнал файловой системы" и транзакции. Структура носителя хранится только в виде транзакций.
Тезис: При циклическом добавлении-удалении данных снижается эффективность хранения в виде журнала. В системе должен быть предусмотрен процесс регенерации журнала.
Процесс регенерации журнала создает более компактный набор действий, в результате которых получается тот же результат размещения. В простейшем виде из журнала можно выкинуть пары создание-удаление файла.
Идея размещения журнала на носителе. Можно вообще нигде не хранить списки цепочек кластеров в которых лежит журнал. Потому что алгоритм всегда будет выбирать те же блоки на основе той же входной информации.
(продолжение следует)
URL трекбека (щелкните правой кнопкой мыши и скопируйте ссылку)