Надежность полупроводниковых носителей
Работа флеш-памяти основана на явлении диффузии электронов в полупроводнике. Из этого следуют два не очень приятных вывода.
□ Срок хранения зарядов на плавающих затворах пусть и велик, но все же конечен. По законам термодинамики электроны стремятся со временем равномерно распределиться по всему объему кристалла. Рано или поздно такое равновесие наступит и все содержимое памяти утратится.
□ Каждый цикл записи понемногу «подтачивает» слой, отделяющий затвор от остальной массы кристалла. Кроме того, со временем неизбежно происходит деградация самого материала и p-n-переходов. Из-за этого срок жизни ячейки ограничен некоторым числом циклов записи-перезаписи.
Производители заверяют, что продолжительность надежного хранения однажды записанных данных составляет не менее 5 лет (реально — 10 и более). Число циклов перезаписи тоже иногда оговаривается.
Износ ячеек происходит неравномерно. Те из них, которые хранят записи файловой системы, переписываются при каждом изменении содержимого диска. Они и пострадают в первую очередь. Примерно так же газон на футбольном поле сильнее всего бывает вытоптан перед воротами.
Однако для SSD проблема износа блоков стоит очень остро по определению. На системном диске обновление записей файловой системы, а также областей, где находятся файл подкачки, журналы и реестр, происходит непрерывно. Решением стали технологии динамического распределения или равномерности износа ячеек (wear leveling). Благодаря им часто обновляемая информация по очереди заносится в разные ячейки флеш-памяти. Другими словами, таблица трансляции (соответствия между логическими блоками и физическими блоками, куда они записываются) регулярно меняется.
Подробности таких технологий производители пока не разглашают. Можно лишь сказать, что в микропрограммы накопителей закладываются различные алгоритмы выравнивания износа ячеек. Сама таблица трансляции хранится в служебной области той же флеш-памяти или в отдельном чипе EEPROM вместе с микропрограммой устройства.
На аппаратном уровне принцип динамического распределения обязательно используется в SSD — без этого надежность накопителей была бы недопустимо низкой. Он стал применяться и во многих современных флеш-дисках USB, картах памяти CF и SD.
Логика хранения данных
Логическая структура — то, с чем работает операционная система компьютера. Это всегда иерархия: диск ^ раздел ^ каталог ^ файл. Со стороны интерфейса любой накопитель представляется последовательностью логических блоков. При чтении компьютер запрашивает у накопителя блок с определенным порядковым номером и получает в ответ содержимое этого блока в виде последовательности байтов. При записи, наоборот, последовательность байтов посылается в указанный блок. Границей между аппаратным и логическим уровнями можно считать интерфейсный кабель.
С самого начала условились, что стандартная длина блока составляет 512 байтов. Как раз таков был размер физических секторов на дискетах и первых винчестерах — отсюда и принято говорить о секторах. Хотя впоследствии производители компьютерного «железа» и разработчики файловых систем стали оперировать более крупными порциями данных (кластерами, блоками), в основе все равно лежит сектор размером 512 байтов.
Примечание
В действительности на винчестере полный объем физического сектора равен 571 байту. Из них 512 байтов предназначены для записи данных (data), а оставшиеся 59 байтов — служебные сведения о внутреннем номере сектора, контрольные суммы и т. д. Часть этой информации записывается в ходе низкоуровневой разметки диска еще на заводе, частью «заведует» микропрограмма. Через стандартный интерфейс скрытые 59 байтов недоступны. Так что «видимая» длина сектора — всегда 512 байтов.
Разделы
Верхний уровень логической структуры диска — разделы (partitions). Идея разделов применима к жестким дискам: диск разбивается на несколько частей, каждая из которых несет свою файловую систему и далее представляется ОС вполне самостоятельным носителем.
Флеш-диски и оптические диски обычно «пропускают» этот уровень. В сущности такой носитель весь является одним разделом и несет только файловую систему.
Главная загрузочная запись и таблица разделов
Начальный сектор диска содержит главную загрузочную запись (англ. master boot record, MBR). Синоним — основная загрузочная запись. MBR состоит из программного кода загрузчика, таблицы разделов (partition table) и заканчивается сигнатурой (подписью). Все вместе это занимает 512 байтов. Структура главной загрузочной записи приведена в табл.
Смещение от начала диска |
Длина, байт |
Содержание |
0000 |
446 |
Код программы-загрузчика |
01BE |
16 |
Таблица разделов: Раздел 1 |
01CE |
16 |
Таблица разделов: Раздел 2 |
01DE |
16 |
Таблица разделов: Раздел 3 |
01EE |
16 |
Таблица разделов: Раздел 4 |
01FE |
2 |
Сигнатура MBR (всегда AA55) |
Первые 446 байтов отводятся под код загрузчика (Boot Record). При загрузке с диска эту короткую программу считывает и выполняет BIOS компьютера. Код загрузчика зависит от того, какой программой создавалась главная загрузочная запись. Например, если вы форматировали (точнее, инициализировали) диск стандартными средствами Windows, код загрузчика один, если с помощью Partition Magic — другой, если с помощью программ семейства Acronis — третий. Стандартным считается загрузчик, записываемый утилитой fdisk или установщиком Windows.
В адреса 01B8-01BB программа, которой форматировался диск, может записать сигнатуру диска. Например, ОС семейства Windows NT по этим значениям «запоминают» диск, который однажды подключался к системе, и «узнают» его, даже если потом он будет переставлен на другой канал IDE или SATA.
Следующие четыре группы по 16 байтов служат для записи сведений о разделах диска. Вместе они образуют таблицу разделов (Partition Table). Пока на диске не создавались разделы, все эти группы содержат нули. На диске можно создать максимум 4 основных (basic) раздела — больше структурой MBR не предусмотрено. Каждая группа состоит из 10 полей (табл).
Таблица Структура поля таблицы разделов
Смещение от начала группы |
Длина, байт |
Описание |
0000 |
1 |
Флаг активности раздела (80 — активный, 0 — не активный) |
0001 |
1 |
Начало раздела — головка H |
0002 |
1 |
Начало раздела — сектор S (биты 0-5), цилиндр C (биты 6,7) |
0003 |
1 |
Начало раздела — цилиндр C (старшие биты 8,9 хранятся в предыдущем байте) |
0004 |
1 |
Код типа раздела |
0005 |
1 |
Конец раздела — головка H |
0006 |
1 |
Конец раздела — сектор S (биты 0-5), цилиндр C (биты 6,7) |
0007 |
1 |
Конец раздела — цилиндр C (старшие биты 8,9 хранятся в предыдущем байте) |
0008 |
4 |
Смещение первого сектора раздела в координатах LBA |
000C |
4 |
Количество секторов раздела |
|
|
|
Нулевой байт — флаг активности раздела. Из всех разделов диска активным может быть только один (или ни одного). При загрузке компьютера BIOS, прочитав и выполнив код загрузчика MBR, будет искать «продолжение», т. е. загрузчик операционной системы, в активном разделе. Больше этот флаг ни на что не влияет.
Следующие 3 байта содержат координаты начала раздела, а байты с пятого по седьмой — координаты его конца. Координаты выражены через значения CHS.
Относительно головок, секторов и цилиндров придется сделать отступление. Исторически сначала появилась «трехмерная» адресация секторов на жестких дисках, или система адресации CHS. В ней каждый сектор обозначался тремя числами: C (номером цилиндра, т. е. дорожек, лежащих одна под другой), H (номером головки, т. е. пластины) и S (номером сектора на дорожке). Это отражало реальную «геометрию» винчестеров того времени (рис. 2.8).
