10/02/94 05:37pm
diski.lek
П.Нортон, Р.Уилтон "IBM PC и PS/2
руководство по
программированию" перевод
В.Н.Григорьева М "Радио и
связь" 1994
Подсистема дисковой памяти (логический формат диска).
Предназначена
для хранения информации и как
средство обмена информацией между
компьютерами. Может использоваться
для организации небольшого архива.
Носителем информации является
магнитный слой на поверхности
диска.
Для записи/считывания используется
ДИСКОВОД.
Дисководы и диски различаются:
Размером;
Возможностью извлечения дисков из дисководов;
Скоростью вращения дисков;
Количеством дисков на одном приводе (размером пакета дисков);
Способом кодирования информации при записи (емкостью);
Физическим способом записи информации (направлением вектора намагниченности).
Организация пакета магнитных дисков:
Пакет состоит из одного или нескольких дисков;
Каждый диск имеет одну или две рабочие поверхности;
Каждая поверхность логически разбита на концентрические окружности, имеюшие номера - ДОРОЖКИ (ТРЕКИ);
Дорожки с одном номером, но на разных дисках образуют ЦИЛИНДР, а дорожки его образующие называются ПОВЕРХНОСТЯМИ ЦИЛИНДРА, не все физические поверхности используются для хранения информации;
Каждая дорожка логически разбита на СЕКТОРА, имеющие номера;
Каждый сектор может быть поделен на БЛОКИ, имеющие номера;
Каждый блок (или сектор) имеет ЗАГОЛОВОК и СОБСТВЕННО БЛОК;
Блоки (или сектора) могут объединяться в КЛАСТЕРЫ, размер кластера кратен степени числа два. В этом случае дисковое пространство выделяется кластерами.
Физически присутствует одна или более меток для обозначения начала цилиндра и секторов.
Таким образом
для обращения к диску необходимо
указать: номер дорожки, номер
поверхности (головки), номер
сектора и номер блока.
Нумерация головок и цилиндров
начанается с нуля, а секторов с
единицы.
Операционная система MS DOS не делит сектора на блоки, кроме этого в большинстве случаев ЛОГИЧЕСКИ производится сквозная нумерация в системе: цилиндр - поверхность - сектор с адресацией через сектора.
Форматы гибких дисков.
Гибкие диски
можно классифицировать по
нескольким параметрам (см. выше).
Для программиста наиболее
интересно деление по двум
признакам:
1 Загрузочный диск или нет. На диске может быть записана операционная система; в этом случае диск считается загрузочным. Такой диск на нулевом цилиндре, нулевой поверхности в секторе один хранит программу начальной загрузки. Когда BIOS пытается загрузить ОС производится считывание загрузочного сектора и проверяются последние два байта; если там записана последовательность 55h, AAh то диск считается загрузочным и считанному фрагменту передается управление.
2 Емкость диска. Для указания емкости служит байт, распологающийся первым в таблице размещения файлов:
FEh 160К
F9h 1.2М 5-дюймов или 720К 3-дюйма
FFh 320К
F0h 1.44М
FCh 180К
F8h фиксированный диск
FDh 360К
Пользователь может придумывать свои форматы дисков, но желательно сохранение совместимости. Существуют драйверы, способные работать с нестандартными (в некоторых пределах) разметками дисков.
Форматы фиксированных дисков
Форматы фиксированых дисков более разнообразны, чем форматы гибких. Это объясняется стремлением фирм производителей получить максимальную емкость и тем, что такой диск не покидает корпуса компьютера. Поскольку емкость фиксированного диска значительна, доступное пространство может быть поделено на РАЗДЕЛЫ. Работа с каждым разделом происходит независимо от других и каждый из них может иметь свой загрузочный сектор и свою ОС. Возможно иметь четыре раздела.
Первый сектор фиксированного диска содержит 64-байтовую таблицу разделов, начинающуюся со смещения 1BEh. Для описания раздела отводится 16 байт:
0 Индикатор загрузки (80h - загружаемый, 0 - нет);
1 Начальный номер головки;
2,3 Начальный номер цилиндра (10 битов) и номер сектора (6 битов);
4 Сиситемный индикатор:
1 - первичный раздел DOS, 12 - битовая FAT
2 - XENIX
4 - первичный раздел DOS, 16 - битовая FAT
5 - расширенный раздел DOS
8 - раздел, отличный от DOS;
5 Последний номер головки;
6,7 Последний номер цилиндра и сектора;
8,9,А,В Начальный сектор (относительно начала диска);
С,D,E,F Число секторов в разделе.
ВНИМАНИЕ: Искажение таблици разделов может привести к полной потере информации на диске!
Логическая организация диска (раздела).
При форматировании дискеты или раздела фиксированного диска создается его логическая структура, состоящая из четырех компанент:
1 Резервируемая область - несколько секторов, одним из которых является загрузочный сектор;
2 Таблица
размещения файлов (FAT) - отображает
использование дискового
пространства. Размер области
зависит от размера диска или
раздела.
Достаточно часто таблица
дублируется;
3 Корневой каталог - содержит основную информацию о файлах. Его размер также зависит от размера диска или раздела;
4 Область файлов и подкаталогов - оснавная (полезная) часть дискового пространства.
диск |
емкость |
зарез.область |
FAT |
корн.каталог |
кластер |
5 |
360К |
1 |
4 |
7 |
2 |
5 |
1.2М |
1 |
14 |
14 |
1 |
3 |
720К |
1 |
6 |
7 |
2 |
3 |
1.44М |
1 |
18 |
14 |
1 |
Структура загрузочного сектора (смещение - назначение):
00h - Команда безусловного перехода к программе собственно загрузки;
03h - Идентификатор системы;
0Bh - Число байтов в секторе;
0Dh - Число секторов в кластере;
0Eh - Число секторов в зарезервированной области;
10h - Число копий таблицы FAT;
11h - Число записей в корневом каталоге;
13h - Общее число секторов;
15h - Описатель накопителя системы DOS;
16h - Число секторов в таблице FAT;
18h - Число секторов на дорожке;
1Ah - Число головок;
1Ch - Число скрытых секторов;
Структура корневого каталога (Запись о файле занимает 32 байта смещение - назначение):
00h - Имя файла, если 1-й байт E5h - файл удален, 00h - конец списка;
08h - Расширение (спецификация);
0Bh - Атрибуты;
0Ch - Зарезервировано;
16h - Время = (часы * 2048) + (минуты * 32) + (секунды div 2);
18h - Дата = ((год - 1980) * 512) + (месяц * 32) + день;
1Ah - Начальный номер кластера;
1Ch - Размер файла.
Формат байта атрибутов:
5 Устанавливается если файл модифицировался и сбрасывается при включении файла в архив;
4 Признак файла-подкаталога (его длина устанавливается нулевой);
3 Обозначает, что эта запись метка тома;
2 Системный файл;
1 Скрытый файл;
0 Только чтение (многими программами не анализируется).
Подкаталоги.
Подкаталоги хранятся как обычные файлы и могут (в отличие от корневого каталога) содержать произвольное количество файлов. В каждом подкаталоге содержится два файла с именами "." и "..". Первый из них содержит ссылку сам на себя, а второй на родительский каталог.
Область файлов.
Пространство
для файлов выделяется кластерами
по мере необходимости.
В общем случае кластеры выделяются
в произвольном порядке и файл
получается фрагментированным.
Фрагментация увеличивает время
доступа к файлу. Для увеличения
быстродействия дисковой
подсистемы производят
ДЕФРАГМЕНТАЦИЮ файлов и СЖАТИЕ
дискового пространства. Если файл
копируется целиком, то ОС пытается
найти подходящий фрагмент
пространства.
Таблица размещения файлов.
File Allocation Table
является картой использования
дискового пространства. Хотя FAT
дублируется многие программы
используют только первый вариант.
Каждый элемент таблицы строго
соответствует кластеру области
файлов.
Информация о файлах представляет
собой односвязный список. Первые
две записи содержат служебную
информацию: первый байт содержит
описатель накопителя, аналогичный
значению из таблици загрузчика;
остальные биты равны "1".
FAT содержит 12-ти или 16-ти битовые элементы. Первые используются если количество кластеров менее 4078.
Возможные значения записей FAT:
12-бит |
16-бит |
назначение |
0h |
0h |
Неиспользуемый кластер; |
FF0-FF6h |
FFF0-FFF6h |
Зарезервированный; |
FF7h |
FFF7h |
Дефектный; |
FF8-FFF |
FFF8-FFFFh |
Последний кластер файла; |
другие значения - Номер следующего кластера.
При работе с 16-ти битовыми записями для получения значения кластера необходимо его номер увеличить вдвое.
При работе с 12-ти битовым вариантом необходимо умножить номер записи на три, затем поделить на два и по полученному смещению прочитать значение; если речь идет о кластере с четным номером, то отбрасывается старшая цифра, иначе - младшая.
При работе системы возможны повреждения таблицы размещения файлов, что может привести к потере участков дискового пространства, склеиванию или пересечению файлов. Существуют специальные программы, отслеживающие цепочки FAT и, при возможности, исправляющие ошибки.
Внося изменения в FAT можно осуществлять защиту информации от копирования, вынося часть информации в незарегистрированные (для защищаемого файла) кластеры.