Как работает флешка: от контактов до ячеек флэш-памяти
Флешка хранит данные в ячейках флэш-памяти типа NAND: каждая ячейка представляет собой транзистор с плавающим затвором, который способен удерживать электрический заряд без постоянного питания. Запись изменяет этот заряд, чтение его измеряет, а удаление стирает целый блок сразу. Никаких движущихся частей, никаких магнитов — только полупроводниковая физика.
Что находится внутри флешки
Пластиковый или металлический корпус флешки скрывает небольшую печатную плату с несколькими компонентами. Главный из них — один или несколько чипов NAND-памяти в корпусах TSOP или BGA. Рядом расположен контроллер: специализированный микропроцессор, который управляет чтением, записью, исправлением ошибок и интерфейсом USB. Стабилизатор напряжения преобразует 5 В или 3,3 В от USB в нужные уровни для памяти и контроллера.
USB-разъём состоит из четырёх контактов: питание (VBUS), земля (GND) и два сигнальных провода (D+ и D-) для дифференциальной передачи данных. При подключении к компьютеру хост-контроллер USB обнаруживает новое устройство, запрашивает его дескриптор и подключает драйвер класса USB Mass Storage. После этого операционная система видит флешку как обычный диск.
Как устроена флэш-память
Ячейка флэш-памяти типа NAND построена на основе полевого транзистора с двумя затворами. Управляющий затвор получает управляющее напряжение от контроллера, а плавающий затвор полностью окружён диэлектриком и изолирован от цепей. Если на плавающем затворе накоплен заряд (электроны туннелировали сквозь тонкий оксидный слой под действием высокого напряжения 12–18 В), порог включения транзистора повышается — это состояние соответствует «0». Без заряда транзистор включается при более низком напряжении — это «1».
В зависимости от числа уровней заряда одна ячейка хранит 1 бит (SLC), 2 бита (MLC), 3 бита (TLC) или 4 бита (QLC). Увеличение числа уровней повышает ёмкость при той же площади кристалла, но снижает надёжность и скорость: контроллеру приходится различать всё более тонкие разницы в заряде. Флешки начального ценового диапазона почти всегда используют TLC-память, тогда как высоконадёжные накопители для промышленного применения работают на SLC.
Почему данные нельзя перезаписать напрямую
Физический принцип флэш-памяти накладывает важное ограничение: перед записью новых данных старые необходимо стереть. И стирание возможно только блоками — обычно по 128 КБ или 256 КБ, тогда как запись идёт страницами по 4–16 КБ. Это означает, что обновление одного файла требует прочитать весь блок, стереть его и записать заново с изменёнными данными.
Управление этим процессом берёт на себя контроллер. Он ведёт таблицу трансляции адресов (FTL), которая сопоставляет логические адреса секторов с физическими страницами. При записи контроллер выбирает свободный блок, записывает туда данные, обновляет таблицу и помечает старый блок как «требующий стирания». Фоновый процесс сборки мусора (garbage collection) периодически освобождает накопившиеся блоки.
Ресурс флешки и почему он ограничен
Каждый цикл стирания немного повреждает тонкий оксидный слой вокруг плавающего затвора. После определённого числа циклов диэлектрик деградирует, ячейка начинает терять заряд быстрее и перестаёт надёжно хранить данные. Гарантированный ресурс TLC-памяти составляет 500–1000 циклов полного стирания, SLC выдерживает 50 000–100 000 циклов.
Чтобы распределить износ равномерно, контроллер использует алгоритм выравнивания износа (wear leveling): часто обновляемые данные перемещаются на разные физические блоки по очереди, а не записываются в одно и то же место. Это увеличивает реальный ресурс флешки в десятки раз по сравнению с наивной записью. Контроллер также резервирует часть ячеек для замены отказавших блоков, поэтому пользователь замечает ухудшение только тогда, когда резерв исчерпан.