> то есть блоки переменного размера ? в зависимости от данных которые будем записывать ? объясни все-таки подробнее как ты будешь контролировать свободное место
блок - это заголовок + данные. блоки бывают двух видов - "свободные" и "занятые".
заголовок свободного блока:
1: флаг занятости (0)
2: адрес предыдущего свободного блока
3: адрес следующего свободного блока
заголовок занятого блока:
1: флаг занятости (1)
2: адрес предыдущего свободного блока (это не опечатка)
3: адрес следующего свободного блока
процедура выделения блока:
1. правим флаг занятости
2. изменяем поле "адрес следующего свободного блока" у предыдущего свободного блока, изменяем поле "адрес предыдущего свободного блока" у следующего свободного блока (теперь они указывают друг на друга).
процедура освобождения блока:
1. правим флаг занятости
2. "склеиваем" рядомстоящие свободные блоки, если это возможно (четыре варианта: склеить не удалось, удалось склеить только с предыдущим, удалось склеить только с последующим, удалось склеить три блока в один), правим ссылки свободных блоков, чтобы они оставались корректными (не стал расписывать)
> тока давай не будем переходить к твоему любимому флейму
я просто интересовался, надо тебе это объяснять, сам знаешь или не поленишься где-нибудь прочитать. ладно, остановимся на первом варианте.
избыточность - это не дублирование. избыточность - это способ кодирования информации, позволяющий ценой увеличения объема обнаруживать и/или исправлять потери или искажения информации. например, передача вместе с данными их md5 хеша - это избыточное кодирование, позволяющее с большой вероятность (вероятность ошибки - 2^-128) обнаруживать ошибку передачи, а RAID-5 - избыточное кодирование, позволяющее восстанавливать данные при потере специфически выбранной их части. дублирование - это лишь частный случай избыточного кодирования с теми же характеристиками, что и RAID-5 (сейчас на меня накинутся начитавшиеся умных книжек про то, что RAID-5 - это не зеркалирование).
нижний уровень будет реализовывать избыточное кодирование, обеспечивающее хорошую вероятность обнаружения физического сбоя (crc-32) и восстановление всех данных в случае сбоя специфической части железа (нужно специально выбрать ее так, чтобы свести к минимуму вероятность невосстановимого сбоя).
> ты предлагаешь весь список не держать в памяти, а подчитывать по мере необходимости с диска ?
в памяти держится список транзакций открытого файла, а не список всех блоков диска