16 Жесткие диски и файловые системы

Вид материалаДокументы

Содержание


1.1Интерфейс IDE (Integrated Drive Electronics)
Logical Block Addressing
Seagate, придумавшая название Fast ATA
Ultra ATA
1.2Интерфейс SCSI
1.3IDE против SCSI
И наконец о скорости
1.4Загрузочный сектор и таблица разбиения
Главная загрузочная запись
Логические диски
18 Файловые системы
Шестой бит
1.6.1Подводные камни
Емкость диска, Гбайт
1.7.1Другие изменения в FAT32
Подобный материал:
16 Жесткие диски и файловые системы

Практически все современные жесткие диски выпускаются по технологии, использующей магниторезистивный эффект. Благодаря этому в последние годы их плотность растет быстрыми темпами за счет повышения плотности записи информации. Появление изобретенных фирмой IBM головок с гигантским магниторезистивным эффектом (GMR) привело к повышению плотности записи до 6.4 Гб на одну пластину (магниторезистивная технология обеспечивает плотность до 2-3 Гб). Теоретически достижимый эффект составляет 20 Гб, поэтому развитие технологии продолжается. Пока в промышленных масштабах головки GMR выпускаются только IBM и Fujitsu.

В жестких дисках с интерфейсом IDE используют 1-5 пластин, с интерфейсом SCSI до 10.

Скорость вращения жесткого диска в основном влияет на сокращение среднего времени ожидания (поиска). Сегодня стандартом частоты вращения для жестких дисков с интерфейсом IDE является 5400 об/мин (среднее время поиска 9-10 мс), c интерфейсом SCSI – 7200 и 10000 об/мин (5-6 мс). Появились диски с частотами 12000 об/мин.

Следует обратить внимание на температурный режим работы устройств с высокими частотами вращения (особенно 10000 об/мин). Многие из них требуют специальных мер охлаждения, вплоть до установки отдельных вентиляторов.

На первом месте в списке параметров жесткого диска несомненно стоит надежность. Обычным показателем для дисков с интерфейсом IDE считается наработка 300000 – 500000 часов на отказ (30-50 лет), c интерфейсом SCSI – до 1000000 часов (100 лет). Этот параметр является чисто статистическим. Для конкретного экземпляра он означает, что за период в 1000 часов (~40 дней) его работы вероятность выхода из строя составит 0.5 или 0.1%.

Для повышения надежности большинство производителей применяют в жестких дисках различные вариации технологии SMART (Self Monitoring Analysis and reporting Technology – технологию самотестирования и анализа). Обычно предусматривается автоматическа проверка целостности данных, состояние поверхности пластин, перенос информации с критических участков на нормальные и другие операции без участия пользователя.
^

1.1Интерфейс IDE (Integrated Drive Electronics)


За долгую историю развития интерфейса IDE появилось множество обозначений его стандартов. Во избежание путаницы попробуем расставить все по своим местам.

В 80-х годах фирма IBM выпустила компьютер АТ. Жесткий диск (винчестер) этого компьютера был подсоединен к 16-битовой шине ISA и управлялся собственным контроллером. Крупнейшим производителем жестких дисков фирма Western Digital в союзе с Compaq предложила управляющую электронику вставить в сам винчестер. Такой стандарт получил название ATA – (AT Attachment). Чуть позже появились появилось обозначение этого интерфейса IDE (так что в смысловом отношении ATA и IDE синонимы. Ныне по аббревиатурой IDE часто подразумевают вообще все устройства, совместимые с АТА «сверху-вниз» - Fast ATA, EIDE, Ultra ATA и прочие.

Спецификация ATA определила, что
  • к одному каналу можно подключить два устройства (Master и Slave).
  • режимы обмена данными PIO (0,1,2) и DMA (SW 0,1,2 и MW 0)

Режим PIO (Programmed Input-Output) предусматривает участие центрального процессора в обмене данными между диском и оперативной памятью.

В режиме DMA устройство напрямую общается с системной памятью, перехватывая управление шиной ISA. Протоколы SW (Single Word) и MW(Multu Word) определяют, в каком виде передаются данные.

Особенности 16-битной адресации шины ISA не позволяли поддерживать жесткие диски объемом более 528 Мб.

Интерфейс ATA не мог обеспечить подключение никаких других устройств кроме жестких дисков. Между тем появились новые компоненты – CD, магнитооптика, стримеры, каждый из которых оснащался собственным интерфейсом от производителя и обычно требовал подключения к слоту ISA уникальной карты расширения, несовместимой с другими устройствами. К тому же и скорость жестких дисков значительно выросла и режимы, предусмотренные в АТА, уже не удовлетворяли современным требованиям. Так появился интерфейс АТА-2, который устанавливал более скоростные протоколы PIO (3 и 4), MW DMA (1 и 2), определял новый режим обмена данными Block transfer (передача блоками) и адресацию дискового пространства LBA (Logical Block Transfer).

^ Logical Block Addressing - адpесация логических блоков. В стандаpте ATA был пpедусмотpен только классический способ адpесации сектоpов - по номеpу цилиндpа, головки и сектоpа. Под номеp цилиндpа было отведено 16 pазpядов, под номеp головки - 4 и сектоpа - 8, что давало максимальную емкость винчестеpа в 128 Гб, однако BIOS с самого начала огpаничивал количество сектоpов до 63, а цилиндpов - до 1024, этому же пpимеpу последовал и DOS, что в итоге дало максимальный поддеpживаемый объем в 504 Мб. Метод, использованный для пеpедачи BIOS'у адpеса сектоpа, оставляет свободными 4 стаpших pазpяда в pегистpе с номеpом головки, что позволило увеличить поддеpживаемую DOS емкость еще в 16 pаз - до 8 Гб. Для стандаpтизации метода пеpедачи адpеса сектоpа винчестеpу был введен pежим LBA, в котоpом адpес пеpедается в виде линейного 28-pазpядного абсолютного номеpа сектоpа (для DOS по-пpежнему остается огpаничение в 8 Гб), пpеобpазуемого винчестеpом в нужные номеpа цилиндpа/головки/сектоpа.

Для pаботы в pежиме LBA необходима поддеpжка как винчестеpа, так и его дpайвеpа (или BIOS). Пpи pаботе чеpез BIOS винчестеp пpедставляется имеющим 63 сектоpа, число головок, pавное степени двойки (до 256) и необходимое число цилиндpов. BIOS пpеобpазует эти адpеса в линейные, а винчестеp - в адpеса собственной геометpии.

Интерфейс IDE/ATA даже в самых последних реализациях остается 16-битовым. Шина PCI, к которой подключены IDE котнтроллеры чипсета материнской платы, является 32-разрядной. Поэтому контроллер составляет из двух переданных подряд подряд 16-битных пакетов один 32-битный и пересылает его дальше по шине. Ясно, что даже в самом скоростном режиме 16-битный пакет, отправляемый с жесткого диска, тормозит работу системы. Именно поэтому для высокопроизводительных устройств предпочитают диски с интерфейсом SCSI.

Существенным шагом вперед в развитии интерфейса стало появление протокола ATAPI (ATA Packet Interface – пакетный интерфейс АТА). Он обеспечивал подключение к каналу IDE компонентов, отличных от жестких дисков. При этом с точки зрения пользователя разницы в доступе к устройствам различного типа не имелось. Протокол ATAPI требует соответствующей поддержки со стороны BIOS, причем последние версии BIOS могут назначать любое устройство, присоединенное по ATAPI, загрузочным.

Достаточно стройную и целостную систему интерфейсов ATA и ATA-2 не преминули запутать конкуренты. Для того, чтобы выделить свою продукцию на рынке они придумали собственные названия интерфейсов, которые отличаются между собой лишь методами поддержки спецификаций ATA-2 и дополнительными функциями, расширяющими стандарт.
  • Первой по этому пути пошла фирма ^ Seagate, придумавшая название Fast ATA. На самом деле ее продукт отличается от АТА-2 как раз отсутсвием самых быстрых режимов обмена (PIO4 и MW2 DMA).
  • Фирма Quantum «изобрела» название Fast ATA-2 для своего интерфейса, ничем не отличающегося от ATA-2.
  • Больше всех ситуацию запутала компания Western Digital, с чьей легкой руки появилось название EIDE (Enhanced IDE). Этот термин сейчас достаточно широко применяется как в компьютерной индустрии, так и продавцами комплектующих. Если попытаться определить отличия EIDE от ATA-2, то выясняются удивительные вещи. Оказывается EIDE целиком включает в себя спецификации ATA-2 и ATAPI. Таким образом выражение «жесткий диск с интерфейсом EIDE» равнозначно фразе «Жесткий диск с интерфейсом ATA-2». Тогда чем же отличается EIDE? Дело в том, что Western Digital придумала хост-адаптер Dual IDE/ATA, позволяющий использовать до четырех устройств. Однако такой адаптер никакого отношения к собственно стандарту на интерфейс IDE не имеет и является для любого компонента IDE/ATA внешним устройством. Таким образом термин EIDE – ловкий маркетинговый ход компании Western Digital.
  • Недавно в прайс-листах торговцев комплектующими появились жесткие диски с обозначением АТА-3. На самом деле стандарта на такой интерфейс не существует и этой аббревиатурой некоторые производители обозначают устройства, в которых повышена надежность передачи данных в скоростных режимах и включена поддержка технологии SMART.
  • Под кличкой ^ Ultra ATA (Ultra DMA, Ultra DMA/33, ATA-33, DMA-33) известна спецификация описывающая требования к компонентам, работающим в режиме MW3 DMA, обеспечивающим скорость передачи данных до 33 Мб/сек. При такой скорости понадобились специальные меры по коррекции ошибок и контролю целостности данных.
  • Недавно на рынке появились жесткие диски, работающие по протоколу Ultra ATA-66. Для их подключения понадобятся новые шлейфы, имеющие 80 проводников.
^

1.2Интерфейс SCSI


SCSI - другой вариант системы взаимодействия между материнской платой и жестки диском. Он требует приобретения отдельного контроллера. Однако он обладает несколькими дополнительными достоинствами. Смотри ниже.
^

1.3IDE против SCSI


Чтобы не складывалось впечатление, что IDE это очень плохо и за его использование Вам должно быть стыдно, отметим и положительные качества IDE интерфейса, частично в свете выше приведенной таблицы:
  1. Цена. Бесспорно иногда это очень важно.
  2. Не всем нужно подключать 4 HDD и часто двух каналов IDE более чем достаточно, а всякие там сканеры идут со своими карточками.
  3. В корпусе minitower сложно использовать шлейф, длиннее 80см
  4. IDE HD установить гораздо проще, там всего один jumper, а не 4-16 как на SCSI
  5. IDE контроллер уже есть у большинства материнских плат
  6. У IDE устройств шина всегда 16 бит и для моделей, сравнимых по цене, IDE выигрывает по скорости.

Теперь о цене. Самый простой SCSI на шину ISA стоит около $20, но сейчас такие просто никому не нужны, поэтому можно найти и дешевле. Следующий вариант это контроллер на шине PCI. Простейший вариант FastSCSI стоит около $40. Однако сейчас появилось множество материнских плат, на которых всего за +$70 может быть установлен Adaptec 7880 UltraWideSCSI. Даже у знаменитых ASUS P55T2P4 и P2L97 есть варианты со SCSI. Для UWSCSI карточки цена варьируется от $100 до $600. Также бывают двухканальные (как IDE на Intel Triton HX/VX/TX) контроллеры. Цена их естественно выше. Заметим, что в случае SCSI, в отличие от IDE, где что-то новое придумать сложно, за дополнительные деньги контроллеры могут быть расширены функциями кэш-контроллера, RAID-0..5, hotswap и т.д., поэтому говорить о верхней границе стоимости контроллера не совсем корректно.

^ И наконец о скорости. Как известно, сегодня максимальная скорость передачи информации по шине IDE составляет 33Мб/с. Для UWSCSI аналогичный параметр достигает 40Мб/с. Основные преимущества SCSI проявляются при работе в мультизадачных средах (ну и в Windows95 немного :). Многие тесты, приведенные под WindowsNT показывают несомненное преимущество SCSI. Пожалуй это самая популярная на сегодня ОС, для которой применение SCSI более чем оправдано. Также могут быть конкретные задачи (связанные, например, с обработкой видео) в которых просто невозможно использование IDE.

Для работы любого устройства, как известно, необходима программная поддержка.
  • Для большинства IDE устройств минимальная встроена в BIOS материнской платы, для остальных необходимы драйвера под различные операционные системы.
  • У SCSI устройств все немного сложнее. Для первичной загрузки со SCSI жесткого диска и работы в DOS необходим свой SCSI BIOS. Здесь есть 3 варианта.
  1. микросхема со SCSI BIOS есть на самом контроллере (как на VGA картах). При загрузке компьютера он активизируется и позволяет загрузиться со SCSI жесткого диска или, например, CDROM, MO. При использовании нетривиальной операционной системы (Windows NT, OS/2, *nix) для работы с устройствами SCSI всегда используются драйвера. Также они необходимы для работы устройств, не являющихся жесткими дисками, под DOS.
  2. образ SCSI BIOS прошит в flash BIOS материнской платы. Далее по п.1. Этот вариант также более выгоден экономически :) - контроллер без микросхемы BIOS стоит дешевле.
  3. SCSI BIOSа нет вообще. Работа всех SCSI устройств обеспечивается только драйверами операционной системы.

Кроме поддержки загрузки со SCSI устройств, BIOS обычно имеет еще несколько функций: настройка конфигурации адаптера, проверка поверхности дисков, форматирование на низком уровне, настройка параметров инициализации SCSI устройств, задание номера загрузочного устройства и т.д.

Следующее замечание следует из первого. Как Вы знаете, обычно на материнских платах есть CMOS. В нем BIOS хранит настройки платы, в том числе конфигурацию жестких дисков. Для SCSI BIOS часто необходимо также хранить конфигурацию SCSI устройств. Эту роль обычно выполняет маленькая микросхема типа 93C46 (flash). Подключается она к основному SCSI чипу. У нее всего 8 ножек и несколько десятков байт памяти, однако ее содержимое сохраняется и при выключении питания. В этой микросхеме SCSI BIOS может сохранять как  параметры SCSI устройств так и свои собственные. В общем случае ее присутствие не связано с наличием микросхемы со SCSI BIOS, но, как показывает практика, обычно их устанавливают вместе.

В целом SCSI оказался исключительно успешным решением. Он обеспечивает стандартный интерфейс для подключения жесткого диска и принтера к компьютерам Apple Macintosh, является стандартом в рабочих станциях UNIX и повсеместно используется для сопряжения сетевых серверов с подсистемами массового хранения (на дисках или на магнитных лентах). В 1986 году оригинальная версия SCSI была утверждена в качестве стандарта институтом ANSI. Этот интерфейс позволял передавать данные со скоростью 5 Мбайт/с, тогда как жесткие диски ПК работали со скоростью, в пять раз меньшей.

Однако на самом деле SCSI так и не стал доминирующим стандартом в такой небольшой компьютерной системе, как персональный компьютер. В отличие от UNIX операционная система ПК рассчитана на одного пользователя. Для серьезной работы персональные компьютеры начали использоваться только в 90-х годах, хотя оригинальная дисковая система ПК для этого не очень подходила. И совсем уж было SCSI показался заманчивой идеей, как фирмы Compaq и Western Digital разработали стандарт IDE, который обеспечивал сопоставимые функциональные возможности, но был более дешевым. В результате SCSI оказался вне игры.

Интерфейс SCSI — полезная штука, особенно для переносных ПК, начинка которых значительно беднее настольных ПК. Маловероятно, что вы подключите SCSI-принтер к своему ПК (хотя SCSI — стандартный интерфейс для подключения принтера к компьютерам Macintosh), но зато вы сможете снабдить свой ПК всем, что только можно подключить к шине SCSI. Контроллер EIDE, как правило, устанавливается в слот на локальной шине. Чтобы ваша подсистема SCSI работала, следует ориентироваться на плату, устанавливаемую на шине РСI (избегайте вариантов, рассчитанных на VESA Local Bus, потому что конструктивно платы SCSI разработаны, в основном, для серверов, а в современных серверах применяется шина PCI).

SCSI ожидает прочное будущее. Недавно в игру включилась фирма Western Digital, намереваясь благодаря своему опыту в EIDE-технологии проникнуть на рынок профессиональных устройств. Стандарт SCSI все еще развивается, и на подходе такие новые разработки, как недорогие расширители шины, которые позволят к полутораметровой шине Ultra SCSI добавить 6-метровый кабель, подключаемый к главному адаптеру, и новые схемы адресации, например двухфазовый (dual-phase) протокол, способный увеличить число адресуемых устройств до 256 для 16-разрядного интерфейса (или до 1024 в случае 32-разрядного интерфейса).

Ожидается, что производительность SCSI будет оставаться вполне достаточной в течение некоторого времени, а через несколько лет скорость передачи данных может быть доведена до 80 и даже 160 Мбайт/с. Вряд ли стандарт Enhanced IDE (EIDE) вытеснит SCSI, поскольку по сравнению с последним он хуже работает в высокопроизводительной многозадачной среде, примером которой может служить настольный ПК с Windows NT.

Как бы то ни было, будущее принадлежит последовательным шинам, которые сейчас применяются в высококлассных сетевых устройствах и способны, кстати, хорошо использовать команды SCSI. Вопреки мнению энтузиастов технологии последовательных соединений ее повсеместное распространение может затянуться (пока не станет доступным полный спектр соответствующих периферийных устройств), потому что парк уже установленных параллельных SCSI-устройств довольно велик. Достаточно вспомнить насколько живучими оказались флоппи-диски 1,44 Мбайт, несмотря на то, что уже в течение нескольких лет выпускаются альтернативные носители емкостью 100 Мбайт.

17 Логика долбанных шпинделей…
^

1.4Загрузочный сектор и таблица разбиения


Все диски как гибкие, так и жесткие организованы одинаковым образом. Поверхность диска разделена на дорожки, а дорожки на сектора (обычно по 512 байт). Несколько секторов на внешнем ободе диска зарезервированы для специальных нужд OC. Остальные доступны по принципу "первым пришел - первым получил". Это означает, что по мере заполнения диска диска данными сектора постепенно заполняются к центру диска.

Самый первый сектор жесткого диска (секто#1 - головка 1, цилиндр 0) содержит главную загрузочную запись (Master Boot), занимающую ровно один сектор. Остальное пространство диска распределяется между логическими дисками C:, D:, E: и т.д. Всего может быть до 24 логических дисков (до Z:). Число логических дисков не должно превышать значения директивы LASTDRIVE в файле конфигурации CONFIG.SYS.


^ Г
лавная загрузочная запись


Если компьютер загружается с жесткого диска, то управление передается программе, которая расположена в его начале. Эта программа сканирует содержимое таблицы разделения диска (Partion Table), состоящее из четырех 16-байтовых элементов, разбитых на поля. Например,


struct _PART_ENTRY_ {

unsigned char flag; //

unsigned char beg_head; //максимальное значение 255

unsigned beg_sec_cyl; // максимальное значение 65535 (64 сек, 1024 цил)

unsigned char sys; //

unsigned char end_head; // максимальное значение 255

unsigned end_sec_cyl; // максимальное значение 65535

unsigned long rel_sec; // максимальное значение 2Гб

unsigned long size; // максимальное значение 2Гб

}


^ Логические диски

Содержимое каждого логического диска включает в себя: собственный загрузочный сектор (Boot), две таблицы размещения файлов (FAT), корневой каталог (Root), подкаталоги и файлы данных.


struct _BOOT_ { //Структура загрузочного сектора

char jmp[3]; //Команда безусловного перехода

char oem[8]; //Название фирмы изготовителя

EBPB bpb; //Блок парметров BIOS (25 байтов)

char drive; //Физический номер дисковода (0-флоппи,80h-ЖД)

char reservedх[2]; //

unsigned volser_lo; //Серийный номер диска

unsigned volser_hi; //

char label[11]; //Метка диска

char fat_format[8]; // “FAT12 “ или “FAT16 “

char boot[450]; //Программа загрузка

} BOOT;


Размеры разделов винчестера, начиная с DOS 4.0, перешагнули границу в 32Мб и теоретически могут достигать 2048Мб. Для этого размер поля общего количества секторов" был увеличен до 4 байтов.

^ 18 ФАЙЛОВЫЕ СИСТЕМЫ

1.5FAT


FAT представляет собой базу данных, связывающую кластеры дискового пространства с файлами. В этой базе для каждого кластера предусматривается только один элемент. Первые два элемента содержат информацию о самой системе FAT. Третий и последующие элементы ставятся в соответствие кластерам дискового пространства, начиная с первого кластера, отведенного для файлов. Элементы FAT могут содержать несколько специальных значений, указывающих, что
  • кластер свободен, т.е. не использован ни одним файлом (для FAT16 это значение составляет 0000H);
  • кластер содержит один или несколько секторов с физическими дефектами и не должен использоваться (дл FAT16 это значение составляет FFF7H);
  • данный кластер - последний кластер файла (дл FAT16 это значение составляет FFF8 FFFFH).

Для любого используемого файлом, но не последнего кластера элемент FAT содержит номер следующего кластера, занятого файлом.

Каждый каталог - независимо корневой или подкаталог - также представляет собой базу данных. В каталоге DOS для каждого файла предусмотрена одна главная запись (В среде Windows 95 для длинных имен файлов введены дополнительные записи). В отличие от FAT, где каждый элемент состоит из единственного поля, записи для файла в каталоге состоят из нескольких полей (см. рис. 1). Некоторые поля - имя, расширение, размер, дата и врем - могут быть выведены на экран по команде DIR. Но в системе FAT предусмотрена поле, которое не отображаетс командой DIR, - поле с номером первого кластера, отведенного под файл.

Когда программа отправляет запрос к операционной системе с требованием предоставить ей содержимое какого-то файла ОС просматривает запись каталога для него, чтобы найти первый кластер этого файла. Затем она обращается к элементу FAT для данного кластера, чтобы найти следующий кластер в цепочке. Повторяя этот процесс, пока не обнаружит последний кластер файла, ОС точно определяет, какие кластеры принадлежат данному файлу и в какой последования. Таким путем система может предоставить программе любую часть запрашиваемого ею файла. Такой способ организации файла носит название цепочки FAT.

В системе FAT файлам всегда выделяется целое число кластеров. На 1,2-Гбайт жестком диске с 32-Кбайт кластерами в каталоге может быть указано, что размер текстового файла, содержащего слова "hello, world", составляет всего 12 байт, но на самом деле этот файл занимает 32 Кбайт дискового пространства. Неиспользованная часть кластера называется потерянным местом (slack). В небольших файлах почти весь кластер может быть потерянным местом, а в среднем потери составляют половину размера кластера.

Расчеты размеров секторов и кластеров

Сначала в файловой системе FAT в DOS 1 использовались 12-разрядные элементы FAT. В DOS 2, оснащенной дополнительными средствами для работы с жесткими дисками, в FAT предусмотрены 16-разрядные элементы. Существует 65 536 различных 16-разрядных значений; умножив 65 536 на 512 байт в секторе, получим 32 Мбайт. Что касается числа секторов на диске, оно ограничено возможностями операционной системы. В DOS 4.0 для обработки запросов на считывание секторов нижнего уровня используются 32-разрядные параметры.

Предел в 2 Гбайт обусловлен не проблемами операционной системы, а существующими программами. На диске емкостью 2 Гбайт и более кластеры имеют размер 64 Кбайт, или 65 536 байт (см. рис. 2). Но самое большое значение, которое может быть представлено в 16 разрядах, составляет 65 535; 64 Кбайт - слишком большая величина для 16 разрядов. В Microsoft обнаружили, что при разработке многих существующих в настоящее время программ их авторы исходили из предположения, что значение числа байт в кластере умещается в 16 разрядах.Даже если такой проблемы не возникло при объеме в 2 Гбайт, то операционная система все равно не сможет работать с дисками емкостью свыше 4 Гбайт. При использовании FAT16 число секторов в кластере сохраняется самой ОС в одном байте блока параметров диска, устанавливаемого ОС. Это число должно быть кратным степени 2 и при этом меньше 256. Таким образом, в кластер может входить не более 128 секторов, или 64 Кбайт. В итоге даже если ограничение в 2 Гбайт снимается, система FAT16 приемлема лишь для дисков емкостью менее 4 Гбайт.

1.6VFAT


Дополнение ОС, работающей с именами файлов формата 8.3, возможностями использования длинных имен файлов не означает лишь просто увеличение размера элементов каталога для размещения более 11 символов, поскольку необходима совместимость и с предыдущими версиями.
  • Если в новой ОС записи каталога будут представлены в новом формате, то, переписав файл на гибкий диск под управлением новой системы, вы не сможете прочитать его с помощью старой.
  • Имеется и другая проблема. Если новая ОС будет передавать старым прикладным системам, рассчитанным на прием имен с длиной не более 11 символов, 255-символьные имена, программы ее "не поймут" будут происходить сбои. В чем причина? В программе для хранения считываемых имен файлов выделяется некоторая область памяти; если для этих целей предусматривается 16 байт, а ОС пересылает по названному адресу 32 символа, которые наложатся запишутся на другую информацию. Любой программист может сказать, что наилучший способ навредить программе - записать что-то чужое в ее область данных.

Для решения проблемы использования длинных имен при соблюдении полной совместимости со старыми версиями прикладных программ, подготовленными для DOS и Windows, разработчики Windows 95 нашли решение. Как правило, прикладные программы (за исключением специальных утилит, использующих для обращения к диску операции низкого уровня - например, Norton Disk Doctor) обращаются к ОС за именами файлов и каталогов не путем прямого считывания с диска соответствующих записей, а через специальные, встроенные в ОС функции. В результате тестирования специалистами Microsoft обнаружено, что, если у некоторого элемента каталога установлена "нереальная" комбинация битов атрибутов: "только для чтения", "скрытый", "системный", "метка тома" - другими словами, если байту атрибутов некоторого элемента каталога присвоить значение 0Fh, - тогда любые функции имеющиеся во всех существующих версиях DOS и Windows (предшествующих Windows 95), не "заметят" такого элемента каталога, словно его нет.

В итоге для Windows 95 проблема была решена следующим образом: для каждого файла и подкаталога имеются два имени: короткое, "понятное" всем прикладным программам, и длинное - для приложений Windows 95 и тех программ, в которых предусмотрена возможность работы с длинными именами. Для хранения коротких имен в формате 8.3 используются обычные 32-байт записи. Короткие имена Windows создает из длинных имен, отсекая шесть старших символов и добавляя в конце этого базового имени "1". Если же существует еще одно имя, состоящее из тех же шести символов, то этот номер увеличивается на единицу. Расширение файла сохраняется прежним. Если в имени встречается символ, не допустимый в предыдущих версиях Windows и DOS, он заменяется на знак "подчеркивание" (_).

Длинные имена (LFN) хранятся в специально отформатированных 32-байт записях, байт атрибутов у которых равен 0Fh. Для конкретного файла или подкаталога непосредственно перед его единственной записью каталога с его именем в формате 8.3 находится группа из одной или нескольких записей, представляющих длинное имя. Каждая такая запись содержит часть длинного имени файла не более 13 символов, и ОС составляет полное длинное имя из всех записей.

Какие из этого следуют выводы? Если файл с длинным именем записать на гибкий диск, а затем прочитать его на компьютере, работающем под управлением DOS или Windows 3.x, то ОС распознает лишь короткое имя файла и проигнорирует все записи каталога для длинного имени. А поскольку в данном случае ОС "понятно" лишь короткое имя, прикладная программа, запросившая у нее имя файла или подкаталога, не получит неожиданно длинное имя. Все великолепно сходится.

В Windows 95 прикладным программам для 16 разрядных систем DOS и Windows, как и прежде, "видны" лишь короткие имена файлов, поскольку в ответ на их запросы ОС передает имена файлов и подкаталогов в формате 8.3. Чтобы "добраться" до длинных имен, программа должна обратиться к системным специальным функциям. Во всех прикладных программах для 32 разрядной версии Windows эти функции вызываются по умолчанию, поэтому они автоматически получают доступ к длинным именам.

На рисунке показана структура записи каталога для длинного имени файла. Эти имена хранятся в формате Unicode, т. е. для каждого символа выделяется 2 байт (в отличие от ASCII, где лишь 1 байт).

Символы, из которых состоит имя файла, распределяются по трем отдельным полям: первое - длиной 10 байт (5 символов), второе - 12 байт (6 символов) и третье - 4 байт (2 символа).

В младших пяти битах первого байта записи содержится порядковый номер, указывающий позицию данной записи каталога относительно остальных элементов, представляющих длинное имя данного файла. Например, если для записи длинного имени требуется три элемента каталога, то для первого из них порядковый номер будет равен 1, для второго - 2, для третьего - 3.

^ Шестой бит первого байта третьего элемента задается равным 1, что означает, что текущий элемент - последний в цепочке.

Положение поля атрибутов в записях каталога как для длинных имен, так и формата 8.3 одинаково. Объясняется это тем, что, до тех пор пока файловая система не ознакомится с содержимым байта атрибутов, она не "знает", с каким типом записи она имеет дело в данный момент.

Поле с номером начального кластера также находится на прежнем месте, однако в записях каталога для длинных имен его значение всегда равно 0.

Поле с указанием типа также содержит 0;

Формирование записи для длинного имени происходит даже в том случае, если оно достаточно коротко и годится для формата 8.3, поскольку для него предусматривается регистр, а для короткого - нет.
^

1.6.1Подводные камни


На первый взгляд предложенный VFAT механизм для длинных имен файлов позволяет сохранить преемственность с прикладными программами прошлого поколения и выглядит идеальным. Однако этот метод далек от совершенства. Объясним почему.
  • Одна из проблем, присущих использованию длинных имен, заключается в том, что для них требуется больше дискового пространства, чем для коротких имен. Это не имеет существенного значения при хранении длинных имен в подчиненных каталогах, поскольку по мере добавления в каталоги новых записей последние могут расширяться. Однако максимальное число записей в корневом каталоге ограниченно, а длинные имена файлов занимают в нем страшно много места. Для большинства жестких дисков в корневом каталоге может содержаться не более 512 записей. Например, для хранения имени из 128 символов потребуется 11 записей (десять для длинного имени и один - для короткого). Поэтому в корневом каталоге удастся разместить лишь 46 файлов и подкаталогов, если название каждого из них состоит из 128 символов. При использовании длинных имен файлов в корневых каталогах дисков, отформатированных для более совершенных файловых систем, таких, как HPFS в OS/2 или NTFS в Windows NT, подобной проблемы не возникает, поскольку размер корневых каталогов в них не ограничен.
  • Более серьезная проблема возникает в том случае, когда элементы каталога длинных имен становятся "сиротами". Допустим, вы переписали некоторый файл на гибкий диск, а затем работали с ним на компьютере под управлением DOS или Windows 3.1. Если там удалить или переименовать этот файл, то будет удалена или переименована соответствующая запись для формата 8.3. Однако записи для длинных имен останутся нетронутыми, поскольку ни DOS, ни Windows 3.1 не подозревают об их существовании. Такие записи оказываются "осиротевшими". (Конечно, аналогичные "осиротевшие" записи для длинных имен могут образоваться и на жестком диске, если загрузить систему с дискеты, где содержится DOS, и удалить или переименовать файлы на жестком диске.)

1.7FAT32


В файловой системе FAT32 как элементы FAT, так и номера секторов - 32-разрядные. Вот что это значит: умножим 4 294 967 296 различных 32-разрядных значений на 512 байт в секторе и получим огромное число 2 Тбайт (2 199 023 255 552 байт), которое представляет собой максимально возможную емкость диска при использовании FAT32.

Теперь, когда допустимое число кластеров и число секторов одинаковы, видимо, можно было бы предположить, что для минимизации потерь места на диске в FAT32 будут использоваться кластеры, состоящие только из одного сектора. Но в этом вопросе необходим какой-то компромисс, поэтому в спецификации FAT32 размер кластера для накопителей емкостью до 8 Гбайт составляет 4 Кбайт.

^ Емкость диска, Гбайт

Размер кластера, Кбайт

Менее 8

4

Менее 16

8

Менее 32

16

32 и более

32



  • Одним из факторов, сыгравшим роль в принятии такого решения, стало то, что теперь нужно учитывать и размер самой FAT. Операционная система сохраняет две копии FAT, поэтому под элемент каждого кластера в FAT требуется 8 байт. На 2-Гбайт диске FAT займет 32 Мбайт его пространства при размере кластера 512 байт. А если размер кластера составляет 4 Кбайт, для хранения двух таблиц FAT потребуется всего 4 Мбайт, т. е. будет сэкономлено 28 Мбайт.
  • Но причиной для компромисса послужили не только соображения экономии дискового пространства; не были забыты и вопросы производительности. Для ускорени доступа к диску встроенная программа дискового кэша VCACHE загружает всю FAT в оперативную память. Очевидно, что проще добиться этого, если кажда отдельная таблица FAT занимает 2 Мбайт, а не 16 Мбайт. И не беспокойтесь о том, что увеличение числа кластеров и удвоение размера элементов FAT приведут к снижению эффективности VCACHE: для FAT32 предусмотрен новый метод работы с кэшем, который, согласно заявлениям Microsoft, повышает общую производительность.
^

1.7.1Другие изменения в FAT32

  • Чтобы обеспечить возможность работы с возросшим числом кластеров, в записи каталога для каждого файла должно выделяться 4 байт для начального кластера файла (вместо 2 байт в системе FAT16). Традиционно каждая запись в каталоге состоит из 32 байт (рис. 1). В середине этой записи 10 байт не используются (байты с 12-го по 21-й), которые Microsoft зарезервировала для своих собственных нужд в будущем. Два из них теперь отводятся как дополнительные байты, необходимые для указания начального кластера в системе FAT32.
  • Операционная система всегда предусматривала наличие на диске двух экземпляров FAT, но использовался только один из них. С переходом к FAT32 операционная система может работать с любой из этих копий.
  • Еще одно изменение состоит в том, что корневой каталог, раньше имевший фиксированный размер и строго определенное место на диске, теперь можно свободно наращивать по мере необходимости подобно подкаталогу. Теперь не существует ограничений на число записей в корневом каталоге. Это особенно важно, поскольку под каждое длинное имя файла используется несколько записей каталога.
  • Сочетание перемещаемого корневого каталога и возможности использования обеих копий FAT - неплохие предпосылки для беспрепятственного динамического изменения размеров разделов диска, например уменьшени раздела с целью высвобождения места для другой операционной системы. Этот новый подход менее опасен, чем применявшиеся в программах независимых поставщиков для изменения разделов диска при работе с FAT16. (Хот в Windows нет утилит, использующих возможности FAT32, такие средства реализованы в программах независимых фирм, например в Partition Magic 3.0 фирмы PowerQuest и PartitionIt фирмы Quarterdeck.)

1.7.2Предостережения


Следует заметить, что FAT32 рассчитана только на Windows 95. В Microsoft не давали обещаний подготовить Windows NT к ее использованию и намекнули, что и не собираются этого делать. Однако в фирме заявляют, что, если в Windows NT 5.0 не будет средств для работы с FAT32, то в ней будет предусмотрена утилита дл отображения дисков файловой системы FAT32 в NTFS ("родную" файловую систему Windows NT), поэтому те, кто собирается обновить свою систему, могут не беспокоиться. Однако в настоящее время, если вы хотите установить Windows NT и Windows 95 на одной машине, вам нужно будет убедиться, что совместно используемое этими двумя операционными системами дисковое пространство организовано в соответствии с FAT16, а не FAT32, которую не "воспринимает" система Windows NT, и не NTFS, которую не "понимает" Windows 95.

Наконец, при любых существенных изменениях файловой системы, видимо, такие утилиты для работы с дисками на нижнем уровне, как Norton Utilities, перестанут работать. Необходимо перейти на их обновленные версии. Подсистемы управления файлами и программы просмотра (например, Norton Navigator) должны работать и с системой FAT32.

Если мы остановимся на FAT32, то пройдет еще 15 лет, прежде чем мы достигнем рубежа 2 Тбайт, и нам придетс переходить на FAT64. Учитывая разговоры об объектно-ориентированных файловых системах, можно с той же степенью уверенности предсказать отказ от FAT, с которой мы могли предсказать в 1987 г. отход от FAT до достижения предела в 2 Гбайт.