В подсистеме управления дисками аппаратные драйверы поддерживают для верхних уровней представление диска как последовательного набора блоков одинакового размера (наиболее часто размером 512 байт), преобразуя вместе с контроллером номер блока в более сложный адрес, состоящий из номеров цилиндра, головки и сектора.

Однако такие понятия как «файл» и «файловая система», аппаратные драйверы дисков не поддерживают – эти удобные для пользователя абстракции создаются на более высоком уровне программным обеспечением файловых систем, которые в современных ОС также оформляются как драйвер, только высокоуровневый.

Для унификации представления различных файловых систем в подсистеме ввода-вывода может использоваться общий драйвер верхнего уровня, играющий роль диспетчера нескольких драйверов файловых систем. На рис. 2.6 в качестве примера показана структура драйверов дисковой подсистемы, реализованная в диспетчере VFS (Virtual File System), применяемом в операционных системах UNIX.

Рис. 2.6. Пример многослойной структуры драйверов дисковой подсистемы

Разнообразие устройств ввода-вывода делает особенно актуальной функцию операционной системы по созданию экранирующего логического интерфейса между периферийными устройствами и приложениями. Практически все ОС поддерживают в качестве основного такого интерфейса файловую модель периферийных устройств, когда любое устройство выглядит для прикладного программиста последовательным набором байт, с которым можно работать с помощью унифицированных системных вызовов (например, read и write), задавая имя файла-устройства и смещение от начала последовательности байт.

В подсистемах ввода-вывода для согласования скоростей обмена широко используется буферизация данных в оперативной памяти. Однако буферизация только на основе оперативной памяти оказывается недостаточной – разница между скоростью обмена с оперативной памятью, куда процессы помещают данные для обработки, и скоростью работы внешнего устройства часто становится слишком значительной, чтобы в качестве временного буфера использовать оперативную память – ее может просто не хватить. Для таких случаев часто используют в качестве буфера дисковый файл, называемый спул-файлом.

Типичным примером спулинга является организация вывода данных на принтер. Другим решением этой проблемы является использование большой буферной памяти в контроллерах внешних устройств.

2.4.2. Организация внешней памяти на магнитных дисках

Для организации внешней памяти используются недорогие, но достаточно быстродействующие и емкие устройства с прямым доступом к данным – накопители на жестких магнитных дисках (НЖМД) или просто диски. Дисковая подсистема для большинства компьютеров является одной из важных, поэтому рассмотрим ее подробнее. Именно на магнитных дисках чаще всего располагается загружаемая в компьютер ОС, которая и обеспечивает удобный интерфейс для работы.

Из оперативной памяти в НЖМД и обратно данные передаются байтами, а вот записываются непосредственно на диск и считываются с него они уже последовательно (побитно). Из-за того, что запись и считывание бита данных не является абсолютно надежными операциями, данные перед записью кодируЮтся с достаточно большой избыточностью. Для этой цели применяют коды Рида–Соломона.

Избыточное кодирование информационных данных позволяет не только обнаруживать ошибки, но и автоматически исправлять их. Следовательно, перед тем как данные, считанные с поверхности диска, будут переданы в оперативную память, их нужно предварительно обработать – декодировать. На эту операцию необходимо некоторое время, за которое диск успевает повернуться на некоторый угол.

Поэтому на диске данные хранятся порциями – кодовыми блоками, имеющими информационную часть и некоторую проверочную часть. Эти блоки называют секторами (sectors), имеющими стандартизованный размер информационной части 512 байт.

При фиксированном положении головки секторы образуют дорожку (трек – track). Дорожки и секторы создаются в результате выполнения процедуры физического или низкоуровневого форматирования диска, предшествующего использованию диска (при производстве диска).

Группы дорожек одного радиуса, расположенные на поверхностях дисков образуют цилиндры (cylinders). Выбор конкретной дорожки в цилиндре осуществляется указанием головки (head) записи-считывания. Таким образом, адрес конкретного блока данных ранее указывался с помощью трех координат C - H - S – номеров цилиндра, головки и сектора (рис. 2.7).

Рис. 2.7. Структура размещения данных на диске

Сейчас применяют другой метод адресации, при котором все секторы просто пронумерованы – спецификация LBA (Logical Block Addressing).

Для структуризации данных на магнитном диске полезно поделить все дисковое пространство на разделы (partitions). Такое деление позволяет организовать на одном физическом устройстве несколько логических устройств (логических дисков). Причем на каждом разделе может быть организована своя файловая система.

Если на компьютере необходимо иметь несколько операционных систем, то каждую ОС желательно устанавливать в разные разделы, а, например, операционной системе Linux нужно иметь не менее двух разделов, поскольку файл подкачки (страничный файл) должен располагаться в отдельном разделе.

Структура данных, несущая информацию о логической организации диска, вместе с небольшой программой, с помощью которой можно ее проанализировать, а также найти и загрузить в оперативную память программу загрузки ОС, получила название главной загрузочной записи (Master Boot Record, MBR).

MBR располагается в самом первом секторе диска, т. е. в секторе с координатами 0-0-1. Программа, расположенная в MBR, носит название внесистемного загрузчика.

Так как сектор состоит всего из 512 байт и кроме программы в нем должна располагаться информация об организации диска, то внесистемный загрузчик прост, а структура данных, называемая таблицей разделов (Partition Table), занимает всего 64 байт. Таблица разделов содержит всего четыре элемента (строки) по 16 байт.

Каждый элемент таблицы описывает один раздел двумя способами: через координаты C - H - S начального и конечного секторов, а также через номер первого сектора в спецификации LBA и общее число секторов в разделе (табл. 2.1).

Таблица 2.1

Формат элемента таблицы разделов

Название записи элемента таблицы разделов

Длина, байт

Флаг активности раздела

1

Номер головки начала раздела

1

Номер сектора и цилиндра загрузочного сектора раздела

2

Кодовый идентификатор операционной системы

1

Номер головки конца раздела

1

Номер сектора и цилиндра последнего сектора раздела

2

Младшие и старшие двухбайтовые слова относительного номера начального сектора по спецификации LBA

4

Младшие и старшие двухбайтовые слова размера раздела в секторах

4

Активным (128(80 h) – активен, 0 – не активен) может быть только один раздел – он является системным загрузчиком, и процесс загрузки ОС осуществляется путем загрузки его первого сектора и передачи управления на расположенную в нем программу, которая и продолжает загрузку.

Кодовый идентификатор операционной системы указывает на принадлежность данного раздела к той или иной ОС и на установку в этом разделе соответствующей файловой системы.

Если таблица разделов повреждена, то не будет загружаться ни одна установленная на компьютере операционная система.

Разделы диска могут быть двух типов: первичные и расширенные.

Первичные (primary), или простейшие (примитивные), разделы нельзя разбить на логические диски. Поэтому, если создавать только первичные разделы, то их будет всего четыре. И только один из них может быть активным. Причем для DOS - систем, Windows 9 x и еще некоторых операционных систем остальные первичные разделы в этом случае считаются невидимыми. Поэтому с помощью DOS утилиты fdisk можно создать только один первичный раздел.

Расширенный (extended) раздел на диске может быть только один, но его можно разбить на большое количество логических дисков (рис. 2.8).

Рис. 2.8. Пример разбиения диска на разделы

Расширенный раздел содержит вторичную запись MBR (Secondary MBR, SMBR), в состав которой вместо таблицы разделов входит аналогичная ей таблица логических дисков. Эта таблица описывает размещение и характеристики единственного логического диска, а также может указывать на следующую запись SMBR (следующего логического диска) и т. д.

Важно отметить, что каждый раздел начинается с первого сектора на заданных цилиндре и поверхности (головке) и имеет размер не менее одного цилиндра.

Поэтому на нулевой дорожке нулевой поверхности кроме первого сектора с MBR остальные секторы не используются.

В настоящее время для формирования таблиц разделов кроме уже упоминавшейся утилиты fdisk широко используются другие программы с графическим интерфейсом, в частности – Partition Magic. В составе ОС Windows 2000/XP для этой цели имеется консоль управления с оснасткой Управление дисками.

Следует отметить, что в операционной системе Linux логические диски и разделы нумеруются и обозначаются иным способом, чем в ОС Windows. Жесткий диск с IDE-интерфейсом, подключенный к первому порту как главный (master), имеет имя hda. Второй диск на этом же шлейфе – hdb. Далее – hdc и т. д. Разделы дисков обозначаются по номерам элементов таблицы разделов. Таким образом, независимо от того, сколько создано первичных разделов (от одного до четырех), номер первого логического диска в расширенном разделе будет пять, второго – шесть и т. д.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12