Дифирамбов флэш-памяти поют много, в том числе и я. Для меня вопрос "зачем тебе внешний винт, если можно купить флэшку на 32 гига за 70 баксов?" уже почти вошел в список стандартных ответов на "хочу купить себе внешний винт, чего можно выбрать?" Через два-три года он станет подкреплен не только аргументами "флэшка меньше и надежнее", но и "размер и цена почти точно такие же!" Но это все лирика, а точнее будущее.
А ведь у флэша есть недостатки. Теоретически его время работы ниже, чем у винчестеров. А еще записывают они странно. Вот как раз про это я и хотел рассказать, потому что в одной из наших будущих статей придется ссылаться на эту вот запись. Так что слушайте, точнее читайте.
Для начала могу посоветовать почитать мою же статью "Флэш-память. Прошлое, настоящее и будущее". Кое-какие детали работы флэша она проясняет. Но тут пришлось немного углубиться в теорию записи данных.
Так вот, данные эти могут быть записаны только в свободный блок памяти. Когда приходится иметь дело с чистой флэшкой все чики-пуки и запись происходит также быстро как и чтение. Но, когда мы удаляем какой-нибудь файл, страницы памяти (про страницы и блоки отсылаю читать по вышеприведенному линку) вовсе не очищаются, а просто помечаются в файловой системе как удаленные. Хотя физически данные все еще там. Это нормальное явление, точно также происходящее и на жестких дисках.
Теперь мы, такие молодцы, решили записать на флэшку чего-нибудь новенького. И представим ситуацию (которая на самом деле очень вероятна), что свободных блоков больше нет, есть только "освобожденные". Что приходится делать? Правильно, расчистить место для новых данных. Блок считывается в кэш флэшки, там очищаются необходимые страницы, а потом все возвращается на родину — вуа-ля, все готово для записи. Теперь догадываетесь, почему у флэшек запись на столько медленнее чтения?
Если для USB-флэшки или карточек CF/SD это еще терпимо, то вот для SSD этот недостаток не помешало бы устранить. К сожалению, пока не придуман способ переделать часть архитектуры флэш-памяти, но кое-какой выход нашли. Называется он "команда TRIM". Нет, это не команда типа "Движение за быстрый флэш", это такая машинная команда. Чтобы она работала требуется поддержка со стороны операционной системы и самого SSD. Если есть и то и другое, то происходит следующее.
При отправке запроса на удаление файла система отправляет запрос на число оборотов у накопителя. Если возвращается значение 0, то значит мы имеем дело с флэш-памятью, а поэтому можно попробовать послать команду TRIM. По началу страница памяти помечается как удаленная, но зато потом весь блок помещается в кэш, там очищается необходимая страница, а потом возвращается на место. Таким образом незначительно увеличивается время удаления, но зато запись будет происходить сразу в пустые блоки, что куда предпочтительнее.
Ну вот примерно так. Конечно, TRIM – это не панацея от недостатков флэш-памяти, это скорее обходной путь. И ходить им смогут пока только SSD в операционной системе Windows 7 — там поддержка этой команды более-менее реализована. Дело осталось за малым — чтобы производители этих самых SSD стали ее поддерживать.