Изменения

Простой FTL для флешек

343 байта добавлено, 11:40, 25 мая 2013
м
Запись
* Если свободных сегментов нет ни в родном, ни в соседних регионах — значит, кончилось место и надо переходить к экстренной очистке. Экстренную очистку, опять-таки, пытаемся сначала сделать в «родном» сегменте, а потом в соседних.
* Сначала пробуем найти наиболее легко очищаемую последовательность N сегментов и переместить из них данные в последовательность N-1 зарезервированных сегментов. После такой очистки мы получим связный регион, в котором N-1 сегмент станет зарезервированным, а в оставшийся 1 можно будет что-нибудь записать. Очищать пробуем сначала в родном регионе, потом — в соседних.
* Если таких последовательностей уже не осталось — значит, места, во-первых, осталось довольно мало (теоретический максимум худшего случая — 1/N, но в среднем — гораздо меньше), а во-вторых, оно сильно фрагментировано. Тогда очистку нужно делать по-другому — брать данные из сегмента, следующего за свободными зарезервированнымисоседнего для свободных зарезервированных, и распределять по отдельным свободным кластерам в разбросанных по всему диску сегментах. Для MTD это вообще нормально, а для флешек это почти ничем не хуже, чем просто случайная запись в те же самые свободные кластеры, но зато даёт всё время поддерживать связную свободную область.
Такое разбиение флеш-памяти на регионы, хоть и способствует ускорению записи, всё равно непригодно для MTD (голой NAND памяти), потому что не осуществляет Wear-Leveling, а наоборот — больше изнашивает одни части памяти и меньше — другие.