Добавлен: 28.04.2024
Просмотров: 36
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
называется потерянным местом (slack). В небольших файлах почти весь кластер может быть потерянным местом, а в среднем потери составляют половину размера кластера.
При применении FAT32 это ограничение на количество кластеров (а значит и на его размер) снимается, эта система намного эффективнее расходует дисковое пространство, так как использует кластеры меньшего размера. Размеры кластера задаются системой при форматировании диска (См. таблицу 9).
Таблица 9 Зависимость размера кластера от емкости диска
У системы FAT16 есть одно преимущество, так как она является небольшой файловой системой, ее FAT-таблица при работе целиком помещается в память. У файловой системы FAT32 кластеры небольшие, зато она сама большая и поэтому ее таблица FAT полностью в памяти не помещается. Поэтому быстродействие файловой системы FAT16 гораздо выше, чем у FAT32.
Как это видно на рисунке 6 цепочка кластеров, принадлежащих одному файлу, может записаться не подряд, а в виде нескольких фрагментов. Если на диске записано много данных, на нем может не быть цельной области, достаточной для размещения файла. Тем не менее, файл все-таки запишется, если на диске много мелких областей, суммарный размер которых достаточен для записи. В этом случае файл записывается в виде нескольких фрагментов
Процесс разбиения файла на небольшие фрагменты при записи на диск называется фрагментацией. Особенно способствует фрагментации ситуация, когда на диск записывается большое количество мелких файлов, а потом некоторые из них удаляются. При этом на диске остается большое количество разрозненных пустых кластеров, в которые при записи новые файлы будут записываться с разрывами. Если на диске много фрагментированных файлов, скорость чтения носителя уменьшается, поскольку поиск кластеров, в которых хранятся файлы
, на жестких дисках требует времени.
Для ускорения работы производится дефрагментация т.е. перераспределение файлов на диске, при котором они располагаются в непрерывных последовательностях кластеров. После дефрагментации ускоряется чтение и запись файлов, а следовательно и работа программ. Операционные системы Windows имеют встроенные утилиты для дефрагментации.
Потерянные кластеры – это наиболее распространенная ошибка файловой системы, при которой кластеры в FAT помечаются как используемые, хотя на самом деле таковыми не являются. То есть в таблице FAT есть цепочка кластеров, но при этом ни в одном из каталогов на диске нет ни одного дескриптора файла, который указывал бы на начало этой цепочки.
Такая ситуация может возникнуть при «зависании» программы или при пропадании питания во время операции записи файла (Именно поэтому система предлагает проверить диск с FAT после «неправильного» выключения компьютера). Система производит запись информации в область данных (в кластеры файла) и в элементы FAT, но не успевает поместить в каталог соответствующий дескриптор файла. Это происходит из-за того, что запись каталога для файла является последней частью операции записи файла, потому, что каталог содержит размер файла, a Windows не может знать его до тех пор, пока не закончит запись файла.
Сервисная утилита, входящая в состав Windows сканирует FAT, ищет потерянные кластеры и создает в корневом каталоге дескриптор файла, указывающий начало цепочки. Кроме встроенной утилиты существует большое количество утилит внешних производителей для решения проблем с дисками.
Разберемся, как устроена древовидная структура каталогов, каким именно образом в каталоге хранятся ссылки на каталоги следующего уровня (дочерние каталоги) и как любой дочерний каталог хранит ссылку на родительский. Ссылки обоих типов являются дескрипторами.
Про организацию дочерних каталогов мы уже упоминали, такой каталог имеет в родительском каталоге дескриптор (как обычных файл). От дескриптора файла дескриптор каталога отличается только установленным атрибутом D (4-й бит в байте атрибутов - DIRECTORY).
Теперь разберемся, каким образом дочерний каталог «знает» о родительском. В любом каталоге, кроме корневого, два первых дескриптора имеют специальное назначение. Первый дескриптор содержит в поле имени строку «.». Этот дескриптор указывает на содержащий его каталог, то есть каталог имеет ссылку сам на себя. Второй специальный дескриптор имеет имя «..». Этот дескриптор указывает на каталог более высокого уровня (родительский).
Таким образом, в древовидной структуре каталогов файловой системы FAT имеются ссылки как в прямом, так и в обратном направлении. Эти ссылки можно использовать для проверки целостности структуры каталогов файловой системы.
Первые версии файловой системы FAT позволяли хранить только короткие имена файлов в стандарте «восемь-точка-три» (8.3). Это объясняется тем, что в дескрипторе файла для имени файла выделяется 8 байт, а для расширения 3 байта. Начиная с Windows 95 была введена поддержка длинных имен файлов. В улучшенной файловой системе файлу или каталогу можно присваивать имя длиной до 255 символов. В длинных именах файлов можно использовать пробелы, а также символы + ,; = [], которые нельзя было использовать в стандартных именах файлов. Разберемся, как устроены длинные имена в файловой системе FAT.
Проблема использования длинных имен файлов была решена следующим образом: для каждого файла и подкаталога имеются два имени: короткое, «понятное» всем прикладным программам, и длинное - для приложений Windows и тех программ, в которых предусмотрена возможность работы с длинными именами. Для хранения коротких имен в формате 8.3 используются обычные 32-байт записи. Короткие имена Windows создает из длинных имен, отсекая шесть старших символов и добавляя в конце этого базового имени "1". Если же существует еще одно имя, состоящее из тех же шести символов, то этот номер увеличивается на единицу. Расширение файла сохраняется прежним. Если в имени встречается символ, не допустимый в предыдущих версиях операционной системы, он заменяется на знак «подчеркивание» (_). Кириллица переводится в верхний регистр (только заглавные буквы).
Покажем как длинные имена преобразуются в короткие.
Длинные имена Короткие имена
Именно эти короткие имена и будут храниться в дескрипторах файлов, размещаемых в каталогах. Таким образом, все версии операционных систем могут получить доступ к файлу под длинным именем с помощью его короткого имени.
Остается еще одна проблема: как хранить 255 символов имени файла в 32 байтах дескриптора файла, ведь каждый символ имени файла — это один байт? Модифицировать структуру записи каталога нельзя, поскольку тогда предыдущие версии операционных систем не смогут использовать ее. Разработчики файловой системы решили эту проблему следующим образом: были добавлены дополнительные записи каталога для хранения длинных имен файлов. Чтобы предыдущие версии операционных систем не «замечали» этих дополнительных записей каталога, система устанавливает для них атрибуты, которые нельзя использовать для обычного файла (значение байта атрибутов 0Fh: только для чтения, скрытый, системный и метка тома). Поскольку значения атрибутов противоречивы (не бывает защищенных от записи, скрытых и системных меток тома), дескрипторы с такими атрибутами система игнорирует, и, следовательно, длинные имена файлов остаются «нетронутыми».
Для конкретного файла или каталога непосредственно перед его единственным дескриптором с его именем в формате 8.3 находится группа из одной или нескольких записей (дескрипторов с «неправильными» атрибутами), представляющих длинное имя (до 255 символов). Каждая такая запись содержит часть длинного имени файла не более 13 символов, и операционная система составляет полное длинное имя из всех записей.
Файловая система NTFS (New Technology File System – файловая система новой технологии) является сложной файловой системой, разработанной независимо от системы FAT.
При установке NTFS, диск разделяется на две неравные части: первая в начале диска отводиться под специальную таблицу MFT (Master File Table - главная файловая таблица), называется MFT - зоной и занимает порядка 12% от общего размера диска, вторую часть занимают собственно ваши данные. Это основа NTFS. Каждая запись в MFT соответствует какому-либо файлу и занимает около 1 Kb. По своей сути это каталог всех файлов находящихся на диске.
Первые 16 файлов носят служебный характер и недоступны операционной системе - они называются метафайлами. Эти первые 16 элементов MFT - единственная часть диска, имеющая фиксированное положение. Вторая копия этих первых записей хранится ровно посередине диска для надежности.
Обратимся теперь к записи файла MFT. В этом месте хранится вся информация о файле, за исключением собственно данных. Имя файла, размер, положение на диске отдельных фрагментов, и т.д. Если для информации не хватает одной записи MFT, то используются несколько, причем не обязательно подряд. Если данных в файле не много, то они наоборот целиком хранятся в записи файла MFT. Это значит что небольшие файлы и каталоги (обычно до 1500 байт) могут полностью содержаться внутри записи MFT. Подобный подход обеспечивает очень быстрый доступ к маленьким файлам.
Имя файла может иметь длину до 255 символов, при этом допустимы любые символы, включая полный набор национальных алфавитов, так как данные представлены в Unicode (65535 разных символов).
Как и файловой системе FAT файлы в NTFS записываются в виде последовательности кластеров. Кластеры в файловой системе NTFS могут принимать размеры от 512 байт до 64 Кб. Стандартным значением длины кластера является размер 4 Кб.
Рассмотрим еще некоторые особенности файловой системы NTFS.
Каталог на NTFS представляет собой специфический файл, хранящий ссылки на другие файлы и каталоги, создавая иерархическое строение данных на диске. Сами записи каталога содержат имя файла, его длину, некоторые другие его параметры (атрибуты), а самое главное содержат номер (индекс) записи MFT для данного файла, в которой содержится уже полная информация о файле.
Внутренняя структура каталога представляет собой бинарное дерево. Вот что это означает: для поиска файла с заданным именем в FAT, операционной системе приходится просматривать все элементы каталога (поиск перебором), пока она не найдет нужный. Бинарное же дерево располагает имена файлов по алфавиту, и поиск осуществляется сравнением начальных букв при помощи метода двоичного (бинарного) поиска (также известного как метод деления пополам). Экономия времени при поиске очевидна.
NTFS - отказоустойчивая система, которая вполне может привести себя в корректное состояние при практически любых реальных сбоях. Перед тем как привести подробности механизма отказоустойчивости определимся с понятием транзакция. Транзакция - это действие, которое должно быть выполнено целиком и полностью (читай - корректно), в противном случае оно вообще не будет выполнено.
Для реализации транзакций в главной файловой таблице присутствует специальный файл с именем $LogFile – журнал транзакций. Файловая система хранит в этом файле список изменений, которые она будет проводить, перед фактической записью данных. Как это работает, разберем на примере.
Пример: Идет запись данных на диск. Вдруг, – отключается питание и система перезагружается. Что при этом происходит?
Перед каждой записью на диск система помещает в журнал транзакций это свое состояние. При перезагрузке этот файл изучается на предмет наличия незавершенных транзакций, которые были прерваны аварией и результат которых непредсказуем – все эти транзакции отменяются: место, в которое осуществлялась запись, помечается снова как свободное, индексы и элементы MFT приводятся в с состояние, в котором они были до сбоя. То есть, все действия, выполненные при записи данных, отменяются – место, куда была начата запись, будет считать чистым. Система в целом остается стабильна.
Ну а если ошибка произошла при записи в журнал? Тоже ничего страшного: транзакция либо еще и не начиналась (идет только попытка записать намерения её произвести), либо уже закончилась - то есть идет попытка записать, что транзакция на самом деле уже выполнена. В последнем случае при следующей загрузке система сама вполне разберется
При применении FAT32 это ограничение на количество кластеров (а значит и на его размер) снимается, эта система намного эффективнее расходует дисковое пространство, так как использует кластеры меньшего размера. Размеры кластера задаются системой при форматировании диска (См. таблицу 9).
Таблица 9 Зависимость размера кластера от емкости диска
Емкость диска, Гбайт | Размер кластера, Кбайт |
Менее 8 | 4 |
Менее 16 | 8 |
Менее 32 | 16 |
32 и более | 32 |
У системы FAT16 есть одно преимущество, так как она является небольшой файловой системой, ее FAT-таблица при работе целиком помещается в память. У файловой системы FAT32 кластеры небольшие, зато она сама большая и поэтому ее таблица FAT полностью в памяти не помещается. Поэтому быстродействие файловой системы FAT16 гораздо выше, чем у FAT32.
Фрагментация диска
Как это видно на рисунке 6 цепочка кластеров, принадлежащих одному файлу, может записаться не подряд, а в виде нескольких фрагментов. Если на диске записано много данных, на нем может не быть цельной области, достаточной для размещения файла. Тем не менее, файл все-таки запишется, если на диске много мелких областей, суммарный размер которых достаточен для записи. В этом случае файл записывается в виде нескольких фрагментов
Процесс разбиения файла на небольшие фрагменты при записи на диск называется фрагментацией. Особенно способствует фрагментации ситуация, когда на диск записывается большое количество мелких файлов, а потом некоторые из них удаляются. При этом на диске остается большое количество разрозненных пустых кластеров, в которые при записи новые файлы будут записываться с разрывами. Если на диске много фрагментированных файлов, скорость чтения носителя уменьшается, поскольку поиск кластеров, в которых хранятся файлы
, на жестких дисках требует времени.
Для ускорения работы производится дефрагментация т.е. перераспределение файлов на диске, при котором они располагаются в непрерывных последовательностях кластеров. После дефрагментации ускоряется чтение и запись файлов, а следовательно и работа программ. Операционные системы Windows имеют встроенные утилиты для дефрагментации.
Потерянные кластеры
Потерянные кластеры – это наиболее распространенная ошибка файловой системы, при которой кластеры в FAT помечаются как используемые, хотя на самом деле таковыми не являются. То есть в таблице FAT есть цепочка кластеров, но при этом ни в одном из каталогов на диске нет ни одного дескриптора файла, который указывал бы на начало этой цепочки.
Такая ситуация может возникнуть при «зависании» программы или при пропадании питания во время операции записи файла (Именно поэтому система предлагает проверить диск с FAT после «неправильного» выключения компьютера). Система производит запись информации в область данных (в кластеры файла) и в элементы FAT, но не успевает поместить в каталог соответствующий дескриптор файла. Это происходит из-за того, что запись каталога для файла является последней частью операции записи файла, потому, что каталог содержит размер файла, a Windows не может знать его до тех пор, пока не закончит запись файла.
Сервисная утилита, входящая в состав Windows сканирует FAT, ищет потерянные кластеры и создает в корневом каталоге дескриптор файла, указывающий начало цепочки. Кроме встроенной утилиты существует большое количество утилит внешних производителей для решения проблем с дисками.
Иерархическая (древовидная) структура каталогов
Разберемся, как устроена древовидная структура каталогов, каким именно образом в каталоге хранятся ссылки на каталоги следующего уровня (дочерние каталоги) и как любой дочерний каталог хранит ссылку на родительский. Ссылки обоих типов являются дескрипторами.
Про организацию дочерних каталогов мы уже упоминали, такой каталог имеет в родительском каталоге дескриптор (как обычных файл). От дескриптора файла дескриптор каталога отличается только установленным атрибутом D (4-й бит в байте атрибутов - DIRECTORY).
Теперь разберемся, каким образом дочерний каталог «знает» о родительском. В любом каталоге, кроме корневого, два первых дескриптора имеют специальное назначение. Первый дескриптор содержит в поле имени строку «.». Этот дескриптор указывает на содержащий его каталог, то есть каталог имеет ссылку сам на себя. Второй специальный дескриптор имеет имя «..». Этот дескриптор указывает на каталог более высокого уровня (родительский).
Таким образом, в древовидной структуре каталогов файловой системы FAT имеются ссылки как в прямом, так и в обратном направлении. Эти ссылки можно использовать для проверки целостности структуры каталогов файловой системы.
Длинные имена
Первые версии файловой системы FAT позволяли хранить только короткие имена файлов в стандарте «восемь-точка-три» (8.3). Это объясняется тем, что в дескрипторе файла для имени файла выделяется 8 байт, а для расширения 3 байта. Начиная с Windows 95 была введена поддержка длинных имен файлов. В улучшенной файловой системе файлу или каталогу можно присваивать имя длиной до 255 символов. В длинных именах файлов можно использовать пробелы, а также символы + ,; = [], которые нельзя было использовать в стандартных именах файлов. Разберемся, как устроены длинные имена в файловой системе FAT.
Проблема использования длинных имен файлов была решена следующим образом: для каждого файла и подкаталога имеются два имени: короткое, «понятное» всем прикладным программам, и длинное - для приложений Windows и тех программ, в которых предусмотрена возможность работы с длинными именами. Для хранения коротких имен в формате 8.3 используются обычные 32-байт записи. Короткие имена Windows создает из длинных имен, отсекая шесть старших символов и добавляя в конце этого базового имени "1". Если же существует еще одно имя, состоящее из тех же шести символов, то этот номер увеличивается на единицу. Расширение файла сохраняется прежним. Если в имени встречается символ, не допустимый в предыдущих версиях операционной системы, он заменяется на знак «подчеркивание» (_). Кириллица переводится в верхний регистр (только заглавные буквы).
Покажем как длинные имена преобразуются в короткие.
Длинные имена Короткие имена
Именно эти короткие имена и будут храниться в дескрипторах файлов, размещаемых в каталогах. Таким образом, все версии операционных систем могут получить доступ к файлу под длинным именем с помощью его короткого имени.
Остается еще одна проблема: как хранить 255 символов имени файла в 32 байтах дескриптора файла, ведь каждый символ имени файла — это один байт? Модифицировать структуру записи каталога нельзя, поскольку тогда предыдущие версии операционных систем не смогут использовать ее. Разработчики файловой системы решили эту проблему следующим образом: были добавлены дополнительные записи каталога для хранения длинных имен файлов. Чтобы предыдущие версии операционных систем не «замечали» этих дополнительных записей каталога, система устанавливает для них атрибуты, которые нельзя использовать для обычного файла (значение байта атрибутов 0Fh: только для чтения, скрытый, системный и метка тома). Поскольку значения атрибутов противоречивы (не бывает защищенных от записи, скрытых и системных меток тома), дескрипторы с такими атрибутами система игнорирует, и, следовательно, длинные имена файлов остаются «нетронутыми».
Для конкретного файла или каталога непосредственно перед его единственным дескриптором с его именем в формате 8.3 находится группа из одной или нескольких записей (дескрипторов с «неправильными» атрибутами), представляющих длинное имя (до 255 символов). Каждая такая запись содержит часть длинного имени файла не более 13 символов, и операционная система составляет полное длинное имя из всех записей.
NTFS
Структура NTFS
Файловая система NTFS (New Technology File System – файловая система новой технологии) является сложной файловой системой, разработанной независимо от системы FAT.
При установке NTFS, диск разделяется на две неравные части: первая в начале диска отводиться под специальную таблицу MFT (Master File Table - главная файловая таблица), называется MFT - зоной и занимает порядка 12% от общего размера диска, вторую часть занимают собственно ваши данные. Это основа NTFS. Каждая запись в MFT соответствует какому-либо файлу и занимает около 1 Kb. По своей сути это каталог всех файлов находящихся на диске.
Первые 16 файлов носят служебный характер и недоступны операционной системе - они называются метафайлами. Эти первые 16 элементов MFT - единственная часть диска, имеющая фиксированное положение. Вторая копия этих первых записей хранится ровно посередине диска для надежности.
Обратимся теперь к записи файла MFT. В этом месте хранится вся информация о файле, за исключением собственно данных. Имя файла, размер, положение на диске отдельных фрагментов, и т.д. Если для информации не хватает одной записи MFT, то используются несколько, причем не обязательно подряд. Если данных в файле не много, то они наоборот целиком хранятся в записи файла MFT. Это значит что небольшие файлы и каталоги (обычно до 1500 байт) могут полностью содержаться внутри записи MFT. Подобный подход обеспечивает очень быстрый доступ к маленьким файлам.
Имя файла может иметь длину до 255 символов, при этом допустимы любые символы, включая полный набор национальных алфавитов, так как данные представлены в Unicode (65535 разных символов).
Как и файловой системе FAT файлы в NTFS записываются в виде последовательности кластеров. Кластеры в файловой системе NTFS могут принимать размеры от 512 байт до 64 Кб. Стандартным значением длины кластера является размер 4 Кб.
Рассмотрим еще некоторые особенности файловой системы NTFS.
Каталоги, эффективность при поиске
Каталог на NTFS представляет собой специфический файл, хранящий ссылки на другие файлы и каталоги, создавая иерархическое строение данных на диске. Сами записи каталога содержат имя файла, его длину, некоторые другие его параметры (атрибуты), а самое главное содержат номер (индекс) записи MFT для данного файла, в которой содержится уже полная информация о файле.
Внутренняя структура каталога представляет собой бинарное дерево. Вот что это означает: для поиска файла с заданным именем в FAT, операционной системе приходится просматривать все элементы каталога (поиск перебором), пока она не найдет нужный. Бинарное же дерево располагает имена файлов по алфавиту, и поиск осуществляется сравнением начальных букв при помощи метода двоичного (бинарного) поиска (также известного как метод деления пополам). Экономия времени при поиске очевидна.
Журналирование, обеспечение отказоустойчивости
NTFS - отказоустойчивая система, которая вполне может привести себя в корректное состояние при практически любых реальных сбоях. Перед тем как привести подробности механизма отказоустойчивости определимся с понятием транзакция. Транзакция - это действие, которое должно быть выполнено целиком и полностью (читай - корректно), в противном случае оно вообще не будет выполнено.
Для реализации транзакций в главной файловой таблице присутствует специальный файл с именем $LogFile – журнал транзакций. Файловая система хранит в этом файле список изменений, которые она будет проводить, перед фактической записью данных. Как это работает, разберем на примере.
Пример: Идет запись данных на диск. Вдруг, – отключается питание и система перезагружается. Что при этом происходит?
Перед каждой записью на диск система помещает в журнал транзакций это свое состояние. При перезагрузке этот файл изучается на предмет наличия незавершенных транзакций, которые были прерваны аварией и результат которых непредсказуем – все эти транзакции отменяются: место, в которое осуществлялась запись, помечается снова как свободное, индексы и элементы MFT приводятся в с состояние, в котором они были до сбоя. То есть, все действия, выполненные при записи данных, отменяются – место, куда была начата запись, будет считать чистым. Система в целом остается стабильна.
Ну а если ошибка произошла при записи в журнал? Тоже ничего страшного: транзакция либо еще и не начиналась (идет только попытка записать намерения её произвести), либо уже закончилась - то есть идет попытка записать, что транзакция на самом деле уже выполнена. В последнем случае при следующей загрузке система сама вполне разберется