Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример 8.3. Функция переключения контекста в ядре Linux/x86 5 страница



Таблица 9.7. Список команд контроллера КМД, цит. по [МикроЭВМ 1988]

Код Мнемоника Описание
0h RD Чтение
1h WR Запись
2h RDM Чтение с маркером
3h WRM Запись с маркером
4h RDTR Чтение дорожки
5h RDID Чтение заголовка
6h FORMAT Форматирование дорожки
7h SEEK Подача головки
8h SET Установка параметров
9h RDERR Чтение состояния и ошибок
Fh LOAD Загрузка

Контроллер жестких дисков ST506
Более сложный контроллер ST506 был разработан фирмой Western Digital в конце 70-х годов прошлого века для управления жесткими дисками, подключаемыми к микропроцессорным системам. Этот контроллер и его усовершенствованная версия, ST412, широко применялись для подключения жестких дисков к IBM PC и совместимых с ними компьютерах [citforum.ukrpak.net IDE, Гук 2000, PC Guide IDE].
Контроллер ST506 допускал подключение двух жестких дисков емкостью до 40МЬ, использующих модифицированную частотную модуляцию, а более поздние версии контроллера — групповую модуляцию RLL. Как и описанный выше КМД, контроллер содержал логику управления мотором шпинделя и подачей головок, буфер для одного сектора и схемы модуляции и демодуляции МЧМ. Диски присоединялись к контроллеру двумя плоскими кабелями: один, с 34-мя проводами, использовался для передачи сигналов управления двигателями, а второй, 20-проводной — для передачи модулированных сигналов МЧМ.
Центральному процессору контроллер ST506 доступен в виде двух блоков регистров, управляющего и командного. Блок управляющих регистров размещается по адресам Ox3F4-Ox3F7, а блок командных— по адресам 1FO-1F7 (табл. 9.8).
Управляющие регистры используются для доступа к регистрам данных и статуса без подачи контроллеру сигнала о том, что регистр прочитан (смысл этого станет ясен далее). Пожалуй, единственный самостоятельно полезный бит в этих регистрах управляет разрешением прерываний от контроллера. Основная работа с контроллером происходит через блок из восьми командных регистров, один из которых является регистром данных.
При исполнении команды записи контроллер подает головку к дорожке, указанной регистрами CY и DK, генерирует прерывание и выставляет сигнал DRQ (табл. 9.9), сигнализируя процессору, что готов принять данные. Затем процессор производит 512 операций записи в порт данных, заполняя буфер. Контроллер выполняет запись, генерирует прерывание и, если счетчик секторов еще не сравнялся с нулем, увеличивает номер сектора и снова выставляет сигнал DRQ.
Операция чтения выполняется аналогично, с той лишь разницей, что контроллер сначала считывает сектор, и лишь потом выставляет DRQ. Циклы чтения и записи регистра данных, таким образом, приводят к увеличению счетчика буфера. Набор команд контроллера приведен в табл. 9.10.

Таблица 9.8. Командные регистры контроллера ST506, цит. по [chip.ms.mff.cuni.cz АТА2]

Адрес Функция (чтение) Функция (запись) Код
0x1 F0 Данные (младш.) Данные (младш.)  
0x1 F1 Ошибка Прекомпенсация PC
0x1 F2 Счетчик секторов — " — SC
0x1 F3 Номер сектора — " — SN
0x1 F4 Цилиндр (младш.) — " — CY
0x1 F5 Цилиндр (старш.) — " — CY
0x1 F6 Устройство/поверхность — " — DH
0x1 F7 Статус Команда  

Таблица 9.9. Биты регистра статуса ST506, цит. по [chip.ms.mff.cuni.cz IDE]

Бит Мнемоника Описание
  BUSY Устройство занято
  DRDY Устройство готово принимать команды
  DWF Ошибка записи
  DSC Подача головки завершена
  DRQ Запрос данных
  CORR Исправимая ошибка при чтении данных
  INDEX Маркер начала дорожки
  ERROR Ошибка

Таблица 9.10. Команды контроллера ST506, цит. по [chip.ms.mff.cuni.cz IDE]

Код Описание PC SC SN CY DH
90h Диагностика привода D+
50h Форматировать дорожку V V
20h Чтение секторов с повтором V V V V
21h Чтение секторов V V V V
40h Проверка секторов с повтором V V V V
41h Проверка секторов V V V V
1Xh Возврат к дорожке D
7Xh Подача головки V V
30h Запись секторов с повтором V V V V
31h Запись секторов V V V V

V— используется значение регистра
D — используется только бит выбора диска
D+ — независимо от бита выбора диска, реагируют оба диска

Контроллеры жестких дисков ESDI, IDE, EIDE
Дальнейшее совершенствование ST506 шло в направлении переноса функции контроллера на сам жесткий диск. Первым шагом стал интерфейс ESDI, предложенный фирмой IBM в 1985 году. В ESDI модулирование сигнала выполнялось не контроллером, а платой, установленной на диске. Это позволило, во-первых, использовать жесткие диски со схемами модуляции, отличными от МЧМ и RLL и, во-вторых, увеличить допустимую длину кабелей до трех метров. Контроллер ESDI по регистрам и набору команд был полностью совместим с ST506/412, но обеспечивал работу с дисками большей емкости и большей производительности.
Следующий, более радикальный, шаг был сделан в следующем году фирмами Western Digital и Compaq, предложившими перенести весь контроллер на жесткий диск. Соответствующий конструктив был назван IDE (Integrated Drive Electronics — интегрированная на приводе электроника).
40-жильный плоский кабель IDE представляет собой, фактически, расширение шин адреса и данных ISA. По нему передаются 16 бит данных и пять линий адреса. Первые две линии адреса выбирают группу регистров — контрольный или командный блок регистров, расположенных по тем же адресам шины ISA, что и соответствующие регистры ST506. Последние три линии выбирают один из регистров соответствующей группы и через линии данных кабеля подключают его к шине данных ISA.
IDE, как и ST506, допускает подключение двух жестких дисков, Каждый из дисков имеет свой контроллер и свои блоки регистров. Когда ЦПУ производит запись в эти регистры, она происходит в регистры обоих контроллеров. Однако на запросы чтения и, тем более, исполнения команды откликается только тот контроллер, который выбран регистром он. Эта весьма своеобразная архитектура позволила сохранить полную программную совместимость с контроллером ST506 при полном же изменении конструктива. Основным недостатком этой архитектуры является тот печальный факт, что пока один диск отрабатывает команду или передает данные, обращения ко второму диску невозможны.
IDE несколько позднее получил статус стандарта ANSI под названием ATA (AT Attachment— [интерфейс] присоединения к IBM PC/AT) [www.t13.org], и до сих пор является основным способом подключения жестких дисков к настольным компьютерам и иногда даже к маломощным серверам, причем не только на основе процессоров х86, но и PowerMac, SPARCStation и др.
Современные версии стандарта поддерживают обмен 16-разрядными данными (при нормальной отработке команды код ошибки не нужен, а прекомпенсация современными контроллерами вообще не используется, поэтому для данных можно использовать регистры 0x1 FO и 0x1 F1, образующие при этом единый 16-разрядный регистр), автоидентификацию геометрии и других параметров жестких дисков, логическую адресацию блоков (LBA — Logical Block Addressing, когда регистры SN, CY и 4 младших бита он образуют линейный 28-битный адрес сектора), работу в режиме ПДП и передачу данных со скоростями до 60 Мбит/с [Гук 2000, citforum.ukrpak.net IDE, PC Guide IDE, www.t13.org].
Расширение протокола ATAPI (ATA Packet Interface) пакетный интерфейс ATA предусматривает также возможность управления недисковыми устройствами (CD-ROM, стриммерами, магнитооптическими дисками) путем передачи через регистр данных 12-байтовых блоков команд, аналогичных командам SCSI.

Производительность жестких дисков

Скорость работы дискового накопителя определяется рядом параметров. Во-первых, любой обмен данными с таким устройством предваряется двумя обязательными задержками: позиционированием блока головок и ротационной задержкой (rotational delay), когда контроллер ждет, пока требуемый сектор подъедет к головке. Кроме того, само чтение сектора происходит не мгновенно, и, наконец, необходимо принимать во внимание скорость передачи данных по шине, к которой подключен диск, и возможные коллицизии на этой шине.
Задержку позиционирования головки можно в определенных пределах сокращать облегчением блока головок и совершенствованием механики. Единственный способ сокращения ротационной задержки — это увеличение скорости вращения диска. У современных дисков эта скорость достигает 15000 об/мин. Скорость вращения повышает также и скорость чтения отдельного сектора. Кроме того, увеличение плотности записи (как за счет улучшения физических характеристик магнитного слоя, так и за счет совершенствования способов модуляции) и обусловленное этим увеличение количества секторов на дорожке также ускоряет считывание каждого отдельного сектора.
Любопытный прием сокращения ротационной задержки при чтении последовательных секторов — это форматирование дисков с чередованием (interleave), когда номера секторов на дорожке не совпадают с их физической последовательностью (рис. 9.38). Количество физических секторов, размещенных между логически последовательными секторами, называется коэффициентом чередования.

Рис. 9.38. Дорожка диска, отформатированного с чередованием

Благодаря чередованию, если ЦПУ сформирует команду чтения следующего сектора немгновенно после завершения передачи предыдущего (на практике, это всегда происходит немгновенно), не придется ждать следующего оборота диска. Впрочем, если коэффициент чередования окажется слишком большим, ждать подхода следующего сектора все-таки придется. В годы молодости автора подбор оптимальных параметров чередования для жестких дисков был почти столь же популярным развлечением, каким ныне является "разгон" (подбор частот процессора и системной и периферийной шин, которые выше паспортных, но обеспечивают более или менее устойчивую работу системы).
Ряд файловых систем, разработанных в 80-е годы, реализовали свои собственные схемы чередования, размещая последовательные блоки файлов в чередующиеся физические секторы. Современные дисковые контроллеры предоставляют логику опережающего считывания и отложенной записи, которые снижают потребность в таких приемах. Кроме того, фабричное форматирование жестких дисков обычно сразу осуществляется с оптимальным чередованием.
Для сокращения времени подачи головки нередко используют сортировку запросов по номеру дорожки. В [Дейтел 1987) приводится анализ нескольких алгоритмов такой сортировки. В наше время шире всего используется элеваторная сортировка (в |Дейтел 1987] она называется SCAN). При отсортированных в соответствии с этим алгоритмом запросах, блок головок начинает от внутренней дорожки (или, точнее, от запроса, ближайшего к этой дорожке) и движется к наружной, исполняя последовательные запросы так, чтобы направление движения головки не изменялось (рис. 9.39). Запросы, поступающие на уже пройденные дорожки, откладываются на обратный проход. Достигнув внешней дорожки (или, точнее, самой внешней из дорожек, на которую есть запрос), блок головок меняет направление движения.

Рис. 9.39. Элеваторная сортировка

Сортировке подвергаются только запросы на чтение. По причинам, которые мы в полной мере поймем в главе 11, запросы на запись практически никогда не переупорядочиваются.

Дисковые массивы

  У тебя, Федот, жена, хоть умна, а все ж одна! А соткать такое за ночь — их дивизия нужна! Л. Филатов

Еще один прием оптимизация производительности дисковых накопителей — это объединение нескольких физических дисков в один большой логический диск. При таком объединении некоторые диски могут передавать данные, в то время, как другие позиционируют блок головок или ждут подхода нужного сектора к головке. Дисковые массивы выгодны не только с точки зрения производительности, но и повышают единичную емкость запоминающего устройства — это может быть, например, полезно для хранения крупных неделимых объектов, таких, как таблицы реляционной СУБД.
Следует учесть, что объединение дисков приводит к резкому снижению наработки массива на отказ: вероятности независимых событий складываются поэтому вероятность отказа любого из дисков массива равна сумме вероятностей отказа одиночного диска. Для компенсации или устранения этого недостатка данные в дисковых массивах обычно хранятся с избыточностью. Общее название всех технологий объединения дисков — RAID (Redundant Irray of Inexpensive Disks — избыточный массив недорогих дисков). Этот термин был предложен в работе [Gibson/Katz/Patterson I988], в которой проведен анализ различных технологий создания дисковых массивов с точки зрения их производительности и надежности и было рассмотрено пять возможных способов размещения избыточных данных. Предложенная авторами статьи нумерация этих технологий без ссылки на источник используется в самых разнообразных публикациях в форме RAID уровня X. В современных публикациях, например [www.acnc.com], часто упоминаются также дополнительные и комбинированные уровни RAID, в именовании которых общего согласия не достигнуто.
Впрочем, один дополнительный уровень, не упоминавшийся в статье [Gibson/Katz/Patterson 1988], практически везде понимается и именуется одинаково. Под RAID уровня 0 практически единогласно понимают простой стриппинг (stripping — дословно, разделение на полосы). Стриппинг, строго говоря, не является методом создания избыточных массивов, потому что он не предполагает избыточности: емкость результирующего логического диска равна сумме объемов физических дисков (рис. 9.40). Из-за этого RAID 0 не обсуждался в работе [Gibson/Katz/Patterson 1988].
RAID уровня 1 известен также как зеркалирование (mirroring). При зеркали-ровании на каждый из дисков записывается полная копия данных (рис. 9.41). Обычно в зеркальном режиме используется не более двух дисков. Зеркалирование обеспечивает некоторое падение производительности (обычно все-таки менее, чем двукратное), но гарантирует работоспособность системы при отказе любого из дисков. Оба эти приема широко применяются па практике, обычно с небольшим количеством дисков, не более двух, реже, трех. Они не требуют значительных вычислительных ресурсов и потому обычно реализуются программно, драйвером диска или файловой системы.
RAID уровня 2 предлагает снабжение блоков данных на дисках кодом Хэмминга (см. разд. Контрольные суммы) и размещение этого кода на отдельном диске массива. Эта технология имеет смысл, если контроллеры дисков не хранят код восстановления ошибок в собственных заголовках секторов. Поскольку современные диски практически без исключения используют восстанавливающее кодирование и динамическое переназначение дефектных секторов, RAID 2 практически не применяется.

Рис. 9.41. RAID1 (зеркалирование)

RAID уровня 3 и 4 похожи во многих отношениях. Каждый из этих методов требует не менее трех дисков и подсчета контрольной суммы таким способом, чтобы данные могли быть однозначно восстановлены при полной потере одного из дисков. В RAID уровня 3 контрольные суммы подсчитываются для каждого байта записываемых данных, а в RAID уровня 4 — для групп блоков. Для хранения контрольных сумм отводится отдельный диск.
Эти методики обеспечивают более низкую (хотя и достаточную для большинства практических целей) избыточность, чем зеркалирование, но, как стриппинг. увеличивают единичную емкость диска и повышают производительность. Для отказа всей системы требуется полный отказ более чем от одного диска; многие конструктивы дисковых массивов уровня более 2 предусматривают "горячую" (без выключения системы) замену дисков, что допускает теоретически неограниченную наработку на останов, недостижимую при использовании одиночных дисков.
RAID 3 требует изменения формата секторов диска и соответствующей переделки контроллера и не может применяться с серийными дисковыми приводами. Основным недостатком RAID 4 является необходимость обращения к диску с контрольной суммой при каждой модификации одного из блоков группы. При записи большого количества логически последовательных блоков это не проблема, но может превратиться в проблему при случайно распределенных записях одиночных блоков.
Этого недостатка лишен RAID уровня 5, в котором контрольные суммы распределены по всем дискам массива (рис. 9.42). RAID 5 находят широкое применение в серверах уровня рабочей группы, или подразделения. При программной реализации, впрочем, подсчет контрольных сумм требует значительной доли вычислительной мощности ЦПУ, поэтому широкое распространение получили "аппаратные" контроллеры RAID 5, имеющие собственный процессор и, как правило, довольно большой объем собственной памяти. Это не мешает некоторым ОС, в частности Windows NT/2000/XP, реализовать RAID 5 программно на уровне файловой системы.

Рис. 9.42. RAID уровня 5

Сети доступа к дискам

  — А теперь, прикинь солдат — где Москва, а где Багдад! Али ты смотался за ночь до Богдаду и назад? Л. Филатов

Волоконно-оптические каналы подключения дисковых устройств к компьютерам, как, например, упоминавшийся в разд. Шины FC-AL, обеспечивают высокую пропускную способность и возможность устанавливать диски на значительном удалении от компьютера, иногда даже в другом здании.
Высокая пропускная способность позволяет одновременно нескольким системам использовать одну и ту же логическую шину. В частности, это дает возможность перераспределять диски или даже их логические разделы между системами без их физического переключения. Распределение вычислительных систем, дисков (особенно зеркальных или включенных в RAID более высокого уровня) и устройств резервного копирования по разным помещениям позволяет снизить риск потери данных в случае пожара или какого-либо другого бедствия и даже обеспечить бесперебойный сервис в этих условиях (рис. 9.43).

Рис. 9.43. Сеть FC-AL с несколькими кольцами и коммутаторами

Такая механика подключения запоминающих устройств к компьютерам изменяет взгляд на взаимоотношение между вычислительными и запоминающими устройствами: вместо сервера с подключенными к нему одним или несколькими дисками мы имеем массив постоянной памяти, к которому подключены один или несколько серверов, осуществляющих поиск и транзакции над хранящимися в массиве данными. Такой взгляд на организацию внешней памяти называется SAN (Storage Access Network — сеть доступа запоминающим устройствам) (рис. 9.44).
Не следует путать SAN с файловыми серверами, серверами транзакции другими СУБД. Если последние предоставляют относительно высокоуров невые операции над хранимыми данными (поиск файлов в каталогах, транзакции над таблицами реляционной СУБД и т. д.), то SAN обеспечивает доступ к разделяемым устройствам на уровне команд SCSI — чтения и записи отдельных блоков данных.
Средства для разрешения возможных коллизий, возникающих при этом весьма ограничены: SCSI III предусматривает лишь простые средства взаимоисключения при доступе нескольких инициаторов к одному целевому устройству, сводящиеся к захвату или освобождению целого логического устройства. Это может быть приемлемо лишь для разделения ресурсов, относительно редко используемых различными серверами (например, устройств резервного копирования) или применяемых преимущественно для чтения (например, загрузочных дисков). Как мы видели в разд. Мониторыи серверы транзакций, для разрешения коллизий при интенсивной асинхронной модификации данных предпочтительнее архитектура сервера транзакций или мониторного процесса для реализации которой у современных устройств SCSI явно недостаточно интеллекта.
Впрочем, SAN представляет собой молодую технологию с неясными на момент написания книги перспективами развития. Повышение интеллекта запоминающих устройств и превращение их в серверы транзакций является одним из перспективных направлений. Второе возможное направление развития, не противоречащее первому, — конвергенция транспортных протоколов SAN с протоколами гигабитных локальных и даже глобальных сетей, например путем инкапсуляции команд и блоков данных SCSI в кадры Ethernet или даже в пакеты TCP/IP. Перспективы такой конвергенции обсуждаются (правда, в пессимистическом ключе) в работе [Neil 2000].

Рис. 9.44. Сеть доступа к дискам (SAN)

Глава 10. Драйверы внешних устройств

Драйверы внешних устройств

  Когда я на почте служил ямщиком. Ко мне постучался косматый геолог, И глядя на карту на белой стене, он усмехнулся мне. Г. Самойлов

Драйвер (driver) представляет собой специализированный программный модуль, управляющий внешним устройством. Слово driver происходит от глагола to drive (вести) и переводится с английского языка как извозчик или шофер: тот, кто ведет транспортное средство. Драйверы обеспечивают единый интерфейс для доступа к различным устройствам, тем самым устраняя зависимость пользовательских программ и ядра ОС от особенностей аппаратуры.
Драйвер не обязательно должен управлять каким-либо физическим устройством. Многие ОС предоставляют также драйверы виртуальных устройств или псевдоустройств — объектов, которые ведут себя аналогично устройству ввода-вывода, но не соответствуют никакому физическому устройству.
В виде псевдоустройств реализуются трубы в системах семейства Unix и почтовые ящики в VMS. Еще одним примером полезного псевдоустройства являются устройства /dev/null в Unix и аналогичное ему \DEV\NUL в MS DOS\Windows\OS/2. В современных системах семейства Unix в виде псевдоустройств, размещенных в псевдофайловой системе /ргос, реализован доступ к большинству параметров системы -- адресным пространствам активных процессов, статистике и параметрам настройки ядра, данным отдельных подсистем, например таблице маршрутизации сетевого протокола IP.
Прикладные программы, использующие собственные драйверы, не так уж редки - примерами таких программ могут быть GhostScript (свободно распространяемый интерпретатор языка PostScript, способный выводить программы на этом языке на различные устройства, как печатающие, так и экранные) или LATEX, который также способен печатать на самых разнообразных устройствах. Однако эта глава посвящена преимущественно драйверам, используемым ядром ОС.
Большинство ОС общего назначения запрещают пользовательским программам непосредственный доступ к аппаратуре. Это делается для повышения надежности и обеспечения безопасности в многопользовательских системах. В таких системах драйверы являются для прикладных программ единственным способом доступа к внешнему миру.
Еще одна важная функция драйвера- это взаимоисключение доступа к устройству в средах с вытесняющей многозадачностью. Допускать одновременный неконтролируемый доступ к устройству нескольких параллельно исполняющихся процессов просто нельзя, потому что для большинства внешних устройств даже простейшие операции ввода-вывода не являются атомарными.
Например, в большинстве аппаратных реализаций последовательного порта RS232 передача байта состоит из четырех шагов: записи значения в регистр данных, записи команды "передавать" в регистр команды, ожидания прерывания по концу передачи и проверки успешности передачи путем считывания статусного регистра устройства. Нарушение последовательности шагов может приводить к неприятным последствиям — например, перезапись регистра данных после подачи команды, но до завершения передачи, может привести к остановке передачи или, что еще хуже, передаче искаженных данных и т. д.
Нельзя также забывать о неприятностях более высокого уровня — например, смешивании вывода разных процессов на печати или данных — на устройстве внешней памяти. Поэтому оказывается необходимо связать с каждым внешним устройством какой-то разграничитель доступа во времени. В современных ОС эта функция возлагается именно на драйвер. Обычно одна из нитей драйвера представляет собой процесс-монитор, выполняющий асинхронно поступающие запросы на доступ к устройству. В Unix, OS/2 и Windows NT/2000/XP этот процесс называется стратегической функцией. Подробнее этот механизм обсуждается в разд. Асинхронный ввод-вывод и Асинхронная модель ввода-вывода с точки зрения приложений.
При определении интерфейса драйвера разработчики ОС должны найти правильный баланс между противоречивыми требованиями:

Драйверы обычно разрабатываются не поставщиками операционной системы, а сторонними фирмами — разработчиками и изготовителями периферийного
оборудования. Поэтому интерфейс драйвера является ничуть не менее внешним, чем то, что обычно считается внешним интерфейсом ОС — интерфейс системных вызовов. Соответственно, к нему предъявляются те же требования, что и к любому другому внешнему интерфейсу: он должен быт умопостижимым, исчерпывающе документированным и стабильным — меняться непредсказуемо от одной версии ОС к другой. Идеальным варпан том была бы полная совместимость драйверов хотя бы снизу вверх, чтобы драйвер предыдущей версии ОС мог использоваться со всеми последующими версиями.
Потеря совместимости в данном случае означает, что все независимые изготовители оборудования должны будут обновить свои драйверы. Организация такого обновления оказывается сложной, неблагодарной и часто попросту невыполнимой задачей — например, потому, что изготовитель оборудования уже не существует как организация или отказачся от поддержки данного устройства.
Отказ от совместимости драйверов на практике означает "брошенное" периферийное оборудование и, как следствие, "брошенных" пользователей, которые оказываются вынуждены либо отказываться от установки новой системы, либо заменять оборудование. Оба варианта, естественно, не улучшают отношения пользователей к поставщику ОС, поэтому многие поставщики просто не могут позволить себе переделку подсистемы ввода-вывода. Таким образом, интерфейс драйвера часто оказывается наиболее консервативной частью ОС.





Дата публикования: 2014-11-18; Прочитано: 256 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.016 с)...