КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Современные модификации файловой системы FAT
Модификации файловой системы FAT возникли как не планировавшийся результат продолжения использования 32-битной модификации для операционной оболочки Windows 3.1 над MS DOS, которая при своем создании получила название Windows 95. В начале выпуска Windows 95 была снабжена промежуточной модификацией базовой файловой системы FAT16/FAT12, получившей название VFAT. Основная задача, решаемая VFAT, заключается в предоставлении пользователям длинных имен файлов. Исходная структура каталогов FAT позволяла использовать имена с собственной длиной не более 8 символов, что широким массам неквалифицированных пользователей казалось достаточно неудобным. Поэтому введенные изменения затронули структуры только каталогов этой системы. Причем из-за необходимости преемственности были сохранены и все старые структуры. Изменения заключаются в том, что для именования файла стали использовать в общем случае не одну запись оглавления, а набор последовательно размещенных в каталоге записей прежнего 32-байтного формата, который был расширен по своим возможностям. Здесь кстати пришлось резервное поле, запасенное в исходной структуре записи FITEM. Для того чтобы однозначно и невидимо для старых программ отделять новые по строению записи каталога от старых, использовали поле атрибутов attr. В этом поле для новых записей стали записывать код 0x0F, недопустимый в старом варианте (он задавал, что это – файл скрытый, системный, доступный только для чтения и одновременно, что это – не файл, а каталог). Программы, работающие со старыми форматами записей каталога, "не замечают" записи с таким кодом в поле атрибутов. Старые структуры записей каталогов стали хранить "короткое" имя по старым соглашениям. Короткое имя файлов для файлов по старым соглашениям совпадают с этими старыми именами. Короткое имя для файлов с длинными названиями получается "отрезанием" первых 6 (или, если окажется необходимым, менее) символов и присоединением к ним служебного символа ~ (тильда), за которым идет номер, отличающий короткое имя от уже имеющихся коротких имен. Символы, недопустимые по старым соглашениям, заменяются в коротких именах символами подчеркивания. Полное длинное имя (long name) распределяется по дополнительным новым записям каталога, которые обязательно предшествуют записи со старым форматом и коротким именем. Причем полные имена в новых соглашениях помещаются в записи каталога в коде Unicode, который для каждого символа требует двух байтов. Структура дополнительных записей каталога описывается на языке Си в виде struct { char num; // порядковый номер доп. записи + 64 для последней записи из них char dop5[10]; //очередные 5 символов имени в Unicode char attr; // признак дополнительной записи, всегда равный Ox0F char type; // тип, всегда должен быть равен 0 char cntrsum; // контрольная сумма char dop6[12]; // следующие 6 символов имени в Unicode unsigned short cluster_nu; // всегда должен быть 0 char dop2[4] // следующие 2 символов имени в Unicode } NEWFITEM; Байт cntrsum контрольной суммы для длинного имени рассчитывается как остаток от деления на 256 суммы значений определенных полей соответствующей записи для старого формата. В операционной системе Windows 95 это поле используется для выявления испорченных записей в каталоге для длинных имен. Дополнительные записи каталога для длинного имени файла, если этих записей более одной, размещаются в обратном порядке: вначале (в секторах с меньшим номером) последняя дополнительная запись, затем предпоследняя и т.д., доходя до первой дополнительной записи каталога, непосредственно за которой будет следовать стандартная запись короткого имени файла. Заметим, что принятые Windows информационные средства для записи внутри файловой системы длинных имен достаточно "разорительны" (неэффективны). В частности, они нерационально используют область каталога и требуют громоздко построенных служебных программ, размещая информацию имени файла по очень нерегулярным правилам. Microsoft, создавая Windows 95, планировала использовать последнюю очень недолгое время, пока более основательная ОС этой же фирмы – Windows NT – не станет основной у ее пользователей. Но массовый пользователь в течение ряда лет не очень соблазнялся этой чрезвычайно мошной, но и более медлительной и сложной в управлении ОС. Поэтому с учетом запросов реального рынка была создана 32-битная файловая система для Windows 95, получившая название FAT32. Основное изменение в этой системе относительно ее прототипа заключалось в переходе от 16-битных элементов таблицы FAT к 32-битным. Таким образом, потенциальное множество нумеруемых кластеров возросло с 65 тыс. до почти 4 млрд., что значительно пока превосходит число секторов на жестких магнитных дисках. Структура записи каталога для FAT32 описывается на языке Си следующим образом: struct { char DIR_Name[11]; // имя файла или каталога, дополненное справа пробелами // до 11 символов char DIR_Attr; // атрибуты файла char DIR_NTRES; // зарезервированное для NT поле, должно быть равно 0 char DIR_CrtTimeTenth // уточняет время создания файла, // задает число десятков мс.(от 0 до 199) FTIME DIR_CrtTime; // время создания файла FDATE DIR_CrtDate; // дата создания файла FDATE DIR_LstAccDate; // дата последнего обращения к файлу для записи // или считывания данных unsigned short DIR_FstClassHI; // старшее слово первого кластера файла FTIME DIR_WrtTime; // время выполнения последней операции записи в файл FDATE DIR_WrtDate; // дата выполнения последней операции записи в файл unsigned short DIR_FstClassLO; // младшее слово первого кластера файла unsigned long DIR_FilesSize; // размер файла } FITEM; Как видим, структура каталога заметно изменилась. Расположение информации о коротком имени файла осталось на своем месте, но из резервных большая часть используется. Номер первого кластера файла теперь задается двумя 16‑битными словами, составляющими в совокупности 32 бита, как и следует для 32‑битной нумерации кластеров. Основные изменения коснулись расширения временной учетной информации для файла. На смену единственным значениям даты и времени, отражавшим ранее в 16-битных системах момент последнего изменения, пришли различные поля как для собственно создания, так и для последнего изменения и доступа. Если в 16-битной файловой системе время задавалось только с точностью до 2 с (всего 5 битов было выделено в структуре FTIME для битового поля задания секунд), то здесь появилась возможность уточнения такого времени отдельным полем с точностью до одной сотой секунды. Структура размещения частей файловой системы FAT32 на жестком диске описывается следующей схемой, представленной табл. 6.2 (перечисляются разделы системы в порядке возрастания номеров секторов). Таблица 6.2 Структура разамещения частей FAT32
Самое существенное в этом строении, что местонахождение корневого каталога теперь не фиксировано, а указатель на его местонахождение находится в составе загрузочного сектора. (Именно в поле загрузочного сектора со смещением 0x2C от начала сектора 32-битным значением задается номер первого кластера корневого каталога. Обычно он равен 2, и каталог размещается как и в FAT16 сразу после копий таблицы FAT. Наличие этого поля позволяет разместить корневой каталог в любом месте области данных, аналогично тому, как это происходит с остальными каталогами.) Наиболее употребительный размер кластера, используемый файловой системой FAT32, составляет 4 Кбайта (он определяется при форматировании логического диска с целью достичь некоторой оптимальности использования дисковой памяти). Если при этом сам логический диск имеет объем N Мбайт, то для его области данных будет выделено около 256N кластеров, поэтому размер каждой из FAT0ђаблиц будет иметь величину порядка 1000N байтов. В частности, для логических дисков размеѐом в 20 Гбайт, каждая FAT будет иметќ размер поѐядка 20 Мбайт. Если на самом жестком диске такой расход под служебную информации достаточно приемлем, то хранение двух экземпляров этих таблиц в оперативной памяти потребует уже 40 Мбайт, что уже достаточно чувствительно для этого более ограниченного ресурса. Заметим, что выбор размера кластера величиной 2 Кбайта для примера влечет еще более заметное расходование оперативной памяти (в данном случае до 80 Мбайт). Использование логических дисков FAT32 размером во многие десятки и более Гбайт увеличивает эти расходы еще на порядок. В частности при 100-Гбайтном логическом диске потребовалось бы уже 200 Мбайт оперативной памяти только для хранения FAT, что непосредственно соизмеримо с общим объемом памяти, до последнего времени устанавливаемой на персональный компьютер. Именно поэтому в систему FAT32, подобно FAT16, заложена возможность использования кластеров различного размера, что позволяет сократить объем хранимых в памяти таблиц. Тем не менее большой объем таблиц FAT32 был причиной введения в структуру служебной структуры FSInfo, которая для быстрого доступа хранит информацию о числе свободных кластеров на диске и номере первого свободного кластера в таблице FAT. В начале таблицы FAT имеются два зарезервированных элемента (подобно тому, как это имело место и для FAT16). Нулевой по нумерации элемент содержит только условный код "среды" (BPB_Media), используемый для дополнительного обозначения типа FAT (16 или 32). В следующем элементе FAT – единичном по индексу, отсчитываемому с нуля – старший бит задает "чистый" (или "грязный") логический диск (бит, имеющий значение 0x80000000 или 0x8000, соответственно для FAT32 или FAT16). "Грязный" диск (dirty) обозначает, что процедура разгрузки операционной системы не была выполнена соответствующим образом, и логический диск поэтому может содержать ошибки размещения. Этот бит предназначен для проверки программами загрузки операционной системы.
Дата добавления: 2014-01-05; Просмотров: 488; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |