Управление распределением диска.
Все диски, как гибкие, так и жесткие, организованы одинаковым образом. Поверхность диска разделена на ряд концентрических колец, называемых дорожками, а дорожки делятся радиально на сектора. Все типы дисков используют размер сектора 512 байт в системе FАT16 (MS-DОS), в системах же нового поколения (FАT32, NTFS различных версий) размер сектора может варьироваться. Файл распределен по такому количеству секторов, которое необходимо, чтобы вместить его, но не менее одного сектора (и не более одного файла может храниться в одном секторе). Только несколько секторов на внешнем ободе магнитного диска зарезервированы для специальных нужд. Остальные доступны на основе правила "первый подошел – первого обслужат". Это означает, что по мере заполнения диска данными сектора постепенно заполняются по направлению к центру диска. При уничтожении файла сектора освобождаются, и со временем свободные области становятся разбросанными по диску, разбивая новые файлы и замедляя доступ к ним для чтения и записи. Фиксированные диски имеют некоторые специальные характеристики. Часто они состоят из двух или более параллельных пластин, у каждой из которых есть две головки, чтобы читать обе их стороны. Все дорожки, расположенные на данном расстоянии от центра, вместе называются цилиндром. Поскольку головки всех дисков двигаются тандемом, то достигается экономия перемещений, если заполнять все дорожки одного цилиндра, прежде чем переходить к следующему. Группы цилиндров могут относиться к различным операционным системам. Можно разбивать фиксированный диск на несколько разделов разного размера. По этой причине параметры фиксированного диска могут сильно отличаться. Дисковые сектора определяются магнитной информацией, которую записывает утилита форматирования диска. Информация включает идентификационный номер каждого сектора. BIОS нумерует сектора, например, 1-8, 1-9 или 1-15 и т.д. (в зависимости от емкости диска). Дорожки не маркируются, вместо этого они определяются механически по смещению головки чтения/записи от внешнего края диска. Дисковые функции BIОS обращаются к определенному сектору, указывая номера дорожки и сектора.
Для дискет первый сектор (дорожка 0, сектор 1) содержит запись начальной загрузки, которая является небольшой программой, позволяющей компьютеру считать с дискового накопителя остальные части MS DОS. Затем идут две копии таблицы размещения файлов, которые содержат информацию о распределении дискового пространства (вторая копия хранится из соображений безопасности). Затем идет корневой каталог, который содержит список файлов и ссылок на подкаталоги, а также указывает, в каком месте диска они начинаются. Наконец, далее идут две небольшие программы DОS IBMBIО.СОM и IBMDОS.СОM, которые считываются при старте и обеспечивают компьютер возможностями, необходимыми для нахождения и загрузки файла СОMMАND.СОM, который несомненно является основной частью операционной системы.
Фиксированные жёсткие диски имеют главную запись загрузки, которая содержит таблицу разделов, позволяющую разделить диск между несколькими операционными системами. Таблица разделов содержит информацию о том, где на диске начинается раздел с данными, а также первый сектор какого раздела содержит запись начальной загрузки. B остальном раздел организован так же, как и дискета.
Таблицы размещения файлов.
DOS использовала Таблицу Размещения Файлов (FAT) для покластерного распределения диска. Для каждого кластера FAT содержит 12-битный (1.5 байта) элемент. Первые два элемента FAT (три байта) соответствуют каталогу; они содержат указания о размере и формате диска. Второй и третий байты FAT всегда содержат FFFF. Первый байт используется следующим образом:
Формат | Код Формата |
D – 8 | FF |
S - 8 | FE |
D - 9 | FD |
S - 9 | FC |
QD - 9 | F9 |
QD - 15 | F9 |
Во всех этих форматах используется по 40 дорожек. Это связано с тем, что дисководы, наиболее часто использовавшиеся в семействе машин IBM/PC, разрабатывались для чтения/записи сорока дорожек. Некоторые дисководы с 133-мм дисками и практически все дисководы для 89-мм (3,5 дюйма) дисков позволяют записывать 80 дорожек. Они получили название устройств с учетверенной плотностью записи. Среди форматов, использующихся такими устройствами, наибольшее распространение получили форматы QD-9 и QD-15.
Обозначение | Количествосторон | Количество секторов | Количество дорожек | Объем (КБайт) |
QD-9 | ||||
QD-15 |
Формат QD-9 отличается от D-9 только удвоенным числом дорожек. Формат QD-9 чаще всего используется не для стандартных 133-мм дисков, а для 89-мм (3,5 дюйма).
Формат большой емкости QD-15, используемый в компьютере IBM/PC модели АТ, имеет в каждой из 80 дорожек по 15 секторов размером 512 байт. Это стало возможным благодаря использованию в компьютере АТ специальных дискет, магнитное покрытие которых отличается от обычного. Только при условии использования этих дисков и специальных дисководов может применяться такой формат.
Элементы FAT, начиная с третьего, соответствуют области данных. Каждый элемент содержит три шестнадцатеричные цифры:
Код | Значение |
Неиспользованный кластер. | |
FF8-FFF | Последний кластер файла (признак конца файла). |
XXX | Любые другие цифры означают, что кластер занят файлом и указывают на следующий кластер файла. Номер первого кластера файла хранится в каталоге. |
FF0-FF7 | Зарезервированный кластер. (FF7 соответствует плохому кластеру, если встречается вне цепочки). |
Таблица Размещения Файлов всегда начинается с первого логического сектора (второй сектор дискеты или раздела фиксированного диска), сразу после блока начальной загрузки. Если она больше одного сектора, она продолжается на непосредственно следующих секторах. Для надежности FAT хранится в двух экземплярах, записанных подряд. FAT считывается в один из буферов по необходимости (при открытии или удлинении файла и пр.); этот буфер получает наибольший приоритет сохранности, чтобы удержать FAT в ОЗУ как можно дольше. Для того, чтобы найти номер следующего кластера файла:
1. Умножить номер кластера на 1.5 (т.е. на длину элемента FAT)
2. Целая часть произведения равна смещению в FAT, по которому находится элемент, соответствующий данному кластеру и содержащий номер следующего кластера.
3. Переслать найденное слово в регистр командой MOV.
4. Если номер кластера четный, взять младшие 12 бит, иначе старшие 12 бит.
5. Если результат больше или равен FF8, то данный кластер – последний в файле, иначе полученные 12 бит представляют номер следующего кластера. Операции INT 25 и INT 26, а также отладчик DEBUG работают с логическими секторами. Чтобы вычислить номер логического сектора по номеру кластера:
1. Вычесть 2 из номера кластера;
2. Умножить результат на число секторов в кластере;
3. Прибавить номер логического сектора начала области данных.
При большем размере кластера напрасно расходуется дисковое пространство, но когда большие диски имеют малый размер кластера, то таблица размещения файлов становится слишком большой. При работе с дисками DOS загружает копию FАT в память, по возможности сохраняя ее там, поэтому при большом размере FАT может расходоваться много оперативной памяти. Поскольку большинство РС/АT имеют «достаточно много» памяти, то для них приемлемы намного большие FАT. Поэтому для 20M винчестера взяты меньшие размеры кластеров, чем для 10M, обеспечивая экономию дискового пространства. Для дискет емкостью 1.2M выбран кластер размером в 1 сектор, так как их основное назначение состоит в хранении копий жесткого диска, а, следовательно, компактность очень важна.
Структура таблицы разделов
Блок начальной загрузки должен быть записан в первом секторе каждого фиксированного диски и содержать следующее:
1. Программу загрузки считывания блока начальной загрузки одной из операционных систем и передачи ему управления.
2. Таблицу разделов в конце блока начальной загрузки. Каждый элемент таблицы имеет длину 16 байт и содержит номера начального и конечного цилиндра, сектора и головки для соответствующего раздела, а также число секторов перед разделом и число секторов в разделе. Байт "признака загрузки" (boot indicator) используется блоком начальной загрузки для выяснения, какой раздел содержит загружаемую операционную систему. Программа инициализации FDISK помечает загружаемый раздел кодом 80H в этом поле; остальные разделы помечаются кодом 00. Код 80H указывает стандартной программе начальной загрузки считать сектор, номер которого находится в следующих трех байтах. В этом секторе расположен блок начальной загрузки выбранной операционной системы, который ответственен за остальную часть загрузки. Блок начальной загрузки всегда загружается по адресу 0:7C00.
Периферийные устройства (Лекция 9)