Диски. Введение 3 Жесткие диски 3 Конструкция hdd 3
Скачать 2.12 Mb.
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 – Область файлов и каталогов (File and Directory Data Region) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 – Корневой каталог (Root Directory Region) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 – Область FAT (FAT Region) 2 копии | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 – Загрузочная запись (Boot Record) |
Программа начальной загрузки IPL2 |
|
Блок параметров BIOS (BIOS Parameter Block) |
|
Переход по адресу IPL2 |
Все эти области создаются при логическом (высокоуровневом) форматировании диска.
Загрузочная запись
В первом секторе активного раздела (в логическом секторе 0) расположена первая важная структура - загрузочная запись (Boot Record – BR). Также для обозначения первого сектора используются термины «boot сектор» или «reserved sector». Рассмотрим содержимое этого сектора детально.
Первые три байта загрузочной записи содержат инструкция перехода (JMP) на программу начальной загрузки IPL2 (Initial Program Loading 2) – исполняемый код, запускающий операционную систему. Очевидно, что инструкция перехода содержит адрес программы IPL2.
Далее в загрузочной записи находятся структура данных, называемая блок параметров BIOS (BIOS Parameter Block, BPB) или таблица параметров BIOS. Это важнейшая структура данных, содержащая параметры, характеризующие формат диска. Называется эта структура так потому, что содержит информацию, которую BIOS использует при работе с логическим диском, в том числе указывает BIOS где надо искать основные структуры файловой системы.. В таблице 5 представлены некоторые поля блока параметров BIOS.
Таблица 5 Поля блока параметров BIOS
Поле | Описание |
Тип носителя (media descriptor) | Указывает с каким типом носителя мы имеем дело: жесткий диск, флоппи-диск, Flash-диск . |
Число байт в секторе | Размер сектора. Допустимы следующие значения: 512, 1024, 2048 и 4096. Для большинства дисков значение этого поля равно 512 |
Число секторов в дорожке. | Используется для низкоуровневого форматирования дисков |
Число головок. | Используется для низкоуровневого форматирования дисков |
Общее количество секторов на логическом диске | |
Число секторов в кластере | Значение этого поля по умолчанию зависит от размера тома. Допустимы следующие значения: 1, 2, 4, 8, 16, 32, 64 и 128. (понятие кластера будет разобрано ниже) |
Число копий таблиц FAT | Значение этого поля всегда равно 2 (понятие таблицы будет разобрано ниже) |
Тип файловой системы | |
Версия файловой системы | |
Последний элемент загрузочной записи – программа начальной загрузки IPL2 (Initial Program Loading 2), которая и осуществляет начальную загрузку операционной системы (если диск является загрузочным – содержит базовые файлы операционной системы). Если диск не является загрузочным, исполняемый код в загрузочном секторе выдает следующее сообщение:
Non-System disk or disk error
Replace and press any key when ready
Что означает «Не системный диск или ошибка диска. Замените его и нажмите любую клавишу, когда будете готовы».
Заканчивается загрузочная запись определенной кодовой комбинацией – сигнатурой (AA55h).
Замечание: не следует путать загрузочную запись (Boot Record - BR) с главной загрузочной записью (Master Boot Record - MBR). MBR имеется на физическом диске в одном экземпляре и обеспечивает разбиение жесткого диска на разделы, а BR находится в начале каждого раздела и выполняет загрузку операционной системы и работу файловой системы в каждом из разделов. Процедура загрузки компьютера будет разобрана дальше.
Таблицы размещения файлов
Таблицы размещения файлов - FAT (File Allocation Table) - это таблица которая хранит информацию о месте нахождения частей файлов и каталогов.. От этой таблицы и получилось название всей файловой системы, в которой FAT является лишь одним из элементов. Учитывая крайнюю важность данной структуры, таблица FAT хранится в двух экземплярах, что повышает надежность системы. Конкретный способ организации этой таблицы будет рассмотрен ниже.
Корневой каталог
Директория (или каталог) это список 32-байтных элементов, каждый из которых описывает какой-либо файл или каталог. Есть лишь одна специальная директория, которая всегда должна присутствовать на диске, это корневая директория (Root Directory), которая располагается сразу после последней копии FAT. Файловая система имеет древовидную структуру – в корневом каталоге располагаются 32-байтовые элементы, которые содержат информацию о других (вложенных) каталогах, те в свою очередь содержат вложенные каталоги следующего уровня и так далее.
Размер корневого каталога задается при форматировании и определяет максимальное количество файлов и каталогов, которые могут быть описаны в корневом каталоге (В FAT32 корневой можно свободно наращивать по необходимости, подобно любому другому каталогу.).
Область файлов и каталогов, понятие кластера
После корневого каталога на диске следуют сектора, где собственно и хранятся файлы и каталоги (все каталоги кроме корневого тоже можно рассматривать как особые файлы). Эта область называется областью файлов и каталогов (File and Directory Data Region) или просто областью данных. Область данных предназначена для размещения всех файлов и всех каталогов, кроме корневого каталога.
Вся эта область разделена на так называемые кластеры. Кластер (cluster) – это логическая единица хранения данных, объединяющая группу секторов. Например, на дисках с размером секторов в 512 байт, 512-байтный кластер содержит один сектор, тогда как 4-килобайтный кластер содержит восемь секторов. Это наименьшее место на диске, которое может быть выделено для хранения файла.
Размер кластера (число секторов) выбирается кратным степени числа 2 (размер кластера может быть описан формулой 2n*512). Это означает, что кластер может иметь размер 512, 1024, 2048, 4096 и.т.д. байт. Конкретный размер кластера на диске задается при его форматировании в зависимости oт объема диска и размера FAT Файл на диске занимает целое число кластеров, от одного до всех кластеров, входящих в область данных. Количество файлов на диске не может превышать количества кластеров
Каждый кластер имеет свой номер, который может использоваться для указания места на диске.
Структура каталога и дескриптора файла
Как мы уже говорили, любой каталог содержит 32-байтовые элементы – дескрипторы (Descriptor – дословно описатель, описательный элемент), описывающие файлы и другие каталоги. Поля дескриптора описывают различные характеристики файла (или каталога). Приведем формат дескриптора файла (Таблица 6):
Таблица 6 Формат дескриптора файла
Размер (байт) | Поле |
8 | Имя файла или каталога |
3 | Расширение имени файла |
1 | Атрибуты файла. |
2 | Время создания файла или время его последней модификации |
2 | Дата создания файла или время его последней модификации |
2 | Номер первого кластера, распределённого файлу |
4 | Размер файла в байтах |
Остановимся на понятии атрибутов файла. Атрибут – признак, дополнительно характеризующий некоторые свойства файла или каталога. В FAT атрибуты занимают один байт, каждый из атрибутов кодируется одним битом. Биты этого байта имеют следующие значения:
Таблица 7. Атрибуты файлов.
Бит | Название атрибута | Перевод | Описание |
0 | R – READ ONLY | только для чтения | Файл предназначен только для чтения, в этот файл нельзя писать и его нельзя стирать. |
1 | Н–HIDDEN | скрытый | Файл скрывается от показа, пока явно не сказано обратное |
2 | S –SYSTEM | системный | Системный файл. Этот бит обычно установлен в файлах, являющихся составной частью операционной системы. |
3 | V–VOLUME | том | Данный дескриптор описывает метку диска. Для этого дескриптора поля имени файла и расширения имени файла должны рассматриваться как одно поле длиной 11 байтов. Это поле содержит метку диска. |
4 | D–DIRECTORY | каталог | Дескриптор описывает файл, являющийся подкаталогом данного каталога. Только операционная система может управлять этим атрибутом. |
5 | А–ARCHIVE | Архивный (требующий архивации) | Файл изменён после резервного копирования или не был скопирован программами резервного копирования (сейчас используется редко) |
Информация, хранимая в атрибутах, используется операционной системой при выполнении файловых операций. Например, значение атрибута DIRECTORY позволяет отличать файл от подчиненного каталога, а по значению атрибута ARCHIVE отбираются файлы для резервного копирования. Атрибут READ ONLY запрещает изменять и удалять файл, а атрибут HIDDEN делает файл «невидимым». Биты атрибутов VOLUME и DIRECTORY может изменить только операционная система, остальные атрибуты могут изменяться пользователем.
Итак, мы видим, что в дескрипторе указывается имя и тип файла, длина, дата создания и некоторые его атрибуты, а также что важно, номер начального кластера этого файла. Если файл занимает один кластер мы имеем полную информацию о его размещении на диске, если файл не помещается в кластер для получении информации о его размещении нужно будет обратиться к таблице размещения файлов (FAT).
Структура FAT
Расположение файлов в кластерах определяется с помощью таблицы распределения файлов FAT. FAT - это связанный список, который обеспечивает возможность фрагментарного расположения файлов на диске (т.е. расположения файлов по частям в разных местах диска). Этот список используется файловой системой для определения последовательности кластеров, выделенных файлу или каталогу, а также для поиска свободного пространства, необходимого для записи новых файлов и каталогов. Число элементов этого списка равно числу кластеров области данных диска. Каждому кластеру из области данных соответствует свой элемент из таблицы FAT.
Иными словами FAT состоит из элементов, элементов в таблице ровно столько, сколько кластеров на диске, и кластеру с номером N соответствует элемент FAT с тем же номером N. Каждый из элементов FAT представляющий один кластер может содержать следующие коды (см. таблицу 8):
Таблица 8. Возможные значения элемента FAT
Код, содержащийся в элементе FAT | Описание |
(0)000h | Доступный (пустой) кластер |
(0)002h до (F)FEFh | Номер следующего кластера |
(F)FF0h до (F)FF7h | Зарезервированный кластер (используется NTFS) |
(F)FF7h | Плохой кластер (BAD) |
(F)FF8h до (F)FFFh | Конец цепочки (EOF) |
Вернемся к задаче определения точного места на диске (номеров кластеров), где располагается файл. Если файл занимает более одного кластера, то все кластеры, занимаемые файлом, организуются в цепочку кластеров (cluster chain).
Для того чтобы прочитать файл целиком, необходимо найти его дескриптор в каталоге и считать первый кластер, на который ссылается этот дескриптор – это будет начало файла. Далее следует прочитать соответствующий первому кластеру элемент FAT и определить, является ли он последним (соответствующий означает, что кластеру с номером N соответствует элемент из таблицы FAT тоже с номером N). Если прочитанный элемент FAT не содержит признака конца файла (EOF), то он показывает номер следующего кластера цепочки, который также должен быть считан. Снова проверяем очередной элемент FAT. Повторяем это до тех пор, пока очередь не дойдет до последнего кластера в цепочке.
Пример цепочки кластеров
Пусть некоторый каталог содержит дескриптор файла (обозначим его А.txt), в которой содержится ссылка на начальный кластер (кластер № 18) из цепочки кластеров, выделенных этому файлу.
На рисунке 6 обычным шрифтом обозначены номера элементов FAT (номера элементов FAT соответствуют номерам кластеров), а жирным шрифтом обозначены числовые значения, записанные в этих элементах.
Дескриптор файла A.txt
| Фрагмент таблицы FAT (разбит на элементы) | | Фрагмент области данных (разбит на кластеры) |
10 | 0 | | Пустой |
11 | 0 | | Пустой |
12 | 13 | | 1-й кластер файла A.txt |
13 | 14 | | 2-й кластер файла A.txt |
14 | 17 | | 3-й кластер файла A.txt |
15 | 16 | | 1-й кластер другого файла |
16 | EOF | | 2-й (последний) кластер другого файла |
17 | 18 | | 4-й кластер файла A.txt |
18 | 20 | | 5-й кластер файла A.txt |
19 | BAD | | Плохой кластер |
20 | 21 | | 6-й кластер файла A.txt |
21 | 22 | | 7-й кластер файла A.txt |
22 | 23 | | 8-й кластер файла A.txt |
23 | EOF | | 9-й (последний) кластер файла A.txt |
24 | 0 | | Пустой |
25 | 0 | | Пустой |
26 | 0 | | Пустой |
Рисунок 6 Пример цепочки кластеров для файла A.txt
Из приведенного на рисунке 6 фрагмента FAT следует:
Файл занимает цепочку из десяти кластеров: 12–13–14–17–18–20–21–22–23. Каждый элемент указывает на следующий элемент цепочки - значение элемента № 13 равно 14, значение элемента 14 равно 17 и т.д. Последний элемент содержит специальный код EOF (FF8h) - конец файла.
Еще одна цепочка из двух кластеров начинается с кластера № 15 и кончается кластером № 16. Чтобы узнать, какому файлу (или каталогу) распределены эти кластеры, нужно отыскать в каком-либо каталоге диска дескриптор файла, содержащий ссылку на начальный кластер № 15.
Кластер № 19 помечен, как «плохой» (BAD - FF7) и не входит ни в одну из цепочек. При поиске свободных кластеров для записи нового файла этот кластер будет игнорироваться.
Кластеры № 10, 11, 24, 25, 26 пусты (точнее - объявлены таковыми). Они доступны для распределения под вновь записываемые файлы.
Каждая цепочка кластеров, выделенных системой для одного файла (подкаталога), упорядочена в порядке возрастания их номеров.
Форматы таблицы FAT(FAT12, FAT16, FAT32)
Каждый элемент таблицы FAT занимает на диске определенное место, т.е. под него выделяется определенное количество бит. Используются 12-ти, 16 32-битовые элементы FAT. Соответственно файловая система носит название FAT12, FAT16 или FAT32.
Длина элемента FAT определяет разрядность хранимого в нем двоичного числа, а значит и максимальный номер кластера, информация о котором находиться в этом элементе. Поэтому длина элемента FAT ограничивает максимальное количество кластеров, которые могут быть сформированы в рабочей области тома (для FAT12: 212 = 4096; для FAT-16: 216 = 65535; для FAT-32: 232 = 4294967296).
12-битовый формат годиться только для гибких дисков (дискет) с небольшим количеством секторов при этом вся таблица FAT помещается в одном секторе диска.
16-ти и 32-битовые версии FAT были разработаны для жестких дисков. В настоящее время используется в основном FAT32, FAT16 может использоваться только с дисками небольшого объема, которые в настоящий момент уже не применяются. Разберем почему. Пусть нам необходимо организовать файловую систему на диске объемом 4Гбайта (очевидно, что речь идет о Flash-диске). Если мы используем FAT16, количество используемых кластеров на диске может достигать 216. Вычислим размер одного кластера, размер всего диска 4*230 делим на количество кластеров:
Размер кластера = 4*230 / 216 = 216 = 64КБайта
Это значит, что даже для хранения файла размером один байт будет использовано 64 КБайта дисковой памяти, т.е. дисковое пространство используется крайне нерационально. Неиспользованная часть кластера называется потерянным местом (slack). В небольших файлах почти весь кластер может быть потерянным местом, а в среднем потери составляют половину размера кластера.
При применении 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 символов, и операционная система составляет полное длинное имя из всех записей.