Текст
                    ЭНЦИКЛОПЕДИЯ
Наиболее полное и подробное руководство
Интерфейсы
устройств хранения:
АТА, SCSI
и другие
Михаил Гук
подробное описание
двух главных семейств
интерфейсов: АТА и SCSI
интерфейсы твердотельных
устройств хранения
на флэш-памяти
использование шин USB
FireWire для подключения
устройств хранения
С^ППТЕР

Михаил Гук Интерфейсы устройств хранения: АТА, SCSI и другие ^ППТЕР Москва Санкт-Петербург Нижний Новгород Воронеж Ростов-на-Дону Екатеринбург • Самара Новосибирск Киев • Харьков • Минск 2007
ББК 32.973.23-04я20 УДК 004.08(03) Г93 ГукМ. Г93 Интерфейсы устройств хранения: АТА, SCSI и другие. Энциклопедия. — СПб.: Питер, 2007. —447 с.: ил. ISBN 5-469-01531-9 В книге рассмотрены интерфейсы, применяемые для подключения различных типов устройств хранения: гибких и жестких магнитных дисков, оптических, ленточных и твердо- тельных. Дается обзор и сравнительные характеристики интерфейсов, применяемых как в отдельных компьютерах, так и в сетях хранения данных (SAN). Основное внимание уделено двум самым популярным семействам интерфейсов — АТА и SCSI, приводится объяснение идеологических различий этих семейств, рассматриваются тенденции их сближения. Отдель- ные главы посвящены интерфейсам твердотельных устройств хранения на флэш-памяти, а также использованию шин USB и FireWire для подключения устройств хранения. Многочисленные иллюстрации раскрывают аппаратные и программные особенности интерфейсов и протоколов. Книга предназначена для специалистов, занимающихся разработкой аппаратных и про- граммных средств компьютерной техники. Она может быть полезна и студентам вузов, углубленно изучающим архитектуру вычислительных систем и интерфейсы периферийных устройств. ББК 32.973.23-04я20 УДК 004.08(03) Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 5-469-01531-9 © ООО «Питер Пресс», 2007
Краткое содержание От автора....................................................12 Глава 1. Устройства хранения данных и их интерфейсы..........14 Глава 2. Интерфейс НГМД.....................................30 Глава 3. Интерфейс IDE: ATA/ATAPI и SATA....................45 Глава 4. Параллельный интерфейс АТА.........................53 Глава 5. Последовательный интерфейс Serial АТА...............71 Глава 6. Адаптеры и контроллеры АТА..........................87 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA...............................108 Глава 8. Система команд ATA/ATAPI и SATA....................135 Глава 9. Интерфейс SCSI.....................................174 Глава 10. Параллельные шины SCSI......................... . 205 Глава 11. Последовательный интерфейс для подключения устройств SCSI — SAS........................256 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI . . . 289 Глава 13. Интерфейс Fibre Channel...........................324 Глава 14. Интерфейсы и конструктивы твердотельных носителей информации..................................................348 Глава 15. Шины USB и FireWire для устройств хранения........369 Глава 16. Системная поддержка устройств хранения............399 Список литературы...........................................430 Алфавитный указатель........................................431
Содержание От автора...........................................................12 От издательства.....................................................13 Глава 1. Устройства хранения данных и их интерфейсы.................14 1.1. Принцип действия и характеристики устройств хранения...........14 Конструктивное исполнение устройств.............................16 Параметры устройств хранения....................................18 1.2. Интерфейсы устройств хранения..................................19 1.3. Взаимодействие с устройствами хранения.........................23 Выполнение одиночных команд.....................................25 Оптимизация обслуживания множества запросов.....................26 Эффективность ввода-вывода......................................27 Эффективность интерфейсов SCSI и АТА............................28 Глава 2. Интерфейс НГМД ............................................30 2.1. Аппаратный интерфейс...........................................30 2.2. Контроллер НГМД................................................33 2.3. Программное взаимодействие с дисководами ......................35 2.4. Команды контроллера НГМД.......................................38 Глава 3. Интерфейс IDE: ATA/ATAPI и SATA............................45 3.1. Происхождение и назначение интерфейса..........................45 3.2. Устройства, адаптеры, контроллеры и интерфейсы.................47 3.3. Категории устройств IDE........................................49 3.4. Спецификации интерфейсов АТА (IDE) ........................... 51 Глава 4. Параллельный интерфейс АТА ................................53 4.1. Физический интерфейс...........................................54 80-проводные кабели для UltraDMA................................58 4.2. Назначение сигналов АТА........................................60 4.3. Подключение и конфигурирование устройств ATA/ATAPI.............63 4.4. Режимы передачи данных для устройств АТА.......................67 Глава 5. Последовательный интерфейс Serial АТА......................71 5.1. Транспортный уровень SATA......................................73 5.2. Канальный уровень SATA ........................................76 5.3. Физический уровень SATA........................................78 Кабели и разъемы................................................80
Содержание 7 5.4. Расширения SATA для систем хранения данных.....................82 Подсистемы хранения данных (массивы устройств)..................83 Мультиплексор портов............................................84 Селектор порта..................................................86 Глава 6. Адаптеры и контроллеры АТА.................................87 6.1. Контроллер PCI IDE Bus Master..................................89 6.2. Контроллер SATA Intel 31244 .................................. 93 6.3. Контроллер SATA с интерфейсом AHCI.............................98 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA......................................108 7.1. Традиционный механизм взаимодействия для АТА..................108 7.2. Перекрытие команд и очереди в ATA/ATAPI.......................109 7.3. Поддержка многозадачности в Serial АТА .......................111 7.4. Новая модель взаимодействия — интерфейс AHCI..................113 7.5. Адресация блоков данных.......................................114 Трехмерная геометрия устройства................................117 7.6. Регистры устройств АТА........................................119 7.7. Регистры Serial АТА...........................................125 7.8. Протоколы взаимодействия с устройствами.......................128 Традиционные протоколы (одиночные команды).....................128 Перекрытие команд и использование очередей при работе с устройствами ATA/ATAPI ....................................131 Использование естественных очередей в SATA-II (NCQ)............132 Работа с интерфейсом AHCI......................................133 Глава 8. Система команд ATA/ATAPI и SATA...........................135 8.1. Команды доступа к данным АТА..................................142 8.2. Пакетный интерфейс ATAPI......................................143 8.3. Инициализация, идентификация и конфигурирование устройств.....146 8.4. Журналы ошибок и событий......................................159 8.5. Мониторинг состояния — SMART..................................161 8.6. Работа со сменными носителями ................................163 8.7. Поддержка флэш-памяти и малогабаритных карт...................164 8.8. Управление энергопотреблением и шумом ........................166 8.9. Защита данных.................................................168 8.10. Потоковое расширение команд..................................170 8.11. Устаревшие и необязательные команды .........................171 8.12. Нестандартные команды .......................................171
8 Содержание Глава 9. Интерфейс SCSI...........................................174 9.1. Спецификации SCSI ...........................................177 9.2. Архитектурная модель SCSI — SAM .............................179 Клиент-серверная модель........................................179 Конфигурации ..................................................181 Логические устройства..........................................183 Выполнение команд..............................................185 Управление заданиями...........................................190 Отличия ATAPI от SCSI..........................................192 9.3. Хост-адаптер SCSI............................................193 9.4. Типы периферийных устройств..................................194 9.5. Система команд SCSI..........................................198 Глава 10. Параллельные шины SCSI .................................205 10.1. Версии параллельной шины....................................205 10.2. Протокол параллельной шины..................................208 Сигналы шинного интерфейса ..................................208 Адресация устройств и фазы шины..............................210 Арбитраж, захват и освобождение шины.........................212 Информационные фазы..........................................214 Асинхронный режим............................................215 Синхронный режим (ST и DT)...................................216 Режим одновременного переключения............................218 Информационные блоки.........................................218 Управление шинным интерфейсом: сообщения.....................221 Согласование протокола и режимов ............................224 10.3. Процессы ввода-вывода на шине SCSI..........................226 Выполнение команд в традиционном варианте протокола..........227 Протокол с передачей информационных блоков...................229 Управление режимами портов ..................................230 10.4. Физический и электрический интерфейсы.......................231 Кабели и разъемы.............................................231 Терминаторы..................................................240 Приемопередатчики............................................243 10.5. Экспандеры..................................................245 Коммуникационный протокол экспандеров........................247 10.6. Подключение устройств к шине................................249 10.7. Конфигурирование устройств..................................254
Содержание 9 Глава 11. Последовательный интерфейс для подключения устройств SCSI — SAS................................................256 11.1. Устройства, порты и соединения SAS............................257 11.2. Топология домена и маршрутизация..............................259 11.3. Архитектурная модель SAS......................................261 11.4. Физический уровень SAS........................................261 11.5. Phy-уровень SAS ..............................................265 11.6. Канальный уровень SAS.........................................267 Примитивы ..................................................... 267 Аппаратный сброс и идентификация устройств......................268 Согласование скоростей и синхронизация устройств................269 Установление, закрытие и разрыв соединений......................271 Справедливый арбитраж и предотвращение блокировки...............273 11.7. Протокол SSP..................................................275 Канальный уровень для протокола SSP.............................275 Транспортный уровень SSP........................................276 11.8. Протокол SMP..................................................278 Канальный уровень для протокола SMP.............................278 Транспрртный и прикладной уровень SMP...........................279 11.9. Протокол STP..................................................284 Канальный уровень для протокола STP.............................284 11.10. Определение структуры домена.................................287 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI . . 289 12.1. Сеансы и соединения...........................................290 12.2. Процедура входа — iSCSI Login.................................292 12.3. Передача команд, данных и информации о состоянии, управление заданиями ..............................................293 12.4. Имена iSCSI...................................................295 12.5. Обнаружение целевых узлов.....................................296 12.6. Обнаружение ошибок и процедуры восстановления.................296 Восстановление внутри команды...................................297 Восстановление внутри соединения ...............................298 Восстановление при потере соединения............................298 Восстановление сеанса...........................................298 12.7. Безопасность..................................................299 Аутентификация по методу CHAP...................................300 Аутентификация по методу KRB5 ..................................300 Аутентификация по методу SPKM...................................301 Аутентификация по методу SRP....................................301 12.8. Синхронизация блоков..........................................302
10 Содержание 12.9. Форматы протокольных блоков...................................303 Блоки запросов и ответов команд................................305 Блоки запросов и ответов управления заданиями .................307 Блоки для передачи данных......................................309 Асинхронные сообщения..........................................312 Блоки запросов и ответов входа и выхода........................313 Блоки текстовых запросов и ответов.............................316 Блоки запроса повтора и отказа запроса.........................317 Блоки пробных запросов и ответов...............................319 12.10. Согласование параметров протокола iSCSI...........л..........321 Глава 13- Интерфейс Fibre Channel...................................324 13.1. Архитектура стандарта Fibre Channel...........................325 13.2. Топология и типы портов.......................................326 13.3. Канал передачи данных (FC-PH, FC-FS)..........................328 Среда и скорости передачи (FC-0)...............................328 Кабели и коннекторы............................................330 Последовательная передача данных (FC-1)........................334 Иерархия передач и протоколы (FC-2)............................335 Управление потоком.............................................336 Классы сервиса.................................................337 Внутренние протоколы...........................................338 Адресация узлов ...............................................339 Подключение....................................................339 13.4. Арбитражное кольцо (FC-AL)....................................340 Арбитраж и открытие соединений.................................341 Инициализация кольца...........................................341 13.5. Большие сети на базе FC.......................................342 13.6. Протокол FCP — Fibre Channel для SCSI (FC-4)..................343 Глава 14- Интерфейсы и конструктивы твердотельных носителей информации................................................348 14.1. CompactFlash..................................................349 14.2. SmartMedia Card...............................................352 Физический интерфейс...........................................353 Система команд.................................................354 Логическая организация карты...................................357 Форматы физического блока и страниц............................358 Выделение, освобождение, стирание физических блоков............361 Файловая система ..............................................362
Содержание 11 14.3. MultiMediaCard и Sequre Digital..............................363 14.4. Miniature Card...............................................367 Глава 15. Шины USB и FireWire для устройств хранения...............369 15.1. Применение шины USB для устройств хранения данных............370 Подключение устройства USB....................................371 Программное взаимодействие с устройствами USB.................372 Хост-контроллеры USB..........................................376 Протоколы для устройств хранения..............................378 15.2. Шина IEEE 1394 для устройств хранения данных.................383 Подключение устройств к шине FireWire ........................383 Взаимодействие устройств на шине IEEE 1394 .................. 386 Хост-контроллеры шины IEEE 1394 ............................. 387 Протокол SBP-2................................................390 Глава 16. Системная поддержка устройств хранения...................399 16.1. Функции дисковых сервисов BIOS ..............................401 16.2. Традиционный сервис BIOS.....................................403 16.3. Преодоление барьера 528 Мбайт (ECHS и LBA)...................412 16.4. Расширенный сервис BIOS......................................417 16.5. Загружаемые диски CD-ROM.....................................423 Список литературы..................................................430 Алфавитный указатель...............................................431
От автора Эта книга продолжает серию изданий, посвященных углубленному изучению аппаратных интерфейсов компьютеров. Сначала был написан небольшой спра- вочник «Интерфейсы ПК», за ним последовала более обстоятельная книга «Ап- паратные интерфейсы ПК. Энциклопедия» — в обеих книгах рассматриваются интерфейсы всех подсистем компьютера. В 2005 г. в книге «Шины PCI, USB и FireWire. Энциклопедия» более подробно (и на новом уровне знаний автора) были представлены три семейства универсальных интерфейсов, обозначенных в заглавии. Глубина изложения рассчитана не только на любознательных пользо- вателей, но и на разработчиков аппаратного и программного обеспечения стан- дартных и нестандартных (собственных) периферийных устройств. Чтобы не об- делять вниманием интерфейсы устройств хранения, была написана эта книга. Рассказ об интерфейсах устройств хранения начинается с их общего обзора и сравнения. Далее отдается «дань уважения» интерфейсу накопителей на гиб- ких магнитных дисках, с которых началась история полноценных персональных компьютеров. Основное внимание в книге уделяется двум семействам интерфей- сов: АТА (IDE) и SCSI. В главах с 3-й по 8-ю подробно рассматриваются аппаратные интерфейсы — па- раллельная шина и последовательный интерфейс Serial АТА (SATA-I и SATA-II). Большое внимание уделено программной модели контроллеров: от контролле- ра традиционного PCI IDE Bus Master до современного контроллера SATA, от- вечающего спецификации AHCI. Рассматриваются механизмы программного взаимодействия драйверов, контроллеров и устройств. Объясняются причины низкой эффективности традиционных механизмов взаимодействия в многоза- дачных ОС и суть новизны механизмов NCQ устройств SATA-П. В заключение этой части дается обзор системы команд ATA/ATAPI. Главы с 9-й по 13-ю посвящены семейству SCSI. Здесь рассмотрены идеология SCSI (архитектурная модель SAM) и различные варианты среды доставки ко- манд и данных. В отдельные главы выделены темы параллельных шин SCSI, по- следовательного интерфейса SAS, связи через IP-сети (iSCSI), а также интер- фейса Fibre Channel. Глава 14 посвящена специальным интерфейсам и организации твердотельных (как правило, миниатюрных) устройств хранения — разнообразных карт флэш-памяти. В главе 15 рассматривается тема подключения устройств хранения к универсаль- ным последовательным шинам USB и FireWire — «родственникам» семейств АТА и SCSI соответственно. В последней главе рассказывается о программной поддержке устройств хране- ния на уровне BIOS и драйверов операционных систем. Поиск информации в книге призван упростить обширный предметный указатель. Для облегчения восприятия используются шрифтовые выделения названий сиг-
От издательства 13 налов (Frame#, D+), инструкций, регистров и битов (SYNC). Курсивом выделены ключевые понятия, а также названия команд (READ), пакетов (DataO), состояний (Idle). Штриховка на рисунках, иллюстрирующих назначение регистров и про- граммных структур, означает зарезервированные или неиспользуемые поля. В сжатом виде почти все упомянутые темы затронуты в книге «Аппаратные средства IBM PC. Энциклопедия, 3-е издание», вышедшей несколько раньше, однако в этой книге из-за большой широты охвата глубину погружения в каж- дую тему пришлось ограничить. Многие интересные (на взгляд автора) вопросы удается раскрывать только в специализированных изданиях наподобие того, что вы держите в руках. Представленная информация кому-то может показаться из- быточной и, на первый взгляд, ненужной рядовому инженеру. Однако по собст- венному опыту разработчика аппаратных и программных интерфейсов довольно сложных систем могу с уверенностью сказать, что знание внутренних механиз- мов и протоколов «чужих» интерфейсов помогает быстрее найти правильный путь в своих разработках. Я благодарен любознательным и внимательным читателям, присылающим свои замечания, вопросы и отзывы о моих книгах. На все технические вопросы и за- мечания по книге я готов ответить по электронной почте mgook@stu.neva.ru. Пользуясь случаем, еще раз обращаюсь к читателям — пишите письма! С вашей помощью исправляются многие ошибки. Особую благодарность выражаю редактору многих моих книг Алексею Жданову за проделанную работу по устранению неоднозначности и небрежности в толко- вании различных понятий. Как и все предыдущие, эта книга не смогла бы появиться без информационной поддержки коллектива RUSNet (http://www.neva.ru), обеспечивающего доступ к Сети в ЦНИИ РТК — «базовом лагере» автора. Интернет является основным источником информации — на сайтах фирм-производителей аппаратуры и про- граммного обеспечения среди моря рекламной информации удается выуживать и ценные сведения. От издательства Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение! Подробную информацию о наших книгах вы найдете на веб-сайте издательства http://www.piter.com.
ГЛАВА 1 Устройства хранения данных и их интерфейсы Устройства хранения данных относятся к внешней памяти компьютера — они позволяют сохранять информацию для последующего ее использования незави- симо от состояния компьютера (включен или выключен). В этих устройствах могут быть реализованы различные физические принципы хранения информа- ции — магнитный, оптический, электронный в любых их сочетаниях. Внешняя память принципиально отличается от внутренней (оперативной, постоянной и специальной) способом доступа к ней процессора (исполняемой программы). Устройства внешней памяти оперируют блоками информации, но никак не байтами или словами, как, например, оперативная память. Процедуры обмена с устройствами внешней памяти привязаны к типу устройства, его контроллеру и способу подключения устройства к системе (интерфейсу). В этой главе кратко рассматриваются конструкции устройств хранения различ- ных типов, их интерфейсы, особенности работы, а также организация систем и сетей хранения данных. Подробнее о собственно устройствах хранения можно узнать в [1, 4]. 1.1. Принцип действия и характеристики устройств хранения Устройства хранения, относящиеся к внешней памяти компьютера, обеспечива- ют энергонезависимое хранение блоков информации на каком-либо физическом носителе. Физические принципы энергонезависимого хранения и соответствую- щие им носители разнообразны, ниже перечислены те, которые получили наи- большее распространение. ♦ Магнитный принцип основан на перемагничивании участков носителя в со- ответствии со значениями битов записываемой информации. Этот принцип реализуется в устройствах с подвижным носителем в виде диска или ленты, где запись и считывание производятся на дорожку (трек). Записывающая го- ловка вызывает изменение намагниченности участков трека в соответствии с записываемой битовой последовательностью. При считывании регистрирует- ся изменение магнитного поля, связанное с прохождением под головкой уча- стков трека, и из этих изменений извлекается ранее записанная информация.
1.1. Принцип действия и характеристики устройств хранения 15 Существуют также магнитные устройства хранения с неподвижным носите- лем. В «древней» истории компьютеров применялись матрицы (кубы) памяти на магнитных сердечниках. В настоящее время используются (но пока еще не широко) микросхемы памяти FRAM (Ferroelectric Random Access Memory — ферроэлектрическая оперативная память). В магнитооптических устройствах принцип хранения — магнитный, оптика (лазер) используется лишь для разо- грева перемагничиваемого участка при записи (это позволяет значительно уменьшить размер участка — повысить плотность записи) и считывании (свой- ства отраженного луча зависят от состояния магнитной «ячейки»). ♦ Оптический принцип основан на изменении оптических свойств участка но- сителя: степени прозрачности или коэффициента отражения. Способы, каки- ми эти изменения достигаются, различны. В первых оптических устройствах использовался механический способ записи — пробивали отверстия в пер- фолентах и перфокартах. В современных оптических устройствах на CD- и DVD-дисках изменение оптических свойств достигается с помощью лазера, выжигающего лунки (необратимо, однократно) или изменяющего состояние участка (возможно и обратимо, многократно). Выпуск массового тиража оп- тических носителей с информацией обеспечивается и различными техноло- гиями печати. ♦ Электрический принцип основан на пороговых эффектах в полупроводнико- вых структурах. Этот принцип используется в твердотельной памяти — флэш-памяти и EEPROM. Здесь для изменения состояния хранящей ячейки требуется значительная энергия (довольно длительное воздействие сильного электрического поля), что и происходит в процессе записи, называемом про- граммированием. Считывание требует значительно меньших затрат как энер- гии, так и времени. Под твердотельностыо в этих устройствах подразумевается отсутствие относительного движения носителя и головок записи-считывания. Устройство хранения тем или иным способом подключается к хосту — компью- теру, в котором как минимум присутствуют процессор и оперативная память. Для хоста устройство хранения должно обеспечивать возможность записи бло- ков данных из внутренней памяти (как правило, ОЗУ) в устройство и считыва- ние этих блоков из устройства в ОЗУ. Взаимодействие с устройством хранения выполняется по инициативе хоста (программы, выполняемой его процессором). В отличие от взаимодействия с внутренней памятью, которой можно опериро- вать на уровне записи-чтения отдельных байтов, операции обмена с устройства- ми хранения всегда блочные. Размер блока — неделимой единицы хранения ин- формации в устройстве — может быть как фиксированный, так и произвольный. В настоящее время наибольшее распространение получили устройства с фикси- рованным размером блока — это упрощает многие аспекты взаимодействия. Са- мый популярный размер блока — 512 байт, хотя в ряде устройств используются и иные размеры блока. Блок может быть переписан из внутренней памяти во внешнюю или обратно только целиком, и для выполнения любой операции об- мена с внешней памятью требуется специальная процедура (подпрограмма). Блоки в устройстве могут адресоваться различными способами. Наиболее про- стой и удобной является линейная адресация логических блоков, при которой
16 Глава 1. Устройства хранения данных и их интерфейсы каждый блок хранимых данных адресуется одномерным адресом (числом) LBA (Logical Block Address — адрес логического блока). Исторически прижились и иные способы адресации; для дисковых устройств — это трехмерная адресация CHS (Cylinder—Head—Sector — цилиндр—головка—сектор). По методу доступа к информации устройства внешней памяти разделяются на устройства с прямым (или непосредственным) доступом и устройства с последо- вательным доступом. В устройстве хранения прямого доступа (Direct Access Storage Device, DASD) есть возможность обращения к блокам по их адресам в произвольном порядке и, что важно, допускается произвольное чередование операций записи и чтения блоков. Традиционными устройствами с прямым дос- тупом являются дисковые накопители, и часто в понятие «диск», или «дисковое устройство» (disk device), вкладывают значение «устройство внешней памяти прямого доступа». В устройствах последовательного доступа произвольное чередование операций записи и чтения, относящихся к произвольным адресам блоков, либо невозмож- но, либо затруднительно (требует дополнительных внутренних операций, зани- мающих длительное время). Традиционными устройствами последовательного доступа являются накопители на магнитной ленте (tape device), они же стриме- ры. Здесь для доступа к блокам информации с произвольными адресами прихо- дится вхолостую считывать (или ускоренно перематывать) все блоки, находя- щиеся между ними. Необходимость последовательного сканирования блоков (вперед или назад) — неотъемлемое свойство устройств последовательного дос- тупа с подвижным носителем. Несмотря на очевидный проигрыш во времени доступа к требуемым данным, ленточные устройства последовательного доступа в качестве внешней памяти находят применение для хранения очень больших массивов информации и эффективно используются для чтения-записи длинных последовательностей блоков. Конструктивное исполнение устройств По отношению к корпусу компьютера устройства могут быть внутренними (internal) и внешними (external). Внутренние устройства помещаются в специ- альные трех- или пятидюймовые отсеки корпуса компьютера и питаются от его же блока питания. Внешние устройства помещают в отдельный корпус, а пита- ются они от собственного блока питания или от интерфейса (USB или Fire- Wire). Есть внешние устройства, которые подключаются к LPT-порту и перехва- тывают питание +5 В от разъема клавиатуры компьютера. Внешнее исполнение имеют как малогабаритные портативные устройства, так и особо крупные диско- вые массивы. Сами приводы для внешних и внутренних устройств обычно име- ют одинаковый конструктив одного из^аспространенных форматов. Интерфейсы подключения внешних устройств должны обеспечивать существен- ное удаление их от компьютера. Это удаление может быть в пределах метра (SATA, SAS), единиц-десятков метров (SCSI, FibreChannel, USB, FireWire), ки- лометров (Fibre Channel) и вообще необозримым (iSCSI). От внутренних интер- фейсов протяженности более полуметра, как правило, не требуется.
1.1. Принцип действия и характеристики устройств хранения 17 Для приводов устройств с подвижным носителем используется несколько исто- рически сложившихся типоразмеров. Дисководы с дискетами 5" имели лицевую панель 146,1 х 41,4 мм (5,75" х 1,63") и глубину около 203 мм (8"). Этот формат называется полувысотным пятидюй- мовым форматом (доли дюйма для краткости опускают) — 5" half-height form- factor. Он используется как стандартный для многих типов устройств: НГМД с дискетами диаметром 5", приводов CD и DVD, стримеров, магнитооптики, нако- пителей на жестких дисках (старые и новые значительной емкости) и др. НГМД с дискетами диаметром 3,5" имеют ширину и высоту 101,6 х 25,4 мм (4" х 1") и длину (глубину) около 146 мм (5,74"). Этот формат широко использу- ется и в современных трехдюймовых винчестерах, хотя среди них встречаются и «тонкие» модели высотой 20 мм (0,75"), и «толстые» — высотой 41 мм (1,6"). Для винчестеров портативных компьютеров используют формат 2,75" (его назы- вают и 2,5") с размерами 70 х 12,7 х 100 мм (2,76" х 0,5" х 3,95") и более тонкие — 70 х 9 х 100 мм. Накопители формата 1,8" имеют габариты 54 х 7 х 71 мм, а особо тонкие — 54 х 5 х 71 мм. Для устройств данных форматов стандартизованы разъемы их интерфейсов. Стан- дартизованы также и разъемы подключения питания (рис. 1.1). Миниатюрные разъемы используются только для питания трехдюймовых НГМД, практически для всех остальных устройств трех- и пятидюймовых форматов применяются большие разъемы. Напряжение +5 В задействуют для питания электронных схем, напряжение +12 В — для питания двигателей, хотя в некоторых накопите- лях приводы могут питаться и от цепи +5 В. В момент запуска двигателей ток потребления по цепи +12 В может превышать установившееся значение в не- сколько раз. В компьютерах и системах хранения с большим числом накопите- лей моменты их запуска стараются разнести во времени, что позволяет снизить пиковую нагрузку на источник питания. Возможность управления запуском двигателей зависит от интерфейса устройств хранения. Твердотельные устройства хранения на флэш-памяти выпускаются в разнооб- разных конструктивных исполнениях. Первые «статические диски» выполня- лись в виде устройств формата 3,5" с интерфейсом АТА. Затем появились флэш- карты расширения с интерфейсом PC Card (PCMCIA), Card Bus, которые используются в блокнотных ПК, а также в ряде бытовых электронных уст- ройств, например в цифровых фотокамерах. Современные малогабаритные кар- ты (Compact Flash, SmartMedia, ММС, SD и др.) имеют разнообразные (соб- ственные) конструктивы и интерфейсы, и для их подключения к компьютеру требуются специальные устройства, оборудованные соответствующими слотами. Очень популярными стали твердотельные устройства хранения с интерфейсом USB: устройства размером с брелок для ключей (или свисток) вставляются пря- мо в гнездо порта USB. Емкость такого «свистка» уже перевалила за гигабайт. В формате карт Compact Flash (CFA Type II, 42,8 x 36,4 x 5,0 мм) выпускаются и микровинчестеры (microdrive). Они предназначены, в основном, для цифро- вых фотокамер, но могут подключаться к LPT-порту или шине USB через адап- тер интерфейса CompactFlash (по сигналам это интерфейс АТА), правда, с поте- рей в скорости передачи.
18 Глава 1. Устройства хранения данных и их интерфейсы Рис. 1.1. Разъемы питания накопителей Параметры устройств хранения Важнейшими техническими параметрами устройств хранения являются емкость, время доступа и скорость передачи данных. Главная характеристика устройства хранения — емкость (capacity). Емкость уст- ройства в первую очередь определяется его носителем, однако она может ограни- чиваться и пределом возможности адресации блоков, свойственным тому или иному интерфейсу подключения. Время доступа (access time) определяется как усредненный интервал от получе- ния устройством запроса на чтение блока данных до фактического начала пере- дачи данных. Дисковые устройства имеют время доступа от единиц до сотен миллисекунд. Для электронных устройств внешней памяти время доступа опре- деляется быстродействием используемых микросхем памяти и при чтении со- ставляет доли микросекунд, причем запись может продолжаться значительно дольше, что объясняется природой энергонезависимой электронной памяти. Для устройств с подвижными носителями основной расход времени имеет место в процессе позиционирования головок (seek time — время поиска) и ожидания под- хода к ним требуемого участка носителей (latency — скрытый период). В опера- циях записи этот параметр не очень информативен, поскольку данные могут быть быстро помещены в кэш устройства (но еще не сохранены на носитель). От того, что может делать система (хост и другие устройства) во время этой неиз- бежной задержки, предшествующей передаче запрашиваемых данных, зависит эффективность (общая производительность) компьютерной системы. В значи- тельной степени эти возможности зависят от интерфейса устройства хранения.
1.2. Интерфейсы устройств хранения 19 Время доступа определяется принципом действия самого устройства и уровнем технологий, используемых при его изготовлении. Скоростные характеристики устройства зависят и от устройства, и от интерфейса подключения. Скорость записи и считывания определяется как отношение объема записывае- мых или считываемых данных ко времени, затрачиваемому на эту операцию. В затраты времени входят и время доступа, и время передачи данных. При этом оговаривается характер запросов — линейный или случайный, что сильно сказы- вается на скорости из-за влияния времени доступа. При определении скорости выполнения линейных запросов чтения-записи (linear transfer rate read/write) производится обращение к длинной цепочке блоков с последовательным нарас- танием адреса. При определении скорости выполнения случайных запросов чте- ния-записи (random transfer rate read/write) соседние запросы направляются в разные точки носителя. Для современных многозадачных ОС характерно чере- дующееся выполнение нескольких потоков запросов, и в каждом потоке высока вероятность последовательного нарастания адреса. Способность устройств хра- нения обслуживать множество запросов, помещая их в свои внутренние очереди, в значительной степени влияет на производительность системы в целом. Воз- можность эффективной работы с очередями существенно зависит от интерфейса устройства хранения. Скорость передачи данных (Transfer Speed, Transfer Rate, или сокращенно XFER) определяется как производительность обмена данными, измеряемая по- сле завершения поиска данных. Однако в способе измерения этого параметра возможны разночтения, поскольку современные устройства имеют в своем со- ставе буферную память существенных размеров. Скорости обмена буферной па- мяти с собственно носителем (внутренняя скорость) и с внешним интерфейсом могут существенно различаться. Если скорость работы внешнего интерфейса ог- раничивается быстродействием электронных схем и достижимой частотой пере- даваемых сигналов, то внутренняя скорость более жестко ограничивается воз- можностями электромеханических устройств (скоростью движения носителя и плотностью записи). При измерениях скорости передачи на небольших объемах пересылок проявится ограничение внешнего интерфейса буферной памяти, при средних объемах — ограничение внутренней скорости, а при больших объемах проявится еще и время поиска последующих блоков информации. Бывает, что в качестве скорости передачи данных указывают лишь максимальную скорость интерфейса, а о внутренней скорости можно судить по частоте вращения диско- вых носителей и числу секторов на треке (подробности см. в [1]). 1.2. Интерфейсы устройств хранения Как минимум, устройство хранения состоит из собственно носителя (фиксиро- ванного или сменного) и средств доступа к носителю. Под средствами доступа подразумеваются необходимые узлы записи и считывания, а для подвижных но- сителей — еще и привод и механизмы позиционирования. Для твердотельных устройств аналогом средств позиционирования являются средства адресации (выбора микросхемы, банка памяти, адреса). Контроллер устройства хранения занимается управлением носителем, избыточным кодированием и декодирова-
20 Глава 1. Устройства хранения данных и их интерфейсы нием, исправлением ошибок или/и организацией повторных обращений к носи- телю и другими вспомогательными операциями. Для хоста контроллер, совмест- но со своим программным драйвером, должен обеспечивать базовые операции: ♦ сохранение (запись) информации из указанной области внутренней памяти хоста (размером в целое количество блоков) в указанное место на носителе устройств; ♦ считывание указанных блоков с носителя устройства в указанную область внутренней памяти хоста; ♦ вспомогательные операции, включая определение состояния и параметров носителя, форматирование носителя (если требуется), тестирование и т. п. Соотношение интеллекта аппаратного (с точки зрения хоста) контроллера и слож- ности его программного драйвера (объема работы, выполняемой процессором хоста) зависит от типа устройства хранения. Для оптимизации производитель- ности системы в целом (хоста и его устройств хранения) стремятся повышать интеллект контроллера. Для удешевления устройства хранения контроллер мо- гут и упрощать до простейшего интерфейсного адаптера. Физическое местоположение контроллера зависит от реализации устройства. Обобщенная схема подключения устройства к хосту приведена на рис. 1.2. Если контроллер располагается отдельно от устройства, то интерфейс устройства хра- нения бывает сугубо специфическим. Если контроллер встроен в устройство хранения, то вся специфика взаимодействия с носителем скрывается внутри уст- ройства — во внутреннем интерфейсе между средствами доступа к носителю и контроллером. При этом появляется свобода в выборе интерфейса подключения устройства (фактически — его контроллера) к хосту. Рис. 1.2. Устройство хранения, подключенное к хосту, и его интерфейсы Существенным параметром интерфейса подключения устройства хранения явля- ется скорость передачи данных. Если интерфейс подключения устройства хра- нения обеспечивает связь средств доступа к носителю с контроллером, то этот интерфейс должен также обеспечивать передачу данных со скоростью доступа (записи и чтения) к носителю. В современных устройствах контроллер, располо- женный вместе с носителем, обладает собственной буферной памятью. При этом
1.2. Интерфейсы устройств хранения 21 проявляется независимость пропускной способности внешнего интерфейса от скорости доступа к носителю. Это дает дополнительную свободу в выборе интер- фейса подключения. Конечно, чем выше быстродействие внешнего интерфейса, тем быстрее происходит обмен данными с устройством хранения: задержка, тре- буемая для передачи данных между буферной памятью устройства и памятью хос- та, уменьшается. В самых высокоскоростных современных винчестерах внут- ренняя скорость обмена (между носителем и контроллером) приближается к гигабиту в секунду. Скорость, обеспечиваемая внешним интерфейсом, как прави- ло, выше внутренней. Однако и при медленном внешнем интерфейсе устройство хранения не теряет работоспособности, так что в ряде случаев ради удобства, де- шевизны и доступности подключения жертвуют производительностью обмена с устройством хранения. Есть устройства хранения, критичные к скорости внешне- го интерфейса: записывающие устройства оптических дисков не могут останавли- вать процесс записи в произвольном месте. Однако и эта проблема решается:, уве- личивается объем буферной памяти до такого размера, чтобы в нем умещался фрагмент, требующий непрерывной записи. К быстродействию внешнего интер- фейса критичны и ленточные устройства хранения: несвоевременность доставки данных может приводить к их переходу в старт-стопный режим, что вызывает до- полнительное снижение их производительности и повышение износа носителя. Первые устройства хранения в ПК — накопители на гибких магнитных дисках (НГМД) — подключались интерфейсным кабелем-шлейфом к контроллеру, от- деленному от самих устройств. Этот специализированный интерфейс (FDD) со- хранился до сих пор (см. главу 2), им подключают дисководы, требующие скоро- сти передачи всего 500 Кбит/с (около 60 Кбайт/с). К интерфейсу дисководов подключали и старые стримеры (очень тихоходные). Аналогичный интерфейс (опять-таки специфический ST-506) поначалу исполь- зовался и для подключения винчестеров (так называемых MFM и RLL), по нему передавались «сырые» данные записи чтения с головок диска (правда, усилен- ные) и сигналы управления приводом. Позже накопители слегка «интеллектуа- лизировали», и появился (ненадолго) интерфейс дисков ESDI, обеспечивающий скорость передачи данных до 1 Мбайт/с. Параллельная шина АТА (IDE) — самый массовый интерфейс, применяемый для устройств хранения, также является специфическим. Но эта специфика обуслов- лена историей его появления: чтобы не вводить новых интерфейсов, контроллер НЖМД, подключаемый к шине ISA, «разрезали» около интерфейса шины ISA. Цель этой операции — приблизить контроллер к приводу, из-за чего пришлось удлинить связь между основной частью контроллера (устройством АТА) и точ- кой его подключения (буферным адаптером, подключенным к шине ISA). По этому интерфейсу в параллельном виде передаются байты сохраняемых данных и содержимого регистров контроллера. Со временем место подключения изме- нилось (теперь это шина PCI и ее последователи), но ради совместимости и пре- емственности интерфейс АТА сохранялся (постепенно модернизируясь). Для устройств, логически отличающихся от жестких дисков, — оптических, магнито- оптических, ленточных и любых других — в 1996 г. была принята спецификация ATAPI. Это пакетное расширение интерфейса позволяет передавать по шине АТА устройству блоки командной информации, структура которых позаимство-
22 Глава 1. Устройства хранения данных и их интерфейсы вана из SCSI. Достигнутый потолок скорости ATA/ATAPI — 133 Мбайт/с (Ultra DMA Mode 6). Первоначально интерфейс АТА обладал ограничением адресуе- мого объема данных в 137 Гбайт, в последних версиях (ATA/ATAPI-6) это огра- ничение преодолено, нынешний «потолок» — 144 Пбайт (248 блоков). Физиче- ски интерфейс АТА — это ленточный кабель-шлейф, предназначенный для подключения устройств внутри системного блока компьютера. Первоначально интерфейс не допускал «горячего» подключения-отключения; эта возможность появилась в реализациях АТА для блокнотных, а затем и для настольных ПК (для съемных устройств). Последовательный интерфейс Serial АТА (SATA) — преемник своего параллель- ного предшественника. Здесь повышается скорость обмена с устройством, решается проблема одновременной работы с несколькими устройствами, сразу использу- ется расширенная адресация. Кабели и разъемы последовательного интерфейса SATA компактны, «горячее» подключение реализуется естественным образом: в SATA каждое устройство подключается к собственному порту хост-контролле- ра, а не к общей шине. Поначалу интерфейс SATA предназначался только для подключения внутренних устройств, позже он стал и внешним интерфейсом. В SATA-II появились новые элементы: мультиплексоры, позволяющие подклю- чать к одному порту хоста несколько устройств, и селекторы портов, позволяю- щие подключать одно устройство (или мультиплексор) к двум хостам (но рабо- тать устройство может только с одним хостом). Интерфейс SCSI — главный конкурент АТА для устройств хранения — является универсальным. Он предназначен для подключения устройств различных клас- сов: дисковых, ленточных, оптических и других устройств хранения, принтеров, сканеров, коммуникационных и прочих устройств. В интерфейсе SCSI определе- на идеология взаимодействия хоста с устройствами, эффективная при работе с множеством устройств в многозадачных системах. Интерфейс SCSI поначалу су- ществовал только в виде параллельной шины. Согласно современным стандар- там, протоколы интерфейса SCSI позволяют работать не только с параллельной шиной или последовательным интерфейсом SAS (недавно появившийся вари- ант SCSI), но и с другими средствами доставки: последовательной шиной IEEE 1394 (FireWire), Fibre Channel, SSA, а также любыми IP-сетями — iSCSI. Все ва- рианты SCSI пригодны как для внутреннего, так и для внешнего подключения; они имеют поддержку «горячего» подключения-отключения, необходимую в больших и ответственных системах хранения данных. Предел адресации данных для устройств SCSI первоначально составлял 2 Тбайт (32-разрядная адресация блоков), позже ввели возможность 64-разрядной адресации блоков (объем хра- нения - до 9 444 732 965 739 290 427 392 байт). Интерфейс SAS создан на основе дешевого интерфейса SATA и даже обеспечи- вает совместимость устройств SATA с контроллерами SAS (но не наоборот). Сферы применений этих интерфейсов различны. Устройства SAS предназначе- ны для систем хранения данных предприятий (enterprise-class), они имеют одно- или двухпортовые интерфейсы. Устройства SATA (только однопортовые) пред- назначены для настольных систем, они дешевле устройств SAS. По схемотехни- ке и встроенному ПО (firmware) устройства SAS близки к устройствам Fibre
1.3. Взаимодействие с устройствами хранения 23 Channel (двухпортовым), применяемым в сетях хранения данных (Storage Area Network, SAN) масштабов предприятия. Для внешних устройств хранения с успехом применяют подключение и к шине USB, и к LPT-порту. Интерфейс LPT-порта обеспечивает невысокую скорость передачи (до 2 Мбайт/с), но он присутствует практически на всех компьютерах (даже очень старых). Шина USB 1.0 для устройства хранения может предоста- вить пропускную способность до 1,2 Мбайт/с, шина USB 2.0 — до 25 Мбайт/с. Более эффективна для подключения внешних устройств шина FireWire, высту- пающая в роли среды доставки SCSI. Сравнительные характеристики интерфейсов устройств хранения данных приведе- ны в табл. 1.1. Здесь показаны максимальные значения основных параметров. Ре- альная скорость передачи данных, естественно, всегда ниже. Топологические огра- ничения (число устройств и максимальное удаление) для ряда интерфейсов указаны формально (в пределах работоспособности). Реальные значения, отвечаю- щие эффективной конфигурации, могут быть скромнее (например, считается, что FC-AL эффективно работает при числе узлов до 30 и длине кольца до 100 м). Под возможностью одновременного обмена подразумеваются физически одновременно выполняемые передачи информации, относящиеся к решению разных задач (от одного или нескольких инициаторов с одним или несколькими целевыми устройствами). Работа с несколькими инициаторами тоже имеется в виду одновременная (селектор порта SATA эту возможность не обеспечивает). Подробности функционирования различных интерфейсов рассмотрены в соответствующих разделах. При всем разнообразии интерфейсов в большинстве случаев выбирать прихо- дится между двумя основными — АТА (IDE) и SCSI, правда, теперь у каждого есть последовательный вариант (SATA и SAS). Шина АТА в современных систе- мах работает в режиме UltraDMA, так что по быстродействию и защищенности от ошибок она не отстает от конкурентов. Для внешних устройств широко при- меняются интерфейсы USB и FireWire. Достоинства и недостатки основных ин- терфейсов подключения устройств хранения сведены в табл. 1.2. Не попавший в таблицу интерфейс Fibre Channel применяют для подключения устройств внеш- ней памяти в больших системах. Этот интерфейс позволяет значительно разно- сить устройства памяти и компьютеры (допускается разделяемое использование устройств). Эти свойства ценны для особо ответственных применений, когда требуется обеспечить живучесть системы даже при частичных разрушениях (при стихийных бедствиях, катастрофах и прочих «радостях» современного бытия). 1.3. Взаимодействие с устройствами хранения Общей задачей программы, управляющей устройством хранения (его драйвера), является подача команд устройству и передача блоков данных из устройства в системную память хоста или из памяти в устройство. В этом обмене всегда уча- ствует центральный процессор хоста, посылающий команды в устройство и счи- тывающий его состояние. В самой передаче данных, как правило, принимает участие контроллер DMA (хотя возможен и чисто программный обмен РЮ).
Таблица 1.1. Характеристики интерфейсов устройств хранения Интерфейс FDD АТА SATA SCSI SAS FC-SW FC-AL 1394 iSCSI USB 1.Х/2.0 LPT Скорость, Мбайт/с 0,06 133 150 160 320 (640) 150 300 100 200 100 200 10-160 1-100 1,2/24 2 Число устройств 2 2 4 и выше 16 16 384 224 126 63 н/о1 127 1 Длина кабеля, м 0,5 0,5 1 25 3 60 500 10 км 60 500 10 км 4,5(100) 100 500 5 5 Максимальное уда* ление, м 0,5 0,5 1 25 (400 нс) 10 10 км 10 км 72 н/о 25 5 Одновременный обмен - - - - + + - - + - - Работа с несколькими инициаторами - - - + + + + + + - - 1 н/о — нет ограничений.
1.3. Взаимодействие с устройствами хранения 25 Таблица 1.2. Сравнение интерфейсов устройств хранения Интерфейс Достоинства Недостатки АТА Массовость. Низкая цена устройств и кабелей. Простота конфигурирова- ния. Эффективность при малом чис- ле устройств Малое число устройств: до 2 на шине (обычно есть 2 шины). Только для внутренних устройств. Низкая эффективность при работе с двумя устройствами на шине. Высокая за- грузка ЦП и большое число прерыва- ний при отработке запросов SATA То же. Независимость устройств. Высокая эффективность при под- держке NCQ и устройствами, и кон- троллером Малая распространенность уст- ройств и контроллеров с поддержкой NCQ SCSI Большое число подключаемых уст- ройств, внутренних и внешних. Высо- кая эффективность в многозадачных системах при большом числе уст- ройств Высокая цена контроллера, уст- ройств и аксессуаров (кабели, тер- минаторы). Сложность установки и конфигурирования SAS То же. Возможность физически од- новременного обмена с несколькими устройствами. Простота подключе- ния и конфигурирования Высокая цена оборудования USB Удобство подключения. Распростра- ненность. Средняя скорость (USB 2.0) Загрузка ЦП, возрастающая с увели- чением числа устройств. Низкая ско- рость (USB 1.0) FireWire Удобство подключения. Высокая ско- рость. Эффективная работа с мно- жеством устройств Малая распространенность в «мире РС» Выполнение одиночных команд Выполнение каждой команды, связанной с обменом данными между хостом и устройством, состоит из нескольких шагов. 1. Посылка команды устройству — указание типа операции (чтение, запись или другая операция); адреса начального блока данных на носителе, участвующе- го в операции; числа передаваемых блоков. Хост к этому моменту уже должен «знать» местоположение считываемых или записываемых данных в его ОЗУ. 2. Поиск требуемых данных на носителе устройства. Эта операция затрагивает только собственно устройство и его контроллер, занимающийся обслужива- нием носителя. Для устройств с встроенным контроллером (а это большинст- во современных устройств) данная операция является сугубо внутренней. Время, необходимое для ее выполнения, и скрывается за параметром «время доступа». 3. Передача данных между устройством (его контроллером) и оперативной па- мятью хоста. Скорость выполнения этой операции зависит как от внутренней скорости доступа к носителю устройства, так и от возможностей интерфейса.
26 Глава 1. Устройства хранения данных и их интерфейсы Время, требуемое для выполнения данной операции, зависит, естественно, и от объема данных, описанных в команде. 4. Завершение выполнения команды — сообщение хосту об успехе или неуспехе операции (с указанием причины неуспеха) и реальном количестве считанных или записанных данных. Если это количество не совпадает с заказанным (оно не может быть больше заказанного), то хост для удовлетворения своей по- требности в чтении или записи данных должен будет подать следующую ко- манду (аналогичную, но с иными начальным адресом и количеством переда- ваемых данных). Если заказана операция с большим количеством данных, передача данных может происходить за несколько сеансов, между которыми устройство занимается по- иском следующего блока. В каждом сеансе передается один сегмент данных, дли- на которого произвольна (но кратна размеру блока). Такие приостановки есте- ственны, например, когда считываемая или записываемая последовательность блоков пересекает границу дорожки и/или цилиндра магнитного диска. Будет ли операция продолжена после достижения границы, зависит от устройства, контроллера и интерфейса. Альтернативой продолжению является завершение команды с «честным отчетом» о проделанной работе. Если сегментация данных (их передача за несколько сеансов) поддерживается, то соблазнительна и возможность неупорядоченной доставки данных — передачи их в порядке, «удобном» устройству. Удобство определяется текущим положе- нием носителя и стремлением минимизировать затраты времени на поиск. Однако это требует как усложнения логики контроллера устройства, так и усложнения интерфейса (его протокольной части). В более простом варианте реализации вы- двигается жесткое требование упорядоченности сегментов (порций данных, пе- редаваемых за сеанс) и недопустимость их перекрытия. В самом сложном (и, воз- можно, эффективном) варианте допускается и неупорядоченность (немонотон- ность нарастания адреса), и возможность перекрытия сегментов. В последнем случае по интерфейсу может передаваться данных больше, чем заказано в коман- де; при этом, однако, сегменты не должны выходить за границы данных, объяв- ленных в команде. Оптимизация обслуживания множества запросов В многозадачных системах желательно иметь возможность параллельного обслу- живания множества запросов к устройствам хранения. При этом несколько поч- ти одновременно появившихся запросов могут относиться как к одному устрой- ству, так и к разным устройствам. Устройства, поддерживающие очереди команд (запросов, ожидающих обслуживания), позволяют принимать новые команды до того, как исполнены предыдущие. Изменение порядка обслуживания внутри устройства, которое возможно при организации очередей, позволяет оптимизи- ровать исполнение команд для повышения общей пропускной способности. Уст- ройство с подвижным носителем будет стремиться исполнять команды, данные для которых расположены ближе всего к текущему относительному положению головок и носителя. Для дисковых устройств возможна оптимизация по враще-
1.3. Взаимодействие с устройствами хранения 27 нию (rotational optimization) и по позиционированию головок (seek optimization). Таким образом минимизируются основные издержки времени. Применение оче- редей позволяет совмещать во времени издержки на постановку запросов и по- лучение результатов с задержками передачи данных, свойственными устройст- вам хранения. Поддержка очередей будет еще более эффективной, если она дополняется вышеописанной сегментацией данных, особенно в варианте с воз- можностью неупорядоченности. Однако это повышение эффективности ввода- вывода оборачивается усложнением и удорожанием устройств, протоколов, кон- троллеров и интерфейсов. В балансе между эффективностью и сложностью (стоимостью) и кроются основные различия семейств интерфейсов АТА и SCSI, которым в основном и посвящена данная книга. Эффективность ввода-вывода Не прибегая к количественным оценкам, можно сформулировать критерии эф- фективности интерфейсов и самих устройств хранения. Интерфейс должен быть как можно более плотно занят передачей полезных данных. Полная загрузка ин- терфейса возможна лишь при одновременном обслуживании множества запро- сов в разных устройствах, тогда время, необходимое для фазы поиска в одном устройстве, будет использоваться для передачи данных другими устройствами. Отдельно взятое устройство будет работать более эффективно, если отношение суммарных затрат времени на поиск к суммарному времени выполнения команд окажется наименьшим. Считая параметры (время доступа) устройства неизмен- ными, эффективность будет выше при меньшем числе запросов (команд) и боль- шем объеме данных. При большом числе относительно коротких запросов эф- фективность можно повысить, лишь поддерживая очереди команд и позволяя устройству их исполнять так, чтобы путь «перескоков» по носителю (операций поиска) был минимален. Процессорное время хоста, затрачиваемое на выполнение команд для устройств хранения, должно минимизироваться. Минимизировать (и даже в первую оче- редь) следует и число прерываний центрального процессора, обрабатываемых для обслуживания устройств хранения. Прерывания в компьютерах на базе про- цессоров х86 (то есть самых массовых) вносят большие накладные расходы. Для минимизации расхода процессорного времени приходится , усложнять контрол- леры интерфейсов устройств хранения, используя высокоэффективные механиз- мы прямого управления системной шиной для доступа к памяти (Direct Memory Access, DMA). Традиционный контроллер DMA (8237А) для работы с устройствами хранения малопригоден: его скорость передачи невысока; пересылаемый блок должен рас- полагаться в непрерывной области физических адресов памяти, не должен пе- ресекать границ 128-килобайтных страниц1 и должен располагаться в первых 16 мегабайтах адресов ОЗУ. 1 Ограничение 16-битных каналов DMA, связанное с реализацией расширения адреса для 16-разрядного контроллера 8237А.
28 Глава 1. Устройства хранения данных и их интерфейсы Современные контроллеры, обеспечивающие устройствам хранения прямой дос- туп к оперативной памяти, имеют поддержку виртуальной памяти со странич- ной организацией: они способны при чтении памяти собрать поток данных из произвольного числа областей (gathered read), а при записи «разбросать» поток по этим областям (scatter write). Для них передача блока данных, расположенно- го в непрерывной области виртуальных (логических) адресов, разбивается на не- сколько передач в областях с непрерывными физическими адресами. При этом передача описывается таблицей дескрипторов PRD (Physical Region Descriptor — дескриптор физической области). Иное название этой таблицы — scatter-gather list. Текущее состояние передачи определяется контекстом DMA — набором ре- гистров, управляющих работой канала и задающих текущий адрес ячейки памяти для обмена данными, используя таблицу (или список) дескрипторов. Для того чтобы устройство могло выполнять команды из очереди в произвольном поряд- ке, а также для поддержки сегментации данных, относящихся к одной команде, требуется управление контекстом DMA (в контроллере интерфейса подключе- ния устройств хранения) согласно с поведением собственно устройств. Жела- тельно, чтобы участие процессора хоста в этих переключениях контекста было минимальным, причем как по числу инструкций, которые необходимо выпол- нить, так и, особенно, по числу прерываний. Эффективность интерфейсов SCSI и АТА Как уже отмечалось, при всем разнообразии интерфейсов подключения устройств хранения наибольший интерес представляют семейства интерфейсов SCSI и АТА. В интерфейс SCSI изначально были заложены возможности эффективной работы с множеством подключенных устройств, получившие развитие в спецификациях SCSI-2 (1994 г.) и архитектурной модели SAM (1996 г.). Высокоэффективная поддержка очередей команд внутри устройства здесь подкреплена соответствую- щими транспортными средствами и изначально сложными контроллерами ин- терфейсов. Поддержка очередей и возможности сегментации данных (включая неупорядоченность) согласуется между участниками обмена (хост-контролле- ром и собственно устройством). Качественный контроллер SCSI пользуется эти- ми возможностями, почти не нагружая центральный процессор. Он способен оперировать множеством контекстов заданий и переключать контексты DMA по указаниям от устройств хранения. Важной особенностью идеологии SCSI явля- ется клиент-серверная модель, в которой хост является клиентом для сервера — устройства хранения. Благодаря этой модели возможно эффективное масштаби- рование системы хранения данных, подключенной к компьютеру: каждое новое устройство приходит в систему со своим «интеллектуальным ресурсом» — сер- вером, берущим на себя все заботы по организации выполнения команды. Дан- ная идеология распространяется на все версии интерфейса SCSI и его «родст- венников» — Fibre Channel и шину FireWire. Интерфейс АТА по своему происхождению является однозадачным: его праро- дитель — контроллер HDC/AT позволял поочередно исполнять одиночные ко- манды на подключенных к нему (до двух) устройствах. Для транспортировки данных можно было использовать стандартный контроллер DMA, но более вы-
1.3. Взаимодействие с устройствами хранения 29 сокую скорость передачи данных обеспечивал программный ввод-вывод (режим РЮ). Первые адаптеры АТА совместно с подключенными устройствами хранения обеспечивали ту же функциональность с теми же ограничениями. Позже по- явился стандартный контроллер PCI IDE с более эффективными (по тем време- нам) каналами прямого доступа к памяти. Этот контроллер хорошо справляется с выполнением одиночных команд для одного устройства, подключенного к шине АТА. При этом процессор занят только подачей команды, а по завершении испол- нения команды (и передач данных, выполненных по каналу DMA) он получает прерывание. С другим устройством, подключенным к той же шине АТА, можно работать только после завершения команды, посланной первому устройству, — интерфейсная шина АТА занята устройством на все время выполнения коман- ды. С переходом на многозадачные операционные системы такое ограничение стало существенным тормозом и потребовало изменений в спецификациях АТА. В спецификации ATA/ATAPI-4 (еще в 1997 г.) были введены возможность осво- бождения интерфейса (на время поиска), открывающая путь к более эффектив- ному обслуживанию пары устройств на шине, и поддержка очередей команд внутри одного устройства. Однако при подключении устройств к стандартному контроллеру PCI IDE эту возможность не используют из-за больших накладных расходов. Контроллер PCI IDE Bus Master, применяемый для современных па- раллельных интерфейсов АТА, имеет по одному контексту для каждого своего канала (шины АТА). Для работы с парой устройств и поддержки очередей про- цессор должен загружать (и перезагружать) этот контекст в зависимости от из- менения состояния обслуживаемых устройств. Эти изменения состояния опре- деляются программно по прерываниям от устройств. Большое количество прерываний сводят на нет потенциальные преимущества многозадачных воз- можностей самих устройств. Эти возможности используют только при подклю- чении устройств ATA/ATAPI к контроллеру с собственным процессором, кото- рый только тем и занимается, что обслуживает ввод-вывод. Если специальный процессор не задействуется, то для эффективной многозадачной работы кон- троллер должен иметь множество контекстов, переключаемых аппаратно. В интерфейсе SATA появилась возможность индивидуального подключения каж- дого устройства к собственному контроллеру DMA, что позволило решить про- блему одновременной работы устройств (избавиться от взаимозависимости пар устройств). Полноценная эффективная поддержка очередей — технология NCQ (см. 7.3) — появилась только в SATA-II при уходе от совместимости со стандарт- ной моделью контроллера PCI IDE и устройств АТА. Со стороны устройств это выразилось в определении способа, которым устройство сообщает контроллеру, для какой из команд требуется передача данных и какой сегмент данных дол- жен передаваться. Со стороны хоста эта поддержка выразилась в существенном усложнении контроллера, который теперь аппаратно (с точки зрения процессора) управляет посылкой и исполнением множества команд для каждого устройства. Такие возможности имеют контроллеры SATA с интерфейсом AHCI. Устройства, поддерживающие NCQ, совместно с контроллером AHCI по эффективности рабо- ты становятся сопоставимыми с SCSI-системами. Заметим, что при этом различие идеологий остается: в SATA используется централизованное управление устрой- ствами со «средним интеллектом», в SCSI каждое устройство — сервер.
ГЛАВА 2 Интерфейс НГМД Интерфейс накопителей на гибких магнитных дисках (НГМД) является сугубо специфическим — по нему передаются не байты команд и данных, а сигналы управления приводом и «сырые» (не декодированные) битовые потоки данных чтения-записи. Основные функции по управлению НГМД, а также по кодирова- нию-декодированию данных выполняет контроллер, расположенный на системной плате. Раньше контроллер часто выносили на специальную карту расширения («в компании» с интерфейсом НЖМД). На плате электроники, установленной на корпусе НГМД, расположены только схемы приводов двигателей, усилители- формирователи сигналов записи и считывания и формирователи сигналов от датчиков. 2.1. Аппаратный интерфейс Все сигналы интерфейса НГМД являются логическими с уровнями ТТЛ (транзи- сторно-транзисторной логики), активный уровень — низкий. Логически интер- фейс довольно прост. Для того чтобы заставить накопитель работать, его нужно выбрать сигналом Drive Sei и запустить мотор шпинделя сигналом Motor On. Для выборки накопитель имеет четыре сигнала DS0...DS3, но отзывается только на один из них, определенный установкой джамперов. Выбранный накопитель вос- принимает управляющие сигналы от контроллера и передает контроллеру свои выходные сигналы. О том, что накопитель выбран, свидетельствует светодиодный индикатор на его лицевой панели. Для перемещения головок на один шаг контроллер должен подать импульс Step; направление перемещения определяется уровнем сигнала Direction: при низком уровне (сигнал активен) перемещение происходит в сторону центра диска (но- мер трека увеличивается). Нулевой трек контроллер находит, перемещая голов- ки от центра до появления сигнала Track 00. Выбор номера головки производит- ся сигналом Side 1. Начало трека накопитель отмечает импульсом Index, который вырабатывается при прохождении индексного отверстия вращающейся дискеты мимо датчика. Считываемые данные в закодированном (MFM) виде (но усилен- ные и сформированные в ТТЛ-сигнал) поступают от накопителя по линии Read Data. Для включения режима записи служит сигнал Write Gate, закодиро- ванные данные в цифровом виде поступают от контроллера по линии Write Data. Если установлена дискета, защищенная от записи, накопитель сообщает об этом сигналом Write Protect. Для снижения тока записи, которое требуется при работе
2.1. Аппаратный интерфейс 31 накопителей HD с дискетами DD и QD, предназначен сигнал Reduce Write, его иное название — Low Current, или FDHDIN. Для переключения головок в режим «вертикальной записи» (особый режим, применяемый для дискет 2,88 Мбайт) служит сигнал FDEDIN. Оба эти сигнала вырабатываются контроллером, но для самого дисковода они дублируются сигналами от датчиков типа дискеты (сигнал FDEDIN необязателен, дисковод сам переключается по сигналу от датчика). Не- которые модели дисководов позволяют изменить описанный способ работы дат- чиков типа дискеты, принятый для PC-совместимых ПК, — датчики могут быть отключены или выполнять информирование контроллера. Однако практически все контроллеры сами управляют линиями интерфейса, соответствующими сиг- налам от этих датчиков. В этом управлении учитываются тип дисковода, описан- ный в CMOS Setup, и заказанный формат дискеты. Сигнал Reduce Write (низкий уровень) формируется контроллером при любом обращении к дисководу, опи- санному в CMOS как HD (High Density — высокая плотность, емкость 1,2 или 1,44 Мбайт), для работы с дискетами DD или QD (360 или 720 Кбайт). В неко- торых контроллерах этот сигнал формировался, только когда контроллер был настроен на скорость 300 Кбит/с (дискета 360/720 Кбайт в дисководе на 1,2 Мбайт). Такой контроллер может надежно форматировать и записывать дис- кеты 720 Кбайт в приводе на 1,44 Мбайт только при наличии правильно сконфи- гурированного датчика HD, иначе все дискеты 3,5" контроллер будет записывать с высоким током записи, недопустимым для дискет QD. Накопители HD при смене дискеты устанавливают сигнал Disk Changed, кото- рый сбрасывается после обращения к этому накопителю. Этот сигнал заслужи- вает особого внимания. Он имеется только у дисководов HD и малораспростра- ненных дисководов на 2,88 Мбайт ED (Extra High Density — сверхвысокая плотность), причем способ использования этой сигнальной цепи может опреде- ляться джамперами дисковода. В PC соответствующий джампер устанавливает- ся в положение DC (Disk Change). Альтернативное применение этой линии — сигнализация готовности устройства, что может обозначаться как RY, RDY или SR, — для PC непригодно. Заметим, что в интерфейсе нет никаких сигналов, прямо информирующих кон- троллер о готовности — наличии установленной дискеты. Контроллер может оп- ределить готовность, лишь выбрав накопитель и запустив мотор. Тогда отсутст- вие импульсов Index будет означать неготовность (нет дискеты, дискета не зафиксирована на шпинделе, не подключен дисковод, интерфейс или питание, и т. д.). Наличие дисковода контроллер может определить с помощью команды рекалибровки (см. далее) — при ее выполнении дисковод должен подать сигнал TrackOO. Все НГМД, применяемые в PC, независимо от типа и размера имеют одинако- вый интерфейс и унифицированные 34-контактные разъемы двух типов: с печат- ными двусторонними ламелями у устройств 5" и двухрядными штырьковыми контактами у устройств 3,5". Используемый в PC кабель-шлейф имеет перевер- нутый фрагмент из семи проводов с номерами 10-16 (рис. 2.1). Этот поворот позволяет подключать к контроллеру одним шлейфом до двух НГМД, причем адрес накопителя определяется его положением на шлейфе: для привода А фраг- мент перевернут, для В — нет. Универсальный шлейф с пятью разъемами, изо-
32 Глава 2. Интерфейс НГМД браженный на рисунке, позволяет подключать пару любых дисководов, которые должны располагаться в разных зонах шлейфа. Некоторые разъемы могут и от- сутствовать, что сковывает свободу конфигурирования дисководов. В табл. 2.1 описан интерфейсный кабель с сигналами, приходящими на разные накопители. Направление сигналов (I/O — ввод-вывод) указано относительно контроллера. Формирователи выходных сигналов накопителя имеют выход типа «открытый коллектор». Интерфейс подразумевает наличие терминаторов (нагрузочных рези- сторов) для каждой сигнальной линии устройства. Теоретически их предполага- лось включать только на последнем дисководе в шлейфе, практически же их ни- когда и не отключают. В современных трехдюймовых накопителях используется «распределенный терминатор» — резисторы с относительно высоким сопротив- лением (1-1,5 кОм), постоянно соединяющие входные линии интерфейса с ши- ной +5 В. Низкие частоты интерфейсных сигналов позволяют не задумываться о точности согласования импеданса шлейфа и сопротивления терминатора. Одна- ко если на шлейфе стоят только старые 5-дюймовые накопители со снятыми тер- минаторами, они могут отказаться надежно работать (выходные линии с откры- тым коллектором останутся без нагрузки). Рис. 2.1. Кабель интерфейса НГМД Контроллер НГМД и интерфейсный кабель, принятый в PC, позволяют адре- соваться к одному из двух накопителей и включать мотор сигналами Drive Sei О и Motor On А для накопителя А и Drive Sei 1 и Motor On В — для накопителя В. При этом на обоих накопителях джамперы устанавливаются так, что они отзы- ваются на сигнал DS 1 (контакт 12 разъема). Обычно джамперы на дисководе обозначаются DS0/DS1/DS2/DS3, и следует установить джампер DS1. Если джамперы обозначаются как DS1/DS2/DS3/DS4, что встречается нечасто, то следует установить DS2. Принятая система выборки позволяет все дисководы конфигурировать однотипно, а адрес задавать положением на шлейфе. В неко- торых специфических клонах PC применяют иную систему выборки накопите- лей и «прямой» кабель-шлейф. При этом имеет место выборка устройства сиг- налом DS0, но переключение выборки на эту линию некоторыми накопителями не поддерживается, в результате замена накопителей в этих «фирменных» ма-
2.2. Контроллер НГМД 33 шинах может стать хлопотным делом, особенно при отсутствии технической до- кументации. Таблица 2.1. Кабель интерфейса НГМД Контроллер Дисковод В: Дисковод A: Контакт1 Сигнал I/O Контакт1 Сигнал Контакт1 Сигнал 2 FDHDIN (Reduce Write) 0 2 Low Current 2 Low Current 4 Резерв - 4 Резерв 4 Резерв 6 FDEDEIN - 6 FDEDIN (DS3) 6 FDEDIN (DS3) 8 Index I 8 Index 8 Index 10 Motor On A 0 10 DSO 16 Motor2 12 Drive Sei 1 0 12 DS12 14 DS2 14 Drive Sei 0 0 14 DS2 12 DS12 16 Motor On В 0 16 Motor2 10 DSO 18 Direction 0 18 Direction 18 Direction 20 Step 0 20 Step 20 Step 22 Write Data 0 22 WData 22 Wdata 24 Write Gate 0 24 WGate 24 Wgate 26 Track 00 I 26 TR 00 26 TR 00 28 Write Protect I 28 WProt 28 WProt 30 Read Data I 30 RData 30 Rdata 32 Side 1 0 32 Side 1 32 Side 1 З43 Disk Changed I З43 DC 343 DC 1 Нечетные контакты 1-33 — земля. Для дисководов 5” ключ между контактами 4-5 и 6-7. 2 Пара сигналов, обеспечивающая выборку FDD (Motor On А и Drive Sei 0 для диско- вода А: и Motor On В и Drive Sei 1 для дисковода В:). 3 Контакт 34 в XT не используется. 2.2. Контроллер НГМД Программное взаимодействие с НГМД производится через контроллер накопи- телей на гибких дисках (Floppy Drive Controller, FDC), как правило, при участии
34 Глава 2. Интерфейс НГМД контроллера DMA и прерываний. Программирование контроллера НГМД для выполнения операций с дискетами — довольно хлопотное занятие (см. [5]). Все функции, необходимые для использования НГМД в качестве устройств хране- ния данных, реализованы сервисами BIOS INT 13h (см. 16.1) и ОС. Игнорирова- ние сервисов BIOS и даже ОС оправданно в основном лишь для нетривиальных задач наподобие работы с ключевыми дискетами и т. п. Все контроллеры, применяемые в IBM PC, обеспечивают совместимость с «исторической» микросхемой контроллера NEC PD765, которая является аналогом 18272. Контроллер FDC АТ поддерживает два накопителя; он по- зволяет работать со скоростями передачи данных 250 Кбит/с (для работы с дискетами SD, DD и QD в старых дисководах 5”), 500 Кбит/с для плотности HD (1,2 и 1,44 Мбайт), а также 300 Кбит/с для работы с дискетами SD, DD и QD в приводах HD 5". Современные контроллеры, поддерживающие на- копители ED (2,88 Мбайт), должны обеспечивать и скорость 1000 Кбит/с. Режимы контроллеров, соответствующие скоростям 250/300, 500 и 1000 Кбит/с, обозначаются IM, 2М и 4М соответственно. В режиме 1М на одном треке умещается 9 секторов (по 512 байт); для этого при частоте вращения 300 об/мин требуется скорость 250 Кбит/с, а при 360 об/мин — 300 Кбит/с. В режиме 2М при частоте вращения 300 об/мин (у дисководов HD 3,5") на одном треке умещается 18 секторов, а при частоте вращения 360 об/мин (у дисководов HD 5") — 15 секторов. Режим 4М, похоже, так и останется не- востребованным. Выбор скорости задает частоту синхронизации при записи и форматировании, а также настраивает цепи ФАПЧ (фазовой автопод- стройки частоты) сепаратора данных контроллера. Сепаратор данных спосо- бен устойчиво выделять данные и синхросигнал из сигнала, принятого с го- ловки, лишь при небольших (порядка ±10 %) отклонениях скорости от номинала, поэтому скорость должна быть правильно выбрана для всех опе- раций обмена данными с диском. В карте ресурсов АТ имеется место под два контроллера НГМД: ♦ FDC АТ#1 (стандартный или основной) занимает порты с адресами 3F0h-3F7h (как и FDC XT); ♦ FDC АТ#2 (дополнительный) занимает порты с адресами 370h-377h. Контроллеры вырабатывают запрос аппаратного прерывания IRQ6 (BIOS INT OEh) по окончании выполнения внутренних операций. Для‘обмена данными может использоваться канал DMA2. Назначение регистров контроллера приведено в табл. 2.2. Адрес регистра состояния FDC 3F7 (377) совпадает с адресом регистра HDC (давно не используемого), в связи с чем раздельная работа регистров FDC и HDC, расположенных на разных платах, проблематична. В нормальном (не ди- агностическом) режиме из битов регистра состояния FDC интерес представляет только бит 7 — признак смены носителя. Контроллер НГМД может быть использован и для работы со стримерами; специ- ально для этого в контроллере имеется регистр TDR (Таре Drive Register), пара младших битов которого задает номер устройства, которому соответствует стри- мер (для него иначе настраиваются цепи ФАПЧ сепаратора данных).
2.3. Программное взаимодействие с дисководами 35 Таблица 2.2. Регистры контроллера НГМД Адрес Назначение (R — чтение, W — запись) 3F2 (372) RW: DOR (Digital Output Register) — регистр управления: биты [4:7] — вклю- чение моторов А, В, С, D: 1 — включен; бит 3: 1 — разрешение использова- ния DMA2 и IRQ6; бит 2: 0 — сброс, 1 — разрешение контроллера; биты [1:0] — номер выбранного привода 0-3. В АТ биты 6, 7 и 1 не используются 3F3 (373) RW: TDR (Таре Drive Register) — регистр стримера: биты [1:0] — номер уст- ройства, которому соответствует стример. По сбросу устанавливается 00, но это означает отсутствие стримера (вместо дисковода А стимер не по- ставить) 3F4 (374) R: MSR (Main State Register) — главный регистр состояния: бит 7 (DQM) — запрос: 1 — готов к приему-передаче байта; бит 6 (DIO) — направление данных: 1 — от FDC к CPU; бит 5 (NON DMA) — использование DMA: 1 — DMA не используется; бит 4 (CMD BSY): 1 — контроллер занят выполнени- ем команды; биты [0:3] — приводА, В, С, D занят (в АТ используются толь- ко биты 0,1) 3F4 (374)1 W: DSR (Datarate Select Register) — регистр выбора скорости: бит 7:1 — сброс контроллера (обнуляется автоматически); бит 6:1 — отключение пи- тания контроллера; бит 5:1 — разрешение внешней ФАПЧ (должен быть 0); биты [4:2] — выбор времени предкомпенсации записи (000 — предкомпен- сация по умолчанию); биты [1:0] — скорость обмена (00 — 500 Кбит/с, 01 — 300 Кбит/с, 10 — 250 Кбит/с, 11 — 1 Мбит/с) 3F5 (375) RW: DR (Data Register) — регистр команд/данных 3F7 (377) W: CCR (Configuration Control Register) — регистр параметров контроллера (АТ): биты [7:2] — не используются; биты [1:0] — скорость обмена (00 — 500 Кбит/с, 01 — 300 Кбит/с, 10 — 250 Кбит/с, 11 — 1 Мбит/с) 3F7 (377) R: DIR (Digital Input Register) — регистр состояния (только в АТ): бит 7:1 — смена носителя (чтение инвертированной линии DC); биты [6:0] — не ис- пользуются, при чтении не выводятся на шину данных 1 Регистр DSR обеспечивает совместимость с контроллером i8272; в современных кон- троллерах НГМД на АТ-совместимых компьютерах вместо него используют CCR, по- скольку требуется только задание скорости. 2.3. Программное взаимодействие с дисководами Все операции с дискетами выполняются по командам, посылаемым хостом в ре- гистр DR (3F5) согласно состоянию битов регистра MSR (3F4). Запись байта ко- манды или данных в регистр DR разрешается лишь при текущем значении MSR=10xxxxxxb, чтение — при MSR=llxxxxxxb. Для записи-чтения этого регистра приходится использовать отдельные подпрограммы, не только Дожидающиеся разрешающих значений MSR, но и имеющие аварийный выход по тайм-ауту. Кро- ме того, хост выполняет запись в регистр DOR (3F2) для запуска-останова диско- вода, а также в CCR (3F7) или DSR (3F4) — для выбора скорости передачи данных.
36 Глава 2. Интерфейс НГМД В операциях обмена данными с дискетами обычно участвует контроллер DMA, и он должен быть своевременно проинициализирован. Сигнал ТС (завершение цикла DMA) используется как признак завершения фазы данных. В общем виде процедура обмена данными состоит из следующих шагов. 1. Запуск мотора и выбор дисковода (записью в регистр DOR). 2. Установка скорости (записью в регистр CCR). 3. Выполнение команды рекалибровки. 4. Ожидание раскрутки двигателя (если мотор работает еще менее 0,5 с). 5. Позиционирование головки на требуемый цилиндр. 6. Инициализация контроллера DMA. 7. Посылка команды чтения-записи. 8. Ожидание прерывания от контроллера. Прерывание произойдет, когда завер- шится фаза исполнения, во время которой контроллер обычно обменивается данными с хостом. Если за определенное время прерывание не получено, фиксируется неудачная попытка обращения с ошибкой тайм-аута. 9. По прерыванию от контроллера считываются байты результата, и если оши- бок нет, на этом обмен успешно завершается. Если есть ошибки, то снова пе- реходят на шаг инициализации DMA и далее повторяют команду чтения-за- писи. Если за несколько (до трех) раз успех не достигается, то выполняются рекалибровка, затем инициализация DMA и повторные попытки чтения-за- писи. Если успех не достигается даже после нескольких рекалибровок, обмен прекращается аварийно. Помимо описанного механизма имеется механизм автоматического выключения мотора НГМД, если к нему долго нет обращений. Для этого в фиксированном месте ОЗУ (BIOS Data Area, ячейка 0:0440) имеется счетчик времени работы мотора НГМД и адрес дисковода (в позиционном коде), мотор которого включен (0:043F). При каждом обращении к дискете (когда в регистре DOR устанавливает- ся бит включения мотора) в счетчик времени заносится константа, соответству- ющая выдержке на отключение (по умолчанию — 2 с). Обработчик аппаратного прерывания от таймера IRQO (BIOS INT 08h) с интервалом около 55 мс декремен- тирует счетчик времени и по его обнулению отключает мотор (записью в регистр DOR). Таким образом, если в течение заданного интервала нет обращений, мотор автоматически выключается. Конечно, этот механизм работает, лишь когда BIOS отрабатывает аппаратные прерывания от таймера, так что не отключающийся мотор дисковода может быть косвенным признаком «зависания» компьютера. Исполнение каждой команды имеет три фазы: 1. Фаза команды. Контроллер устанавливает биты DQM=1 и DI0=0, что является приглашением к вводу команды. В регистр DR посылается байт команды, пос- ле которого посылаются байты параметров в строго предписанном порядке. На прием каждого байта контроллер отзывается обнулением DQM на время об- работки. После получения последнего требуемого байта DQM остается обнулен- ным, и контроллер переходит в фазу исполнения. В качестве параметров фи- гурируют номер цилиндра С, номер головки Н, номер сектора R, код размера N
2.3. Программное взаимодействие с дисководами 37 или длина поля данных сектора DTL, номер последнего сектора на треке EOT, число секторов SC, длительность зазоров GPL и некоторые другие данные. 2. Фаза исполнения требует передачи данных от хоста к контроллеру или обрат- но, передача может происходить как в режиме DMA, так и чисто программно (РЮ). В режиме DMA обмен выполняется по сигналам DRQ и DACK# исполь- зуемого канала. Если DMA не используется, то запросом на передачу явля- ются бит DQM и сигнал прерывания. По окончании фазы вырабатывается сигнал прерывания (и его признак в регистре ST0), и контроллер переходит в фазу результата. 3. В фазе результата DQM=1 и DIO=1 хост должен считать байты результата из DR, после чего биты установятся в значение DQM=1 и DI0=0, что соответствует пе- реходу в фазу приема команды. С момента получения команды и до окончания фазы результата в регистре MSR бит CMD BSY=1. Контроллер всегда можно принудительно сбросить (перевести в начало фазы команды) записью в регистр DOR или DSR. Если контроллер получает не поддерживаемую команду, он сразу выставляет DQM=1 и DIO=1, что является указанием на необходимость чтения DR. Хост должен прочитать из DR код состоя- ния, в котором будет значение 80h (недопустимая команда). В современных контроллерах НГМД имеется буфер FIFO глубиной 16 байт, ра- ботающий при передаче данных (но не команд и параметров) через регистр DR; в «историческом» контроллере i8272 буфера FIFO не было. Логика общения с регистром DR остается той же. Буфер должен быть своевременно обслужен, что- бы не происходило его переполнения или опустошения. Логика буфера устанав- ливает запрос данных так, чтобы не отвлекать хост «по пустякам». При чтении из DR запрос устанавливается, когда в буфере имеется 16-<порог> байтов или же считан последний байт сектора. При записи в DR запрос первоначально устанав- ливается и удерживается до заполнения буфера, впоследствии он устанавливает- ся снова, когда в буфере остается <порог> байтов. Переход в фазу результата происходит, когда завершается обмен хоста с DR и буфер опустошается. Общение с регистром DR при записи команд и параметров должно выполняться согласно значениям старших битов регистра MSR (буфер FIFO при этом не используется). Позиционирование головок на требуемый цилиндр традиционно выполняется командой SEEK. Современные контроллеры имеют возможность неявного поис- ка (implied seek), которой не было в i8272. Если неявный поиск разрешен, то ко- манда SEEK в большинстве случаев не нужна — контроллер выполняет требуе- мое позиционирование при исполнении команд чтения, записи и верификации. В команде форматирования неявный поиск не предусмотрен. Если неявный по- иск запрещен, то командам чтения-записи должна предшествовать следующая последовательность команд: 1. SEEK — позиционирование. 2. SENSE INTERRUPT STATUS — завершение команды позиционирования. 3. READ ID — проверка установки головок на требуемый трек. Во время выполнения команд поиска (но не относительного) и рекалибровки контроллер находится в состоянии не занято, так что допускается перекрытие
38 Глава 2. Интерфейс НГМД команд: во время выполнения команды одним приводом контроллер может по- лучать команды, адресованные другим приводам. Контроллер работает с механикой привода, обеспечивая требуемые задержки времени между действиями. Параметры быстродействия механики задаются тре- мя таймерами, программируемыми командой SPECIFY. Таймер SRT определяет скорость позиционирования (частоту подачи импульсов STEP#). Таймеры HUT и HLT управляют задержкой, требуемой для успокоения головок. Для логики кон- троллера головки могут находиться в одном из двух состояний. Когда головка загружена (loaded), контроллер может считывать и записывать данные без за- держки. Если на момент прихода команды головка выгружена (unloaded), то до начала считывания-записи данных требуется время успокоения, заданное тайме- ром HLT. После этой задержки в течение всего времени выполнения операции го- ловка считается загруженной, а в состояние выгруженной она перейдет после окончания операции обмена с диском через интервал, заданный таймером HUT. В таблице параметров дискет DPT имеется параметр «время успокоения головок после позиционирования». Если позиционирование выполняется командой SEEK, этот параметр используется при программной задержке, организуемой хостом после поиска требуемого цилиндра. При неявном позиционировании задержка определяется таймером HLT. После включения мотора диск должен успеть набрать заданную скорость враще- ния, для чего приводу 3,5” требуется около 300 мс, а приводу 5” — 500 мс (у него момент инерции больше). При большом отклонении скорости от номинальной чтение данных происходит с ошибками. Задержка, учитывающая разгон двигате- ля, реализуется программно. При чтении первое обращение можно ускорить, если начинать попытки чтения сразу после включения мотора. Как только ско- рость достигнет значения, достаточного для захвата цепей ФАПЧ в сепараторе данных, ошибки исчезнут и результаты чтения можно будет использовать. За це- лостность данных опасаться не следует, поскольку CRC-контроль достаточно надежен. При записи и тем более форматировании задержку на разгон двигателя нужно соблюдать обязательно. Поскольку для операций чтения-записи требуется установить частоту передачи, возникает задача ее автоматического определения. Для этого, выждав время на разгон двигателя, делают попытки чтения идентификаторов с разными значе- ниями скорости передачи. Та скорость, на которой команда READ ID завершает- ся без ошибок, принимается за истинную. Далее остается прочитать на этой ско- рости загрузочный сектор дискеты, по которому можно уже уточнить ее формат. 2.4. Команды контроллера НГМД Каждая команда кодируется байтом, записываемым хостом в регистр DR. В кодах команд чтения, записи, верификации и форматирования бит 7 (МТ) является при- знаком мультитрековых операций, а бит 6 (MFM) — признаком кодирования по методу MFM. В IBM PC всегда MFM=1 (кодирование FM не используется) и МТ=4, что означает автоматический переход на головку 1 после обработки последнего сектора головки 0 на том же цилиндре, если операция еще не закончена. В кодах
2.4. Команды контроллера НГМД 39 команд чтения данных и верификации бит 5 (SK) указывает на необходимость пропуска секторов с удаленными данными. Если SK=O, то на чтении удаленного сектора выполнение остановится, если SK=1, то удаленный сектор пропускается и контроллер переходит к следующему. На установку бита СМ в байте состояния ST2 бит SK не влияет. В команде чтения удаленных данных при SK=1 пропускают- ся нормальные данные, а при SK=O читаются все секторы, и нормальные, и уда- ленные. Команда чтения данных READ DATA (код С6 при SK=O или Е6 при SK=1) после получения 8 байт параметров переводит контроллер в режим чтения данных. Контроллер загружает головку и ждет окончания заданного времени успокоения (если она была разгружена), после чего считывает идентификаторы секторов. Найдя требуемый, он считывает его поле данных и передает данные хосту (обыч- но по каналу DMA). Далее контроллер инкрементирует номер сектора и считы- вает сектор с соответствующим логическим номером. После чтения последнего сектора головки 0 контроллер переходит к головке 1 на том же цилиндре, таким образом, мультисекторные передачи возможны в пределах целого цилиндра. По- сле завершения операции байты С, Н и R соответствуют сектору, следующему за последним успешно считанным, с учетом EOT. При этом, если достигнут конец трека, то устанавливается номер сектора R=01 и бит номера головки инвертиру- ется, а если достигнут конец цилиндра, то инкрементируется номер цилиндра. По сигналу ТС или по переполнению регистра DR передача данных хосту завер- шается, но если сектор считан не до конца, контроллер продолжает считывание сектора для проверки CRC. Если сектор имеет большую длину, чем заказано контроллеру байтами N или DTL, передается только требуемое количество байтов от начала сектора, а остальные пропускаются. Если в процессе чтения обнаружи- ваются ошибки CRC, не находятся требуемые идентификаторы или обнаружи- ваются идентификаторы удаленных секторов, то чтение завершается аварийно и устанавливаются соответствующие биты в байтах состояния. Команда чтения удаленных данных READ DELETED DATA (код СС при SK=O или ЕС при SK=1) работает аналогично, но она читает данные из секторов, имеющих маркеры удаленных данных. Маркерами удаленных данных обычно помечаются сбойные секторы, но их можно использовать и для других нестандартных целей. Команда чтения трека READ TRACK (код 42) работает аналогично обычному чте- нию, но передает хосту поля данных всех секторов подряд, следующих после ин- дексного импульса. Число передаваемых секторов определяется байтом EOT. Мно- госекторный режим и пропуск секторов не предусмотрены, так что МТ=О и SK=O. Команда записи данных WRITE DATA (Код С5) работает подобно команде чтения данных, но в фазе исполнения контроллер принимает данные от хоста и записы- вает их в поля данных требуемых секторов. Контроллер считывает идентифика- торы секторов и, когда появляется требуемый сектор, переключается в режим за- писи и запрашивает очередные данные от хоста. Заполнив поле данных сектора, он дополнительно записывает в сектор подсчитанное значение CRC. Если кон- троллер обнаруживает ошибку CRC в прочитанных идентификаторах, он уста- навливает бит DE в регистре состояния ST1 и прекращает операцию. Операция завершается по сигналу ТС или по опустошению буфера. Если хост передает дан-
40 Глава 2. Интерфейс НГМД ных меньше, чем заказано байтами N или DTL, то остаток поля данных сектора за- полняется нулями. Команда записи удаленных данных WRITE DELETED DATA (код С9) работает по- добно обычной записи, но перед полем данных записывает вместо нормального маркера признак удаленных данных. Для вышеприведенных команд чтения-записи (С6, Е6, СС, ЕС, 42, С5, С9 и F6) используются следующие 8 байт параметров: ♦ Адресный байт: биты [1:0] задают номер привода, бит 2 — номер головки, биты 3-7 нулевые. ♦ Номер цилиндра (С=0-255). ♦ Номер головки (Н=0-1). ♦ Номер сектора R (логический, записанный в его заголовке). ♦ Код размера сектора N=0 —128 байт или специальный, N=1 — 256 байт, N=2 — 512 байт... N=7 — 16 Кбайт. ♦ Номер последнего логического сектора на треке (EOT). ♦ Временной зазор для операций чтения-записи (GPL1, 2Ah для DD/QD, IBh для HD). ♦ Специальный размер сектора DTL (в байтах), если N=0. При N>0 DTL=FFh. В команде верификации здесь задается число проверяемых секторов SC. Для тех же команд в фазе результата принимаются следующие 7 байтов: ♦ Состояние STO: • биты [7:6] — IC (Interrupt Code) — код прерывания: 00 — нормальное за- вершение, 10 — недопустимая команда, 01 — ненормальное завершение, И — прерывание от полинга (в PC не используется); • бит 5 — SE (Seek End) — поиск завершен (явный или неявный в командах чтения-записи); • бит 4 — ЕС (Equipment Check) — контроль оборудования: не сработал дат- чик нулевого трека после 80 шагов в команде рекалибровки, или при отно- сительном поиске головка выходит за пределы диска; • бит 3=0 — не используется; • бит 2 — текущий номер головки; • биты [1:0] — номер привода. ♦ Состояние ST1: • бит 7 — EN (End of Cylinder) — попытка обращения к сектору за границей цилиндра (контроллер DMA своевременно не выдал сигнал ТС); • бит 6=0 — не используется; • бит 5 — DE (Data Error) — ошибка CRC в поле данных или идентификатора; • бит 4 — OR (Overrun/Underrun) — переполнение или опустошение буфера (запрос на передачу не был своевременно обслужен); • бит 3=0 — не используется;
2.4. Команды контроллера НГМД 41 • бит 2 — ND (No Data) — нет данных (не найден указанный сектор, при чте- нии трека не обнаружена требуемая последовательность секторов); • бит 1 — NW (No Writable) — запись невозможна (присутствует сигнал за- щиты от записи во время команды записи или форматирования); • бит 0 — МА (Missing Address Mark) — пропущен адресный маркер: адрес- ный маркер трека не найден после пары проходов индексного сигнала или не обнаружен маркер данных (пусть и удаленных) на указанном треке. ♦ Состояние ST2: • бит 7=0 — не используется; • бит 6 — CM (Control Mark) — обнаружен адресный маркер удаленных дан- ных по команде чтения или маркер нормальных данных при чтении уда- ленных данных; • бит 5 — DD (Data Error in Data field) — ошибка CRC обнаружена в поле данных; • бит 4 — WC (Wrong Cylinder) — адресный маркер сектора имеет поле трека, отличное от ожидаемого контроллером; • бит 3=0 — не используется; • бит 5=0 — не используется; • бит 1 — ВС (Bad Cylinder) — адресный маркер сектора имеет поле трека FF (признак сбойного трека); • бит 0 — MD (Missing Data Address Mark) — адресный маркер данных (пусть и удаленных) не обнаружен на указанном треке. ♦ Номер цилиндра С после операции. ♦ Номер головки Н после операции. ♦ Номер сектора R после операции. ♦ Код размера сектора N. Команда верификации VERIFY (код D6) работает аналогично команде чтения данных, но передача полей данных к хосту не производится, а лишь проверяются CRC-коды идентификаторов и полей данных. Байты параметров и результатов те же, что приведены ранее, но в адресном байте бит 7 ЕС (Enable Count) управ- ляет трактовкой последнего байта параметров: при ЕС=1 этот байт становится счетчиком проверяемых секторов SC. При ЕС=О последний байт параметров (DTL) должен быть установлен в FF; операция завершается на проверке сектора с но- мером EOT. Сигнал ТС в качестве указания на окончание операции использовать- ся не может (передач нет). При некорректно заданных параметрах верификация может завершиться безуспешно, и фаза результата будет недействительной. Команда форматирования трека FORMAT TRACK (код 4D) записывает на всем треке структуру идентификаторов, а поле данных расписывает заполнителем. За командой должны следовать 5 байтов параметров: ♦ адресный байт; ♦ код размера сектора N (N=2 —512 байт);
42 Глава 2. Интерфейс НГМД ♦ число секторов на треке; ♦ длина межсекторного зазора GAP3; ♦ байт заполнителя полей данных. Далее начинается фаза исполнения, во время которой хост передает байты полей идентификаторов, по 4 байта для каждого сектора: ♦ номер цилиндра С; ♦ номер головки Н; ♦ номер сектора R; ♦ код размера сектора N. В фазе результата контроллер передает 7 байт: ♦ состояние ST0; ♦ состояние ST1; ♦ состояние ST2; ♦ 4 байта с неопределенным содержанием. Команда рекалибровки RECALIBRATE (код 07) позиционирует головки на нулевой трек. По срабатыванию датчика нулевого цилиндра устанавливается бит SE. Если за 80 шагов срабатывания датчика добиться не удается, устанавливается бит ошиб- ки ЕС. Команда требует только один адресный байт с нулевым номером головки. По окончании выполнения вырабатывается запрос прерывания. Фазы результа- та нет; чтобы считать состояние, требуется команда SENSE INTERRUPT STATUS. Команда поиска SEEK (код OF) устанавливает головки на требуемый номер ци- линдра NCN (New Cylinder Number). При неравенстве NCN и текущего номера ци- линдра PCN (Present Cylinder Number), связанного с выбранным приводом, кон- троллер вырабатывает требуемое число импульсов позиционирования с нужным направлением. Команда требует два байта параметров: ♦ адресный байт; ♦ требуемый номер цилиндра NCN. По окончании позиционирования вырабатывается запрос прерывания. Фазы ре- зультата нет; чтобы считать состояние, требуется команда SENSE INTERRUPT STATUS. Команда относительного поиска RELATIVE SEEK (код 8F или CF) позволяет пе- реместить головки на требуемое число цилиндров внутрь (код CF) или наружу диска (код 8F). Команда аналогична обычному поиску, но вместо NCN задается RCN (Relative Cylinder Number) — число цилиндров, на которое требуется пере- местить головки. Команда чтения прерывания SENSE INTERRUPT STATUS (код 08) используется как завершающая после команд рекалибровки и позиционирования. Контроллер сбрасывает запрос прерывания и позволяет установить его причину. Команда не требует параметров. В фазе результата передает два байта: ♦ состояние STO; ♦ текущий номер цилиндра PCN после поиска или рекалибровки.
2.4. Команды контроллера НГМД 43 Если команда выдана, когда запроса прерывания нет, контроллер возвращает STO=80 (недопустимая команда). Команда чтения состояния привода SENSE DRIVE STATUS позволяет прочитать значение сигналов интерфейса. Требует один адресный байт. В фазе результата передает один байт состояния ST3: ♦ бит 7=0 — не используется; ♦ бит 6 — WP (Write Protect) — сигнал защиты записи; ♦ бит 5=0 — не используется; ♦ бит 4 — ТО (Track 0) — сигнал датчика нулевого цилиндра; ♦ бит 3=0 — не используется; ♦ бит 2 — HD (Head Address) — бит выбора головки; ♦ биты [1:0] — биты выбора привода. Команда чтения идентификатора READ ID (код 4А) считывает координаты и код размера (С, Н, R, N) из первого успешно считанного идентификатора адреса сектора. Команда требует только один адресный байт. В фазе результата сообща- ются те же 7 байт, что и команды чтения-записи. Если эту команду подавать многократно, можно определить последовательность номеров секторов на до- рожке. Команда спецификации SPECIFY (код 03) задает параметры привода двумя бай- тами спецификации (их значение хранится в первых двух байтах таблицы пара- метров дискет, см. табл. 16.2): ♦ Байт 1, HUT и SRT: • биты [3:0] — HUT (Head Unload Time) — время разгрузки головок: 1=32 мс, 2=64 мс... F=480, 0=512 мс для скорости 250 Кбит/с. Для скоростей 300, 500 и 1000 Кбит/с значения меньше в 1,2, 2 и 4 раза соответственно; • биты [7:4] — SRT (Step Rate Time) —время перемещения головок на один шаг: 0=32 мс, 1=30 мс... F=2 мс для скорости 250 Кбит/с. Для скоростей 300, 500 и 1000 Кбит/с значения меньше в 1,2, 2 и 4 раза соответственно. ♦ Байт 2, HLT и ND: • биты [7:1] — HLT (Head Load Time) — время успокоения после загрузки го- ловок: 01=4 мс, 02=8 мс, 7F=508 мс, 00=512 мс; • бит 0 — ND (No DMA): 1=DMA не используется. Фазы результата нет, прерывание не вырабатывается. Команда PERPENDICULAR MODE (код 12) служит для перестройки контролле- ра на формат секторов дисков 2,88 Мбайт с перпендикулярной (вертикальной) записью. Требует один байт параметров. Контроллер 18272 эту команду и фор- мат не поддерживает. Помимо вышеперечисленных команд, необходимых для регулярной работы с дис- кетами, контроллер имеет служебные команды, состав которых может разли- чаться в зависимости от типа контроллера.
44 Глава 2. Интерфейс НГМД Команда определения версии контроллера VERSION (код 10) позволяет иденти- фицировать контроллер. Параметров не требует, возвращает один байт результата (90 — расширенный контроллер 182077АА, по спецификации которого построе- но данное описание). Команда конфигурирования CONFIGURE (код 13) задает параметры контролле- ра. Требует три байта параметров: ♦ Байт нулей. ♦ Байт конфигурации: • бит 7=0; • бит 6 — EIS (Enable Implied Seek) — разрешение неявного поиска; • бит 5 — EFIFO — разрешение работы буфера FIFO (при EFIFO=O); • бит 4 — POLL — разрешение полинга (опроса состояния устройств, в PC не используется); • биты [3:0] — FIFOTHR — порог заполнения буфера FIFO, при котором гене- рируется запрос данных. ♦ Номер трека, начиная с которого выполняется предкомпенсация (PRETRK). Команда блокировки LOCK (код 94 для LOCK=1 и 14 для LOCK=O) позволяет пре- дотвратить сброс параметров FIFO при выполнении программного сброса. Ко- манда специфична для контроллера и предназначена только для использования системным ПО (BIOS). Параметров не требует, в фазе результата возвращает 1 байт, в котором бит 4 несет признак LOCK. Команда чтения регистров DUMPREG (код 0Е) служит для отладочных целей. Параметров не требует, в фазе результата выдает 10 байтов: ♦ текущий номер цилиндра PCN для привода 0; ♦ текущий номер цилиндра PCN для привода 1; ♦ текущий номер цилиндра PCN для привода 2; ♦ текущий номер цилиндра PCN для привода 3; ♦ байт с HUT и SRT (см. команду SPECIFY); ♦ байт с HLT и ND (см. команду SPECIFY); ♦ байт SC/EOT; ♦ байт признаков, устанавливаемых командами LOCK (бит 7) и PERPENDICULAR MODE (биты [6:0]); ♦ два байта параметров, устанавливаемых командой CONFIGURE.
ГЛАВА 3 Интерфейс IDE: ATA/ATAPI и SATA I Интерфейс IDE предназначен для подключения устройств хранения данных, об- ладающих собственным контроллером. В настоящее время интерфейс АТА/ ATAPI является самым массовым интерфейсом для устройств хранения данных, причем не только в «мире» PC-совместимых компьютеров. Пока что наибольшее распространение получил его «классический» параллельный вариант, ему на смену идут последовательные интерфейсы Serial АТА (SATA) и Serial АТА-II (SATA-П). Теперь параллельный интерфейс ATA/ATAPI стали называть РАТА (Parallel АТА). 3.1. Происхождение и назначение интерфейса Интерфейс АТА (AT Attachment for Disk Drives) был введен в конце 1980-х г. как интерфейс для подключения накопителей на жестких магнитных дисках к компьютерам IBM PC АТ с шиной ISA. Интерфейс появился в результате пере- носа стандартного (для PC/AT) контроллера жесткого диска (Hard Disc Controller, HDC) ближе к накопителю, то есть создания устройств со встроен- ным контроллером (Integrated Drive Electronics, IDE). Стандартный для IBM PC/AT контроллер жесткого диска был перенесен на плату электроники нако- пителя с сохранением регистровой модели. При этом удлинилась связь с устрой- ством со стороны системной шины, выводить которую непосредственно на длин- ный ленточный кабель было нецелесообразно. Это сказалось бы на скорости работы всей шины, надежности и цене. Из всех сигналов шины ISA выбрали ми- нимальный набор сигналов, часть из которых буферизовали на небольшой плате адаптера IDE, устанавливаемого в слот ISA, а часть направили прямо на разъем ленточного кабеля нового интерфейса. Этот параллельный шинный интерфейс и получил названия АТА и IDE, которые, фактически, являются синонимами. Поскольку стандартный контроллер HDC АТ позволял подключать до двух на- копителей, эту возможность получил и интерфейс АТА. Однако теперь два нако- пителя стали означать и два контроллера, подключенные к одной интерфейсной шине. Чтобы сохранить программную совместимость со стандартным контрол- лером HDC, к которому подключено два накопителя, оба контролера в новом
46 Глава 3. Интерфейс IDE: ATA/ATAPI и SATA интерфейсе должны располагаться в пространстве ввода-вывода по одним и тем же адресам, выделенным стандартному контроллеру HDC. Для адресации на шине АТА (выбора одного из двух устройств) решили использовать бит выбора накопителя (DEV) в регистре контроллера. Одно устройство на шине называется ведущим (Master), другое (если есть) — ведомым (Slave). Эта традиционная мо- дель адресации устройств, получившая название M/S (Master/Slave), является причиной неэффективности при одновременной работе с парой устройств на од- ной шине. Интерфейс АТА предназначен для обмена с устройствами хранения блоками фиксированного размера — секторами по 512 байт. Адресация данных внутри устройств АТА имеет «дисковые корни»: для накопителей изначально указыва- ли адрес цилиндра (Cylinder), головки (Head) и сектора (Sector) — так называе- мая трехмерная адресация (CHS). Позже пришли к линейной адресации логи- ческих блоков, где адрес блока (сектора) определяется 28-битным числом LBA (Logical Block Address). Трехмерная и 28-битная линейная адресация в АТА имеют предел емкости устройств в 136,9 и 137,4 Гбайт соответственно, что по нынешним меркам недостаточно. В современных версиях интерфейса линейную адресацию расширили до 48-битной, при этом предел адресации составляет 248 = = 281 474 976 710 656 секторов, или около 144 Пбайт (144 115 188 075 855 360 байт). Устройство может поддерживать различные форматы адресации, причем формат адреса может меняться даже в соседних командах. Принятая система команд и регистров, являющаяся частью спецификации АТА, ориентирована на блочный обмен данными с накопителями на жестких магнит- ных дисках — устройствами хранения с непосредственным доступом. Позже спе- цификацию расширили для иных устройств хранения: ♦ Спецификация ATAPI позволяет передавать пакет, содержащий командный блок (откуда и часть названия PI — Package Interface). Структура командного блока заимствована из SCSI, его содержимое определяется типом подключен- ного устройства: ленточного, оптического (CD, DVD), магнитооптического и т. п. AT API позволяет расширить границы применения шины АТА, введя всего лишь одну новую команду передачи управляющего пакета. ♦ Набор дополнительных команд CFA (Compact Flash Association) введен для устройств хранения на флэш-памяти. От обычных устройств хранения (с не- посредственным доступом) флэш-память отличается необходимостью срав- нительно длительного стирания данных перед перезаписью. Группа допол- нительных команд позволяет более эффективно работать с указанными устройствами (хотя к ним возможен доступ и обычными, «дисковыми» ко- мандами АТА). Параллельный интерфейс АТА исчерпал свои ресурсы пропускной способности, достигшей 133 Мбайт/с в режиме UltraDMA Mode 6. Для дальнейшего повыше- ния пропускной способности интерфейса (но, увы, не самих устройств хранения, которые имеют гораздо меньшие внутренние скорости обмена с носителем) было принято решение о переходе от параллельной шины к последовательному двух- точечному интерфейсу Serial АТА (SATA). Цель перехода — повышение ско- рости передачи при улучшении и удешевлении кабелей и коннекторов, обеспече-
3.2. Устройства, адаптеры, контроллеры и интерфейсы 47 ние выделенного интерфейса для каждого устройства, улучшение условий охлаждения устройств внутри системного блока (избавление от широкого шлей- фа), обеспечение возможности разработки компактных устройств, облегчение конфигурирования устройств пользователем. Интерфейс SATA позволяет сохранить (и развить) сложившуюся систему ко- манд ATA/ATAPI, что обеспечивает преемственность и программную совмести- мость со старым ПО. Поначалу интерфейс SATA отличался только способом транспортировки данных и команд между контроллером и устройствами. Глав- ное революционное изменение в организации обмена с устройствами хранения произошло в спецификации SATA II, в которой описан эффективный механизм обслуживания очередей — NCQ на базе механизма FPDMA. Для SATA II появи- лась новая спецификация контроллера — AHCI, которая меняет и идеологию взаимодействия (сохраняя команды), что выводит SATA на «почти профессио- нальный» уровень интерфейса устройств хранения, приближающийся по своим возможностям к интерфейсу SCSI. 3.2. Устройства, адаптеры, контроллеры и интерфейсы Устройства с параллельным интерфейсом ATA/ATAPI подключаются к компь- ютеру через контроллер, или адаптер, интерфейса АТА или IDE. В специфика- циях АТА средства сопряжения называются хост -адаптером. Контроллер (адап- тер) может иметь один или более каналов IDE (шин АТА). К каждому каналу IDE (параллельной шине АТА) может подключаться до двух устройств IDE (ATA/ATAPI): ♦ Ведущее устройство (Master) — ПУ, в спецификациях АТА официально на- зываемое Device-О (устройство 0); ♦ Ведомое устройство (Slave) — ПУ, в спецификациях официально называемое Device-1 (устройство 1). Хост-адаптер и устройства объединяются кабелем-шлейфом, соединяющим па- раллельно одноименные контакты интерфейсных разъемов. Регистры контрол- леров обоих устройств оказываются расположенными в одних и тех же областях пространства ввода-вывода. Для выбора устройства, исполняющего текущую ко- манду, используется бит выбора накопителя (DEV) в регистре номера устройства и головки (регистр DH). Запись в этот регистр воспринимается сразу обоими уст- ройствами, на обращения к остальным регистрам реагирует только выбранное устройство. Исполнять команду будет лишь оно. Если бит DEV=O, выбрано веду- щее устройство, если DEV=1 — ведомое. Выводить выходные сигналы на шину АТА имеет право только выбранное устройство. Такой механизм адресации при- водит к тому, что, начав операцию обмена с одним из устройств (подав команду), хост-адаптер не может переключиться на обслуживание другого до завершения начатой операции. Из-за этого эффективность работы с двумя устройствами на одной шине оказывается низкой. Для устройств хранения характерно значитель- ное время доступа: с момента подачи команды до начала передачи блоков дан-
48 Глава 3. Интерфейс IDE: ATA/ATAPI и SATA ных проходит заметное время, которое могло бы использоваться для интерфейс- ного обмена с другим устройством (как в SCSI). Параллельно могут работать только устройства, подключаемые к разным шинам АТА (каналам IDE). В спе- цификации ATA/ATAPI-4 введены механизмы освобождения шины (перекры- тие команд) и организации очередей команд, однако они не так эффективны, как в SCSI. Полностью этот недостаток АТА устранен только в спецификации Serial АТА II. Адаптер интерфейса АТА (IDE) объединяет простейшие устройства: буферные формирователи для шины данных, дешифратор адреса и вспомогательную логику. Адаптер обеспечивает обращения1 процессора к регистрам устройств АТА, а так- же передачу блоков данных между устройством и системной памятью в режиме РЮ (программный ввод-вывод). Адаптер позволяет также подключить шину АТА к каналу стандартного контроллера DMA, однако обмен данными по стандартному каналу малоэффективен (канал довольно медленный и имеет неудобства, свя- занные с пересечением границ страниц, см. 1.3). Контроллер интерфейса АТА (IDE) отличается наличием собственного высоко- производительного и эффективного контроллера DMA. Популярной моделью является контроллер PCI IDE Bus Master (см. 6.1), который имеет два канала — управляет двумя шинами АТА. Контроллер PCI IDE позволяет организовывать передачу массива данных, расположенных в разрозненных страницах физической памяти. Однако он не имеет средств переключения контекста (см. 1.3 и 6.3), по- зволяющих эффективно использовать перекрытие и очереди команд. Последовательный интерфейс Serial АТА (SATA) является эволюцией своего пред- шественника — параллельной шины АТА. Переход на последовательный интер- фейс позволяет отказаться и от шинной организации интерфейса: контроллер Serial АТА имеет индивидуальные порты для подключения каждого из устройств. При этом может поддерживаться режим эмуляции пар «ведущий—ведомый», в ко- тором сохраняется программная совместимость с контроллером параллельного интерфейса АТА и его механизмом адресации устройств. Для более эффектив- ной работы с множеством устройств поддерживается и режим прямого подклю- чения (Direct Port Access, DPA), программно несовместимый с традиционным интерфейсом АТА (IDE). Контроллер и устройства Serial АТА-П имеют эффек- тивный механизм FPDMA для обслуживания множества устройств и очередей команд. Промежуточный (по эффективности) режим контроллера SATA обеспе- чивает только полную независимость устройств: каждому устройству выделяет- ся собственный контроллер DMA. Большинство современных системных плат оснащено двухканальным контрол- лером PCI IDE с параллельным интерфейсом АТА. Этот контроллер может ра- ботать как в режиме традиционного адаптера (Legacy IDE), с фиксированными областями адресов, выделяемых устройствам, так и в режиме устройства PCI, в котором области адресов свободно перемещаются в пространстве. Новые пла- ты имеют и интерфейс Serial АТА. Сосуществование параллельного и последо- вательного интерфейсов возможно, однако в традиционном режиме может рабо- тать только один из контроллеров (параллельный или последовательный). Это создает некоторые трудности на этапе определения подключенных устройств
3.3. Категории устройств IDE 49 и загрузки ОС. Для полноценной работы с обоими контроллерами ОС должна иметь драйверы контроллеров, работающие с ними как с полноценными устрой- ствами PCI. Новая программная модель контроллера Serial АТА — AHCI (см. 6.3) — принци- пиально меняет идеологию программного взаимодействия с устройствами, сущест- венно его упрощая. Интерфейс AHCI имеют, в частности, контроллеры SATA, интегрированные в хаб ICH6 (Intel) современных чипсетов системных плат. На время переходного периода контроллеры с AHCI снабжают и традиционными программными интерфейсами, однако полное использование возможностей AHCI дает только специальный драйвер. Интерфейс АТА предназначен для подключения устройств внутри корпуса ком- пьютера — это обусловлено ограничением на длину шлейфа и конструкцией разъемов (используются дешевые IDC-коннекторы). Интерфейс Serial АТА в первой версии также ограничивался внутренним применением. В интерфейсе Serial АТА II введена возможность подключения внешних устройств, ради чего разъемы были доработаны (для лучшей фиксации). В Serial АТА-П введены и новые варианты топологии соединения устройств: группа устройств (например, дисковый массив) может подключаться к мульти- плексору Serial АТА, который, в свою очередь, подключается к одному порту хост-контроллера. Это требует усложнения механизма аппаратного переключе- ния контекста DMA, в противном случае с устройствами, подключенными к од- ному порту, возможна только поочередная работа (как это было с устройствами одного канала АТА). Устройство (или массив устройств, подключенных к муль- типлексору) может подключаться и к двум хостам через специальный селектор портов. При этом активным может быть только один порт (и хост), а второй яв- ляется запасным средством доступа к устройствам хранения. 3.3. Категории устройств IDE Интерфейс АТА позволяет подключать устройства различных категорий, разли- чающихся как типом (жесткие диски, оптические, ленточные устройства и т. п.), так и «уровнем интеллекта» встроенного контроллера. Первые дисковые накопители IDE относились к категории неинтеллектуальных устройств — Non-Intelligent IDE. Они не выполняли трансляцию нумерации сек- торов (см. 7.5) — их параметры внешней геометрии совпадали с реальными. Ко- манды идентификации устройства и установки параметров не выполнялись. Де- фектные блоки, отмеченные в заводском списке, были видны пользователю. Низкоуровневое форматирование выполнялось непосредственно по команде, так что неудачное форматирование могло снизить производительность из-за неопти- мальной настройки чередования и смещения. Позже появились более интеллектуальные устройства — Intelligent АТА IDE. Они способны выполнять расширенные АТА-команды — идентификацию устройства и установку параметров. Поддерживается трансляция геометрии, дефектные сек- торы скрываются от пользователя (до исчерпания резерва). Для ускорения об- мена эти устройства поддерживают блочные режимы передачи Read Multiple
50 Глава 3. Интерфейс IDE: ATA/ATAPI и SATA и Write Multiple, а также высокоскоростные режимы обмена РЮ и DMA. Низко- уровневое форматирование возможно только при установке внешней геометрии, совпадающей с реальной. Однако форматирование опять-таки может «снести» заводскую оптимизацию, хотя более поздние устройства либо игнорируют стан- дартную команду форматирования трека, либо по ней только заполняют все сек- торы трека нулями, не выполняя низкоуровнего форматирования. К следующей категории относятся современные устройства с зонным форматом записи — Intelligent Zoned Recording IDE. Поскольку они имеют различное коли- чество секторов на разных треках (для повышения плотности хранения), транс- ляция геометрии является для них обязательной (спецификация АТА не пре- дусматривает сообщения устройством способа разбиения на зоны и формата каждой зоны, так что обращаться к ним можно только по внешнему трехмерно- му (CHS) или линейному (LBA) адресу). Информация о зонном распределении хранится, как правило, в служебной области носителя. Она используется микро- программой контроллера устройства, и с помощью специальных программных средств до нее можно добраться и, например, отключить дефектную зону (уменьшив доступный объем диска). Низкоуровневое форматирование по стан- дартной команде как таковое не выполняется. Такие устройства либо отвергают эту команду, либо выполняют ее фиктивно (только позиционируя головки), либо просто заполняют все секторы трека нулями. Устройства IDE различаются также по интеллектуальности контроллера, кото- рая выражается в выполнении таких действий, как автоматический мониторинг внутренних параметров (SMART), скрытие дефектных блоков, температурная кор- рекция системы позиционирования, поддержка управления энергопотреблением, управление акустическим шумом и пр. Важным параметром устройств является размер собственной буферной памяти (кэша) и эффективность алгоритмов кэширования. Алгоритмы замещения блоков в кэше современных дисков учи- тывают особенности работы в многозадачной среде — они отслеживают несколь- ко потоков запросов. Производители устройств вводят различные усовершен- ствования, в основном направленные на повышение производительности. Эти усовершенствования постепенно входят в очередную версию стандарта АТА/ ATAPI как дополнительные свойства (features). Номер версии стандарта, под- держиваемый устройством, исчерпывающей информации о возможностях уст- ройства не дает: какие-то дополнительные свойства, введенные в указанной вер- сии, могут и не поддерживаться (на то они и дополнительные). Из параметров интерфейсной части устройства в настоящее время наиболее интересны следую- щие: ♦ Поддержка режима UltraDMA (для устройств с параллельным интерфейсом) и достижимая скорость (33, 66, 100, 133 Мбайт/с). Этот режим предпочтите- лен не только благодаря высокой скорости обмена, но и в силу CRC-контро- ля достоверности передачи по интерфейсу. В РЮ и обычных (не-Ultra) ре- жимах DMA никакого контроля нет. Для устройств SATA CRC-контроль используется всегда, а скорость передачи составляет не ниже 150 Мбайт/с. ♦ Объем буферной памяти определяет возможность повышения производитель- ности за счет упреждающего чтения и внутреннего кэширования. Для записы-
3.4. Спецификации интерфейсов АТА (IDE) 51 вающих устройств CD/DVD объем памяти определяет устойчивость к задерж- кам доставки данных (увеличение объема снижает риск неудачи записи). ♦ Поддержка очередей NCQ (для Serial АТА) определяет эффективность рабо- ты с множеством запросов. Поддержка «обычных» очередей и перекрытия ко- манд ATA/ATAPI в обычных системах (со стандартным контроллером PCI IDE) положительного эффекта практически не дает, поэтому соответствую- щих устройств выпускается мало. Параметры, относящиеся к физическому носителю (объем, физическая скорость записи и считывания, время позиционирования и т. п.), в данной книге не рас- сматриваются. 3.4. Спецификации интерфейсов АТА (IDE) Разработкой спецификаций ATA/ATAPI занимается технический комитет Т13 (прежде — Т10) Интернационального комитета по стандартизации в области ин- формационных технологий (INCITS). Разработанные им спецификации оформля- ются в виде стандартов ANSI. Спецификации параллельной шины ATA/ATAPI можно найти в Сети (http://www.t13.org). Спецификации последовательного ин- терфейса Serial АТА можно найти по адресу http://www.serialata.org. Развитие ин- терфейса отражает история спецификаций: ♦ АТА (позже названный АТА-1) — первый стандарт (1994 г.), выработанный американским комитетом ХЗТ10, определяет набор регистров устройств и на- значение сигналов 40-контактного интерфейсного разъема. ♦ АТА-2 — расширенная спецификация АТА. Включает 2 канала, 4 устройства, РЮ Mode 3, Multiword DMA Mode 1, Block mode, объем диска — до 8 Гбайт (преодоление 528-мегабайтного барьера), поддержка LBA и CHS. ♦ Fast АТА-2 разрешает использовать Multiword DMA Mode 2 (13,3 Мбайт/с), РЮ Mode 4. ♦ АТА-3 — расширение АТА-2. Включает средства парольной защиты, улуч- шенного управления питанием, самотестирования с предупреждением при- ближения отказа (SMART). ♦ ATA/ATAPI-4 — расширение АТА-3, включающее режимы UltraDMA Mode 0...2 со скоростью обмена до 33 Мбайт/с и пакетный интерфейс ATAPI. До- бавлена поддержка очередей и возможность перекрытия команд. ♦ ATA/ATAPI-5 — ревизия ATA/ATAPI-4: удалены устаревшие команды и биты, добавлены новые возможности защиты и управления энергопотреблением. Введены режимы UltraDMA Mode 3, 4 со скоростью обмена до 66 Мбайт/с. ♦ ATA/ATAPI-6 — дополнения к ATA/ATAPI-5: 48-битная адресация в режи- ме LBA, управление акустическим шумом, режим UltraDMA Mode 5 со ско- ростью обмена 100 Мбайт/с. ♦ Serial АТА (SATA, 2001 г.) — High Speed Serialized AT Attachment: перевод ATA на последовательный интерфейс с сохранением совместимости с тради- ционным интерфейсом (ATA/ATAPI-5). Скорость передачи — 150 Мбайт/с.
52 Глава 3. Интерфейс IDE: ATA/ATAPI и SATA ♦ Serial ATA-11 (SATA-11 2004 г.) — развитие преимуществ последовательного интерфейса: обеспечено разнообразие способов подключения устройств к кон- троллеру, определен новый протокол передачи данных — FP DMA, введен эф- фективный механизм очередей исполнения команд устройством NCQ. В пла- не команд в спецификации определены только дополнения к ATA/ATAPI-6. ♦ ATA/ATAPI-7 — проект стандарта, объединяющего параллельный и последо- вательные варианты интерфейса. Стандарт состоит из трех томов: • том 1 — общий командный уровень (система команд ATA/ATAPI). Опи- сывается система команд, передаваемых через регистры (АТА), и приво- дятся ссылки на стандарты для пакетных команд (SCSI, потоковые, муль- тимедийные и для устройств со сменными носителями). В систему команд АТА вводится потоковое расширение для чтения-записи аудио- и видео- данных, а также поддержка длинных блоков (размером более 512 байт); • том 2 — транспортный и физический уровни параллельного интерфейса. Приводится детальное описание кабелей, коннекторов и интерфейсных це- пей. Введен режим UltraDMA Mode 6 со скоростью обмена до 133 Мбайт/с; • том 3 — транспортный, канальный и физический уровни последовательно- го интерфейса (соответствует спецификации Serial АТА 1.0). ♦ ATA/ATAPI-8 — проект дальнейшего развития стандарта.
ГЛАВА 4 Параллельный интерфейс АТА Для устройств IDE существует несколько разновидностей параллельного интер- фейса АТА (IDE): ♦ АТА, он же АТ-BUS — 16-битный интерфейс подключения к шине компьюте- ра АТ. Наиболее распространенный 40-контактный сигнальный и 4-провод- ный питающий интерфейс для подключения дисковых накопителей к ком- пьютерам АТ. Для миниатюрных (2,5” и менее) накопителей используют 44- проводный кабель, по которому передается и питание. ♦ E-IDE (Enhanced IDE) — расширенный интерфейс, введенный фирмой Western Digital. Реализуется на большинстве системных плат и в картах для шин PCI и VLB. Позволяет подключать до 4 устройств (к двум каналам), включая CD- ROM и стримеры (ATAPI). В момент своего появления интерфейс выделялся поддержкой РЮ Mode 3, Multiword DMA Mode 1, объема диска до 8 Гбайт, LBA и CHS. С аппаратной точки зрения практически полностью соответствует спецификации АТА-2. В современном понимании интерфейсы АТА и E-IDE практически идентичны, они поддерживают все известные (для АТА) режи- мы передачи данных. ♦ PC Card АТА — 16-битный интерфейс с 68-контактным разъемом PC Card (PCMCIA) для подключения к блокнотным PC. ♦ XT IDE (8 бит), он же XT-BUS — устаревший и редко встречавшийся 40-про- водный интерфейс для компьютеров класса XT, похожий на АТА, но несо- вместимый с ним. ♦ MCA IDE (16 бит) — устаревший 72-проводный интерфейс, предназначен- ный специально для шины и накопителей PS/2. Устройства АТА IDE, E-IDE, АТА-2, Fast АТА-2, АТА-3, ATA/ATAPI-4, ATA/ATAPI-5 и ATA/ATAPI-6 электрически совместимы. Степень логической совместимости довольно высока (доступны все базовые возможности АТА). Од- нако для полного использования всех расширений необходимо соответствие спе- цификаций устройств, хост-адаптера и его ПО. Приведенные здесь описания опираются на спецификации АТА (до ATA/ATAPI-6 включительно).
54 Глава 4. Параллельный интерфейс АТА 4.1. Физический интерфейс Параллельный интерфейс АТА представляет собой шину, в которой все сигналы соответствуют стандартной логике ТТЛ: ♦ высокий уровень выходного сигнала — не ниже 2,4 В (при токе до 400 мкА, сигнал DMARQ — до 500 мкА), низкий уровень — не выше 0,5 В (при токе 4 мА, для линии DASP ради совместимости со старыми устройствами — 12 мА); ♦ высокий уровень входного сигнала — не ниже 2,0 В, низкий уровень — не выше 0,8 В. В наиболее распространенном варианте интерфейса все информационные сигна- лы интерфейса передаются через 40-контактный разъем, у которого ключом яв- ляется отсутствующий на вилке и закрытый на розетке контакт 20. Использова- ние в качестве ключа выступа на корпусе розетки и прорези в бандаже вилки стандартом не приветствуется. Для соединения устройств применяется плоский многожильный кабель-шлейф, длина кабеля не должна превышать 0,46 м (18”), допустимая емкость проводни- ков — не более 35 пФ. Терминаторы стандартом не предусматриваются (они имеются в каждом устройстве и хост-адаптере), но если кабель с тремя разъема- ми (розетками) используют для подключения одного устройства, то устройство и хост-адаптер рекомендуется подключать к противоположным концам кабеля. Это позволяет минимизировать помехи из-за отражения сигналов, существен- ные при высоких скоростях обмена. Состав информационных сигналов интер- фейса АТА приведен в табл. 4.1, вид кабеля — на рис. 4.1. В большинстве старых кабелей одноименные контакты всех разъемов соединяются своими проводами и все коннекторы равноправны. Исключение составляют шлейфы, предназначен- ные для кабельной выборки устройства. Кабель должен соответствовать системе адресации, выбранной для обоих устройств. Адаптер Устройство Устройство Рис. 4.1. Интерфейсный кабель АТА
4.1. Физический интерфейс 55 Таблица 4.1. Интерфейс АТА (IDE) Сигнал Тип1 Контакт Контакт Тип1 Сигнал RESET# I 1 2 - GND DD7 l/OTS 3 4 l/OTS DD8 DD6 I/O TS 5 6 l/OTS DD9 DD5 l/OTS 7 8 * l/OTS DD10 DD4 I/O TS 9 10 l/OTS DD11 DD3 l/OTS 11 12 l/OTS DD12 DD2 l/OTS 13 14 l/OTS DD13 DD1 l/OTS 15 16 l/O.TS DD14 DD0 l/OTS 17 18 I/O TS DD15 GND - 19 20 - Ключ (нет штырька) DMARQ OTS2 21 22 - GND DIOW#/STOP3 I 23 24 - GND DIOR#/HDMARDY#/ HSTROBE3 I 25 26 - GND IORDY/DDMARDY#/ DSTROBE3 OTS2 27 28 I/O SPSYNC/CSEL7 8 DMACK# I 29 30 - GND INTRQ OTS2 31 32 OOK IOCS 16#® DA1 I 33 34 I, o4 PDIAG#/CBLID3 DAO I 35 36 • I DA2 CSO# I 37 38 I CS1# DASP# I/O OK5 6 39 40 - GND +5 В (Logic) - 41® 42® - +5 В (Motor) GND - 43® 44® - Зарезервирован 1 Тип сигнала для устройства: I — вход, О — выход, I/O — двунаправленный, TS — три- стабильный, ОК — открытый коллектор. Для хост-адаптера значения I и О имеют про- тивоположный смысл. 2 У старых устройств сигнал может иметь тип ОК (при разнотипных сигналах на одной шине возможен конфликт). 3 Сигналы, приведенные после символа /, используются только в режиме UltraDMA (АТА-4+). 4 У ведущего устройства — вход, у ведомого — выход. 5 У ведомого устройства — только выход. 6 Контакты 41-44 используются только для миниатюрных дисков. 7 Начиная с АТА-3 — только CSEL. 8 Начиная с АТА-3, зарезервирован.
56 Глава 4. Параллельный интерфейс АТА Спецификация АТА «узаконивает» как 40-контактный интерфейсный разъем, так и 4-контактный разъем питания (рис. 4.2), но для малогабаритных устройств пи- тание может подаваться по 44-проводному интерфейсному кабелю. Рядом с ин- терфейсным разъемом на устройствах могут располагаться конфигурационные джамперы адресации (С5, 5Z, МА, рис. 4.2, в), а также аналоговый (рис. 4.2, г) или цифровой (рис. 4.2, д) аудиовыход приводов CD/DVD. 39 1 40 20 2 а 4 3 2 1 432 1 2 1 CSM S L А W RGGL DG + 00 б д в г Рис. 4.2. Разъемы интерфейса АТА (вилки на устройствах): а — интерфейсный, б — питания, в — джамперы, г — аналоговый аудиовыход, д — цифровой аудиовыход Для большинства устройств применяется 40-контактный разъем с шагом кон- тактов 2,54 мм. Рядом с ним могут располагаться дополнительные контакты, служащие для конфигурирования устройства и технологических целей (диагно- стики и других операций, выполняемых по служебному последовательному ин- терфейсу). Спецификация ATA/ATAPI предусматривает два варианта (рис. 4.3, а и б ). Здесь пустым квадратом обозначены позиции ключевых (пропущенных) выводов, контакты 1-40 используются для интерфейса (см. табл. 4.1), а контак- ты А-Н — для установки джамперов (табл. 4.2) и технологических целей. Рис. 4.3. Дополнительные контакты на разъемах интерфейса АТА: а — SFF8057, б — SFF8058, в — SFF8212 (50-контактный разъем) Для миниатюрных устройств предназначен 50-контактный разъем с шагом вы- водов 2 мм (рис. 4.3, в), у которого контакты 1-44 соответствуют табл. 4.1, кон- такты А-D — табл. 4.2 (используются для конфигурирования, а пара пропущен- ных контактов является дополнительным ключом). Для 50-контактного кабеля принято назначение выводов накопителей IBM Thinkpad/Travelstar:
4.1. Физический интерфейс 57 ♦ контакт А через резистор 10 кОм соединяется с шиной +5 В; ♦ контакт В для устройства задает его роль: низкий уровень — устройство 0, вы- сокий — устройство 1; ♦ контакт С определяет режим устройства по включении питания: низкий уро- вень — Standby, высокий — Idle; ♦ контакт D соединяется с контактом 28 (CSEL) и через резистор 10 кОм — с шиной +5 В. Таблица 4.2. Использование дополнительных контактов Выборка SFF8057 SFF8058 SFF8212 Toshiba (1996) Используемые контакты Е-Н A-F A-D A-D Кабельная выборка E-F А-В B-D B-D Master G-H E-F - - Master при наличии Slave G-H, E-F E-F - - Slave - C-D А-В C-D Это назначение, позволяющее конфигурировать и адресацию, и режим потребле- ния, применяется не на всех устройствах. На винчестерах фирмы Toshiba кон- такты А и В могут использоваться как выход и вход последовательного интер- фейса (В подтянут к шине +5 В через резистор 47 кОм), С — GND, D — роль устройства (низкий уровень для устройства 1). Для малогабаритных внешних устройств существует довольно распространен- ный разъем HP 36, но в спецификацию ATA/ATAPI он не входит. Для уст- ройств хранения на флэш-памяти используется коннектор, соответствующий спецификации CompactFlash Association (см. 14.1). Для блокнотных ПК в стан- дарте имеется вариант интерфейса IDE на 68-контактном разъеме PCMCIA (PC Card), приведенный в табл. 4.3. Таблица 4.3. 68-контактный интерфейс АТА для PC Card (PCMCIA) Контакт Сигнал Контакт Сигнал 1 GND 35 GND 2 / DD3 36 CD1# 3 DD4 37 DD11 4 DD5 38 DD12 5 DD6 39 DD13 6 DD7 40 DD14 7 CS0# 41 DD15 8 42 CS1# Продолжение &
58 Глава 4. Параллельный интерфейс АТА Таблица 4.3 (продолжение) Контакт Сигнал Контакт Сигнал 9 SELATA# 43 10 44 DIOR# 11 CS1# 45 DIOW# 12 46 13 47 14 48 15 49 16 INTRQ 50 17 +5 В 51 +5 В 18 52 19 53 20 54 21 55 M/S# 22 56 CSEL 23 57 24 58 RESET# 25 59 IORDY# 26 60 DMARQ 27 DA2 61 DMACK# 28 DA1 62 DASP# 29 DA0 63 PDIAG# 30 DD0 64 DD8 31 DD1 65 DD9 32 DD2 66 DD10 33 67 CD2# 34 GND 68 GND 80-проводные кабели для UltraDMA Для устойчивой работы в режиме UltraDMA рекомендуется применение 8Q-про- водных кабелей, обеспечивающих чередование сигнальных цепей и проводов схем- ной земли (GND). Такие кабели требуются для режимов UltraDMA выше 2 (ско- рость выше 33 Мбайт/с). Они разделываются на специальные разъемы, имеющие 40-контактные гнезда с обычным назначением контактов, но ножевые контакты служат для врезки 80 проводов. В шлейфе для схемной земли используются либо все четные, либо все нечетные провода — это зависит от применяемых разъемов (на них должна быть маркировка EVN GND или ODD GND соответственно). Уста- новка на одном шлейфе разнотипных разъемов недопустима (тогда все 80 прово- дов окажутся соединенными вместе). На 80-проводном кабеле в разъеме для под-
4.1. Физический интерфейс 59 ключения контроллера контакт 34 соединен с шиной GND и не соединен с проводом шлейфа — этим обеспечивается идентификация типа кабеля (CBLID). Провод шлейфа соединяет контакты 34 разъемов устройств, что обеспечивает прохождение сигнала PDIAG# от ведомого устройства к ведущему. Присутствие 80-проводного кабеля должно быть программно определено до включения режима обмена UltraDMA Mode 3 и выше. Правда, в спецификации есть оговорка, что при двухточечном соединении (контроллер — устройство) для режимов 3 и 4 можно использовать 40-проводный кабель (без среднего разъема). Система не должна позволить пользователю применить высокоскоростные режи- мы на обычном кабеле, при этом желательно, чтобы она сообщала об обнаружен- ном несоответствии. Для определения типа кабеля есть несколько возможностей. ♦ Определение типа кабеля через хост-контроллер, для чего хост-контроллер должен иметь приемник сигнала CBLID#. После включения питания или ап- паратного сброса хост ожидает завершения протокола сброса, а затем подает команду идентификации Identyfy (Packet) Device устройству 1. Устройство 1 стандарта АТА-3 и выше обязано после сброса снять сигнал PDIAG#/CBLID# не позднее, чем по приходу первой команды. Если обнаружено старое устрой- ство, то протокол идентификации кабеля хостом работать не будет (но со ста- рым устройством на шлейфе включать высокоскоростной режим и не стоит). Современное устройство снимет сигнал, и хост-адаптер сможет определить наличие 80-проводного кабеля по низкому уровню CBLID#. Некорректно ра- ботающее устройство может удержать низкий уровень сигнала, и в этом слу- чае 40-проводный кабель будет, ошибочно трактоваться как 80-проводный. ♦ Определение типа кабеля через устройство не требует дополнительного при- емника в контроллере — линия PDIAG#/CBLID# в хост-контроллере заземля- ется через конденсатор емкостью 0,047 мкФ ± 20 %. Приемник сигнала иден- тификации кабеля располагается в устройстве. Для определения типа кабеля хост посылает команду Identyfy (Packet) Device устройству 1, чтобы оно осво- бодило линию (сняло сигнал PDIAG#). Затем команда идентификации посы- лается устройству 0. Примерно через 30 мкс после получения команды уст- ройство кратковременно зануляет эту линию, затем отпускает и только через 20-30 мкс после этого считывает ее состояние и сообщает его в бите 13 сло- ва 93. Линия подтягивается к +5 В резисторами 10 кОм, установленными в устройствах. Если используется 40-проводный кабель, то конденсатор в хост- адаптере не успеет перезарядиться, и устройство сообщит нулевое значение бита. Если кабель 80-проводный, то конденсатор оказывается изолированным от линии PDIAG#/CBLID# в устройстве, и оно сообщает единичное значение бита. Если на хост-контроллере нет конденсатора, то даже 40-проводный ка- бель будет идентифицироваться как 80-проводный, что опасно при передаче данных. Если некорректно работающее ведомое устройство своевременно не отпустит линию, то даже 80-проводный кабель будет казаться 40-проводным. ♦ Комбинированный метод определения типа кабеля предполагает наличие на хост-контроллере и приемника сигнала CBLID#, и конденсатора (они друг другу не мешают). Решение о наличии 80-проводного кабеля принимается, только если это подтвердят оба метода. Возможная ошибка идентификации бу- дет безопасной — при некорректно работающем устройстве 1 на 80-проводном кабеле не включится высокоскоростной режим (наверное, это и к лучшему).
60 Глава 4. Параллельный интерфейс АТА 4.2. Назначение сигналов АТА В документации на устройства могут быть указаны несколько различающиеся обозначения сигналов. Здесь приведены обозначения из стандарта ATA/ATAPI-4. ♦ RESET# (Device Reset) — сброс устройства (инвертированный сигнал сброса системной шины). Сигнал длительностью не менее 25 мкс вырабатывается пос- ле установления питающих напряжений. Сигнал вызывает сброс интерфейса в исходное состояние и устанавливает параметры, применяемые по умолчанию. ♦ DA[2:0] (Device Address) — три младших бита системной шины адреса, ис- пользуемые для выбора регистров устройств. ♦ DD[15:0] (Device Data) — двунаправленная 16-битная шина данных между адаптером и устройствами. При 8-битных обменах используются младшие биты D[7:0J. У устройства не должно быть «подтягивающего» резистора на линии DD7 — на хост-контроллере эта линия через резистор 10 кОм соедине- на с шиной GND. Это позволяет хосту определить факт отсутствия устройства на шине сразу после аппаратного сброса: при чтении регистра состояния отсутствующего устройства бит BSY будет казаться сброшенным, чего не мо- жет быть у устройства ATA/ATAPI. ♦ DIOR# (Device I/O Read) — строб чтения портов ввода-вывода. Данные фик- сируются по положительному перепаду сигнала. ♦ DIOW# (Device I/O Write) — строб записи портов ввода-вывода. Данные фик- сируются по положительному перепаду сигнала. ♦ IORDY (I/O channel Ready) — готовность устройства завершить цикл обмена. Низким уровнем сигнала во время цикла обмена устройство может ввести такты ожидания шины. Сигнал требуется при обмене в режиме РЮ Mode 3 и выше. На хост-контроллере эта линия через резистор 1 кОм должна подтя- гиваться к шине питания. ♦ IOCS16# — разрешение 16-битных операций. Обращение ко всем регистрам, кроме регистра данных, всегда 8-битное. Для РЮ Mode 0, 1, 2 при активном сигнале обращения 16-битные, при неактивном — 8-битные. Для РЮ Mode 3, 4 и DMA все обмены 16-битные, кроме дополнительных байтов (выходя- щих за границу 512-байтного сектора) «длинного» считывания и записи. На- чиная с ATA/ATAPI-3, не используется. ♦ DMARQ (DMA Request) — запрос обмена по каналу DMA (необязательный). При разрешении обмена сигнал (высокий уровень) вводится устройством по готовности к обмену. Введя сигнал DMARQ, устройство должно дождаться подтверждения от хост-адаптера сигналом DMACK#, после чего может снять запрос DMARQ. Для очередной передачи запрос должен быть введен снова. В режиме Multiword DMA запрос может удерживаться на время передачи всех данных. Выход должен быть тристабильным, во время работы с DMA он может быть в активном состоянии (0 или 1) только у выбранного устройства. В АТА-1 для этого сигнала мог использоваться как тристабильный, так и стандартный ТТЛ-выход. Работа на одной шине устройств с разнотипными
4.2. Назначение сигналов АТА 61 выходами DMARQ может привести к конфликтам. На хост-контроллере линия должна соединяться с шиной GND через резистор 5,6 кОм. ♦ DMACK# (DMA Acknowledge) — подтверждение DMA. Сигнал вырабатывает- ся хост-адаптером как подтверждение цикла передачи. Передача слова дан- ных управляется сигналами DIOR# или DIOW#. Во время обмена по каналу DMA сигналы IOCS16#, CS0# и CS1# не используются, обмен всегда произво- дится 16-битными словами. ♦ INTRQ (Interrupt Request) — запрос прерывания. Выход должен быть триста- бильным, активный сигнал (логическую единицу) вырабатывает только вы- бранное устройство, когда у него имеется необслуженный запрос прерывания и его вырабатывание не запрещено битом nIEN в регистре Device Control. За- прос сбрасывается по сигналу RESET#, при установке бита SRST в регистре Device Control, а также при записи в регистр команд или чтении регистра со- стояния. При обменах РЮ запрос устанавливается в начале передачи каждо- го блока (сектора или группы секторов при многосекторных операциях). Ис- ключения: по командам Format Track, Write Sector(S), Write Buffer и Write Long в начале передачи первого блока данных запрос прерывания не вырабатывает- ся. При обменах DMA запрос прерывания вырабатывается только по завер- шении операции. На хост-контроллере эта линия через резистор 10 кОм должна подФягиваться к шине GND. ♦ CSO# (Chip Select 0) — сигнал выбора регистров командного блока (Com- mand Block Registers). Для первого канала он вырабатывается при наличии на системной шине адреса порта ввода-вывода в диапазоне lF0h-lF7h (сиг- нал также называют CS1FX#). ♦ CS1# (Chip Select 1) — выбор регистров управляющего блока (Control Block Registers). Для первого канала он вырабатывается при наличии на системной шине адреса порта ввода-вывода в диапазоне 3F6h-3F7h (часто этот сигнал называется CS3FX#). ♦ PDIAG# (Passed Diagnostics) — сигнал о прохождении диагностики. Ведущее устройство наблюдает за этим сигналом, который ведомое устройство должно выработать в ответ на сброс или команду диагностики. Если ведомое устрой- ство обнаружено (по сигналу DASP#), ведущее устройство ожидает сигнал в течение 31с после сброса и 6 с после команды диагностики. Если за это время сигнал не появился, ведущее устройство отмечает этот факт установкой бита 7 регистра ошибок. Если ведомое устройство не обнаружено, ведущее обнуляет регистр состояния ведомого устройства и сообщает свое состояние сразу после завершения самодиагностики. Сигнал служит только для связи двух устройств и хост-адаптером не используется (в АТА-4 контакт задейст- вован для сигнала CBLID#). ♦ CBLID# (Cable assembly type identifier) — идентификация типа кабеля. В 80-про- водной сборке контакт 34 на разъеме хост-адаптера соединяется с шиной GND, а контакты 34 разъемов устройств соединяются между собой, но связи с разъ- емом хост-адаптера не имеют. На устройстве эта линия через резистор 10 кОм должна подтягиваться к шине питания. После прохождения сброса (когда
62 Глава 4. Параллельный интерфейс АТА сигнал PDIAG# снимается) хост может определить наличие 80-проводного ка- беля по низкому уровню сигнала. ♦ DASP# (Device Active, Slave Present) — сигнал двойного назначения: индика- тор активности устройства и присутствия ведомого устройства. Устройства имеют выход типа «открытый коллектор» с нагрузочным резистором 10 кОм к шине +5 В. После сброса по сигналу RESET# или при инициализации по включении питания оба устройства в течение 1 мс должны деактивировать этот сигнал, после чего не позже чем через 400 мс его вводит ведомое устрой- ство для сообщения о своем присутствии. Ведущее устройство не активирует этот сигнал в течение 450 мс. Сигнал деактивируется ведомым устройством после получения им команды или через 31с автоматически (смотря что про- изойдет раньше). После этого сигнал может быть введен любым устройством как индикатор активности. Адаптер использует этот сигнал для управления светодиодным индикатором доступа к диску. ♦ SPSYNC/CSEL (Spindle Synchronization/Cable Select) — синхронизация шпин- деля или выборка кабелем. Сигнал двойного назначения, которое должно быть единым для обоих устройств. Сигнал SPSYNC позволял синхронизировать шпин- дели устройств (актуально для RAID-массивов); использовался по усмотрению производителя накопителя, начиная с ATA/ATAPI-3 этот сигнал из специ- фикации изъят. Сигнал CSEL позволяет устройствам определять свой адрес по положению на специальном кабеле, обеспечивающем изоляцию контакта 28 разъема ведомого устройства от провода кабеля. Линия CSEL на хост-адапте- ре заземлена, и ведущее устройство получает заземленную линию, а ведомое — не подключенную. На устройстве линия подтягивается к высокому уровню резистором 10 кОм. Состояние сигнала (если он управляется хост-адапте- ром) должно удерживаться по крайней мере 31с после сигнала RESET#. В режиме UltraDMA три линии (использовавшиеся как DIOW#, DIOR# и IORDY) имеют новое назначение сигналов. ♦ STOP (Stop UltraDMA burst) — останов передачи пакета UltraDMA. ♦ DDMARDY# (Device UltraDMA ready) — готовность устройства при приеме пакета UltraDMA (управление потоком). ♦ DSTROBE (Host UltraDMA data strobe) — строб данных устройства при пере- даче пакета хосту. Данные передаются по обоим перепадам DSTROBE. ♦ HDMARDY# (Host UltraDMA ready) — готовность хоста при приеме им пакета UltraDMA (управление потоком). ♦ HSTROBE (Host UltraDMA data strobe) — строб данных хоста при передаче пакета устройству. Данные передаются по обоим перепадам HSTROBE. Для блокнотных ПК в 68-контактном разъеме (см. табл. 4.3) PCMCIA (PC Card) имеется ряд специфичных сигналов. ♦ SELATA# (Select 68-pin АТА) — сигнал, которым хост идентифицирует режим использования разъема: PC Card (сигнал снят) или АТА (сигнал установлен, то есть низкий уровень). Этот сигнал хост должен установить до подачи пи- тания на коннектор. В течение 19 мс после подачи питания устройство игно- рирует все интерфейсные сигналы, кроме этого. Если этот сигнал активен, то
4.3. Подключение и конфигурирование устройств ATA/ATAPI 63 устройство должно сконфигурироваться на режим АТА. Если сигнал неакти- вен, оно должно сконфигурироваться на режим PC Card или не отвечать на другие сигналы хоста. ♦ CD1# и CD2# (Card Detect) заземляются в устройстве — по этим сигналам хост определяет присутствие устройства. ♦ CS1# (Device chip select 1) — выбор устройства, подается хостом на оба кон- такта (Ии 42), но устройство воспринимает только один из них. ♦ DMARQ, DMACK# и IORDY — не обязательны для использования. ♦ M/S# (Master/Slave) — инверсия сигнала CSEL. Хост выдает сигналы M/S# и CSEL до подачи питания, устройство воспринимает лишь один из них. Для «горячего» подключения разъем цепи GND должен обеспечивать более ран- нее соединение при подключении и более позднее при отключении. В устройстве сигналы CSO#, CS1#, RESET# и SELATA# подтягиваются к пассивному состоянию. 4.3. Подключение и конфигурирование устройств ATA/ATAPI Устройства ATA/ATAPI перед подключением к шине должны быть корректно сконфигурированы и подключены к шлейфу нужного канала. Если к шине АТА подключено одно устройство, оно должно быть ведущим. Если подключены два устройства, одно должно быть ведущим, другое — ведомым. ВНИМАНИЕ ------------------------------------------------------- Ошибка в подключении разъемов АТА (переворот) обычно приводит к аппаратному сбросу ком- пьютера, потому что сигнал RESET# (контакт 1) оказывается заземленным (контактом 40). Из- за этого при включении даже не появляются сообщения или звуковые сигналы теста POST. Существует два способа задания адреса устройства — кабельной выборкой или явным вводом адреса на каждом из устройств. Режим кабельной выборки вклю- чается перемычкой CS (Cable Select — кабельная выборка). В этом случае оба устройства на шине конфигурируются одинаково — в режим С5, а адрес устрой- ства определяется его положением на специальном ленточном кабеле. Кабельная выборка работает, если она поддерживается и задана на всех устройствах канала, включая хост-адаптер, который обеспечивает заземление контакта 28. При этом способе задания адресов синхронизация шпинделей накопителей через тот же провод контакта 28 исключается (синхронизация использовалась в старых RAID-массивах). В первоначальном варианте 40-проводного шлейфа с кабельной выборкой (рис. 4.4, а) провод 28 перерезан, так что контакт 28 (CSEL) для ведущего уст- ройства заземлен через хост-адаптер, а для ведомого — не подключен. Начиная с ATA/ATAPI-4, узаконили 80-проводный шлейф с кабельной выбор- кой, в котором для подключения устройства 1 (slave) определили средний кон- нектор (рис. 4.4, б). В среднем коннекторе контакт 28 либо не соединен с прово- дом, либо просто отсутствует.
64 Глава 4. Параллельный интерфейс АТА Адаптер Устройство 1 Устройство О (синий) (серый) (черный) б Рис. 4.4. Ленточные кабели интерфейса АТА с кабельной выборкой: а — 40-проводный с перерезанным проводом, б — 80-проводный со специальными разъемами Вполне понятно, что при использовании кабельной выборки хост-контроллер под- ключать к среднему коннектору кабеля, изображенного на рис. 4.4, б, нельзя (как и к правому, на рис. 4.4, а). Если номер устройства назначается явно, то для 40-проводного кабеля можно подключать устройства и хост-контроллер к лю- бым коннекторам произвольно (но желательно избегать «висячих» концов). Со- временные 80-проводные шлейфы, используемые для режимов UltraDMA, име- ют однозначное назначение коннекторов. ♦ Коннектор хост-контроллера расположен на конце шлейфа, у него контакт 34 заземлен и не соединен со шлейфом. Корпус коннектора должен быть синего цвета. ♦ Коннектор устройства 0 расположен на противоположном конце шлейфа, у него все контакты соединены со шлейфом. Корпус коннектора должен быть черного цвета. ♦ Коннектор устройства 1 (необязательный) расположен в середине шлейфа, у него контакт 28 не соединен со шлейфом. Корпус коннектора должен быть серого цвета.
4.3. Подключение и конфигурирование устройств ATA/ATAPI 65 Заземление контакта 34 позволяет хосту распознать 80-проводный кабель. Если кабельная выборка не используется, то устройства 0 и 1 можно менять местами. ВНИМАНИЕ ---------------------------------------------------------- Висящий (не подключенный к устройству) конец кабеля может быть источником ошибок пере- дачи данных по интерфейсу. Во всех режимах обмена, кроме UltraDMA, эти ошибки НЕ КОНТРОЛИРУЮТСЯ и могут приводить к искажению и потере данных на носителе. Более распространен режим явной адресации, при котором используется обыч- ный «прямой» кабель (см. рис. 4.1). В этом случае перемычка CS не устанавлива- ется, а адрес устройства задается перемычками, состав которых варьируется. В принципе, достаточно лишь указать устройству его номер (0/1), но в устройст- вах, разработанных до стандарта АТА, ведущему устройству «подсказывали» о наличии ведомого (по интерфейсу АТА оно могло бы определить это само по сигналу DASP#). Далее перечислены комбинации джамперов, которые можно увидеть на устройствах IDE. ♦ МА (Master), SL (Slave), M/S (Master/Slave — ведущее/ведомое) — переклю- чатель адреса. Если на шине присутствует одно устройство, оно должно быть сконфигурировано как ведущее. Если на шине два устройства, одно должно быть ведущим, другое — ведомым. Иногда джампер обозначается как C/D (диск С/диск D), но для второго канала IDE такое название некорректно. Ко- гда появились первые IDE-диски емкостью 1 Гбайт, для преодоления барьера в 504 Мбайт некоторые модели допускали конфигурирование в виде двух устройств (0 и 1) половинной емкости. В таком режиме на их ленточный ка- бель IDE второе физическое устройство подключать нельзя. ♦ SP (Slave Present), DSP (Drive Slave Present), Master but Slave is not ATA- compatible или Master but Slave uses only PDIAG-signal — устанавливается на ведущем устройстве для указания на присутствие ведомого. Если переключа- тель установлен, а ведомое устройство не подключено, в ходе теста POST появится сообщение об ошибке. Джампер применяется для дисков, не ис- пользующих сигнал DASP#. ♦ Single Drive — джампер, устанавливаемый на устройстве, если оно — единст- венное на шине (встречалось на дисках Western Digital). Устройство будет ведущим. ♦ ACT (Drive Active) — джампер, соединяющий линию DASP# с формировате- лем сигнала активности устройства. Устанавливается на устройстве 0, встре- чается редко. ♦ HSP — джампер, заземляющий линию DASP# (положение, взаимоисключаю- щее ACT). Устанавливается на устройстве 1 для сигнализации о его присутст- вии (встречается редко). Для полностью АТА-совместимых дисков правильно сконфигурированные уст- ройства определяются автоматически. Современные контроллеры АТА позволя- ют подключать даже единственное устройство как ведомое — интерфейсные функции ведущего берет на себя контроллер.
66 Глава 4. Параллельный интерфейс АТА Разобраться с джамперами старых устройств трудно, если нет документации, од- нако обширная база данных по разным моделям встроена в справочный файл утилиты Disk Manager. В современных устройствах лишние джамперы упразд- нили, а существующие (МА, SL, CS) комментируются на наклейке (шильдике). Если джамперы устанавливаются рядом с интерфейсным разъемом, вероятно, они расположены в соответствии со стандартом АТА (см. рис. 4.3). ВНИМАНИЕ ------------------------------------------------------------- Следует учитывать, что перестановка джамперов часто воспринимается устройством только по включении питания. Кроме того, установка на один ленточный кабель двух разнотипных уст- ройств, если они не являются полностью АТА-совместимыми, часто невозможна. ВНИМАНИЕ ------------------------------------------------------------ К конфигурированию устройств следует относиться внимательно, не допуская присутствия на одной шине (шлейфе) двух ведущих или двух ведомых устройств. Последствия нарушения этого правила могут быть самыми неожиданными и мо- гут даже вызвать серьезную потерю данных (проверено на практике). Два веду- щих (или два ведомых) устройства будут на шине работать «дуэтом» — выпол- нять команды одновременно. При этом каждый байт, считанный командой, будет результатом шинного конфликта чтения из регистров обоих устройств. При равной мощности буферных формирователей это, скорее всего, будет ре- зультат логической функции И от данных, передаваемых каждым из устройств. Контроль достоверности передачи по самой шине АТА выполняется только при работе в режиме UltraDMA, что происходит только после успешной загрузки ОС и ее драйверов PCI IDE Bus-master. Вся идентификация устройств и загруз- ка ОС выполняется в режиме РЮ, без какого-либо контроля достоверности. За- пись оба участника «дуэта» выполняют нормально (одновременно). Во время определения наличия устройств POST считывает сигнатуру устройств из их регистров (см. 8.3). В случае разнотипных устройств (АТА и ATAPI) «победит» сигнатура устройства АТА, и BIOS определит наличие жесткого диска. Далее будет считан «паспорт диска» — 256 слов, описывающих устройство (см. табл. 8.2); здесь результат чтения может оказаться более «интересным». Функция И из описаний разнотипных устройств, скорее всего, даст «кашу», которая удивит пользователя (он не увидит, например, правильного названия ни одного из устройств) и, возмож- но, не позволит начать загрузку ОС. Это самый безобидный сценарий, с которым обычно и сталкиваются. Хуже обстоит дело, когда «объединяются» идентичные устройства, у них различаются только серийные номера (на которые внимание обычно не обращают). Противопоказаний к загрузке с такого «дуэта» BIOS может и не найти, хотя контрольная сумма паспорта диска, вычисленная BIOS, должна бы не совпасть с записанной в паспорте. Возможно, эта проверка делается не всеми версиями BIOS (да и наличие контрольной суммы в паспорте не обязательно). Ав- тора очень огорчили последствия небрежности подключения двух одинаковых вин- честеров с одинаковыми версиями ОС, но по разному распределенных (один винче- стер был размечен на один раздел, другой - на два). При попытках загрузки появлялась заставка ОС, после чего компьютер снова шел на перезагрузку. После
4.4. Режимы передачи данных для устройств АТА 67 этого компьютер не грузился уже ни с одного из этих дисков, подключенных пооди- ночке. Подключение (поочередное) дисков к другому ПК (с нормальной ОС) пока- зало, что у обоих оказались одинаковые (!) и некорректные таблицы разделов. В ка- кой момент выполнялась перезапись таблицы разделов — вопрос для отдельного изучения. Однако вполне очевидно, что при записи1 использование в качестве таб- лиц размещения файлов результата функции И от одноименных секторов раз- ных дисковдолжно разрушить структуры обоих дисков. Мало того, что запись данных может пойти отнюдь не в свободные кластеры, так еще на оба диска бу- дут записаны и «обновленные» (и искаженные) блоки таблиц размещения. Ана- лиз ужасных последствий отсутствия элементарного контроля достоверности передач можно продолжать долго, но это уже относится к восстановлению разру- шенных дисков и в тематику книги не входит. 4.4. Режимы передачи данных для устройств АТА Программа общается с устройствами АТА через регистры, используя инструк- ции ввода-вывода IN и OUT. Для передачи данных с максимальной скоростью при- меняют программный доступ РЮ к регистру данных инструкциями INSW/OUTSW или обмен по каналу DMA. Тип обмена (РЮ или DMA) определяется командой обращения. Программный доступ РЮ обязателен для всех устройств, команды режима DMA устройствами могут не поддерживаться. Параметры различных ре- жимов обмена приведены в табл. 4.4. Обмен в режиме РЮ (Programmed Input/Output) выполняется в виде следующих друг за другом операций чтения или записи в пространстве ввода-вывода по адресу регистра данных. Готовность устройства проверяется перед началом передачи бло- ка, после чего хост производит серию операций в определенном темпе, который оп- ределяется выбранным режимом РЮ Mode 0-4. Для каждого режима определены допустимые параметры временной диаграммы цикла обмена. Обмен РЮ программ- но реализуется с помощью процессорных инструкций ввода-вывода строк REP INS или REP OUTS с занесенным в регистр СХ количеством слов (или байтов) в передавае- мом блоке. Эти инструкции обеспечивают максимально возможную скорость обме- на для данного процессора и системной шины. «Обуздать» процессор в соответст- вии с выбранным режимом входит в задачу адаптера АТА, который использует для удлинения цикла сигнал готовности шины (для ISA — IOCHRDY). Традиционные режимы 0, 1 и 2 имеют временные параметры, задаваемые только хост-адаптером. Для прогрессивных режимов АТА-2 (РЮ Mode 3 и выше) устройство может затор- мозить обмен, используя сигнал готовности IORDY. Программный обмен на все вре- мя передачи блока занимает и процессор, и системную шину. Обмен в режиме DMA занимает исключительно шины ввода-вывода и памяти. Процессору требуется выполнить только процедуру инициализации канала, по- сле чего он освобождается до получения прерывания от устройства в конце пере- дачи блока (этим могут воспользоваться многозадачные системы). 1 Современные ОС в процессе загрузки выполняют обычно безобидную запись log-файлов.
68 Глава 4. Параллельный интерфейс АТА Таблица 4.4. Параметры режимов передачи Режим передачи Минимальное время цикла, нс Скорость пере- дачи, Мбайт/с Интерфейс PIO mode 0 600 3,3 АТА PIO mode 1 383 5,2 АТА РЮ mode 2 240 8,3 АТА РЮ mode 3 180 11,1 E-IDE, АТА-2 (исполь- зуется IORDY) РЮ mode 4 120 16,6 E-IDE, Fast АТА-2 (ис- пользуется IORDY) Singleword DMA Mode 0 960 2,08 АТА Singleword DMA Mode 1 480 4,16 АТА • Singleword DMA Mode 2 240 8,33 АТА Multiword DMA Mode 0 480 4,12 АТА Multiword DMA Mode 1 150 13,3 АТА-2 Multiword DMA Mode 2 120 16,6 Fast АТА-2 UltraDMA Mode 0 120' 16,6 ATA/ATAPI-4 UltraDMA Mode 1 80' 25 ATA/ATAPI-4 UltraDMA Mode 2 60' 33 ATA/ATAPI-4 UltraDMA Mode 3 45' 44,4 ATA/ATAPI-5 UltraDMA Mode 4 30' 66,6 ATA/ATAPI-5 UltraDMA Mode 5 20' 100 ATA/ATAPI-6 UltraDMA Mode 6 15' 133 ATA/ATAPI-7 1 В пакете данных режима UltraDMA за каждый такт передаются два слова данных — один по фронту синхронизирующего сигнала, другой по спаду. Период следования син- хросигналов равен удвоенному времени цикла. Стандартные каналы DMA шины ISA для интерфейса АТА не используются из- за низкой пропускной способности. Высокопроизводительные адаптеры АТА име- ют собственные более эффективные контроллеры. Режимы обмена по каналу DMA бывают одиночными и множественными. При одиночном режиме (Singleword DMA) устройство для передачи каждого слова вырабатывает сигнал запроса DMARQ и сбрасывает его по сигналу DMACK#, подтверждающему цикл обмена. При множественном режиме (Multiword DMA) на сигнал DMARQ хост отвеча- ет потоком циклов, сопровождаемых сигналами DMACK#. Если устройство не справляется с потоком, оно может приостановить его снятием сигнала DMARQ, а по готовности установить его снова. Множественный режим позволяет развить более высокую скорость передачи. Режим UltraDMA, появившийся в спецификации ATA/ATAPI-4, позволяет пе- решагнуть барьер в 16,6 Мбайт/с, свойственный традиционным режимам и ис- пользуемому кабелю. При этом обеспечивается еще и контроль достоверности
4.4. Режимы передачи данных для устройств АТА 69 передачи данных по шине, чего не делалось ни в РЮ, ни в стандартных режимах DMA (а зря!). Стандартом АТА-4 было определено 3 режима UltraDMA (0, 1 и 2), впоследствии ввели новые; выбор режима осуществляется командой Set Features. В режимах UltraDMA сигналы DMARQ и DMACK# сохраняют свое на- значение, а вот смысл сигналов DIOR#, DIOW# и IORDY на время передачи пакета (UltraDMA Burst) существенно меняется. В пакете данные на шине сопровожда- ются стробом, генерируемым источником данных, причем для синхронизации используются оба перепада сигналов. Это позволяет повысить пропускную спо- собность шины до 33 Мбайт/с, не увеличивая частоту переключения сигналов сверх 8,33106 с-1 (этот предел для обычного кабеля достигается в режимах РЮ Mode 4 и Multiword DMA Mode 2). Для более высоких скоростей требуется 80-проводный кабель. Передача в пакете может приостановиться, если приемник снимет сигнал готовности (DDMARDY# или HDMARDY#). Передача пакета может прекращаться по инициативе устройства (снятием сигнала DMARQ) или хоста (сигналом STOP). Противоположная сторона должна подтвердить окончание цикла сигналом STOP или DMARQ соответственно. В режиме UltraDMA каждое переданное слово участвует в подсчете CRC-кода, который передается хост-контроллером в конце пакета. Подсчет ведется и ис- точником данных, и приемником. При несовпадении принятого устройством кода с ожидаемым кодом фиксируется ошибка передачи, о которой устройство сообщает в конце исполнения команды. Способ сообщения об ошибке передачи зависит от типа выполнявшейся команды. Для команд READ DMA, WRITE DMA, READ DMA QUEUED и WRITE DMA QUEUED в регистре ошибок ER устанавливается бит 7 (ICRC) и бит 2 (ABRT). Для пакетной команды REQUEST SENSE (уточнить состояние) в слу- чае ошибки в регистре состояния SR устанавливается бит 0 (СНК) и сообщается ключ состояния (Sense key) OBh (команда отвергнута). Для всех других пакет- ных команд в случае ошибки устанавливается бит СНК и сообщается состояние 04h (аппаратная ошибка), а в последующих командах REQUEST SENSE сообщается значение ASC/ASCQ 08h/03h (ошибка CRC при связи с логическим устройством). Получив сообщение об ошибке, хост должен повторить команду. Если ошибки появляются постоянно, хост должен снизить скорость обмена (вплоть до выхо- да из режима UltraDMA). Тип режима обмена определяется возможностями хост-адаптера (и его драйве- ра), устройств и кабеля, и для каждого устройства он ограничивается миниму- мом из максимальных возможностей всех этих компонентов. Как правило, режимы устанавливаются системой автоматически, но пользователю дается возможность при необходимости «подрезать крылья» контроллеру настройкой BIOS Setup. Правильный выбор режима обмена обеспечивает надежность и производитель- ность. Все устройства поддерживают режим РЮ Mode 0, в котором считывается блок параметров идентификации. В блоке имеются поля, описывающие режим обмена, выбираемый по умолчанию, и более эффективные режимы обмена, под- держиваемые устройством. Командой Set Features можно изменить параметры режима. Иногда накопитель не обеспечивает надежной передачи данных в заяв- ленном высокоскоростном режиме. Если данные начинают пропадать, первым делом следует перейти на менее скоростной режим обмена.
70 Глава 4. Параллельный интерфейс АТА BIOS определяет режим обмена с каждым устройством с учетом ограничений, заданных в Setup. Старые диски, не сообщающие своих параметров, могут не ра- ботать с новыми режимами РЮ. На одном ленточном кабеле (канале АТА) мо- гут присутствовать устройства с разными режимами обмена — спецификация это допускает. Однако реально обычно имеют место аппаратные или программные ограничения. Некоторые чипсеты не позволяют независимо программировать режим обмена для устройств канала. В таком случае при подключении двух раз- ных устройств (например, РЮ Mode 1 и 3) обмен с обоими устройствами будет происходить со скоростью меньшего (РЮ Mode 1). Поэтому не рекомендуется к одному каналу АТА (порту IDE) подключать быстрый винчестер и медленный дисковод CD-ROM. Иногда завязка режимов обмена двух устройств обусловле- на ограниченным набором параметров конфигурации в BIOS. Быстрые режимы множественного обмена по DMA реализуются только драйверами ОС. «Глупый» драйвер может попытаться навязать медленный режим обоим устройствам кана- ла, так что смешивать разные устройства не стоит еще и по этой причине.
ГЛАВА 5 Последовательный интерфейс Serial АТА Последовательный интерфейс Serial АТА (SATA) предназначен для замены тра- диционного параллельного (РАТА) с сохранением регистровой модели подклю- чаемых устройств и возможности передачи данных в режимах РЮ и DMA. При этом шинное подключение пары устройств к одному каналу АТА заменяется двухточечными соединениями устройств с портами хост-контроллера (или концентратора). Для совместимости с АТА программное взаимодействие с уст- ройствами Serial АТА практически совпадает с прежним, набор команд соответ- ствует ATA/ATAPI-5. Для полной программной совместимости контроллер SATA может эмулировать пары устройств (ведущее — ведомое) на одном канале, если такая необходимость возникнет. В то же время аппаратная реализация хост-адаптера Serial АТА значительно отличается от примитивного (в исходном варианте) интерфейса АТА. В параллельном интерфейсе АТА хост-адаптер яв- ляется простым средством, обеспечивающим программное обращение к регист- рам, расположенным в самих подключенных устройствах. В Serial АТА ситуация иная: хост-адаптер имеет блоки так называемых теневых регистров (shadow registers), совпадающих по назначению с обычными регистрами устройств АТА. Каждому порту соответствует свой набор регистров. Обращения к этим теневым регистрам вызывают процессы взаимодействия хост-адаптера с подключенными устройствами и исполнение команд. Помимо поддержки старых команд АТА/ ATAPI, интерфейс обеспечивает поддержку более эффективных команд, в кото- рых обмен данными происходит в режиме FPDMA. Переход на последовательный интерфейс и двухточечные соединения в Serial АТА дает ряд преимуществ: ♦ каждое устройство получает монопольный канал связи с контроллером, что позволяет повысить производительность обмена с устройствами; ♦ исключаются ненужные протокольные взаимодействия ведущего и ведомого устройств параллельной шины и связанные с ними проблемы совместимости устройств; ♦ появляется возможность эффективной одновременной работы контроллера с несколькими устройствами с использованием FPDMA и качественной под- держкой очередей (NCQ);
72 Глава 5. Последовательный интерфейс Serial АТА ♦ упрощается (для пользователя) конфигурирование устройств (не требуется выбор адреса); ♦ обеспечивается возможность полной поддержки «горячего» подключения-от- ключения; ♦ имеются перспективы повышения скорости обмена с устройствами (относи- тельно базовой скорости 150 Мбайт/с); ♦ упрощаются и удешевляются кабели и разъемы; ♦ улучшаются условия охлаждения устройств — тонкий кабель не препятству- ет циркуляции воздуха в корпусе компьютера или внутри массива устройств. Помимо использования преимуществ последовательного двухточечного интер- фейса, в SATA решена проблема адресации — введен режим LBA-48, появивший- ся и в последних версиях параллельного интерфейса (ATA/ATAPI-6). Наиболее эффективно возможности интерфейса SATA реализуются в его естественном ре- жиме работы, а не в режиме совместимости с параллельным интерфейсом АТА. Все функции взаимодействия устройства и контроллера, выполняемые в парал- лельном интерфейсе при помощи множества управляющих и информационных линий, в последовательном интерфейсе реализуются двумя встречно направлен- ными сигнальными линиями. В стандарте рассматривается четырехуровневая модель взаимодействия хоста и устройства, где на верхнем (прикладном) уровне между хостом (процессором и памятью) и устройством SATA выполняется об- мен командами, информацией о состоянии и хранимыми данными. Три ниже- стоящих уровня обеспечивают связь устройства и хост-контроллера по последо- вательному интерфейсу: ♦ Транспортный уровень конструирует информационные структуры — FIS (Frame Information Structure), которыми обменивается контроллер и устройство, пере- дает эти структуры канальному уровню и обеспечивает управление FIFO-буфе- рами обмена с прикладным уровнем. Структуры, принятые от канального уров- ня, он разбирает на составные части и передает их прикладному уровню. ♦ Канальный уровень из информационных структур, представляемых потоками двойных слов, конструирует кадры (обрамляет структуры служебными при- митивами, подсчитывает CRC для потоков данных транспортного уровня), выполняет кодирование 8В/10В, скремблирование и передачу кадров физи- ческому уровню в виде битового потока. Принимаемые с физического уровня битовые потоки канальный уровень обратно преобразует в выровненные по- токи двойных слов, проверяет корректность CRC и, освободив от служебных примитивов, передает их транспортному уровню. Со своим партнером (ка- нальным уровнем противоположной стороны интерфейса) уровень обменива- ется подтверждениями успешного приема кадра и уведомляет об этих успе- хах свой транспортный уровень. ♦ Физический уровень принимает от канального данные кадра в параллельном 10-, 20-, 40-разрядном (или более) виде и преобразует их в сигналы последо- вательного интерфейса. Над последовательными данными, принятыми от партнера по интерфейсу, производятся обратные преобразования. Уровень выполняет инициализацию интерфейса при подключении и подаче питания,
5.1. Транспортный уровень SATA 73 определяет состояние подключения устройства и успешность согласования скоростей, передавая эту информацию канальному уровню. Дополнительно уровень может заниматься управлением энергопотреблением интерфейса, а также калибровкой приемопередатчиков (согласованием с линией). Контроллеры SATA уже имеют свою историю: первые контроллеры (например, Intel 31244), разработанные по спецификации Serial АТА 1.0а, были нацелены на поддержку нового интерфейса подключения и старого программного интерфейса. Затем была принята спецификация нового программного интерфейса — AHCI, позволяющая реализовать основные преимущества SATA. Контроллер AHCI из- бавляет центральный процессор от рутинной работы даже при выполнении ста- рых команд ATA/ATAPI, в которых используется режим обмена РЮ. Возмож- ность работы с новыми контроллерами по старым интерфейсам спецификацией AHCI не запрещается, но это уже другой механизм, никак не связанный с новым. Интерфейс AHCI реализован, например, в южном хабе ICH6 новых чипсетов системных плат фирмы Intel. 5.1. Транспортный уровень SATA Транспортный уровень определяет функциональные возможности взаимодейст- вия устройства и хост-контроллера; изучение этого уровня дает ключ к понима- нию механизмов взаимодействия хоста и устройства. Транспортные уровни контроллера и устройства обмениваются друг с другом информационными структурами (FIS), составляющими содержательную основу кадров канального уровня. Помимо FIS, в кадре присутствуют примитивы, опре- деляющие начало и конец кадра, а также служащие для управления потоком пе- редаваемых данных. В кадр входит и поле CRC-кода, подсчитанного для инфор- мационной структуры. FIS состоит из последовательности двойных слов (по 4 байта). Два самых младших байта первого двойного слова можно рассматри- вать как заголовок: нулевой байт определяет тип FIS, в первом байте поле РМ используется для адресации портов мультиплексора (в SATA 1.0 это поле заре- зервировано). По назначению и составу передаваемой информации информаци- онные структуры делятся на три категории: FIS передачи содержимого регист- ров и установки отдельных битов, FIS установки режима обмена (DMA и РЮ) и FIS данных. Кроме того, имеется FIS для диагностических целей. Информационные структуры передачи регистров служат для связи теневых ре- гистров, расположенных в хост-контроллере, с регистрами устройства. Эти ин- формационные структуры несут образы всех регистров блока командных регист- ров (с их расширениями Ехр для 48-битной адресации) устройства АТА. Этот тип FIS передается в обоих направлениях с некоторыми отличиями: ♦ Информационная структура, передаваемая устройству (рис. 5.1, а), имеет тип 27h и помимо образов регистров содержит бит С — признак провода, по кото- рому эта структура передается: • С=1 — по факту записи в регистр команды (CR); • С=0 — по факту записи в регистр управления (DC).
74 Глава 5. Последовательный интерфейс Serial АТА ♦ Информационная структура, передаваемая хосту от устройства (рис. 5.1, б), имеет тип 34h и помимо образов регистров содержит бит I — признак запроса прерывания от устройства. 31 24 23 16 15 8 7 0 FR CR С£/|Ж1 (PM[3:0]> FIS Type=27h . DWO D/H CH CL SN DW1 FR (Ехр) CH (Exp) CL (Exp) SN (Exp) DW2 DC SC (Exp) SC DW3 DW4 31 24 a 23 16 15 8 7 0 ER SR ТА I 1Ж1 (PM[3:0j) FIS Type=34h DWO D/H CH CL SN DW1 CH (Exp) CL (Exp) SN (Exp) DW2 SC (Exp) SC DW3 ww AAAAAAA. DW4 31 24 ( 23 16 15 8 1 0 ER 7A SR[6:4] SR[2:0] N| I Vz¥A (PM[3:0]) FIS Type=A1h DWO У//////////7. DW1 3 Рис. 5.1. Информационные структуры связи с теневыми регистрами: а — FIS передачи регистров к устройству, б — FIS передачи регистров к хосту, в — FIS установки битов Информационная структура установки битов (Set Device Bits), передаваемая от устройства к хосту (рис. 5.1, в), служит для изменения битов в теневых регист- рах ошибок и состояния. В теневом регистре состояния прием этой информаци- онной структуры не затрагивает битов BSY и DRQ. FIS несет также бит I, при 1=1 хост-контроллер должен вырабатывать запрос прерывания, если на момент приема данной структуры в теневом регистре состояния BSY=DRQ=O. Устройство посылает эту структуру для сигнализации о смене состояния, в том числе и для передачи запроса на обслуживание команды, выполняемой с перекрытием (при этом SERV=I=1). Хост-контроллер, в котором не предусматривается поддержка перекрытия команд, может и не обслуживать данную структуру (отвергая ее со- ответствующим квитированием). В SATA-II в этой структуре определен бит N (Notification), обеспечивающий асинхронное уведомление хоста о событии в уст- ройстве, требующем внимания (например, события, связанные со сменой носи- теля). Информационная структура DMA Activate, передаваемая от устройства к хосту, означает готовность устройства к приему очередной порции данных в командах записи с традиционным протоколом DMA. Никакой информации (помимо фак- та своего прихода, распознаваемого по типу 39h) данная структура не несет. По ее приему хост-контроллер начинает передачу данных по предварительно про- инициализированному каналу контроллера DMA. Если команда выполняется за
5.1. Транспортный уровень SATA 75 несколько передач, хост ожидает данную структуру перед началом каждой пере- дачи. Информационная структура DMA Setup (рис. 5.2, а), передаваемая от устройст- ва к хосту, является основой механизма FPDMA (с ее помощью выполняются все команды, использующие DMA для передачи данных). Эта структура несет хост-контроллеру информацию, необходимую для настройки канала DMA для выполнения текущей передачи. В FIS определены поля идентификатора буфера DMA (64 бита), смещения в буфере (32 бита) и числа байтов для текущей пере- дачи. Кроме того, в FIS имеются биты-признаки направления передачи (D=l — запись в память хоста) и указания на генерацию запроса прерывания по оконча- нии передачи (I). В SATA-II в этой структуре определен также (ww-признак автоактивации DMA (А), по которому передача данных от хоста к устройству бу- дет производиться без использования дополнительных информационных струк- тур DMA Activate. Кроме того, в SATA-II уточнено назначение поля идентифи- катора буфера: в нем должен передаваться тег обслуживаемой команды. Автоак- тивация и наличие тега команды требуются для работы NCQ. б DW0 DW1 DW2 DW3 DW4 DW5 DW6 DW0 DW1 DW2 DW3 DW4 Рис. 5.2. Информационные структуры установки режимов обмена: a — DMA Setup, б — PIO Setup Информационная структура РЮ Setup (рис. 5.2, б), передаваемая от устройства к хосту, обеспечивает управление фазами передачи данных для команд, исполь- зующих обмен РЮ. FIS содержит образы всех регистров командного блока, при- знак направления передачи (D), а также счетчик байтов (с четным ненулевым значением), передаваемых в последующей информационной структуре данных. Для регистра состояния в информационной структуре РЮ Setup присутствуют два значения. Одно значение (Stataus с DRQ=1), в котором драйверу указывается на готовность выполнения обмена с теневым регистром данных, заносится в те- невой регистр до начала обмена. Другое значение (E Stataus с DRQ=O) загружается в теневой регистр состояния по исчерпании счетчика байтов. Манипуляции с об-
76 Глава 5. Последовательный интерфейс Serial АТА разами регистра состояния и ошибок зависят от направления передачи данных в команде: ♦ В командах записи в устройство (передача из памяти хоста, D=0) поля Status и Error из FIS заносятся в теневые регистры SR и ER, а поле E Status сохраняет- ся во временном регистре. По исчерпании счетчика (когда драйвер команда- ми записи в регистр данных передаст весь блок) в теневой регистр SR заносит- ся сохраненное значение E Status. ♦ В командах чтения из устройства (передача в память хоста, D=l) поля Status, E Status и Error из FIS заносятся во временные регистры. По получении от устройства FIS данных в теневые регистры SR и ER из временных регистров заносятся значения Status и Error соответственно. По исчерпании счетчика (когда драйвер командами чтения регистра данных получит весь блок) в те- невой регистр SR заносится сохраненное значение E Status. Информационная структура данных (FIS Data) обеспечивает передачу данных между хостом и устройством. FIS состоит из заголовка (4 байта), в котором зна- чимо только поле типа, и собственно поля данных длиной 1-2048 двойных слов. Для передачи блоков, не кратных двойному слову, последнее двойное слово должно содержать 1-3 байта-заполнителя (нули). Длина блока явно не указыва- ется, она определяется по границам кадра. Ограничение на длину (2048 двойных слов — 8192 байт) относится к «чистым» устройствам и контроллерам SATA. Хост-контроллер, к которому подключается устройство РАТА через мост, дол- жен быть готов к работе и с большими блоками данных (для традиционных уст- ройств ATA/ATAPI такого ограничения нет). Информационные структуры BIST Activate служат для включения режима диаг- ностической «заглушки» (diagnostic loopback) партнером по интерфейсу (струк- туры передаются в обоих направлениях). Функции «заглушки», выполняемые получателем этой структуры (устройством или хост-контроллером), задаются в теле FIS. Возможны замыкание цепей передатчика на цепи приемника (эхо) как в аналоговом, так и в цифровом виде (после ресинхронизации), посылка опреде- ленных последовательностей данных и примитивов, запрет скремблирования и специфические функции, определяемые разработчиком. 5.2. Канальный уровень SATA В описании канального уровня опустим подробности кодирования 8В/10В, от- метив лишь, что избыточность кодирования обеспечивает определенный уро- вень помехозащищенности передачи (недопустимые кодовые слова рассматрива- ются как ошибки), а также позволяет различать символы данных и служебные (управляющие) символы. Обмен по интерфейсу SATA производится кадрами. Кадр, формируемый каналь- ным уровнем, состоит из последовательности примитивов и элементов данных. Те и другие имеют 4-байтный размер — после кодирования 8В/10В составляют 40 смежных битов, передаваемых по интерфейсу. Примитивы начинаются со служебного символа, что позволяет выделять их из общего потока. Кадр начина- ется с примитива SOF (Start Of Frame) и завершается примитивом EOF (End Of
5.2. Канальный уровень SATA 77 Frame), указывающим на то, что предшествующее двойное слово кадра — его CRC-код. Большинство примитивов предназначено для управления передачей данных. В теле кадра присутствуют двойные слова данных транспортного уров- ня, которые могут «разбавляться» примитивами HOLD. Примитивом HOLD в теле кадра устройство (или контроллер) сигнализирует о временной неготовно- сти к передаче очередного двойного слова данных. Приемник кадра примитивом HOLD сигнализирует о неготовности к приему, в ответ на него передатчик посы- лает примитивы HOLDA. О состоянии покоя (Idle) узел сигнализирует примитивом SYNC. Примитив ALIGN служит для выравнивания (синхронизации символов) физического уровня (эти примитивы всегда передаются парами). Примитив CONT используется для заме- ны предшествующего ему примитива при его повторяющейся передаче (повто- ряющаяся монотонная передача нежелательна из-за электромагнитных помех, сосредоточенных в узкой области спектра). Передача FIS управляется путем обмена примитивами. Примитивом XRDY узел сигнализирует о намерении начать передачу FIS. Примитивом R RDY узел сиг- нализирует о готовности к приему кадра, в ответ на него партнер начинает пере- дачу кадра. Примитивом R IP (Reception in Progress) узел сигнализирует о про- цессе приема. На получение XRDY узел может ответить примитивом SYNC — отказом от приема и требованием перевести интерфейс в состояние покоя (Idle). В интерфейсе может возникнуть коллизия — одновременная встречная посылка примитивов X RDY. В случае коллизии хост-контроллер обязан уступить право передачи устройству и повторить свою попытку позже. После передачи EOF узел передает сигнал ожидания подтверждения — прими- тив WTRM (Wait for frame termination). Об успешном приеме кадра его партнер (приемник) сигнализирует примитивом R OK, о приеме с ошибкой — примити- вом RERR. Примитив DMAT (DMA terminate) играет особую роль — с его помощью воз- можна остановка передачи данных в режиме DMA (в параллельном интерфейсе эта остановка выполнялась снятием сигнала DMARQ). Примитив посылается во время передачи данных по встречному каналу. Когда данные посылает хост, уст- ройство посылкой этого примитива приостанавливает передачу, заставляя хост- контроллер сформировать CRC для переданного фрагмента и завершить кадр примитивом EOF. Выполнение текущей команды может быть возобновлено по инициативе устройства, для этого оно должно снова активировать DMA посыл- кой соответствующей информационной структуры. Когда данные передает уст- ройство, хост-контроллер посылкой примитива DM АТ заставляет его завершить кадр (введя CRC и EOF). В этом случае продолжение обмена не предусматрива- ется, устройство завершает выполнение команды с соответствующим сообщени- ем состояния. Ряд примитивов служит для управления энергопотреблением интерфейса. При- митивом PMREQJP узел предписывает партнеру перевести интерфейс в состоя- ние Partial, примитивом PMREQ_S — в состояние Slumber. Эти примитивы посы- лаются непрерывно до получения ответа: РМАСК — подтверждение перехода или PMNAK — отказ от перехода.
78 Глава 5. Последовательный интерфейс Serial АТА 5.3. Физический уровень SATA На физическом уровне для передачи информации между контроллером и уст- ройством используются две экранированные пары проводов, соединяющих вы- ход дифференциального передатчика с входом дифференциального приемника. Сигналы передаются с использованием NRZ-кодирования, которому подверга- ются битовые потоки канального уровня с избыточными 10-битными символами. Битовая синхронизация приемника обеспечивается фазовой автоподстройкой частоты (Phase-Locked Loop, PLL) приемника под принимаемый сигнал. Сим- вольная синхронизация (выравнивание) устанавливается посылкой примитивов ALIGN, последующая синхронизация поддерживается непрерывностью потока передаваемых примитивов и элементов данных. Примитив ALIGN распознается специальной схемой приемника, сравнивающей битовый поток с образцом, пред- ставляющим данный примитив. Передатчик имеет специальный формирователь примитива ALIGN, что позволяет передавать его по собственной инициативе. В первом поколении Serial АТА данные по кабелю передаются со скоростью 1,5 Гбит/с, что с учетом кодирования 8В/10В обеспечивает скорость 150 Мбайт/с (без учета накладных расходов протоколов верхних уровней). В дальнейшем планируется повышать скорость передачи, но в SATA-II новая скорость еще не вводилась. В интерфейсе заложена возможность согласования скоростей обмена по каждому порту в соответствии с возможностями хоста и устройства, а также качеством связи. Хост-адаптер имеет средства управления соединениями, про- граммно эти средства доступны через специальные регистры Serial АТА. В спецификации предусмотрена возможность передачи с расширением спектра сигнала (Spread Spectrum Clocking, SSC). В режиме SSC тактовая частота пере- дачи битов модулируется с частотой 30-33 кГц, что позволяет «размазать» спектр электромагнитных помех, создаваемых интерфейсом. Передача с расширением спектра является дополнительным свойством интерфейса, которое может не поддерживаться или быть запрещено при программном конфигурировании. В Serial АТА 1.0 для скорости 1,5 Гбит/с определен размах сигнала на выходе пере- датчика в диапазоне 400-600 мВ, на входе приемника — в диапазоне 325- 600 мВ. Эти границы применимы и к устройству, и к контроллеру, что позволяет их соеди- нять непосредственно или через кабель длиной до 1 м. В SATA II для поддержки пассивных шасси с устройствами, подключаемых такими же кабелями к контроллеру, повысили минимальный уровень сигнала передатчика хост-контроллера до 500 мВ, а требуемую чувствительность приемника довели до 240 мВ. При неизмененных требованиях к устройствам это позволяет подключать метровым кабелем к кон- троллеру шасси, на котором расстояние от разъема кабеля до дальнего устройства может достигать 18". Номинальное волновое сопротивление кабелей — 100 Ом. Передатчики и приемники могут связываться друг с другом непосредственно (DC coupling) или через разделительные конденсаторы (AC Coupling), устанав- ливаемые на любой стороне (или обоих сторонах). Синфазное напряжение1 1 Синфазный сигнал появляется, поскольку передатчики не являются чисто дифференци- альными.
5.3. Физический уровень SATA 79 (и уровень сигналов в покое) составляет 250 мВ. Для оптимального согласова- ния с волновым сопротивлением (импедансом) линии приемопередатчики могут иметь регулировку своего импеданса. Эта регулировка (калибровка терминато- ров) выполняется при инициализации интерфейса путем подачи специальных сигналов и исследования отраженных сигналов. Сигналы, используемые для ка- либровки, отличаются от обычных и «внеполосных» сигналов. К «внеполосным» (Out Of Band, ООВ) сигналам относятся сигналы COMINIT, COMRESET и COMWAKE. «Внеполосность» означает лишь то, что для передачи и приема этих сигналов не требуются синхронизации и выравнивание; ООВ-сиг- налы передаются теми же передатчиками и принимаются теми же Приемниками. ООВ-сигналы представляют собой посылки пачек из 160 примитивов ALIGN на базовой скорости (длительность пачки — 106,7 нс). Информативна длительность зазора между пачками: для сигналов COMRESET и COMINIT зазор между пачка- ми составляет 320 нс, для COMWAKE — 106,7 нс. Инициализация интерфейса включает в себя согласование скорости и взаимную син- хронизацию порта с устройством. Инициализация требуется по включении питания порта или устройства, а также при «горячем» подключении. Инициализация выпол- няется с помощью внеполосных сигналов, ее может инициировать как хост, так и уст- ройство. Последовательность инициализации по инициативе хоста начинается с пода- чи им сигнала COMRESET, который вызывает аппаратный сброс устройства. На этот сигнал устройство отвечает посылкой сигнала COMINIT, после чего хост выполняет калибровку своих терминаторов и посылает сигнал COMWAKE. В ответ на это уст- ройство выполняет свою калибровку, посылает COMWAKE, а затем начинает непре- рывно передавать примитивы ALIGN на своей максимальной скорости. Если устрой- ство долго (за время посылки 2048 примитивов) не получает ответа, оно может предположить, что хост такую скорость не поддерживает, и попробовать снизить ско- рость (вплоть до базовой). Хост принимает сигнал и, обнаружив примитив ALIGN на доступной ему скорости, синхронизируется с устройством и посылает ему примити- вы ALIGN. Приняв этот примитив, устройство синхронизируется с хостом и посыла- ет ему примитивы SYNC, на что хост отвечает теми же примитивами. После приема трех идущих подряд примитивов SYNC каждый партнер считает соединение уста- новленным и готовым к передаче кадров. Инициализация по инициативе устройства начинается с подачи им сигнала COMINIT, получив который, хост выполняет калиб- ровку и посылает сигнал COMWAKE. В ответ на COMWAKE устройство выполняет калибровку, посылает COMWAKE, после чего хост и устройство согласуют скорость и синхронизируются, как и в описанной ранее инициализации по инициативе хоста. Физический интерфейс включенного устройства может находиться в следующих состояниях энергопотребления: ♦ PHY Ready — активное состояние, устройство и порт синхронизированы (PLL-цепи активны); ♦ Partial — PHY-цепи под напряжением, но потребление понижено, сигнальные линии в нейтральном состоянии, синхронизации нет, а для перехода в актив- ное состояние требуется не более 10 мкс; ♦ Slumber — состояние с еще меньшим потреблением, для перехода в активное состояние требуется не более 10 мс.
80 Глава 5. Последовательный интерфейс Serial АТА Переход в состояние пониженного потребления и согласование выполняются посылкой примитивов PMREQ_P и PMREQ^S. Переход в активное состояние может происходить как по инициативе хоста, так и по инициативе устройства. Инициатор посылает сигнал COMWAKE, его партнер должен ответить таким же сигналом, после чего инициатор и его партнер для синхронизации обмениваются примитивами ALIGN, и соединение снова становится готовым к передаче кадров. Согласование скоростей и калибровка терминаторов при этом не требуются, по- скольку эти параметры уже согласованы. Кабели и разъемы Стандарт определяет новый однорядный двухсегментный разъем с механически- ми ключами, препятствующими ошибочному подключению. Сигнальный сег- мент имеет 7 контактов (S1-S7), питающий (необязательный) — 15 (Р1-Р15); все контакты расположены в один ряд с шагом 1,27 мм. В стандарте определено и положение разъемов на корпусе устройства. Малые размеры разъема и малое количество цепей облегчают компоновку системных плат и карт расширения, а также позволяют применять однотипные разъемы как для обычных (5” и 3,5”), так и для малогабаритных (2,5" и 1,8”) устройств. Назначение контактов приве- дено в табл. 5.1. Сами разъемы показаны на рис. 5.3. Питающий сегмент исполь- зуется на устройствах, предназначенных для установки в шасси. Обычные уст- ройства могут получать питание от традиционного 4-контактного разъема АТА, которым снабжены типовые блоки питания АТХ и АТ. Конструкция разъемов, предложенная в Serial АТА 1.0, оказалось не очень удач-, ной — в ней не предусмотрена фиксация кабельной вилки в розетке устройства и контроллера. Для применения внутри корпуса компьютера, на которое была на- целена спецификация Serial АТА, это было еще терпимо. В Serial АТА II разъем доработали — ввели пружинные фиксаторы (на кабельной части) и соответст- вующие прорези на разъеме устройства или порта. Конструкции разъемов SATA и SATA II совместимы, но надежная фиксация обеспечивается лишь при под- ключении устройств (и контроллера) SATA II кабелем с вилками SATA II. Рис. 5.3. Разъемы Serial АТА: а — полный разъем на устройстве, б — сигнальный сегмент кабельного разъема, в — питающий сегмент кабельного разъема, г — сигнальный сегмент разъема хост-адаптера, д — разъем хоста для непосредственного подключения устройства, е — расположение контактов на разъеме устройства
5.3. Физический уровень SATA 81 Таблица 5.1. Разъем Serial АТА Контакт Цепь Назначение S1 GND Экран S2 А+ Дифференциальная пара сигналов А; на хост-контроллере (НТ+, НТ-) — выход передатчика, на устройстве (DR+, DR-) — вход при- емника S3 А- S4 GND Экран S5 В- Дифференциальная пара сигналов В; на хост-контроллере (HR+, HR-) — вход приемника, на устройстве (DT+, DT-) — выход пере- датчика S6 В+ S7 GND Экран L-образное тело сигнального разъема Свободное пространство L-образное тело питающего разъема Р1 V33 Питание 3,3 В Р2 V33 Питание 3,3 В РЗ V33 Питание 3,3 В, предзаряд Р4 GND Общий Р5 GND Общий Р6 GND Общий Р7 V5 Питание 5 В, предзаряд Р8 V5 Питание 5 В Р9 V5 Питание 5 В РЮ GND Общий Р11 Резерв Р12 GND Общий Р13 V12 Питание 12 В, предзаряд Р14 V12 Питание 12 В Р15 V12 Питание 12 В В SATA определено несколько новых типов сигнальных разъемов и кабелей: ♦ Многопортовый (multi lane) внутренний разъем обеспечивает передачу сиг- налов 2-4 портов SATA. Кабель с таким разъемом на другом конце может иметь аналогичный разъем, а может представлять собой пучок кабелей (fanout cable) с обычными однопортовыми разъемами на концах. По конструкции многопортовый внутренний разъем напоминает обычный однопортовый (но с большим числом контактов). ♦ Однопортовый внешний разъем SATA полностью экранирован. По конструк- ции разъем напоминает USB типа А, но с семью контактами и фигурными выступами.
82 Глава 5. Последовательный интерфейс Serial АТА ♦ Многопортовые (на 2-4 порта) малогабаритные внешние разъемы SFF 8470 с D-образным кожухом и винтовой фиксацией могут быть как с ключами (выступы и прорези), так и без них. При этом вилки (на кабеле) без ключей не входят в слоты (на устройстве) с ключами. Для «горячего» подключения контакты разъемов имеют разную длину. В первую очередь соединяются (и в последнюю — разъединяются) контакты «земли» Р4 и Р12; затем остальные «земли» и контакты предзаряда конденсаторов в цепях пита- ния РЗ, Р7 и Р13 (для уменьшения броска потребляемого тока), после чего соеди- няются основные питающие контакты и сигнальные цепи. На контакты предзаряда питание от соответствующих источников подается через резисторы сопротивлени- ем 10-20 Ом. В шасси с «горячим» подключением факт подключения устройства может определяться посредством измерения сопротивления между контактами предзаряда и основными питающими контактами (например, Р7 и Р8). 5.4. Расширения SATA для систем хранения данных Интерфейс Serial АТА «дорос» до использования в сложных системах хранения данных. Его производительность и эффективность высоки, малое число сигналь- ных проводов позволяет организовывать подключение множества устройств. С использованием SATA можно строить полностью избыточные системы хране- ния, содержащие массивы устройств (например, RAID), которые могут подклю- чаться более чем к одному хост-компьютеру. Пример системы хранения данных, иллюстрирующий применение различных элементов топологии, приведен на рис. 5.4. | Хост 11 Хост | |2С->- Устройства хранения ♦ Контроль и управление * питанием, климатом Рис. 5.4. Пример системы хранения данных Устройством хранения (storage device) SATA называется отдельный накопитель (жесткий диск, привод CD/DVD, магнитооптический, ленточный привод и т. п.) с интерфейсом SATA. Хост (host) — это компьютер (процессор и память), к которому подключается устройство хранения. В SATA-II вводится абстрактное понятие концентратор —
5.4. Расширения SATA для систем хранения данных 83 средство подключения к хосту множества устройств SATA. У концентратора име- ются хост-интерфейс и ряд портов SATA для подключения устройств. Типы хост- интерфейса разнообразны — это может быть PCI/PCI-X/PCI Express, Advanced Switching, InfiniBand, Ethernet (iSCSI), Fibre Channel, Serial ATA... Концентра- тор может являться просто мостом, RAID-контроллером, коммутатором или мультиплексором портов. Хост-контроллер, подключенный к шине PCI или ин- тегрированный в чипсет системной платы, также является концентратором (мос- том между PCI и SATA). Подсистема (subsystem) хранения представляет собой множество устройств, подключенных к концентратору. Конструктивно подсистема может быть оформ- лена в виде шасси, на котором установлены концентратор, устройства и допол- нительные элементы. Новый (для АТА) элемент топологии — мультиплексор портов (port multiplier) служит для подключения множества устройств SATA к одному порту хост-кон- троллера. Противоположное назначение имеет селектор порта (port selector) — этот элемент позволяет выбрать хост для работы с данным устройством или под- системой хранения. Селектор порта обеспечивает избыточность путей доступа к устройству, но активным в данный момент времени может быть только один путь. Подсистемы хранения данных (массивы устройств) Подсистемы хранения, как правило, конструктивно оформляются в виде внеш- него (по отношению к компьютеру) блока хранения (storage enclosure), в состав которого помимо концентратора, устройств и, разумеется, блока питания могут входить дополнительные средства обслуживания (enclosure management). Эти средства могут обеспечивать поддержание климата, контроль питания, защиту от несанкционированного доступа и т. п. Эти задачи решает обслуживающий про- цессор (Storage Enclosure Processor, SEP), с которым хост должен иметь возмож- ность взаимодействия. Чтобы не увеличивать номенклатуру интерфейсов ради связи хоста и SEP, в SATA II определена логическая топология интерфейсов, приведенная на рис. 5.4. Связь хоста с SEP обеспечивает мост SEMB (Serial АТА enclosure management bridge), который для хоста представляется как устройство АТА (Serial АТА), а для подключения SEP имеет последовательный интерфейс 12С. Мост преобра- зует обращения к блоку своих командных регистров в транзакции по интер- фейсу 12С. Физически мост SEMB может быть интегрирован в концентратор, а может быть и отдельным устройством с интерфейсом SATA, подключаемым к порту концентратора. Хост определяет присутствие SEMB среди подключен- ных устройств SATA по сигнатуре — определенным значениям, считанным из командных регистров после сброса. Сигнатура позволяет определить и наличие обслуживающего процессора, подключенного к SEMB (сигнатуры при подклю- ченном и отключенном процессоре различны). Взаимодействие с SEP выполня- ется с помощью новой команды SEP ATTN (код 67h), параметры команды и дан- ные передаются через регистры командного блока. В SATA II определены протокол связи с SEP по интерфейсу 12С и форматы использования блока ко-
84 Глава 5. Последовательный интерфейс Serial АТА мандных регистров для подачи команд и обмена данными с SEP. При этом обес- печивается поддержка двух промышленных стандартов на управление SCSI-сис- темой хранения — SAF-TE (SCSI Accessed Fault-Tolerant Enclosures) и SES (SCSI Enclosure Services). Мультиплексор портов Мультиплексор (разветвитель) портов определен в SATA II как средство под- ключения множества (до 15) устройств к одному порту контроллера SATA. Спе- цификации мультиплексора опубликованы в документе Serial АТА II: Port Multiplier, Revision 1.1 (2003 г.). Мультиплексор обеспечивает логическую ком- мутацию своего хост-порта (host port) SATA, обращенного к контроллеру, с од- ним из своих портов устройств (device port), к которым подключаются устрой- ства SATA. Один порт (с номером Fh) является управляющим (control port), обращениями к этому порту хост взаимодействует с мультиплексором (его реги- страми). К порту мультиплексора можно подключать только устройства, но не другой мультиплексор — каскадное подключение мультиплексоров недопустимо. Мультиплексор обеспечивает двунаправленную трансляцию FIS и поддержива- ет протокол управления передачей с помощью примитивов. Мультиплексор ис- пользует только FIS и примитивы, определенные в SATA 1.0а; никаких измене- ний в протокол работы устройств не вводится. Для работы с мультиплексором хост-контроллер и ПО хоста должны иметь соответствующую поддержку. При ее отсутствии хосту будет доступно только устройство, подключенное в мульти- плексоре к порту 0. Коммутация для информационных структур, передаваемых от хоста к устройст- ву, выполняется по содержимому FIS. Для этого в ранее резервированное поле заголовка FIS введено поле РМ[3:0] — номер порта мультиплексора, к которому подключено целевое устройство. Это позволяет хост-контроллеру направлять потоки данных к нужному устройству и различать, от какого устройства прихо- дят данные, содержимое регистров и директивы установки контроллера DMA. Для технологии NCQ поле РМ вместе со значением тега и номером порта хост- контроллера должно фигурировать в качестве индексной информации для аппа- ратного переключения контекста DMA. В противном случае с устройствами, подключенными к мультиплексору, можно работать только командами без оче- редей или же работать поочередно. Поле РМ игнорируется устройством SATA, оно нужно только для мультиплексора. Принимая FIS, мультиплексор определяет, можно ли транслировать FIS в ука- занный порт; если нельзя, мультиплексор сигнализирует об этом посылкой хост- контроллеру примитива SYNC. Противопоказанием к трансляции может быть недействительный номер порта (если у мультиплексора портов меньше), запрет работы данного порта или неподтвержденная (программой хоста) смена состояния подключения. Неподтвержденная смена состояния (например, смена устройст- ва) проверяется по значению бита X регистра SError (PSCR[1]), относящегося к данному порту. Если противопоказаний нет (бит Х=0), мультиплексор передает в порт примитив XRDY и, получив в ответ R_DRY, начинает трансляцию FIS. При попытке трансляции возможна коллизия, если устройство адресованного порта само пытается начать передачу FIS хосту. В случае коллизии мультиплек-
5.4. Расширения SATA для систем хранения данных 85 сор посылает хосту примитив RERR. Об успехе приема FIS устройство сигна- лизирует примитивом R OK, который мультиплексор транслирует хосту. Если при приеме FIS устройство сигнализирует об ошибке, мультиплексор доносит этот сигнал до хоста. Коммутация FIS от устройства несколько сложнее: устройство ничего «не знает» о мультиплексоре, к которому оно подключено, а хост-контроллер должен «по- нимать», от какого устройства (номера порта мультиплексора) приходит FIS. Поэтому мультиплексор должен модифицировать поле РМ в транслируемой ин- формационной структуре, подставляя туда номер порта, от которого идет транс- ляция, и пересчитывая в кадре CRC для передаваемой структуры. Устройство, желающее передать FIS, посылает примитив X RDY. Обнаружив его на своем порте, мультиплексор проверяет состояние данного порта (по регистру PSCR[1]) и доступность хост-порта. Если данный порт запрещен, запрос игнорируется. Если хост-порт свободен, мультиплексор посылает ему X RDY и, получив в от- вет RRDY, транслирует модифицированную информационную структуру. Если в процессе трансляции мультиплексор обнаруживает ошибку CRC принимаемой структуры, он должен «испортить» CRC еще и для передаваемой модифициро- ванной структуры. Сигнализацию успеха или ошибки приема FIS хостом муль- типлексор передает устройству. Коллизии в мультиплексоре происходят, когда мультиплексор начинает прием от устройства, а в это время хост начинает передачу. Коллизия также возникает, когда устройство и мультиплексор одновременно посылают друг другу примити- вы X RDY. Коллизии обрабатываются обычным для SATA способом: хостгкон- троллер «сдается» и должен повторить попытку передачи позже. Мультиплексор в случае коллизии разрушает информационную структуру, принимаемую от хоста. Мультиплексор для хост-контроллера выглядит как устройство SATA с блоком командных регистров и блоком специфических регистров мультиплексора — GSCR[0-255]. Регистры имеют разрядность 32 бит, большая часть регистров заре- зервирована на будущее. Регистр GSCR[0] содержит идентификатор производителя (по PCI SIG) и продук- та, регистр GSCR[1] — идентификатор версии и спецификации мультиплексора, регистр GSCR[2] в битах [3:0] — число портов для подключения устройств. Регистр GSCR[32] в битах [0:14] содержит обобщенную информацию о состоянии регистров ошибок (SError1) для каждого порта мультиплексора (по биту на порт). Каждый из этих битов собирается по функции ИЛИ из избранных битов регистра ошибок каждого порта. Биты, которые собираются по ИЛИ, задаются регистром GSCR[33]. Выбором этих битов можно определять, какие ошибки интерфейса бу- дут отражены в GSCR[32] (и препятствовать участию портов в работе). Регистры GSCR[64] и GSCR[96] определяют поддерживаемые и разрешенные свой- ства (запуск самотестирования, подача сигнала PMREQ_P хосту, передача с рас- ширением спектра, подача асинхронных уведомлений). Регистры GSCR[128 -255] отданы для использования по усмотрению разработчика. 1 Возможен ли непосредственный доступ к этим регистрам, связанным с портами, из специфи- кации не понятно. Использование регистра DH для задания номера порта наводит на мысль, что возможность доступа к регистрам портов может быть реализована в будущих версиях.
86 Глава 5. Последовательный интерфейс Serial АТА Для доступа к специфическим регистрам мультиплексора предназначены специ- альные команды АТА Read/Write Port Multiplier (коды E4/E8h). Адрес регистра, к которому выполняется обращение, задается в регистре FR. В регистре DH[3:0] указывается номер управляющего порта (Fh). Данные для чтения и записи (32 бита) передаются через регистры SC (самый младший байт), SN, CL и СН (са- мый старший байт). Сообщения об ошибках через регистр ER специфичны: при обращении к несуществующему регистру в регистре ER устанавливается бит 1 (REG), при некорректном номере порта — бит О (PORT). Бит 2 (ABRT) устанавлива- ется, если команда не поддерживается (обратились не к мультиплексору). Селектор порта Селектор порта, введенный в SATA И, позволяет выбирать порт для работы с хостом. Спецификации селектора порта опубликованы в документе Serial АТА И: Port Selector Revision 1.0 (2003 г.). Селектор имеет два хост-порта и один порт уст- ройств. Активный порт (active port) — это один из хост-портов, выбранный в данный момент времени и связанный с портом устройства. Селектор порта может работать с любым устройством (или концентратором) SATA. Селектор позволяет выбирать только между двумя хостами; каскадное подключение селекторов недопустимо. Се- лектор порта не имеет каких-либо регистров и не требует дополнительных информа- ционных структур для управления своей работой. Он представляет собой три PHY- уровня SATA, связями между которыми управляет автомат состояний селектора. Ак- тивным может быть лишь один порт; при смене активного порта для устройства вы- полняется команда сброса, которая аннулирует все ранее поданные команды, находя- щиеся в разных стадиях обслуживания. Смена активного порта может выполняться с помощью одного из протоколов, поддерживаемых и хостами, и селектором. Выбор активного порта может выполняться при помощи внешнего сигнала (не SATA-интерфейса), что в данной спецификации называется Side-band port selec- tion. Протокол выбора спецификацией не рассматривается, он может быть при- митивным, например, одним логическим сигналом выбирать тот или иной порт. Спецификация посвящена протокольному выбору порта (protocol-based port selec- tion), основанному на внеполосной сигнализации SATA. Выбор активного порта производится следующим образом. По включении питания у селектора оба хост- порта неактивны; активным становится порт, на который первым приходит сиг- нал COMRESET. В дальнейшем возможна смена активного порта, для чего на не- активный порт должен быть подан явный запрос выбора. Сигнал запроса пред- ставляет собой серию сигналов COMRESET, паузы между которыми имеют чередующуюся длительность (2 и 8 мс). Порт переключается после приема под- ряд двух пар сигналов COMRESET. Следующий за ними сигнал COMRESET пе- редается устройству и отрабатывается им как аппаратный сброс. Протокол за- проса исполняется только с использованием стандартных регистров SATA, не требуя дополнительных средств транспортного и канального уровней. Хост мо- жет иметь средства определения факта подключения селектора к его порту, при- чем в любом состоянии данного порта селектора (активном и неактивном). Если такие средства имеются, то наличие селектора программа может определить по единичному значению бита А в регистре ошибок данного порта. Политика смены хоста в данной спецификации не рассматривается.
ГЛАВА 6 Адаптеры и контроллеры АТА Устройства АТА подключаются к хосту через адаптер или контроллер шины АТА. Все регистры контроллера и схемы, обслуживающие носитель, размещены в самом устройстве IDE. Шина АТА требует выделения системных ресурсов — двух областей портов ввода-вывода для регистров и линии прерывания; допол- нительно может потребоваться канал DMA. Простейший адаптер АТА содержит только буферы сигналов шины и дешифратор зоны адресов ввода-вывода. В компьютере может присутствовать несколько шин (каналов) АТА, подключен- ных к одному или нескольким контроллерам (адаптерам). Интерфейсу АТА пер- вого канала выделены ресурсы, ранее использовавшиеся контроллером жестких дисков. Второму каналу назначены ресурсы альтернативного контроллера жест- ких дисков. Позже были определены ресурсы еще для двух каналов (табл. 6.1). Традиционному контроллеру жестких дисков выделяется канал DMA3, но он является 8-битным, в то время как шина АТА требует 16-битного канала DMA. Производительности стандартных каналов DMA для шины АТА явно недоста- точно, более сложные контроллеры АТА имеют собственные контроллеры пря- мого доступа к памяти. Таблица 6.1. Системные ресурсы каналов АТА Канал CSO CS1 IRQ 1 1F0h-1F7h 3F6h-3F7h 14 2 170h-177h 376h-377h 15 или 10 3 1 E8h-1 Efh 3Eeh-3Efh 12 или 11 4 168h-16Fh 36Eh-36Fh 10 или 9 На системных платах с шиной PCI обычно устанавливается двухканальный кон- троллер, занимающий ресурсы каналов 0 и 1. В идеальном варианте двухканаль- ные контроллеры имеют шины, полностью изолированные друг от друга буфер- ными и логическими схемами. В самом дешевом варианте у них имеются общие буферы для линий данных и управляющих сигналов и отдельные — только для некоторых сугубо индивидуальных сигналов. С точки зрения логики здесь все в порядке, но следует учитывать нагрузочную способность (влияние паразитных
88 Глава 6. Адаптеры и контроллеры АТА параметров): суммарная длина обоих ленточных кабелей не должна превышать 46 см, а суммарная емкость каждой линии со всеми устройствами не должна пре- вышать 35 пФ. Иначе на высокоскоростных режимах обмена возможны некон- тролируемые искажения передаваемых данных. Стандарт ATA/ATAPI-6 пред- писывает следующее: ♦ В каждом канале должны быть собственные формирователи управляющих сигналов DIOR#, DIOW# и приемник IORDY (рекомендуемый вариант), либо должны быть раздельные формирователи CS0# и CS1# (второй вариант ло- гичнее, но хуже в плане помех). Такая конфигурация позволяет использовать все режимы обмена, кроме UltraDMA. ♦ Для поддержки UltraDMA 0, 1 и 2 (до 33 Мбайт/с) к этим требованиям до- бавляется наличие раздельных формирователей сигнала DMAQK#. ♦ Для поддержки UltraDMA 3 и выше (44-100 Мбайт/с) все линии должны иметь раздельные приемопередатчики. Общими могут быть только сигналы RESET#, INTRQ, DA(2:0), CSO#, CS1# и DASP#, но стандарт этого не рекомендует. Поскольку скорость программного обмена задается хост-адаптером, интересно индивидуальное программирование режимов РЮ Mode для каждого канала/ устройства. Ряд чипсетов этого не допускает и при инициализации назначает об- щий минимально доступный режим. В результате подключение «тихоходного» устройства замедляет обмен быстрого соседнего устройства. Современные системные платы оснащаются высокопроизводительными контрол- лерами шины АТА, обеспечивающими прямое управление шиной (bus mastering) PCI при обмене с устройствами в режимах DMA и UltraDMA. Прямое управле- ние шиной повышает суммарную производительность компьютера в многозадач- ных и многопоточных операционных системах. Сами по себе режимы DMA не дают выигрыша в скорости обмена по шине АТА — только режимы UltraDMA Mode 1 и выше превосходят по скорости режим РЮ Mode 4 (см. табл. 4.4). Од- нако обмен в режиме DMA значительно меньше загружает центральный процес- сор компьютера, и параллельно с дисковым обменом процессор может заниматься обработкой других потоков (задач). В однозадачных (и однопоточных) системах во время дискового обмена процессор все равно ничем другим не занимается, по- этому для них хорош и режим РЮ Mode. Для реального использования режима прямого управления в операционной системе должен быть установлен специаль- ный драйвер Bus-Master, соответствующий используемому контроллеру АТА (как правило, чипсету системной платы). Стандартный контроллер PCI IDE описан далее. Операционная система MS-DOS режимы DMA (и прямое управление) не использует. Для многозадачных ОС (Windows 9x/NT/2000, OS/2, Unix, Linux, NetWare...) драйверы могут входить в комплект поставки ОС или поставляться производителями системных плат (контроллеров АТА). И наконец, режим DMA должны поддерживать подключаемые устройства. Практически все современные устройства (кроме CFA) поддерживают UltraDMA (или Multiword DMA), но если в паре с таким устройством к одному контроллеру подключено старое уст- ройство, не поддерживающее этот режим, то прогрессивные режимы могут ока- заться недоступными (по вине чипсета или драйвера) и для нового устройства.
6.1. Контроллер PCI IDE Bus Master 89 ВНИМАНИЕ ------------------------------------------------------------- Режим UltraDMA привлекателен не только скоростью и разгрузкой процессора, но и контролем достоверности передач по шине АТА (правда, этот контроль корректно работает не со всеми драйверами). Поскольку контроллеры АТА подключаются к 32-разрядной шине PCI, в них ввели механизм обращения к регистру данных АТА двойными словами. При этом за одну 32-битную операцию процессора и шины PCI по шине АТА последова- тельно передаются два 16-битных слова. Возможностью 32-разрядного доступа к регистру данных можно управлять через параметр IDE 32-bit Transfer (Enable/ Disable) BIOS Setup. Более сложные контроллеры (отдельные карты расширения) могут иметь собст- венные кэш-память и управляющий процессор. Они могут аппаратно поддержи- вать «зеркальные» диски и организовывать RAID-массивы АТА-дисков. Некоторые адаптеры позволяют соединять несколько физических дисков в один логический на уровне вызовов BIOS. Адаптеры АТА одно время часто размещали на звуковых картах (для подключе- ния CD-ROM). По умолчанию им назначают ресурсы канала 3 или 4. К этим ка- налам можно подключать винчестеры, но будет ли их там искать BIOS во время теста POST — вопрос. Современные версии BIOS позволяют хранить конфигу- рационные параметры четырех жестких дисков, более старые версии — двух. Че- тыре канала АТА физически позволяют подключить до восьми накопителей, но работа с ними лимитирована программными ограничениями. Существуют гибридные адаптеры для подключения АТА HDD к шинам XT и MCA или, например, к LPT-порту. В последнее время получили распростра- нение переходные адаптеры, позволяющие подключать устройства ATA/ATAPI к шине USB или/и FireWire. При использовании USB 2.0 простота подключе- ния внешнего устройства сочетается и с высокой скоростью передачи данных. 6.1. Контроллер PCI IDE Bus Master Для шины PCI существует стандартный вариант интерфейса контроллера IDE (название «АТА» здесь не очень уместно, поскольку оно ориентировано на ISA- подобную шину). Спецификация PCI IDE Controller Specification появилась еще в 1994 г., она описывала реализацию контроллера, совместимого с интерфейсом АТА. По сравнению с обычным контроллером, у данного контроллера в блоке управляющих регистров имеется лишь один адрес (устаревший регистр адреса устройства недоступен). Чуть позже была опубликована спецификация Programming Interface for Bus Master IDE Controller, описывающая работу с уст- ройствами в режиме DMA с прямым управлением шиной. Двухканальный кон- троллер является одной функцией PCI; четырехканальный контроллер будет уже многофункциональным устройством PCI. Для контроллера определены два ре- жима распределения ресурсов: ♦ режим совместимости (compatibility), в котором каналам выделяются тради- ционные области адресов ввода-вывода и линии прерываний;
90 Глава 6. Адаптеры и контроллеры АТА ♦ естественный режим PCI (native-PCI), в котором базовые адреса блоков ре- гистров и линии прерывания задаются в регистрах BAR конфигурационного пространства и могут произвольно перемещаться в любую область. Расположение регистров для контроллера иллюстрирует табл. 6.2. Напомним, что регистры BAR0...BAR4 располагаются в конфигурационном пространстве функции PCI по адресам 10h, 14h, 18h, ICh и 20h. В режиме совместимости контроллер может работать только на первичной шине PCI, поскольку мост PCI-PCI не мо- ^сет транслировать обращения по стандартным адресам на другую шину. В режиме PCI с перемещаемыми ресурсами контроллер может находиться на любой шине. В режиме совместимости контроллер должен получить две линии запросов пре- рывания — IRQ15 и IRQ14; в режиме PCI он как однофункциональное устройство PCI использует лишь одну линию запроса прерывания. Конкретный контроллер может поддерживать изменение режима или один из режимов. Если контроллер по умолчанию (или всегда) работает в режиме совместимости, то для ПО он «прозрачен» — работа с ним не отличается от работы традиционного контролле- ра АТА. Текущий режим и возможность его смены отражаются в байте программ- ного интерфейса, являющегося последним элементом идентификатора класса уст- ройства. Байт интерфейса имеет следующее назначение битов: ♦ бит 7 (bus mastering) — возможность работы в режиме прямого управления; ♦ биты 6:4 — ООО (признак стандартного интерфейса, соответствующего PCI IDE Controller Specification); ♦ бит 3 — индикатор программируемости режима для второго канала (возмож- ности изменения бита 2); ♦ бит 2 — режим второго канала (0 — совместим со стандартным контроллером АТА IDE, 1 - PCI IDE); ♦ бит 1 — индикатор программируемости режима для первого канала (возмож- ности изменения бита 0); ♦ бит 0 — режим первого канала (0 — совместим с АТА IDE, 1 — PCI IDE). Типовой контроллер, реализованный в чипсетах большинства современных сис- темных плат, имеет значение идентификаторов класс.подкласс:интерфейс 01:01:80h (байты OBh, OAh и 09 в конфигурационном пространстве функции). Контроллер выглядит как расширение стандартного АТА-контроллера, обеспечивающего доступ к регистрам устройств АТ А/AT API по известным адресам. Расширение касается прямого управления шиной PCI, благодаря которому можно реализо- вать обмен данными с устройствами в режимах DMA. Контроллер позволяет ис- пользовать все доступные ему режимы обмена РЮ (3,3-16,6 Мбайт/с), режимы DMA в стиле контроллера 8237А (2-16,6 Мбайт/с) и режимы UltraDMA (16,6-133 Мбайт/с). Любая настройка временных параметров выполняется че- рез конфигурационные регистры функции PCI, их состав может быть специфич- ным. Однако с этими регистрами должна иметь дело только процедура POST, устанавливая для каждого обнаруженного устройства ATA/ATAPI оптимальные режимы РЮ и DMA/UltraDMA. В эту настройку может вмешаться пользова- тель, установив какие-либо ограничивающие параметры в BIOS Setup. В итоге после конфигурирования во время теста POST при обращении программ к уст-
6.1. Контроллер PCI IDE Bus Master 91 ройствам остается выбор лишь между РЮ и DMA (если устройство поддержи- вает DMA). Для обмена в режиме РЮ никаких специальных действий не тре- буется, программа просто выполняет чтение из регистра данных или запись в регистр данных командами REP INSW/OUTSW. Для обмена в режиме DMA требуется «зарядить» и запустить контроллер прямого управления, о чем и пойдет речь далее. Таблица 6.2. Регистры контроллера PCI IDE Имя Раз- ряд- ность R/W Режим совместимости Режим IDE Канал 1 Канал 2 Канал 1 Канал 2 Блок командных регистров DR 16 RW 1FOh 170h BARO+O BAR2+0 ER 8 R 1 F1h 171h BARO+1 BAR2+1 FR 8 W 1 F1h 171h BARO+1 BAR2+1 SC 8 RW 1F2h 172h BARO+2 BAR2+2 SN (LBA_Low) 8 RW 1F3h 173h BARO+3 BAR2+3 CL (LBA.Mid) 8 RW 1F4h 174h BARO+4 BAR2+4 CH (LBA.Hi) 8 RW 1F5h 175h BARO+5 BAR2+5 DH (Device) 8 RW 1F6h 176h BARO+6 BAR2+6 SR 8 R 1F7h 177h BARO+7 BAR2+7 CR 8 W 1F7h 177h BARO+7 BAR2+7 Блок управляющих регистров AS 8 R 3F6h 376h BAR1+2 BAR3+2 DC 8 W 3F6h 376h BAR1+2 BAR3+2 Блок регистров контроллера DMA BMICx 8 RW BAR4+0 BAR4+8 BAR4+0 BAR4+8 BMlSx 8 RWC BAR4+2 BAR4+Ah BAR4+2 BAR4+Ah BMIDPTx 32 RW BAR4+4 BAR4+Ch BAR4+4 BAR4+Ch Двухканальный контроллер DMA имеет 16-байтный блок регистров, расположен- ный в пространстве портов ввода-вывода. Базовый адрес блока хранится в кон- фигурационном пространстве устройства по смещению 20h (берутся младшие 16 бит двойного слова). Имена регистров имеют префикс BMI (Bus Master IDE) и окончание Р (Primary) для первого канала, S (Secondary) — для второго; в опи- сании будем использовать окончание х (любой канал). Регистр команд BMICx, доступный по чтению и записи, используется для запуска контроллера и задания направления передачи. Запуск осуществляется при пере- ходе бита 0 из нуля в единицу, останов для текущего сеанса необратим (продол- жение сеанса будет невозможным). Останов контроллера (сброс бита) обычно выполняют по окончании выполнения команды ATA/ATAPI (по прерыванию).
92 Глава 6. Адаптеры и контроллеры АТА Преждевременный останов ведет к ошибке выполнения команды с соответст- вующим сообщением. Направление должно быть задано до запуска контроллера, изменять его «на ходу» нельзя. В регистре используются только 2 бита (осталь- ные — резерв): ♦ бит 0 — управление (1 — запуск, 0 — останов); ♦ бит 3 — направление (0 — чтение памяти, 1 — запись в память). В регистре состояния BMISx биты 1 и 2 устанавливаются аппаратно, а сбрасыва- ются при записи байта с единичным значением в соответствующем бите. После сброса бита запроса прерывания он снова установится только по следующему фронту сигнала прерывания от устройства. Биты 5 и 6 устанавливаются про- граммно, обычно когда в ходе теста POST определяются возможности подклю- ченных устройств и программируются режимы контроллера. Регистр состояния должен быть прочитан после завершения выполнения команды для определения успешности операций на шине PCI. В регистре состояния используются следую- щие биты (остальные — резерв): ♦ бит О (R/O) — активность канала; ♦ бит 1 (RWC) — ошибка обмена по PCI; ♦ бит 2 (RWC) — запрос прерывания от устройства; ♦ бит 5 (RW) — устройство 0 поддерживает DMA; ♦ бит 6 (RW) — устройство 1 поддерживает DMA; ♦ бит 7 (R/O) — признак симплексного режима (1, если каналы не могут рабо- тать одновременно). В регистр таблицы дескрипторов BMIDPTx заносят адрес таблицы дескрипторов физической области памяти (PRD), с которыми производится обмен данными. Контроллер способен при чтении памяти собрать поток данных из произвольно- го числа физических областей (gathered read), а при записи «разбросать» поток по этим областям (scatter write). Такая возможность встречалась еще в системах EISA, она позволяет преодолевать барьеры на границах страниц, свойственные стандартным контроллерам DMA и страничной переадресации памяти. Дескрип- торы в таблице PRD располагаются друг за другом, каждый дескриптор занима- ет 8 байт: ♦ байты 0-3 (двойное слово) — физический адрес начала области (четный); ♦ байты 4-5 (слово) — счетчик байтов (четный, 0000 соответствует 65 536); ♦ байты 6-7 (слово) — признак конца таблицы (бит 15), биты 0-14 не исполь- зуются (0). Каждая область может быть расположена в произвольном месте памяти (кроме отображаемой на шину ISA) и иметь произвольный размер, но не должна пересе- кать границы страниц размером 64 Кбайт. Это неестественное (для 32-разряд- ных систем) ограничение обусловлено тем, что в PCI IDE счетчики адреса 16-раз- рядные и старшие 16 бит адреса получаются от статических регистров страниц (как в EISA DMA). Таблица дескрипторов должна быть выровнена по границе двойного слова и тоже не должна пересекать границы страниц, имеющих размер 64 Кбайт. Число дескрипторов в таблице произвольно, последний должен содер-
6.2. Контроллер SATA Intel 31244 93 жать признак конца таблицы. Обмен начинается с области, описанной первым дескриптором; за ней идет область следующего дескриптора и так далее до по- следнего. Контроллер остановится по исчерпании счетчика в последнем деск- рипторе или по инициативе устройства, если в обмене должно участвовать мень- шее число данных. Если устройству данных не хватит, оно укажет на ошибку при завершении команды. После запуска контроллера второй и нулевой биты регистра состояния отража- ют следующие ситуации: ♦ 0,1 — происходит обмен с памятью, прерывания по концу операции еще нет; ♦ 1,0 — обмен завершен, переданный объем соответствует объему описанных буферов (нормальное завершение); ♦ 1,1 — устройство завершило обмен, но по команде АТА передано меньше дан- ных, чем описано в таблицах (допустимое завершение); ♦ 0,0 — ошибка на шине (установлен и бит 1) или в таблицах описано меньше данных, чем в команде АТА. 6.2. Контроллер SATA Intel 31244 Микросхема Intel® 31244 — один из первых контроллеров Serial АТА для шины PCI-Х. Этот контроллер соответствует спецификации Serial АТА 1.0а. Контрол- лер может работать в одном из двух режимов: ♦ Native PCI IDE, он же M/S (Master/Slave) — режим совместимости со стан- дартным двухканальным контроллером PCI IDE (см. 6.1), к каждому из кана- лов которого подключены два порта SATA. В этом режиме по сравнению со стандартным контроллером PCI IDE появляется новый блок регистров SATA (см. 7.7). Все блоки регистров в режиме М/S отображены на пространство ввода-вывода. ♦ Direct Port Access, DPA — режим прямого доступа к устройству, естественный для SATA. Каждый порт SATA имеет свой контроллер DMA, что обеспечива- ет полную независимость устройств и возможность их одновременного ис- пользования. В этом режиме все регистры собраны в один блок и отобража- ются на пространство памяти; на начало блока указывает 64-битный регистр BARlOh. Переключение режима M/S-DPA сопровождается изменением содержимого ре- гистров BAR xx конфигурационного пространства, так что оно не может быть ди- намическим: после выбора режима необходима перезагрузка ОС для автокон- фигурирования на PCI. Ресурсы (занимаемые адреса) контроллера в обоих режимах приведены в табл. 6.3. В режиме М/S контроллер с программной точки зрения выглядит почти так же, как и традиционный двухканальный контроллер PCI IDE (см. 6.1), с теми же форматами регистров, дескрипторов (PRD) и ограничениями (невозможность пересечения границ 64-килобайтных страниц).
94 Глава 6. Адаптеры и контроллеры АТА Таблица 6.3. Ресурсы контроллера SATA i31244 BAR Native PCI IDE Direct Port Access BAR_10h Блок командных регистров канала 1 Базовый адрес блока регистров BAR_14h Блок управляющих регистров канала 1 Старшие байты адреса BAR_18h Блок командных регистров канала 2 BAR_1 Ch Блок управляющих регистров канала 2 BAR_20h Регистры каналов DMA BAR_24h Блок регистров SATA (SATA Superset Register) Различие заключается в регистрах команд BMICx (в i31244 они называются SUICDCR0 и SUICDCR1), в которых введены два новых бита: ♦ бит 9 — направление текущей операции FPDMA (0 — от устройства к хосту); ♦ бит 8 — активность FPDMA (0 — неактивен). Эти биты допускают только чтение, по ним программа может определить состоя- ние передачи для команд, выполняемых в режиме FPDMA. Стандартные регистры SATA (SCR0-SCR3), в документации на контроллер назы- ваемые SATA Superset Registers, в режиме M/S располагаются в пространстве вво- да-вывода. Базовый адрес для регистров порта 0 находится в регистре BAR_24h, регистры остальных портов располагаются вслед за регистрами порта 0. В режиме DPA контроллер приобретает новый облик: каждый порт получает собственный набор регистров, включая регистры персонального контроллера DMA; все регистры располагаются в пространстве памяти и имеют разрядность 32 бит. Состав регистров, доступных хосту, иллюстрирует табл. 6.4. Таблица 6.4. Регистры контроллера SATA в режиме DPA Название Адрес Назначение Общие регистры контроллера SUPDIPR OOOh Interrupt Pending Register — регистр запросов прерываний SUPDIMR 004h Interrupt Mask Register — регистр масок прерываний 200- 3FFh Регистры порта 0 Стандартные регистры АТА SUPDDR 200h Data Port Register — регистр данных (DR) SUPDER 204h Error Register — регистр ошибок (ER) SUPDFR 206h Features Register — регистр свойств (FR) SUPDSCR 208h Sector Count Register — регистр счетчика секторов (SC) SUPDSNR 20Ch Sector Number Register — регистр номера сектора (SN)
6.2. Контроллер SATA Intel 31244 95 Название Адрес Назначение SUPDCLR 21 Oh Cylinder Low Register — регистр младшего байта номера цилин- дра (CL) SUPDCHR 214h Cylinder High Register — регистр старшего байта номера цилин- дра (СН) SUPDDHR 218h Device/Head Register — регистр номера головки (D/H) SUPDSR 21 Ch Status Register — регистр состояния (SR) SUPDCR 21 Dh Command Register — регистр команд (CR) SUPDASR 228h Alternate Status Register — альтернативный регистр состояния (AS) SUPDDCTLR 229h Device Control Register — регистр управления (DC) Регистры расширения адреса SUPDUDDTPR 264h Upper DMA Descriptor Table Pointer Register — старшие биты ад- реса таблицы PRD SUPDUDDPR 26Ch Upper DMA Data Buffer Pointer Register — старшие биты адреса для указателей буферов DMA Стандартные регистры PCI IDE SUPDDCMDR 270h DMA Command Register — регистр команд контроллера DMA (BMICx) и состояния FPDMA SUPDDSR 272h DMA Status Register — регистр состояния контроллера DMA (BMISx) SUPDDDTPR 274h DMA Descriptor Table Pointer Register — адрес таблицы PRD (BMIDPTx) Стандартные регистры SATA SUPDSSSR 300h SATA SStatus Register — регистр текущего состояния интерфей- са (SCRO) SUPDSSER 304h SATA SError Register — регистр ошибок интерфейса (SCR1) SUPDSSCR 308h SATA SControl Register — регистр управления интерфейсом (SCR2) SUPDSDBR 30Ch Set Device Bits Register — регистр активности запросов к уст- ройству (SCR3, SActive) для NCQ Специальные регистры интерфейса порта SUPDPFR 340h PHY Feature Register — регистр управления специальными свой- ствами интерфейса (уровень сигнала, управление диагностиче- скими функциями и т. п.) SUPDBFCSR 344h BIST FIS Control and Status Register — регистр состояния и управления встроенным тестированием интерфейса подключен- ного устройства SUPDBER 348h BIST Errors Register — регистр счетчика ошибок тестирования Продолжение &
96 . Глава 6. Адаптеры и контроллеры АТА Таблица 6.4 (продолжение) Название Адрес Назначение SUPDBFR 34Ch BIST Frames Register — регистр счетчика кадров BIST (кадр BIST — 65 536 двойных слов) SUPDHBDLR 350h Host BIST Data Low Register — младшие 32 бита параметров FIS от хоста к устройству, активирующего BIST SUPDHBDHR 354h Host BIST Data High Register — старшие 32 бита параметров FIS от хоста к устройству, активирующего BIST SUPDDBDLR 358h Device BIST Data Low Register — младшие 32 бита параметров FIS от устройства к хосту, активирующего BIST SUPDDBDHR 35Ch Device BIST Data High Register — старшие 32 бита параметров FIS от устройства к хосту, активирующего BIST Регистры канала DMA SUPDQTBARL/ SUPDQTBARH 360h/ 364h Queuing Table Base Address Register Low/High — младшие/стар- шие биты базового адреса таблицы PRD, суммируется с иденти- фикатором буфера DMA для получения адреса таблицы PRD SUPDDSFCSR 368h DMA Setup FIS Control and Status Register — регистр управления посылкой DMA Setup FIS и состояния доставки SUPDHDBILR/ SUPDHDBIHR 36Ch/ 370h Host DMA Buffer Identifier Low/High Register — младшие/старшие биты идентификатора буфера DMA, посылаемого хостом в DMA Setup FIS SUPDHRDR 0 374h Host Reserved DWORD Register 0 — резервное поле (третье двойное слово) DMA Setup FIS, посылаемого хостом в DMA Setup FIS SUPDHDBOR 378h Host DMA Buffer Offset Register — смещение в буфере DMA, по- сылаемое хостом в DMA Setup FIS SUPDHDTCR 37Ch Host DMA Transfer Count Register — счетчик байтов передачи, посылаемый хостом в DMA Setup FIS SUPDHRDR1 380h Host Reserved DWORD Register 1 — резервное поле (шестое двой- ное слово) DMA Setup FIS, посылаемого хостом в DMA Setup HS SUPDDDBILR/ SUPDDDBIHR 384h/ 388h Device DMA Buffer Identifier Low/High Register — младшие/стар- шие биты идентификатора буфера DMA, посылаемого устройст- вом в FPDMA Setup FIS SUPDDRDRO 38Ch Device Reserved DWORD Register 0 — резервное поле (третье двойное слово) DMA Setup FIS, посылаемого устройством SUPDDDBOR 390h Device DMA Buffer Offset Register — смещение в буфере DMA, посылаемое хостом в DMA Setup FIS SUPDDTCR 394h Device DMA Transfer Count Register — счетчик байтов передачи, посылаемый устройством в DMA Setup FIS SUPDDRDRO 398h Device Reserved DWORD Register 1 — резервное поле (шестое двойное слово) DMA Setup FIS, посылаемого устройством 3CCh Test Register 0 — тестовый регистр
6.2. Контроллер SATA Intel 31244 97 Название Адрес Назначение 3D0h Test Register 1 — тестовый регистр 400- 5FFh Регистры порта 1. Аналогично регистрам порта 0, но к адресу добавляется смещение 200h 600- 7FFh Регистры порта 2. Аналогично регистрам порта 0, но к адресу добавляется смещение 400h 800- 9FFh Регистры порта 3. Аналогично регистрам порта 0, но к адресу добавляется смещение 600h Общие регистры контроллера включают регистры запросов и масок прерываний SUPDIPR и SUPDIMR. В этих регистрах каждому порту отводится свой байт (порт 0 — биты [7:0], порт 3 — биты [31:24]), в котором каждый бит отвечает за свое событие. Единичное значение маски разрешает прерывание по данному событию, единич- ное значение запроса — обнаружение события. Специфические (SATA) запросы прерываний сбрасываются записью единицы в определенный бит регистра SError соответствующего порта. Назначение битов для каждого порта следующее: ♦ бит 7 — прерывание от устройства IDE (согласно командному протоколу АТА); ♦ бит 6 — ошибка CRC (бит С поля DIAG регистра SError), сбрасывается через бит SErr.21; ♦ бит 5 — прерывание по обнаружению нарушения целостности данных, пере- даваемых по интерфейсу (бит Т поля ERR регистра SError), сбрасывается через бит SErr.8; ♦ бит 4 — прием нераспознанного типа FIS (бит Р поля ERR регистра SError), сбрасывается через бит SErr.10; ♦ бит 3 — прием примитива R_ERR (бит Н поля DIAG регистра SError), сбрасыва- ется через бит SErr.22; ♦ бит 2 — ошибка FIFO порта (бит Е поля ERR регистра SError), сбрасывается че- рез бит SErr.ll; ♦ бит 1 — готовность PHY (бит М поля ERR регистра SError), сбрасывается через бит SErr.l; ♦ бит 0 — смена состояния готовности (бит N поля DIAG регистра SError), сбра- сывается через бит SErr.16. Стандартные регистры АТА дополнительных комментариев не требуют. Стан- дартные регистры PCI IDE используются так же, как и в режиме М/S; для под- держки 64-битной адресации памяти они дополнены регистрами расширения адреса. Стандартные регистры SATA по назначению соответствуют регистрам SCR0-SCR3 спецификации SATA II (см. 7.7), правда, регистр SCR1 ближе к Serial АТА 1.0а: в поле DIAG реализованы только биты F, Н, С, D, W, N; в поле ERR — Е, Р, С, Т, М. Специальные регистры интерфейса порта управляют физическим интерфей- сом (например, расширением диапазона сигналов) и тестированием интерфейса. В исполнении команд обмена с устройствами они роли не играют. Особого внимания заслуживают регистры, используемые для реализации FPDMA. Поскольку контроллер соответствует SATA 1.0а, полноценной поддержки NCQ
98 Глава 6. Адаптеры и контроллеры АТА (введенной в SATA II) он, к сожалению, не имеет. Для организации FPDMA кон- троллер предоставляет набор регистров, которые позволяют сформировать инфор- мационную структуру DMA Setup, посылаемую устройству. Эти регистры опреде- ляют 64-битный идентификатор буфера DMA (SUPDHDBILR/SUPDHDBIHR) — число, которое суммируется с базовым адресом (SUPDQTBARL/SUPDQTBARH) для получения адреса таблицы PRD, используемой для данного обмена. В NCQ из этого идентификатора требуется лишь 5-битный тег, расположенный в самых младших битах. Даже если NCQ-устройство в ответной информационной структуре будет посылать тег, ко- манды с разными значениями тега не смогут ссылаться на разные таблицы PRD, следовательно, для запуска DMA потребуется программное вмешательство драйве- ра. Регистры позволяют задавать начальное смещение в буфере (SUPDHDBOR) и счет- чик байтов (SUPDHDTCR). Регистры обеспечивают возможность задания значений двух резервных полей FIS (слова 3 и 6), однако использование этих резервных полей в SATA II не определяется. Было бы интереснее иметь доступ к резервному байту слова 0, в котором передается идентификатор порта при применении мультиплек- сора портов (см. 5.4), но этой возможности нет. Для информационных структур DMA Setup, приходящих от устройства, контроллер предоставляет возможность чтения элементов этих структур через соответствующие регистры. Доставкой информационных структур DMA Setup к устройству позволяет управ- лять регистр SUPDDSFCSR, в нем определены следующие биты: ♦ бит 31 (RW) — направление (соответствует биту D в посылаемой структуре DMA Setup); ♦ бит 30 (RO) — прерывание (соответствует биту I в принятой структуре DMA Setup); ♦ бит 28 (RW) — посылка структуры DMA Setup; ♦ бит 27 (RW) — разрешение автоматического выполнения операции FPDMA для команд с очередями; ♦ бит 24 (RW) — сброс автоматов состояния транспортного и канального уров- ней; ♦ бит 23 (RO) — получение примитива RNAK в ответ на последнюю посланйую информационную структуру. 6.3. Контроллер SATA с интерфейсом AHCI Спецификация Serial АТА AHCI 1.0 Specification описывает интерфейс усовер- шенствованного хост-контроллера (Advanced Host Controller Interface, AHCI). Спецификация доступна на сайте фирмы Intel (http://developer.intel.com). Спецификация AHCI описывает устройство PCI, являющееся интерфейсом между системной памятью и устройствами SATA. Это устройство, в спецификации на- зываемое адаптером* хост-шины (Host Bus Adapter, НВА), может поддерживать 1 По сложности это все же контроллер.
6.3. Контроллер SATA с интерфейсом AHCI 99 от 1 до 32 портов SATA. К портам могут подключаться устройства с наборами команд АТА или ATAPI, с которыми поддержшзаются режимы обмена РЮ и DMA. ** Контроллер работает со структурами данных, расположенных в системной па- мяти; для памяти возможна 64-битная адресация. Структуры данных в памяти содержат общие поля для управления и сообщения состояния, а также списки команд и таблицы дескрипторов буферов данных для каждой команды. Эти структуры достаточны для того, чтобы по ним контроллер мог полностью управ- лять подключенными к нему устройствами SATA при исполнении команд. Под- держка списков команд (до 32 элементов на каждый порт) и NCQ через прото- кол FPDMA с очередями не является обязательной. Минимальная длина списка (по 1 элементу на порт) позволяет работать только с одиночными командами (без очередей). Длинный список дает возможность существенно снизить нагруз- ку на центральный процессор при исполнении даже обычных команд (без очере- дей и даже с обменом в режиме РЮ). Контроллер AHCI является функцией PCI, при этом он может интегрироваться в чипсет ядра системной платы, а может подключаться к любой PCI-подобной шине (PCI, PCI-X, PCI Express, Hyper Transport...).*Контроллер является масте- ром шины с мощным интеллектуальным механи^^ DMA. Основное взаимо- действие программ с устройствами в AHCI происЖшт через системную память, передача параметров команды однобайтными обращениями к регистрам устрой- ства исключена. Контроллер AHCI имеет следующие программно-доступные регистры (табл. 6.5): ♦ Набор регистров в конфигурационном пространстве PCI (PCI-X) со всеми стандартными атрибутами. ♦ Набор регистров, отображенных на пространство памяти. В этот набор вхо- дят: • общие регистры управления контроллером (00-lFh); • специфические регистры (vendor specific, AO-FFh); • управляющие регистры портов (100-17Fh для порта 0, ...1080-10FFh для порта 31). Ниже перечислены структуры данных в системной памяти, связанные с каж- дым портом. ♦ Список команд (command list) состоит из 1-32 слотов. Каждый слот (16-байт- ная структура) ссылается на командную таблицу (command table). За посто- янной частью командной таблицы (размером 256 байт) размещается таблица PRD (переменного размера), ссылающаяся на произвольное (до 65 535) чис- ло буферов данных любого размера (до 4 Мбайт). Буферы могут описывать передачу суммарной длиной 4 Гбайт. ♦ Буфер принимаемых информационных структур (FIS) размером 256 байт.
100 Глава 6. Адаптеры и контроллеры АТА Таблица 6.5. Регистры контроллера AHCI Назва- ние Адрес Назначение Общие регистры контроллера САР 00 Host Capabilities — возможности контроллера: бит 31: S64A — поддержка 64-битной адресации; бит 30: SNCQ — поддержка NCQ (автоактивации FPDMA); бит 28: SIS — поддержка замка блокировки смены устройства (Interlocked switch для «горячего» подключения); бит 27: SSS — поддержка поочередного запуска устройств (Staggered Spin-Up); бит 26: SALP — поддержка «агрессивного» управления энергорежи- мом интерфейса; бит 25: SAL — поддержка общего светодиодного индикатора актив- ности любого устройства; бит 24: SCLO — поддержка принудительного запуска команд (для сброса при необнуленных битах BSY и DRQ); биты [23:20]: ISS — поддерживаемая скорость (0001 — 1,5 Гбит/с); бит 19: SNZO — поддержка ненулевого смещения в FPDMA FIS; бит 18: SAM — поддержка только режима AHCI (традиционный режим недоступен); бит 17: SPM — поддержка мультиплексора портов; бит 16: — резерв; бит 15: PMD — поддержка передачи нескольких блоков в режиме Pio в одной команде; бит 14: SSC — способность перехода в состояние Slumber; бит 13: SSP — способность перехода в состояние Partial; биты [12:8]: NCS — число командных слотов-1 (0—1 слот, 1F — 32 слота); биты [7:5]: — резерв; биты [4:0]: NP — число поддерживаемых портов -1 (0 — 1 порт, 1F — 32 порта), может быть больше, чем число доступных портов, отмеченных в PI GHC 04 Global Host Control — общее управление: бит 31: АЕ — разрешение работы AHCI; бит 1: IE — разрешение прерываний; бит 0: HR — сброс контроллера и интерфейсов IS 08 Interrupt Status — запросы прерывания от каждого из портов PI ОС Ports Implemented — доступные порты (каждый бит определяет нали- чие соответствующего порта) VS 10 Version — версия AHCI (в формате BCD) 100- 17F Регистры порта 0 POCLB/ POCLBU 100/ 104 Port 0 Command List Base Address — младшие/старшие 32 бита адре- са списка команд (выравнивание по однокилобайтным границам)
6.3. Контроллер SATA с интерфейсом AHCI 101 Назва- ние Адрес Назначение POFB/ 108/ Port 0 FIS Base Address — младшие/старшие 32 бита адреса буфера POFBU ЮС FIS (выравнивание по 256-байтным границам) POIS 110 Port 0 Interrupt Status — запросы прерывания для порта. Все биты этого регистра, кроме особо оговоренных случаев, сбрасываются за- писью «1». Назначение битов: бит 31: CDPS — Cold Port Detect Status, обнаружение подключения или отключения устройства; бит 30: TFES — Task File Error Status, установка бита ERR в регистре SR; бит 29: HBFS — Host Bus Fatal Error Status, фатальная ошибка на хост- и нтерфей се; бит 28: HBDS — Host Bus Data Error Status, неисправимая ошибка данных при чтении/записи системной памяти; бит 27: IFS — Interface Fatal Error Status, фатальная ошибка интер- фейса SATA; бит 26: INFS — Interface Non-fatal Error Status, нефатальная ошибка интерфейса SATA (возможно продолжение работы); бит 25 — резерв; бит 24: OFS — Overflow Status, от устройства принято больше дан- ных, чем описано в таблице PRD; бит 23: IPMS — Incorrect Port Multiplier Status, получение от устройст- ва FIS с неожиданным полем РМ_Р; бит 22: PRCS — PhyRdy Change Status, смена состояния готовности интерфейса (соответствует биту N поля DIAG регистра SErr и сбра- сывается только сбросом этого бита); биты 21:8 — резерв; бит 7: DIS — Device Interlock Status, смена состояния замка блоки- ровки смены устройства; бит 6: PCS — Port Connect Change Status, смена состояния подклю- чения (соответствует биту X поля DIAG регистра SErr и сбрасывается только сбросом этого бита); бит 5: DPS — Descriptor Processed, переданы все данные для PRD с установленным битом I; бит 4: UFS — Unknown FIS, принята (и сохранена в памяти) неизвест- ная структура FIS. Сбрасывается только сбросом бита F поля DIAG регистра SErr; бит 3: SDBS — Set Device Bits, принята (и сохранена в памяти) одно- именная структура FIS; бит 2: DSS — DMA Setup FIS, принята (и сохранена в памяти) одно- именная структура FIS; бит 1: PSS — PIO Setup FIS, принята (и сохранена в памяти) одно- именная структура FIS; бит 0: DHRS — Device to Host Register FIS, принята (и сохранена в па- мяти) одноименная структура FIS POIE 114 Port 0 Interrupt Enable — разрешение условий прерывания, назначе- ние битов аналогично предыдущему Продолжение &
102 Глава 6. Адаптеры и контроллеры АТА Таблица 6.5 (продолжение) Назва- ние Адрес Назначение P0CMD 118 Port 0 Command — управление портом: биты [31:28]: ICC — Interface Communication Control, управление ин- терфейсом: 6h — команда перевода в режим Slumber, 2h — команда перевода в режим Partial, 1h — команда перевода в режим Active, 0 — No-Op/ldle, готовность к получению команд управления интерфейсом; бит 27: ASP — Aggressive Slumber/Partial, включение агрессивного перевода интерфейса в состояние Slumber; бит 26: ALPE — Aggressive Link Power Management Enable, разрешение агрессивного перевода интерфейса в состояние Slumber битом ASP; бит 25: DLAE — Drive LED on ATAPI Enable, разрешение управления светодиодным индикатором активности независимо от признака уст- ройства ATAPI; бит 24: ATAPI — признак устройства ATAPI (отключает управление светодиодным индикатором активности); биты [23:21] — резерв; бит 20: CPD — Cold Presence Detection, наличие детектора присутст- вия устройства для данного порта; бит 19: ISP — Interlock Switch Attached to Port, для данного порта имеется замок блокировки смены устройства; бит 18: НРСР — Hot Plug Capable Port, порт пригоден для горячего подключения; бит 17: РМА — Port Multiplier Attached, к порту подключен мульти- плексор (устанавливается программно); бит 16 (RO): CPS — Cold Presence State, признак подключенного уст- ройства; бит 15 (RO): CR — Command List Running, список команд обрабаты- вается контроллером DMA; бит 14 (RO): FR — FIS Receive Running, DMA приема FIS работает; бит 13 (RO): ISS — Interlock Switch State, состояние замка блокиров- ки (1 — замок открыт); биты [12:8] (RO) CCS — Current Command Slot, номер обслуживаемо- го командного слота; биты [7:5] — резерв; бит 4: FRE — FIS Receive Enable, разрешение приема FIS (и помеще- ния их в память). При FRE=O контроллер принимает от устройства только структуры FIS регистров, поступающие после инициализации (с сигнатурой устройства); бит 3: CLO — Command List Override, принудительное обнуление би- тов BSY и DRQ для посылки команды сброса независимо от состоя- ния устройства. Установка бита вызывает этот эффект, если она дается перед началом обработки (переводом бита ST из 0 в 1); бит 2: POD — Power On Device, подача питания на порт для возмож- ности определения подключения устройства; бит 1: SUD — Spin-Up Device, запуск устройства. В момент установки бита контроллер, поддерживающий разнесенный запуск, начинает последовательность команд инициализации; бит 0: ST — Start, начало обслуживания таблицы команд (с нулевого слота)
6.3. Контроллер SATA с интерфейсом AHCI 103 Назва- ние Адрес Назначение 11С Резерв POTFD 120 Port 0 Task File Data — последние копии регистров подключенного устройства: биты [15:8] — ER; биты [15:8] — SR (только биты BSY, DRQ и ERR) POSIG 124 Port 0 Signature — сигнатура устройства, подключенного к порту: биты [31:24] — СН; биты [23:16] — CL; биты [15:8] — SN; биты [7:0] - SC POSSTS 128 Port 0 Serial АТА Status (SCRO: SStatus) POSCTL 12С Port 0 Serial ATA Control (SCR2: SControl) POSERR 130 Port 0 Serial ATA Error (SCR1: SError) POSACT 134 Port 0 Serial ATA Active (SCR3: SActive) POCI 138 Port 0 Command Issue — битовая карта активных слотов. Программа устанавливает бит, соответствующий активируемому слоту; контрол- лер сбрасывает бит, получив FIS с обнуленными битами BSY, DRQ и ERR 13С Резерв POVS 170-17 F Port 0 Vendor Specific — специфические регистры 180-1F F Регистры порта 1 1080- 10FF Регистры порта 31 Основой взаимодействия программы и устройства, подключенного к порту, яв- ляется список команд — структура данных в памяти, определенная для каждого порта контроллера. Список состоит из последовательности командных слотов (command slot), в каждом из которых может размещаться любая команда АТА/ ATAPI. С каждым слотом связана своя командная таблица (рис. 6.1, а), содержа- щая FIS для подачи команды (поле CFIS) и таблицу дескрипторов буферов дан- ных (поле PRDT). Для команды PACKET в таблице присутствует и командный блок ATAPI (поле ACMD), передаваемый устройству. В командном слоте указываются адрес командной таблицы, длина передаваемой информационной структуры, длина таблицы PRD, направление передачи, а также дополнительная управляю- щая информация. В слоте имеется поле для указания номера порта мультиплек- сора, которому адресуется данная команда. Во время исполнения контроллер сообщает число успешно переданных данных, модифицирует поле PRDBC слота (изначально программа это поле обнуляет). Каждый дескриптор физической об- ласти памяти (рис. 6.1, б) задает базовый адрес (поля DBA и DBA U) и длину буфера (DBC), а также имеет бит I, позволяющий вызывать прерывания для отработки данного дескриптора.
104 Глава 6. Адаптеры и контроллеры АТА 00h 40h 60h eoh CFIS Элемент 0 Элемент 1 ACMD 24 | 23 DBA I OBC|2l'oi Л DBA P# I DBC[21:0] 31 DWO DW1 DW2 DW3 PRDT Элемент n ________________DBA_______________И> ПЖЖЖЕЗЗЗовсет о Рис. 6.1. Структуры управляющих данных AHCI: а — командная таблица, б — элемент таблицы PRD Формат командного слота приведен на рис. 6.2, назначение полей и битов: ♦ СТВА, CTBA U — указатель на командную таблицу (младшие и старшие 32 бита для 64-битной адресации); ♦ CFL — длина используемого поля CFIS; ( ♦ А — пакетная команда ATAPI; ♦ W — направление передачи данных (1 — из памяти в устройство); ♦ Р — разрешение предвыборки; ♦ R — признак команды сброса; '1 ♦ В — признак посылки информационной структуры BIST для начала самотес- тирования; ♦ С — снятие бита BSY по получении подтверждения успешной передачи CFIS; ♦ РМР — номер порта мультиплексора, к которому подключено устройство; ♦ PRDTL — длина (число элементов) таблицы PRD; ♦ PRDBC — счетчик переданных байтов (обнуляется программой при заполнении, модифицируется контроллером). * ? С каждым портом контроллера связан свой буфер принимаемых структур FIS (рис. 6.3), в котором определены поля DFIS (для структур DMA Setup), PFIS (для структур РЮ Setup), RFIS (для структур регистров) и SDBFIS (для структур Set Device Bits), а также UFIS для неизвестных типов FIS. В этих полях контроллер помещает копии всех приходящих структур FIS; по ним программа может сле- дить за состоянием устройств.
6.3. Контроллер SATA с интерфейсом AHCI 105 31 16 15 8 7 0 PRDTL РМР VA СI ВI R P|W|A| CFL DW0 PRDBC (PRD Byte Count) DW1 СТВА У///////////. DW2 CTBA_U DW3 Рис. 6.2. Командный слот 00h 1Ch 20h 34h 40h 54h 58h 60h AOh FFh Рис. 6.3. Структура буфера принимаемых информационных структур Программа заполняет свободный слот списка команд для данного порта и ин- формирует об этом контроллер установкой соответствующего бита в его регистре PxCI. Получив это уведомление, контроллер включает данный слот в свой план работы и, когда до него доходит очередь, считывает команду из памяти и переда- ет ее устройству. Контроллер переходит к обслуживанию следующего заполнен- ного слота только при условии, что биты состояния устройства BSY=DRQ=ERR=O. Это позволяет использовать список команд для любых команд: с очередями и без, с обменом FPDMA, DMA и РЮ. Слот освобождается, когда для него кон- троллер получает информационную структуру, указывающую на обнуление би- тов BSY, DRQ и ERR, а для команд с очередями (NCQ) — на обнуление в регистре SAct бита, соответствующего данному слоту. Освобождение слота контроллер от- мечает обнулением соответствующего бита в регистре PxCI. Для программы это означает доступность информации о состоянии и данных, полученных при чте- нии. Контроллер обходит слоты по кругу, при запуске (установке бита ST в регистре управления портом) начинает со слота 0. Текущий номер обслуживаемого слота виден в поле CCS того же регистра; по этому полю можно определить наиболее приоритетный слот (это будет CSS+1) для введения следующей команды. Команда без очередей не позволяет контроллеру перейти к следующему слоту до ее завершения (бит BSY=1). Когда после получения команды устройству по- требуется передача данных, оно посылает контроллеру структуру DMA Setup или РЮ Setup, которая относится к командной таблице текущего слота. Место-
106 Глава 6. Адаптеры и контроллеры АТА положение буферов данных в ОЗУ определяется таблицей PRD данной команд- ной таблицы. Команды с очередями (NCQ) сразу сбрасывают бит BSY, и контроллер переходит к следующему слоту. Когда для принятой команды устройству требуется переда- ча данных, оно посылает структуру DMA Setup с идентификатором буфера, со- держащим тег команды. Тег должен совпадать с номером слота, из которого команда была запущена, — по нему контроллер считывает требуемую таблицу PRD. Старые команды АТА с очередями, использующие биты REL, SERV и DRQ, контроллером AHCI не поддерживаются. Контроллер может выполнять пре^выборку (упреждающее чтение) PRD из па- мяти, а для команд, передающих данные из памяти в устройство, — и самих дан- ных до их запроса устройством. Предвыборка разрешается установкой бита Р в командном слоте. Предвщ^рка не применяется для команд, исполняемых с очередями, а также при фортгировании команд для нескольких устройств, под- ключенных через мультиплексор при разрешенной коммутации на основе FIS1. Команда сброса может посылаться в устройство при любом его состоянии, для этого в командном слоте имеется бит R. При R=1 контроллер до подачи команды посылает (при необходимости) последовательность примитивов SYNC для при- ведения устройства в состояние покоя. Команды с обменом РЮ контроллер исполняет с помощью своего контроллера DMA. Поддержка режима РЮ может быть ограничена: контроллер может не поддерживать передач, в которых DRQ устанавливается несколько раз (передача идет несколькими блоками). Ограничение на РЮ отражается в регистре САР (бит PMD=O). Поддержка РЮ с передачей одного блока обязательна — с ее помощью, например, передается блок параметров идентификации устройства. Контроллер имеет специальную поддержку устройств AT API. Для команды PACKET в командной таблице имеется специальное поле командного пакета и при- знак команды ATAPI (бит А). Получив команду, устройство посылает структуру РЮ Setup, по которой контроллер передает устройству поле командного пакета (длину заказывает устройство). Кроме того, в регистре управления порта имеет- ся бит ATAPI, отключающий управление общим индикатором активности уст- ройств, подключенных к контроллеру (индикация ATAPI отличается от индика- ции АТА). Для поддержки «горячего» подключения (необязательной) контроллер имеет сред- ства обнаружения подключения устройства (cold presence detect) и сигнализа- ции состояния замка блокировки съема устройства (interlock switch). Эти сред- ства могут присутствовать не на всех портах, к ним относятся биты CDPS и DIS ре- гистров прерываний и НРСР, CPD, CPS, POD, ISP и ISS регистра управления портом. Поддержка разнесенного запуска (staggered spin-up) устройств (необязательная) позволяет инициализировать интерфейсы портов не одновременно (по сбросу контроллера), а по установке бита SUD регистра управления портом. Инициализа- ция интерфейса порта вызывает запуск двигателя подключенного устройства; 1 Пока что AHCI эту коммутацию не поддерживает.
6.3. Контроллер SATA с интерфейсом AHCI 107 программное управление инициализацией позволяет уменьшить броски тока по- требления при включении большого числа устройств. Для экономии энергопотребления контроллер может иметь средства агрессивно- го управления энергорежимом (aggressive link power management) интерфейса. Если агрессивный режим включен, то, когда кончается обработка всех запросов устройством и неактивны все слоты (обнуляются регистры PxSACT и PxCI), интер- фейс порта переводится в режим Slumber. Эти средства управляются битами ALPE и ASP регистра управления портом. Поддержка мультиплексоров портов (необязательная) в AHCI весьма ограниче- на, поскольку для каждого порта контроллера имеется только один набор реги- стров, отражающих состояние устройства. Это не позволяет использовать очере- ди команд одновременно для нескольких устройств, подключенных к порту через мультиплексор. Контроллер AHCI способе^коммутировать информаци- онные потоки только по командам (command bas&d switching): командный слот адресует порт мультиплексора, к которому подключено целевое устройство. Ко- манда должна выполняться целиком — устройство должно послать все связан- ные с ней информационные структуры до того, как будет проложен возможно иной маршрут следующей командой. Для команд, выполняемых без очередей, любой слот может использоваться для команды, направленной к любому порту мультиплексора. При заполнении слотов следует учитывать циклический поря- док обслуживания слотов, чтобы обеспечить равномерность (или желаемые дис- пропорции) обращений к разным устройствам. Очереди команд (NCQ) можно использовать только для одного устройства, и пока все поставленные в очередь команды не будут обслужены, к другим устройствам команды подавать нельзя. Чтобы снять это ограничение, контроллер должен поддерживать коммутацию на основе FIS (FIS based switching) с учетом принятого поля РМР. Однако в AHCI 1.0 эта возможность не предусматривается. Обнаружение мультиплексора выполняется чисто программно: порт должен послать команду сброса в каждый порт, адресуясь к управляющему порту мультиплексора (PMP=Fh). Если мульти- плексор имеется, он ответит соответствующей сигнатурой, и программа устано- вит бит РМА в регистре управления портом.
ГЛАВА 7 Программное взаимодействие с устройствами ATA/ATAPI/SATA Общей целью программы, управляющей устройством хранения (его драйвера), является подача команд устройству и передача блоков данных из устройства в системную память хоста (команда чтения) или из памяти в устройство (команда записи). В этом обмене всегда участвует центральный процессор хоста, посылаю- щий команды в устройство и считывающий его состояние. В самой передаче дан- ных, как правило, принимает участие контроллер DMA (хотя возможен и чис^го программный обмен РЮ). Контроллер PCI IDE Bus Master, используемый в со- временных параллельных интерфейсах АТА, имеет по одному контексту (см. 133) для каждого своего канала (шины АТА). Для эффективной многозадачной рабо- ты контроллер должен иметь множество контекстов, переключаемых аппаратйо. Такие возможности имеют контроллеры SATA, из которых наиболее развитые — контроллеры с интерфейсом AHCI. I 7.1. Традиционный механизм взаимодействия для АТА Изначально интерфейс АТА строился из расчета на однозадачные однопоточные системы с одним инициатором обмена — процессором единственного хосй на шине. При этом традиционный сценарий выполнения команды чтения или запи- си данных для устройства АТА выглядит следующим образом: 1. Драйвер определяет готовность устройства (при необходимости его дожида- ется). 2. Драйвер инициализирует средства доставки данных в память (из памяти) — формирует таблицу дескрипторов физических областей для текущей переда- чи и сообщает ее положение контроллеру. Этот шаг отсутствует, если достав- кой данных занимается сам процессор (в режиме РЮ).
7.2. Перекрытие команд и очереди в ATA/ATAPI 109 3. Драйвер посылает устройству командный блок (выполняет запись в регистры устройства), выбирающий устройство на шине АТА, задающий адрес данных в устройстве, объем передачи (число секторов) и собственно команду. 4. Драйвер, считывая состояние выбранного устройства, удостоверяется в том, что команда принята, и ожидает завершения ее выполнения. 5. Устройство выполняет внутренние действия, связанные с исполнением полу- ченной команды (позиционирование, считывание данных во внутренний бу- фер), и подготавливается к передаче блока данных по интерфейсу. 6. Заранее подготовленные средства доставки (канал DMA) или драйвер (если используется режим РЮ) выполняют пересылку данных между устройством и памятью. 7. Драйвер чтением регистров устройства и контроллера определяет результат выполнения команды — наличие ошибок, количество реально переданных данных. После этого можно выполнять следующую команду обращения к тому же уст- ройству или к другому устройству той же шины АТА. Время, в течение которого устройство выполняет команду, может быть значительным (от долей миллисе- кунды до долей секунды). В многозадачных (и многопоточных) системах за это время процессор может выполнить массу полезных действий, поэтому для сиг- нализации о начале завершающей фазы выполнения команды (приема данных при чтении или проверки успешности записи), как правило, используют аппа- ратные прерывания от устройства. Возможен, конечно, и полинг (polling) — про- граммный опрос (циклически или по прерываниям от таймера). Шина АТА во время внутренней фазы исполнения команды устройством, фак- тически, простаивает, но из-за принятой искусственной системы выбора устрой- ства она остается занятой до окончания последнего шага вышеприведенного сце- нария. Традиционное устройство IDE рассчитано на сугубо последовательное обслуживание запросов: следующий запрос подавать бессмысленно, пока не бу- дет обслужен предыдущий. Это ограничение распространяется и на два устрой- ства, находящихся на одной шине АТА: очередной запрос не может быть послан до тех пор, пока не завершится обслуживание предыдущего запроса к любому из устройств этой шины (этого канала IDE). 7.2. Перекрытие команд и очереди в ATA/ATAPI В ATA/ATAPI-4 введена возможность перекрытия команд (overlapped feature) — это означает, что устройство, занятое длительной внутренней операцией, способ- но освободить шину. Освобождение шины позволяет драйверу подать другой за- прос или выполнить передачу данных для другого запроса. Этот другой запрос (или передача) может относиться как к другому устройству той же шины, так и к тому же самому устройству. В последнем случае речь идет уже о создании оче- реди команд (queuing) внутри одного устройства. После того как будет послан новый запрос (или выполнена передача данных), драйвер должен вернуться
110 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA к отработке команды, при посылке которой шина была освобождена. Перекры- тие и постановку в очередь допускают только несколько специальных команд. В очереди одного устройства может одновременно находиться множество ко- манд, и устройству может бшъ дано право исполнять их в удобном ему порядке. Для того чтобы драйвер «пбйимал», какая именно команда из очереди исполни- лась, запросы помечаются 5-битным тегом задания. Драйвер задает тег при по- становке запроса в очередь и считывает тег из устройства, когда оно сигнализи- рует о начале завершающей фазы какого-то запроса. Устройство, получившее запрос, сообщает драйверу о намерении освободить шину сбросом битов занято- сти и готовности к передаче данных в своем регистре состояния. Если драйвер воспользуется этим освобождением шины, он должен «не забыть» позже вернуть- ся к обслуживанию данного устройства с целью определения факта завершения исполнения запроса. Чтобы использовать освобождение шины и вернуться к об- служиванию запроса, драйвер должен выполнить некоторые манипуляции с ре- гистрами устройств. Перекрытие и очереди команд ATA/ATAPI-4 теоретически позволяют эконо- мить время за счет совмещения внутренних фаз работы устройств с обменами по шине, относящимися к другим запросам. Однако поддержка этой параллельно- сти требует дополнительных действий драйвера для организации передачи дан- ных, что может свести на нет положительный эффект перекрытия команд и оче- редей. Это связано с организацией доступа к системной памяти стандартным контроллером PCI IDE в режиме DMA (режим РЮ для многозадачных систем крайне неэффективен, для этого режима перекрытие и очереди не предусмотре- ны). Каждый канал IDE обслуживает до двух устройств, находящихся на одной шине. При этом канал имеет всего один контекст DMA. В случае перекрытия ко- манд и обслуживания очередей драйвер должен программно переключать кон- текст (операциями обмена с регистрами контроллера) в соответствии с тем за- просом, к которому будет относиться текущая передача. Для этого драйвер специальной командой (Service), обращенной к устройству, считывает тег запро- са, для которого требуется передача данных, и восстанавливает соответствую- щий ему контекст записью в регистры контроллера IDE. Только после этого на- чинается передача данных для обслуживаемой команды. В случае перекрытия команд, относящихся к разным устройствам одного канала, контекст, естествен- но, тоже должен переключаться. Использование очередей в АТА приводит к генерации большого числа прерыва- ний от устройства — как минимум, по два на каждую команду, обрабатываемую с освобождением шины. Первый запрос прерывания возникает, когда устройство сообщает о готовности к передаче данных; по этому запросу драйвер переключает контекст DMA. Второй запрос вырабатывается по завершении команды, по нему драйвер забирает результаты. Непредсказуемая задержка обслуживания прерыва- ний в PC приводит к увеличению времени выполнения команд (от постановки в очередь до получения результатов), что сводит на нет преимущества очередей. Канал DMA PCI IDE не может быть приостановлен (с целью последующего продолжения обмена с точки приостановки), так что обмен должен выполняться для всего обслуживаемого запроса целиком. Это невыгодно, поскольку длинный запрос может требовать промежуточных сравнительно долгих внутренних one-
7.3. Поддержка многозадачности в Serial АТА 111 раций устройства хранения. Если длинную передачу разбить на короткие запро- сы, то их обслуживание будет требовать частого программного вмешательства драйвера (для переключения контекста DMA). При работе с традиционными устройствами IDE (без перекрытия и очередей) слабость контроллера PCI IDE не ощущается (переключение контекста не тре- буется). Одновременное обслуживание множества запросов, относящихся к уст- ройствам, находящимся на разных каналах IDE, выполняется достаточно эффек- тивно. Здесь конкуренция возникает только при доступе к памяти, но оба канала DMA могут работать одновременно. Контроллер PCI IDE инициирует транзак- ции на шине PCI, в которых чередуются передачи от обоих каналов. Из-за указанных недостатков поддержка очередей РАТА в стандартных конфи- гурациях PC отсутствует. Преимущества очередей РАТА могут быть реализованы только при использовании специальных контроллеров с аппаратным ускорением переключения контекста DMA. Ускорители применяются, например, в RAID- контроллерах АТА. 7.3. Поддержка многозадачности в Serial АТА Интерфейс Serial АТА разрабатывался не только для перехода на последователь- ный интерфейс ради улучшения кабельной части, но и с целью подтягивания возможностей АТА к современным многозадачным потребностям. В Serial АТА сами устройства хранения становятся более интеллектуальными, и на них пере- носится часть функций управления доступом к памяти, ранее выполняемых хост-адаптером и драйвером. В спецификации Serial АТА введены новый режим — FPDMA (First Party DMA) и связанные с ним команды. Суть новизны заключается в том, что устройство, готовое к обмену данными, указывает контроллеру DMA на местоположение бу- фера данных в оперативной памяти. Это полезно для перекрывающихся команд и очередей: устройство, сигнализирующее о выполнении какой-то команды из своей очереди, само подсказывает контроллеру положение буфера именно для этой команды. В Serial АТА 1.0 в сообщении от устройства к хосту, инициирую- щем обмен по DMA, были определены места для 64-битного указателя на буфер, а также 32-битного смещения в буфере и счетчика байтов для передачи. Однако содержимое указателя и правила его использования еще не определялись. В Serial АТА-П в этот вопрос была внесена ясность: 64-битный указатель несет только 5-битный тег команды, для которой требуется текущая передача данных. Тег со- общается устройству при помещении команды в очередь. Тег, передаваемый уст- ройством хост-контроллеру, используется как индекс (номер вектора), по кото- рому контроллер выбирает контекст для своего аппарата DMA (DMA Engine). От идеи хранения в устройстве физического адреса памяти хоста, по которому расположен буфер или его дескрипторы, все-таки отказались1. 1 Было бы слишком легкомысленно доверить устройству хранения (возможно, и отсоеди- няемому) право хранить физический адрес обращения к ОЗУ.
112 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA Использование поля смещения в буфере позволяет выполнять обмен для коман- ды по частям с возможностью чередования обменов для нескольких команд, на- ходящихся в очереди. Поле смещения (и счетчик) может использоваться в раз- ных объемах: ♦ допускается только нулевое смещение — для одной команды из очереди об- мен возможен только за один сеанс (целиком); ♦ допускается ненулевое смещение, но требуется строгая упорядоченность — обмен для команды может идти по частям, но адрес передаваемого блока для соседних фрагментов должен непрерывно нарастать; ♦ допускаются ненулевое смещение и неупорядоченность — обмен для коман- ды может идти по частям, причем фрагменты могут идти в произвольном по- рядке (удобном устройству хранения). Последние два варианта требуют некоторого усложнения контроллера DMA в хост-контроллере, однако они обеспечивают самое эффективное обслуживание множества запросов к множеству устройств. Какой из вариантов используется, определяется по возможностям хост-контроллера и самого устройства на этапе взаимного согласования свойств. В Serial АТА-П введена технология NCQ (Native Command Queuing — естествен- ная поддержка очередей). Она основана на использовании режима FPDMA и минимизирует объем работы драйвера при обслуживании множества запросов к устройству. Для работы с естественными очередями предназначены всего 3 ко- манды: чтение, запись блоков данных и чтение журнала ошибок. Постановка за- проса в очередь существенно упрощена. Очередную команду можно посылать устройству, если оно сигнализирует о своей готовности (битом в регистре со- стояния). Команда ставится в очередь устройства с указанием тега, перед пода- чей команды контроллеру FPDMA сообщается указатель на дескриптор переда- чи, соответствующий этому значению тега. Устройство обслуживает команды из очереди и совместно с контроллером FPDMA организует передачи данных. Успешное завершение каждой команды сообщается через регистр активности (SActive), представляющий битовую карту: каждый бит соответствует состоянию активности для каждого из возможных значений тега запроса. Драйвер «видит», какие запросы уже завершены, забирает их результаты и может использовать ос- вободившиеся теги для постановки в очередь новых запросов. Ошибка при по- становке или исполнении запроса сигнализируется снятием бита готовности устройства; характер ошибки уточняется драйвером путем обращения к регист- рам устройства. Механизм взаимодействия драйвера и устройства оптимизиро- ван в смысле минимизации программных действий при нормальной отработке команд. Если устройство и контроллер FPDMA допускают работу с ненулевым смещением в буфере и неупорядоченность запросов (см. ранее), то эффектив- ность обмена данными с устройством хранения оказывается весьма высокой. Технология NCQ позволяет значительно сократить число прерываний, что су- щественно для работы в архитектуре PC. Для каждого запроса, помещенного в очередь, прерывание вырабатывается лишь единожды — по завершении испол- нения. Кроме того, возможно агрегирование прерываний (interrupt aggregation): если устройство за короткий промежуток времени завершает обслуживание не-
7А. Новая модель взаимодействия — интерфейс AHCI 113 скольких запросов, то для них вырабатывается лишь одно прерывание. Считыва- нием регистра SActive драйвер определяет все завершенные запросы (в АТА за- вершение определяется сугубо последовательно). • В случае подключения множества устройств к одному порту хост-контроллера (через мультиплексор портов) для эффективной работы контроллер должен «уметь» аппаратно переключать контекст DMA не только по тегу, но и по номе- ру порта подключения устройства, полученному из информационной структуры DMA Setup (FIS-based context switching). Если такой возможностью контроллер не обладает, то с устройствами, подключенными к мультиплексору, он сможет работать только поочередно (не имея права подавать команду другому устройст- ву, пока не завершатся все команды для данного устройства). Из спецификаций SATA II не ясно, поддерживается ли технология NCQ для па- кетных устройств. В описании работы NCQ фигурируют команды Read/Write FPDMA Queued, для которых о применимости (как и о неприменимости) к пакетным устройствам ничего не говорится. Для пакетного устройства в параметрах, пере- даваемых этими командами, не хватает номера логического устройства (LUN). Можно предположить, что состав пакетных команд расширяется (вводятся ко- манды поддержки NCQ). Однако в блоке идентификации пакетного устройства SATA II отсутствует бит, индицирующий поддержку NCQ (то есть способ поста- новки команд в очередь, автоматический запуск DMA устройством и специфи- ческий способ обработки ошибок). Наверное, со временем этот вопрос разрешит- ся, поскольку пакетные устройства, как правило, имеют значительное время доступа, так что эффективная поддержка очередей для/них весьма актуальна. 7.4. Новая модель взаимодействия — интерфейс AHCI Принципиально новая (для устррйств ATA/ATAPI/SATA1) программная мо- дель взаимодействия введена в спецификации Serial АТА AHCI 1.0 (Advanced Host Controller Interface). Усовершенствованный хост-контроллер берет на себя всю работу по доставке команд устройству и передаче данных даже для команд, использующих обмен РЮ. Все взаимодействие с контроллером программа вы- полняет через системную память и регистры контроллера, отображенные на про- странство памяти. Интерфейс AHCI полностью отказывается от модели М/S (ведущее и ведомое устройства на одной шине), каждый порт контроллера SATA абсолютно незави- сим и управляется индивидуально. В случае непосредственного подключения устройств SATA это означает независимость взаимодействия с каждым устрой- ством. В случае подключения множества устройств к одному порту через муль- типлексор текущая версия AHCI 1.0 вводит ограничения, напоминающие огра- ничения при совместной работе двух устройств на одной шине (правда, теперь совместно использовать общий ресурс могут уже до 15 устройств). 1 Модель AHCI напоминает интерфейс OHCI для шины FireWire, появившийся на много лет раньше.
114 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA Подробно интерфейс контроллера AHCI рассмотрен в 6.3, здесь напомним лишь основную идею взаимодействия. Для каждого порта в памяти определяется спи- сок команд, в котором может быть до 32 командных слотов. С каждым слотом связаны структуры данных в памяти, в которых размещается информация для подачи команды (например, адрес и длина передаваемого блока), дескрипторы буферов данных (таблица PRD) и информация о текущем состоянии выпол- нения. Программа заполняет свободный слот и сообщает об этом контроллеру записью в один из регистров данного порта. Контроллер сам выполняет обслу- живание заполненных слотов: посылает устройству команду и выполняет запро- шенные передачи данных. В случае нормального завершения команды контрол- лер переходит к следующему слоту, отметив факт освобождения данного слота; в случае ошибки обход слотов приостанавливается, что обеспечивает возмож- ность программной обработки нештатных ситуаций. Об исполнении команд (и ошибках) контроллер сообщает с помощью прерываний. По прерыванию про- грамма определяет, для каких слотов закончилась обработка (это только что ос- вободившиеся слоты), получает результаты (если это было чтение) или обраба- тывает ошибки. В слоты можно помещать обычные команды ATA/ATAPI (без очередей), а также команды с очередями NCQ. Для команд с очередями NCQ пе- ред активацией слота программа должна еще установить бит в регистре SActive. 7.5. Адресация блоков данных В устройствах ATA/ATAPI минимальной адресуемой единицей данных являет- ся логический блок, как правило, размером 512 байт. Для традиционных диско- вых устройств АТА блок является сектором. Для дисковых устройств применимая два способа адресации данных: трехмерная адресация (CHS) и линейная адреса- ция (LBA). Для иных устройств хранения, использующих интерфейс ATAPI, применима только линейная адресация. Традиционная трехмерная адресация (Cylinder-Head-Sector, CHS) задает три координаты сектора устройства АТА: ♦ Cylinder — номер цилиндра задается регистрами СН и CL (старший и младший байты) и может принимать значение 0-65 535 (216-1). Устройство может иметь до 65 536 (216) цилиндров (Cyl). ♦ Head — номер головки задается битами 3:0 регистра D/Н и может принимать значение 0-15 (24-1). Устройство может иметь до 16 (24) головок в цилиндре (параметр НРС — Heads Per Cylinder). ♦ Sector — номер сектора задается регистром SN и может принимать значение 1-255 (28-1), нулевой номер сектора не используется. Устройство может иметь до 255 (28-1) секторов на каждом треке (параметр SPT — Sectors Per Track). Здесь в координатах подразумевается внешняя геометрия — адреса, которые за- носятся в командные регистры устройств. В системе CHS устройство АТА по- зволяет адресовать до 267 386 880 (65 536x16x255) секторов (блоков), что при размере сектора в 512 байт дает 136 902 082 560 байт (около 137 Гбайт). Линейная (логическая) адресация (LBA) гораздо проще — здесь адрес блока (сек- тора) определяется одним числом в диапазоне 0...N- 1, где N — емкость устрой-
7.5. Адресация блоков данных 115 ства хранения (в блоках). Предел адресуемого объема определяется разрядно- стью логического адреса и емкостью устройства: ♦ 28-битный адрес, изначально используемый для устройств АТА, позволяет адресовать до 228 - 1 = 268 435 455 секторов, что при размере сектора в 512 байт дает 137 438 952 960 байт (137,4 Гбайт, чуть больше, чем в CHS). Число секторов, доступных в режиме LBA, отражается в словах 61:60 блока идентификации устройства (см. 8.3). По соглашению об адресации и сам ли- нейный адрес LBА, и общее число адресуемых блоков N должны умещаться в 28 бит. Поскольку нумерация блоков начинается с нуля, номер блока OF FF FF FF не используется. ♦ 32-битный адрес, используемый устройствами ATAPI, позволяет адресовать до 232 - 1 = 4 294 967 295 секторов, что при размере сектора в 512 байт дает 2 199 023 255 040 байт (около 2,2 Тбайт). Доступная емкость устройства оп- ределяется посылкой пакета с SCSI-командой, соответствующей классу дан- ного устройства. ♦ 48-битный расширенный адрес устройств АТА, введенный в ATA/ATAPI-6 и Serial АТА, позволяет адресовать до 248- 1 = 281 474 976 710 655 секто- ров — 144 115 188 075 854 848 байт (около 144 Пбайт). Число секторов, дос- тупных в этом режиме (назовем его LBA-48), отражается в словах 103:100 блока идентификации устройства. Попытки обращения к сектору с номером LBA, превышающим максимально воз- можный, или же с координатами С, Н, S, не вписывающимися в текущую геомет- рию, приведут к генерации ошибки IDNF или ABRT (обмена данными, естественно, це будет). С устройствами ATAPI работа возможна только по линейному адресу. Исполь- зование 32-битного адреса оказалось временным решением проблемы предела адресации для жестких дисков — существуют модели винчестеров, идентифици- рующие себя как устройства ATAPI. Дескрипторы команд SCSI, используемые в ATAPI, поддерживают и 64-битную адресацию логического блока. С устройствами АТА можно работать в разных режимах (CHS, LBA, LBA-48), но, естественно, с оглядкой на предел адресации выбранного режима. Возмож- ность адресации LBA была заложена в самой первой спецификации АТА, стан- дарты АТА и АТА-2 допускают поддержку обоих режимов адресации (CHS и LBA). В стандартах, начиная с АТА-3, поддержка LBA для всех устройств обяза- тельна. Для устройств АТА емкостью более 137,4 Гбайт обязательна поддержка режима LBA-48. Если емкость этих устройств превышает 268 435 455 секторов, то в словах [61:60] блока идентификации устройства у него должно быть пропи- сано значение OF FF FF FF — предел при 28-битной адресации. На поддержку LBA указывает бит 9 в слове 49 блока идентификации устройства, на поддержку LBA-48 указывает бит 10 в слове 83. Для устройств АТА, поддерживающих оба варианта адресации (CHS и LBA), ре- жим адресации определяется для каждой команды битом L (бит 6) регистра D/H; режимы могут чередоваться произвольным образом. Режим LBA-48 использует- ся только с новыми командами обмена (с суффиксом Ext, а также FPDMA), что и позволяет отличать этот режим адресации от всех других.
116 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA Правила пересчета CHS- и LBA-адресов однозначны: LBA = (С х НРС + Н) х SPT + S - 1. Здесь С, Н и S — «координаты» сектора, НРС — количество головок в цилиндре, SPT — количество секторов на треке в выбранной текущей геометрии. Эта же формула поясняет действия при последовательном обращении: сначала нараста- ет номер сектора, затем — номер головки, потом — номер цилиндра. При измене- нии текущей геометрии логический адрес (LBA) любого реального сектора оста- ется неизменным. Линейный адрес блока задается в командных регистрах устройства CH, CL, SN и D/Н; количество секторов, участвующих в обмене, для традиционных команд задается в регистре SC. В командах с очередями (Read DMA Queued (Ext), Write DMA Queued (Ext), Read FPDMA Queued и Write FPDMA Queued) число секторов указывается в регистре FR (а не в SC). Форматы использования этих регистров в различных режимах приведены на рис. 7.1. Все указанные регистры формально являются 8-разрядными — драйвер обращается к ним побайтно. Режим LBA 7 413 0 Регистр Режим CHS 7 413 0 SC[7:0] SC SC[7:0] LBA[7:0] SN (LBALow) Sec[7:0] LBA[15:8] CL (LBA Mid) Cyl[7:0] LBA[23:16] CH (LBA Hi) Cyl[15:8] |L=1| |Dev| LBA[27:24] D/H |L=0| |Dev| Hd[3:0] а Регистр SC SN (LBALow) CL (LBA Mid) CH (LBA Hi) D/H Последняя запись 7 413 0 Предыдущая запись 7 0 SC[7:0] SC[15:8] LBA[7:0] LBA[31:24] LBA[15:8] LBA[39:32] LBA[23:16] LBA[47:40] |L=1] \^У/////////л '/////////////////////x 6 Рис. 7.1. Расположение адреса в регистрах устройств АТА для различных режимов: а — 28-битная адресация CHS и LBA, б — LBA-48 В режиме LBA-48 регистры CH, CL, SN и SC (или FR для команд с очередями) для устройств становятся двойными — они содержат 16-битные числа. Младшим байтом этих чисел является последнее значение, записанное в данный регистр, старшим — предыдущее записанное. Таким образом, загрузка 16-разрядных зна- чений выполняется парами 8-разрядных записей. При выполнении команд с обыч- ной адресацией (CHS или LBA-28) старшие байты этих регистров игнорируются (считаются нулевыми). Программное считывание этих регистров возвращает по- следнее записанное значение. Для чтения предыдущих значений (старших байтов)
7.5. Адресация блоков данных 117 необходимо установить в «1» бит НОВ регистра DC. Бит НОВ автоматически сбрасы- вается при любой записи в блок командных регистров. Трехмерная геометрия устройства Устройство АТА, поддерживающее режим CHS, должно сообщать свою геомет- рию (число логических секторов, головок и цилиндров). Сначала эта геометрия точно соответствовала реальным геометрии и адресации — физически сектор действительно находился по указанному адресу. Позже по ряду причин диски АТА стали описывать внешней геометрией^, отличающейся от реальной внутрен- ней (реально, например, разные зоны треков имеют разное число секторов, при- чем часть секторов может резервироваться на случай замены дефектных). При этом одно и то же устройство может представляться с различной внешней гео- метрией. Трансляцию внешней геометрии в реальную внутреннюю выполняет встроенный контроллер устройства, невидимо для пользователя. Заметим, что BIOS выполняет свою трансляцию адреса, используемого при программных вы- зовах дисковых сервисов, в трехмерный или линейный адрес, посылаемый уст- ройству ATA/ATAPI. Эта трансляция необходима для того, чтобы преодолеть 528-мегабайтный барьер адресации, возникший из-за несоответствия разрядно- сти координат С, Н, S в принятых форматах программных вызовов с разрядностью координат, принятой в АТА. Геометрия по умолчанию (после включения питания) отражается словами 1 (Cyl), 3 (НРС) и 6 (SPT) блока параметров идентификации устройства (см. 8.3). Эта схема может быть изменена по команде Initialize Device Parameters, и теку- щая геометрия отражается в словах 54 (Cyl), 55 (НРС) и 56 (SPT), а текущий объ- ем V (число секторов) — в словах 57-58. По команде Initialize Device Parameters хост «заказывает» желаемые значения SPT и НРС, число цилиндров Cyl устройство вычисляет само. Если устройство не способно принять предлагаемую конфигу- рацию, эта команда будет отвергнута и принята конфигурация по умолчанию (слова 1, 3 и 6), при этом слова 57-58 могут быть нулевыми. Геометрия может быть выбрана относительно произвольно, количество полных цилиндров будет определяться как целая часть от V/(SPTxHPC). При этом могут оставаться неполные логические цилиндры, доступ к которым не гарантирован для всех устройств. По этой причине, когда для диска меняют геометрию (оп- циями BIOS Setup), доступный объем может варьироваться. Геометрию стара- ются выбирать с таким расчетом, чтобы было минимальным количество «вися- щих» секторов (orphan sectors), то есть секторов на неполных логических цилиндрах. Оптимальной конфигурации, как правило, соответствуют значения НРС и SPT, взятые из слов 3 и 6 соответственно. В этом случае число «висящих» секторов не будет превышать SPTxHPC-1. 1 Применительно к устройству АТА внешнюю геометрию часто называют логической, а реальную внутреннюю — физической. Однако в терминологии дисковых сервисов BIOS логической геометрией принято называть ту, которая используется программами при Вызове функций BIOS INT 13h, а физической геометрией — ту, которая передается устройству в его командные регистры по шине АТА (то есть внешнюю).
118 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA В стандартах, начиная с АТА-3, устройства с объемом до 16 515 072 секторов включительно (около 8 Гбайт) должны поддерживать хотя бы одну схему CHS (определяемую словами 1, 3 и 6). В АТА-4 и далее это число уменьшено — 16 514 064. Для устройств большего объема поддержка CHS не обязательна. Если режим CHS поддерживается, то геометрия по умолчанию определяется словами 1, 3 и 6, а текущая — словами 53-58. Если режим CHS не поддержива- ется, то все эти слова — нулевые. \В АТА-3 принимаются следующие правила определения геометрии по умолча- нию. Для устройств объемом менее 1 032 192 секторов (528 Мбайт) число ци- линдров (слово 1) не должно превышать 1024 (при этом не требуется трансля- ции в BIOS). Для устройств объемом до 16 515 072 секторов значения слова 1 принимаются в зависимости от числа головок (слова 3) в соответствии с табл. 7.1. Число секторов на треке (слово 6) устанавливается в пределах 1-63. Таблица 7.1. Определение геометрии по умолчанию Слово 3 Максимальное значение слова 1 1-4 65 535 5-8 32 767 10-16 16 383 1 должно быть 16 383 (3FFFh). Число головок (слово 3) может быть в пре- 1-16. При общем числе секторов не более 8 257 536 устанавливается зна- 16 головок. Чтобы при трансляции методом сдвига не получилось 256 го- — рокового числа для ряда BIOS и ОС (барьер 4,2 Гбайт), при большем секторов может приниматься число головок 15. Число секторов на треке В приложении В к ATA/ATAPI-4 и приложении С к ATA/ATAPI-5, 6 правила для геометрии по умолчанию несколько изменили: для устройств объемом до 16 514 063 секторов включительно число цилиндров (слово 1) может быть в диа- пазоне 1-65 535, в зависимости от слова 3 (см. табл. 7.1). Для устройств больше- го размера (там указано, что для устройств с более чем 15 481 935 секторамр) слово л х 1 4 делах чение ловок числе (слово 6) не должно превышать 63 (3Fh), для дисков с общим числом секторов более 1 032 193 принимается 63 сектора на трек. Слова 54-56, определяющие текущую геометрию, обязательно должны исполь- зоваться устройствами с общим числом секторов более 1 032 192 (528 Мбайт). Они показывают объем диска, адресуемый в системе CHS, их произведение (оно же в словах 57-58) не должно превышать 16 514 064 (8,5 Гбайт). Это искусствен- ное ограничение на сообщение параметров введено для совместимости с тради- ционным сервисом BIOS, имеющим программный интерфейс в формате CHS. Слова 60-61 содержат 32-битное значение реального размера диска, этот пол- ный объем безоговорочно доступен в режиме адресации LBA. Текущая геометрия может заказываться любой, в пределах габаритов 65 536х х16x255. Команда Set Max Address может уменьшить число цилиндров и общее число доступных секторов в текущей конфигурации.
7.6. Регистры устройств АТА 119 Современные диски объемом более 8,4 Гбайт сообщают CHS-геометрию по умолчанию 16 383 х 16 х 63 = 16 514 064 секторов (8,4 Гбайт), хотя из при- ложений к спецификации АТА следовала бы геометрия 16 383 х 15 х 63 = = 15 481 935 секторов (7,9 Гбайт) — близкая к предельно возможной для тради- ционных сервисов BIOS INT 13h. 7.6. Регистры устройств АТА Каждое устройство АТА (и ATAPI) имеет стандартный набор регистров. Набор регистров (табл. 7.2) состоит из двух блоков: ♦ регистры управляющего блока (выбирается сигналом CS0#), которые исполь- зуются для подачи сброса и разрешения прерываний от устройств, а также для получения информаций о его состоянии; ♦ регистры командного блока (выбирается сигналом CS1#), которые служат для посылки команд устройству, чтения информации о его состоянии и передачи данных (через этот блок выполняется основное программное взаимодействие с устройством). В параллельном интерфейсе АТА блок регистров выбирается сигналами от хост- адаптера CS0# и CS1#, из которых активным (низкий уровень, «0») может быть только один (или ни одного). Внутри блока регистр адресуется сигналами DA2, DA1, DA0 (младшие биты адреса на системной шине), чтение и запись выполня- ются по сигналам DIOR# и DIOW#. В режиме DMA обмен данными происходит через порт данных (он неадресуем в пространстве ввода-вывода), при этом ак- тивны сигналы DMARQ (запрос) и DMACK# (подтверждение обращения к порту данных), а сигналы CS0# и CS1# неактивны. При обращении к регистрам сигнал DMACK# должен быть неактивным. В SATA программа работает с теневыми ре- гистрами устройств, расположенными в хост-контроллере. Обмен данными меж- ду реальными регистрами устройств и теневыми регистрами, а также пересылка данных по DMA осуществляются по последовательному интерфейсу. С про- граммной точки зрения, эти различия интерфейсов незаметны (и несуществен- ны). В табл. 7.2 приведены адреса регистров в пространстве ввода-вывода IBM РС- совместимого ПК для первого (primary) и второго (secondary) каналов АТА. На- помним, что программное обращение хоста к любому регистру адресуется одно- временно к обоим устройствам, подключенным к одной шине АТА. При этом реагировать на программное обращение будет только устройство, выбранное битом DEV регистра D/H. Чтение регистров командного блока и альтернативного регистра состояния долж- но производиться только при нулевом значении бита BSY регистра состояния (это указывает на действительность и доступность их содержимого). Запись в ре- гистры должна производиться лишь при BSY=O и DRQ=O, кроме особо оговорен- ных случаев. Если устройство поддерживает управление энергопотреблением, в «спящем» режиме содержимое этих регистров недействительно, и запись игно- рируется, кроме особо оговоренных случаев.
120 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA Таблица 7.2. Регистры контроллеров устройств АТА Имя Назначение (R — чтение, W — запись) Адрес для канала № 1 2 Control Block Registers — регистры управляющего блока 3FX 37X AS R: Alternate Status — альтернативный регистр со- стояния 3F6 376 DC W: Device Control — регистр управления устрой- ством 3F6 376 DA R: Drive Address — регистр адреса (не использу- ется)1 3F7 377 Command Block Registers — регистры командного блока 1FX 17X DR R/W: Data — регистр данных 1F0h 170 ER R: Error — регистр ошибок 1F1h 171 FR W: Features — регистр свойств 1F1h 171 SC R/W: Sector Count — регистр счетчика секторов 1F2h 172 SN (LBA_Low) R/W: Sector Number — регистр номера сектора/ LBA (7:0]2 1F3h 173 CL (LBA_Mid) R/W: Cylinder Low — регистр младшего байта но- мера цилиндра / LBA[15:8]2 1F4h 174 CH (LBA_Hi) R/W: Cylinder High — регистр старшего байта но- мера цилиндра / LBA[23:16]2 1F5h 175 D/H (Device) R/W: Device/Head — регистр номера устройства и головки / LBA[27:24]2 1F6h 176 SR R: Status — регистр состояния 1F7h 177 о CR W: Command — регистр команд 1F7h 177 1 Рекомендуется, чтобы на сигнал чтения по этому адресу устройство не отвечало. 2 Регистры сектора, цилиндра и головки в режиме LBA содержат указанные биты логйчё* ского адреса (см. рис. 7.1). Регистры, задающие адрес блока (SN, CH, CL, D/H), инициализируются хостом и'со- храняют значение в случае успешного выполнения команды. В случае возникйо- вения ошибки устройство помещает в них адрес, при использовании которого случилась ошибка. До принятия спецификации АТА-2 считалось, что эти реги- стры должны модифицироваться и после успешного выполнения операции, от- ражая текущее значение адреса в носителе. Форматы регистров устройств АТА, содержащих по несколько полей, приведе- ны на рис. 7.2, назначение полей поясняется далее. Для устройств ATAPI те же регистры используются иначе (подробности см. в 8.2). В ATA/ATAPI-6 в связи с переходом на LBA-48 регистры SN, CL и СН получили новое название — LBA Low,
7.6. Регистры устройств АТА 121 LBA Mid и LBA High, а регистр D/H — Device. В данной книге в основном используют- ся более привычные и короткие старые названия. Регистр 7 6 1 1 5 1 Ml 3 2 1 0 DC SRST ///////////////////л SRST nIEN 0 DA HiZ nWTG nHS [3:0] nDS [1:0] ER У///А UNC MC IDNF MCR | | ABRT TKONF AMNF D/H FUA L (1) DEV H[3:0] / LBA[27:24] SR BSY DRDY DF DSC DRQ | | CORR | I IDXI | ERR Рис. 7.2. Регистры устройств АТА со сложным содержанием Альтернативный регистр состояния AS (для первого канала адрес 3F6h, для вто- рого — 376h) имеет те же биты, что и основной регистр состояния (см. далее), но его чтение не приводит ни к каким изменениям состояния устройства. Регистр управления устройством DC (3F6h, 376h) служит для программного сброса обоих устройств одновременно и управления разрешением прерывания выбранного устройства. Запись в этот регистр возможна в любой момент. Про- граммный сброс через регистр DC должен отрабатываться и в состоянии Sleep. Назначение битов регистра DC: ♦ НОВ (High Order Bits) — указание на считывание старших байтов (предыду- щих значений) регистров CH, CL, SN, SC и FR при 48-битной адресации (для уст- ройств, не поддерживающих LBA-48, бит не используется). Бит автоматиче- ски сбрасывается при записи в любой регистр командного блока; ♦ SRST (Software Reset) — программный сброс, действует все время, пока бит не сброшен (оба устройства на шине воспринимают программный сброс одно- временно); ♦ - nIEN (Interrupt Enable) — инверсный бит разрешения прерывания (при нуле- вом значении бита выбранное устройство может вырабатывать сигнал INTRQ через тристабильный выход). Регистр адреса устройства DA (3F7h, 377h) использовался только в первой вер- сии АТА для совместимости со старыми контроллерами, чтением этого регистра можно определить адресованный привод и головку. Регистр выпадает из блока (он совпадает с диагностическим регистром состояния контроллера НГМД), по- этому рекомендуется, чтобы устройство АТА не отвечало на чтение этого регист- ра. Если устройство отвечает на чтение, то оно не должно управлять битом D71 (HiZ — высокоимпедансный) во избежание конфликта с контроллером НГМД, у крторого по этой линии передается бит смены носителя. Из-за несоблюдения этого требования могут возникать проблемы, когда контроллер (адаптер) АТА и контроллер НГМД находятся на разных платах. 1 Это исключительное поведение одного бита регистра объясняется тем, что в IBM PC/AT использовалась комбинированная карта расширения с контроллерами жесткого и гибко- го дисков.
122 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA Назначение битов регистра DA: ♦ nWTG — инверсный признак записи (во время физического выполнения записи на носитель бит нулевой); ♦ nHS[3:0] — номер головки (инверсные биты); ♦ nDS[l:0] — выбор устройства (инверсные биты): 10 — выбрано устройство О, 01 — выбрано устройство 1. Регистр данных DR (IFOh, 170h) может использоваться как 8-битный или 16-бит- ный в зависимости от типа данных, передаваемых в текущей команде. Обраще- ние к этому регистру происходит в режиме обмена РЮ (когда сигнал DMACK# неактивен), при передаче по протоколу РО (РЮ Out) хост производит запись в этот регистр, при передаче по протоколу PI (РЮ In) — чтение. Регистр ошибок ER (IFlh, 17lh) хранит состояние выполнения последней опера- ции или диагностический код. После завершения операции на наличие ошибки указывает бит ERR регистра состояния. Назначение битов регистра ER: ♦ UNC (Uncorrectable Data Error) — неисправимая ошибка данных; ♦ МС (Media Changed) — смена носителя (после смены носителя первая команда обращения отвергается и устанавливается данный бит, после сброса бита сле- дующие команды выполняются нормальным образом); ♦ IDHF (ID Not Found) — указывает на ненайденный идентификатор сектора; ♦ MCR (Media Change Requested) — индикатор запроса смены носителя (после обнаружения запроса смены носителя команда Door Lock будет возвращать бит ошибки ERR и бит MCR, бит MCR сбрасывается командами Door Unlock, Media Eject или сигналом аппаратного сброса); ♦ ABRT (Aborted Command) — устанавливается, если команда отвергнута как не- действительная или в случае иной ошибки; ♦ TKONF (Track 0 Not Found) — указывает на то, что по команде Recalibrate не удалось найти нулевой трек; ♦ AMNF (Address Mark Not Found) не найден адресный маркер данных в заго- ловке сектора. После выполнения любого сброса или команды Execute Device Diagnostic регистр ошибок содержит диагностический код. Трактовка битов, за исключением бита 2 (ABRT), может меняться в зависимости от исполненной команды. Регистр свойств FR (IFlh, 171h) используется в зависимости от команды. В ко- манде Set Features через него задается код подкоманды. В командах чтения и записи с очередями в этом регистре указывается число секторов для передачи (в LBA-48 он становится 16-разрядным). Некоторые старые устройства могут игнорировать запись в этот регистр. До принятия спецификации АТА-2 в этот регистр помеща- ли значение рекомендуемого номера цилиндра для предкомпенсации записи. Регистр счетчика секторов SC (lF2h, 172h) содержит число секторов, участву- ющих в обмене (кроме команд чтения и записи с очередями). Хост инициализи- рует этот регистр до подачи команды (нулевое значение соответствует 256 секто-
7.6. Регистры устройств АТА 123 рам). По успешному завершению операции доступа к данным регистр должен обнуляться. Если команда завершилась с ошибкой, в регистре будет число секто- ров, которые должны быть переданы для успешного завершения предыдущего запроса. Команда Initialize Device Parameters или Write Same может переопреде- лить значение этого регистра. В некоторых командах регистр используется для передачи иных параметров (см. 7.8). Для режима LBA-48 регистр стал 16-раз - рядным, что позволяет передавать одной командой до 65 536 секторов; старший байт этого регистра (SC Exp) используется только в командах с суффиксом Ext. Регистры номера сектора SN (lF3h, 173h) и номера цилиндра — младшего CL (lF4h, 174h) и старшего байта CH (lF5h, 175h) — имеют двоякое назначение в зависимо- сти от выбранной системы адресации (CHS или LBA). Они инициализируются хост-адаптером, а в случае возникновения ошибки при выполнении операции устройство помещает в них адрес, по которому встретилась ошибка. Для режима LBA-48 регистры стали 16-разрядными, старшие байты этих регистров (SN Exp, CL Exp и СН Ехр) используются только в командах с суффиксом Ext. Регистр номера устройства и головки D/H (lF6h, 176h) помимо хранения части адресной информации служит для выбора ведущего или ведомого устройств и метода адресации. С переходом на адресацию LBA-48 и SATA с отказом от моде- ли «ведущий—ведомый» регистр теряет первоначальное назначение. Назначение битов регистра D/H: ♦ FUA — управление надежностью и кэшированием операции (SATA II, см. да- лее); ♦ L — единичным значением указывает на применение режима адресации LBA, при нулевом значении бита используется режим CHS; ♦ DEV (Device) — выбор устройства, при DEV=O выбрано ведущее, при DEV=1 — ве- домое; ♦ Н[3:0] — номер головки в режиме CHS (при L=0), LBA[27:24] — старшие биты логического адреса в режиме LBA (при L=l). Биты 7 и 5 вплоть до АТА-3 должны были быть единичными, в ATA/ATAPI-4 их объявили устаревшими; в SATA II бит 7 заняли под флаг FUA. Бит FUA (введен в SATA II) определяет требуемый уровень надежности опера- ции. В команде записи FUA=1 принуждает устройство сначала выполнить физи- ческую запись на носитель и только после этого сигнализировать о завершении команды. В команде чтения FUA=1 заставляет устройство передавать данные, счи- танные с носителя, даже если они имеются в кэше или буфере устройства. Если в кэше есть модифицированная копия этих данных (в результате предшествую- щей операции записи), то устройство сначала исполняет физическую запись этих данных на носитель, а потом считывает их с носителя, чтобы передать их хосту. При FUA=O о завершении записи сигнализируется сразу по получении последних данных (в кэш), а чтение по возможности выполняется из кэша. Регистр состояния SR (lF7h, 177h) отражает текущее состояние устройства в про- цессе выполнения команд: занятость, готовность, наличие ошибок и др. Чтение регистра состояния разрешает дальнейшее изменение его битов и сбрасывает за- прос аппаратного прерывания.
124 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA Назначение битов регистра SR описано ниже. ♦ BSY (Busy) указывает на занятость устройства, значение этого бита действи- тельно всегда. При BSY=1 устройство игнорирует попытки записи в команд- ный блок регистров, а чтение этих регистров дает неопределенный результат. При BSY=O регистры командного блока доступны, в это время устройство не может устанавливать бит DRQ, изменять значение битов ERR и содержимое ос- тальных командных регистров (могут меняться только значения битов IDX, DRDY, DF, DSC и CORR). Бит может устанавливаться на кратковременный интер- вал, так что хост может этого не заметить. Бит устанавливается: • при сбросе устройства; • по получении команды, если не устанавливается DRQ; • между передачами блоков данных в режиме РЮ и после них, пока не об- нулен бит DRQ; • во время передач данных в режиме DMA. ♦ DRDY (Device Ready) указывает на готовность устройства к восприятию любых кодов команд. Если состояние бита изменилось, оно не может вернуться об- ратно до чтения регистра состояния. При DRDY=O устройство воспринимает только команды Execute Device Diagnostic и Initialize Device Parameters, пре-; кращая выполнение текущей команды и сообщая об этом флагом ABRT в реги- стре ошибок и флагом ERR в регистре состояния. Другие команды приводят К непредсказуемым результатам. Устройства ATAPI сбрасывают бит по любо- му сбросу и команде Execute Device Diagnostic. Бит устанавливается устройст- вом АТА, когда оно готово к выполнению всех команд. Устройство АТАРГ устанавливает бит до завершения выполнения команд, за исключением кб- манд Device Reset и Execute Device Diagnostic. 1 ♦ DF (Device Fault) — индикатор отказа устройства. 1 1 ♦ DSC (Device Seek Complete) — индикатор завершения поиска трека. В коман- дах, допускающих перекрытие, бит называется SERV (Service Required) — уст- ройство требует обслуживания. ♦ DRQ (Data Request) — индикатор готовности к обмену словом или байтом дан- ных. . . ♦ CORR (Corrected Data Error) — индикатор исправленной ошибки данных. , j ♦ IDX (Index) — индекс, трактуется особо каждым производителем. ♦ ERR (Error) — индикатор ошибки выполнения предыдущей операции. Допол- нительная информация содержится в регистре ошибок. Если установлен бит ERR, до приема следующей команды, программного или аппаратного сбро- са устройство не изменит состояние этого бита, а также регистра ошибок, ре- гистра количества секторов и регистров цилиндра, головки и номера сектора. Для команд Packet и Service бит называется СНК и служит признаком ишрю- чительной ситуации. В стандарте ATA/ATAPI-4 для некоторых команд биты 4 и 5 могут иметь иное назначение, а биты 1 и 2 объявлены устаревшими. Назначение регистра команд CR (lF7h, 177h) очевидно, из названия. Устройство начинает исполнять команду сразу, как только ее код записан в данный регистр
7.7. Регистры Serial АТА 125 (к этому моменту должны быть заданы все параметры команды). Команду мож- но записывать лишь при готовности устройства (BSY=O и DRQ=O); команду Device Reset для устройств ATAPI можно подавать независимо от состояния битов BSY и DRQ и даже в состоянии Sleep. Список команд АТА приведен в главе 8. 7.7. Регистры Serial АТА Регистры, расположенные в устройствах SATA, имеют свои так называемые «те- невые» образы в хост-контроллере. Программное взаимодействие (чтение и за- пись) осуществляется с теневыми регистрами; связь теневых регистров с регист- рами устройств обеспечивается кадрами, передаваемыми по последовательному интерфейсу SATA. Каждое устройство, подключенное к адаптеру Serial АТА, пред- ставляется тремя блоками регистров: ♦ регистры управляющего блока; ♦ регистры командного блока; ♦ блок регистров SCR. Первые два блока соответствуют одноименным блокам регистров АТА (см. 7.6), блок регистров SCR — новый. Привязка адресов блоков регистров к адресному пространству хоста стандартом не регламентируется. В режиме эмуляция пар «ве- дущий-ведомый» (М/S) теневые регистры традиционных блоков располагаются по стандартным адресам ввода-вывода для АТА; блоки регистров SCR отобража- ются на пространство памяти. В режиме прямого подключения (DPP) все блоки регистров отображаются на память, каждому устройству (порту контроллера) отво- дится 512-байтный блок. Пример расположения регистров в пространстве памяти для контроллера i31244 (PCI-X SerialATA Controller) приведен в 6.2. В интерфей- се AHCI блоки командных и управляющих регистров упразднены, взаимодейст- вие с регистрами устройств осуществляется через их образы в памяти (см. 6.3). Из регистров управляющего блока, как и в АТА, используется лишь один (AS для чтения, DC для записи). В регистрах командного блока 8-битные регистры SC, SN, CL и СН позволяют задавать 16-битные значения (см. рис. 7.1). Их старшие байты используются только в командах с расширенной (48-битной) адресацией, назна- чение младших байтов сохранилось. В регистре D/Н бит DEV требуется только при эмуляции пар устройств на одном канале, в «естественном» режиме он игнори- руется. Новый блок регистров SCR (Serial АТА Status and Control registers) состоит из 16 смежных 32-разрядных регистров SCR0-SCR15 (рис. 7.3), из которых пока опре- делены лишь 5 (остальные зарезервированы). Регистр SStatus (SCR0) — регистр текущего состояния интерфейса хост-адаптера (только чтение). ♦ Поле DET — состояние подключения устройства: • 0000 — устройство не обнаружено, физической связи нет; • 0001 — устройство обнаружено, но физическая связь не установлена; • ООН — устройство обнаружено, физическая связь установлена;
126 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA • 0100 — устройство отключено (запретом интерфейса или запуском внут- реннего теста). ♦ Поле SPD — скорость: • 0000 — нет согласованной скорости (устройство не подключено или связь не установлена); • 0001 — согласована скорость 1-го поколения; • 0010 — согласована скорость 2-го поколения. ♦ Поле IPM — состояние энергопотребления интерфейса: • 0000 — устройство не обнаружено, физической связи нет; • 0001 — интерфейс в активном состоянии; • 0010 — интерфейс в состоянии PARTIAL; • ОНО — интерфейс в состоянии SLUMBER. Остальные биты и значения полей зарезервированы. Рис. 7.3. Регистры устройств Serial АТА: а — SStatus (SCR0), б — SError (SCR1), в — SControl (SCR2), г — SActive (SCR3), д — SNotification (SCR4) Регистр SError (SCR1) — регистр диагностической информации, относящейся к интерфейсу. В регистре представлены ошибки, накапливающиеся с момента последней очистки регистра. Регистр очищается операцией сброса, отдельные биты можно сбрасывать операцией записи в регистр (единицы в позициях сбра- сываемых битов). ♦ Поле ERR — ошибки, обрабатываемые обычным программным обеспечением: • С — устойчивая неисправимая ошибка связи или нарушение целостности данных (может возникать при неправильном подключении, отказе или от- ключении устройства);
7.7. Регистры Serial АТА 127 • Е — внутренняя ошибка, обнаруженная хост-адаптером (если ошибка по- вторяется после сброса, она может быть признаком несовместимости адап- тера и устройства); • I — исправленное нарушение целостности данных (не требует действий со стороны ПО, но может учитываться, например, для принятия решения о сни- жении скорости); • М — исправленная ошибка связи (может возникать при временном отклю- чении устройства, потере синхронизации, не требует действий со стороны ПО); • Р — протокольная ошибка, требует сброса интерфейса и повтора операции (в случае устойчивости может быть признаком несовместимости устрой- ства и адаптера); • Т — не исправленное нарушение целостности данных, требует повтора опе- рации. ♦ Поле DIAG — информация, используемая диагностическим ПО: • В — ошибка декодирования 10В/8В; • С — ошибка CRC на канальном уровне; • D — ошибка паритета блоков данных (Disparity); • F — неопознанный тип FIS (информационной части кадра), ошибка, обна- руженная на транспортном уровне при корректном CRC-коде; • I — внутренняя ошибка физического уровня интерфейса; • N — сигнал готовности физического уровня менял состояние; ) • Н — ошибка подтверждения кадров (может возникать как следствие оши- бок В, С, D); • S — ошибка последовательности состояний канального уровня; • Т — ошибка на транспортном уровне; • W — обнаружен пробуждающий сигнал Сотт Wake; ‘ • X — состояние физического подключения менялось с момента программ- ного обнуления данного бита. Остальные биты зарезервированы. Регистр SControl (SCR2) — регистр управления интерфейсом (запись и чтение). ♦ Поле DET — управление обнаружением и инициализацией устройств: • , 0000 — нет действий; • 0001 — инициализация и установление соединения (эквивалентно аппа- ратному сбросу); • 0100 — запрет интерфейса и перевод физического уровня в режим Offline. ♦ Поле SPD — ограничение на скорость при согласовании соединений: • 0000 — нет ограничений; • 0001 — скорость не выше 1-го поколения; • 0010 — скорость не выше 2-го поколения.
128 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA ♦ Поле IPM — управление энергорежимом интерфейса: • 0000 — нет ограничений; • 0001 — запрет перехода в состояние PARTIAL; • 0010 — запрет перехода в состояние SLUMBER; • ООН — запрет перехода в состояние PARTIAL и SLUMBER. Остальные биты и значения полей зарезервированы. Регистр SActive (SCR3) — регистр активности запросов (введен в SATA-П). Каж- дый бит отображает активность запроса с соответствующим тегом (бит 0 — tag=O, бит 31 — tag=lFh). Драйвер устанавливает бит при постановке запроса в оче- редь, устройство сбрасывает его, завершив передачу данных для текущего запро- са. Хост-контроллер сбрасывает все биты регистра по аппаратному и программ- ному сбросу. Регистр SNotification (SCR4) — регистр уведомления об асинхронных событиях (введен в SATA-П). Поле Notify используется для идентификации источника — устройств, сигнализирующих о событиях. Необходимость такого поля возникает при подключении множества устройств к одному порту через мультиплексор портов (см. 5.4). 7.8. Протоколы взаимодействия с устройствами Протоколы взаимодействия определяют последовательность действий, которые должен выполнить драйвер для подачи команд и получения результатов. Прото- колы зависят от выбранного режима передачи данных (РЮ, DMA, UltraDMA или FPDMA), а также от использования (или не использования) механизма пере- крытия команд и очередей. Режим обмена РЮ подходит только для однозадач- ных ОС; для многозадачных ОС больший интерес представляет обмен по прото- колу DMA и UltraDMA; наиболее перспективен режим FPDMA для устройств SATA-П. С точки зрения драйвера есть различия лишь между типами режимов; аппаратные нюансы режимов внутри типа влияют только на скорость передачи. Режим UltraDMA значительно отличается от обычного режима DMA необходи- мостью обработки возможных ошибок передачи по шине; в случае постоянных ошибок драйвер должен понизить «уровень» режима UltraDMA (вплоть до пе- рехода на традиционные режимы). Режим FPDMA отличается минимизацией программных действий драйвера и самой высокой эффективностью обмена. Традиционные протоколы (одиночные команды) Традиционные протоколы работают с устройствами одной шины АТА поочеред- но, без перекрытий (отключения устройств от шины) и очередей. В этих прото- колах можно выделить три этапа: 1. Посылка команды устройству. 2. Передача данных.
7.8. Протоколы взаимодействия с устройствами 129 3. Получение данных о состоянии завершения команды (проверка на отсутст- вие ошибок). Во время выполнения команды устройство может вырабатывать запросы преры- ваний в следующих случаях: ♦ индикация начала передачи данных для каждого блока (сектора) в режиме РЮ; ♦ индикация завершения всей передачи для команды в режиме DMA; ♦ индикация завершения (успешного или с ошибкой) выполнения команды. Протокол взаимодействия хоста с устройством при использовании режима РЮ выглядит следующим образом. 1. Хост читает регистр состояния устройства, дожидаясь нулевого значения бита BSY. Если присутствуют два устройства, хост обращается к ним «наугад» — данные о состоянии будут сообщаться последним выбранным устройством. 2. Дождавшись освобождения устройства, хост записывает в регистр D/Н байт, у которого бит DEV указывает на адресуемое устройство. Здесь кроется причи- на невозможности параллельной работы двух устройств на одной шине АТА: обратиться к устройству можно только после освобождения обоих устройств. 3. Хост читает основной или альтернативный регистр состояния адресованного устройства, дожидаясь признака готовности (DRDY=1). 4. Хост заносит требуемые параметры в блок командных регистров. 5. Хост записывает код команды в регистр команд. 6. Устройство устанавливает бит BSY и переходит к исполнению команды. Дальнейшие действия зависят от протокола передачи данных, заданного ко- мандой. Для команд, не требующих передачи данных, следующий шаг (шаг 7) — по- следний. Завершив исполнение команды, устройство сбрасывает бит BSY и ус- танавливает запрос прерывания (если он не запрещен). К этому моменту в регистрах состояния и ошибок уже имеется информация о результате испол- нения. Единичное значение бита BSY может «промелькнуть» между шагами 6 и 7 так быстро, что хост его не зафиксирует, но для фиксации факта выполне- ния команды или ее части предназначен запрос прерывания. Для команд, требующих чтения данных в режиме РЮ, процедура продолжа- ется следующим образом. 7. Подготовившись к передаче первого блока данных по шине АТА, устройство устанавливает бит DRQ. Если была ошибка, она фиксируется в регистрах со- стояния и ошибок. Далее устройство сбрасывает бит BSY и устанавливает за- прос прерывания (если он не запрещен). 8. Обнаружив (опросом) обнуление бита BSY, или по прерыванию от устройства, хост считывает регистр состояния, что приводит к сбросу прерывания от уст- ройства. 9. Если хост обнаруживает единичное значение бита DRQ, он производит чтение первого блока данных в режиме РЮ (адресуясь к регистру данных). Если об-
130 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA наруживается ошибка, считанные данные могут быть недостоверными. После передачи блока данных возможно одно из следующих действий: • если на шаге 8 ошибка не обнаружена и требуется передача следующего блока, устройство устанавливает бит BSY и данная последовательность по- вторяется с шага 7; • если есть ошибка или передан последний блок данных, устройство сбра- сывает бит DRQ и выполнение команды завершается. Для команд, требующих записи данных в режиме РЮ, после шага 6 для уст- ройства начинается активная фаза записи на носитель, что отмечается уста- новкой бита BSY. Для этих команд процедура после шага 6 продолжается сле- дующим образом. 10. Подготовившись к приему первого блока данных по шине АТА, устройство устанавливает бит DRQ (если нет ошибок), сбрасывает бит BSY и устанавливает запрос прерывания (если он не запрещен). Если была ошибка, она фиксиру- ется. И. Обнаружив (опросом) обнуление бита BSY, или по прерыванию от устройства, хост считывает регистр состояния. 12. Если хост обнаруживает единичное значение бита DRQ, он производит запись первого блока данных в режиме РЮ по адресу регистра данных. 13. После передачи блока данных возможно одно из следующих действий: • если обнаружена ошибка, устройство сбрасывает бит DRQ, устанавливает запрос прерывания, и выполнение команды завершается, а переданные по шине данные остаются устройством необработанными (не записываются на носитель); • если ошибка не обнаружена, устройство устанавливает бит BSY и перехо- дит к следующему шагу. 14. Устройство обрабатывает принятый блок данных, затем: • если нет ошибок и обработанный блок — последний, устройство сбрасыва- ет бит BSY и устанавливает запрос прерывания, на чем выполнение коман- ды успешно завершается; • если обнаружена ошибка, выполнение команды завершается таким же об- разом, но с установкой битов ошибок; • если нет ошибок и требуется передача следующего блока, процедура про- должается. 15. По готовности приема следующего блока устройство устанавливает бит DRQ, сбрасывает бит BSY и устанавливает запрос прерывания. Последовательность записи очередных блоков повторяется с шага 10. Команды с передачей данных в режимах DMA и UltraDMA выполняются похо- жим образом, но с некоторыми исключениями. Для передачи в условиях прямо- го доступа к памяти хост должен инициализировать канал DMA до записи кода в регистр команд, чтобы при появлении сигнала DMARQ начался обмен. Инициа- лизация для контроллеров PCI IDE включает еще и формирование таблицы де- скрипторов физических областей. Запрос прерывания в режиме DMA даже для
7.8. Протоколы взаимодействия с устройствами 131 многосекторных передач производится только один раз — по выполнении ко- манды, что опять-таки делает этот режим более выгодным для многозадачных систем. Перекрытие команд и использование очередей при работе с устройствами ATA/ATAPI Получив команду, допускающую перекрытие, устройство может вести себя двояко: ♦ выполнять команду таким же образом, следуя протоколу, описанному в пре- дыдущем разделе; ♦ освободить шину, если полученная команда требует выполнения длительных внутренних операций (например, позиционирования на носителе). Перекрытие команд (освобождение шины) допускается только для команд NOP (с подкомандой 01), Packet, Read DMA Queued (Ext), Service и Write DMA Queued (Ext). Для освобождения шины устройство должно сбросить биты DRQ и BSY регистра состояния. По окончании выполнения внутренней операции устройство устанав- ливает бит SERV в своем регистре состояния, что означает его готовность к про- должению выполнения данной команды. Если хост намерен использовать осво- бодившуюся шину для обращения к другому устройству, он должен запретить прерывания от текущего выбранного устройства, установив бит nIEN в регистре управления. После этого он сможет работать с другим устройством той же шины, подавая ему команду или обслуживая исполнение ранее поданной. При этом он должен переключить контекст DMA — указать контроллеру на таблицу дескрипторов передачи, относящуюся к этому устройству. После того как хост вернется к обслуживанию первого устройства, он должен послать ему команду NOP с подкомандой 01 для получения информации о состоя- нии завершения. При этом он может разрешить прерывание, которое произойдет по готовности устройства к продолжению. Обнаружив установленный бит SERV, хост должен инициировать продолжение исполнения команды, во время кото- рой шина освобождалась. Для этого он должен снова переключить контекст (на дескрипторы передачи для первого устройства) и подать устройству команду Service, которая вызовет продолжение исполнения команды. После начала пере- дачи данных устройство уже не должно освобождать шину до окончания выпол- нения команды. Устройства могут поддерживать очереди команд, но только для команд, допус- кающих перекрытие (эти свойства тесно связаны). Если устройство, получив ко- манду, освободило шину, то ему же в очередь можно поставить следующую ко- манду. Команды в очереди помечаются уникальным идентификатором-тегом, который передается через регистр SC. После исполнения команды Service значе- ние тега для обслуживаемой команды считывается из того же регистра, что и по- зволяет ее идентифицировать. Если устройство получает команду со значением тега, которое уже присутствует в очереди, и новая, и старая команды отвергают- ся (состояние не определено). При возникновении любой ошибки вся очередь сбрасывается.
132 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA Новая команда ставится в очередь лишь при освобожденной шине. Перед посыл- кой хост должен запретить прерывания, а разрешить их может только после посылки новой команды. Если для выполнения команды устройству не нужно освобождать шину, команда выполняется немедленно, а находящиеся в очереди команды, освободившие шину, будут выполнены позже. Если при непустой оче- реди устройство получает команду, не допускающую перекрытия, команда от- вергается (с соответствующим битом в регистре ошибок) и очередь сбрасыва- ется. Глубина очереди, поддерживаемой устройством, сообщается в блоке параметров идентификации словом 75, нулевому значению слова соответствует глубина оче- реди 1, означающая, фактически, отсутствие поддержки очередей. В командах Packet, Read DMA Queued (Ext) и Write DMA Queued (Ext) регистр SC (Sector Count) используется не по прямому назначению (рис. 7.4). Помимо поля Тад, в котором содержится тег, в нем (при чтении после подачи команды) определе- ны следующие биты: ♦ REL — признак освобождения шины (если устройство сразу готово к передаче данных, бит обнулен); ♦ I/O — индикатор направления передачи данных (1 — передача к хосту); ♦ С/D — признак передаваемой информации (0 — данные, 1 — командный па- кет). Число секторов для передачи командами Read DMA Queued (Ext) и Write DMA Queued (Ext) указывается в регистре FR (Features), для команд с расширенной адресаци- ей этот регистр — двойной. Регистр SC FR 7 1 1 6 1 5 | 4 | 3 2 1 0 Тад Rel I/O C/D SC[7:0] (число секторов) Рис. 7.4. Формат регистров SC и FR для команд с перекрытием Принятый механизм освобождения шины и продолжения выполнения команд малоэффективен (например, по сравнению с SCSI) — он требует привлечения хоста для обнаружения готовности устройства и переключений контекста. Го- товность устройства определяется хостом путем полинга (периодического опро- са состояния устройств), реализуемого хост-контроллером (аппаратно) или про- граммой хост-компьютера. Использование естественных очередей в SATA-II (NCQ) Технология NCQ позволяет существенно упростить протокол взаимодействия драйвера и устройств и повысить эффективность обмена данными. Для исполь- зования NCQ хост-контроллер должен иметь контроллер FPDMA с аппаратным переключением контекста по сообщениям от устройства. Для каждого порта SATA у контроллера должна быть своя таблица контекстов, в каждой таблице должны
7.8. Протоколы взаимодействия с устройствами 133 помещаться указатели на 32 таблицы (цепочки) PRD (по числу возможных те- гов). Если допустимые размеры таблиц меньше, это должен учитывать драйвер и не задействовать «лишних» значений тегов. Возможность постановки команды в очередь драйвер определяет по значению бита BSY (0 — можно посылать следующую команду). В очередь NCQ могут ста- виться лишь новые команды Read FPDMA Queued и Write FPDMA Queued, использующие только 48-битный адрес LBA. Запросы при постановке снабжаются тегом; перед подачей команды драйвер должен проинициализировать таблицу PRD для дан- ного порта, соответствующую используемому номеру тега. Успешная постановка сигнализируется обнулением бита BSY при нулевом значении бита ERR в регистре состояния. По исполнении команды (после выполнения связанных с ней пере- дач данных) устройство вызывает прерывание; обслуженный запрос индициру- ется в регистре SActive нулевым значением бита, соответствующего значению тега. Единичные значения битов этого регистра соответствуют тегам запросов, еще находящихся в очереди (эти теги пока нельзя повторно использовать). Ошибка, обнаруженная устройством при постановке команды в очередь или при ее исполнении, сигнализируется установкой бита ERR при нулевом бите BSY, код ошибки сообщается в регистре ER. При этом устройство останавливает выполне- ние всех команд, ожидающих в очереди, до тех пор пока драйвер не подаст ко- манду чтения журнала ошибок Read Log Ext с номером страницы 10h. В этой стра- нице (512-байтном блоке) указывается тег запроса, вызвавшего ошибку (или признак недействительности тега, если ошибка не вызвана исполнением коман- ды из очереди), а также состояние регистров устройства для данного запроса. Использование регистров в новых командах аналогично командам Read DMA Queued Ext и Write DMA Queued Ext, тег запроса также помещается в регистр SC. Число ко- манд, которые могут находиться в очереди устройства, определяется в слове 75 его блока параметров (здесь указано максимально допустимое значение тега). Возможности приостановки передачи данных и изменение порядка следования фрагментов определяются по словам 78 и 79 блока параметров. Использованием этих возможностей можно управлять с помощью команды Set Feature с подко- мандами 10h/90h (разрешение/запрет свойств SATA). В данном разделе были описаны общие идеи взаимодействия драйвера с устрой- ством, применимые к гипотетическому контроллеру с традиционной идеологией, но имеющему поддержку NCQ (аппаратное переключение контекстов). Реаль- ный контроллер SATA i31244 традиционного стиля (с программным взаимодей- ствием через регистры) аппаратного переключения контекстов не имеет. Работа с интерфейсом AHCI Контроллер SATA с интерфейсом AHCI (см. 6.3) обеспечивает реальную под- держку технологии NCQ, а также отработку обычных команд (без очередей) с минимизаций операций ввода-вывода, выполняемых процессором. Заметим, что технология NCQ в AHCI 1.0 полностью поддерживается только в случае одно- временной работы множества устройств, подключенных к контроллеру непосред- ственно (без мультиплексоров). Программа в основном работает со структурами данных в памяти: командными таблицами и списками команд. Из регистров кон-
134 Глава 7. Программное взаимодействие с устройствами ATA/ATAPI/SATA троллера она оперативно пользуется только регистрами запросов прерываний, регистрами активности командных слотов (PxCI), активности запросов (PxSACT, только для команд NCQ) и регистрами с образами SR и ER (PxTFD). Для запуска команды программа должна выполнить следующие действия: 1. Сформировать командную таблицу (см. рис. 6.1, а): • сформировать информационную структуру (FIS) регистров (поле CFIS), заполнив поля регистров в соответствии с подаваемой командой (см. рис. 6.2). Для команды PACKET заполнить и поле ACMD (поместив в него ко- мандный пакет); • сформировать таблицу PRD (см. рис. 6.1, б). 2. Определить свободный слот (дождаться освобождения) и заполнить его поля (см. рис. 6.2). 3. Для команд с очередями установить бит, соответствующий данному слоту, в регистре PxSAct. 4. Установить бит, соответствующий данному слоту, в регистре PxCI. Завершение отработки команды, как правило, сигнализируется прерыванием. По прерыванию программа определяет порт, имеющий запрос прерывания (по регистру IS). Для каждого порта, у которого есть запрос, программа определяет причину запроса (в регистре PxIS), причин может быть и несколько. Программа сбрасывает обнаруженные установленные биты в PxIS и бит данного порта в IS. Программа считывает регистр PxCI и сравнивает его с предыдущим значением: команды (слоты), биты для которых обнулены, успешно исполнены. О наличии ошибок программа узнает по битам PxIS и по биту ERR в образе регистра SR, счи- танном из регистра PxTFD. Контроллер как современное устройство PCI может использовать для сигна- лизации прерывания аппаратный сигнал (INTA#) и сообщения MSI (запись в оп- ределенные ячейки памяти). В AHCI предусматривается возможность посылки индивидуальных сообщений для каждого порта. Правда, текущее ограничение (до 16 различных сообщений) для среды Windows на платформах х86 не позво- ляет задействовать уникальные сообщения для всех возможных 32 портов кон- троллера. В этом случае первые порты (0-14) будут использовать уникальные сообщения, а все оставшиеся — одно общее. В современных чипсетах контролле- ры прерываний APIC, как правило, не допускают разных сообщений от одной функции PCI, так что упрощенная идентификация источника прерывания через уникальные сообщения пока является лишь потенциальной возможностью. Для команд с очередями требуется задание тега (поле tag в образе регистра SC командной информационной структуры). Интерфейс AHCI требует, чтобы зна- чение тега соответствовало номеру командного слота, из которого эта команда ставится в очередь. При этом в регистрах PxSAct и PxCI устанавливаются один и тот же бит (его номер равен тегу и номеру командного слота). Контроллер не проверяет корректность (согласованность) этих установок — ответственность за их согласованность (и за неожиданные результаты в случае несогласованности) ложится на программу.
ГЛАВА 8 Система команд ATA/ATAPI и SATA Стандарты ATA/ATAPI и SATA описывают систему команд, передаваемых от хоста к устройству по параллельному или последовательному интерфейсу. Сис- тема команд была изначально ориентирована на фиксированные накопители на жестких магнитных дисках (HDD), впоследствии она «обрастала» различными дополнениями, призванными обеспечить поддержку смены носителей и иных типов носителей (CFA и малогабаритные флэш-карты). Благодаря всего лишь одной команде Packet система команд АТА получила возможность почти неогра- ниченного расширения (ATAPI) за счет передачи командного пакета SCSI по интерфейсу ATA/SATA. В табл. 8.1 приведена система команд ATA/ATAPI-6 и SATA II: название, назна- чение, применимость и использование регистров. Графа «Протокол» определяет протокол передачи данных, требуемый для команды (см. 7.8): ♦ PI — ввод данных от устройства в режиме РЮ; ♦ РО — вывод данных в устройство в режиме РЮ; ♦ Р — протокол передачи командного пакета (16 байт вывода в режиме РЮ); ♦ DM — обмен данными по каналу DMA; ♦ DMQ — обмен DMA с очередями; ♦ FPDMA — с очередями NCQ; ♦ ND — нет обмена данными; ♦ DR — протокол сброса; ♦ VS — специфично Для устройства. Графа «Тип, история» определяет характеристику команды раздельно для уст- ройств АТА и ATAPI: 0 — обязательная, Д — дополнительная, Н — неприменима, F — обязательная для устройств с поддержкой набора специальных свойств (feature set), У — устаревшая, И — исключенная. Цифра после буквы означает но- мер версии спецификации ATA/ATAPI, в которой тип менялся (S2 — SATA II). Графа «Код» содержит шестнадцатеричный код, загружаемый в регистр коман- ды. В графе «Использование регистров» приняты следующие обозначения: 1 — регистр содержит параметры для команды, о-в регистре передается результат. Для регистра D/Н применяются дополнительные обозначения: D — используется
136 Глава 8. Система команд ATA/ATAPI и SATA только бит D, DO — команда адресуется к ведущему устройству, но выполняют ее оба устройства, F — задействован только бит FUA. Таблица 8.1. Система команд ATA/ATAPI и SATA Команда Про- токол Тип, история Код Использование регистров ATA ATAPI FR SC SN CH, CL D/H Acknowledge Media Change — подтвержде- ние смены носителя VS Д.УЗ, И5 DBh — — — — D Boot — Post-Boot — по- сле загрузки носителя VS Д.УЗ, И5 DCh — — — - D Boot — Pre-Boot — до загрузки носителя VS Д.УЗ, И5 DDh - - — - D CFA Erase Sectors — стирание секторов ND Д4 H COh - i i/o i/o i/o CFA Request Extended Error Code — чтение расширенного кода ошибки ND Д4 H 03h 0 0 0 0 i/o CFA Translate Sector — получение информации о состоянии сектора PI Д4 H 87h - - i i D CFA Write Multiple Without Erase — множе- ственная запись без операции стирания (в предварительно стертые секторы) РО Д4 H CDh i i/o i/o i/o CFA Write Sectors Without Erase — запись без операции стирания (в предварительно стертые секторы) РО Д4 H 38h — i i/o i/o i/o Check Media Card Type ND F6 F6 D1h i 0 0 0 0 Check Power Mode — проверка режима энергопотребления ND Д.О4 04 E5h (98h)’ - 0 — - D Device Configuration — управление конфигура- цией устройства ND/PI F6 F6 B1h i - - - D Device Reset — сброс устройства ATAPI DR H 04 08h - 0 0 0 D Door Lock — запрет смены носителя VS Д.У4 Д DEh - - — — D
Система команд ATA/ATAPI и SATA 137 Команда Про- токол Тип, история Код Использование регистров ATA ATAPI FR SC SN CH, CL D/H Door Unlock — разре- шение смены носителя VS Д.У4 Д DFh - - - - D Download Microcode — загрузка микрокода внутреннего ПО РО Д H 92h i i i i D Execute Device Diagnostic — диагнос- тика ND 0 0 90h - о о о D=0 Flush Cache — выгрузка кэша записи на носи- тель (время выполне- ния может достигать 30 с) ND Д4, 05 Д4, 05 E7h — — о о D/o Flush Cache Ext — то же для LBA-48 ND F6 H EAh - — о о D Format Track — форма- тирование трека vs С, У4 H 50h - - - - D2 Get Media Status — по- лучение информации о состоянии носителя (наличие, смена, защи- та записи) ND Д4 Д4 DAh — — — — D Identify Device — иден- тификация устройства (не пакетного) PI 0 H ECh - - - — D Identify Device DMA — идентификация устрой- ства с ответом в режи- ме DMA DM ДЗ, У4 H EEh — — — — D Identify Packet Device — идентификация устрой- ства (пакетного) PI H 04 A1h - - - - D Idle — переход в со- стояние ожидания ND Д. 04 Д E3h (97h)’ - i - - D Idle Immediate — не- медленный переход в состояние ожидания ND Д. 04 Д.04 E1h (95h)’ — — - — D Initialize Device Parameters — инициа- лизация параметров устройства ND 0, У6 H 91h — У — — У Продолжение &
138 Глава 8. Система команд ATA/ATAPI и SATA Таблица 8.1 (продолжение) Команда Про- токол Тип, история Код Использование регистров ATA ATAPI FR SC SN CH, CL D/H Media Eject — извлече- ние носителя ND Д2 Д2 EDh - - - - D Media Lock — блокиро- вание носителя ND Д4 Д4 DEh - - - - D Media Unlock — разбло- кирование носителя ND Д4 Д4 DFh - - — - D Nop — холостая команда ND Д Д OOh i - - - D Packet — посылка командного пакета P H 04 AOh i I/O - i/o D Read Buffer — чтение буфера PI Д H E4h - - - - D Read DMA (w/retry) — чтение по DMA с повто- рами DM 03 H C8h - i i/o i/o i/o Read DMA Ext — то же для LBA-48 DM F6 H 25h - i i/o i/o D Read DMA (w/o retry) — чтение no DMA без повторов DM 03, У5 H C9h - i i/o i/o i/o Read DMA Queued — чтение no DMA с воз- можностью постановки команды в очередь и освобождения шины DMQ Д4 H C7h i i/o2 i/o i/o i/o Read DMA Queued Ext — то же для LBA-48 DMQ F6 H 26h i i/o i/o i/o D Read FPDMA Queued — чтение с очередями NCQ и адресацией LBA-48 FPDM A S2 H 60h i i/o i/o i/o F Read Log Ext — чтение страницы журнала оши- бок PI F6 F6 2Fh - i i i D Read Long (w/retry) — «длинное» чтение с повторами PI Д.У4 H 22h - i i/o i/o i/o Read Long (w/o retry) — «длинное» чтение без повторов PI Д.У4 H 23h - i i/o i/o i/o Read Multiple — блоч- ное чтение PI ДЗ, 04 H C4h - i i/o i/o i/o
Система команд ATA/ATAPI и SATA 139 Команда Про- токол Тип, история Код Использование регистров ATA ATAPI FR SC SN CH, CL D/H Read Multiple Ext — то же для LBA-48 PI F6 H 29h - i/o i/o i/o D Read Native Max Address — чтение макси- мального адреса секто- ра (заводской установки) ND Д4 H F8h — — о О D/o Read Native Max Address Ext — то же для LBA-48 ND F6 F6 27h - - о о D Read Sector(s) (w/retry) — чтение сек- торов с повторами PI 0 0 20h - i i/o i/o i/o Read Sector(s) Ext — то же для LBA-48 PI F6 H 24h - i i/o i/o D Read Sector(s) (w/o retry) — чтение секто- ров без повторов PI О, У5 H 21h - i i/o i/o i/o Read Verify Sector(S) (w/retry) — верифика- ционное чтение секто- ров с повторами ND 0 H 40h - i i/o i/o i/o Read Verify Sector(S) Ext — то же для LBA-48 ND F6 H 42h - i i/o i/o D Read Verify Sector(S) (w/o retry) — верифика- ционное чтение секто- ров без повторов ND 0, У5 H 41h — i i/o i/o i/o Recalibrate — рекалиб- ровка (поиск нулевого трека) ND Д.У4 Д.У4 10h (1xh)’ - - - - D Security Disable Pass- word — отмена защиты (с посылкой пароля) PO ДЗ ДЗ F6h - - - - D Security Erase Prepare — подготовка с защитному стиранию ND ДЗ ДЗ F3h - - - - D Security Erase Unit — защитное стирание (с посылкой пароля) PO дз ДЗ F4h - - - - D Security Freeze Lock — блокировка команд защиты ND ДЗ ДЗ F5h - - - - D Продолжение &
140 Глава 8. Система команд ATA/ATAPI и SATA Таблица 8.1 (продолжение) Команда Про- токол Тип, история Код Использование регистров ATA ATAPI FR SC SN CH, CL D/H Security Set Password — установка пароля защиты РО дз ДЗ F1h - - - - D Security Unlock — сня- тие защиты РО ДЗ ДЗ F2h - - - - D Seek — поиск ND 0 H 70h (7xh)’ - - i i i Service — передача данных и/или состояния команды, освободив- шей шину Р или DMQ H Д4 A2h — — — — D Set Features — установ- ка свойств ND Д.03 Д.03 EFh i i i i D Set Мах — ограничение доступного размера и паролирование этой возможности ND Д5 H F9h i i i/o i/o i/o Set Max Address Ext — ограничение доступно- го размера для LBA-48 ND F6 F6 37h - i i/o i/o D Set Multiple Mode — уста- новка размера блока для блочного режима обмена ND 03 H C6h - i - - D Sleep — перевод в «спящий режим» ND Д.О4 Д.04 E6h (99h)’ - - - - D SMART — группа команд мониторинга ND, PI ДЗ ДЗ BOh i i2 i2 i/o2 D Standby — перевод в дежурный режим ND Д. 04 Д E2h (96h)’ - i - - D Standby Immediate — немедленный перевод в дежурный режим ND Д.04 Д.О4 EOh (94h)1 - - - - D Write Buffer — запись в буфер PO Д H E8h - - - - D Write DMA (w/retry) — запись по DMA с повто- рами DM 03 H CAh - i i/o i/o i/o Write DMA Ext — то же для LBA-48 DM F6 H 35h - i i/o i/o D
Система команд ATA/ATAPI и SATA 141 Команда I Про- токол Тип, история Код Использование регистров ATA ATAPI FR SC SN CH, CL D/H Write DMA (w/o retry) — запись no DMA без повторов DM 03, У5 H CBh - i i/o i/o i/o Write DMA Queued — запись no DMA с воз- можностью постановки команды в очередь и освобождения шины DMQ Д4 H CCh i i/o i/o i/o i/o Write DMA Queued Ext — то же для LBA-48 DMQ F6 H 36h i i/o i/o i/o D Write FPDMA Queued — запись с очередями NCQ и адресацией LBA-48 FPDM A S2 H 61h i i/o i/o i/o F Write Log Ext — запись в журнал PO F6 F6 3Fh — i i i D Write Long (w/retry) — «длинная» запись с повторами PO Д.У4 H 32h - i i/o i/o i/o Write Long (w/o retry) — «длинная» запись без повторов PO Д.У4 H 33h - i i/o i/o i/o Write Multiple — блочная запись PO 03 H C5h — i i/o i/o i/o Write Multiple Ext — то же для LBA-48 PO F6 H 39h - i i/o i/o D Write Same — запись с размножением PO Д.У2, И5 H E9h i i i/o i/o i/o Write Sector(s) (with retry) — запись секто- ров с повторами PO 0 H 30h - i i/o i/o i/o Write Sector(s) Ext — то же для LBA-48 PO F6 H 34h - i i/o i/o D Write Sector(s) (without retry) — запись секто- ров без повторов PO 0, У5 H 31h — i i/o i/o i/o Write Verify — запись с верификацией PO Д.У4 H 3Ch - i i/o i/o i/o 1 Старый код команды. 2 Использование регистра зависит от производителя.
142 Глава 8. Система команд ATA/ATAPI и SATA Коды команд 9Ah, C0h-C3h, 8xh, FOh, F7h и FAh-FFh выделяются производи- телям оборудования для реализации специфических команд. Команды с кодами 10h, 21h-23h, 31h-33h, 3Ch, 41h, 50h, C9h, CBh и EEh в спецификации АТА/ ATAPI-5 объявлены устаревшими (эти команды использовать не рекомендует- ся). В этой же спецификации коды llh-lFh, 71h-7Fh, 94h-99h, DBh-DDh, E9h удалены из списков «живых», использование этих команд запрещается (в даль- нейшем указанные коды могут быть определены для иных команд). Коды ко- манд D2h-D4h выделены для трансляции адаптерами малогабаритных карт па- мяти. 8.1. Команды доступа к данным АТА Команды доступа к данным АТА предназначены для чтения и записи устройств хранения, логически соответствующих модели жесткого диска (HDD) с его ре- гистрами и посекторной адресацией (с размером сектора 512 байт). Для уст- ройств иных классов имеется альтернативный способ доставки команд и пара- метров — команда Packet. По этой команде, используя вывод в режиме РЮ, хост- адаптер передает пакет с блоком дескриптора команды. Подробнее о пакетном интерфейсе см. 8.2. Команды чтения секторов в режимах обмена РЮ и DMA — Read Sector(s) и Read DMA — позволяют считывать последовательно расположенные секторы, количест- во которых задано в регистре SC, а адрес начального сектора — в регистрах CH, CL, D/H и SN. Команды чтения бывают с повторами или без них. В первом случае, если при чтении сектора обнаружена неисправимая ошибка, устройство авто- матически делает несколько повторных попыток чтения. После исполнения команды в случае неисправимой ошибки блок командных регистров содержит адрес сектора с ошибкой. Если устройство использует код ЕСС (Error Correction Code — код с исправлением ошибок), то некоторые ошибки чтения оно исправ- ляет без повторов, но указывает на этот факт в регистре ошибок. Команда верификации Read Verify Sector(s) в отличие от обычного чтения не пе- редает данные от устройства. В случае ошибки на адрес сбойного сектора указы- вает блок командных регистров. Запрос прерывания выполняется после испол- нения команды. Команды записи секторов Write DMA, Write Sector(s), Write Long, Write Multiple рабо- тают аналогично соответствующим им командам чтения и также имеют версии с повторами и без. Команда записи с верификацией Write Verify аналогична ко- манде Write Sector(s), но для каждого сектора после записи выполняется кон- трольное считывание. Для логической инициализации (очистки области) дисков имеется команда записи Write Same, которая позволяет записать в группу секто- ров содержимое 512 байт, принятых от хоста. Если в регистр свойств занесен код 22h, область записываемых секторов определяется регистрами командного блока. Если в регистр свойств занесен код DDh, запись производится во все дос- тупные секторы устройства. Команды блочного обмена Read Multiple и Write Multiple отличаются от обычных (с обменом РЮ) тем, что запросы прерывания вырабатываются не на каждый
8.2. Пакетный интерфейс ATAPI 143 сектор, а на блок секторов, размер которого задан командой Set Multiple Mode. Кроме того, в случае неисправимой ошибки чтения содержимое блока команд- ных регистров не определено (не указывает на сбойный сектор). За счет сокра- щения числа прерываний, которые должен обслужить процессор, блочный ре- жим в многозадачной системе позволяет повысить производительность на 30 %. Производительность обмена зависит от размера блока. Размер, оптимальный для устройства, может не быть оптимальным для ОС. Команды с расширенной адресацией (с суффиксом Ext) используют двойные ко- мандные регистры CH, CL, SN и SC, в которых размещается линейный 48-битный адрес (LBA-48, см. 7.5). В этих командах регистр D/Н используется только для за- дания номера устройства. Команды, выполняемые с постановкой в очередь (Read DMA Queued (Ext), Write DMA Queued (Ext)), должны сопровождаться командой Service, которая служит для оп- ределения тега исполненной команды. В этих командах использование регист- ров FR и SC специфично (см. 7.8). Команды, выполняемые очередями NCQ (Read FPDMA Queued, Write FPDMA Queued), введенные в SATA II, применяют только адресацию LBA-48. Они не требуют до- полнительных команд для продолжения обслуживания, но до их подачи следует проинициализировать контексты DMA для используемых тегов. В этих командах специфично использование регистров FR и SC, а обработка ошибок выполняется через чтение журнала (см. 8.4). В SATA II нет указаний на неприменимость дан- ных команд к устройствам с пакетным интерфейсом (все вышеперечисленные команды применимы только для непакетных устройств). Вспомогательное назначение имеют команды поиска. По команде поиска Seek устройство устанавливает головки на заданный цилиндр/трек и считывает иден- тификатор сектора. 8.2. Пакетный интерфейс ATAPI Для подключения к интерфейсу АТА приводов CD/DVD и стримеров (а также других устройств) недостаточно набора регистров и системы команд АТА. Для них существует аппаратно-программный интерфейс ATAPI (АТА Package Inter- face — пакетный интерфейс АТА). Устройство ATAPI поддерживает минималь- ный набор команд АТА, который неограниченно расширяется 16-байтным ко- мандным пакетом. Командный пакет посылается хостом в регистр данных устройства (в режиме РЮ) по команде Packet. Структура командного пакета (блок дескрипторов) происходит от SCSI, что обеспечивает схожесть драйверов для устройств с интерфейсами SCSI и ATAPI. При любой длине блока дескрип- торов, которая определяется кодом команды (нулевой байт пакета), передавае- мый пакет имеет длину 16 байт, но используется только указанное количество байтов. Классификация устройств совпадает с принятой в SCSI (см. 9.4), класс устройства сообщается им в начале блока параметров идентификации. Систему команд и структуру пакетов стандарт ATA/ATAPI не описывает, но для каждого класса устройств в SCSI определен стандартизованный набор команд с опреде- ленной структурой пакетов.
144 Глава 8. Система команд ATA/ATAPI и SATA Интерфейс ATAPI может использоваться со стандартными адаптерами и кон- троллерами АТА и SATA — никаких модификаций аппаратного протокола (и транспортного для SATA) не требуется1. Для традиционного хост-адаптера поддержка ATAPI осуществляется чисто программно, в AHCI предусмотрен ме- ханизм доставки пакета с использованием контроллера DMA. Устройства ATAPI имеют следующие особенности: ♦ Команду Identify Device они должны отвергать, устанавливая в блоке команд- ных регистров сигнатуру ATAPI, чтобы хост не пытался к ним обратиться как к устройствам АТА. Для идентификации устройств ATAPI предназначе- на специальная команда Identify Packet Device, а некоторые поля блока пара- метров, сообщаемых устройством, трактуются иначе (см. далее). ♦ Для программного сброса устройства ATAPI предназначена команда Device Reset, которую устройства АТА отвергают. Программный сброс через регистр управления не прекращает выполнение команды Packet. ♦ Специфические команды вместе с необходимыми параметрами передаются по команде Packet, код которой является недействительным для устройств АТА. Для устройств ATAPI допустимы далеко не все команды (см. табл. 8.1). Обяза- тельная команда Read Sector(s) устройствами ATAPI выполняется своеобразно: она отвергается, но в блоке командных регистров оставляет сигнатуру пакетного устройства. Получив команду Packet, устройство устанавливает бит занятости BSY и готовит- ся принять пакет. По готовности к приему оно устанавливает бит DRQ и сбрасыва- ет бит BSY, что является сигналом хосту для передачи пакета в режиме РЮ. Во время передачи последнего слова устройство сбрасывает бит DRQ, устанавливает бит BSY и начинает отработку пакетной команды. При подаче команды Packet регистр свойств FR содержит признаки команды: ♦ бит 0 — DMA — является указанием на использование режима DMA или Ultra- DMA для обмена данными; ♦ бит 1 — OVL — является признаком возможности перекрытия команд. Регистры СН и CL содержат лимит счетчика байтов данных, передаваемых по каж- дому введению бита DRQ в режиме РЮ. Если команда не предусматривает обмена данными, поле игнорируется. Если общее число требуемых байтов данных пре- вышает лимит, значение лимита задается четным. Если оно равно или меньше лимита, лимит нечетен. Значение лимита FFFFh воспринимается устройством как FFFEh. Лимит счетчика, как и бит DMA, к передаче пакета отношения не имеет — оба относятся к данным, передаваемым при исполнении команды, за- ключенной в пакет. 1 В первое время после появления устройств ATAPI возникали проблемы совместимости устройств со сложными (по тем временам) контроллерами АТА. Эти контроллеры, имеющие собственные процессор, память и встроенное ПО (firmware), могли «не догады- ваться», что в регистр данных устройства помимо 512-байтных блоков данных можно за- писывать 16-байтный блок с командным пакетом.
8.2. Пакетный интерфейс ATAPI 145 Регистр D/H используется только для выбора устройства. Для устройств, поддер- живающих очереди команд, биты [7:3] регистра SC содержат тег задания (Тад). После подачи команды регистр SC помимо тега будет содержать следующие биты: ♦ бит 2 — REL (Release) — признак освобождения шины (для перекрывающихся команд); ♦ бит 1 — I/O (Input/Output) — указатель направления передачи данных (0 — передача к устройству, 1 — к хосту); ♦ бит 0 — C/D (Command/Data) — признак передачи команды (1) или данных (0). В регистре состояния SR некоторые биты получают новое назначение: ♦ бит 5 — DMRDY (DMA Ready) — при DRQ=1 используется как признак готовно- сти к обмену в режиме (Ultra) DMA, при DRQ=O является признаком отказа устройства DF (Device Fault); ♦ бит 4 — SERV (Service) — признак готовности к обслуживанию команды, осво- бодившей шину; ♦ биты 1, 2 не используются; ♦ бит 0 — СНК (Check) — признак ошибки. Остальные биты сохранили обычное назначение. После подачи команды Packet хост определяет состояние устройства, прочитав его регистры. Возможны следующие варианты: ♦ Ожидание команды Packet: в регистре SC биты C/D=l, 1/0=0, REL=O, поле Tag со- держит ранее установленное значение. В регистре состояния BSY=O, DMRDY=O, СНК=О, DRQ=1, бит SERV может указывать на наличие команды, ожидающей об- служивания. ♦ Передача данных: в регистре SC биты C/D=O, REL=O, I/O указывает на направление передачи. Регистры CH, CL при использовании РЮ содержат счетчик байтов дан- ных. В регистре состояния BSY=O, DRQ=1, СНК=О, DMRDY указывает на режим DMA, бит SERV может указывать на наличие команды, ожидающей обслуживания. ♦ Освобождение шины: в регистре SC биты C/D=O, 1/0=0, REL=1, поле Tag содер- жит тег. В регистре состояния BSY=0, DMRDY=0, CHK=0, DRQ=0, бит SERV может указывать на наличие команды, ожидающей обслуживания. ♦ Запрос обслуживания: в регистре SC биты C/D=0, 1/0=0, REL=1, поле Tag содер- жит тег. В регистре состояния BSY=0, DMRDY=0, CHK=0, DRQ=0, бит SERV=1. ♦ Успешное завершение: в регистре SC биты C/D=l, 1/0=1, REL=0, поле Tag содер- жит тег. В регистре состояния BSY=0, DRDY=1, CHK=0, DRQ=0, бит SERV может ука- зывать на наличие команды, ожидающей обслуживания. ♦ Завершение с ошибкой (только после передачи последнего байта пакета): в регистре SC биты C/D=l, 1/0=1, REL=0, поле Tag содержит тег. В регистре со- стояния BSY=0; DRDY=1; DRQ=0; DF=1 при отказе устройств СНК=1, если регистр ошибок содержит код ошибки; бит SERV может указывать на наличие коман- ды, ожидающей обслуживания. В регистре ошибок ER биты 0 и 1 трактуются в зависимости от команды, бит 2 — признак отвергнутой команды (ABRT), биты [7:4] могут содержать уточненное состояние.
146 Глава 8. Система команд ATA/ATAPI и SATA 8.3. Инициализация, идентификация и конфигурирование устройств Устройства АТА воспринимают три вида сброса в исходное состояние: ♦ Сброс по включению питания (power on reset) — выполняется самотестиро- вание, запускается двигатель, проверяется механика, устанавливаются пара- метры умолчания, интерфейс, и регистры сбрасываются в исходное состояние. ♦ Аппаратный сброс (hardware reset) по сигналу RESET# — выполняется само- тестирование, устанавливаются параметры умолчания, интерфейс сбрасыва- ется в исходное состояние. ♦ Программный сброс (software reset) по установке бита SRST регистра DC — ин- терфейс сбрасывается в исходное состояние. Для устройств ATAPI помимо этих трех видов сброса имеется четвертый, реали- зуемый командой Device Reset, по которой интерфейс сбрасывается в исходное состояние. Устройства АТА эту команду отвергают. Устройства SATA выполняют сброс по сигналу COMRESET, который может по- явиться как по инициативе хоста (перечисленные ранее условия сброса), так и из-за событий на интерфейсе. Событиями, вызывающими сброс, является под- ключение-отключение интерфейса и просто потеря сигнала. Для того чтобы уст- ройство SATA по сигналу COMRESET, о котором хост может «не знать», «не за- бывало» изменения конфигурации, программно выполненные хостом, в SATA II есть специальное свойство (feature) сохранения программных параметров (см. далее). После любого сброса или выполнения команды диагностики устройство в блоке командных регистров содержит сигнатуру, определяющую его тип: ♦ SC=Olh, SN=Olh, CL=OOh, CH=OOh, DH=OOh - устройства ATA; ♦ SC=Olh, SN=Olh, CL=14h, CH=EBh, DH=OOh или lOh — устройства ATAPI (значе- ние DH=10h будет после выполнения команды Device Reset устройством 1); ♦ SC=Olh, SN=Olh, CL=69h, CH=96h, DH=OOh — мультиплексор портов SATA; ♦ SC=Olh, SN=Olh, CL=3Ch, CH=C3h, DH=OOh — мост SEMB с подключенным про- цессором SEP (SATA II); ♦ SC=FFh, SN=FFh, CL=FFh, CH=FFh, DH=FFh — мост SEMB с неподключенным процессором SEP (SATA II). В системе команд имеются средства идентификации свойств и управления свой- ствами устройств, включая средства обновления встроенного ПО. Команда идентификации Identify Device позволяет считать из контроллера блок из 256 слов, характеризующих устройство АТА (паспорт диска). Устройства с пакетным интерфейсом эту команду должны отвергать, для них имеется анало- гичная команда Identify Packet Device. Блок параметров может храниться как в энергонезависимой памяти устройства, так и на самом носителе в месте, недос- тупном для обычных обращений. Если устройство не может сообщить все пара- метры (блок хранится на носителе, а мотор остановлен), на это укажет бит 2 ело-
8.3. Инициализация, идентификация и конфигурирование устройств 147 ва 0 при этом должны быть действительны хотя бы слова 0 и 2. Состав полей блока для непакетных устройств приведен в табл. 8.2, для устройств ATAPI — в табл. 8.3. Графа «F/V» определяет свойства соответствующих полей: F — со- держимое фиксировано, V — содержимое меняется в зависимости от состояния устройства или выполненных команд, X — специфично для данного устройства (может быть и F, и V), R — зарезервированные поля. Для устройств со сменны- ми носителями значения полей F могут меняться при смене носителя. Числовые данные в блоке параметров передаются в порядке младший-старший, для 32- разрядных чисел в первом слове идут младшие 16 бит, во втором — старшие. Строковые значения (только печатные символы ASCII) передаются слева напра- во: первая буква — в старшем байте первого слова, вторая — в младшем, третья — в старшем байте второго слова и т. д. Если строка короче отведенного поля, она справа расширяется пробелами (код 20h). Таблица 8.2. Информация идентификации устройства АТА Слово F/V Назначение 0 Общая конфигурационная информация: бит 15: признак ATAPI (0 для всех устройств АТА); бит 7: 1 — устройство со сменным носителем; бит 6: 1 — устройство (контроллер) с несменным носителем Уб; бит 2 — сообщение параметров не завершено, см. слово 2 (5+); бит 0 — зарезервирован (=0). Остальные биты свободны (2+); в АТА-1 определяли свойства накопителя (метод кодирования, особенности форматирования, скорость передачи и др.) 1 F Число цилиндров в конфигурации по умолчанию 2 R Специфическая конфигурация (5+): 37C8h — устройство требует для раскрутки мотора подкоманду SET FEATURES, сообщенный блок параметров неполный; 738Ch — устройство требует для раскрутки мотора подкоманду SET FEATURES, сообщенный блок параметров полный; 8C73h — устройство не требует для раскрутки мотора подкоманды SET FEATURES, сообщенный блок параметров неполный; C837h — устройство не требует для раскрутки мотора подкоманды SET FEATURES, сообщенный блок параметров полный 3 F Число головок в конфигурации, заданное по умолчанию 4, 5 X Специфично, освобождено в 4+ 6 F Число секторов на треке в конфигурации, заданное по умолчанию 7, 8 X Специфично, освобождено в 4+, отдано для CFA (5+) 9 X Специфично, освобождено в 4+ 10-19 F Серийный номер (20 символов ASCII), если слово 10 ненулевое, иначе — специфичная информация Продолжение &
148 Глава 8. Система команд ATA/ATAPI и SATA Таблица 8.2 (продолжение} Слово F/V Назначение 20, 21 X Специфично, освобождено в 4+. В АТА-1 описывается тип буфера (слово 20: 0 — неизвестный, 1 — односекторный, 2 — двухпортовый многосек- торный, 3 — двухпортовый многосекторный с кэшированием чтения) и размер (слово 21, размер в блоках по 512 байт) 22 F Число дополнительных байтов в командах «длинного» чтения и записи (в АТА-4 объявлено устаревшим) 23-26 F Версия встроенного ПО (8 символов ASCII), если слово 23 ненулевое, иначе — специфичная информация 27-46 F Номер модели (40 символов ASCII), если слово 27 ненулевое, иначе — специфичная информация 47 X Биты 15-8 специфичны (в 4+ — 80h) F Биты 7-0 — возможности множественных операций (Read/Write Multiple): 00 — зарезервирован, 01h-FFh — максимальное количество секторов, передаваемых за сеанс 48 R Зарезервировано 49 F Возможности: биты 15-14 — зарезервированы для ATAPI; бит 13 — значения таймера режима Standby (1 — задается в соответст- вии со стандартом, 0 — управляются устройством); бит 12 — зарезервирован для ATAPI; бит 11:1— IORDY поддерживается (для PIO Mode 3 и выше — обяза- тельно), 0 — IORDY может поддерживаться; бит 10:1— сигнал IORDY может быть запрещен командой Set Features; бит 9 =1 — указание на поддержку LBA и действительности слов 60-61; бит 8=1— указание на поддержку DMA; биты 7-0 специфичны (освобождены в 4+) 50 F Возможности: бит 15=0; бит 14=1; биты 13-1 — зарезервированы; бит 0=1 указывает на специфичное значение минимума для Standby Timer (4+) 51 F Биты 15-8: длительность цикла обмена в режиме РЮ. Если значение па- раметра не соответствует режимам 0, 1 или 2, используется РЮ Mode 0. Устарело в 5+. Биты 7-0 специфичны (освобождены в 4+) 52 F Биты 15-8: временной режим цикла одиночного обмена DMA (Singleword DMA). Если значение параметра не соответствует режимам 0, 1 или 2, используется Mode 0. Если поддерживаются слова 62 или 63, значение поля игнорируется (освобождены в 4+). Биты 7-0 специфичны (освобождены в 4+) 53 R Резерв
8.3. Инициализация, идентификация и конфигурирование устройств 149 Слово F/V Назначение F, V Биты 15-3 — зарезервированы. Бит 2: 1 — поля в слове 88 действительны, 0 — нет. Бит 1:1— поля в словах 64-70 действительны, 0 — нет. Любое устрой- ство, поддерживающее режимы PIO Mode 3 и выше или Multiword DMA Mode 1 и выше, должно использовать эти поля. Бит 0 (тип V): 1 — поля в словах 54-58 действительны, 0 — поля могут быть действительны (5+ — недействительны); устарело в 6+ 54 V Текущее число цилиндров. Для устройств АТА-1, если команда Initialize Device Parameters не применялась, значение слова специфично 55 V Текущее число головок. Для устройств АТА-1, если команда Initialize Device Parameters не применялась, значение слова специфично 56 V Текущее число секторов на трек. Для устройств АТА-1, если команда Initialize Device Parameters не применялась, значение слова специфично 57-58 V Текущая емкость в секторах для режима CHS (произведение слов 54, 55, 56) 59 V Биты 15-9 — зарезервированы. Бит 8: 1 — установка для многосекторной передачи действительна. Биты 7-0: текущая установка максимального числа секторов для много- секторных команд 60-61 F Общее число секторов, адресуемых пользователем в режиме LBA 62 V В АТА-2 — режим одиночного обмена DMA (3+ — устарело): биты 15-8 — активный режим: бит 8=1 — Mode 0, бит 9=1 — Mode 1 и т. д. Единичное значение может иметь только один бит F Биты 7-0 — поддерживаемые режимы: бит 0=1 — Mode 0, бит 1=1 — Mode 1 и т. д. 63 V, F Режим множественного обмена Multiword DMA: биты 15-8(V): активный режим: бит 8=1 — Mode 0, бит 9=1 — Mode 1 и бит 10=1 — Mode 2. Единичное значение может иметь только один бит, но только если в слове 88 биты 15-8 нулевые (активным может быть только один режим DMA); биты 7-0 (F): поддерживаемые режимы: бит 0=1 — Mode 0, бит 1=1 — Mode 1 и 0, бит 2=1 — Mode 2, 1 и 0 64 F Биты 15-8 — зарезервированы. Биты 7-0 — поддерживаемые прогрессивные режимы программного об- мена (Advanced РЮ): бит 0=1 — РЮ Mode 3, бит 1=1 — РЮ Mode 4, биты 2-7 — зарезервированы 65 F Минимальная длительность цикла передачи множественного DMA (в на- носекундах) 66 F Рекомендованная длительность цикла передачи множественного DMA (в наносекундах). При многосекторной передаче обеспечивает оптималь- ную скорость, при которой устройство не будет тормозить поток снятием запроса DMARQ Продолжение &
150 Глава 8. Система команд ATA/ATAPI и SATA Таблица 8.2 (продолжение) Слово F/V Назначение 67 F Минимальная длительность цикла передачи РЮ без использования сиг* нала готовности (в наносекундах) 68 F Минимальная длительность цикла передачи РЮ с использованием сигна* ла готовности IORDY (в наносекундах) 69-70 R Зарезервировано для поддержки перекрытия команд и очередей 71-74 R Зарезервировано для ATAPI 75 F Биты 15-5 — зарезервированы. Биты 4-0 — максимальная глубина очереди команд -1 (0 — для уст- ройств, не поддерживающих очереди) 76 F Возможности SATA: биты 15:11 — резерв; бит 10 — поддержка счетчиков событий физического интерфейса; бит 9 — поддержка запросов управления энергопотреблением интер- фейса; бит 8 — поддержка NCQ; биты 7:3 — резерв; бит 2 — поддержка 2-го поколения скорости; бит 1 — поддержка 1-го поколения скорости (1,5 Гбит/с); бит 0 — резерв (0) 77 F Возможности SATA (резерв) 78 F Поддерживаемые свойства SATA: биты 15:7 — резерв; бит 6 — поддержка сохранения программных установок; бит 5 — резерв; бит 4 — поддержка упорядоченной доставки данных; бит 3 — поддержка управления энергопотреблением интерфейса по ини- циативе устройства; бит 2 — поддержка оптимизации автозапуска DMA; бит 1 — поддержка ненулевого смещения в информационной структуре DMA Setup; бит 0 — резерв (0) 79 V Разрешение свойств SATA, назначение битов аналогично слову 78 80 F Главный номер версии интерфейса (если не OOOOh или FFFFh), единич- ное значение каждого бита означает поддержку соответствующей вер- сии: бит 0 — резерв, бит 1 — АТА-1, бит 2 — АТА-2, бит 3 — АТА-3, бит 4 — ATA/ATAPI-4 и т. д. 81 F Дополнительный номер версии интерфейса (если не OOOOh или FFFFh). Для опубликованных (ANSI) версий: 0004h — АТА 2, 000А — АТА-3, 0012h — ATA/ATAPI-4, 0016h — ATA/ATAPI-5
8.3. Инициализация, идентификация и конфигурирование устройств 151 Слово F/V Назначение 82 F Поддержка команд и свойств (если слова 82 и 83 не равны OOOOh или FFFFh, 3+): бит 15 — не используется; бит 14 — команды Nop; бит 13 — команды Read Buffer; бит 12 — команды Write Buffer; бит 11 — не используется; бит 10 — ограничение доступного пространства; бит 9 — команда Device Reset; бит 8 — вырабатывание прерывания во время выполнения команды Service; бит 7 — прерывание по освобождению шины; бит 6 — кэширование с упреждающим чтением; бит 5 — кэширование записи; бит 4 — команда Packet (для АТА должен быть 0); бит 3 — управление энергопотреблением; бит 2 — смена носителя; бит 1 — команды Security; бит 0 — команды SMART 83 F Поддержка команд и свойств (как и слово 82, 3+): бит 15 = 0; бит 14 = 1; бит 13 — поддержка команды Flush Cache Ext (6+); бит 12 — поддержка команды Flush Cache (6+); бит 11 — поддержка оверлея конфигурации (6+); бит 10 — поддержка LBA-48 (6+); бит 9 — поддержка управления шумом (6+); бит 8 — расширение Set Мах для защиты (5+); бит 7 — резерв; бит 6 — специальная команда запуска двигателя после включения (5+); бит 5 — Power-Up In Standby (5+); бит 4 — уведомление о смене носителя; бит 3 — расширенное управление энергопотреблением (АРМ); бит 2 — команды CFA; бит 1 — команды Read/Write DMA Queued; бит 0 — команда Download Microcode Продолжение &
152 Глава 8. Система команд ATA/ATAPI и SATA Таблица 8.2 (продолжение) Слово F/V Назначение 84 F Поддержка команд и свойств (если слова 82, 83 и 84 не равны OOOOh или FFFFh, 4+): бит 15 = 0; бит 14 = 1; биты 13-6 — зарезервированы; бит 5 — поддержка журналов (команды Read/Write Log Ext) (6+); бит 4 — резерв; бит 3 — поддержка трансляции команд для карт памяти (6+); бит 2 — поддержка серийного номера носителя (слова 205:176) (6+); бит 1 — поддержка самотестирования SMART (6+); бит 0 — поддержка журналов SMART (6+) 85-87 F Разрешенные команды и свойства; поля и правила аналогичны словам 82-84(4+) 88 V Режим UltraDMA (4+): биты 15-14 — зарезервированы; биты 8 -13: активный режим UltraDMA: бит 8=1 — Mode 0, бит 9=1 — Mode 1 и т. д. Единичное значение может иметь только один бит, но только если в слове 63 биты 15-8 нулевые; биты 7-6 зарезервированы; биты 5-0: поддерживаемые режимы UltraDMA: бит 0=1 — Mode 0, бит 1=1 — Mode 1 и 0 и т. д. 89 F Время защитного стирания (4+): 0 — не указано; значение 1-254, умно- женное на 2, дает время в минутах, 255 — более 508 мин 90 F Время расширенного защитного стирания (аналогично слову 89, 4+) 91 V Текущий уровень Advanced Power Management (4+) 92 V Код номера установки главного пароля (Master Password Revision Code, 5+) 93 V Результат аппаратного сброса (5+): бит 15 = 0; бит 14 = 1; бит 13 — обнаруженный уровень CBUD#: 0 — ниже VIL, 1 — выше VIH; биты 12-8 — результаты сброса устройства 1 (в устройстве 0 обнулены); бит 12 — резерв; бит 11 = 1— устройство 1 ввело сигнал PDIAG#, 0 — нет; биты 10-9 — способ, которым устройство 1 узнало свой номер (00 — ре- зерв, 01 — по джамперу, 10 — по CSEL, 11 — иным или неизвестным способом); бит 8=1; биты 7-0 — результаты сброса устройства 0 (в устройстве 1 обнулены); бит 7 — резерв; бит 6=1— устройство 0 ответило при выборе устройства 1,0 — нет;
8.3. Инициализация, идентификация и конфигурирование устройств 153 Слово F/V Назначение бит 5=1— устройство 0 обнаружило сигнал DASP#, 0 — нет; бит 4=1— устройство 0 обнаружило сигнал PDIAG#, 0 — нет; бит 3=1— устройство 0 успешно прошло диагностику, 0 — нет; биты 2-1 — способ, которым устройство 0 узнало свой номер (00 — ре- зерв, 01 — по джамперу, 10 — по CSEL, 11 — иным или неизвестным спо- собом); бит 0 = 1 94 V Биты 15-8 — рекомендованное значение уровня управления акустиче- ским шумом (6+). Биты 7-0 — текущее значение уровня управления акустическим шумом, FEh — максимальная производительность в ущерб тишине (6+) 95-99 Зарезервировано 100-103 Число секторов, доступное в LBA-48 (6+) 104-126 R Зарезервировано 127 F Биты 15-2 — зарезервированы. Биты 1-0 — уведомление о смене носителя (4+): 00 — не поддерживает- ся, 01 — поддерживается, 1х — зарезервированы 128 V Состояние защиты (3+): биты 15-9 — зарезервированы; бит 8 — уровень защиты: 0 — высокий, 1 — максимальный; биты 7-6 — зарезервированы; бит 5: 1 — поддержка расширенного защитного стирания; бит 4: 1 — счетчик попыток иссяк; бит 3: 1 — устройство заморожено; бит 2: 1 — устройство закрыто; бит 1:1— защита установлена; бит 0: 1 — защита поддерживается 129-159 X Специфично 160 R Для устройств CFA, поддерживающих режим Power Mode 1: бит 15: 1 — слово 160 поддерживается; бит 14 — резерв; бит 13 — для выполнения одной или более команд устройства CFA тре- буется Power Mode 1; бит 12 — для устройства CFA режим Power Mode 1 запрещен; биты 11-0 — максимальный ток, мА 161-175 R Зарезервировано для CFA\ 176-205 Серийный номер носителя (6+). Первые 40 байт — номер, последние 20 — код производителя. Для съемных устройств АТА с фиксированным носителем первое из этих полей совпадает со словами 46:27, второе — со словами 19:10 206-254 R Зарезервировано Продолжение &
154 Глава 8. Система команд ATA/ATAPI и SATA Таблица 8.2 (продолжение) Слово F/V Назначение 255 F/V Контроль целостности (5-ь): биты 15-8 — контрольная сумма (сумма всех 512 байт по модулю 256 должна быть нулевой); биты 7-0 — сигнатура A5h (признак использования контрольной суммы) Таблица 8.3. Идентификация устройств ATAPI Слово F/V Назначение 0 F Общая конфигурационная информация: биты [15:14] = 10 для всех устройств ATAPI (11 — зарезервировано); бит 13 — зарезервирован; биты 12-8 — набор поддерживаемых команд (SCSI-класс устройства); бит 7: 1 — устройство со сменным носителем. Бит 6-5: реакция устройства на получения команды Packet (00 —устано- вит DRQ в течение 3 мс, 01 — введет INTRQ по установке DRQ (устарело 5+), 10 — установит DRQ в течение 50 мкс, 11 — зарезервировано); биты 4-3 — зарезервированы; бит 2 — сообщение параметров не завершено; биты 1-0 — длина командного пакета (00 — 12 байт, 01 — 16 байт, 1х — зарезервировано) 1 R Зарезервировано 2 R Специфическая конфигурация (5+) 3-9 R Зарезервировано 10-19 F Серийный номер (20 символов ASCII) 20-22 R Зарезервировано 23-26 F Версия встроенного ПО (8 символов ASCII) 27-46 F Номер модели (40 символов ASCII) 47-48 R Зарезервировано 49 F Возможности: бит 15: 1 — поддержка чередующегося (interleaved) режима DMA; бит 14: 1 — поддержка очередей команд; бит 13: 1 — поддержка перекрывающихся команд; бит 12: 1 — требуется программный сброс (устарело 4+); бит 11:1— сигнал IORDY поддерживается; бит 10: 1 — сигнал IORDY может быть запрещен командой Set Features; бит 9: поддержка LBA (всегда 1); бит 8: 1 — поддержка DMA; биты 7-0 специфичны 50 R Возможности (как для АТА)
8.3. Инициализация, идентификация и конфигурирование устройств 155 Слово F/V Назначение 51 F Как для АТА (устарело 5+) 52 R Зарезервировано 53 F Биты 15-3 зарезервированы. Бит 2: 1 — поля в слове 88 действительны, 0 — нет. Бит 1:1— поля в словах 64-70 действительны, 0 — нет. Устройство, поддерживающее режим PIO Mode 3 и выше или Multiword DMA Mode 1 и выше, должно использовать эти поля. Бит 0: устарел 54-62 R Зарезервировано 63 V, F Режим множественного обмена Multiword DMA (как для АТА) 64 F Прогрессивные режимы РЮ (как для АТА) 65-66 F Параметры цикла передачи множественного DMA (как для АТА) 67-68 F Параметры цикла передачи РЮ (как для АТА) 69-70 R Зарезервированы для поддержки перекрытия команд и очередей 71 F Типовое время (нс) от получения команды Packet до освобождения шины 72 F Типовое время (нс) от получения команды Service до сброса BSY 73-74 R Зарезервировано 75 F Глубина очереди команд (как для АТА) 76-79 R Возможности и свойства SATA (как для АТА, кроме NCQ) 80-81 F Главный и дополнительный номера версии интерфейса (как для АТА) 82 F Поддержка команд и свойств (как для АТА) 83 F Поддержка команд и свойств (как для АТА, но биты 1-3, 10 и 13 зарезер- вированы) 84 F Поддержка команд и свойств (если слова 82, 83 и 84 не равны 0000h или FFFFh): бит 15 = 0; бит 14=1; биты 13-0 — зарезервированы 85-87 F Разрешенные команды и свойства (как для АТА) 88 V, F Режим UltraDMA (как для АТА) 89-92 R Зарезервировано 93 V Результат аппаратного сброса (как для АТА, 5+) 94-124 R Зарезервировано 125 F Поведение ATAPI при нулевом счетчике байтов: если значение 0000, то при нулевом счетчике команда отвергается; если значение отлично от нуля, то оно используется в качестве счетчика при нулевом значении счетчика в командном пакете 126 Устарело Продолжение &
156 Глава 8. Система команд ATA/ATAPI и SATA Таблица 8.3 (продолжение) Слово F/V Назначение 127 F Уведомление о смене носителя (как для АТА) 128 V Состояние защиты (как для АТА) 129-159 X Специфично 160-254 R Зарезервировано 255 F/V Контроль целостности (как для АТА5+) Команда установки параметров Initialize Device Parameters задает режим транс- ляции геометрии в системе CHS. Регистр SC определяет число секторов на трек (SPT), а в поле номера головки регистра DH указывается уменьшенное на единицу число головок. Если устройство не поддерживает запрошенный режим трансля- ции, оно выдает ошибку «команда отвергнута» (старая спецификация АТА не- четко описывала эту ситуацию, и некоторые системы не обнаруживали отказ при данной команде). После запроса неподдерживаемого режима трансляции уст- ройство обнуляет бит 0 слова 53 и блокирует доступ к носителю с ошибкой ID Not Found до запроса поддерживаемого режима трансляции. Устройство обязано поддерживать режим, описанный словами 1, 3 и 6 блока его параметров. Некото- рые устройства АТА-1 требовали, чтобы данная команда обязательно выполня- лась до первого доступа к носителю. Команда установки свойств Set Features (специфичная для устройства) подразу- мевает помещение в регистр свойств кода подкоманды (табл. 8.4). Таблица 8.4. Подкоманды задания свойств устройства Код История Назначение 01h Разрешение 8-битного обмена (в 5+ только для CFA) 02h Разрешение кэширования записи 03h Установка режима передачи по значению регистра SC (табл. 8.5) 04h У4 Разрешение автоматического переназначения дефектных блоков 05h Разрешение расширенного управления энергопотреблением АРМ (уровень в регистре SC) 06h 5+ Разрешение включения в режиме Standby (действует и после любых сбросов) 07h 5+ Запуск двигателя при включении в режиме Standby 09h 5+ Резерв для смещения загрузочной области OAh 6+ Разрешение для устройства CFA режима Power Mode 1 (устройство может потреблять до 500 мА от источника 3,3 или 5 В) 10h S2 Разрешение свойств SATA (табл. 8.6) 31h Запрет уведомления о смене носителя 33h У4 Запрет повторов 40h 6+ Разрешение AV-команд
8.3. Инициализация, идентификация и конфигурирование устройств 157 Код История Назначение 42h 6+ Разрешение управления акустическим шумом, в SC — уровень 44h У4 Установка количества дополнительных байтов в командах Read Long/Write Long 54h У4 Установка количества сегментов кэша по значению регистра SC 55h Запрет упреждающего чтения 5Dh Разрешение прерывания по освобождению шины 5Eh Разрешение прерывания при выполнении команды Service 66h Запрет возврата к параметрам по умолчанию при включении питания 77h У4 Запрет ЕСС 81h Запрет 8-битного обмена (в 5+ только для CFA) 82h Запрет кэширования записи 84h У4 Запрет автоматического переназначения дефектных блоков 85h Запрет расширенного управления энергопотреблением 86h 5+ Запрет включения в режиме Standby 88h У4 Разрешение ЕСС 89h 6+ Резерв для смещения загрузочной области 8 Ah 6+ Запрет для устройства CFA режима Power Mode 1 (переход в режим Power Mode 0, при котором устройство может потреблять до 75 мА от источника 3,3 В или до 100 мА — от источника 5 В. В этом режиме команды чтения, записи и стирания могут и не выполняться) 90h S2 Запрет свойств SATA (см. табл. 8.6) 95h Разрешение уведомления о смене носителя 99h У4 Разрешение повторов 9 Ah У4 Ограничение тока потребления значением в регистре SC, умножен- ным на 4 (мА) AAh Разрешение упреждающего чтения ABh У4 Установка максимального количества кэшируемых блоков по регистру SC BBh У4 Установка 4-байтной длины дополнительного поля для команд Read Long/Write Long COh 6+ Запрет AV-команд C2h 6+ Запрет управления акустическим шумом CCh Разрешение на возврат к параметрам, заданным по умолчанию, при включении питания DDh Запрет прерывания по освобождению шины DEh Запрет прерывания при выполнении команды Service FO-FFh Резерв для CFA
158 Глава 8. Система команд ATA/ATAPI и SATA После включения питания или аппаратного сброса установленные свойства за- меняются принятыми по умолчанию. Результат подкоманд можно и закрепить, подав подкоманду 66h (отмена — подкоманда с кодом CCh). Таблица 8.5. Управление режимом обмена Биты [7:0] Режим обмена 00000 000 Режим РЮ, принятый для устройства по умолчанию 00000 001 Режим РЮ, принятый для устройства по умолчанию; запрет IORDY 00001 ппп Режим РЮ Mode х1 с сигналом IORDY 00010 ппп Режим одиночного доступа DMA Mode х1 00100 ппп Режим множественного доступа DMA Mode х1 01000 ппп Режим UltraDMA Mode х1 10000 ппп Зарезервированы 1 х определяется значением поля ппп. Таблица 8.6. Управление свойствами SATA SC Свойство 01 Использование ненулевого смещения в FIS DMA Setup (передача данных частями) 02 Автоактивация DMA (для NCQ) 03 Смена энергосостояния интерфейса по инициативе устройства 04 Гарантированная упорядоченная доставка фрагментов данных одного запроса 05 Асинхронное уведомление 06 Сохранение действия программных установок после аппаратного сброса 0, 07-255 Зарезервировано Для управления конфигурацией устройства в ATA/ATAPI-6 введен новый на- бор свойств — оверлей конфигурации устройства (device configuration overlay). Оверлей представляет собой 512-байтную структуру, в которой описаны наибо- лее употребляемые свойства устройства: поддерживаемые режимы Multiword DMA и UltraDMA, максимальный LBA-адрес, поддерживаемые команды и свойства (SMART, защита, очереди, управление шумом, 48-битная адресация). Эти же па- раметры устройство сообщает в ответ на команду идентификации. С оверлеем работает новая команда Device Configuration с рядом подкоманд, определяемых значением FR: ♦ Device Configuration Restore (COh) — отмена ограничений, введенных коман- дой Device Configuration Set; ♦ Device Configuration Freeze Lock (Clh) — запрет выполнения любых команд Device Configuration до выключения питания;
8.4. Журналы ошибок и событий 159 ♦ Device Configuration Identify (C2h) — определение максимальных возможно- стей устройства (чтение оверлея). В оверлее не отражается действие преды- дущих команд, урезающих возможности устройства; ♦ Device Configuration Set (C3h) — установка возможностей устройства, которые будут сообщаться в ответе на команду идентификации устройства. Команда задания параметров блочного режима передачи Set Multiple Mode через регистр SC указывает число секторов, передаваемых с одним запросом прерыва- ния. Значению SC=O соответствует запрет блочного режима. После включения питания или аппаратного сброса блочный режим запрещен. Команда диагностики Execute Device Diagnostic, адресуясь всегда к ведущему уст- ройству, выполняется одновременно обоими устройствами. О ее результате ве- домое устройство сообщает ведущему (сигналом PDIAG#). Состояние обоих уст- ройств определяется по диагностическому коду (табл. 8.7), который считывается из битов [6:0] регистра ошибок ведущего устройства. Таблица 8.7. Диагностические коды Код Ведущее устройство Ведомое устройство 01h Нормально Нормально или отсутствует 00h, 02h-7Fh Неисправно Нормально или отсутствует 81h Нормально Неисправно 80h, 82h-FFh Неисправно Неисправно Фиктивная команда Nop, не изменяя содержимого регистров, позволяет считать информацию о состоянии устройства, выполнив всего одну 16-битную запись по адресу в регистре D/H. Команда всегда возвращает бит ошибки «команда отверг- нута». В АТА-4 команда объявлена обязательной для устройств ATAPI и всех устройств, поддерживающих перекрывающиеся команды. Она имеет подкоман- ды, указываемые в регистре свойств. Подкоманда с кодом 00 сбрасывает всю ос- тавшуюся очередь, а с кодом 01 (NOP Auto Poll) на очередь не влияет. Команда загрузки микрокода Download Microcode позволяет модифицировать встро- енное ПО устройства (firmware). В зависимости от кода в регистре свойств за- груженный микрокод будет действовать до выключения питания (FR=01h) или постоянно (FR=07h). Количество загруженных блоков задается регистром SN (старший байт) и SC (младший байт). Таким образом может быть загружено от 0 до 33 553 920 байт, что более чем достаточно для встроенного ПО. Загрузка не- корректного микрокода может привести к выходу устройства из строя. 8.4. Журналы ошибок и событий Журналы (logs) ошибок и событий — это структуры данных о состоянии устрой- ства, сохраняемые на носителе устройства в специальной зоне (не пользователь- ской). Журналы доступны в виде последовательности секторов. Журналы по- явились в спецификации ATA/ATAPI-5 первоначально для системы мониторинга
160 Глава 8. Система команд ATA/ATAPI и SATA состояния (SMART, см. далее). В ATA/ATAPI-6 введены общие команды чте- ния и записи различных журналов, а в SATA II специальные журналы опреде- лили для обработки ошибок при использовании NCQ и счетчиков событий физического интерфейса. Журналы вызываются по номеру (1-байтному); на уст- ройстве имеется доступный для чтения каталог журналов, в котором для каж- дого из 255 возможных номеров журналов указывается их текущая длина (в сек- торах). В стандартах определены структуры данных нескольких журналов. Стандартные журналы со стороны хоста допускают только чтение, их заполняет устройство. Ряд номеров журналов отведен для специфических журналов, за- полняемых хостом (по усмотрению разработчика средств хоста) и устройством (по усмотрению разработчика устройств). Команда чтения журналов Read Log Ext позволяет считать из любого журнала тре- буемое количество секторов информации, начиная с указанного. В команде для задания числа секторов и начального номера используются двойные регистры SC и CL (отсюда окончание — Ext). Адрес (номер) журнала задается в SN, нулевой но- мер соответствует каталогу журналов. Журналы Comprehensive SMART error log и SMART self-test log (номера 02h и 06h соответственно) этой командой считаны быть не могут (для их чтения допустима только подкоманда команды SMART). Для записи в журналы со стороны хоста предназначена команда Write Log Ext (есть и подкоманда SMART Write Log). Журнал с номером1 10h размером в 1 сектор (512 байт), определенный в SATA II, служит для сообщений об ошибках, возникающих при работе с очередями в ре- жиме NCQ. В этом журнале фиксируются состояние блока командных регистров устройства на момент возникновения ошибки, тег запроса (Тад) и признак недей- ствительности тега (NQ). Тег будет недействительным (NQ=1), если ошибка про- изошла не из-за NCQ-команды. Чтение данного журнала является обязательной частью обработки ошибок в NCQ, без этого чтения продолжение исполнения ко- манд невозможно (кроме как через аппаратный сброс или отключение питания). Формат стандартной части журнала приведен в табл. 8.8, байты 256...510 могут использоваться по усмотрению разработчика устройства. Таблица 8.8. Журнал ошибок NCQ Байт Значение Байт Значение 0 Бит 7 — NQ, биты [4:0] — Тад 1 Резерв 2 SR 3 ER 4 SN 5 CL 6 СН 7 D/H 8 SN.Exp 9 CLExp 10 СН_Ехр 11 Резерв 12 SC 13 SCExp 14...510 Резерв 511 Контрольная сумма 1 В этой спецификации фигурирует page 10h, что, очевидно, все-таки является номером журнала, передаваемым через регистр SN.
8.5. Мониторинг состояния — SMART 161 В SATA II введен журнал с номером llh, объединяющий счетчики событий фи- зического интерфейса. В стандарте определен ряд счетчиков, каждый из которых считает количество ошибок определенного типа. Счетчики могут быть 16-, 32-, 48- или 64-битными. Журнал имеет размер в одну страницу, которая начинается с зарезервированного двойного слова. Далее следуют структуры, начинающиеся со слова идентификатора счетчика, за которым следуют байты самого счетчика. В идентификаторе кодируются длина счетчика (в битах [14:12] — число слов) и номер (собственно идентификатор в битах [11:0]); бит 15 является признаком специфического счетчика (для него длина кодируется аналогично). Признаком окончания структур счетчиков является нулевое слово очередного идентифика- тора. В 511-м байте журнала находится контрольная сумма. 8.5. Мониторинг состояния — SMART Для предупреждения о возможном отказе устройства служит технология SMART (Self-Monitoring, Analysis and Reporting Technology — технология самонаблюде- ния, анализа и сообщений). Предсказуемые отказы (predictable failure) появля- ются в результате выхода параметров за некоторый порог. Отслеживаемые пара- метры: время разгона до заданной скорости, время позиционирования, процент ошибок позиционирования, «высота полета» головок, производительность (за- висящая от числа повторов), количество использованных резервных секторов и др. Мониторинг может осуществляться двояко: в рабочем режиме (on-line) он осуществляется одновременно с выполнением команд хоста (при возможном не- котором замедлении), в автономном режиме (off-line) мониторинг выполняется устройством в паузе между «полезными» командами, не снижая производитель- ности. Если во время выполнения этой процедуры приходи? внешняя команда, то мониторинг прерывается на время исполнения команды, но начало исполне- ния команды может задержаться на время до двух секунд. Значения атрибутов, за которыми ведется наблюдение, сохраняются в служебной области носителя. Для непакетных устройств имеется команда SMART (пакетные используют для этих целей собственный протокол), подкоманды которой задаются через регистр свойств FR. Перед подачей команд в регистры CL и СН заносятся константы: CL=4Fh, CH=C2h. Ниже перечислены те из подкоманд команды SMART, которые стандартизованы. ♦ SMART Read Data (FR=D0h) — чтение блока данных SMART. Блок данных (512 байт) имеет стандартную структуру, в нем содержатся следующие сведения: • состояние мониторинга в рабочем режиме (запускался ли, завершался ли успешно, прерывался ли и почему); • состояние самотестирования (чем кончился предыдущий тест, тестирова- ние выполняется в данный момент); • время до завершения тестирования в автономном режиме; • возможности тестирования в автономном режиме, поддержка журнала ре- гистрации ошибок;
162 Глава 8. Система команд ATA/ATAPI и SATA • рекомендуемое время, через которое имеет смысл запрашивать результат после запуска коротких и расширенных тестов; • информация, специфичная для производителя. ♦ SMART Enable/Disable Attribute Autosave (FR=D2h) — управление автосохранени- ем атрибутов: SC=OOh — запрет, SC=Flh — разрешение автосохранения. Подко- манда необязательная. Автосохранение в энергонезависимой памяти выпол- няется по наступлению какого-то события (зависит от разработчика). ♦ SMART Save Attribute Values (FR=D3h) — сохранение значений атрибутов в энер- гонезависимой памяти устройства. ♦ SMART Execute Off-Line Immediate (FR=D4h) — немедленное выполнение монито- ринга в режиме off-line или captive. В режиме off-line устройство, получив ко- манду, сразу выполняет действия, обычные при завершении команд (снять флаг занятости и т. п.). В режиме captive команда выполняется как обычная, то есть устройство устанавливает флаг занятости на время ее выполнения; по окончании в регистрах сообщается результат и снимается флаг занятости. Функции задаются в регистре SN: • 0 — выполнение программы SMART off-line в режиме off-line] • 1 — выполнение короткого самотестирования SMART в режиме off-line] • 2 — выполнение расширенного самотестирования SMART в режиме off- line] • 127 — прекращение самотестирования SMART; • 129 — выполнение короткого самотестирования SMART в режиме captive] • 130 — выполнение расширенного самотестирования SMART в режиме captive. Для подкоманд, определяющих режим captive, в случае ошибок после их вы- полнения регистры CL и СН позволяют уточнить ошибку: если CL=F4h, CH=2Ch, то не прошло самотестирование, если CL=4Fh, CH=C2h, то ошибка иная (не- поддерживаемые функции, ошибка задания параметров и т. п.). ♦ SMART Read Log (FR=D5h) — чтение журнала ошибок (5+). В регистре SC указы- вается число передаваемых секторов, в регистре SN — адрес журнала. Журна- лов может быть несколько, имеется и каталог журналов. В спецификации за- дана структура каталога и некоторых журналов. ♦ SMART Write Log (FR=D6h) — запись в журнал ошибок или в каталог журналов (5+). ♦ SMART Enable Operations (FR=D8h) — разрешение команд и внутренних функций SMART. ♦ SMART Disable Operations (FR=D9h) — запрет команд и функций SMART: все ко- манды SMART, кроме Smart Enable Operations, будут отвергаться. Состояние (разрешены или нет функции SMART) сохраняется и после последующих включений питания. ♦ SMART Return Status (FR=DAh) — опрос результатов мониторинга. Если какой- либо порог перейден, регистры СН и CL будут иметь значения C2h и 4Fh соот- ветственно, если все в порядке — 2Ch и F4h.
8.6. Работа со сменными носителями 163 8.6. Работа со сменными носителями Для накопителей со сменными носителями требуются специальные меры, пре- дотвращающие: ♦ потерю данных при смене носителя (страхуют от попытки записи по каталогу прежнего носителя); ♦ потерю данных при изъятии носителя, когда кэш записи еще не выгружен; ♦ несанкционированную смену носителя. Для накопителей со сменными носителями в АТА-2 были предназначены коман- ды загрузки и выгрузки, подтверждения смены носителя, блокировки и разбло- кировки устройства — Boot - Post-Boot, Boot - Pre-Boot, Media Eject, Acknowledge Media Change, Door Lock, Door Unlock. Их реализация специфична для каждой модели устройства. В АТА-4 принят иной набор команд для сменных носителей. Здесь может рабо- тать один из двух механизмов (наборов свойств) защиты от несанкционирован- ной смены носителя, названия которых трудно поддаются легко различимому переводу: ♦ Removable Media Status Notification — уведомление о состоянии сменного но- сителя, применимо к устройствам и АТА, и ATAPI; ♦ Removable Media — сменный носитель, только для непакетных устройств. В любой момент в устройстве может быть разрешен только один из этих меха- низмов. В командах для работы со сменными носителями регистр ER несет специфиче- скую информацию (рис. 8.1). Здесь биты имеют следующее значение (если хоть один бит установлен, то в регистре SR устанавливается бит ERR): ♦ NM (No Media) — носитель отсутствует; ♦ ABRT (Abort) — команда отвергнута (не поддерживается или не может быть за- вершена); ♦ MCR (Media Change Request) — запрос смены носителя: устройство обнаружи- ло нажатие кнопки смены носителя (бит устанавливается при нажатии, сбра- сывается после выполнения команды Get Media Status или Media Unlock); ♦ MC (Media Changed) — носитель сменился (бит устанавливается, когда уст- ройство обнаруживает вставленный новый носитель, а сбрасывается после выполнения команды Get Media Status); ♦ WP (Write Protected) — носитель защищен от записи. Регистр ER ///A wp 5 4 | 3 2 мс У///Л MCR ABRT Рис. 8.1. Регистр ER для команд работы со сменными носителями Механизм уведомления является предпочтительным, он дает хосту возможность полного управления носителем. Нажатие кнопки на накопителе смены носителя
164 Глава 8. Система команд ATA/ATAPI и SATA не вызывает, этот факт и состояние носителя могут определяться по команде Get Media Status. Хост должен периодически выдавать эту команду и читать регистр ER, в котором могут быть установлены биты NM, ABRT, MCR, МС, WP. Смену носителя для устройств АТА вызывает только команда Media Eject, после нее в регистре ER могут быть установлены биты NM, ABRT. Эта команда применима только к устройствам АТА, для устройств ATAPI предназначена пакетная ко- манда Start/Stop Unit. Включается механизм уведомления по команде Set Features с подкомандой 95h, после выполнения которой в регистре CL оказывается номер версии механизма уведомления (пока только 00), а в регистр СН — дополнительная информация: ♦ бит 0 — PENA (Prior Enabled) — механизм уже был включен на момент подачи команды; ♦ бит 1 — Lock — устройство позволяет блокировать носитель; ♦ бит 2 — PEJ (Physical Eject) — устройство имеет привод для смены носителя. Механизм выключается по любому сбросу и команде диагностики устройства, а также по команде Set Features с подкомандой 31h. При этом носитель остается незаблокированным, а биты состояния носителя и запроса его смены сбрасыва- ются. Возможность и включение механизма уведомления определяется битом 4 слов 83 и 86 идентификатора устройства. Альтернативный механизм смены носителя (removable media feature set) позво- ляет устройству непосредственно отрабатывать нажатие кнопки смены носителя (если носитель не заблокирован), менять носитель и определять его состояние. Смена носителя блокируется командой Media Lock и разрешается командой Media Unlock, эти же команды используются для определения состояния чтением реги- стра ER, в котором могут быть установлены биты NM, ABRT, MCR. Если включен меха- низм уведомления, то эти команды не вызывают никаких действий (но и не от- вергаются). Команда смены носителя Media Eject работает так же, как описано ранее. По любому сбросу и команде диагностики устройства носитель разблоки- руется, и бит запроса его смены сбрасывается. Возможность и включение этого механизма смены носителя определяется битом 2 слов 82 и 85 идентификатора устройства. 8.7. Поддержка флэш-памяти и малогабаритных карт Для запоминающих устройств на флэш-памяти в АТА-4 ввели команды, начи- нающиеся с аббревиатуры CFA (Compact Flash Association — ассоциация произ- водителей компактных флэш-карт). Специфика этих устройств заключается в записи: запись обеспечивается лишь в предварительно стертые ячейки (сектор), хотя есть устройства, автоматически осуществляющие стирание при записи. Операция записи выполняется существенно медленнее, чем чтения, скорость ко- торого приближается к скорости чтения динамической памяти. Операция стира- ния занимает еще больше времени. Поэтому ввели команды записи в предвари- тельно стертые секторы — CFA Write Without Erase и CFA Write Multiple Without Erase,
8.7. Поддержка флэш-памяти и малогабаритных карт 165 применение которых позволяет повысить производительность обмена с устрой- ствами. Для стирания блоков предназначена команда CFA Erase Sectors, в которой указываются начальный адрес и количество стираемых секторов. Интерес пред- ставляет информация о состоянии сектора: стертый или нет, сколько раз выпол- нялась запись1. Эту информацию можно получить по команде CFA Translate Sector — по ней в режиме РЮ устройство выдаст блок данных (512 байт), опи- сывающий сектор, адресованный командными регистрами. Структура блока приведена в табл. 8.9. Таблица 8.9. Блок описания сектора CFA Байт Назначение 00h Старший байт номера цилиндра 01h Младший байт номера цилиндра 02h Номер головки 03h Номер сектора 04h LBA биты 23:16 05h LBA биты 15:8 06h LBA биты 7:0 07-12И Резерв 13h Флаг состояния сектора: FF — стерт; 00 — не стерт 14-17И Резерв 18h Счетчик циклов записей в сектор, биты 23:16 19h Счетчик циклов записей в сектор, биты 15:8 1Ah Счетчик циклов записей в сектор, биты 7:0 1B-1FFh Резерв Поскольку организация флэш-памяти значительно отличается от традиционных устройств с подвижными носителями, сообщения об ошибках этих устройств не вписываются в стандартные определения битов регистра ER. В случае ошибки при выполнении команды в регистре SR устанавливается бит ERR, а причину ошибки можно уточнить командой CFA Request Extended Error, помещающей в регистр ER расширенный код ошибки. Устройства CFA могут иметь 8-разрядную внутреннюю организацию, и для раз- решения 8-битного обмена в режиме РЮ служат соответствующие подкоманды SET FEATURES. Обмен в режиме DMA для данного класса устройств необязателен. Устройства, поддерживающие команды CFA, сообщают значение 848Ah в слове О идентификатора устройства или единицу в бите 2 слова 83. 1 Как ни странно, флэш-память больше подвержена «износу» секторов, чем винчестеры — устройства с подвижным носителем. Для флэш-памяти регламентировано меньшее (хотя и довольно большое) гарантированное число перезаписей, чем для винчестеров.
166 Глава 8. Система команд ATA/ATAPI и SATA В ATA/ATAPI-6 введена поддержка адаптеров малогабаритных карт памяти (ММС, Smart Media, SD...). Адаптер представляет собой мост, транслирующий команды с интерфейса АТА (SATA) на специфический интерфейс карты. Для упрощения моста определен диапазон кодов команд (D2h...D4h), транслируемых мостом. Эти команды специфичны для каждого типа карт. Команда Check Media Card Туре позволяет определить тип установленной карты и разрешать адаптерам трансляцию команд с кодами D2h...D4h (FR.O=1 — разрешить трансляцию). В слу- чае нормального ответа на команду (SC=55h, SN=AAh — сигнатура) в регистрах CL и СН передается информация, специфичная для карты; в регистре D/Н бит 3 (WP) является признаком защиты от записи, а биты [2:0] (MediaType) сообщают тип карты: 001 — SD Memory Card, 010— ММС, 011 — SD IO Card, 100 — Smart Media card, остальные коды зарезервированы. 8.8. Управление энергопотреблением и шумом Средства управления энергопотреблением (Power Management) были заложены еще в первой спецификации АТА, в ATA/ATAPI-4 они уже считаются обяза- тельными. Различают следующие состояния, перечисленные в порядке возраста- ния энергопотребления: ♦ Sleep — «заснувшее» устройство потребляет минимум энергии, команды не воспринимаются, «разбудить» его может только сброс. Время «пробужде- ния» — не более 30 с. ♦ Standby Mode (дежурный режим) — устройство способно принимать команду по интерфейсу, но для доступа к носителю может потребоваться столь же большое время. В это состояние устройство может перейти как по команде, так и по таймеру (Standby Timer), отсчитывающему время от последнего за- проса, полученного в состоянии ожидания или активном состоянии. Время срабатывания таймера программируется; таймер может быть запрещен. ♦ Idle Mode (состояние ожидания) — устройство способно сразу начать обслу- живание обращения к носителю, но не слишком быстро, так как некоторые узлы отключены. ♦ Active Mode (активный режим) — устройство обслуживает все запросы за крат- чайшее время. Команда проверки режима энергопотребления Check Power Mode через регистр SC возвращает состояние: SC=00h — устройство находится в состоянии Standby или переходит в него, SC=80h — устройство в состоянии ожидания {Idle), SC=FFh — устройство активно (значение 80h определено, начиная с АТА-3, — прежде и в состоянии Idle возвращалось значение FFh). Команда Idle переводит устройство в режим ожидания из активного или дежур- ного режима, а также через регистр SC программирует таймер дежурного режима (табл. 8.10). Команда Idle Immediate — непосредственный перевод в режим ожидания — тай- мер не программирует.
8.8. Управление энергопотреблением и шумом 167 Таблица 8.10. Тайм-аут перехода в дежурный режим Содержимое SC Тайм-аут 0(00h) Тайм-аут запрещен х=1-240 (01h-F0h) (х х 5) с х=241-251 (F1h-FBh) ((х-240) х 30) мин 252 (FCh) 21 мин 253 (FDh) Период, заданный производителем (в пределах 8-12 ч) 254 (FEh) Зарезервировано 255 (FFh) 21 мин 15 с Команда Sleep является единственным инструментом перевода устройства в спя- щий режим. После получения команды устройство генерирует запрос прерыва- ния. Хост должен считать регистр состояния, что сбросит прерывание и позво- лит устройству «заснуть». «Разбудить» устройство можно только аппаратным или программным сбросом. Состояние, в которое оно перейдет, определяется ти- пом сброса и программируется. Поскольку не каждый хост «зн&ет», что после команды нужно прочитать регистр состояния, устройство автоматически сбро- сит запрос прерывания и «заснет» через определенный период времени (не ме- нее 2 с). Команда Standby переводит устройство в дежурный режим потребления и через параметр в регистре SC программирует таймер. Команда Standby Immediate таймер не программирует и переводит устройство в этот режим немедленно. В ATA/ATAPI-5+ ввели возможность перехода в состояние Standby при включе- нии питания — Power-Up In Standby. Это происходит по подкоманде Set Features. При этом снижается пиковая нагрузка на блок питания в момент включения. Устройство может также поддерживать и специальную подкоманду Set Features для раскрутки шпинделя. Если эта подкоманда поддерживается, то ее необходи- мо выполнить до обращения к носителю, если не поддерживается, запуск про- изойдет по первой же команде, требующей обращения к носителю. На поддерж- ку этих свойств указывают биты 5, 6 слов 83 и 86. Устройства могут поддерживать расширенное управление энергопотреблением (Advanced Power Management, АРМ). При этом задается уровень АРМ Level, оп- ределяющий степень активности: Olh — минимальное потребление, FEh — мак- симальная производительность. Уровень выше 80h не позволяет устройству ос- танавливать двигатель привода носителя (переходить в режим Standby). АРМ управляется подкомандами Set Features: подкомандой 05h АРМ разрешается, а через регистр SC задается уровень. Устройства с пакетным интерфейсом для управления энергопотреблением могут использовать также команды пакетного протокола. В ATA/ATAPI-6 появилась новая возможность автоматического управления уровнем акустического шума (automatic acoustic management), издаваемого уст- ройством при работе. Для этого вводятся специальные подкоманды Set Features, задающие уровень управления шумом (acoustic management level) в диапазоне от О
168 Глава 8. Система команд ATA/ATAPI и SATA (минимальные шум и производительность) до FFh (максимальная производи- тельность без заботы о шуме). Управление необязательно должно быть плав- ным — может быть всего несколько различимых градаций, и один и тот же спо- соб снижения шума может применяться для ряда соседних значений уровня. 8.9. Защита данных Начиная с АТА-3, в стандарт введена группа команд защиты — Security, ее под- держка определяется по команде идентификации словом 128. Если защита под- держивается, то устройство должно отрабатывать все команды группы Security. В плане защиты устройство может находиться в одном из трех состояний: ♦ Открыто (unlocked) — устройство выполняет все свойственные ему коман- ды. Устройство с установленной защитой можно открыть только командой Security Unlock, в которой передается блок данных, содержащий правильный пароль. Для осложнения подбора пароля (его длина составляет 32 байт) слу- жит внутренний счетчик неудачных попыток открывания, по срабатывании которого команды открывания будут отвергаться до выключения питания или аппаратного сброса. ♦ Закрыто (locked) — устройство отвергает все команды, связанные с переда- чей данных и сменой носителя. Допустимы лишь команды общего управле- ния, мониторинга состояния и управления энергопотреблением. Из команд защиты допустимы лишь команды стирания (Security Erase) и открывания (Security Unlock). В это состояние устройство с установленной защитой вхо- дит каждый раз по включению питания. ♦ Заморожено (frozen) — устройство отвергает все команды управления защи- той, но выполняет все остальные. В это состояние устройство переводится ко- мандой Security Freeze Lock или автоматически по срабатыванию счетчика по- пыток открывания устройства с неправильным паролем. Из этого состояния устройство может выйти только по аппаратному сбросу или при следующем включении питания. Срабатывание счетчика попыток отражается установкой бита 4 (EXPIRE) слова 128 блока параметров, бит сбросится по следующему включению питания или по аппаратному сбросу. Устройство выпускается производителем с неустановленной защитой, то есть по включению питания оно открыто. Система защиты поддерживает два пароля — главный (master password) и пользовательский (user password) — и два уровня за- щиты — высокий (high) и максимальный (maximum). При высоком уровне защи- ты устройство можно открывать любым из двух паролей. При максималь- ном уровне устройство открывается только пользовательским паролем, а по главному паролю доступна только команда стирания, при этом вся информация с носителя будет стерта. Для установки защиты и пароля используется команда Security Set Password, ко- торую выполняет только открытое устройство. При установке пароля пользова- теля устанавливается и защита, при установке главного пароля состояние и уро- вень защиты не меняются. В передаваемом блоке данных (512 байт = 256 слов) нулевое слово является управляющим:
8.9. Защита данных 169 ♦ бит 0 определяет тип пароля (0 — User, 1 — Master); ♦ бит 8 при установке пользовательского пароля определяет степень защиты (О — High, 1 — Maximum). Слова 1-16 содержат пароль; слово 17 — код номера главного пароля (master password revision code) — требуется при установке главного пароля; остальные слова игнорируются. Главный пароль устанавливается изготовителем или продавцом устройства, впо- следствии он может быть переопределен пользователем. Код номера главного пароля сообщается словом 92 в блоке параметров устройства, он может быть в диапазоне 1-FFFEh. Значения 0000 или FFFFh указывают на то, что код номера пароля не поддерживается устройством. Изготовитель выпускает устройство с номером пароля FFFEh. Снять защиту можно командой Security Disable Password (предъявив один из двух паролей), которую выполняет только открытое устройство. После снятия защи- ты устройство не переходит в закрытое состояние, пароль пользователя переста- ет действовать, но главный пароль сохраняется (он будет снова активирован при последующем задании пароля пользователя). Для предотвращения несанкционированных попыток смены пароля или уровня защиты служит команда Security Freeze Lock, после которой в устройстве «замо- раживается» состояние защиты. Команда защитного стирания Security Erase UNIT подразумевает передачу уст- ройству блока данных в 256 слов. Нулевое слово является управляющим, в нем определены только 2 бита: ♦ бит 0 определяет тип пароля (0 — User, 1 — Master); ♦ бит 1 определяет уровень защитного стирания (0 — обычное, 1 — расширен- ное). Слова 1-16 содержат пароль, остальные игнорируются. При обычном стирании устройство заполняет двоичными нулями всю область данных, видимую пользователем. При расширенном стирании заполняется весь носитель, включая области, ранее переназначенные устройством (по угрозе не- исправимых ошибок). Кроме того, вместо двоичных нуЛёй используется образец данных, заданный производителем (им заполняются новые устройства). После стирания защита снимается, но главный пароль сохраняется. Чтобы застрахо- ваться от случайного стирания, непосредственно перед этой командой должна быть выполнена команда Security Erase Prepare, иначе команда стирания отверга- ется устройством. Команды защиты в АТА-4 дополнены ограничением максимального адреса, доступного пользователю (сообщаемого в блоке параметров идентификации). Ограничение обеспечивается командой Set Max Address. Узнать реальный макси- мальный адрес позволяет команда Read Native Address. В ATA/ATAPI-5+ коман- ды Set Мах расширены (введено их пародирование) за счет введения подкоманд, задаваемых через FR. Идея пародирования отличается от общей защиты: после включения питания можно ограничить максимальный адрес (но только один
170 Глава 8. Система команд ATA/ATAPI и SATA раз) или же ограничить доступ к этой команде. Все эти команды неприменимы к устройствам со сменными носителями. Определены следующие подкоманды: ♦ 00 — Set Max Address, ограничение размера доступной области. В регистрах СН, CL, D/Н и SN задается адрес последнего доступного сектора (в режиме CHS или LBA), в регистре SC бит 0 (VV — Value Volatile) определяет, сохранится ли уста- новленное значение после выключения питания (1 — да, 0 — нет). Непосред- ственно перед данной командой должна быть успешно выполнена команда Read Native Address. Результат команды отражается в словах 1, 54, 57, 60 и 61 идентификатора устройства. ♦ 01 — Set Max Set Password, задание пароля для команд Set Мах. Пароль содер- жится в словах 1-16 блока данных (512 байт), передаваемых в режиме РЮ (слова 0 и 17-255 не используются). Пароль сохраняется и после последую- щего включения питания. ♦ 02 — Set Max Lock, включение парольной защиты для команд Set Мах — перевод в состояние SetMaxLocked, в котором из команд Set Мах исполняются толь- ко Set Max Unlock и Set Max Freeze Lock. Состояние сохраняется до выключения питания или успешного выполнения этих команд. ♦ 03 — Set Max Unlock, ввод пароля (см. ранее). По вводу пароля устройство пере- водится в состояние Set Max Unlocked, в котором все команды Set Мах дос- тупны. Если пароль неправильный, то декрементируется счетчик попыток (по включению устанавливается 5 попыток), а по его обнулению устройство перестает воспринимать эти команды до следующего включения питания. ♦ 04 — Set Max Freeze Lock, замораживание команд Set Мах. После нее все выше- приведенные команды будут отвергаться до повторного включения питания. Любая подкоманда Set Мах, введенная сразу после чтения настоящего максималь- ного адреса, трактуется устройством как Set Max Address. 8.10. Потоковое расширение команд Традиционно главным качеством устройств хранения данных является их спо- собность надежно (достоверно) хранить данные, а производительность является вторичной, хотя ее вся^ски и стремятся повышать. Если при чтении (записи) блока данных происходит ошибка, то устройство автоматически выполняет се- рию повторных обращений к носителю, в результате чего чаще всего удается по- лучить достоверный результат. Однако при этом возникает непрогнозируемая задержка доставки данных, которая крайне нежелательна для мультимедийных приложений, выполняющих запись или чтение аудио- и видеоданных в реаль- ном времени. В спецификацию ATA/ATAPI-7 предполагается ввести потоковое расширение системы команд (streaming feature set). Потоком называется непре- рывная последовательность логических блоков, которые должны быть считаны или записаны с определенным допустимым временем. Для потоков вводятся но- вые команды чтения и записи в режимах РЮ и DMA, а также новый журнал со- общений об ошибках потоковых команд. Потоковые команды позволяют управлять поведением устройства в случае обнаружения ошибок, а также «подсказывать» устройству правильную политику кэширования. Заметим, что ранее потоковое
8.12. Нестандартные команды 171 расширение в несколько ином виде (Audio Visual Data features, AV) планирова- лось ввести в ATA/ATAPI-6, но в окончательную версию этого стандарта AV-ко- манды не вошли. 8.11. Устаревшие и необязательные команды Команда «длинного» чтения Read Long считывает сектор данных вместе с контроль- ными байтами. При ее вызове регистр SC должен указывать на запрос только одного сектора. Блок данных считывается 16-битными словами, а контрольные байты — 8-битными. Некоторые устройства АТА-1 не способны быстро переда- вать байты ЕСС вслед за данными. Для их считывания используют 8-битный об- мен в режиме РЮ Mode 0. Команды чтения и записи буфера Read Buffer и Write Buffer служат для обмена в режиме РЮ с 512-байтной буферной памятью устройства (но не сектором но- сителя). Эти команды необязательны. Команда форматирования трека Format Track по входным параметрам специфич- на для каждого устройства и ее использование не рекомендуется. Многие уст- ройства ее отвергают как недопустимую. Поскольку команда форматирования традиционно ориентирована на один трек, форматирование дисков АТА в режи- ме трансляции геометрии, при котором внешняя геометрия не совпадает с реаль- ной, невозможно. В накопителях с зонным форматом записи форматирование трека будет «накрывать» переменное число реальных треков. Для низкоуровне- вого форматирования используются команды, специфичные для конкретных устройств, причем они могут быть недопустимыми в нормальном (не технологи- ческом) режиме работы устройства. Команда рекалибровки Recalibrate заставляет устройство найти нулевой ци- линдр. Если устройству это не удается, устанавливается бит ошибки Track 0 Not Found. Эту команду обычно применяют при обработке ошибок: часто после тако- го «встряхивания» ошибка не повторяется. После успешного выполнения ко- манды блок командных регистров содержит адрес первого сектора диска в фор- мате, зависящем от режима адресации (LBA или CHS). 8.12. Нестандартные команды Устройства могут поддерживать и нестандартные команды, назначение которых определяется разработчиком устройств. Нестандартные команды позволяют оперировать служебной информацией дисков и управлять конфигурацией и свойствами устройств. Например, для винчестеров Quantum Fireball EX имеется «расширенная» команда (код FOh), которая обеспечивает чтение (но не запись!) списка дефектных блоков, а также чтение и запись конфигурационной информа- ции (отличные от Set Features). До выполнения подкоманды чтения списка дефектных блоков Read Defect List нужно определить длину списка с помощью команды Read Defect List Length,
172 Глава 8. Система команд ATA/ATAPI и SATA которая поместит в регистр SC младший байт, а в регистр SN — старший байт дли- ны. Перед подачей команды в командные регистры заносят определенные значе- ния: SC=O (код подкоманды), SN=CL=FFh и CH=3Fh («пароль»), D/H=Axh для уст- ройства 0, D/H=Bxh для устройства 1, CR=FOh (код расширенной команды). После этой команды в блоке регистров окажутся значения, необходимые для чтения са- мого списка, и для чтения списка (предварительно прочитав его длину в регист- рах SC и SN) остается только еще раз записать в командный регистр код расши- ренной команды FOh и принять поток данных обычным способом. Список дефектов начинается с двух байтов заголовка (00h, IDh), за которыми следует двухбайтное поле длины списка (число записей, умноженное на 8, начи- ная со старшего байта), а за ними собственно записи дефектов (по 8 байт). Каж- дая запись в списке дефектов начинается с 3-байтного номера цилиндра (начи- ная со старшего байта), затем идут номер дефектной головки (1 байт) и 4 байта номера дефектного сектора. Если все байты номера сектора равны FFh, это озна- чает дефектный цилиндр. Подкоманда READ CONFIGURATION (код подкоманды Olh) позволяет считать 512- байтный блок, описывающий текущую конфигурацию устройства: режимы кэ- ширования, режимы коррекции ошибок, разрешение перемещения дефектных секторов.при чтении и записи и т. п. Подкоманда SET CONFIGURATION (код подко- манды FFh) позволяет установить эти параметры, передав устройству такой же блок. Подкоманда SET CONFIGURATION WITHOUT SAVING TO DISK (код подкрманды FFh) делает то же, но без записи установок на диск (после сброса или выключения пи- тания изменения будут отменены). Код подкоманды помещают в регистр SC; SN=CL=FFh и CH=3Fh («пароль»); D/H=AXh для устройства 0, D/H=BXh для уст- ройства 1; CR=FOh. В блоке параметров определены следующие биты и байты (остальные — нулевые): ♦ Байты 0-31 — конфигурационный ключ, строка «QUANTUM CONFIGURA- TION», дополненная справа пробелами. Если ключ не совпадет, команда бу- дет отвергнута. ♦ Бит 32.1 — РЕ (Prefetch Enable), разрешение предвыборки в кэш. По умолча- нию — 1. ♦ Бит 32.0 — СЕ (Cache Enable), разрешение кэширования чтения. По умолча- нию — 1. ♦ Бит 36.7 — AWRE (Automatic Write Reallocation Enabled), разрешение автома- тического переназначения сбойного блока при записи. По умолчанию — 1. ♦ Бит 36.6 — ARR (Automatic Read Reallocation), разрешение автоматического пере- назначения сбойного блока при чтении. Если RC=1, бит игнорируется. По умолчанию — 1. ♦ Бит 36.4 — RC (Read Continuous), разрешение непрерывного чтения блока за- казанной длины без задержек на процедуры восстановления. Позволяет по- высить скорость в ущерб достоверности (ошибки чтения не сообщаются). По умолчанию — 0. ♦ Бит 36.3 — EEC (Enable Early Correction), разрешение ранней коррекции («на лету», без повторного считывания). По умолчанию запрещено (0), то есть при
8.12. Нестандартные команды 173 ошибке чтения сначала выполняется повторное считывание, а потом коррек- ция. Если бит RC=1, EEC игнорируется. ♦ Бит 36.0 — DCR (Disable Correction), запрет коррекции, даже если ошибки ис- правимые. ♦ Байт 37 — число повторных считываний, выполняемых до попытки коррек- ции (по умолчанию — 8). ♦ Байт 38 — ЕСС CORRECTION SPAN, максимальное число битов в группе, которые могут быть исправлены при использовании четырехкратного пакетного кода ЕСС (quadruple-burst ЕСС). По умолчанию — 32 (20h). ♦ Бит 39.2 — WCE (Write Cache Enable), разрешение кэширования записи. По умолчанию — 1. ♦ Бит 39.1 — RUEE (Reallocate Uncorrectable Error Enables), разрешение перена- значения при неисправимых ошибках (при ARR=1). По умолчанию — 1. К сожалению, привести информацию по специфическим командам разных моде- лей накопителей нет возможности, они в общедоступной документации не опи- саны. Команды для данной модели взяты из документа «Quantum Fireball EX 3.2/5.1/6.4/10.2/12.7 GB AT. Product Manual».
ГЛАВА 9 Интерфейс SCSI Интерфейс SCSI (Small Computer System Interface — системный интерфейс ма- лых компьютеров), произносится «скази», предназначен для соединения уст- ройств различных классов: памяти прямого (жесткие диски) и последовательно- го доступа (стримеры), оптических дисков однократной и многократной записи, устройств автоматической смены носителей информации, принтеров, сканеров, коммуникационных устройств и процессоров. Наиболее широко этот интерфейс используется для устройств и систем хранения данных. Первоначально интерфейс SCSI был определен в виде параллельной шины, объ- единяющей равноранговые устройства. Устройством SCSI (SCSI device) назы- вается как хост-адаптер, связывающий шину SCSI с какой-либо внутренней шиной компьютера, так и контроллер целевого устройства (target controller), с помощью которого устройство подключается к шине SCSI. На шине возможно присутствие более одного хост-адаптера, что позволяет обеспечить разделение (совместное использование) периферии несколькими компьютерами, подклю- ченными к одной шине SCSI. Интерфейс SCSI оптимизирован под многозадач- ную работу: после получения команды на время выполнения своих внутренних операций устройство может освобождать шину (и неоднократно), а затем восста- навливать соединение для передачи данных и информации о завершении. Во время освобождения шину могут занимать процессы ввода-вывода, связанные с тем же или другим устройством. Идеи, заложенные в шину SCSI, получили развитие в модели SAM (SCSI Archi- tecture Model — архитектурная модель SCSI), введенной в SCSI-3 (1996 г.) и развиваемой поныне. Модель SAM определяет многоуровневую структуру стандартов SCSI, в которой нижние уровни (средства доставки информацион- ных блоков) разнообразны: параллельная шина, последовательные шины и ин- терфейсы, сетевые средства. В модели представлены система команд, общая для всех устройств, и расширяемый список наборов команд, свойственных устройст- вам различных классов. Модель SAM определяет идеологию SCSI — клиент-серверные отношения между инициаторами обмена (initiator) и целевыми устройствами (target). Чаще всего в роли инициатора (ИУ) выступает хост-адаптер компьютера, а в роли целевых (ЦУ) — периферийные устройства. Возможны комбинированные устройства, выступающие в роли и инициатора, и ЦУ. Инициатор обмена является клиен- том — он обращается к целевому устройству с запросом выполнения операции ввода-вывода (команды). Целевое устройство выступает сервером — оно интер-
Интерфейс SCSI 175 претирует команду и управляет интерфейсом для выполнения всех операций, связанных с командой: доставкой данных, сообщением результата выполнения (состояния). В ряде случаев роли устройств меняются, например, при выполне- нии команды копирования {Сору) инициатор дает указание ведущему устройст- ву копирования {Copy Master) на обмен данными, который может производиться и с другим ЦУ (для которого ведущее устройство копирования выступит в роли инициатора). Система SCSI-команд четко стандартизована, что обеспечивает высокий уровень совместимости устройств одного класса от разных производителей и разных мо- делей. Классы устройств определены в соответствии с их функциональным на- значением и командами, необходимыми для взаимодействия с ними. Каждое устройство должно поддерживать команды, обязательные для данного класса; есть и общие команды, обязательные для устройств всех классов. Заметим, что для устройств хранения разных классов (магнитных дисков с произвольным доступом, ленточных устройств с последовательным доступом, оптических уст- ройств и др.) в SCSI используется только линейная адресация блоков данных (LBA), что унифицирует взаимодействие с устройствами разных типов и объе- мов хранимой информации. Более того, возможно непосредственное копирова- ние блоков данных с одного устройства SCSI на другое, без промежуточного по- мещения этих данных в ОЗУ компьютера. Для устройств хранения имеются и команды поиска данных по образцу. В SCSI есть понятие цепочки команд — последовательности команд, в которых результаты выполнения предыдущей команды (например, адрес найденного бло- ка при поиске по образцу) могут использоваться как параметры для последую- щей (например, чтения). Все команды цепочки являются частью одного процесса. Команды не являются полностью независимыми — при относительной адреса- ции последний блок, адресованный предыдущей командой, доступен для сле- дующей. Так, например, можно исполнить команду Search Data, по которой на диске будет найден блок, содержащий информацию, совпадающую с эталоном поиска. Связав с ней команду чтения Read, можно прочитать этот блок или блок с указанным смещением относительно найденного. Каждое целевое устройство может содержать одно или несколько независимых логических устройств (ЛУ) со своими номерами (Logical Unit Number, LUN), представляющих периферийные устройства или их части. Первоначально число логических устройств ограничивалось трехбитным полем LUN (до 8), в парал- лельной шине SCSI-3 поле LUN расширили до 6 бит (до 64 логических уст- ройств). Модель SAM оперирует адресами, форматы которых могут поддержи- вать и большее число логических устройств (до 256 и даже 16 384). В SCSI-2 было введено понятие целевых программ (target routine), которые могут исполняться в целевом устройстве для каких-либо целей (например, мониторинга состояния). В целевом устройстве может одновременно исполняться до 8 про- грамм со своими номерами (Target Routine Number, TRN) от 0 до 7 включительно; поля TRN с LUN явно не связаны. В архитектурной модели SCSI-3 понятие целевой программы уже не фигурирует, а задачи, решаемые целевыми программами, мо- гут выполняться так называемыми известными логическими устройствами.
176 Глава 9. Интерфейс SCSI Логически завершенным актом взаимодействия инициатора и целевого устрой- ства в SCSI является выполнение задания (task), в терминах SCSI-2 эквивалентом задания является процесс ввода-вывода (I/O process). Задание может представ- лять собой одиночную команду или цепочку связанных команд (linked command). В целевых устройствах могут организовываться наборы заданий (task set), в тер- минах SCSI-2 называемые очередями (queue). Задание запускается инициато- ром, а исполнением задания управляет целевое устройство — оно организует пе- редачу команд, данных и служебной информации по интерфейсу. По завершении выполнения каждой команды ЦУ передает инициатору байт со- стояния ее выполнения (Status), по нему можно определить, является ли выпол- ненная команда последней в цепочке (единственной), что будет признаком за- вершения задания. Задания друг от друга независимы — порядок их исполнения по отношению к порядку их поступления устройство может менять. Команды в цепочке (внутри задания) выполняются строго упорядоченно. Задания ставятся в очередь с разнообразными атрибутами. Очередное задание можно поставить в очередь «по-честному», а можно «пропихнуть» вне очереди: задание с атрибутом Head Of Queue будет выполняться сразу после завершения текущего активного процесса. Задания с атрибутом Simple исполняются ЦУ в порядке, который оно сочтет оптимальным. Задания с атрибутом Ordered испол- няются в порядке поступления, после выполнения всех ранее запущенных про- цессов. Изменение порядка выполнения заданий не касается порядка команд в цепочке, поскольку цепочка принадлежит одному заданию. Инициатор может удалить задание из очереди, сославшись на него по тегу. Для запуска процесса ввода-вывода инициатор устанавливает соединение с оп- ределенной частью выбранного целевого устройства (его полем LUN или TRN), к которой адресуется команда (или цепочка команд). Это соединение может удерживаться до окончания выполнения процесса, оставляя шину занятой, а мо- жет и временно разрываться, освобождая шину для выполнения других процес- сов. Устанавливая соединение, инициатир предоставляет ЦУ право на разрыв со- единения (disconnect), разрыв выполняется по усмотрению ЦУ. При этом оно занимает шину только на время активной передачи данных, освобождая ее на время своих внутренних операций (поиска данных). В это время по шине могут производиться обмены между теми же и другими устройствами, что очень вы- годно позиционирует шину SCSI для работы с большим количеством устройств под управлением многозадачных и многопотоковых ОС. Инициатор может за- требовать разрыв соединения во время выполнения процесса. Интерфейс SCSI изначально ориентирован на эффективное обслуживание мно- жества устройств. Применение цепочек команд позволяет разгружать хост даже при выполнении довольно сложных процедур, связанных с хранением и поиском данных. Правда, далеко не всегда эти улучшенные возможности практически ис- пользуются операционными системами и приложениями. Но и без них незави- симость работы устройств друг от друга и освобождение шины на время внут- ренних операций обеспечивают SCSI неоспоримые преимущества перед АТА (параллельного варианта) в качестве интерфейса для мощных систем хранения данных. С внедрением Serial АТА II (и применением NCQ) у SCSI в этой области
9.1. Спецификации SCSI 177 появился серьезный конкурент, правда, не использующий принятые в SCSI кли- ент-серверные отношения. 9.1. Спецификации SCSI Первая версия интерфейса, позже названная SCSI-1, была стандартизована ANSI в 1986 г. (Х3.131-1986). Это была 8-битная параллельная шина с максимальной частотой переключений1 5 МТ/с, допускающая подключение до 8 устройств. Скорость передачи данных — около 2 Мбайт/с, режим передачи данных — асин- хронный. Впоследствии (1994 г.) появилась спецификация SCSI-2 (Х3.131-1994), расширяющая возможности шины. Частота переключений шины Fast SCSI-2 достигает 10 МТ/с, a Ultra SCSI-2 — 20 МТ/с. Разрядность данных может быть увеличена до 16 бит — эта версия называется Wide SCSI-2 (широкая), а 8-битную версию стали называть Narrow (узкая). 16-битная шина допускает включение 16 устройств. Стандарт SCSI-2 определяет и 32-битную версию интерфейса, ко- торая не получила практического применения. Появился синхронный режим пе- редачи данных, введена дифференциальная версия интерфейса. Спецификация SCSI-2 определяет систему команд, которая включает набор базовых команд (Common Command Set, CCS), обязательных для всех ПУ, и специфических ко- манд для периферии различных классов. Стандарт полностью описывает прото- кол взаимодействия устройств, включая структуры передаваемой информации. Спецификация SCSI-3 — дальнейшее развитие стандарта, направленное на рас- ширение номенклатуры и возможностей средств доставки (интерфейсов подклю- чения) и расширение системы команд. В качестве альтернативы параллельному интерфейсу SCSI-3 (SCSI-3 Parallel Interface, SPI) появляется возможность при- менения последовательных интерфейсов, в том числе волоконно-оптического интерфейса со скоростью 100 и 200 Мбайт/с (Fibre Channel), а также Serial SCSI (150 Мбайт/с). Спецификация SCSI-3 существует в виде широкого спектра до- кументов, определяющих отдельные аспекты интерфейса на уровне физических соединений, транспортных протоколов и наборов команд. Их объединяет SAM — документ, описывающий архитектурную модель. Структура стандартов SCSI-3 приведена на рис. 9.1. Верхний уровень2 модели SAM определяет набор общих команд SCSI-3 (SCSI-3 Primary Commands, SPC) для устройств различных классов, который дополняет- ся набором команд соответствующего класса. На рисунке изображена только часть наборов команд: ♦ SBC (SCSI-3 Block Commands) — для устройств памяти прямого доступа; ♦ SSC (SCSI-3 Stream Commands) — для устройств памяти последовательного доступа; 1 МТ/с — миллионов передач в секунду (Mega Transfers per Second, MT/s). Называть это тактовой частотой некорректно, поскольку тактового сигнала в шине нет. 2 В прежних версиях стандарта приводилась четырехуровневая модель SAM: общие ко- манды представлялись как отдельный уровень, над которым располагались специфиче- ские наборы команд.
178 Глава 9. Интерфейс SCSI ♦ SGC (SCSI-3 Graphic Commands) — для принтеров и сканеров; ♦ SMC (SCSI-3 Medium Changer Commands) — для устройств смены носите- лей; ♦ ММС (SCSI Multimedia Command Set) — для мультимедийных устройств; ♦ SCC (SCSI-3 Controller Commands) — для хост-контроллеров. Наборы команд устройств различных классов 1 SBC SSC SGC ММС SMC 1 SCC Общие команды SPC FC-AL Рис. 9.1. Структура стандартов SCSI-3 Два нижних уровня представляют возможные транспортные протоколы с соот- ветствующими спецификациями физических соединений: ♦ SPI (SCSI Parallel Interface) — параллельная шина (разъемы, сигналы и транс- портный протокол). Обеспечивает соединение небольшого (до 16) числа уст- ройств с небольшим (до 25 м) удалением друг от друга. ♦ SBP (Serial Bus Protocol) — протокол последовательной шины, реализуемый интерфейсом IEEE 1394 (FireWire). Обеспечивает подключение среднего (до 63) числа устройств с удалением друг от друга до 4,5 м при суммарной протя- женности кабеля до 72 м. В редакции стандарта IEEE 1394b появилась воз- можность большего (до 100 м) удаления узлов друг от друга. ♦ FCP (Fibre Channel Protocol) — протокол для интерфейса Fibre Channel с со- ответствующим физическим уровнем FC-PH, FC-FS и FC-AL. Позволяет создавать крупные (по числу узлов и протяженности, исчисляемой десятками километров) домены устройств SCSI, используется в крупных сетях хране- ния данных (SAN). При наличии коммутационной фабрики (FC-SW), объ- единяющей до 224 узлов, возможно одновременное выполнение обменов между несколькими парами устройств, но для этого требуются дорогие коммутато- ры. В более дешевом варианте — арбитражном кольце (FC-AL), объединяю- щем до 126 активных устройств, одновременные обмены невозможны. ♦ SAS (Serial Attached SCSI) — устройства SCSI с последовательным интер- фейсом, совместимым с интерфейсом SATA. Позволяет объединять значительное число устройств (формальное ограничение — около 16 000), расположенных на небольшом (длина кабеля до 3 м) удалении от хоста или устройства-экс- пандера. Обладает возможностью одновременного обмена между нескольки- ми парами устройств.
9.2. Архитектурная модель SCSI — SAM 179 ♦ SSA-S3P (Serial Storage Architecture SCSI-3 Protocol) — транспортный протокол для использования транспортного и физического уровней (SSA-PH и SSA-TL) архитектуры SSA (Serial Storage Architecture). Архитектура SSA (фирменное решение IBM) обеспечивает объединение большого числа узлов подклю- чения устройств через последовательный интерфейс. Особенности архитек- туры: различные варианты топологий с использованием избыточных связей, дуплексных соединений, коммутации пакетов; отсутствие издержек арбитра- жа, одновременное выполнение конкурирующих заданий. ♦ iSCSI — прослойка между SCSI и транспортным протоколом TCP, обеспечи- вает взаимодействие устройств SCSI через IP-сети любого размера. Число устройств и расстояния между ними практически неограниченны. Возмож- ность физически одновременного обмена между несколькими парами устройств зависит от транспортной среды. Средства шифрования информации позволя- ют использовать публичные (открытые) сети (Интернет) для построения за- щищенных глобальных сетей устройств хранения. 9.2. Архитектурная модель SCSI — SAM Архитектурная модель SCSI, или SAM (SCSI Architecture Model), является абстрактным отражением идеологии SCSI, реализованной в параллельных шинах SCSI-1 и SCSI-2 и развиваемой в последующих версиях (SCSI-3). Эта модель описывает принципы взаимодействия инициаторов и целевых устройств в систе- мах с конфигурациями различной степени сложности. Модель оперирует объекта- ми с определенными атрибутами и свойствами. Первая версия SAM была опуб- ликована в 1996 г., SAM-2 — в 2003 г., прорабатываются версии SAM-3 и SAM-4. Клиент-серверная модель Основой SCSI является распределенная клиент-серверная модель, которую ил- люстрирует рис. 9.2. Архитектура SCSI обеспечивает клиентским приложениям (application client) инициатора возможность пользоваться сервисами, предостав- ляемыми целевыми устройствами. Взаимодействие логически простое: инициатор посылает запрос (request), сервер (целевое устройство) этот запрос отрабатывает и посылает ответ (response), в котором сообщается результат выполнения (ус- пех или неуспех с информацией, уточняющей состояние). Целевое устройство может содержать одно и более логических устройств со свои- ми номерами (идентификаторами) LUN; каждое логическое устройство должно содержать в себе два сервера: ♦ Сервер устройства (device server) выполняет команды по запросам {Device Service Request) и сообщает результат выполнения в ответах (Device Service Response). Запрос содержит блок дескриптора команды (Command Descriptor Block, CDB), описывающий команду (из списка поддерживаемых целевым устройством), ее входные данные и параметры исполнения. ♦ Диспетчер заданий (task manager) может получать запросы на управление выполнением заданий (Task Management Request) и отправлять результат вы- полнения в ответах (Task Management Response).
180 Глава 9. Интерфейс SCSI Рис. 9.2. Распределенная клиент-серверная модель SCSI Задание (task) — это объект в логическом устройстве, который описывает все не- обходимые действия для выполнения одиночной команды или цепочки связан- ных команд. В устройстве-инициаторе может быть множество клиентских приложений, порож- дающих запросы выполнения заданий (прикладных команд устройств) и запро- сы управления заданиями. Горизонтальные пунктирные линии на рисунке отражают логические связи (по- сылки запросов и ответов) между клиентами и серверами. Для клиента вызов сервиса выглядит как вызов процедуры с набором необходимых входных и вы- ходных параметров. Выход из процедуры происходит по получению ответа на запрос или индикации какого-либо отказа; при выходе сообщается состояние выполнения (status). Запрос от клиента через порт инициатора (initiator port), подсистему доставки сервисов (service delivery subsystem) и порт целевого устройства (target port) по- ступает к соответствующему серверу. Ответ от сервера к клиенту передается че- рез указанные компоненты в обратном порядке. Задача подсистемы доставки — надежная (и безошибочная) транспортировка запросов, связанных с ними дан- ных и ответов, а также уведомление клиента о невозможности завершения за- проса (по вине какого-либо элемента). Доменом SCSI (SCSI domain) называется совокупность портов инициаторов и целе- вых устройств, связанных подсистемой доставки. Размер домена ограничивается
9.2. Архитектурная модель SCSI — SAM 181 реализацией транспортного уровня и возможностями физических подключений (двумя нижними уровнями модели SCSI-3). Конфигурации Устройство-инициатор SCSI обязательно содержит: ♦ один или несколько портов инициатора, для каждого из которых имеется собственный идентификатор, ♦ одно или несколько клиентских приложений, являющихся источниками ко- манд и запросов управления. Целевое устройство SCSI обязательно содержит: ♦ одно или несколько логических устройств, в каждом из которых имеются сер- вер устройства и диспетчер заданий (именно логическое устройство являет- ся объектом, которому посылаются команды); ♦ один или несколько целевых портов, для каждого из которых имеются собст- венные идентификатор порта и маршрутизатор заданий (task router), слу- жащий для направления запросов от подсистемы доставки к соответствую- щим логическим устройствам и обратно — ответов. Двухролевые устройства обладают обязательными элементами и инициатора, и целевого устройства. Идентификатор порта в SAM-2 и более поздних версиях — это эквивалент иден- тификатора SCSI (SCSI, SCSI-2, SAM), введенный для поддержки многопорто- вых устройств. Целевые порты (если их несколько в устройстве) могут иметь и относительные идентификаторы (relative port identifier), задающие их номера относительно других портов этого устройства. Помимо обязательных идентификаторов, устройства и порты могут (необяза- тельно) обладать именами. Имена являются глобально уникальными и постоян- ными, их формат соответствует транспортному протоколу, с которым работает устройство. Если устройство поддерживает несколько транспортных протоко- лов, оно может иметь и несколько имен. В SAM заложена возможность взаимодействия однопортовых и многопортовых устройств через один или несколько доменов SCSI. В многопортовом целевом устройстве у каждого порта имеется свой маршрути- затор заданий {task router), который обеспечивает связь порта со всеми номерами LUN или их частью. Узнать, какие номера доступны с данного порта, позволяет команда Report LUNS, которую адресуют к LUN 0 или к LUN с известным адре- сом Report LUNS. Логические устройства с адресом 0 и известным адресом Report LUNS доступны со всех портов, что обеспечивает возможность «инвентаризации» доступных логических устройств со всех портов целевого устройства. В многопортовом инициаторе с каждыми клиентским приложением связан на- бор доступных портов; порты могут разделяться (совместно использоваться) несколькими приложениями. Стандарт SAM не дает каких-либо механизмов оп- ределения доступности портов для различных приложений, эти связи определя- ются сторонними (по отношению к SCSI) механизмами.
182 Глава 9. Интерфейс SCSI Порты многопортовых целевых устройств и инициаторов могут быть подключены как к одному домену SCSI (рис. 9.3, а), так и к различным доменам (рис. 9.3, б). Для инициатора имеется возможность определения доступности одних и тех же номеров LUN с различных портов (по совпадению номеров LUN в списке, полу- чаемом по команде INQUIRY). Эта информация ему интересна для того, чтобы в его видении доступных устройств не фигурировали несколько копий одних и тех же номеров LUN (это чревато проблемами целостности данных). Для целевого устройства многопортовость (его и инициатора) несущественна: оно просто от- рабатывает запросы, приходящие с какого-то своего порта, как запросы от неза- висимого инициатора. а б Рис. 9.3. Варианты многопортовых конфигураций SCSI
9.2. Архитектурная модель SCSI — SAM 183 Логические устройства В SAM определена довольно сложная (по сравнению со SCSI-1 и SCSI-2) система логических устройств (ЛУ). Логическое устройство содержит один сервер уст- ройства, выполняющий задания, и один диспетчер заданий, управляющий их выполнением. Логическое устройство содержит один или несколько наборов за- даний (task set), в каждом наборе может находиться ноль и более заданий. Логи- ческое устройство идентифицируется полем LUN и, необязательно, глобально уникальным именем (logical unit name). Если в логическом устройстве не ис- пользуется управление доступом (access control), то оно имеет единственный но- мер LUN. Если управление доступом используется, то логическое устройство имеет один дежурный номер LUN и, вдобавок, по одному номеру LUN на каж- дый порт инициатора, для которого разрешен доступ к данному логическому устройству. Множество номеров LUN позволяет поддерживать многопортовые и мультихостовые конфигурации. В целевом устройстве могут присутствовать известные ЛУ (well known logical unit) для выполнения специфических функций, например, устройство Report LUNS сообщает список имеющихся ЛУ. Известные ЛУ имеют известные номера (well known LUN, W-LUN), но не имеют имен; они адресуются расширенным методом (см. далее). Логическое устройство может быть зависимым (dependent logical unit) — адресо- ваться через другие ЛУ в иерархической структуре. Логические устройства, через которые осуществляется доступ к другим Л У, называются SDDLU (SCSI device with dependent logical units — устройство SCSI, содержащее зависимые логические устройства). Иерархические структуры используются в системах хранения данных; пример иерархической структуры, насчитывающей три уров- ня (Level 1...Level 3), приведен на рис. 9.4. Домены SCSI, доступные через SDDLU, называют шинами; номера шин (BUS NUMBER) фигурируют в иерархиче- ском номере LUN (номера шин должны быть ненулевыми). Инициатор SCSI | Домен Инициатор SCSI Домен | I ЦУ SCSI | |ЦУ SCSI I I SDDLU | | ЦУ SCSl| | ЦУ SCSl| Bus 1 Bus 2 ] Busn |цу scsi | |цу scsi | | sddlu | |qyscsi| |цу SCSI | |цу SCSI I Bus 1 Bus 2 ] Bus n |ЦУ SCSI | | ЦУ SCSI | | ЦУ SCSI | | ЦУ SCSI | |ЦУ SCSI | |ЦУ SCSI | Уровень адресации: Level 1 Level 2 Level 3 Рис. 9.4. Иерархическая структура ЛУ
184 Глава 9. Интерфейс SCSI LUN — это поле, идентифицирующее логическое устройство внутри целевого уст- ройства при обращении к нему через порт SCSI. В SAM определена иерархиче- ская структура поля LUN (даже если используется только один уровень). Призна- ком иерархического поля LUN является бит Hi Sup в ответе на команду INQUIRY. Разрядность LUN (16 или 64 бит) определяется транспортным протоколом. Все целевые устройства должны иметь нулевой номер LUN или известный номер REPORT LUNS (его значение определяется транспортным протоколом), что обес- печивает возможность определения доступных Л У по команде INQUIRY. В 64-битном формате поля LUN пары смежных байтов (А и В, С и D, Е и F, G и Н) образуют адреса 1-го, 2-го, 3-го и 4-го уровней (формат Big Endian); если иерархическая структура не используется, то байты С, D, Е, F, G и Н имеют нуле- вое значение. В иерархической системе полный адрес присутствует только в до- мене инициатора. Когда команда передается на следующий уровень иерархии, для нее 8-байтное поле LUN сдвигается и дополняется нулями, как показано на рис. 9.5, а. В каждом уровне адреса два старших бита определяют метод адреса- ции для данного уровня: ♦ ПУ-адресация (Peripheral device addressing method, рис. 9.5, б). Ненулевое зна- чение поля BUS IDENTIFIER задает идентификатор домена SCSI (1-63), при этом поле TARGETORLUN содержит идентификатор целевого устройства (TARGET) в ука- занном домене, а номер логического устройства задается на следующем уров- не. Если BUS_IDENTIFIER=O, это означает, что TARGET OR LUN содержит номер ло- гического устройства (LUN) на текущем уровне. ♦ Плоская адресация (Flat space addressing method, рис. 9.5, в). Поле LUN задает номер логического устройства на текущем уровне; содержимое последующих байтов адреса (если они есть) игнорируется. | Е| F | G| Н | 0 | 0 | 0 | 0 | Уровень 3 |G| Н|0 | 0 | 0 | 01 0 | 0 | Уровень4 | А | В | С | D | Е | F | G | Н | Уровень 1 Q | СI DI ЕI FIGI НI О I О I Уровень 2 7 6 I 5 I 4 I 3 I 2 I lI I 0 0 0 BUS IDENTIFIER TARGET_OR_LUN 1 | О | TARGET BUS NUMBER | LUN 1 | 1 | LENGTH | EXT_ADDRESS_METHOD Адрес (1, 3, 5 или 7 байтов) Рис. 9.5. Форматы LUN: а — продвижение 8-байтного номера LUN по уровням иерархии, б — ПУ-адресация, в — плоская адресация, г — зависимая адресация, д — расширенная адресация
9.2. Архитектурная модель SCSI — SAM 185 ♦ LUN-адресация (Logical unit addressing method, рис. 9.5, г) используется для обращений к зависимым устройствам. Поля BUS NUMBER, TARGET и LUN определя- ют шину, идентификатор целевого устройства на ней и логического устройст- ва, которому должна быть передан данный запрос. ♦ Расширенная адресация (Extended logical unit addressing method, рис. 9.5, д). Поле Length задает длину расширенного адреса (0,1, 2 и 3 соответствует 2, 4, 6 и 8 байтам). Поле EXT ADDRESS METHOD задает метод расширенной адресации: 1 (при Length=0) — адресация общеизвестных Л У (второй байт — поле W-LUN); Fh (при Length=3) — ЛУ не задано (последующие 7 байт содержат FFh). В случае 16-битных номеров LUN их два байта соответствуют полю адреса 1-го уровня (байты остальных уровней — нулевые), при этом использование зависи- мых устройств и расширенная адресация невозможны. Если число ЛУ не пре- вышает 256, то формально используется ПУ-адресация с BUS_IDENTIFIER=O; если число Л У больше (до 16 384), используется плоская адресация. Выполнение команд Для выполнения команды SCSI инициатор использует сервис транспортного уровня, посылающий команду целевому устройству. Далее целевое устройство, пользуясь соответствующими транспортными сервисами, организует доставку данных и информации о состоянии, соответствующих активной (исполняемой) команде. В плане передач данных команды могут быть однонаправленными и двунаправленными. Однонаправленные (unidirectional) команды требуют переда- чи только в одном направлении: чтение (к инициатору) или запись (от инициа- тора). При исполнении двунаправленной (bidirectional) команды данные переда- ются в обоих направлениях В системе SCSI могут возникать ситуации, требующие уведомления инициатора о каких-либо событиях, уведомления выполняются по инициативе целевого уст- ройства. Процедура подачи команд Для того чтобы подать команду целевому устройству, клиентское приложение выполняет вызов процедуры Execute Command — сервиса, предоставляемого транспортным уровнем. У этой процедуры имеется набор входных и выходных аргументов. Входные аргументы. ♦ I_T_L_X — связка (nexus), идентифицирующая порт инициатора (I), целевое устройство (Т), логическое устройство (L), к которому относится команда, и тег задания в очереди (Q). Последняя буква х означает, что тег может отсут- ствовать (связка ITL); ♦ CDB — блок дескриптора команды SCSI; ♦ Task Attribute — атрибут задания для команд, помещаемых в маркированные очереди (с тегами). В цепочке команд атрибут указывается только для первой команды. Специальный атрибут АСА предназначен для заданий обработки особых случаев;
186 Глава 9. Интерфейс SCSI ♦ Data-In Buffer Size — размер входного буфера (в байтах) для данных, возвра- щаемых при исполнении команды; ♦ Data-Out Buffer — выходной буфер с информацией, передаваемой логическому устройству при исполнении команды; ♦ Data-Out Buffer Size — размер выходного буфера (в байтах); ♦ Autosense Request — запрос автоматической передачи уточненного состояния (sense data). Транспортный протокол может не поддерживать автоматиче- скую передачу или же выполнять ее всегда. Логические устройства также мо- гут не поддерживать автоматическую передачу; ♦ CRN (Command Reference Number) — необязательный последовательный но- мер команды для данной связки I_T_L. Выходные аргументы'. ♦ Data-In Buffer — входной буфер с информацией, возвращаемой логическим устройством во время выполнения команды. Содержимое буфера считается действительным только при завершении команды с состоянием Good, Condi- tion Met, Intermediate или Intermediate-Condition. При других состояниях в бу- фере также могут присутствовать действительные данные, но об этом можно узнать только по уточненному состоянию; ♦ Sense Data — буфер для данных уточненного состояния, которые устройство посылает по команде Request Sense, автоматически при особых случаях (ис- ключениях) и по возникновению асинхронных событий; ♦ Status — байт состояния завершения команды. Ответ на вызов сервиса (service response) имеет три варианта: ♦ Task Complete — логическое устройство сообщило о завершении выполнения задания с состоянием, отличным от Intermediate или Intermediate-Condition Met, ♦ Linked Command Complete — логическое устройство сообщило о нормальном завершении связанной команды (не последней в цепочке) — состояние Inter- mediate или Intermediate-Condition Met, ♦ Service Delivery Or Target Failure — команда завершена из-за ошибки в подсис- теме доставки или некорректной работы целевого устройства. В этом случае все выходные аргументы (входной буфер, буфер уточненного состояния и байт состояния) недействительны. Дескрипторы команд Блок дескриптора команды (CDB) может иметь фиксированную (6, 10, 12 или 16 байт) или же произвольную длину. Блок (рис. 9.6) всегда начинается с байта кода операции (OpCode) и завершается управляющим байтом Control, содержимое остальных байтов блока определяется командой. В байте OpCode поле Group Code задает группу команд и их длину: ООО — 6-байтные, 001 и 010 — 10-байтные, 101 — 12-байтные, 100 — 16-байтные. 0pCode=7Fh опре- деляет дескриптор с произвольной длиной, однако длину более 16 байт поддер- живают не все транспортные протоколы. Поле Command Code задает код команды в пределах группы.
9.2. Архитектурная модель SCSI — SAM 187 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0 Op Code 0 Op Code 0 Op Code 1 Misc | (MSB) 1 Misc | SERV_ACT 1 MISC | SERV_ACT 2 LBA 2 (MSB> LBA 2 (MSB) LBA 3 (LSB) 5 (LSB) 5 (LSB) 4 Length 6 Misc 6 (MSB) . .. ' ' 1 ДПЛТП 5 Control 7 (MSB) . .. ' ' 1 АПЛТП 9 LOI IMU 1 (LSB) LUI lUUl 8 (LSB) 10 Misc 9 Control 11 Control 7 6 5 4 3 2 1 0 0 1 2 5 6 9 10 13 14 15 (MSB) . .. ' ' Length _________(LSB) _________Misc_____ Control Op Code Misc | SERV_ACT (MSB) LBA (LSB) Additional CDB data 7 6 5 4 3 2 1 0 [Vendor specffic|^/^^^0<^| NACA| (Flag) | LINK | e Рис. 9.6. Формат блока дескриптора команды: а — 6-байтный, б — 10-байтный, в — 12-байтный, г — 16-байтный, д — 16-байтный с расширенным адресом LBA, е — байт Control В SCSI-1 биты [7:5] первого байта использовались как поле LIIN (поле номера ЛУ). В SCSI-2 и более поздних версиях идентификатор LIIN исключен из деск- риптора команды (передается иным способом), и это поле (Misc) может исполь- зоваться для другой информации. Адрес логического блока (LBA) может иметь длину 21 бит для 6-байтных бло- ков, 32 бита — для 10- 12- и 16-байтных и 64 бита — для 16-байтных. В ряде ко- манд поле LBA не используется. Поле длины Length (количество блоков или байтов) может относиться к длине передаваемых данных (transfer length), к длине блока параметров (parameter list length) или к длине блока, резервируемого ИУ под данные (allocation length). Поле имеет один из трех вариантов назначения в зависимости от команды. При однобайтном задании длины 0 соответствует значению 256, в длинных формах 0 указывает на отсутствие передач. В ряде команд поле не используется. Поле Serv Act уточняет действие (Service Action), выполняемое в рамках общей команды, заданной кодом операции.
188 Глава 9. Интерфейс SCSI В байте Control (рис. 9.6, е) биты [7:6] используются по усмотрению разработчи- ка, а из оставшихся определены следующие биты: ♦ Link — признак цепочки команд, означающий, что выполнение данной коман- ды еще не является завершением задания; ♦ F1 ад — флаг особых условий, используемый, например, для генерации преры- вания по исполнению данной команды (упразднен в SAM-2); ♦ NACA — управление реакцией устройства на особые условия, возникающие при отработке команды. При NACA=O в устройстве будет устанавливаться режим СА (Contingent Allegiance — условная зависимость), при NACA=1 — режим АСА (Auto Contingent Allegiance — автоматическая условная зависимость). Обратим внимание на используемый порядок следования байтов (Big Endian): первыми передаются старшие байты (бит MSB — самый старший), за ними — младшие (бит LSB — самый младший). Зарезервированные поля для совмести- мости с будущими стандартами должны иметь нулевые значения. Передача данных Сервисы транспортных протоколов обеспечивают передачу блоков данных между сервером логического устройства и буферами (входным и выходным) клиентско- го приложения. Для сервера устройства буферы выглядят как цельные, логически непрерывные области, достаточные для размещения входных и выходных данных, требуемых для исполнения команды. Транспортный протокол должен обеспечи- вать возможность сегментации — пересылки всего требуемого объема одним или несколькими блоками. Размер пересылаемого блока и его смещение в клиентском буфере заказывает сервер логического устройства. Минимальной единицей пере- дачи, которой оперируют счетчики и указатели смещения, является байт. Транс- портный протокол может (необязательно) поддерживать произвольный доступ к буферам: выполнять передачу очередного сегмента (блока) с произвольного сме- щения в буфере. При этом может разрешаться перекрытие сегментов (в этом слу- чае для передачи всего буфера физически передается больше байтов, чем длина буфера). Если произвольный доступ не поддерживается, то сегменты должны пе- редаваться с монотонным нарастанием смещения (от нулевого). Состояния, исключения и асинхронные события Байт состояния передается логическим устройством, когда оно завершает (нор- мально или ненормально) выполнение команды. В байте состояния используют- ся только биты [5:1], возможные состояния приведены в табл. 9.1. Таблица 9.1. Байт состояния Байт Состояние Значение 0 Good Успешное завершение команды 2 Check Condition Указание на особые условия, возникшие при выполне- нии команды 4 Condition Met Запрошенная операция выполнена (для одиночных ко- манд Search Data и Pre-Fetch)
9.2. Архитектурная модель SCSI — SAM 189 Байт Состояние Значение 8 Busy Занято (невозможен прием команды) 10h Intermediate Успешное выполнение команды в цепочке 14h Intermediate Condition Met Запрошенная операция в цепочке команд выполнена 18h Reservation Conflict Попытка обратиться к ЛУ, зарезервированному другим ИУ 22h Command Terminated Завершение текущего процесса по сообщению Terminate I/O Process или по асинхронному событию (отменено, начиная с SAM-2) 28h Task Set Full Набор заданий заполнен, задание в очередь не постав- лено 30h АСА Active Команда не принята из-за режима АСА 40h Task Aborted Задание снято по инициативе другого инициатора (SAM-2) В процессе выполнения команды в устройстве могут возникнуть особые условия, или исключения (exceptions), переводящие Л У в режим СА или АСА, о чем сооб- щается байтом состояния Check Condition, В этом случае в логическом устройст- ве для отработки исключительной ситуации все задания блокируются на время действий режима. Продолжение нормальной работы (разблокирование заданий) обеспечивается по-разному, в зависимости от наличия автозапроса уточненного состояния (параметра Autosense Request процедуры запуска задания) и бита NACA управляющего байта дескриптора командного блока: ♦ если NACA=O и автозапроса нет, то разблокирование (сброс режима С А) вызы- вает посылка любой последующей команды (подразумевается, что это будет команда Request Sense, запрашивающая уточненное состояние); ♦ если NACA=O и установлен автозапрос, то разблокирование (сброс режима С А) произойдет автоматически, как только устройство передаст данные уточнен- ного состояния; ♦ если NACA=1, то в устройстве устанавливается режим АСА, и разблокирование произойдет только при сбросе этого режима (функцией Clear АСА управле- ния заданиями или специальными командами). Автоматическое сообщение уточненного состояния (autosense) поддерживается всеми транспортными протоколами, кроме старых параллельных, управляемых сообщениями и не допускающих передач информационных блоков (см. 10.2). В SAM определен набор правил, регулирующих поведение устройств в случае возникновения особых условий. В этих правилах (реакция на поданную коман- ду) учитывается режим (СА или АСА), атрибут задания подаваемой команды (АСА или обычный), а также порт инициатора, с которого подается новая коман- да (тот же порт, обращение от которого вызвало особые условия, или другой). В целевых устройствах могут возникать события, требующие асинхронного уве- домления — передачи блоков уточненного состояния, не связанных с текущими исполняемыми командами. Асинхронное уведомление требуется в случае воз- никновения событий различных типов:
190 Глава 9. Интерфейс SCSI ♦ Возникновение исключения после завершения (с точки зрения инициатора) выполнения команды. Пример — команда записи на устройство с кэш-памя- тью завершилась (данные помещены в кэш), но при их записи на носитель произошла неисправимая ошибка. ♦ Появление нового доступного устройства: включили питание, устройство проинициализировалось и готово к приему команд. ♦ Устройство требует внимания. Например, устройства со сменным носителем переходят из неготовности в готовность (сменился носитель); оператор запро- сил смену носителя, переключил режим защиты записи и т. п. ♦ Произошло асинхронное событие. Например, устройство последовательного доступа после команды Rewind (перемотка), поданной с флагом Immediate (за- вершение команды до физического исполнения), достигло начала носителя, о чем и посылает асинхронное уведомление. Транспортный протокол должен обеспечивать возможность передачи асинхрон- ных уведомлений, но для целевых устройств эту возможность всегда можно за- претить. Асинхронные уведомления посылаются на предварительно указанный порт инициатора. Альтернативой асинхронным уведомлениям является установ- ка байта состояния Check Condition в ответ на исполнение команды. В случае ис- ключений такой ответ допустим только для команд от того инициатора, чья ко- манда вызвала исключение. Управление заданиями В SAM определены механизмы управления заданиями, учитывающие возможно- сти логических устройств обслуживать очереди заданий. Каждое задание имеет определенное время жизни с точки зрения как инициатора (клиентского прило- жения), так и логического устройства, его выполняющего. Инициатор может уцравлять.исцрлнением заданий, используя атрибуты заданий и сервисы управ- ления. Новое задание создается сервером устройства, когда он получает очередную команду, не являющуюся продолжением цепочки команд. Задание существует в логическом устройстве до тех пор, пока его сервер не пошлет через транспорт- ный протокол ответ о его завершении (Task Complete) или же оно не будет снято принудительно (Task aborted). Для клиентского приложения задание «живет» с момента вызова транспортного сервиса Send SCSI Command и до одного из следующих событий: ♦ получение ответа о завершении задания (Task Complete)', ♦ уведомление о снятии задания другим инициатором или о каком-либо сбросе (устройства, шины и т. п.); ♦ сообщение об отказе доставки команды (Service Delivery Or Target Failure); ♦ получение ответа об успешном выполнении одной из управляющих функций (отмена задания или набора заданий, сброс логического устройства или всего целевого устройства).
9.2. Архитектурная модель SCSI — SAM 191 Команда начинает жизнь с момента ее подачи, а завершает по тем же условиям, что и задание, а также по получении ответа Linked Command Complete. Каждое задание в логическом устройстве может находиться в одном из следую- щих состояний: ♦ разрешенное (enabled) задание может стать текущим и завершиться в любой момент; ♦ дремлющее (dormant) задание не может стать текущим, пока не завершатся другие (предыдущие); ♦ заблокированное (blocked) задание не может быть завершено (и становиться активным) из-за установившегося режима С А или АСА\ ♦ завершенное (ended) задание покидает набор. Новое задание попадает в разрешенное или дремлющее состояние в зависимости от его атрибутов и состояния очереди. Из дремлющего в разрешенное задание переходит согласно его атрибутам и продвижению очереди. Разрешенное зада- ние блокируется, если его выполнение вызывает исключение, переводящее ЛУ в режим С А или АСА. Снять (функцией Abort task) можно только дремлющее или заблокированное задание. Задание может иметь один из следующих атрибутов, влияющих на его «жизнь» в устройстве: ♦ Simple (простое) — задание попадает в дремлющее состояние и не переходит в активное, пока не завершены все предшествующие задания с атрибутами Ordered и Head of Que. Последовательность заданий, поставленных с этим ат- рибутом, выполняется в порядке, удобном устройству. ♦ Ordered (упорядоченное) — задание попадает в дремлющее состояние и не пе- реходит в активное, пока не завершены все предшествующие задания. После- довательность заданий, поставленных с этим атрибутом, выполняется в по- рядке их постановки. ♦ Head of Que (внеочередное) — задание сразу попадает в активное состояние. Если с этим атрибутом ставится несколько заданий, они конкурируют. ♦ АСА (специальное) — задание, обслуживающее условие АСА; оно сразу попа- дает в активное состояние. В одном наборе заданий может быть не более од- ного задания с атрибутом АСА. Для управления заданиями транспортный уровень предоставляет специальный сервис, в котором определен набор управляющих функций (в скобках указана связка, к которой адресуется функция): ♦ Abort Task (I_T_L_Q) — снятие задания с определенным тегом (только для Л У, поддерживающих маркированные очереди). Снятие задания гарантирует, что от него больше не поступит никаких ответов (и пересылок данных). ♦ Abort Task Set (I_T_L) — снятие набора заданий в ЛУ. Выполняется снятие всех заданий, поставленных данным инициатором. Эквивалентно серии за- просов Abort Task, поддерживается всеми ЛУ.
192 Глава 9. Интерфейс SCSI ♦ Clear АСА (I_T_L) — снятие задания и сброс режима АСА в логическом уст- ройстве. Если устройство находится в режиме СА, запрос игнорируется (но не отвергается). ♦ Clear Task Set (I_T_L) — сброс набора заданий (невзирая на состояния зада- ний). Носитель может быть изменен частично выполненными командами. ♦ Logical Unit Reset (I_T_L) — сброс логического устройства (и всех заданий и режимов). ♦ Target Reset (I_T) — сброс целевого устройства (и всех его логических уст- ройств). ♦ Wakeup (1_Т) — генерация сигнала пробуждения, вызывающего сброс портов. На запрос сервиса управления возможны три варианта ответа: ♦ Function Complete — успешное выполнение. ♦ Function Rejected — функция не выполнена, поскольку не поддерживается це- левым (или логическим) устройством. ♦ Service Delivery or Target Failure — функция не выполнена из-за ошибки под- системы доставки или устройства. Отличия ATAPI от SCSI Для интерфейса АТА, массово используемого в настольных компьютерах, введе- на возможность работы с командами SCSI — спецификация ATAPI, которая по- зволяет расширить набор типов устройств, подключаемых к АТА. Здесь исполь- зуются те же блоки дескрипторов команд (CDB), однако архитектурные возможности SCSI задействованы в усеченном (упрощенном) варианте. Эти уп- рощения перечислены ниже. В ATAPI нет возможности адресации логических устройств, поэтому подразуме- вается, что все команды относятся к LUN=O. В ATAPI нет SCSI-функций управления заданиями: их можно только запускать, подавая команду. Функции управления выполняются только АТА-командой DEVICE RESET, которая работает так же, как Logical Unit Reset. В ATA/ATAPI поддерживаются 16-байтные блоки CDB, хотя чаще используют- ся 12-байтные. Блоки переменной длины в ATAPI не поддерживаются. Устройство может сообщить о состоянии завершения GOOD или CHECK CON- DITION. Остальные варианты завершения (BUSY, TASK SET FULL, RESERVA- TION CONFLICT и т. п.) не поддерживаются. Автоматического сообщения уточ- ненного состояния (Autosense) в ATAPI нет, по биту Sense Key в регистре Егг (состояние CHECK CONDITION) хост должен подать команду REQUEST SENSE. Для устройств ATAPI приходится поддерживать и ряд команд АТА (например, CHECK POWER MODE). Для устройств ATAPI в режиме DMA невозможно передавать блоки данных с нечетным числом байтов, хотя в режиме РЮ это возможно. В ATAPI имеется 5-битный тег заданий (32 допустимых значения), но реально теги и очереди вообще не используются.
9.3. Хост-адаптер SCSI 193 В SCSI нет идентификатора протокола ATAPI, и вместе с SCSI-командой INQUIRY приходится использовать АТА-команду IDENTIFY PACKET DEVICE. Устройства ATAPI не должны проверять зарезервированные поля в блоках CDB, а устройства SCSI это делать могут. Если в ATA/ATAPI отсутствует перекрытие команд (а оно практически и не ис- пользуется), то ряд команд для ленточных устройств (ERASE, LOAD, LOCATE, REWIND, SPACE и WRITE FILEMARK) завершаются немедленно. В нормальных устройствах SCSI они посылают информацию о состоянии только по факти- ческому исполнению. Чтобы определить реальное состояние завершения этих команд для устройств ATAPI, программа должна использовать команды READ POSITION 9.3. Хост-адаптер SCSI Хост-адаптер является важнейшим узлом интерфейса, определяющим произво- дительность системы SCSI. В его задачу входит передача данных между хостом (программой, исполняемой центральным процессором) и другими устройствами, подключенными к шине, по протоколам вышеописанных физических интерфей- сов. Структуры передаваемых блоков данных и команды устройств стандартизо- ваны, однако архитектуры и программные модели адаптеров не стандартизованы (в отличие, например, от адаптеров АТА). Существует широкий спектр адапте- ров, к простейшим из которых можно подключать только устройства, некритич- ные к производительности. Такие адаптеры могут входить, например, в комплект поставки сканеров, а подключение к ним диска может оказаться невозможным. В простейших адаптерах весь протокол шины SCSI (последовательность фаз) может реализовываться центральным процессором хоста при минимальных ап- паратных средствах. Высокопроизводительные адаптеры имеют собственный специализированный процессор, большой объем буферной памяти и используют высокоэффективные режимы прямого управления шиной для доступа к памяти компьютера. Адаптеры SCSI существуют для всех шин расширения (PCI, PCI-X, PCI Express, CardBus, PCMCIA, ISA, EISA, MCA, VLB), шин USB и FireWire и даже для LPT-порта. Ряд системных плат имеют встроенный адаптер SCSI, подключенный к одной из локальных шин. При выборе интерфейса, к которому подключается хост-адаптер, следует учитывать производительность — интерфейс не должен стать узким местом при обмене с высокопроизводительными устрой- ствами SCSI. Наибольшую эффективность имеют хост-адаптеры для шин PCI, PCI-X, PCI Express, CardBus. Конечно, за мощный адаптер для сервера прихо- дится платить — его цена может превышать цену рядового настольного компью- тера. Еще дороже хост-адаптеры со встроенными контроллерами RAID-мас- сивов, которые содержат мощный RISC-процессор и большой объем локальной памяти. Конфигурирование хост-адаптеров с точки зрения шины SCSI не отличается от конфигурирования других устройств. Утилита конфигурирования обычно вхо- дит в расширение BIOS, установленное на плате адаптера, и приглашение к ее вызову выводится на экран во время теста POST.
194 Глава 9. Интерфейс SCSI Как и всякая карта расширения, хост-адаптер должен быть сконфигурирован с учетом шины расширения, к которой он подключается. Системные ресурсы для шинного адаптера SCSI включают: ♦ область памяти для расширения ROM BIOS, необходимого для поддержки конфигурирования устройств и дисковых функций (если в системе установ- лено несколько однотипных хост-адаптеров, для них используется ROM BIOS с одного адаптера, а разнотипные хост-адаптеры не всегда могут работать вместе); ♦ область разделяемой буферной памяти; ♦ область портов ввода-вывода (I/O port) или памяти для отображения регистров; ♦ номер запроса прерывания (IRQ); ♦ канал прямого доступ к памяти (для старых адаптеров шин ISA/EISA), обыч- но использующийся лишь для прямого управления шиной (bus mastering). Всем устройствам SCSI, в том числе хост-адаптеру, требуются специальные драйверы. Базовый драйвер дисковых устройств входит в BIOS хост-адаптера; он обычно эмулирует трехмерную адресацию дискового сервиса INT 13h. Расши- рения, например ASPI (Advanced SCSI Programming Interface), загружаются от- дельно. От драйверов значительно зависит производительность устройств SCSI. «Умное» ПО способно эффективно загружать работой устройства, а иногда и «срезать углы» — выполнять копирование данных между устройствами без вы- хода на системную шину компьютера. Наиболее предпочтительны драйверы, ра- ботающие в режиме прямого управления шиной; их применение позволяет реа- лизовать все преимущества SCSI в многозадачных системах. 9.4. Типы периферийных устройств Для целевых устройств SCSI определена стандартная классификация типов (табл. 9.2). В сложное ПУ могут входить несколько однотипных логических уст- ройств (со своими номерами LUN). По характеру обмена данными устройства разделяются на 2 класса — блочные (block device) с типами 0, 4, 5, 7 и поточные (stream device) с типами 1, 2, 3, 9. Устройства прямого доступа (0) позволяют сохранять блоки данных. Каждый логический блок хранится по уникальному адресу (LBA). Взаимное расположе- ние логических блоков на носителе не регламентируется. Адрес первого логиче- ского блока — нулевой, последнего — (п - 1), где п — общее число блоков. В це- почках команд устройствами может поддерживаться относительная адресация, когда исполнительный адрес в команде определяется смещением относительно адреса, действовавшего в предыдущей команде. Блоки данных хранятся на носителе вместе с дополнительной информацией, ис- пользуемой контроллером для управления чтением и записью, а также для обес- печения надежности хранения данных (ЕСС- или CRC-коды). Формат дополни- тельных данных не регламентируется, ЦУ скрывает эти данные от ИУ.
9.4. Типы периферийных устройств 195 Таблица 9.2. Типы ПУ SCSI Код типа Назначение 00h Direct-access device — устройства прямого доступа (накопители на магнитных дисках) 01h Sequential-access device — устройства последовательного доступа (типичные накопители на магнитных лентах) 02h Printer device — принтеры 03h Processor device — процессоры (устройства обработки данных) 04h Write-once device — устройства однократной записи (некоторые оптические диски) 05h CD-ROM device — накопители CD-ROM 06h Scanner device — сканеры 07h Optical memory device — устройства оптической памяти 08h Medium Changer device — устройства смены носителей (jukebox) 09h Communications device — коммуникационные устройства OAh-OBh Устройства класса ASC IT8 (Graphic Arts Pre-Press Devices — высококачествен- ные устройства печати) OCh Array controller device — контроллеры массивов накопителей ODh Enclosure services device — сервисные устройства шкафов OEh Reduced block command devices — блочные устройства с сокращенным набо- ром команд (RBC) OFh Optical card reader/writer device — устройства считывания и записи оптических карт (штрих-коды) 1Oh-1Eh Зарезервировано 1Fh Неизвестный тип или устройство отсутствует Для каждого блока может быть установлена своя длина, но чаще используют единую длину блока для всего носителя. Группа смежных блоков одинаковой длины называется экстентом (fextent), экстенты определяются командой MODE SELECT, длину блока можно узнать по команде MODE SENSE. После изменения длины блока для активизации экстента обычно требуется форматирование. Носитель может быть разделен на области, одна из которых используется для хранения блоков данных, другая резервируется для замены дефектных блоков, часть носителя может использоваться контроллером для обслуживания устрой- ства. Дефектные блоки области данных могут быть переназначены на другую об- ласть носителя, что позволяет их скрыть. Носитель может быть фиксированным и сменяемым (removable). Сменяемый носитель в картридже (или чехле), если таковой предусматривается конструк- цией, называют томом (volume). Для чтения-записи том должен быть смонти- рован.
196 Глава 9. Интерфейс SCSI Устройство может быть зарезервировано каким-либо инициатором, при этом доступ к нему других инициаторов ограничивается. Ограничения распространя- ются на Л У или экстент. Устройства, имеющие кэш данных, могут поддерживать политику обратной за- писи (Write Back, WB). При этом появляются интервалы времени, в течение ко- торых внезапное отключение питания устройства приведет к потере данных, по- скольку сообщение о завершении команды посылается после записи в кэш, а не на носитель. Сообщения об ошибках при WB поступают к ИУ с опозданием. Чтобы избежать этих неудобств, ИУ может запретить устройству использовать WB. Отдельные блоки в кэше можно фиксировать, не допуская их замещения при последующих операциях обмена. Типичный пример устройств прямого доступа — накопитель на магнитных дис- ках (винчестер). ВНИМАНИЕ --------------------------------------------------------------- Винчестер с интерфейсом SCSI не имеет собственной трехмерной логической геометрии. В соответствии с системой команд SCSI доступ к его секторам выполняется только по линейно- му логическому адресу (LBA). Трансляцию LBA в номер физического цилиндра, головки и сек- тора выполняет встроенный контроллер, скрывая от пользователя и зонный формат записи. Трехмерную логическую геометрию, по которой к диску можно обратиться через BIOS INT 13h, «придумывает» и эмулирует подсистема SCSI BIOS, «зашитая» в ПЗУ контроллера SCSI или за- гружаемая. Есть устройства прямого доступа на ленточном носителе — Floppy Таре. Именно для них эффективна команда SEEK. Устройства прямого доступа могут не иметь подвижных носителей, а основываться на памяти разной природы (SRAM, DRAM, FRAM, EEPROM, флэш-память). Устройства последовательного доступа (1) имеют ряд особенностей, связанных с их принципом действия. Носитель представляет собой магнитную ленту с мно- годорожечным, серпантинным или наклонно-строчным типом записи. Носитель — всегда сменяемый, с некоторым конструктивным обрамлением (катушка, кар- тридж), также называется томом. Том имеет начало носителя BOM (beginning- of-medium) и конец носителя ЕОМ (end-of-medium). При записи ИУ должно за- ранее узнавать о приближении конца носителя, для чего определяется позиция раннего предупреждения EW (Early Warning) с соответствующим маркером. Это позволяет после записи блока данных из буфера поместить на носитель соответ- ствующий концевой маркер. Том может иметь один или несколько разделов (partitions), нумеруемых с нуля. Разделы располагаются друг за другом, без перекрытия. Каждый раздел «х» имеет начало ВОР х (Begining-Of-Partition х), конец ЕОР х и раннее предупреждение EW х. Между началом и концом раздела помещаются блоки данных и маркеры. Блоки данных, передаваемые ИУ, назы- ваются логическими. Логический блок может занимать один или несколько физических блоков данных на носителе, в последнем случае за блокирование-де- блокирование отвечает ЦУ. Описатели записанных физических и/или логи- ческих блоков могут храниться на носителе (определяется форматом записи). Буфер устройства должен вмещать по крайней мере один логический блок.
9.4. Типы периферийных устройств 197 Принтеры (2), подключаемые через интерфейс SCSI, не требуют особых команд для управления, поскольку функции реализуются через поток передаваемых данных. Однако двунаправленная связь по шине позволяет ввести дополнитель- ные команды, служащие для отслеживания состояния принтеров с буферной па- мятью, и обеспечить целостность заданий. Принтеры могут иметь встроенный контроллер SCSI или подключаться как ЛУ к внешнему контроллеру по парал- лельному (например, Centronics) или последовательному (например, RS-232) интерфейсу. Параметры подключения определяются командой MODE SELECT. Процессорными устройствами (3) в терминологии SCSI являются источники и потребители пакетов информации, трактовка которой стандартом не определе- на. Примерами процессорных устройств являются компьютеры, обменивающие- ся сообщениями односторонним или двусторонним образом. Процессорным уст- ройством является и какое-либо сложное устройство отображения (графический дисплей), которое занято выводом потока сообщений. От коммуникационных устройств процессорные отличаются тем, что они являются источниками или потребителями информации, в то время как коммуникационные служат лишь посредниками. Заметим, что хост-адаптер SCSI не является процессорным уст- ройством — классы SCSI применимы только к целевым устройствам, а не к ини- циаторам обмена. Устройства оптической памяти (7) близки к устройствам прямого доступа со сменными носителями, но имеют ряд характерных особенностей. Большая ем- кость носителя вызывает необходимость применения команд с 12- и 16-байтным дескриптором. Устройства могут обеспечивать считывание, однократную или многократную запись. На носителе могут быть определены зоны, недоступные для записи. Блоки носителя имеют состояние «чистый» и «записанный», что от- мечается соответствующим атрибутом. В устройствах многократной записи пе- ред повторной записью необходимо стереть перезаписываемый блок. Стирание может выполняться специальной командой или автоматически по команде запи- си. В записи фаза стирания может отсутствовать. К этим устройствам примени- мо понятие обновления (update) логического блока — запись новых данных по тому же адресу логического блока, но на другое место носителя. Прежние дан- ные могут быть считаны специальной командой, указывающей, помимо адреса логического блока, и его поколение (generation). Емкость носителя в таком слу- чае сообщается без учета множества поколений. Оптические носители по срав- нению с магнитными имеют существенно более высокий уровень ошибок, так что приходится использовать более сложные алгоритмы восстановления инфор- мации. Устройства однократной записи (4), обычно оптические, отличаются невозмож- ностью перезаписи ранее записанного блока. Попытка повторной записи, в зави- симости от реализации устройства, может привести к потере записанных дан- ных. Каждый блок имеет состояние «записан» или «не записан», инициализация (форматирование) не применяется. Накопители CD-ROM (5) предназначаются для работы с CD. Изначально на дисках записывался звук, и они были рассчитаны не только на чтение блоков данных, но и на потоковый вывод на внешний аудиоинтерфейс. Запись не преду-
198 Глава 9. Интерфейс SCSI сматривалась. Данные на диске адресуются по-разному. Физический сектор име- ет 2352 байт, из которых обычно используется 2048, поле синхронизации 12 байт и поле тега адреса сектора 4 байт. Дополнительное поле 288 байт требуется для исправления ошибок данных, но если ошибки допустимы, его тоже используют для хранения данных. Таким образом, физический сектор данных может иметь размер 2048 байт (CD-ROM Data Mode 1) или 2336 и даже 2340 (вместе с полем тега) байт (CD-ROM Data Mode 2). В зависимости от размера логического блока (1024, 512 или 256 байт) сектор CD-ROM может вмещать 2, 4 или 8 блоков. Сканеры (6) передают ИУ данные, описывающие растровое изображение скани- руемого объекта. Команды позволяют задавать окна сканирования, определяя в них режим и разрешение. Для некоторых функций требуется посылка данных в сканер (например, полутоновые маски). Для сканеров с автоподачей имеются команды позиционирования. Устройства смены носителей (8) предназначены для автоматического манипулиро- вания сменными носителями — дисками и картриджами с магнитными лентами. В SCSI они представляются ЛУ, отличающимися от первичных устройств хране- ния, которые они обслуживают. Модель устройства состоит из набора адресуемых элементов, каждый из которых может «держать» только одну единицу носителя: ♦ Medium transport element — элемент транспортировки носителя; ♦ Storage element — место хранения единицы носителя, когда он не находится ни в одном из элементов трех других типов; ♦ Import export element — элемент, с помощью которого устройство принимает носители извне или отдает их; ♦ Data transfer element — позиция первичного устройства, осуществляющего об- мен данными с носителем. Элементы адресуются 16-битными адресами, доступна информация об их состоя- нии. Каждый том носителя снабжается идентификатором-тегом, по которому оп- ределяется его нахождение в элементах. Коммуникационные устройства (9) предназначены для обмена информацией с устройствами через внешнюю по отношению к шине SCSI среду передачи дан- ных. Внешние протоколы стандартом SCSI не описываются — вся необходимая для них информация заключена в сообщениях, передаваемых и принимаемых ИУ по командам SEND MESSAGE и GET MESSAGE. 9.5. Система команд SCSI Система команд SCSI включает общие команды, применимые для устройств всех классов, и специфические для каждого класса. Как общие, так и специфические наборы команд содержат обязательные (mandatory), дополнительные (optional) и фирменные (vendor specific) команды. Любое устройство SCSI должно поддер- живать обязательные команды общего набора и своего класса, чем обеспечивает- ся высокий уровень совместимости. Любое логическое устройство обязано поддерживать три команды: Inquiry, Request Sense, Test Unit Ready, — а для ряда классов обязательна и команда Send Diagnostic.
9.5. Система команд SCSI 199 Эти команды используются для конфигурирования системы, тестирования уст- ройств, а также сообщений об ошибках и исключительных ситуациях. Команда Inquiry позволяет получить информацию о ЛУ через стандартизован- ный блок данных длиной 96 байт: тип подключенного ПУ, возможность смены носителя, поддержка 32- или 16-битного расширения шины, синхронного обме- на, относительной адресации, цепочек команд, очередей и уведомления об асин- хронных событиях. Здесь же описываются уровень поддержки стандартов SCSI (ISO, ANSI, ЕСМА), идентификаторы производителя, устройства и т. п. Формат блока по усмотрению производителя может быть расширен. Команда Request Sense позволяет получить информацию о состоянии выполне- ния каких-либо фоновых операций, а также разблокировать устройство в случае возникновения особых условий. Команда Test Unit Ready позволяет определить готовность устройства к исполне- нию других команд, а в случае неготовности — определить причину, перспекти- вы перехода в состояние готовности и необходимые для этого действия (про- граммные или физическое вмешательство оператора). Команда Send Diagnostic служит для запуска диагностических тестов устройства в нормальном или фоновом режиме. Устройства могут поддерживать многофункциональные команды Read Buffer и Write Buffer, их назначение определяется полем Mode в блоке дескриптора команды. С их помощью выполняются различные диагностические функции (например, эхо: чтение возвращает результаты предыдущей записи), загрузка микрокода, запись журналов, управление коммуникационным протоколом экс- пандеров и специфические функции по усмотрению разработчика. Набор команд в алфавитном порядке названий для устройств классов 0-9 при- веден в табл. 9.3. В графе «Команда» в скобках указана длина блока дескрипто- ров для случаев, когда существуют разные версии одноименных команд. В графе «Применимость» указаны номера типов ПУ, соответствующие табл. 9.3 (символ * соответствует всем типам). Команды для каждого типа устройств могут быть обязательными — номер сопровождается символом т (Mandatory), или необяза- тельными — номер типа сопровождается символом о (Optional). Часть команд в устройствах разных классов реализуется по-разному, что отмечено обозначени- ем *z. Таблица не претендует на полноту — в ней могут отсутствовать новые ко- манды и их модификации с более длинными блоками дескрипторов. Таблица приводится для ознакомления со спектром команд SCSI и их сравнения с коман- дами других интерфейсов (например, АТА). Ряд команд требует пояснений. Ко- манды копирования (Сору) и сравнения данных (Compare) оперируют парой ЛУ, которые могут принадлежать как одному ЦУ, так и разным. Возможность копирования между Л У разных целевых устройств определяется свойствами ве- дущего устройства копирования — Copy Manager (прежде называвшееся Сору Master). Копирование возможно между устройствами любых классов — прямого и последовательного доступа. Новая команда Extended Сору позволяет выпол- нять операции копирования между наборами источников и получателей. Источ- никами и получателями данных могут быть как логические устройства (указан- ные диапазоны их логических блоков), так и сегменты данных, описанные
200 Глава 9. Интерфейс SCSI соответствующими дескрипторами. Копируемые данные могут быть получены и клиентскими приложениями (командой Receive Copy Results, ссылающейся на идентификатор набора). В командах поиска Search Data данные ищутся сравне- нием указанного числа логических записей с эталоном. Логические записи опре- деляются длиной, начальным логическим блоком и смещением внутри него. Можно потребовать попадания искомых данных в один логический блок. Таблица 9.3. Команды SCSI Команда Код Применимость Назначение Change Definition 40h *o (устарело) Модификация определений операций для ЛУ Compare 39h *o (устарело) Побайтное сравнение данных двух ЛУ Copy 18h *o (устарело) Копирование данных с одного ЛУ на другое Copy And Verify 3Ah *о (устарело) Копирование данных с одного ЛУ на другое , с верификацией Erase 19h 1m Стирание (участка или до конца носителя) Erase (10) 2Ch 7о То же с 10-байтным блоком дескриптора Erase (12) ACh 7о То же с 12-байтным блоком дескриптора Exchange Medium A6h 8о Обмен носителями между двумя элементами устройства Extended Copy 83h *0 Расширенное копирование (операции с на- борами дескрипторов устройств и сегмен- тов) Format 04h 2о Выбор шрифтов и форм Format Unit 04h От 7о Форматирование устройства Get Data Buffer Status 34h 6о Опрос состояния буфера данных Get Message 08 h 9о Прием пакета из коммуникационного устрой- ства Get Message (10) 28h 9о То же с 10-байтным блоком дескриптора Get Message (12) A8h 9о То же с 12-байтным блоком дескриптора Get Window 25h 6о Получение информации о предварительно определенном окне Initialize Element Status 07h 8о Инициализация состояния элемента Inquiry 12h *т Опрос типа устройства, уровня стандарта, идентификатора производителя, модели и т. п. Load Unload 1Bh 1о Загрузка/разгрузка носителя Locate 2Bh 1о Позиционирование на заданный логический блок Lock-Unlock Cache 36h Оо 4о 5о 7о Фиксация заданных логических блоков в кэше устройства и ее отмена
9.5. Система команд SCSI 201 Команда Код Применимость Назначение Log Select 4Ch *0 Запись статистической информации, обра- ботка которой поддерживается устройством, в ЦУ или ЛУ Log Sense 4Dh *0 Считывание статистической информации с ЦУ или ЛУ Media Scan 38h 4o 7о Сканирование — поиск непрерывной области чистых или записанных блоков Mode Select (6/10) 15h/ 55h *z Запись параметров носителя, ЦУ или Л У (с 6/10-байтным блоком дескриптора) Mode Sense (6/10) 1Ah/ 5Ah *z Считывание параметров носителя, ЦУ или ЛУ (с 6/10-байтным блоком дескриптора) Move Medium A5h 8m Передача носителя Object Position 31h 6o Позиционирование (загрузка/выгрузка) ска- нируемого объекта Pause/Resume 4Bh 5o Пауза/продолжение воспроизведения аудио Persistent Reserve In 5Eh *0 Чтение информации об установленном устой- чивом резервировании логических устройств Persistent Reserve Out 5Fh *0 Запрос устойчивого резервирования логиче- ских устройств для монопольного или разде- ляемого использования Play Audio (10) 45h 5o Аудиовоспроизведение указанных логиче- ских блоков Play Audio (12) A5h 5o То же с 12-байтным блоком дескриптора Play Audio Msf 47h 5o Аудиовоспроизведение с адресацией MSF Play Audio Track/lndex 48h 5o Аудиовоспроизведение с указанием треков и индексов Play Track Relative (10) 49h 5o Аудиовоспроизведение с адресацией отно- сительно трека Play Track Relative (12) A9h 5o То же с 12-байтным блоком дескриптора Position To Element 2Bh 8o Позиционирование транспортного элемента к указанному элементу Pre-Fetch 34h Oo 4o 5o 7o Считывание блоков данных в кэш (без пере- дачи ИУ) Prevent Allow Medium Removal 1Eh Oo 1o 4o 5o 7o 8o Запрет/разрешение смены носителя в ЛУ Print OAh 2m Печать блока данных Read (6) 08h Om 1 m 4o 5o 7o Чтение данных (с 6-байтным блоком деск- риптора) Read (10) 28h Om 4m 5m 6m 7m То же с 10-байтным блоком дескриптора Read (12) A8h 4o 5o 7o То же с 12-байтным блоком дескриптора Продолжение &
202 Глава 9. Интерфейс SCSI Таблица 9.3 (продолжение) Команда Код Применимость Назначение Read Block Limits 05h 1m Запрос ограничений на длину блока (минимальная и максимальная длины) Read Buffer 3Ch *0 Чтение буфера (многофункциональное) Read Capacity 25h Om 4m 7m Определение емкости ЛУ Read CD-ROM Capacity 25h 5m Определение емкости CD-ROM (быстрое определение может давать погрешность) Read Defect Data 37h Oo 7o Чтение списков дефектных блоков (P-list — исходный список от изготовителя, G-list — список, заполняемый при эксплуатации) Read Defect Data (12) B7h 7o То же с 12-байтным блоком дескриптора Read Element Status B8h 8o Чтение состояния элементов Read Generation 29h 7o Чтение максимально возможного поколения для указанного логического блока Read Header 44h 5o Чтение заголовка логического блока CD-ROM Read Long 3Eh Oo 4o 5o 7o «Длинное» чтение — данные блока и поля ЕСС Read Position 34h 1o Запрос позиции данных, находящихся в буфере (адрес начала и конца, количество блоков и байтов) Read Reverse OFh 1o Чтение блоков с текущей позиции в обрат- ном направлении Read Sub-Channel 42h 5o Чтение данных субканала CD-ROM Read TOC 43h 5o Чтение таблицы содержимого CD-ROM Read Media Serial Number ABh *0 Чтение серийного номера носителя Read Updated Block 2Dh 7o Чтение определенного поколения обновлен- ного логического блока Reassign Blocks 07h Oo 4o 7o Переназначение дефектных блоков Receive 08h 3o Прием пакета Receive Copy Results 84h *0 Получение результатов выполнения команды Extended Сору Receive Diagnostic Results 1Ch *0 Получение результатов диагностики Recover Buffered Data 14h 1o 2o Восстановление данных, посланных в буфер, но не записанных (не напечатанных) из-за ошибки Release (6) 17h Om 2m 4m 5m 6m 7m 8o (уста- рело) Освобождение зарезервированного ЛУ, экс- тента или элемента
9.5. Система команд SCSI 203 Команда Код Применимость Назначение Release (10) 57h Om 2m 4m 5m 6m 7m 8o Освобождение зарезервированного ЛУ, экс- тента или элемента Report Device Identifier A3h *o Сообщение идентификатора устройства Report Luns AOh *o Сообщение списка идентификаторов логине* ских устройств Request Sense 03h *m Опрос уточненного состояния Request Volume Element Address B5h 8o Передача результатов команды Send Volume Tag Reserve (6) 16h Om 1 m 2m 4m 5m 6m 7m 8o (устарело) Предотвращение использования ЛУ (его экс* тента или элемента) другим ИУ Reserve (10) 56h *0 Предотвращение использования ЛУ (его экс- тента или элемента) другим ИУ Rewind 01h 1m Перемотка носителя к началу раздела Rezero Unit 01h Oo 4o 5o 7o 8o Приведение ЛУ в определенное состояние Scan 1Bh 6o Сканирование данных в определенном окне Search Data Equal (10/12) 31 h/ B1h Oo 4o 5o 7o Поиск данных, (не) совпадающих с эталоном Search Data High (10/12) 30h/ BOh Oo 4o 5o 7o Поиск данных, (не) больших эталона Search Data Low (10/12) 32h/ B2h Oo 5o 7o Поиск данных, (не) меньших эталона Seek (6/10) OBh/ 2Bh Oo 4o 5o 7o Позиционирование (с 6-байтным блоком де* скриптора). Команда эффективна для лен* точных устройств прямого доступа Send OAh 3m Посылка пакета Send (10) 2Ah 6o Посылка данных в устройство Send Diagnostic 1Dh *m Запуск теста ЦУ. Ответом является состоя- ние Good, если тест прошел успешно, или Check Condition в случае ошибки Send Message OAh 9m Посылка пакета в коммуникационное устрой- ство Send Message (10/12) 2Ah/ AAh 9o То же с 10- и 12-байтным блоком дескрип- тора Send Volume Tag B6h 8o Посылка тега тома (шаблона) для поиска его в элементах или для создания нового тега Set Device Identifier A4h *o Запись идентификатора устройства Set Limits (10/12) 33h/ B3h Oo 4o 5o 7o Определение области логических адресов, над которыми могут выполняться операции цепочки команд Продолжение &
204 Глава 9. Интерфейс SCSI Таблица 9.3 (продолжение) Команда Код Применимость Назначение Set Window 24h 6m Определение окна сканирования Slew And Print OBh 2o Прогон бумаги и печать Space 11h 1m Относительное позиционирование (вперед и назад) на заданное число блоков, файлов, маркеров и т. п. Start Stop Unit 1Bh Oo 4o 5o 7o Разрешение/запрет операций с носителем, извлечение носителя. Для устройств с кэшем перед остановом (Stop) автоматически вы- полняется синхронизация кэша Stop Print 1Bh 2o Останов печати с очисткой буфера или без нее Synchronize Buffer 10h 2o Синхронизация буфера — печать всего со- держимого, при невозможности — сообще- ние об ошибке Synchronize Cache 35h Oo 4o 5o 7o Синхронизация кэша — запись несохранен- ных данных заданного диапазона адресов на носитель Test Unit Ready OOh *m Опрос готовности ЛУ Update Block 3Dh 7o Обновление логического блока Verify 2Fh Oo 5o 7o Верификация — проверка возможности без- ошибочного считывания блоков данных с носителя Verify 13h 1o То же Verify (10/12) 2Fh/ AFh 4o 5o 7o То же или проверка занятости блоков (с 10-байтным блоком дескриптора) Write (6) OAh Oo 1 m 4o 7o Запись блоков данных, переданных ИУ (с 6-байтным блоком дескриптора) Write (10) 2Ah Oo 4m 7m Запись блоков данных, переданных ИУ (с 10-байтным блоком дескриптора) Write (12) AAh 4o 7o То же с 10-байтным блоком дескриптора Write And Verify 2Eh Oo 4o 7o Запись блоков данных, переданных ИУ, с верификацией записи Write And Verify (12) AEh 7o 4o То же с 12-байтным блоком дескриптора Write Buffer 3Bh *o Запись в буфер (но не на носитель), загрузка микрокода и иные функции Write Filemarks 10h 1m Запись маркера файлов Write Long 3Fh Oo 4o 7o «Длинная» запись — запись блока данных и поля ЕСС Write Same 41h Oo Запись блока данных, переданных ИУ, в группу смежных блоков или до конца носи- теля. Первые 4 байта в записываемых блоках могут быть заменены физическим или логи- ческим адресом блока
ГЛАВА 10 Параллельные шины SCSI Современные параллельные интерфейсы SCSI представляют собой реализацию транспортного уровня и уровня подключений архитектурной модели SCSI (SAM). Поскольку параллельный интерфейс SCSI появился до принятия модели SAM, некоторые части модели в нем не реализованы из-за ограничений транспортного протокола и исторически сложившихся соглашений. В частности, в параллель- ных интерфейсах нет имен портов и устройств (имеются только имена логи- ческих устройств). Идентификаторы портов ограничены 4-битным значением (16 возможных идентификаторов), размер поля LUN — 6-битным. Тем не менее основная клиент-серверная идеология SAM полностью реализована во всех вер- сиях параллельной шины. Каждому устройству назначается идентификатор (SCSI ID), уникальный на шине. Назначение идентификаторов производится статически (вручную или определяется положением устройства на шасси). По- пытки использовать технологию РпР для автоматического назначения иденти- фикаторов устройствам шины SCSI потерпели неудачу и прекратились. 10.1. Версии параллельной шины Параллельный интерфейс SCSI существует в нескольких версиях, различаю- щихся разрядностью шины, способами передачи сигналов и синхронизации. Фи- зически «узкий» интерфейс SCSI представляет собой шину, состоящую из 18 сиг- нальных и нескольких питающих цепей. В «широком» варианте число сигнальных цепей увеличено. Для защиты от помех каждая сигнальная цепь имеет собствен- ный обратный провод. На применяемых двухрядных разъемах контакты сиг- нальных и обратных цепей располагаются друг против друга. Это позволяет при- менять в качестве кабелей как витые пары проводов, так и плоские ленточные кабели, где сигнальные и обратные провода чередуются. С точки зрения переда- чи сигналов на значительные расстояния (до 25 м), это наиболее правильный подход к кабельным соединениям. По типу сигналов различают линейные (single ended) и дифференциальные (differential) версии SCSI. Их кабели и разъемы идентичны, но электрической совместимости устройств нет. Тип интерфейса обозначается стандартизованным значком — на рис. 10.1 приведены обозначения всех вариантов интерфейса SCSI, включая последовательный SAS, описанный в главе И.
206 Глава 10. Параллельные шины SCSI Рис. 10.1. Обозначения интерфейсов: а — SE, б — HVD, в — LVD, г — SE/LVD, д — SAS В широко используемой линейной версии SCSI (Single Ended, SE) каждый сиг- нал передается потенциалом с ТТЛ-уровнями относительно общего провода. Здесь общий (обратный) провод для каждого сигнала тоже должен быть отдель- ным, что снижает перекрестные помехи. В SCSI-1 применяются передатчики с открытым коллектором, приемники на биполярных транзисторах. Высокий уро- вень при пассивном состоянии передатчиков обеспечивают пассивные термина- торы (см. 10.4). В SCSI-2 стали применять и передатчики с активным снятием сигнала (active negation). Схема с открытым коллектором для снятия сигнала просто «отпускает» линию, и ее потенциал возвращается в исходное состояние только под действием терминаторов. При активном снятии выходная схема пе- редатчика кратковременно форсирует переход линии к потенциалу пассивного состояния, после чего «отпускает» линию, при этом создается иллюзия возмож- ности работы без терминаторов. В SCSI-3 стандарт SPI предписывает использо- вание интерфейсных схем КМОП (CMOS). Дифференциальная версия для каждой цепи задействует пару проводников, по которым передается парафазный сигнал. В первой дифференциальной версии (Diff), позже названной HVD (tiigh-Voltage Differential), используются «дально- бойные» дифференциальные приемопередатчики, применяемые и в интерфейсе RS-485, что позволяет значительно увеличить длину кабеля, сохраняя скорость обмена. Высоковольтный дифференциальный интерфейс применялся в диско- вых системах серверов, но в обычных PC не распространен. Интерфейс HVD (но еще с названием Diff) появился в SCSI-2, а в стандарте SPI-3 (SCSI-3 1999 г.) он уже упразднен, поскольку скорость Fast-80 и выше он не выдерживает. Низковольтный дифференциальный (Low-Voltage Differential, LVD) интерфейс позволяет работать на высоких скоростях при значительной длине шины (25 м для пары устройств, 12 м для шины). Универсальные устройства LVD (Multimode LVD) совместимы с устройствами SE благодаря возможности их автоматического переконфигурирования. Эти уст- ройства, обозначаемые как SE/LVD, распознают напряжение на линии DIFFSENS и по низкому уровню напряжения на ней способны переключаться из режима LVD в SE (с понижением доступной скорости обмена). Контакт разъема, на ко- торый выводится эта цепь, в устройствах SE заземлен, что и обеспечивает авто- матическое «понижение» режима всех устройств шины до SE, если имеется хотя бы одно устройство SE. ВНИМАНИЕ ------------------------------------------------------------- Устройства HVD электрически несовместимы ни с LVD, ни с SE. Подключение устройств HVD к шине с LVD или SE чревато выходом устройств из строя.
10.1. Версии параллельной шины 207 Информация по шине данных передается побайтно (пословно) с использованием механизма запросов (REQuest) и подтверждений (ACKnowledge). Каждый байт информации контролируется на нечетность, но контроль может быть отключен. В более поздних версиях шины для контроля достоверности используются CRC- коды, защищающие блоки данных или информационные блоки. Интерфейс под- держивает синхронную передачу данных, что позволяет ускорить обмен (в SCSI-1 синхронного режима не было). Скорость передачи данных определяется частотой переключений шины данных, измеряемой в МТ/с — миллионах передач в секунду (Mega Transfers per Second, MT/s), и разрядностью шины. Изначально разрядность шины SCSI составляла 8 бит {Narrow SCSI), а частота — до 5 МТ/с. Широкий вариант шины (Wide SCSI) имеет разрядность 16 бит. В первых версиях шины применялась классиче- ская синхронизация данных ST (Single Transition), при которой на действитель- ность данных указывал спад синхронизирующего сигнала. Позже ввели двойную синхронизацию DT (Double Transition), при которой на действительность дан- ных указывают и спад, и фронт синхронизирующего сигнала. В последних вер- сиях для самых высоких скоростей ввели режим расе1, в котором данные и син- хронизирующие сигналы переключаются одновременно. Особенности передачи данных в различных режимах рассмотрены далее. Допустимые варианты сочетаний типов приемопередатчиков (HVD, SE, LVD), синхронизации (ST, DT) и скоростей передачи приведены в табл. 10.1. Здесь в качестве меры скорости (Fast-5, -10...-160) указана максимальная частота пере- дач по шине данных. Максимальная скорость передачи данных указана для уз- кой и широкой шин (через сл'ш). Таблица 10.1. Варианты скоростей передачи для параллельных интерфейсов SCSI (Мбайт/с) Тип Скорость Async Fast-5 Fast-10 Fast-20 Fast-40 Fast-80 Fast- 160 Fast- 320 HVD (ST) + 5/10 10/20 20/40 40/80 - — — SE (ST) + 5/10 10/20 20/40 - - - - LVD ST + 5/10 10/20 20/40 40/80 - — — LVDDT — — -/20 -/40 -/80 -/160 -/320 (pace) -/640 (pace) Стандарт SCSI-1 SCSI-2 SCSI-2 SPI SPI-2 SPI-3 SPI-4 SPI-5 СОВЕТ ------------------------------------------------------------------- При наличии устройств SE и LVD их следует подключать к разным шинам, поскольку объедине- ние SE и LVD понижает допустимый скоростной режим до Fast-20. 1 Дословно и образно можно перевести как «иноходь» — одновременный шаг передней и задней то левых, то правых ног лошади.
208 Глава 10. Параллельные шины SCSI История развития параллельных интерфейсов в спецификациях SCSI выглядит следующим образом. ♦ В стандарте SPI/SIP (1992 г.) определены скорости Fast-10 (Fast Wide SCSI co скоростью 20 Мбайт/с). Позже (1995 г.) появилось дополнение с описани- ем режима Fast-20; устройства, поддерживающие этот режим, более известны как Ultra SCSI (Ultra Wide SCSI co скоростью 40 Мбайт/с). В стандарте оп- ределены Р-кабель (называемый «кабелем SCSI-З») и коннекторы для широ- кой шины на одном кабеле с 68-контактными разъемами. ♦ В стандарте SPI-2 (1999 г.) удвоена частота переключений благодаря использо- ванию интерфейса LVD. Интерфейс Fast-40 SCSI более известен как Ultra2 SCSI (Wide Ultra2 SCSI co скоростью передачи 80 Мбайт/с). Введены разъем SCA-2 (Single Connector Attachment) с возможностью «горячей замены» (hot swap) и 68-контактный разъем с «очень большой» плотностью контактов VHDCI (Very High Density Connector). В стандарт SPI-2 включены и А-кабель SCSI-2, и Р-кабель SPI. Это законченный документ, не ссылающийся на предыдущий и описывающий все параллельные интерфейсы SCSI, вплоть до Fast-40. ♦ В стандарте SPI-3 (2000 г.) удвоена частота передачи, но уже за счет двой- ной синхронизации — это интерфейс Fast-80DT, известный как Ultra3 SCSI или Ultral60. Для данного режима рассматривается только широкий (16 бит) вариант. Это тоже законченный документ, описывающий все параллельные интерфейсы SCSI вплоть до Fast-80DT и отменяющий традиционный (высо- ковольтный) дифференциальный вариант (HVD), SCAM (SCSI Configured AutoMatically — автоматическое конфигурирование устройств) и 32-битную шину (и Q-кабели). Рассматривается только интерфейс LVD, синхронизация по фронтам и спадам сигналов REQ#/ACK#, вводятся CRC-контроль передач, пакетированные команды и сообщения (packetized commands and messaging) и быстрый арбитраж (quick arbitration). ♦ В стандарте SPI-4 (2001 г.) снова удваивается частота переключений и получа- ется интерфейс Fast-160DT, уже известный как Ultra320 SCSI (только широкая шина, 320 Мбайт/с). Здесь появляется вариант двойной синхронизации с одно- временным переключением данных и стробирующих сигналов (режим расе). ♦ В стандарте SPI-5 (2003 г.) снова удваивается частота переключений и полу- чается интерфейс Fast-320DT. 10.2. Протокол параллельной шины Протокол параллельной шины определяет состав и использование сигнальных линий, способы адресации и получения доступа к шине (арбитраж), методы пе- редачи информации, фазы выполнения команд и механизмы согласования режи- мов работы. Сигналы шинного интерфейса Параллельный интерфейс SCSI является шинным, одной и той же сигнальной линией может управлять одно из нескольких устройств; если линией не управ-
10.2. Протокол параллельной шины 209 ляет ни одно из устройств, ее пассивное состояние обеспечивают терминаторы (см. п. 10.4). Устройство с каждой сигнальной линией может выполнять следую- щие действия: ♦ вводить сигнал (signal assertion) — переводить его в активное состояние; ♦ снимать сигнал (signal negation) — переводить его в пассивное состояние (возможно, активно «подталкивая» к уровню пассивного состояния); ♦ отпускать сигнал (signal release) — переставать управлять данной сигнальной линией (переводить приемопередатчик в z-состояние). Все сигналы интерфейса SE являются L-активными: активному состоянию и ло- гической единице соответствует низкий потенциал, что в данной книге отмечено символом «#» после мнемоники цепи. К этому привязаны и описания действий сигналов: спад (отрицательный перепад) означает переход к активному состоя- нию сигнала, фронт (положительный перепад) — к пассивному. В дифференциальных версиях (HVD и LVD) каждый сигнал передается в пара- фазном виде, вышеприведенные соглашения о полярности и направлениях отно- сятся к проводу, обозначаемому знаком «-». Обратные (парафазные) цепи обо- значаются знаком «+», они фигурируют лишь в таблицах назначений контактов разъемов. Назначение сигналов параллельной шины раскрывает табл. 10.2. Таблица 10.2. Назначение сигналов шины SCSI Сигнал Назначение BSY# Busy — шина занята SEL# Select — выбор целевого устройства инициатором (фаза Select) или инициа- тора — целевым устройством (фаза Reselect) C/D# Control/Data — передача управляющей информации (низкий уровень) или данных (высокий уровень) I/O# Input/Output — направление передачи относительно инициатора: вводу (от ЦУ) соответствует низкий уровень. Используется и для различения прямой (Select) и обратной (Reselect) выборки: фазе Selection соответствует низкий уровень MSG# Message — признак фазы сообщения или DT-данных DB[0:15]# Data Bus — инверсная шина данных P_CRCA (DBP) Parity/CRC Available. В традиционных режимах — бит четности, дополняющий количество единичных битов DB[0:7] до нечетного. В фазе арбитража не дей- ствует. В режиме передачи групп этим сигналом ЦУ указывает на передачу заполнителя или pCRC-кода. В режиме передачи информационных блоков этим сигналом ЦУ указывает на передачу последнего блока данных в потоке P1 (DBP1) Parity 1. В традиционных режимах — бит четности, дополняющий количество единичных битов DB[8:15] до нечетного. В фазе арбитража не действует. В режиме DT расе источник данных фазой переключения этого сигнала ука- зывает на действительность данных TERMPWR Terminator Power — питание терминаторов Продолжение &
210 Глава 10. Параллельные шины SCSI Таблица 10.2 (продолжение) Сигнал Назначение ATN# Attention — внимание (намерение инициатора послать сообщение) REQ# Request — запрос от ЦУ на пересылку данных ACK# Acknowledge — подтверждение передачи (ответ на REQ#) RST# Reset — сброс шины DIFFSENS Признак дифференциального (LVD) интерфейса: ниже 0,7 В — линейный SE; 0,9-1,9 В — дифференциальный LVD; выше 2,4 В — дифференциальный HVD Адресация устройств и фазы шины Каждое устройство SCSI, подключенное к шине, должно иметь свой уникаль- ный адрес, назначаемый при конфигурировании. Для 8-битной шины значения адреса могут быть в диапазоне 0-7, для 16-битной — 0-15. Адрес задается пред- варительной установкой переключателей или джамперов. Для хост-адаптера возможно программное конфигурирование, включающее и назначение адреса. Адресация устройств на шине в фазах выборки осуществляется через идентифи- катор (SCSI ID), представляющий адрес в позиционном коде. Адрес определяет номер той линии шины данных, которая осуществляет выборку указанного уст- ройства. Устройство с нулевым адресом выбирается низким уровнем на линии DB0# (SCSI ID=00000001), с адресом 7 — на линии DB7# (SCSI ID=10000000). Значение идентификатора определяет приоритет устройства при получении доступа к шине. Понятия адреса и идентификатора часто путают, но это всего лишь две различные формы представления одного и того же параметра. В любой момент обмен информацией по шине может происходить только между парой устройств, активным (на шине) может быть только один процесс ввода- вывода. Процесс запускает инициатор обмена, а целевое устройство (target) его исполняет. При использовании традиционного протокола (без передач инфор- мационных блоков) каждый процесс ввода-вывода один или несколько раз вы- зывает следующие последовательности фаз шины: из состояния Bus Free через фазу Arbitration переход к фазе Selection или Reselection. Далее следуют фазы передачи информации (Command, Data, Status, Message). Завершающей фазой является Message In, в которой инициатору передается сообщение Disconnect (освобождение шины с последующим продолжением) или Task Complete (завер- шение выполнения команды), после чего шина переходит в состояние покоя Bus Free. В протоколе с передачей информационных блоков вместо различных фаз Command, Data, Status используется лишь один тип (Data). Фазы шины и распределение ролей источников сигналов между инициатором и приведены в табл. 10.3. В фазе Bus Free шина находится в состоянии покоя — нет никаких процессов об- мена, она готова к арбитражу. Признаком является пассивное состояние линий BSY# и SEL#. В фазе Arbitration устройство может получить право на управление шиной. Дож- давшись покоя шины (Bus Free), устройство вводит сигнал BSY# и свой иденти-
10.2. Протокол параллельной шины 211 фикатор SCSI ID. Если идентификаторы выставили несколько устройств одно- временно, то право на управление шиной получает устройство с наибольшим приоритетом, а остальные устройства отключаются до следующего освобожде- ния шины. Устройство, выигравшее арбитраж, вводит сигнал SEL# и переходит в фазу Selection или Reselection. Таблица 10.3. Источники сигналов на шине SCSI Фаза шины Сигнал BSY# SEL# REQ#, C/D#, I/O#, MSG# ACK#,ATN# DBx# P.CRCA, P1 Bus Free — — — - - - Arbitration AA1 WA2 - - SID3 - Selection I4, T® I — I I I Reselection I, T T T I T T Command T - T I I I Data IN T - T I T T Data OUT T - T I I ЦТ6) Status T — T I T T Message IN T - T I T T Message OUT T - T I I I 1 АА: источник сигнала — устройство, активное в арбитраже. 2 WA: источник сигнала — устройство — победитель в арбитраже. 3 SID: каждое устройство управляет только битом данных, соответствующим значению его SCSI ID. 41: источник сигнала — инициатор. 5 Т: источник сигнала — ЦУ. 6 В фазе DT Data OUT источник сигнала — ЦУ. В фазе Selection инициатор, выигравший арбитраж, вводит на шину данных ре- зультат логической функции ИЛИ от пары идентификаторов — своего и ЦУ, — сопровождая его битом четности. Инициатор устанавливает сигнал ATN#, указы- вая, что следующей фазой будет Message OUT, и снимает сигнал BSY#. Адресо- ванное ЦУ отвечает сигналом BSY#, если на шине данных присутствует только пара идентификаторов (его и инициатора) и контроль четности не указывает на ошибку. На некорректные значения устройства отвечать не должны. Если за за- данное время ЦУ не ответило сигналом BSY#, срабатывает тайм-аут, инициатор освобождает шину или вводит сигнал сброса RST#. Фаза Reselection аналогична предыдущей, но ее вводит ЦУ. Эта фаза появляется в том случае, когда ЦУ при исполнении процесса отключалось от шины на время выполнения своих внутренних операций. По завершении внутренней операции это устройство, выиграв арбитраж, вызывает инициатор, который запускал про-
212 Глава 10. Параллельные шины SCSI цесс. Адресованный инициатор «вспоминает» о запущенном им процессе и отве- чает сигналом BSY#. Условия ответа (только два активных бита на шине данных с правильной четностью) и тайм-аут аналогичны предыдущей фазе. В информационных фазах Command, Data, Status и Message по шине данных пере- даются байты информации (а не идентификаторы). В информационных фазах передачами управляет ЦУ, удерживая занятость шины сигналом BSY#. В это время инициатор может запросить посылку сообщения введением сигнала ATN#. На это ЦУ (когда сочтет возможным) введет фазу Message OUT, в которой ини- циатор и сможет передать данное сообщение. Между информационными фазами сигналы BSY#, SEL#, REQ# и ACK# должны оставаться в неизменном состоянии, меняться могут только значения сигналов C/D#, I/O#, MSG# и шины данных. ЦУ может освободить шину, сняв сигналы MSG#, C/D#, I/O# и BSY#. Сигналы ATN# и RST# могут порождать условия Attention и Reset соответствен- но, причем асинхронно по отношению к фазам шины. Эти условия могут привес- ти к изменению предопределенного порядка фаз. Сигнал ATN# вводится инициа- тором во время любой фазы, кроме арбитража и состояния покоя шины. Сигнал RST# вводится в любой момент любым устройством, и по сигнализируемому им условию Reset все устройства должны немедленно освободить шину. В зависи- мости от настройки, принятой для всех устройств конкр!етной системы, возможно выполнение одного из двух вариантов сброса. «Жесткий» сброс переводит уст- ройства в состояние, принятое по включению питания, сбрасывая все текущие процессы, очереди и т. п. В случае «мягкого» сброса после освобождения шины устройства пытаются завершить начатые операции, сохраняя текущие значения параметров. При описании фаз не говорилось о временных задержках. Они определяются спе- цификацией так, чтобы возможный «перекос» — неодновременный приход сиг- налов, вызванный задержкой как в электронных схемах, так и в разных проводах кабеля, — не влиял на устойчивость протокола. В асинхронном режиме обмена на скорость передачи информации влияет и длина кабеля, поскольку изменения состояния участников обмена привязываются к сигналам, распространяющимся по кабелю с ограниченной скоростью. Если в широкой шине имеется пара кабе- лей (А и В, что на практике встречается редко), то в каждом из них используется своя пара управляющих сигналов (REQ#/ACK# и REQB#/ACKB#), поскольку эти кабели могут иметь разную длину. Арбитраж, захват и освобождение шины Право на использование шины разыгрывается с помощью арбитража. Традици- онный арбитраж основан на значениях идентификаторов устройств, определяющих их приоритет. Если в фазе Arbitration шину запрашивают несколько устройств одновременно, то право на управление получает устройство с наибольшим при- оритетом. Приоритет связан с идентификатором следующим образом: ♦ для «узкой» шины наибольший приоритет имеет устройство с адресом 0, для устройств с адресами 1...7 приоритет убывает;
10.2. Протокол параллельной шины 213 ♦ для «широкой» шины наибольший приоритет имеет устройство с адресом 8, приоритет последовательно убывает для устройств с адресами 9... 15, 0...7. В SPI введена возможность справедливого арбитража (fairness arbitration), обес- печивающего равноприоритетный доступ к шине. Для реализации справедли- вого арбитража устройство должно иметь специальный регистр справедливости (fairness register), в котором содержится информация о неудачных попытках ар- битража устройств с более низким приоритетом. Устройство не должно пытать- ся захватывать шину, если его регистр справедливости имеет ненулевое значе- ние. Состояние регистра меняется тремя способами: ♦ Регистр обновляется (refresh), когда устройство обнаруживает, что арбитраж (в котором оно не участвует) проиграло устройство (или несколько устройств) с более низким приоритетом. При этом в регистр записывается значение с единицами, соответствующими идентификаторам проигравших менее при- оритетных устройств. ♦ Регистр модифицируется (update), когда обнаруживается, что устройство, ра- нее отмеченное в регистре, выиграло арбитраж. При модификации происхо- дит сброс одного из битов. ♦ Регистр обнуляется (clear) по сбросу устройства, шины или получению сооб- щения с требованием сброса задания или набора заданий. По протоколу арбитража различают нормальный арбитраж, начинающийся с фазы покоя шины, и ускоренный арбитраж (QAS), начинающийся с сообщения QAS Request. Нормальный арбитраж обязателен для всех устройств, арбитраж QAS не является обязательным, он разрешается при согласовании протокола. Спра- ведливый арбитраж обязателен для арбитража QAS, для нормального арбитража справедливость (если поддерживается) разрешается при согласовании протокола. Нормальный арбитраж начинается, когда устройство-претендент наблюдает со- стояние покоя шины в течение интервала не менее 800 нс. С этого момента оно может выставить свой идентификатор на шину данных и устанЬвить сигнал BSY#. Принять решение о победе (или проигрыше) устройство может, только выждав еще 2,4 мкс (arbitration delay). Таким образом, на арбитраж (от момента осво- бождения шины до ее захвата, отмечаемого сигналом SEL#) уходит минимум 3,2 мкс. За это время на скорости Fast-320 DT можно было бы передать 2 Кбайт данных. Ради сокращения этих издержек в скоростных режимах и введен меха- низм ускоренного арбитража. Ускоренный арбитраж выполняется только по предварительному согласованию участников обмена (инициатора и целевого устройства) и только при организа- ции протокола на основе передач информационных блоков. От ускоренного ар- битража можно перейти к нормальному через перевод шины в состояние покоя. Для выполнения ускоренного арбитража применяется особый способ освобож- дения шины целевым устройством. После фазы DT Data оно переводит шину в фазу Message In и посылает сообщение QAS Request, ожидая его подтверждения сигналом ACK# (от инициатора). После этого ЦУ отпускает все сигналы, кроме BSY#, MSG#, C/D#, 1/0# и REQ#. Через небольшой интервал (90 нс) ЦУ снимает сигналы MSG#, C/D# и I/O# и еще через такой же отпускает REQ#.
214 Глава 10. Параллельные шины SCSI Если инициатор вводит условие внимание (сигналом ATN#), целевое устройство переводит шину в фазу Message Out, принимает сообщение и переводит шину в фазу покоя. Если инициатор не вводит условие внимание, он отпускает все сиг- налы, кроме ACK# и ATN# Если ЦУ обнаруживает сигнал SEL# (это результат арбитража QAS от какого-то устройства), оно отпускает сигналы BSY#, MSG#, C/D#, I/O#, и шина оказывается в распоряжении нового победителя арбитража. Если после снятия сигналов MSG#, C/D# и I/O# за 1 мкс на шине данных не по- явился идентификатор устройства, ЦУ переводит шину в фазу покоя. Если идентификатор появился, а сигнал SEL# не обнаружен, то ЦУ ждет еще 1 мкс, и если сигнал SEL# так и не появился, переводит шину в фазу покоя. Устройство, желающее захватить шину при арбитраже QAS, дожидается, когда на шине после фазы DT Data будет передано сообщение QAS Request (см. ранее). Через 90 нс после обнаружения факта снятия сигналов MSG#, C/D# и 1/0# уст- ройство может приступить к арбитражу — выставить свой идентификатор на шине данных (если этому не препятствует содержимое регистра справедливости). Через 1 мкс после обнаружения факта снятия сигналов MSG#, C/D# и 1/0# устройство считывает информацию с шины данных, чтобы определить результат арбитража. Если на шине присутствуют идентификаторы более приоритетных устройств, уст- ройство снимает свой идентификатор — оно проиграло. Если более приоритет- ных нет, оно (победитель) оставляет свой идентификатор и вводит сигнал SEL#. Информационные фазы В информационных фазах по шине данных передаются собственно данные и управ- ляющая информация (команды, сообщения, данные о состоянии). Информаци- онные фазы идентифицируются сигналами MSG#, C/D# и 1/0#, которыми управ- ляет ЦУ (табл. 10.4). Таблица 10.4. Информационные фазы SCSI Сигнал Фаза Направление MSG# C/D# 1/0# 0 0 0 ST Data OUT, передача данных к ЦУ 1=эТ 0 0 1 ST Data IN, передача данных от ЦУ 1<=Т 0 1 0 Command, передача команды к ЦУ 1=эТ 0 1 1 Status, передача состояния от ЦУ I <=т 1 0 0 DT Data OUT, передача данных к ЦУ I =эТ 1 0 1 DT Data IN, передача данных от ЦУ 1<=Т 1 1 0 Message OUT, передача сообщения к ЦУ I =эТ 1 1 1 Message IN, передача сообщения от ЦУ 1<=Т Для информационных фаз применяется три типа обмена, различающихся спосо- бом синхронизации:
10.2. Протокол параллельной шины 215 ♦ Асинхронный режим используется для передачи управляющей информации (Command, Status, Message), а также данных до согласования более прогрес- сивных режимов. В этом режиме данные считаются действительными после введения (отрицательного перепада) сигнала REQ# (передача к инициатору) или ACK# (передача от инициатора). ♦ Синхронный режим используется по предварительному согласованию для передачи данных и информационных блоков на скоростях вплоть до Fast-80. В этом режиме применяется как обычная, то есть одиночная (ST), синхрони- зация (рис. 10.2, а), так и двойная (DT) синхронизация (рис. 10.2, б). ♦ Режим одновременного (расе) переключения (рис. 10.2, в) используется по предварительному согласованию для передачи информационных блоков на скоростях Fast-160 и Fast-320. REQ# или ACK# DATA (ST) DATA(DT) DATA (pace) Рис. 10.2. Режимы синхронизации: a — ST, б — DT, в — pace Для передачи управляющей информации (Command, Status, Message) всегда ис- пользуется только 8-битная разрядность. Передача данных (и информационных блоков) выполняется на предварительно согласованной разрядности (8 или 16 бит). Если при 16-битйой разрядности передается нечетное число байтов, пе- редатчик обязан снабдить корректным битом четности и неиспользуемый (стар- ший) байт. Число неиспользуемых байтов ЦУ указывает в сообщении Ignore Wide Residue, передаваемом сразу после фазы данных. Асинхронный режим Временные диаграммы асинхронного режима приведены на рис. 10.3. Здесь пере- дача каждого байта сопровождается взаимосвязанной парой сигналов REQ#/ АСК#: изменения состояние одного сигнала происходит после обнаружения сме- ны состояния другого. В этой связке существенную роль играет задержка рас- пространения сигналов в кабеле, так что достижимая скорость передачи сильно зависит от длины кабеля (времени оборота сигналов между инициатором и ЦУ). Инициатор фиксирует принимаемые данные, получив сигнал REQ# (по отрица- тельному перепаду). ЦУ считает принимаемые данные действительными по от- рицательному перепаду сигнала АСК#. Асинхронный обмен поддерживается всеми устройствами для всех фаз передачи информации. Достоверность информации контролируется битами четности, которые формируются источником данных одновременно с самими данными.
216 Глава 10. Параллельные шины SCSI REQ# Рис. 10.3. Временные диаграммы асинхронного обмена (DI — данные от инициатора, DT — данные от ЦУ) ACK# Синхронный режим (ST и DT) Синхронный режим применяется в фазах передачи данных Data OUT и Data IN по предварительной «договоренности» устройств. Синхронный режим сущест- венно ускоряет обмен, поскольку здесь отсутствует взаимная блокировка сигна- лов REQ# и АСК#, сдерживающая темп передачи при существенных задержках распространения сигналов в кабеле (и ограниченном быстродействии интерфейс- ной части устройств). Синхронный режим имеет две разновидности синхрониза- ции: ST (одиночная) и DT (двойная). Временные диаграммы передач в режиме одиночной синхронизации (ST) приве- дены на рис. 10.4. В фазе ST Data IN (рис. 10.4, а) ЦУ передает инициатору серию данных, сопровождаемых стробами REQ#, в темпе, ограниченном установленны- ми временными параметрами выбранного скоростного режима. Инициатор фик- сирует принимаемые данные по отрицательному перепаду сигнала REQ#, но его ответы (сигналом АСК#) достигают целевого устройства с некоторым опоздани- ем (задержки в кабеле). Как только отставание числа принятых сигналов ACK# от числа посланных REQ# достигнет оговоренного предельного значения (в данном примере — 2), ЦУ приостановит обмен до прихода очередного подтверждения АСК#. Операция считается завершенной, когда число принятых подтверждений совпадет с числом посланных запросов. В фазе ST Data Out (рис. 10.4, б) данные посылает инициатор, когда до него доходит сигнал запроса REQ#. На рисунке для этой фазы сигнал REQ#(T) отражает моменты посылок запросов целевым устройством; состояния шины данных (DB) и сигналы REQ#, ACK# показаны с точки зрения инициатора (они отстают от моментов подачи запросов целевым устройством. Достоверность информации контролируется битами четности (как и в асинхронном режиме). В режиме двойной синхронизации (фазы DT Data In и DT Data Out) на действи- тельность данных указывает любая смена состояния сигнала REQ# или АСК#, а не только спад. Состояние REQ# или ACK# сменяется после небольшой задерж- ки относительно момента установки данных, смена данных также задерживается относительно смены состояния REQ# или АСК#. Режим двойной синхронизации применяется только в 16-разрядных шинах с LVD-интерфейсом. В режиме DT контроль достоверности осуществляется с помощью 32-разрядных CRC-кодов, которыми снабжаются группы данных (data group) и информационные блоки
10.2. Протокол параллельной шины 217 (Information Unit, Ш). Какие именно структуры передаются в фазе данных — группы или информационные блоки, — определяется при согласовании протоко- ла обмена. I/O# / REQ# —U Рис. 10.4. Временные диаграммы синхронного обмена: а — фаза ST Data IN, б — фаза ST Data OUT Группа данных представляет собой последовательность слов данных, не имею- щую каких-либо заголовков, определяющих их длину. Необходимость введения групп обусловлена применением CRC-контроля, который выполняется для ка- кого-то блока данных (а не побайтно, как контроль четности при ST-обмене). За данными могут (необязательно) следовать байты-заполнители, выравнивающие длину блоков. Завершает группу поле pCRC. Поля-заполнители и поля pCRC кли- ентским приложениям не передаются, их обрабатывают интерфейсные схемы устройств SCSI. При передаче групп данных целевое устройство сигналом P_CRCA указывает на передачу полей-заполнителей (pad) или полей pCRC; когда этот сигнал неактивен, передаются собственно данные. Целевое устройство не будет запрашивать (или передавать) данные следующей группы (сигналом REQ#), пока не получит подтверждение приема и обработки поля pCRC предыдущей группы (чтобы устройствам не приходилось заниматься подсчетом CRC сразу для двух групп данных). При передаче информационных блоков их длина и положение поля iuCRC извест- ны заранее и источнику, и получателю информации (по содержимому блока Z Q, см. далее). При передаче информационного блока в фазе DT Data In ини- циатор не должен снимать сигнал АСК#, подтверждающий прием последнего байта поля iuCRC до того, как будет проверена корректность CRC. В случае
218 Глава 10. Параллельные шины SCSI некорректности CRC инициатор посылает сигнал ATN#, в ответ на который ЦУ вводит фазу Message Out, позволяющую инициатору сообщить об обнаруженной ошибке. Реакция ЦУ и последующая процедура обработки этой ошибки зависит от назначения информационного блока. В фазе DT Data Out корректность CRC проверяет целевое устройство, обработка обнаруженной ошибки также зависят от назначения информационного блока (данные, одиночная команда или коман- да в цепочке). В случае потоковых чтения (read streaming) и записи (write streaming) для ука- зания на последний информационный блок потока используется сигнал P_CRCA (он должен вводиться до окончания передачи последнего блока). Режим одновременного переключения Режим одновременного переключения (расе) предназначен для передачи инфор- мационных блоков с максимально уплотненной временной диаграммой. Этот ре- жим используется только в 16-разрядной шине с интерфейсом LVD на скоро- стях Fast-160 и Fast-320. Параметры режима (скорость и допустимое отставание сигнала ACK# от REQ#) предварительно должны быть согласованы. Кроме того, до передач данных в обоих направлениях должны выполняться «тренировоч- ные» (обучающие) посылки (training pattern), по которым устройства могут под- строить некоторые параметры интерфейсных схем. Во время передачи в режиме расе стробирующие сигналы (REQ# или АСК#) меняют свое состояние одновременно со сменой информации на шине данных. Каждый импульс этих сигналов соответствует передаче 32-битного слова. В про- цессе передачи блока стробирующий сигнал меняет свое состояние с периодом, соответствующим согласованной скорости. На действительность данных указы- вает фаза изменения сигнала Р1 (рис. 10.5), который переключается одновремен- но с перепадами стробирующего сигнала. Смена состояния действительности данных отмечается изменением фазы сигнала Р1 (на рисунке символом v отме- чены перепады строба, соответствующие действительности данных). Такой ме- ханизм позволяет делать паузы в передаче на четное число периодов (32-битных передач), не меньшее четырех. Р1# П П П П П I I I I п Действительность vvvvvvvvvv vvvvvv vvvvvv Рис. 10.5. Сигнализация действительности данных в режиме расе Информационные блоки Многообразие типов информационных фаз (команда, состояние, данные, сооб- щения), различаемых с помощью сигналов параллельной шины, плохо соответ- ствует современным реализациям протокола с высокоскоростными блочными передачами и CRC-контролем. С целью сокращения этого многообразия в SPI-4 введен протокол обмена информационными блоками, обязательный для уст-
10.2. Протокол параллельной шины 219 ройств, работающих в режиме расе. Информационный блок представляет собой последовательность двойных (32-битных) слов, последним из которых является CRC-код (поле iuCRC). Информационные блоки передаются в фазах данных в оп- ределенных последовательностях. В SPI определены информационные блоки следующих типов: ♦ SPI IU L Q — блок, определяющий связку LQ (логическое устройство и тег), к которой относится последующий блок, тип, длину и направление передачи этого блока; ♦ SPI IU Command — блок, содержащий флаги функций управления заданиями или дескриптор команды SCSI (CDB) с указанием направлений передачи данных и атрибутов задания; ♦ SPI IU Data — блок, содержащий собственно данные; ♦ SPI IU Data Stream — блок данных потока; ♦ SPI IU Status — блок, содержащий байт состояния выполнения команды (Status) и, возможно, уточненное состояние (Sense Data) и список протоколь- ных ошибок. Помимо фаз данных, в которых передаются вышеуказанные блоки, шина может находиться в фазах передачи и приема сообщений, арбитража, выборки (прямой или обратной) или же в фазе покоя. Первым информационным блоком, посы- лаемым устройством, захватившим шину, всегда будет SPI IU L Q (рис. 10.6). Байт о 1 2 3 4 11 12 13 15 16 17 18 19 20 23 7 I 6 I 5 I 4 I 3 I 2 I 1 I 0 v 7 LOGICAL UNIT NUMBER (LSB) DATA LENGTH (MSB) (MSB) IUCRC INTERVAL IUCRC (LSB) (LSB) Рис. 10.6. Информационный блок L_Q Ниже перечислены поля блока SPI IU L Q, ♦ Туре — тип следующего блока: Olh — последняя команда, посылаемая в дан- ном соединении, 02h — не последняя команда, 04 — блок данных, 05 — поток данных, 06 — блок состояния. ♦ Тад — тег задания, к которому относится последующий блок.
220 Глава 10. Параллельные шины SCSI ♦ Logical Unit Number — 8-байтный идентификатор логического устройства в фор- мате SAM. ♦ Data Length — длина (число байтов) информационной части последующего блока (команды, данных или состояния), в это число не входят байты-запол- нители и CRC-коды. Если тип указывает на передачу блока состояния, то ну- левая длина означает, что команда выполнена успешно (состояние Good) и не требуется передачи дополнительной информации (блок состояния не переда- ется). Если тип указывает на поток, то длина относится к каждому блоку дан- ных потока. Если устройству требуется завершить поток блоком меньшего размера, то перед ним будет передан отдельный блок LQ. ♦ Bi Di Direction — направление передачи следующего блока данных: 00 — одно- направленная команда (или следующий блок — не данные), 01 — передача данных двунаправленной команды от инициатора, 10 — передача данных дву- направленной команды от целевого устройства. ♦ iuCRC Interval — размер блока данных, защищаемых CRC-кодом. Если это зна- чение меньше указанной длины данных (и ненулевое), то в последующем блоке каждый указанный интервал будет снабжаться своим полем CRC-кода (вдобавок к общему полю CRC-кода в конце информационного блока). ♦ IUCRC — 32-битный CRC-код, вычисленный по всем предыдущим полям ин- формационного блока. Блок данных (обычный SPIШ Data и потоковый SPIШ Data Streari) помимо соб- ственно данных содержит байты-заполнители, выравнивающие его до целого числа двойных слов, и 32-битное поле IUCRC. Командный блок (SPIIU Command) содержит следующие информационные поля (рис. 10.7): ♦ TASK ATTRIBUTE — атрибуты, связанные с дескриптором команды: Simple (000), Head Of Queue (001), Ordered (010), АСА (100); ♦ TASK MANAGEMENT Functions — функции управления заданиями: CLEAR АСА (40h), LOGICAL UNIT RESET (08h), Target reset (20h), CLEAR TASK SET (04h), ABORT TASK SET (02h), ABORT TASK (Olh). При ненулевом значении дескриптор CDB и связан- ные с ним параметры игнорируются; ♦ ADDITIONAL CDB LENGTH — длина дополнительного поля дескриптора (превышаю- щего 16 байт); ♦ RDDATA, WRDATA — флаги, указывающие на передачу данных в направлении к ини- циатору (SCSI-чтение) и от инициатора (SCSI-запись) соответственно; ♦ CDB, ADDITIONAL CDB — дескриптор команды и его дополнение (если длина пре- вышает 16 байт). Блок состояния (SPI IU Status), показанный на рис. 10.8, обязательно содержит байт состояния (Status). Если бит SNSVALID=1, то в блоке присутствует уточнен- ное состояние — поле SENSE DATA длиной SENSE DATA LIST LENGTH. Если передается информация о протокольных ошибках (RSPVALID=1), то они перечислены в поле PACKETIZED FAILURES длиной PACKETIZED FAILURES LIST LENGTH. В этом поле содержит- ся последовательность 4-байтных структур, в каждой из которых последний
10.2. Протокол параллельной шины 221 байт определяет тип ошибки: 00 — нет ошибки, 02h — недействительные значе- ния полей Ш, 04h — функция управления заданиями не поддерживается, 05h — функция управления заданиями не выполнена, 06h — в L_Q указан недействи- тельный тип блока, 07 — в LQ указан недействительный запрос. Байт 4 CDB 2 3 TASK MANAGEMENT FUNCTIONS ________________ ADDITIONAL CDB LENGTH | RDDATA | WRDATA 19 20 ADDITIONAL CDB n+1 n+4 (MSB) IUCRC (LSB) Рис. 10.7. Информационный командный блок 7 I 6 I 5 I 4 I 3 I 2 I 1 I 0 Резерв для FCP |SNSVALID | SNSVALID STATUS (MSB) SENSE DATA LIST LENGTH (n-m) (LSB) (MSB) PACKETIZED FAILURES LIST LENGTH (m-11) (LSB) (MSB) PACKETIZED FAILURES (LSB) (MSB) SENSE DATA (LSB) (MSB) IUCRC (LSB) Рис. 10.8. Информационный блок состояния Управление шинным интерфейсом: сообщения Для управления интерфейсом в SCSI определена система сообщений (message system), которыми обмениваются инициатор и ЦУ. Передачей сообщений (как и передачей любой информации) управляет целевое устройство. Сообщения обеспечивают различные стороны управления интерфейсом: ♦ установление, завершение и разрыв соединения; ♦ запуск и принудительное завершение процессов (управление заданиями); ♦ сброс устройства; ♦ управление указателями;
222 Глава 10. Параллельные шины SCSI ♦ обработка ошибок; ♦ согласование режимов обмена. Обмен сообщениями происходит в фазах Message IN/OUT, в одной фазе может передаваться несколько сообщений, но сообщение не может разбиваться на не- сколько фаз. Сообщения передаются побайтно с механизмом квитирования REQ#/ACK#, в ответ на недопустимое сообщение передается встречное сообще- ние Message Reject, а в случае обнаружения ошибки четности — сообщение Message Parity Error. Сообщения могут быть однобайтными, двухбайтными и расширенными (произ- вольной длины), длина сообщения определяется его кодом — значением первого байта. Для двухбайтных сообщений отводятся коды 20-2 Fh; расширенное сооб- щение начинается с байта 01 h, за которым следует байт длины (л), байт кода ко- манды и (п - 1) байтов аргументов. Коды 30-7Fh зарезервированы, остальные коды используются для однобайтных сообщений. Основные сообщения SCSI приве- дены в табл. 10.5, графа «I/O» определяет направление передачи: I — к инициа- тору, О — от инициатора. Таблица 10.5. Сообщения SCSI Код I/O Назначение Однобайтные сообщения 80-FFh IO Identify — установление соединения l_T_L или l_T_R. Бит 7 — признак со- общения, бит 6 (DiscPriv) — разрешение освобождения шины, биты [5:0] - номер LUN1 04h IO Disconnect — ЦУ сообщает о разрыве текущего соединения (с последую- щим восстановлением для продолжения данного процесса) и освобожда- ет шину. Это сообщение не вызывает сохранение указателей. Сообщение может послать и инициатор, предписывая ЦУ освободить шину (после чего это сообщение пошлет ЦУ) 06h 0 Abort — инициатор требует освободить шину без сообщения о состоянии. Если установлено соединение 1_Т_х, то устройство должно предваритель- но сбросить все процессы, связанные с этим соединением 1_Т_х (осталь- ные процессы не затрагиваются). Если установлено только соединение 1_Т, то сбрасывается только текущий процесс (остальные не затрагивают- ся). Текущие параметры режимов сохраняются ODh 0 Abort Tag — инициатор требует сбросить текущий процесс и освободить шину без сообщения о состоянии. Текущие параметры режимов сохраня- ются OEh 0 Clear Queue — инициатор требует сбросить все процессы для адресован- ного номера LUN и освободить шину, сохраняя текущие параметры режи- мов. Эквивалентно подаче серии сообщений Abort от всех инициаторов OCh 0 Bus Device Reset — инициатор требует выполнить аппаратный сброс уст- ройства 1 В SCSI-2 было иное назначение: бит 5 (LUNTAR) — признак цели: 0 — LUN, 1 — TRN, биты 4,3=0, биты [2:0] (LUNTRN) - номер LUN или TRN.
10.2. Протокол параллельной шины 223 Код I/O Назначение 00h I Task Complete — ЦУ сообщает о завершении выполнения задания (про- цесса ввода-вывода) и освобождает шину. Информация о состоянии за- вершения была послана в фазе Status OAh I Linked Command Complete — ЦУ сообщает о завершении выполнения ко- манды в цепочке; инициатор должен продвинуть указатели на начало сле- дующей команды цепочки OBh I Linked Command Complete (With Flag) — то же, но команда завершилась с установленным флагом, что может использоваться как условие преры- вания для инициатора 11h 0 Terminate I/O Process — указание целевому устройству прекратить про- цесс (безопасно для носителя) 02h I Save Data Pointer — копирование текущего указателя данных в сохраненный 03h I Restore Pointers — восстановление указателей, копирование последних сохраненных значений в текущие указатели 05h 0 Initiator Detected Error — инициатор обнаружил дшибку и не запрещает ЦУ сделать повторную попытку выполнения операции 07h IO Message Reject — принято недопустимое сообщение 08h 0 No Operation — пустой ответ инициатора на запрос сообщения (когда у него нет готового действительного сообщения) 09h 0 Message Parity Error — инициатор при приеме сообщения обнаружил ошибку четности OFh IO Initiate Recovery — инициирование расширенной процедуры обработки ошибок и асинхронных событий (Extended Contingent Allegiance Condition) 10h 0 Release Recovery — завершение расширенной процедуры обработки ошибок 55h IO QAS Request — запрос ускоренного арбитража и выбора устройства (Quick Arbitration and Selection) Двухбайтные сообщения 23h I Ignore Wide Residue — в предшествующей передаче данных не все байты действительны (в случае передачи нечетного числа байтов по 16-разряд- ной шине). Второй байт — число лишних байтов (1, для 32-разрядной шины было допустимо 1, 2 и 3) 21h 0 Head Of Queue Tag — постановка процесса в голову очереди, второй байт — тег 22h 0 Ordered Queue Tag — постановка процесса в очередь с упорядоченным исполнением, второй байт — тег 20h IO Simple Queue Tag — постановка процесса в очередь с произвольным по- рядком исполнения, второй байт — тег. ЦУ посылает это сообщение для идентификации соединения при повторном подключении, сразу после со- общения Identify Продолжение &
224 Глава 10. Параллельные шины SCSI Таблица 10.5 (продолжение) Код I/O Назначение Расширенные сообщения, в графе «Код» указываются байты кода/длины/расширенного кода 01/05/00 I Modify Data Pointer — указание инициатору модифицировать указатель данных на 32-битное знаковое целое число-аргумент сообщения 01/09/05 I Modify Bidirectional Data Pointer — указание инициатору модифицировать указатели данных Data_Out и Datajn на 32-битные знаковые целые числа- аргументы сообщения 01/03/01 ю Synchronous Data Transfer Request (SDTR) — согласование режима син- хронной передачи. В аргументе первый байт задает скорость обмена (TRANSFER PERIOD FACTOR), второй байт — отставание подтверждений (REQ/АСК Offset) 01/02/03 ю Wide Data Transfer Request (WDTR) — согласование разрядности переда- чи, аргумент — показатель разрядности (TRANSFER WIDTH EXPONENT: 00 — 8 бит, 01 — 16 бит) 01/06/04 ю Parallel Protocol Request (PPR) — запрос согласования параллельного протокола. После заголовка следует байт, задающий скорость обмена (TRANSFER PERIOD FACTOR), зарезервированный байт, байт отставания подтверждений (REQ/АСК Offset), байт разрядности (TRANSFER WIDTH EXPONENT) и байт флагов опций протокола (см. далее) Согласование протокола и режимов Режим передачи, применяемый в фазах данных, а также параметры протокола, относящиеся к любым фазам шины, подлежат согласованию. До согласования все обмены производятся в асинхронном режиме с 8-битной разрядностью. Со- гласование режимов выполняется с помощью сообщений: ♦ SDTR (Synchronous Data Transfer Request) — запрос согласования синхронной передачи (Synchronous Negotiation); ♦ WDTR (Wide Data Transfer Request) — запрос согласования разрядности передач; ♦ PPR (Parallel Protocol Request) — запрос согласования параметров протокола, синхронного обмена и разрядности. Согласование выполняется для каждой пары портов (инициатора и целевого устройства). Каждый порт отслеживает, было ли согласование с каждым из воз- можных партнеров. Согласованные параметры для пары портов действительны в любых сочетаниях ролей (инициатора и ЦУ). Запросить согласование сообще- ниями SDTR и WDTR может и инициатор обмена, и ЦУ; запрос согласования па- раметров протокола делает только порт-инициатор. Согласованные параметры будут действовать до сброса устройств по сообщению Bus Device Reset или «же- сткого» сброса, что приведет к установке предопределенных режимов по вклю- чению. Согласование не должно инициироваться в каждом процессе, поскольку затраты времени на эту процедуру сводят на нет выигрыш в производительности. Для согласования синхронной передачи устройство, запрашивающее синхронный обмен, посылает сообщение Synchronous Data Transfer Request, в котором указы-
10.2. Протокол параллельной шины 225 ваются допустимый период цикла (TRANSFER PERIOD FACTOR, табл. 10.6) и отстава- ние подтверждений (REQ/АСК Offset). Если другой участник обмена поддерживает синхронный режим, он предложит свои параметры (не меньший период цикла передачи и не большее отставание). Согласованными параметрами будут макси- мальный период и минимальное отставание, поддерживаемые обоими партнера- ми. Нулевое значение отставания означает асинхронный режим, при этом ука- занный период игнорируется, а из параметров протокола действителен только QAS REQ (см. далее). Значение FFh означает синхронный режим с неограничен- ным отставанием. Выбранный режим будет относиться только к фазам передачи между данной парой устройств. Отвергнутое сообщение является требованием асинхронного режима. Поскольку старые хост-адаптеры не поддерживают согла- сование синхронного режима, на ЦУ запрос синхронного режима может быть за- блокирован. О возможности работы в синхронном режиме хост может узнать, послав команды Request Sense и Inquiry. Таблица 10.6. Период цикла синхронного обмена Значение N Период цикла, нс Режим 00h-06h Резерв 07h 3,125 Fast-320 08h 6,25 Fast-160 09h 12,5 Fast-80 OAh 25 Fast-40 OBh 30,3 Fast-40 OCh 50 Fast-20 0Dh-18h 4xN Fast-20 19h-31h 4xN Fast-10 32h-FFh 4xN Fast-5 Разрядность передач согласуется аналогично посредством сообщений Wide Data Transfer Request} здесь выбирается разрядность (TRANSFER WIDTH EXPONENT), поддер- живаемая обоими устройствами. Сообщения WDTR, помимо согласования раз- рядности, обнуляют значение допустимого отставания АСК/REQ, так что после них следует посылать сообщения SDTR (если требуется синхронный режим). Согласование параметров протокола (сообщение PPR, рис. 10.9) появилось в спе- цификации SPI-3, сообщения SDTR и WDTR были определены еще в SCSI-2. Посылка старых сообщений (SDTR и WDTR) сбрасывает все дополнительные па- раметры протокола. Каждому параметру протокола соответствует свой бит в по- следнем байте сообщения PPR. ♦ PCOMP_EN — разрешение предкомпенсации приемопередатчиков (для скоростей Fast-160 и выше); ♦ RTI — способность к сохранению параметров, полученных при тренировке для скоростей Fast-160 и выше (если бит обнулен, то на этих скоростях трениров- ку требуется выполнять перед каждой передачей данных);
226 Глава 10. Параллельные шины SCSI ♦ RD STRM — поддержка потокового чтения и управления этим потоком; ♦ WRFLOW — поддержка управления потоком для потоковой записи; ♦ HOLD MCS — поддержка сохранения установленных отклонений параметров пе- редатчиков; ♦ QAS REQ — ускоренный арбитраж; ♦ DT REQ — двойная синхронизация в фазах данных; ♦ IU REQ — передача информационных блоков SPI. Г1 L_J I 5 I 4 I 3 I ? I 1_J ° EXTENDED MESSAGE (01 h) EXTENDED MESSAGE LENGTH (06h) PARALLEL PROTOCOL REQUEST (04h) TRANSFER PERIOD FACTOR REQ/АСК OFFSET TRANSFER WIDTH EXPONENT PCOMP.EN RTI RD.STRM WRFLOW HOLD..MCS QAS_REQ DT_REQ IU_REQ Рис. 10.9. Сообщение согласования параметров протокола 10.3. Процессы ввода-вывода на шине SCSI Процесс ввода-вывода (I/O Process) на шине SCSI состоит из одного начального установления соединения между инициатором и целевым устройством, за кото- рым следует 0 или более последующих операций восстановления того же соеди- нения. Все эти соединения относятся к одному заданию — выполнению одиноч- ной команды или цепочки команд. На шине процесс (задание) однозначно идентифицируется связкой I_T_L: SCSI- идентификаторами инициатора (I), целевого устройства (Т) и логического уст- ройства (L)1. Если целевое устройство может работать с очередями, то для пол- ной идентификации требуется еще и тег очереди (Q), а процесс идентифициру- ется связкой ITLQ. Способ сообщения идентификатора процесса зависит от протокола шины: в традиционном варианте использовались сообщения Identify, в новых версиях идентификатор передается в информационных блоках (ZQ). Каждый процесс ввода-вывода описывается набором из трех указателей', для ко- манды, состояния и данных. Устройства SCSI (инициатор и ЦУ) обеспечивают сохранение одного или нескольких наборов указателей (в зависимости от числа 1 В SCSI-2 использовалась также связка ITR для адресации к целевым программам (R — номер программы), в SCSI-3 целевые программы не упоминаются.
10.3. Процессы ввода-вывода на шине SCSI 227 конкурирующих процессов, которыми может оперировать устройство). Указате- ли задают местоположение очередного байта команды, состояния и данных во внутренней памяти устройства. В любой момент времени на шине выполняется лишь один (текущий) процесс. Инициатор имеет текущий (активный) набор указателей (только один), в кото- рый копируется сохраненный набор указателей для текущего процесса. Текущие указатели указывают на очередные байты команды, состояния и данных, кото- рые будут передаваться между памятью инициатора и ЦУ. Сохраненные указа- тели команды и состояния всегда указывают на начало блоков дескрипторов ко- манд и состояния соответственно. Сохраненный указатель данных указывает на начало блока данных до тех пор, пока ЦУ не пришлет сообщение Save Data Pointer. По его приему будет сохранен текущий указатель данных. Когда ЦУ отключает- ся от шины, информация о текущем процессе ввода-вывода содержится в сохра- ненном наборе указателей. При возобновлении процесса ЦУ сообщением Restore Pointers может потребовать у инициатора скопировать сохраненный набор в те- кущий и продолжить выполнение команд данного процесса ввода-вывода. ВЙИМАНИЕ ------------------------------------------------------------- Поскольку указатель данных может быть модифицирован ЦУ до завершения ввода-вывода, оп- ределение реального количества переданных данных с помощью указателя дает ненадежные результаты. Штатным завершением выполнения каждой команды SCSI является передача бай- та состояния (status byte) от ЦУ к инициатору, возможные состояния приведе- ны в табл. 9.1. Байт не передается, если команда завершена по сообщению Abort, Abort Tag, Bus Device Reset, Clear Queue, по условию Hard Reset или в случае не- ожиданного разъединения. Команды могут исполняться с использованием очередей. ЦУ могут поддерживать немаркированные и маркированные очереди. Поддержка немаркированных оче- редей, определенная еще в SCSI-1, позволяет любому Л У (или целевой програм- ме), занятому процессом от одного инициатора, принимать команды (начинать процесс) с другими инициаторами. Эти процессы для целевого устройства будут различаться по полю I связки I_T_L. Маркированные очереди (tagged queue) определены в SCSI-2 для логических уст- ройств. Для каждой связи ITL в устройстве может поддерживаться своя оче- редь размером до 256 процессов. Каждый процесс, црпользующий маркированные очереди, идентифицируется связью ITLQ, где Q — однобайтный тег очереди (queue tag). Теги процессам назначаются инициатором, их значения на порядок выполнения операций не влияют. Выполнение команд в традиционном варианте протокола Традиционный вариант протокола (информационные блоки запрещены) осно- ван на использовании фаз Message для идентификации процесса (L_Q) и фаз Command и Status для передачи команды и состояния. Традиционный протокол
228 Глава 10. Параллельные шины SCSI позволяет передавать только 6-битный идентификатор LUN и однобайтный тег очереди. Инициатор запускает процесс, получив доступ к шине (фаза Arbitration) и вы- брав целевое устройство (фаза Selection), С этого момента выбранное ЦУ удер- живает шину в занятом состоянии и управляет фазами шины. В процессе испол- нения команд ЦУ управляет модификацией указателей в инициаторе, посылая ему соответствующие сообщения. Выбрав целевое устройство, инициатор (запросив фазу Message OUT сигналом ATN#) передает сообщения Identify для установления соединения с требуемым (указанным в поле LUN или TRN) устройством. В этом сообщении указывается и возможность временного разрыва соединения по инициативе ЦУ. Если исполь- зуется очередь, то вслед за Identify должно посылаться сообщение ххх Queue Tag, определяющее отношение данной команды к существующим очередям и тег за- дания. Инициатор может посылать и дополнительные сообщения для управле- ния параметрами соединения. Если инициатор не запрашивает посылку сооб- щения Identify, подразумевается, что в установленном соединении LUN=O и тег очереди передаваться не будет. Далее в фазе Command ЦУ принимает от инициатора команду. Передачи данных для этой команды ЦУ организует в фазах Data IN (к инициатору) и Data OUT (от инициатора). В фазе Status ЦУ передает инициатору байт состояния выпол- нения команды (см. табл. 9.1). Если выполнена одиночная команда или послед- няя команда в цепочке, ЦУ посылает сообщение Task Complete и освобождает шину (фаза Bus Free). На этом выполнение процесса завершается. Если выполнена не последняя команда в цепочке, ЦУ посылает сообщение Linked Command Complete (требование продвижения указателей на следующую коман- ду), шина остается занятой, процесс продолжается. В случае возникновения особых условий ЦУ передает состояние Check Condition, и инициатор выполняет соответствующую процедуру обработки этой ситуации. Если ЦУ решает освобрдить шину до окончания выполнения команды, оно по- сылает сообщение Disconnect (разрыв соединения) и освобождает шину. Целевое устройство, временно освободившее шину, для завершения процесса должно будет восстановить соединение. Для этого оно должно получить доступ к шине (фаза Arbitration), вызвать инициатора данного процесса (фаза Reselection) и послать сообщение Identify, содержащее номер Л У, а затем сообщение Simple Queue Tag, содержащее тег задания. По этому сообщению инициатор вернет набор указате- лей, соответствующий данной связке ITLQ, в активный набор, и выполнение процесса продолжится, как было описано ранее. Если ЦУ захочет отсоединить- ся, когда часть данных уже передана (например, головка диска дошла до конца цилиндра и требуется время на позиционирование), оно посылает сообщение Save Data Pointer, а затем — Disconnect. После повторного соединения передача данных возобновится с точки, определенной последним сохраненным значением указателя. Если происходит ошибка или исключение, ЦУ может повторить об- мен данными, послав сообщение Restore Pointers или отсоединившись без сооб- щения Save Data Pointers. С этого момента выполнение процесса продолжается описанным способом.
10.3. Процессы ввода-вывода на шине SCSI 229 Для управления заданиями инициатор использует соответствующие сообщения. Если требуется управление заданиями того устройства, которое в данный момент занимает шину, инициатор подает сигнал ATN# и в последующей фазе Message Out передает сообщения управления заданиями. Инициатор может вынудить ЦУ освободить шину, послав ему сообщение Disconnect. Он может запросить аппа- ратный сброс устройства, а также прекращение и сброс процессов (всех или вы- борочно). Если требуется управление заданиями другого устройства, то инициатор, полу- чив доступ к шине, выбирает это устройство, подает сигнал ATN# и посылает не- обходимые сообщения. Здесь мы не рассматриваем различные ситуации, приводящие к отклонениям от нормальной последовательности событий интерфейса. К ним относятся некоррект- ные соединения со стороны инициатора, выбор несуществующего ЛУ, неожи- данные выборки инициатора, округление параметров, реакция на асинхронные события и т. п. Протокол с передачей информационных блоков Протокол с передачей информационных блоков используется в версиях интер- фейса с двойной синхронизацией. Применение этого протокола предварительно согласуется. При разрешенном использовании информационных блоков функ- ции, выполнявшиеся путем передачи сообщений, состояния и команд, выполня- ются передачей блоков в фазах DT Data. Общая идея организации выполнения заданий на шине SCSI сохраняется, но появляется ряд особенностей. Получение права доступа к шине и выбор устройства производятся либо в фазах Arbitrate и Selection, либо с помощью ускоренного арбитража QAS (см. 10.2). Связь I T, как и в традиционном протоколе, устанавливается с помощью пары идентификаторов, введенных на шине данных. Целевое устройство управляет про- цессом ввода-вывода, посылая блоки L_Q, в которых указываются тип, направ- ление и длина последующего передаваемого информационного блока. Для идентификации логического устройства и тега используется передача ин- формационного блока SPIIU L_Q в котором поле LUN имеет размер 8 байт (со- гласно модели SAM), а тег — 2 байта. Атрибуты задания и дескриптор команды передаются в командном блоке SPI IU Command, формат которого позволяет посылать дескрипторы команд и более длинные, чем 16 байт. Для передачи данных используются информационные блоки IU SPI Data (оди- ночные) или SPI IU Data Stream (потоковые). Одиночные блоки данных посыла- ются по одному после каждого описывающего их блока L Q. Потоковые передачи позволяют сократить накладные расходы: после блока L_Q может передаваться серия блоков данных одинаковой длины. Поддержка потоковой записи обяза- тельна, поддержка потокового чтения оговаривается при согласовании протоко- ла. Использование сигнала P_CRCA для управления потоками записи и чтения также подлежит согласованию.
230 Глава 10. Параллельные шины SCSI Для передачи состояния (кроме Good) используются блоки SPIIUStatus, в кото- рых помимо байта состояния могут помещаться данные уточненного состояния и список протокольных ошибок. Нормальное завершение (Good) сообщается ко- роче: в блоке LQ, задающем тип блока Status, указывается нулевая длина дан- ных, а сам блок Status не передается. Для управления заданиями используются блоки SPI IU Command с ненулевым байтом функции управления заданиями (при этом дескриптор команды игнори- руется). Фазы сообщений используются ограниченно для арбитража (QAS Request), осво- бождения шины (Disconnect), сигнализации о некоторых ошибках (Initiator De- tected Error, Message Parity Error, Message Reject) и неготовности сообщения (No Operation), а также для согласования протокола (PPR), режима (SDTR) и разряд- ности (WDTR). Управление режимами портов В системе команд SCSI имеются команды установки (Mode Select) и опроса (Mode Sense) режимов работы портов и логических устройств, определяющих поведе- ние (свойства) устройства на шине. Каждой группе свойств соответствует своя страница (page) или подстраница (subpage), коды (номера) страниц и подстра- ниц являются аргументами команд Mode Select и Mode Sense. Каждая страница или подстраница начинается с заголовка, в котором присутствуют номер страни- цы (Page Code), длина страницы (Page Length), признак подстраницы (SPF) и код подстраницы (Subpage Code). Страница управления отключением-подключением (Disconnect-Reconnect mode page, номер 02) определяет условия разрыва и возобновления соединения при испол- нении команды. Эта страница позволяет регулировать распределение пропускной способности шины между устройствами. Страница содержит следующие поля: ♦ Buffer Full Ratio, Buffer Empty Ratio — степень заполнения или опустошения буферов, при которой устройство разрывает соединение; ♦ Bus Inactivity Limit — предел времени занятия шины (удержания сигнала BSY#) при отсутствии активности (сигналов REQ#/ACK#); ♦ Physical Disconnect Time Limit — минимальное время после отсоединения до попытки возобновления соединения; ♦ Connect Time Limit — максимальное время занятия шины; ♦ Maximum Burst Size — максимальный объем, передаваемый в фазе данных до от- соединения (в 512-байтных единицах, нулевое значение означает отсутствие ограничений). В случае использования информационных блоков параметр определяет предельный размер поля данных в блоке; ♦ EMDP (enable modify data pointer) — разрешение использования сообщений Mo- dify Data Pointer и Modify Bidirectional Data Pointers', ♦ FAIR ARBITRATION — разрешение справедливого арбитража (0 — запрещен, при разрешении ускоренного арбитража справедливый арбитраж используется независимо от значения поля);
10.4. Физический и электрический интерфейсы 231 ♦ DIMM (disconnect immediate) — указание на отсоединение сразу после получе- ния команды (если в командном блоке отсоединение разрешается); ♦ DTDC (data transfer disconnect control) — альтернативное управление отсоеди- нением: ООО — не используется (учитываются вышеприведенные поля), 001 — порт не пытается отсоединиться, пока не будут переданы все данные, относя- щиеся к команде; 011 — порт не пытается отсоединиться, пока не завершится выполнение команды. При альтернативном управлении ограничения на вре- мя занятости и неактивности не действуют. Параметры времени указываются в 100-микросекундных единицах, нулевое зна- чение означает отсутствие ограничений. Страница управления логическим устройством {Logical Unit Control mode page, , номер 18h) пока несет только идентификатор протокола (Protocol Identifier^ ) параллельной шины SCSI. Страница управления режимом порта в короткой форме {Port Control mode page short format, номер 19h) вызывается с номером подстраницы 0. В ней содержится идентификатор протокола (1) и тайм-аут синхронного обмена (Synchronous Trans- fer Timeout) — предел ожидания подтверждения (АСК#) после запроса (REQ#). Тайм-аут указывается в миллисекундах, значение 0000h означает запрет данной функции, FFFFh — неограниченный период (что, в принципе, одно и то же). Для более детального управления режимом порта используются следующие под- страницы (Port Control mode subpage) страницы 19h: ♦ Margin Control mode subpage (Olh) — отклонения параметров шинных передат- чиков (сила тока, асимметрия, скорость нарастания сигнала, предкомпенса- ция). Отклонения параметров задаются 4-битными знаковыми числами: 0000 — значение по умолчанию, 0111 — максимальное положительное отклонение, 1000 — максимальное отрицательное отклонение; ♦ Saved Training Configuration value mode subpage (02h) — сохраненные значения параметров каждой сигнальной линии (32-битные числа), полученные при тренировках (относятся к передаче в режиме расе); ♦ Negotiated Settings mode subpage (03h) — согласованные параметры режима и протокола: длительность цикла синхронной передачи, отставание ответов от запросов, разрядность шины и параметры протокола. Кроме того, здесь присутствуют идентификатор типа приемопередатчика (SE, LVD или HVD) и биты разрешения предкомпенсации приема и передачи; ♦ Report Transfer Capabilities mode subpage (04h) — поддерживаемые параметры режима и протокола. 10.4. Физический и электрический интерфейсы Кабели и разъемы Шинное соединение устройств SCSI обеспечивается кабелями-шлейфами или цепочечным соединением устройств. Внешние устройства имеют по два разъема,
232 Глава 10. Параллельные шины SCSI с помощью которых и организуется цепочечное соединение (daisy chain). Внут- ренние устройства имеют по одному разъему и соединяются кабелем-шлейфом, на котором устанавливаются несколько разъемов. При необходимости кабели могут сращиваться через специальные переходные разъемы, причем только кон- цевые; Т-образные ответвления недопустимы1. На шасси, в которые устанавли- ваются устройства SCSI, шина организуется кросс-платой. В качестве шлейфа используется плоский (ленточный) или витой (каждая пара проводов скручена) кабель. Разъемы на шлейф устанавливаются наколкой (IDC- разъемы). Для внешних соединений, как правило, применяется круглый кабель, состоящий из витых пар. У всех разъемов кабеля контакты одноименных цепей соединяются «один в один». Допустимая длина кабеля зависит от версии интерфейса, скорости и числа уст- ройств (табл. 10.7). Наибольшую дальность (25 м) обеспечивают дифференци- альные интерфейсы при соединении пары устройств. Для варианта SE длина 3 м допустима только при малом (до 4) числе устройств. При подсчете суммарной длины кабеля следует учитывать возможность использования одного порта хост- адаптера одновременно для внешних и внутренних подключений и, в случае та- кого подключения суммировать длины внутренних и внешних кабелей. Таблица 10.7. Максимальная длина кабелей SCSI Тип Скорость Async Fast-5 Fast-10 Fast-20 Fast-40 Fast-80... 160 Fast-320 HVD (ST) Точка-точка — 25 м, шина —12 м — — SE (ST) 6 м 3 м 3 м /1,5 м — — - LVD Точка-точка — 25 м, шина —12 м 20 м/10 м В настоящее время ассортимент разъемов, применяемых в устройствах SCSI, до- вольно широк, что иногда заставляет использовать переходные адаптеры. Разъемы различаются как по числу, так и по форме и размеру контактов (о назначении кон- тактов см. далее). Практически все разъемы двухрядные, и раскладка цепей рассчи- тана на чередование сигнальных и обратных проводов. Исключения составляют разъемы DB-25, у которых число «земляных» контактов меньше, чем сигнальных, и экзотические трехрядные DB-50. Ниже описаны применяемые типы разъемов. ♦ IDC-50 — разъемы для соединения внутренних устройств (аналогичны разъ- емам АТА, где применяются 40-контактные IDC-40). Разъемы имеют квад- ратные штырьковые контакты с шагом 0,1” (2,54 мм), пластмассовый корпус без кожуха и дополнительных фиксаторов (рис. 10.10, а). На устройствах ус- танавливают вилки (IDC-50M), на ленточных кабелях — розетки (IDC-50F). ♦ СХ-50 — разъемы типа Centronics, аналогичные применяемым в принтерах (но 50-контактные). Разъемы имеют пластинчатые контакты с шагом 0,085” 1 Допускается длина отвода до 10 см, сюда входит длина проводника от ответвления до входа микросхемы приемопередатчика.
10.4. Физический и электрический интерфейсы 233 (2,16 мм) и внешний металлический кожух (рис. 10.10, б). Применяются для соединения внешних устройств. На корпусе устройства (и SCSI-адаптера) ус- танавливают розетки (CX-50F), на кабелях — вилки (СХ-50М). Разъемы фик- сируются проволочными скобами, установленными на розетке, входящими в выемки на корпусе вилки. Часто называются внешними разъемами SCSI-1 (SCSI-1 External). Рис. 10.10. Разъемы 8-битного устройства SCSI: а — IDC-50F, б — CX-50F, в — DB-25F, г — HD-50F ♦ DB-25 — разъемы с круглыми штырьковыми контактами в металлическом кожухе D-образной формы (как на LPT-порте компьютера). На устройстве устанавливается розетка (DB-25F), на кабеле — вилка (DB-25M); фиксация выполняется с помощью винтов (рис. 10.10, в). Применяются на некоторых внешних устройствах (например, Zip). ♦ HD-50, они же MiniD50 (рис. 10.10, г), — разъемы со штырьковыми контакта- ми в металлическом кожухе D-образной формы, с высокой плотностью кон- тактов (high density) — с шагом 0,05” (1,27 мм). На устройстве устанавливает- ся розетка (HD-50F), на кабеле — вилка (HD-50M); фиксация выполняется с помощью защелок (клипсов). Часто называются внешними разъемами SCSI-2 (SCSI-2 External). ♦ HD-68, они же MiniD68, — аналогичные разъемы, но с 68 контактами. На устройстве устанавливается розетка (HD-68F или MiniD68F), на кабеле — вилка (HD-68M или MiniD68M). Внешние разъемы фиксируются с помощью клипсов или винтов, внутренние — только на трении. Часто называются разъ- емами SCSI-3, в настоящее время наиболее широко используются для «широ- кого» интерфейса. На рис. 10.11 показаны оба варианта внешнего разъема, слева изображена клипса, справа — резьбовая букса.
234 Глава 10. Параллельные шины SCSI Рис. 10.11. Разъемы 16-битного устройства SCSI HD-68F ♦ VHDCI-68 — внешние разъемы с особо высокой плотностью (very high density connector), контакты в стиле Centronics с шагом 0,8 мм. Применяются нечасто, иногда их ошибочно называют разъемами SCSI-4 или SCSI-5. ♦ МСХ (Micro-centronics) — разъемы в стиле Centronics, но в миниатюрном ва- рианте. Наиболее распространены разъемы МСХ-68 и МСХ-80, более извест- ные как SCA. ♦ SCA (Single Connector Attachment) — подключение устройства одним разъе- мом. Этот разъем предназначен для подключения дисков, устанавливаемых в шасси с возможностью «горячей» замены (или, по крайней мере, легкой, через лицевую панель). В настоящее время распространена спецификация SCA-2 на разъемах МСХ-80 (рис. 10.12). На устройстве устанавливается вилка (МСХ- 80F), на шасси — розетка (МСХ-80М). Помимо интерфейсных сигналов на разъем выводятся шины питания, а также сигналы конфигурирования уст- ройства (идентификатор, режимы и т. п.). На боковых направляющих имеют- ся дополнительные контакты заземления. Конфигурационные джамперы ус- танавливаются не на устройстве, а на шасси (или на плате адаптера). Рис. 10.12. Разъем устройства SCSI с «горячей* заменой SCA-80 Для версии Narrow SCSI использовались разъемы, изображенные на рис. 10.10, для Wide SCSI — на рис. 10.11. Для устройств с «горячей» заменой применяют миниатюрный D-образный разъем SCA-2, общий для питания и сигнальных це- пей (рис. 10.12). Ассортимент кабелей SCSI довольно широк. ♦ А-кабель. Стандартный для 8-битного интерфейса, 25 пар проводов. Для внут- ренних устройств используется плоский ленточный кабель, для внешних — круглый кабель, состоящий из 25 витых пар в общем экране: • внутренний А-кабель SCSI-1 и SCSI-2 имеет разъемы с низкой плотно- стью контактов IDC-50 (розетки, см. рис. 10.10, «); • внешний А-кабель SCSI-1 имеет разъемы Centronics-50 (СХ-50М, см. рис. 10.10, б); • внешний А-кабель SCSI-2 имеет разъемы MiniD50M (HD-50M, см. рис. 10.10, в). I
10.4. Физический и электрический интерфейсы 235 ♦ В-кабель. Малораспространенный 16/32-битный расширитель SCSI-2. ♦ Р-кабель. 8/16-битный кабель с 34 парами проводов, снабжен улучшенными миниатюрными экранированными разъемами. Применяется в интерфейсах SCSI-2/3, в 8-битном варианте контакты 1-5, 31-39, 65-68 не используются: • внутренний Р-кабель SCSI-3 имеет разъемы HD-68M без фиксаторов; • внешний Р-кабель SCSI-3 имеет разъемы MiniD68M с фиксаторами; • внешний Р-кабель SCSI SPI-2 имеет разъемы с особо высокой плотностью контактов VHDCI-68M (иногда такой кабель ошибочно называют кабелем SCSI-4 или SCSI-5). ♦ Q-кабель. 68-проводное расширение до 32 бит (в паре с Р-кабелем) аналогич- ной конструкции. Реально Q-кабель так и не использовался, в спецификации SCSI SPI-3 уже не рассматривается. ♦ Mac SCSI. Кабель с разъемами DB-25P (см. рис. 10.10, г) — 8-битный, стан- дартный для Macintosh (назначение контактов см. далее), используется на не- которых внешних устройствах (Iomega ZIP Drive). Встречается иная расклад- ка цепей, если 25-контактный разъем установлен на хост-адаптере. Существуют также различные варианты кабелей-переходников (с разнотипны- ми разъемами) и адаптеров. Адаптеры представляют собой печатную плату или монолитную конструкцию с разнотипными разъемами. У адаптеров, соединяю- щих шины разной ширины, может присутствовать терминатор (должен быть от- ключаемым!) старшего байта (см. 10.6). Адаптер подключения SCA к обычной шине имеет стандартный разъем подключения питания, а также набор джампе- ров, задающих конфигурацию устройства. Назначение контактов разъемов кабелей приведено в табл. 10.8-10.12. Неудоб- ство вызывает система нумерации контактов, которая различна для внешних и внутренних разъемов. Однако физическая раскладка проводов на разъеме и в плоском кабеле одинакова, сигнальные линии (прямые) перемежаются обратны- ми проводами (заземленными в устройствах SE). Таблица 10.8. Разъемы А-кабеля SCSI Контакт IDC-50/CX-50 Цепь SE/Diff Контакт IDC-50/CX-50 Цепь 1/1 GND/DB0+ 2/26 DB0# 3/2 GND/DB1 + 4/27 DB1# 5/3 GND/DB2+ 6/28 DB2# 7/4 GND/DB3+ 8/29 DB3# 9/5 GND/DB4+ 10/30 DB4# 11/6 GND/DB5+ 12/31 DB5# 13/7 GND/DB6+ 14/32 DB6# 15/8 GND/DB7+ 16/33 DB7# 17/9 GND/DBP+ 18/34 DBP# 19/10 GND/GND 20/35 f GND продолжение
236 Глава 10. Параллельные шины SCSI Таблица 10.8 (продолжение) Контакт IDC-50/CX-50 Цепь SE/Diff Контакт IDC-50/CX-50 Цепь 21/11 GND/GND 22/36 GND 3/12 Резерв 24/37 Резерв 25/13 Свободен 26/38 TERMPWR 27/14 Резерв 28/39 Резерв 29/15 GND 30/40 GND 31/16 GND/ATN+ 32/41 ATN# 33/17 GND 34/42 GND 35/18 GND/BSY+ 36/43 BSY# 37/19 GND/ACK+ 38/44 ACK# 39/20 GND/RST+ 40/45 RST# 41/21 GND/MSG+ 42/46 MSG# 43/22 GND/SEL+ 44/47 SEL# 45/23 GND/C/D+ 46/48 C/D# 47/24 GND/REQ+ 48/49 REQ# 49/25 GND/I/O+ 50/50 I/O# Таблица 10.9. Разъемы В-кабеля SCSI Контакт внутр./внешн. Цепь SE/Diff Контакт внутр./внешн. Цепь 1/1 GND 2/35 GND 3/2 GND/DB8+ 4/36 DB8# 5/3 GND/DB9+ 6/37 DB9# 7/4 GND/DB10+ 8/38 DB10# 9/5 GND/DB11 + 10/39 DB11# 11/6 GND/DB12+ 12/40 DB12# 13/7 GND/DB13+ 14/41 DB13# 15/8 GND/DB14+ 16/42 DB14# 17/9 GND/DB15+ 18/43 DB15# 19/10 GND/DBP1 + 20/44 DBP1# 21/11 GND/ACKB+ 22/45 ACKB# 23/12 GND/GND 24/46 GND 25/13 GND/REQB+ 26/47 REQB# 27/14 GND/DB16+ 28/48 DB16# 29/15 GND/DB17+ 30/49 DB17#
10.4. Физический и электрический интерфейсы 237 Контакт внутр./внешн. Цепь SE/Diff Контакт внутр./внешн. Цепь 31/16 GND/DB18+ 32/50 DB18# 33/17 TERMPWR 34/51 TERMPWR 35/18 TERMPWR 36/52 TERMPWR 37/19 GND/DB19+ 38/53 DB19# 39/20 GND/DB20+ 40/54 DB20# 41/21 GND/DB21 + 42/55 DB21# 43/22 GND/DB22+ 44/56 DB22# 45/23 GND/DB23+ 46/57 DB23# 47/24 GND/DBP2+ 48/58 DBP2# 49/25 GND/DB24+ 50/59 DB24# 51/26 GND/DB25+ 52/60 DB25# 53/27 GND/DB26+ 54/61 DB26# 55/28 GND/DB27+ 56/62 DB27# 57/29 GND/DB28+ 58/63 DB28# 59/30 GND/DB29+ 60/64 DB29# 61/31 GND/DB30+ 62/65 DB30# 53/32 GND/DB31 + 64/66 DB31# 65/33 GND/DBP2+ 66/67 DBP2# 67/34 GND/GND 68/68 GND Таблица 10.10. Разъемы Р-кабеля SCSI Контакт Цепь SE/Diff Контакт Цепь 1 GND/DB12+ 35 DB12# 2 GND/DB13+ 36 DB13# 3 GND/DB14+ 37 DB14# 4 GND/DB15+ 38 DB15# 5 GND/P1 + 39 P1# 6 GND/DB0+ 40 DB0# 7 GND/DB1 + 41 DB1# 8 GND/DB2+ 42 DB2# 9 GND/DB3+ 43 DB3# 10 GND/DB4+ 44 DB4# 11 GND/DB5+ 45 DB5# 12 GND/DB6+ 46 DB6# Продолжение &
238 Глава 10. Параллельные шины SCSI Таблица 10.10 (продолжение) Контакт Цепь SE/Diff Контакт Цепь 13 GND/DB7+ 47 DB7# 14 GND/P_CRCA+ 48 P_CRCA# 15 GND 49 GND 16 DIFFSENS (GND)1 50 GND 17 TERMPWR 51 TERMPWR 18 TERMPWR 52 TERMPWR 19 Резерв 53 Резерв 20 GND 54 GND 21 GND/ATN+ 55 ATN# 22 GND/GND 56 GND 23 GND/BSY+ 57 BSY# 24 GND/ACK+ 58 ACK# 25 GND/RST+ 59 RST# 26 GND/MSG+ 60 MSG# 27 GND/SEL+ 61 SEL# 28 GND/C/D+ 62 C/D# 29 GND/REQ+ 63 REQ# 30 GND/I/O+ 64 I/O# 31 GND/DB8+ 65 DB8# 32 GND/DB9+ 66 DB9# 33 GND/DB10+ 67 DB10# 34 GND/DB11 + 68 DB11# 1 Сигнал DIFFSENS определен только для интерфейса LVD. Таблица 10.11. Разъем Mac SCSI (DB-25) Контакт Цепь Контакт Цепь 1 REQ# 14 GND 2 MSG# 15 C/D# 3 I/O# 16 GND 4 RST# 17 ATN# 5 ACK# 18 GND 6 BSY# 19 SEL# 7 GND 20 DBPO# 8 DBO# 21 DB1#
10.4. Физический и электрический интерфейсы 239 Контакт Цепь Контакт Цепь 9 GND 22 DB2# 10 DB3# 23 DB4# 11 DB5# 24 GND 12 DB6# 25 TERMPWR 13 DB7# Таблица 10.12. Разъем SCA-80 Контакт Цепь Контакт Цепь SE/Diff 01 12 Volt Charge 41 12V GND 02 12 Volt 42 12V GND 03 12 Volt 43 12V GND 04 12 Volt 44 Mated 1 05 Резерв 45 Резерв 06 Резерв 46 (DIFSENS) GND 07 DB11# 47 GND/DB11 + 08 DB10# 48 GND/DB10+ 09 DB9# 49 GND/DB9+ 10 DB8# 50 GND/DB8+ 11 I/O# 51 GND/I/O+ 12 REQ# 52 GND/REQ+ 13 C/D# 53 GND/C/D+ 14 SEL# 54 GND/SEL+ 15 MSG# 55 GND/MSG+ 16 RST# 56 GND/RST+ 17 ACK# 57 GND/ACK+ 18 BSY# 58 GND/BSY+ 19 ATN# 59 GND/ATN+ 20 DBP0# 60 GND/DBP0+ 21 DB7# 61 GND/DB7+ 22 DB6# 62 GND/DB6+ 23 DB5# 63 GND/DB5+ 24 DB4# 64 GND/DB4+ 25 DB3# 65 GND/DB3+ 26 DB2# 66 GND/DB2+ Продолжение &
240 Глава 10. Параллельные шины SCSI Таблица 10.12 (продолжение) Контакт Цепь Контакт Цепь SE/Diff 27 DB1# 67 GND/DB1 + 28 DB0# 68 GND/DB0+ 29 DBP1# 69 GND/DBP1 + 30 DB15# 70 GND/DB15+ 31 DB14# 71 GND/DB14+ 32 DB13# 72 GND/DB13+ 33 DB12# 73 GND/DB12+ 34 5 Volt 74 Mated 2 35 5 Volt 75 5V GND 36 5 Volt Charge 76 5V GND 37 Резерв 77 Active LED Out 38 Auto Spin Up 78 Delayed Start 39 SCSI I D 0 79 SCSI 1 D 1 40 SCSI I D 2 80 SCSI I D 3 Терминаторы Каждая физическая шина SCSI должна оканчиваться терминаторами, устанав- ливаемыми на обоих ее концах. Терминаторы могут быть как внутренними (ус- тановленными внутри контроллеров и периферийных устройств SCSI), так и внешними — маленькими блоками, устанавливаемыми на разъем кабеля или до- полнительный разъем последнего устройства. Терминаторы шины SCSI призва- ны решить две задачи: ♦ избавить линии шины от отраженных сигналов с ее концов; ♦ обеспечить требуемый уровень сигнала пассивных линий. Первая задача вытекает из того, что шлейф SCSI может иметь довольно боль- шую протяженность, и в терминах теоретических основ электротехники каждая сигнальная линия является «длинной линией». Чтобы сигналы не отражались от концов этой линии, оба конца должны быть нагружены согласованной нагруз- кой. Согласованность означает совпадение волнового сопротивления линии с динамическим сопротивлением (импедансом) нагрузки. Волновое сопротивле- ние линий кабельных шлейфов, применяемых в SCSI, обычно лежит в диапазоне 85-110 Ом. Если терминаторов не будет (или импеданс терминатора не совпадет с импедансом линии), «звон» отраженных сигналов приведет к появлению по- мех на шине. Вторая задача обусловлена спецификой интерфейса SCSI, где каждой сигналь- ной линией может управлять любое из нескольких устройств, подключенных к шине. Причем в первых версиях интерфейса (режимы Fast-5 и Fast-10) устройст-
10.4. Физический и электрический интерфейсы 241 во, посылающее сигнал, формирует только активный уровень (низкий в недиф- ференциальных версиях SCSI), то есть возвращать линию в пассивное состоя- ние должны терминаторы. При отсутствии терминаторов уровень на линиях, «отпущенных» устройством, за счет входных токов приемников сигнала тоже будет возвращаться в пассивное состояние, но гораздо медленнее. Если шина достаточно длинная и устройств много, то возвращение окажется слишком за- поздалым, что может вызвать сбои в протоколе. У высокоскоростных устройств (Fast-20 и выше) применяется активное снятие сигнала (active negation), то есть возвращение сигналов в пассивное состояние, отчего возникает иллюзия воз- можности работы шины без терминаторов. Однако устойчивая работа при большом количестве устройств (более двух на шине, включая контроллер) про- блематична. Из сказанного становится понятно, когда пренебрежение правилами установки терминаторов может сойти с рук: когда шина не очень длинная, устройств мало (скажем, контроллер и один винчестер), а скорость обмена невелика. Однако на одну шину SCSI чаще устанавливают много устройств, при этом шина получает- ся довольно длинной; устройства стараются использовать ее на высоких скоро- стях обмена, да еще и с высокими требованиями к надежности. В иных случаях было бы выгоднее применять устройства с иным интерфейсом — для устройств хранения данных это широко распространенный и дешевый интерфейс АТА. Рассмотрим, какие бывают терминаторы для наиболее популярных устройств SE и LVD. Многие устройства с интерфейсом LVD способны работать и с интер- фейсом SE (но на малых скоростях), их интерфейс обозначается символами «LVD/SE». Режим работы эти устройства способны определять автоматически: если все устройства на шине (включая и терминаторы) «умеют» работать в ре- жиме LVD, то этот режим и выбирается (если ни на одном из устройств прину- дительно не установлен режим SE). Если же на шине хоть одно устройство спо- собно только на режим SE, то в этот режим перейдут и все остальные (соответственно, снижая возможную скорость передачи данных). Заметим, что устройства HVD (Diff) в компанию к LVD/SE включать нельзя. Для режимов SE и LVD способы передачи по сигнальным линиям и режимы терминации различаются. Каждая сигнальная линия шины SCSI состоит из пары проводов: прямого и обратного. В режиме SE все обратные провода соеди- няются с «землей» (на каждом устройстве); терминирующие цепи подключают- ся только к прямым проводам. В режиме LVD по каждой паре проводов сигнал передается в дифференциальной парафазной форме; терминирующие цепи под- ключаются к обоим проводам каждой пары. Варианты схем терминаторов для SE и LVD приведены на рис. 10.13 (изображены нагрузочные цепи для одной сигнальной линии). Все терминаторы (не только «активные»!) нуждаются в пи- тании, которое на них поступает по специальным линиям TERMPWR (+5 В). ♦ Пассивные терминаторы SE (рис. 10.13, а) имеют импеданс 132 Ом, что пло- хо согласуется с ленточным кабелем шины. Эти терминаторы пригодны лишь для старого интерфейса SCSI (скорость передачи до Fast-5). Для режимов Fast-10 и выше они непригодны.
242 Глава 10. Параллельные шины SCSI ♦ Активные терминаторы SE (рис. 10.13, б) имеют импеданс 110 Ом, что по- зволяет использовать их на более высоких скоростях (Fast-10, Fast-20). Их «активность» заключается лишь в наличии внутреннего источника опорного напряжения (ИОН) +2,85 В, питающегося от тех же линий TermPWR. Микро- схемы активных терминаторов имеют и электронные ключи, включенные по- следовательно в каждую линию. Ключи управляются общим сигналом, позво- ляющим включать и отключать терминатор. ♦ Терминаторы FPT SE (Forced Perfect Terminator) — улучшенный вариант ак- тивных терминаторов с диодными ограничителями выбросов. Применяются в высокоскоростных версиях интерфейса SE. ♦ Терминаторы LVD (рис. 10.13, в) имеют дифференциальный импеданс 105 Ом (линейный — 150 Ом). Здесь два источника опорных напряжений обеспечи- вают между прямым и обратным проводами смещение 112 мВ (в их пассив- ном состоянии). ♦ Универсальные терминаторы LVD/SE сочетают в себе активные терминаторы SE, дифференциальные терминаторы LVD, схему определения режима и цепи коммутации каждого провода (прямого и обратного) шины SCSI на соответ- ствующие терминирующие цепи. TermPWR а TermPWR t/ = 2,85B б TermPWR t/ = 2,1B Рис. 10.13. Терминаторы SCSI: a — терминаторы SE пассивные, б — терминаторы SE активные, в — терминаторы LVD Универсальные терминаторы LVD/SE, как и остальные устройства, определяют режим работы шины по линии DIFSENSE. В старых устройствах SE контакт разъ- ема, соответствующий этой линии, был заземлен. Устройства LVD пытаются вы- вести на этот контакт потенциал 1,3 В. Устройства HVD на этот контакт выво- дят потенциал выше 2,1 В. В терминаторе имеются компараторы, сравнивающие сигнал этой линии с эталонами, и логика, переключающая режим терминатора (если обнаруживается HVD, терминатор отключает все свои цепи). Специально для универсальных терминаторов выпускаются микросхемы (например, DS2117M, DS2118M фирмы Dallas Semiconductor), выполняющие все функции автомати- ческой терминации для 9 пар проводов. Для терминации 16-разрядной шины дан- ных (Wide SCSI) и сигналов управления требуется три таких микросхемы. В микросхемах используются прецизионные резисторы с лазерной подгонкой, что обходится недешево. По исполнению терминаторы могут быть как внутренними (размещенными на печатной плате устройства), так и внешними (устанавливаемыми на разъемы ка- беля или устройства). Внутренние терминаторы на каждом устройстве могут
10.4. Физический и электрический интерфейсы 243 быть включены или выключены. В старых устройствах (SCSI-1) для включения терминаторов нужно было установить набор перемычек или вставить в специ- альную кроватку сборку резисторов. Активные терминаторы включаются и выклю- чаются перестановкой одного джампера или даже бесконтактно — программно при конфигурировании устройства. Возможно даже автоматическое включение терминатора (если таковая возможность поддерживается устройством и разре- шена при конфигурировании). Внешние терминаторы выглядят как разъемы с небольшой крышкой, под которой смонтирована их «начинка». Несмотря на ка- жущуюся простоту, они имеют ощутимую цену — терминатор для Ultra-Wide SCSI стоит 10-15 долларов. Внешние терминаторы устанавливаются и снимают- ся только вручную. Внутренние терминаторы (по крайней мере, панелька для их установки) имеют- ся практически во всех устройствах, интерфейс которых не является интерфей- сом LVD. В устройствах с интерфейсом LVD терминаторы, как правило, отсут- ствуют в целях экономии: когда на шину устанавливается несколько устройств, терминатор требуется лишь в последних. Однако при подключении одного уст- ройства экономия на цене устройства незаметна, а вот расходы на приобретение терминатора вполне очевидны. ВНИМАНИЕ -------------------------------------------------------------- Отсутствие терминаторов на устройствах с интерфейсом LVD не означает отказа от правил терминации! Приемопередатчики Для приемопередатчиков устройств в спецификациях SCSI определены требова- ния и параметры, зависящие от режимов работы: ♦ линейный (SE) режим с пассивным снятием сигнала; ♦ линейный (SE) режим с активным снятием сигнала; ♦ высоковольтный дифференциальный (HVD) режим; ♦ низковольтный дифференциальный (LVD) режим. Сигналы BSY#, SEL# и RST# согласно протоколу шины могут вводиться одно- временно несколькими устройствами, при этом шина организует функцию «мон- тажное ИЛИ» (wire-OR). Для этих сигналов в современных реализациях уст- ройств применяются передатчики с переходом в третье состояние (Z-состояние). Остальные сигналы в каждый момент времени управляются только одним уст- ройством или свободны — управляются только терминаторами. В режимах SE (с активным и пассивным снятием сигнала) электрические пара- метры приемопередатчиков иллюстрирует табл. 10.13. В старых устройствах (ре- жим Fast-5) применялись приемопередатчики ТТЛ, в новых устройствах приме- няются КМОП-элементы. В режиме LVD передатчики на нормальной нагрузке (пара терминаторов) фор- мируют дифференциальный сигнал в диапазоне 320...800 мВ (370...800 мВ для режимов расе). Для введения сигнала (assertion) ток от положительного источ-
244 Глава 10. Параллельные шины SCSI ника посылается в линию +Signal, а из линии -Signal — в землю (GND). Для сня- тия сигнала ток от источника посылается в линию -Signal, а из линии +Signal — в землю, причем эти токи меньше (терминаторы тоже «стремятся» к снятию сиг- нала). Приемники способны распознавать сигнал при синфазном напряжении (common mode voltage) в диапазоне 0,845... 1,655 В. При этом дифференциальное напряжение в пределах (-3,6...-0,03) В воспринимается как «единица», в преде- лах (0,03...3,6 В) — как «ноль». Таблица 10.13. Параметры приемопередатчиков в режимах SE Параметр Fast-5 Fast-10 Fast-20 Передатчик Vol (сигнал введен) 0...0.5 В (ток 48 мА) 0...0.5 В (ток 48 мА) 0...0,5 В (ток 48 мА) Voh (пассивно снят) 2,5...5,25 В 2,5...5,25 В - Voh (активно снят) 2,5...3,7 В 2,5...3,7 В 2,5...3,7 В Приемник Vil (при 1вх) 0...0.8 В (-0,4 мА) 0...0,8 В (20 мкА) 0...0.8 В (20 мкА) Vih (при 1вх) 2...5,25 В (0,1 мА) 2...5,25 В (20 мкА) 1,9...5,25 В (20 мкА) Гистерезис Vi, не менее 0,2 В 0,3 В 0,3 В В режиме HVD передатчики формируют дифференциальный сигнал не менее 1 В при токе до 55 мА (линейные сигналы могут находиться в пределах О...1,7 и 2,7...5,25 В). Дифференциальные приемники обладают гистерезисом 35 мВ, они способны работать при синфазном сигнале на входе от -7 до +12 В. Такая терпимость к смещению потенциалов и обеспечивает возможность работы HVD на значительных расстояниях. Для работы на скоростях Fast-160 и выше в режиме расе применяются дополни- тельные ухищрения: предкомпенсация и тренировка приемопередатчиков. Предкомпенсация (ргесотр) — это управление силой тока передатчика в зависи- мости от предыстории сигнала, используемое в расе-передачах для сигналов REQ, АСК, Р1, P_CRCA и DB(15-0). Если в очередном интервале времени передатчик начинает управлять сигналом или же состояние сигнала (пассивное или активное) меняется на противоположное, то включаются формирователи сильного (strong) тока. Если состояние сигнала не меняется, то формируется сигнал слабого (weak) тока. Предкомпенсация позволяет улучшить форму сигнала, ее использование разрешается при согласовании протокола (битом PCOMP EN). Тренировка (training) приемопередатчиков служит для подстройки их парамет- ров к текущим условиям работы: перекосу (разнице в задержках сигналов для разных линий), уровням сигналов и другим характеристикам, обусловленным кабелями, разъемами и приемопередатчиками устройства-партнера. Для трени- ровки между парой устройств выполняется обмен специальными тренировочны- ми, или обучающими, посылками (training pattern), позволяющими определить
10.5. Экспандеры 245 значения критичных параметров. После соответствующей настройки у парал- лельного интерфейса, соединяющего пару устройств, почти устраняется перекос задержек распространения сигналов. Технология устранения перекоса (deskew) определяется разработчиком, в стандарте описаны только тренировочные после- довательности. Настроечные параметры, получаемые при тренировке, действи- тельны только для одной пары устройств (1_Т), причем тренировки должны про- водиться для передач в обоих направлениях. Тренировка и настройка должны производиться до начала расе-передач. Если порты неспособны запоминать па- раметры работы с разными партнерами, то тренировка производится перед началом каждой расе-передачи, что, естественно, снижает эффективность работы шины. Способность к сохранению параметров определяется при согласовании протоко- ла (бит RTI). Для сообщения настроечных параметров имеется специальная под- страница управления портом {Saved Training Configuration value mode subpage), в которой для каждой сигнальной линии интерфейса имеется 32-битное поле со- храненных значений. Трактовка этих полей определяется производителем уст- ройства. Параметры, передаваемые в подстранице, относятся к паре устройств (1_Т), участвующих в исполнении команд Mode Select и Mode Sense. 10.5. Экспандеры Чисто шинная физическая топология не всегда удобна при построении систем с большим количеством устройств. Для расширения топологических возможно- стей шины могут применяться устройства-экспандеры, объединяющие пару сег- ментов шин в единый SCSI-домен. Сегмент шины (bus segment) — это набор электрических проводников с парой терминаторов на концах, объединяющий порты устройств. Домен может состоять из множества сегментов, соединяемых друг с другом экспандерами. Домен может быть гомогенным (с одинаковым ти- пом приемопередатчиков для всех сегментов) или гетерогенным (с разнотипны- ми приемопередатчиками). Для построения гетерогенного домена применяются гетерогенные экспандеры (например, LVD/SE). Применение экспандеров позво- ляет расширить топологические возможности домена: ♦ увеличить число соединяемых устройств, если оно ограничено возможностя- ми кабельной шины (см. табл. 10.7); ♦ преодолеть ограничения на расстояние между устройствами: сегменты с уст- ройствами можно соединять «ненаселенными» (двухточечными) сегментами, для которых допустима большая длина; ♦ бороться со смещением нулевого потенциала (экспандеры электрически раз- рывают сигнальные цепи); ♦ обеспечить динамическое подключение-отключение целых фрагментов до- мена; ♦ объединить в домен устройства с разнотипными приемопередатчиками без снижения общей производительности домена. Простой экспандер (simple expander) не имеет собственных идентификаторов SCSI, и для портов инициаторов и ЦУ, расположенных в разных шинах, он полностью прозрачен. Экспандер не является источником запросов арбитража или сообще-
246 Глава 10. Параллельные шины SCSI ний. Экспандер может быть подключен к шине в любом месте, допустимом для подключения обычного устройства. Для большинства сигнальных линий экспан- дер выполняет лишь ретрансляцию с учетом шинного протокола, внося свою лепту в общую задержку распространения сигналов. Сигнал RST# с любой сто- роны транслируется на противоположную независимо от остальных сигналов на любой стороне. Экспандер не объединяет линии TermPwr со своих противопо- ложных сторон и не связывает (электрически или логически) сигналы DiffSens. При смене режима приемопередатчиков (LVD/SE) на одном сегменте экспандер вызывает сброс (RST#) противоположного сегмента. Коммуникативный экспандер (communicative expander) обеспечивает допол- нительные возможности, предоставляемые поддерживаемым им протоколом ECP (Expander Communication Protocol — коммуникационный протокол экс- пандеров): ♦ предоставление инициатору возможности определения топологии домена (местоположения экспандеров) и адресации экспандеров; ♦ управление параметрами (margin control) портов экспандера; ♦ поддержка многопортовых экспандеров и селективное управление (разреше- ние-запрет работы) дальними портами; ♦ сообщение сохраненных тренировочных параметров (для режима расе); ♦ сообщение возможностей экспандера. Коммуникативный экспандер после шинного сброса работает как простой экс- пандер до тех пор, пока инициатор не разрешит выполнение протокола ЕСР. Впоследствии инициатор может запретить выполнение протокола ЕСР. При построении SCSI-домена с использованием экспандеров должны выпол- няться определенные правила. ♦ Каждый сегмент шины должен удовлетворять требованиям к шине (длина, число устройств, характеристики кабеля и т. п.) и иметь терминаторы на обо- их концах. ♦ Если два шинных сегмента соединяются с помощью экспандера или промежу- точного сегмента (с парой экспандеров), то эта связующая часть должна под- держивать режим передачи не хуже, чем максимальный общедоступный для этой пары сегментов. К режимам передачи относятся скорость и разрядность. ♦ Максимальная задержка распространения сигнала между парой устройств в домене не должна превышать 400 нс. ♦ Число устройств в домене не должно превышать предела адресации (8 уст- ройств при наличии «узких» шин или устройств, 16 — при их отсутствии). ♦ Петлевые соединения недопустимы. Примеры вариантов топологии домена приведены на рис. 10.14. Из второго пра- вила следует, что у гетерогенного домена должно быть мощное ядро, а пониже- ние режима (монотонное) разрешается только в сторону периферии. В ошибоч- ной конфигурации, приведенной на рис. 10.14, в, это правило нарушено.
10.5. Экспандеры 247 Е Массив устройств Рис. 10.14. Примеры топологий SCSI-доменов с использованием экспандеров: а, б — правильные, в — неправильная Коммуникационный протокол экспандеров Коммуникационный протокол экспандеров (ЕСР) основан на возможности экс- пандера отслеживать и перехватывать данные команд Read Buffer и Write Buffer. При этом для общения с экспандером от него не требуется быть полноправным SCSI-устройством, имеющим собственный идентификатор (дефицитный ресурс на параллельной шине SCSI). Каждый инициатор может разрешать/запрещать протокол ЕСР для себя, при этом подачей одной команды Write Buffer он управ- ляет всеми экспандерами домена. Другой инициатор, чтобы воспользоваться про- токолом ЕСР, должен сам посылать эти команды. Разрешив работу ЕСР для себя, инициатор отвечает за содержимое начальных байтов данных посылаемых им команд Write Buffer — совпадение ключевых полей в них будет вызывать соот- ветствующие действия протокола ЕСР независимо от того, как на данную ко- манду ответит ЦУ, к которому формально послана данная команда. Для работы ЕСР инициатор посылает команды Read Buffer и Write Buffer раз- личным целевым устройствам (не экспандерам!); в сообщении Identify бит DiscPriv=O запрещает целевому устройству отсоединение. В поле Mode командно- го блока могут указываться следующие значения: ♦ 1АЬ — разрешение протокола ЕСР и включение эхо-буфера; ♦ 02h — режим данных; ♦ OAh — эхо-буфер; ♦ IBh — запрет протокола ЕСР (только для Write Buffer). В блоке данных, посылаемых в командах Write Buffer и Read Buffer, первые 16 байт представляют собой ЕСР-заголовок: ♦ 7-байтная сигнатура (В7 3384 В850 8F27h); ♦ байт с адресом инициатора (должен совпадать с идентификатором порта, с которого посылалась данная команда); ♦ байт кода функции экспандера и данные, относящиеся к этой функции. За заголовком может следовать один или множество блоков дескрипторов, опи- сывающих выполняемую функцию экспандера. Блоки дескрипторов могут быть
248 Глава 10. Параллельные шины SCSI короткими — SEDB (Short Expander Descriptor Block), длиной 16 байт, или длинными — LEDB (Long Expander Descriptor Block). В первом байте каждого блока дескрипторов имеется бит USED, управляющий использованием этого бло- ка, и 3-битное поле DClass, в котором «расписывается» устройство, установив- шее бит USED (001 — коммуникативный экспандер, 010 — инициатор). Протокол ЕСР позволяет передавать исходящие (outbond) дескрипторы от ини- циатора к экспандерам (для управления ими) и входящие (inbond) дескрипто- ры — ответы экспандеров. Управление экспандерами с помощью исходящих дескрипторов происходит сле- дующим образом. Экспандер проверяет данные, пропускаемые им в команде Write Buffer, и при совпадении сигнатуры и адреса трактует этот блок данных как управляющий для протокола ЕСР (если протокол разрешен). Данные могут со- держать один блок LEDB или серию блоков SEDB. Экспандер транслирует через себя эти блоки, но в первом из блоков с нулевым битом USED он модифицирует первый байт: устанавливает USED=1 и поле D_Class=001. Это позволяет инициато- ру послать в одном блоке данных серию команд, относящихся ко всем экспанде- рам и индивидуально к каждому. Для назначения адресов (Assign Address) инициатор посылает исходящую цепоч- ку SEDB с обнуленными битами USED и различными адресами. Эта посылка про- ходит через цепочку экспандеров, каждый из которых берет себе адрес из своего блока SEDB (помечая его как USED), оставляя другим последующие блоки SEDB. Адрес (7 бит) назначается экспандеру при установленном бите Assign в относя- щемся к нему блоку SEDB (первом с нулевым битом USED). Управление приемопередатчиками (Margin Control) выполняется аналогичным способом (серией исходящих блоков SEDB), в каждом блоке содержатся пара- метры (отклонения) для ближнего (к инициатору) и дальнего портов. При использовании исходящих блоков LEDB (один дескриптор в посылке) дан- ные дескриптора отрабатываются экспандером, назначенный адрес которого сов- падает с адресом, указанным в LEDB, и получившим LEDB с нулевым битом USED. Этот экспандер при трансляции блока устанавливает бит USED и подписывается в поле D Class. Исходящие блоки LEDB используются для функций управления (Control): разрешения, запрета или сброса указанного дальнего порта. Получение ответов от экспандеров несколько сложнее, чем исходящее управление. Для получения ответа через экспандер должны пройти данные команды Read Buffer, посылаемые целевым устройством. В этих данных должен присутство- вать заголовок (сигнатура, адрес и команда), а за ним — пустые «контейнеры» — цепочка блоков SEDB или LEDB с нулевыми битами USED, в которые экспандеры будут помещать ответы. Чтобы послать эти данные, инициатор посылает целево- му устройству команду Write Buffer с соответствующим подготовленным блоком данных. Код команды экспандера 80-FFh в этом блоке для экспандеров означа- ет, что содержимое данных ими меняться не должно. Далее инициатор подает команду Read Buffer, ответом на которую и будет передача этого блока данных. При опросе параметров портов (Margin Report) возвращается блок SEDB со зна- чениями отклонений параметров для дальнего и ближнего портов.
10.6. Подключение устройств к шине 249 При опросе возможностей экспандера {Report Capabilites) возвращаются блоки SEDB, в которых представлены список идентификаторов целевых устройств на дальних портах (два байта с установленными битами, соответствующими обна- руженным идентификаторам целевых устройств), поддерживаемые экспандером параметры синхронного режима и разрядность шины, параметры протокола и чис- ло портов экспандера (за вычетом ближнего). При опросе текущего состояния {Report Current Status) возвращается блок SEDB, в котором указаны режимы приемопередатчиков дальнего и ближнего портов и разрешение предкомпенсации приема и передачи. При опросе экспандера {Expander Inquiry) возвращается 16-байтный блок LEDB с данными, аналогичными сообщаемым по SCSI-команде Inquiry. При запросе инициатор указывает интересующую его страницу. При опросе сохраненных параметров тренировки возвращается 256-байтный блок LEDB с параметрами, относящимися к каждой из линий ближнего порта. Для того чтобы построить карту топологии шин домена, инициатор разрешает протокол ЕСР и выполняет серию опросов возможностей экспандеров, адресуя команды Write Buffer и Read Buffer ко всем возможным целевым устройствам домена (благо их не более 15). Это обеспечивает прохождения данных команды чтения со всех возможных «закоулков» домена, чтобы эти данные прошли через все активные порты всех экспандеров (и экспандеры могли вложить свои сооб- щения в эти потоки данных). В случае обнаружения многопортовых экспандеров (после сброса все их порты разрешены) для того, чтобы разобраться с топологи- ей, можно селективно разрешать/запрещать работу дальних портов. Далее экс- пандерам назначаются адреса, после чего они доступны для любого взаимодейст- вия по протоколу ЕСР. 10.6. Подключение устройств к шине Подключение устройств к шине SCSI относительно несложно, но имеются ню- ансы при объединении разнотипных устройств на одной шине. Пропускная спо- собность шины SCSI, «освоенная» компьютером, определяется, естественно, воз- можностями хост-контроллера. Шина SCSI обеспечивает хорошую совместимость устройств с параллельными интерфейсами разных поколений, «узких» и «широ- ких», но зачастую одно старое устройство способно свести на нет возможности всех новых устройств, подключенных к шине. По типу интерфейса совместимы- ми являются только устройства SE и LVD. ВНИМАНИЕ -------------------------------------------------------- Объединять устройства LVD с HVD на одной шине нельзя! Устройства LVD можно использовать на одной шине с SE, но при этом все уст- ройства перейдут в режим SE и шина не сможет работать в режиме Ultra2, свой- ственном устройствам LVD. Интерфейс LVD, являясь дифференциальным, тре- бует, чтобы каждый обратный провод (сигнал +) приходил на вход своего приемника; в версии SE все обратные провода на устройстве соединяются вместе
250 Глава 10. Параллельные шины SCSI и подключаются к шине GND. Если на шине с устройствами LVD имеется хотя бы одно устройство SE, то линия DIFFSENS оказывается заземленной и все уст- ройства LVD переходят в режим SE. При конфигурировании устройство LVD может быть принудительно переведено в режим SE установкой джампера «Force SE». Если на шине присутствуют устройства Ultral60 и Ultra2 (или еще ниже), то шина работает в самом низком из этих режимов. Принудительно запретить ре- жим Ultral60 (понизить до Ultra2) можно джампером «Disable U160». Подключение «узкого» устройства к «узкой» шине — самая простая задача, по- скольку здесь обычно встречаются лишь два типа разъемов (не считая Mac SCSI) — внешний (типа Centronics) и внутренний. Устройства должны быть сконфигу- рированы (см. далее), каждому должен быть назначен уникальный (на шине) идентификатор SCSI ID (формально — любой в диапазоне 0-7). Длина шины не должна превышать допустимого предела, на обоих концах шины (и только там!) должны быть установлены и включены терминаторы. На линию TERMPWR долж- но подаваться питание (чаще от хост-адаптера), что можно проверить, замерив напряжение на соответствующих контактах разъема. Подключение «широкого» устройства к «широкой» шине может оказаться несколь- ко сложнее, поскольку здесь больше разнообразия в разъемах. Из-за этого может потребоваться применение переходных адаптеров от одного типа разъема к дру- гому. Также могут возникнуть сложности с подключением терминаторов, осо- бенно для устройств LVD, среди которых внутренние терминаторы встречаются редко, а внешние могут занимать отдельный разъем на кабеле. Идентификаторы устройств можно задавать в диапазоне 0-15. Подключение «узкого» устройства к «широкой» шине требует применения пере- ходного адаптера с 68- на 50-контактный разъем. Старший байт в этом адаптере не должен терминироваться, если подключаемое устройство не крайнее на шине. Если же устройство крайнее, то в адаптере старший байт должен терминировать- ся и на самом устройстве должен быть установлен терминатор. Выбор положе- ния устройства (крайнее или промежуточное) может определяться имеющимся адаптером. Идентификаторы устройств должны устанавливаться в диапазоне 0-7 для всех устройств, поскольку невидимость идентификаторов 8-15 узким уст- ройством не позволит процедуре арбитража работать нормально (см. ранее). По- скольку все «узкие» устройства — это устройства SE, линия DIFFSENS окажется заземленной и все устройства LVD перейдут в режим SE. Существуют, однако, и адаптеры-мосты, при подключении устройства SE позволяющие остальным находиться в режиме LVD. Определить режим можно, замерив напряжение на 16-м контакте 68-контактного разъема (46-м 80-контактного) относительно об- щего провода (см. табл. 10.2). Подключение «широкого» устройства к «узкой» шине также требует применения специального адаптера, и на «широком» устройстве следует установить джампер «Disable Wide». Дополнительно может потребоваться терминация старшего бай- та и относящихся к нему управляющих линий, чтобы обеспечить на них надеж- ное пассивное состояние («висящие» входы восприимчивы к помехам). Некото- рые версии встроенного микропрограммного обеспечения позволяют работать
10.6. Подключение устройств к шине 251 устройствам и без дополнительных терминаторов. Идентификаторы всех уст- ройств должны быть в диапазоне 0-7 (по тем же соображениям, что и в преды- дущем случае). Рассмотрим различные конфигурации подключения устройств к контроллеру SCSI (рис. 10.15). Контроллер может быть расположен на карте расширения, устанав- ливаемой в слот PCI или ISA, или же встроен в системную плату. Подключае- мые к нему устройства могут быть как внутренними (разного рода дисковые и ленточные устройства), так и внешними (те же, а также сканеры и другие пери- ферийные устройства). Теминаторы расставляются, исходя из конкретных усло- вий. Рис. 10.15. Подключение устройств к карте контроллера SCSI: а, в, г — правильно, б — неправильно Правила подключения довольно просты: ♦ концы кабельного шлейфа не должны висеть в воздухе (как на рис. 10.15, б); ♦ на устройствах, подключенных к концам шлейфа, должны быть включены внут- ренние терминаторы (на рисунке обозначено как TRM=ON) или же установ- лен внешний терминатор (рис. 10.15, г); ♦ на промежуточных устройствах терминаторы должны быть отключены (TRM= OFF). Если контроллер SCSI смонтирован на дополнительной интерфейсной карте, то разъем, к которому подключаются внешние устройства, располагается достаточ- но близко к внутреннему, так что длинной линии между ними нет. В этом случае терминация внешнего разъема хлопот не доставляет: когда используется только внутреннее (рис. 10.15, а) или только внешнее (рис. 10.15, г) подключение, тер- минатор на контроллере включают. Когда используется и внешнее, и внутреннее подключение (рис. 10.15, в), терминатор на контроллере отключают.
252 Глава 10. Параллельные шины SCSI Если используется внутреннее подключение, а внешние устройства подключа- ются не все время, то приходится переключать терминатор контроллера в соот- ветствии с текущей конфигурацией. В старых контроллерах приходилось вскры- вать системный блок и переставлять джамперы. В новых контроллерах вскрытия не требуется — терминаторы включаются/отключаются программно (утилитой SCSI Setup) или даже автоматически. Если по какой-либо причине переключать терминатор контроллера не хочется, можно его отключить и пользоваться внёш- ним, устанавливая его на внешний разъем (снаружи корпуса компьютера), когда внешние устройства не подключены. Когда контроллер SCSI установлен на системной плате, он имеет только один разъем, к которому подключается кабель-шлейф. Если требуется только внут- реннее или только внешнее подключение (рис. 10.16, а и б), то терминатор на контроллере включают. Если используются и внутреннее, и внешнее подключе- ния (рис. 10.16, в), терминатор на контроллере отключают. Если используется универсальный кабель-шлейф с внутренними и внешним разъемами (как на рис. 10.16, в), но внешних устройств нет, то терминатор на контроллере должен быть отключен, а на внешнем разъеме должен быть установлен внешний терми- натор. в Рис. 10.16. Подключение устройств к интегрированному контроллеру SCSI Кабели и терминаторы могут входить в комплект адаптеров SCSI или системных плат со встроенным контроллером SCSI, а могут приобретаться отдельно. То, что входит в стандартный комплект поставки, не всегда подходит для конкрет- ного применения.
10.6. Подключение устройств к шине 253 Контроллеры Wide SCSI обычно имеют разъемы для подключения обычных («уз- ких») устройств. Узкий (8-разрядный) интерфейс можно рассматривать как под- множество широкого (16-разрядного), у которого задействована только младшая половина шины данных. В простых одноканальных контроллерах контакты уз- кого разъема запараллелены с частью контактов широкого. При этом можно ис- пользовать смесь широких и узких устройств, для чего терминаторы на контрол- лере разделены на две половины: терминаторами младшего (TrmL) и старшего байтов (ТгшН) можно управлять независимо. На рис. 10.17, а и б приведены корректные варианты смешанного подключения (устройства с терминаторами на концах шлейфов подразумеваются). На рис. 10.17, в приведена некорректная схема — здесь в младшем байте и в сигналах управления оказываются три терми- натора (перегрузка передатчиков) или «висячий» конец (отражения!). в Рис. 10.17. Подключение узких и широких устройств SCSI: а, б — правильно, в — неправильно Если следовать вышеприведенным правилам (и не превышать разрешенную дли- ну и число подключений), то при исправном оборудовании шина SCSI будет ра- ботать надежно, как ей и полагается. Если правила нарушать, то возможны вари- анты. Есть определенные модели контроллеров и устройств, для которых мелкие «шалости» с терминаторами сойдут с рук. Так, например, может быть прощен (или почти прощен) висящий конец без терминатора (если он не очень длин- ный). Устройства могут работать (ОС будет загружаться, диски читаться), но, возможно, с не всегда заметными сбоями. Правда, если используется ОС Win- dows NT/XP/200x, то, заглянув в журнал регистрации событий (event log), можно увидеть «букет» красных фонариков, связанных с устройствами SCSI. «Пышность» этого букета будет зависеть от тяжести нарушений и «норова»
254 Глава 10. Параллельные шины SCSI используемых устройств. Есть модели, придерживающиеся «строгих правил», и при нарушении терминации устройства вообще откажутся работать. Как по- ступать в каждом конкретном случае, наверное, дело инсталлятора — на «лиш- ний» терминатор или кабель другой конфигурации может просто не хватить де- нег. Но теория, увы, такова. 10.7. Конфигурирование устройств Все устройства на шине должны быть согласованно сконфигурированы. Для них требуется программно или с помощью джамперов установить перечисленные ниже основные параметры. ♦ Идентификатор устройства (SCSI ID) — адрес 0-7 (для Wide SCSI 0-15), уникальный для каждого устройства на шине и определяющий его приоритет: самый низший приоритет имеют устройства с адресом 7, самый высший — с адресом 8 (для 8-битной шины — с адресом 0, см. 10.2). Обычно хост-адап- теру назначается адрес 15 (или 7, если есть 8-битные устройства). Позиционный код, используемый для адресации, обеспечивает совместимость адреса- ции 8- и 16-битных устройств на одной шине. Ряд версий BIOS считает за- грузочным только устройство с SCSI ID=0. ♦ Контроль четности (SCSI Parity). Если хотя бы одно устройство не поддер- живает контроль четности, он должен быть отключен для всех устройств на шине. Контроль четности, особенно для дисковых устройств, является необ- ходимым средством защиты от искажения данных при передаче по шине. В высокоскоростных режимах используется более эффективный CRC-кон- троль. ♦ Включение терминаторов (Termination). В современных устройствах приме- няются активные терминаторы, которые могут включаться одним джампером или программно-управляемым сигналом. Терминаторы должны включаться только на крайних устройствах в цепочке. Современные хост-адаптеры по- зволяют автоматически включать свой терминатор, если они являются край- ними, и отключать, если используются внутренний и внешний разъемы кана- ла. Это позволяет подключать и отключать внешние устройства, не заботясь о переключении терминаторов. Ранее приходилось открывать корпус и пере- ставлять джампер, а пассивные терминаторы устанавливать в специальные гнезда (и извлекать их оттуда). При отсутствии внутренних терминаторов пользователь был вынужден применять внешние, устанавливаемые на кабель. ВНИМАНИЕ ----------------------------------------------------- Правильная установка терминаторов крайне существенна — отсутствие/избыток терминато- ров может привести к неустойчивости или неработоспособности интерфейса. ♦ Питание терминаторов (Terminator power) должно быть включено (джампе- ром или программно) хотя бы на одном устройстве. ♦ Согласование скорости синхронного обмена (SCSI synchronous negotiation). Режим синхронного обмена, обеспечивающий высокую производительность,
10.7. Конфигурирование устройств 255 включается по взаимному согласию устройств. Если хотя бы одно устройство на шине его не поддерживает1, рекомендуют запретить согласование на хост- адаптере. Если обмен будет инициирован целевым устройством, поддержива- ющим синхронный режим, «нормальный» хост-адаптер поддержит этот ре- жим. Целевому устройству можно запретить запрос синхронного режима спе- циальным джампером, который может называться «Enable TI-SDTR» (Target Initiated Synchronous Data Transfer Request Negotiation). ♦ Разрешение отключения (Enable disconnection). Позволяет устройствам отклю- чаться от шины при неготовности данных во время длительных операций с носителем, что может быть весьма эффективно в многозадачном режиме при нескольких ПУ на шине. В случае одного устройства отключение приводит только к дополнительным затратам времени на повторное соединение. ♦ Согласование ширины шины данных тоже выполняется по протоколу шины, исходя из возможностей обоих участников обмена. Целевому устройству можно запретить запрос 16-битного режима специальным джампером, который мо- жет называться «Enable TI-WDTR» (Target Initiated Wide Data Transfer Request Negotiation). ♦ Запрет 16-разрядного режима (Disable wide). Позволяет подключить «широ- кое» устройство к «узкой» шине. ♦ Принудительное переключение в линейный режим (Force SE). Позволяет пере- вести устройство LVD в режим SE независимо от состояния линии DIFFSENS. ♦ Запрет двойной синхронизации (Disable U160). Позволяет принудительно пе- ревести устройство Ultra3 SCSI в режим Ultra2. ♦ Старт по команде (Start on command), или запрет автоматического запуска шпиндельного двигателя (Disable Auto Spin up). При установке этого парамет- ра запуск двигателя устройства выполняется только по команде от хост-адап- тера, что позволяет снизить пик нагрузки блока питания в момент включе- ния. Хост будет запускать устройства последовательно. ♦ Задержанный старт (Delayed Start) в сочетании с джамперами выбора за- держки позволяет автоматически запускать двигатель через указанный ин- тервал после подачи питания (разным устройствам задают различные значе- ния задержки). 1 Относится к старым устройствам.
ГЛАВА 11 Последовательный интерфейс для подключения устройств SCSI — SAS Интерфейс SAS (Serial Attached SCSI — последовательный интерфейс для под- ключения устройств SCSI) разработан на основе физического интерфейса Serial АТА. Архитектура SAS позволяет использовать одни и те же интерфейсные средства связи для подключения как устройств SCSI, так и устройств Serial АТА. Для подключения устройств SAS к компьютеру служит хост-адаптер — SAS НВА, к которому можно подключать как устройства SAS, так и устройства SATA — их физические интерфейсы совместимы. Устройства SAS предназначены для исполь- зования в системах хранения данных предприятий (Enterprise-class), они имеют одно- или двухпортовые интерфейсы. Устройства SATA (только однопортовые) предназначены для настольных систем, они дешевле устройств SAS. По схемо- технике и встроенному ПО (firmware) устройства SAS близки к устройствам Fibre Channel (двухпортовым), применяемым в сетях хранения данных (Storage Area Network, SAN) масштабов предприятия. В SAS используется три транспортных протокола: ♦ SSP (Serial SCSI Protocol): поддержка устройств SAS — дисковых, ленточ- ных и иных устройств SCSI с последовательным интерфейсом; ♦ STP (Serial АТА Tunneling Protocol): организация туннелей для взаимодейст- вия с дисковыми устройствами Serial АТА1; ♦ SMP (Serial Management Protocol): управление экспандерами SAS — интер- фейсными устройствами, обеспечивающими связь целевых устройств и ини- циаторов с последовательным интерфейсом. При прямом подключении к хост-адаптеру (рис. 11.1, а) устройства SAS и SATA взаимодействуют с хостом по своим транспортным протоколам (SSP и «родной» 1 Возможно, поддерживаются и устройства ATAPI, хотя двойное преобразование протоко- лов вряд ли целесообразно.
11.1. Устройства, порты и соединения SAS 257 протокол SATA соответственно). Для подключения могут использоваться и уст- ройства-экспандеры (рис. 11.1, б), при этом число подключаемых устройств мо- жет превышать число портов хост-адаптера. Если устройство SATA подключает- ся к экспандеру, то для связи с ним применяется протокол STP. SAS SATA Устройства SATA Устройства SAS б Рис. 11.1. Подключение устройств SAS и SATA к хост-адаптеру: а — прямое, б — через экспандер 11.1. Устройства, порты и соединения SAS Подключение устройства SAS обеспечивает трансивер Phy — приемник и пере- датчик последовательного интерфейса. Приемник и передатчик работают на одинаковых скоростях (первое поколение интерфейса, G1 — 1,5 Гбит/с, второе, G2 — 3 Гбит/с), прием и передача идут независимо друг от друга (полный дуп- лекс). Каждый трансивер в устройстве имеет собственный идентификатор (но- мер). Устройства SAS содержат порты. Порт — это группа трансиверов (от 1 до 128) с одинаковыми SAS-адресами, подключенных к еще одной группе трансиверов с одинаковыми (но другими) SAS-адресами. «Узкий» (narrow) порт содержит один трансивер, «широкий» — два и более. Порты определяются (конфигурируются) на этапе инициализации устройства. SAS-адрес — это глобально уникальный 64-битный идентификатор, который при- сваивается каждому SAS-порту и каждому SAS-экспандеру. Его формат совпадает с именем порта (PortName) Fibre Channel: 4-битный признак NAA (5h), 24-бит- ный идентификатор производителя (по IEEE) и 36-битный идентификатор, на- значенный производителем. В SAS определено два класса устройств: конечные устройства (end device) и уст- ройства-экспандеры (expander device). Конечные устройства — это устройства SAS, являющиеся инициаторами или/и целевыми устройствами SCSI (или SATA).
258 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Примером конечного устройства является SAS-диск, у которого два трансивера всегда имеют отдельные SAS-адреса — устройство двухпортовое (для диска «ши- рокий» порт не требуется). Другой пример — хост-адаптер, содержащий 8 трансиверов, в котором возможны разные варианты конфигурации: ♦ один SAS-адрес на все трансиверы — это адаптер с одним, потенциально «очень широким» портом; ♦ два SAS-адреса, каждый на группу из четырех трансиверов — двухпортовый адаптер (удобен для подключения кабелями четырех трансиверов); ♦ восемь SAS-адресов — восьмипортовый адаптер, к которому можно подклю- чить до 8 устройств SAS и SATA. Устройства -экспандеры служат для объединения конечных устройств в слож- ных конфигурациях. Экспандер имеет собственный SAS-адрес для управления его функциями по протоколу SMP. Экспандер может содержать и внутренние устройства SAS (со своими SAS-адресами), подключаемые к его портам с вирту- альными трансиверами. Эти устройства, например, могут использоваться для управления блоком (питание, климат, защита и т. п.). Каждый трансивер экспан- дера имеет собственный идентификатор (номер), уникальный в пределах экспан- дера. Порты экспандера могут использоваться для подключения инициаторов и целевых устройств SAS, а также для подключения других экспандеров. По этим портам будут передаваться кадры любых протоколов (SSP, STP, SMP). Экспан- дер может (необязательно) содержать мосты STP/SATA (один или несколько), позволяющие к портам экспандера («узким») подключать устройства SATA. По этим портам будут передаваться только кадры SATA. Для выполнения задания SCSI (подачи команды, передачи данных и сообщения состояния) необходимо установить SSP-соединение (SSP-connection) — времен- ную связь между трансиверами инициатора и целевого устройства. Соединения устанавливаются также и для обмена с устройствами SATA (STP-соединение), и для управления экспандерами (SMP-соединения). Установление соединения — характерная черта SAS, обусловленная идеологией SCSI. В SATA понятие со- единения отсутствует. Для установления соединения устройство посылает запрос, указав SAS-адрес желаемого партнера. Экспандеры, выполняя маршрутизацию запроса, проклады- вают путь (pathway) — определяют набор физических связей (links) между ини- циатором и целевым устройством соединения. Этот путь сохраняется до закры- тия (или разрыва) соединения и по нему передаются кадры и примитивы, как по выделенному двухточечному соединению со скоростью, доступной всем участ- кам пути. Соединения адресуются к портам, но устанавливаются между трансиверами. «Широкий» порт (с N Phy) может устанавливать соединения одновременно с N различными портами. Два «широких» порта могут устанавливать друг с дру- гом до N соединений. SAS-диски всегда представлены парой «узких» портов, «широкие» порты имеют только хост-адаптеры и RAID-контроллеры.
11.2. Топология домена и маршрутизация 259 11.2. Топология домена и маршрутизация SAS-домен в простейшем случае состоит из непосредственно соединенных друг с другом порта инициатора SSP и порта целевого устройства SSP. Если исполь- зуются экспандеры, то в домене появляются еще и порты инициаторов и целе- вых устройств протокола SMP, необходимые для конфигурирования домена (экспандеров). Если используются и устройства SATA, то, соответственно, появ- ляются порты инициаторов и целевые устройства STP. Возможны сложные кон- фигурации с несколькими доменами (рис. 11.2). Рис. 11.2. Логическая структура доменов SAS: а — простейшая двухточечная, б — с экспандерами, в — с разделяемыми устройствами (инициатором и ЦУ) Экспандеры по назначению разделяются на два типа: ♦ из Е-экспандеров (Edge expander) собираются наборы Е-экспандеров (edge expander device set), обеспечивающие подключение конечных устройств; ♦ F-экспандеры (Fanout expander) служат для объединения множества наборов Е-экспандеров и конечных устройств. Набор Е-экспандеров представляет собой древовидную структуру экспандеров. Набор может вырождаться и в один экспандер. Каждый набор может содержать до 128 SAS-адресов (устройств-экспандеров и портов конечных устройств). В одном SAS-домене может присутствовать не более одного F-экспандера, с помо- щью которого объединяется до 128 наборов. Если F-экспандеров нет, то в домен может объединяться не более двух наборов. Конечные устройства могут подключаться на любом уровне: и к F-экспандерам, и к Е-экспандерам (рис. 11.3). Между любыми устройствами (и конечными, и экспандерами) возможны соединения «широкими» интерфейсами, петлевые соединения запрещены, множественные пути отсутствуют. Маршрутизацию в SAS-домене обеспечивают экспандеры. Маршрутизация вы- полняется при установлении соединений (SSP, STP или SMP), внутри соедине- ния обмен между инициатором и целевым устройством происходит по проло- женному маршруту.
260 Глава 11. Последовательный интерфейс для устройств SCSI — SAS F-экспандер Набор экспандеров Е-экспандер Е-экспандер ==!....... Набор экспандеров (до 128 SAS-адресов) Рис. 11.3. SAS-домен _____1______ | Набор : экспандеров (до 128 i SAS-адресов) j Приняв запрос соединения с какого-то трансивера (кадр OPEN), экспандер по SAS-адресу назначения, содержащемуся в этом кадре, ищет свой трансивер, в ко- торый можно послать данный запрос. Для каждого трансивера экспандера известны SAS-адрес, тип и допустимая скорость подключенного устройства (эта информация получается на этапе идентификации, завершающем инициализа- цию физического интерфейса). Каждый трансивер экспандера имеет атрибут, определяющий метод маршрутизации запросов (routing attribute): ♦ Direct — прямая маршрутизация. В этот трансивер посылаются запросы с SAS- адресом, совпадающим с адресом подключенного устройства. Этот атрибут применяется только при подключении к трансиверу конечного устройства. Если к трансиверу с таким атрибутом подключен экспандер, то через данный трансивер будет доступен только сам экспандер (по его SAS-адресу), но ни- как не подключенные к нему другие устройства. ♦ Table — табличная маршрутизация. Через трансивер посылаются запросы с SAS-адресами, найденными в таблице маршрутизации этого трансивера, а также с SAS-адресом устройства, подключенного к данному порту. ♦ Subtractive — субтрактивная маршрутизация. Через трансивер посылаются все запросы с адресами, для которых не найдена запись в таблице маршрути- зации, плюс запросы с SAS-адресом устройства, подключенного к данному порту. Атрибуты Table и Subtractive действуют, только когда к трансиверу подключен другой экспандер; когда к нему подключено конечное устройство, применяется только прямая маршрутизация (как при атрибуте Direct). Таблица маршрутизации экспандера (expander route table) для каждого транси- вера экспандера содержит ряд записей, в каждой из которых указываются SAS- адрес, доступный через этот трансивер, и бит разрешения использования (дейст- вительности) данной записи. Просмотром таблицы для каждого SAS-адреса оп- ределяются те трансиверы, на которые должны посылаться запросы с указанным адресом. Если таблица не дает ни одного трансивера, то запрос посылается в суб- трактивный порт. Субтрактивная маршрутизация используется только в Е-экспандерах, являю- щихся частью набора Е-экспандеров. Экспандер может иметь только один субтрактивный порт (набор из одного или нескольких трансиверов, к которым
11.4. Физический уровень SAS 261 подключены трансиверы с одинаковыми SAS-адресами). В наборе трансивер с субтрактивной маршрутизацией может подключаться только к трансиверу дру- гого экспандера, для которого установлен атрибут табличной маршрутизации. В Е-экспандерах различают нисходящие трансиверы (downstream Phy), исполь- зующие прямую и табличную маршрутизацию, и восходящие трансиверы (upstream Phy), использующие субтрактивную маршрутизацию. На границе набора может находиться корневой экспандер, восходящий (субтрактивный) порт которого подключается к F-экспандеру или к другому набору Е-экспандеров. F-экспандеры не используют субтрактивную маршрутизацию. Они могут слу- жить средством объединения множества наборов Е-экспандеров и обычно под- держивают большие размеры таблиц для табличной маршрутизации. 11.3. Архитектурная модель SAS Архитектурная модель SAS состоит из нескольких уровней: ♦ Физический уровень (physical layer) определяет коннекторы, кабели и элек- трические параметры приемопередатчиков. ♦ Phy-уровень (Phy layer) определяет последовательную передачу данных (ко- дирование 8В/10В) и специальную «внеполосную» (ООВ) сигнализацию для служебных целей. ♦ Канальный уровень (link layer) определяет примитивы, адресные кадры и со- единения. На канальном уровне решаются задачи идентификации подклю- ченных устройств, выполнения их сброса, управления соединениями. Для каждого протокола (SSP, STP и SMP) канальный уровень определяет свои правила обмена кадрами и примитивами. ♦ Уровень порта (port layer) является прослойкой между канальным и транспорт- ным уровнями, обеспечивающей установление и разрыв соединений в портах. ♦ Транспортный уровень (transport layer) определяет структуры кадров и транс- портные сервисы для протоколов SSP, STP и SMP. ♦ Прикладной уровень (application layer) для протокола SSP определяет проце- дуры выполнения команд SCSI согласно архитектурной модели SCSI (SAM). Для протокола SMP прикладной уровень определяет функции, необходимые для идентификации устройств, определения топологии домена и управления экспандерами. Для протокола STP прикладной уровень SAS не вводит каких- либо особенностей по сравнению с SATA. 11.4. Физический уровень SAS Физический уровень (physical layer) SAS определяет коннекторы и кабели, а также электрические спецификации приемопередатчиков. Эти спецификации совмес- тимы с SATA, но отличаются в некоторых деталях. В SATA характеристики пе- редатчиков и кабелей косвенно определяют характеристики приемников; в SAS требования к приемникам заданы явно. В SATA допускается связь между уст- ройствами как по постоянному, так и по переменному току; в приемнике SAS
262 Глава 11. Последовательный интерфейс для устройств SCSI — SAS должны присутствовать разделительные конденсаторы (в передатчике — необя* зательно), так что связь только по переменному току. В SATA возможно приме- нение синхронизации с расширением спектра (SSC, см. 5.3), в SAS расширение спектра не применяется. Для SAS используются кабели с волновым сопротивлением 100 Ом, в качестве трансиверов используются те же компоненты, что и для современных последова- тельных интерфейсов Fibre Channel, Gigabit Ethernet, XAUI, InfiniBand, 1394b, PCI Express. По сравнению c SATA в SAS могут использоваться более длинные кабели (до 3 м для скорости 1,5 Гбит/с). За основу разъема для внутреннего исполнения (рис. 11.4, а, табл. 11.1) взят кон- нектор Serial АТА, в котором в сигнальной секции добавлены контакты для вто- ричного физического интерфейса (secondary physical link). В питающей секции резервный (в SATA) контакт Р11 использован для индикации готовности уст- ройства — выход с открытым коллектором (стоком), обеспечивающий ток до 15 мА. Соединительные кабели могут содержать один или два физических ин- терфейса. Определен и разъем кросс-шины для непосредственного подключения устройств SAS с двумя физическими интерфейсами (устройства SATA с этим разъемом несовместимы из-за отсутствия у них контактов вторичного интерфейса). Внутренние разъемы 2х (вилки на устройствах и розетки для кросс-плат), а так- же разъемы для внутренних кабелей (1х и 2х) определены в стандарте SFF-8482. S1 S7 Р1 Р15 “fl S8 S14 а б Рис. 11.4. Разъемы устройств SAS: а — внутренний, б — внешний Таблица 11.1. Разъем устройства SAS Контакт Цепь Назначение S1 GND Экран S2 RP+ Дифференциальный вход первичного трансивера S3 RP- S4 GND Экран S5 TP- Дифференциальный выход первичного трансивера S6 TP+ S7 GND Экран S8 GND Экран
11.4. Физический уровень SAS 263 Контакт Цепь Назначение S9 RS+ Дифференциальный вход вторичного трансивера S10 RS- S11 GND Экран S12 TS- Дифференциальный выход вторичного трансивера S13 TS+ S14 GND Экран L-образное тело сигнального разъема Свободное пространство L-образное тело питающего разъема Р1 V33 Питание 3,3 В Р2 V33 Питание 3,3 В РЗ V33 Питание 3,3 В, предзаряд Р4 GND Общий Р5 GND Общий Р6 GND Общий Р7 V5 Питание 5 В, предзаряд Р8 V5 Питание 5 В Р9 V5 Питание 5 В РЮ GND Общий Р11 Ready LED Светодиодный индикатор готовности/активности Р12 GND Общий Р13 V12 Питание 12 В, предзаряд Р14 V12 Питание 12В Р15 V12 Питание 12В Для SAS-1.1 фирма HP предлагает использовать внутренний четырехпортовый коннектор (табл. 11.2), на котором питание и индикация не предусмотрены, но введены контакты для дополнительных интерфейсов. Этот тип разъемов опреде- лен в стандарте SFF-8484. Для внешних соединений в SAS приняты четырехканальные кабели и разъемы (рис. 11.4, б, табл. 11.3), у которых сигналы сгруппированы по направлениям (группа входов и группа выходов), питание и индикация не предусмотрены. Ро- зетки и вилки определены в стандарте SFF-8470.
264 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Таблица 11.2. «Широкий» разъем устройства SAS Контакт Цепь Назначение S1 ТхО+ Дифференциальный выход трансивера Phy 0 S2 ТхО- S3 RxO- Дифференциальный вход трансивера Phy 0 S4 RxO+ S5 Тх1 + Дифференциальный выход трансивера Phy 1 S6 Тх1- S7 Rx1- Дифференциальный вход трансивера Phy 1 S8 Rx1 + SB0 Sideband Сигналы, не относящиеся к интерфейсу SAS (12С или другие, на усмотрение разработчика) SB1 Sideband SB2 Sideband SB3 Sideband S9 Tx2+ Дифференциальный выход трансивера Phy 2 S10 Tx2- S11 Rx2- Дифференциальный вход трансивера Phy 2 S12 Rx2+ S13 Tx3+ Дифференциальный выход трансивера Phy 3 S14 Tx3- S15 Rx3- Дифференциальный вход трансивера Phy 3 S16 Rx3+ Таблица 11.3. Внешний разъем SAS (4х) Контакт Цепь Назначение S1 RxO+ Дифференциальный вход трансивера Phy 0 S2 RxO- S3 Rx1 + Дифференциальный вход трансивера Phy 1 S4 Rx1- S5 Rx2+ Дифференциальный вход трансивера Phy 2 S6 Rx2- S7 Rx3+ Дифференциальный вход трансивера Phy 3 S8 Rx3-
11.5. Phy-уровень SAS 265 Контакт Цепь Назначение S9 ТхЗ- Дифференциальный выход трансивера Phy 3 S10 ТхЗ+ S11 Тх2- Дифференциальный выход трансивера Phy 2 S12 Тх2+ S13 Тх1- Дифференциальный выход трансивера Phy 1 S14 Тх1 + S15 ТхО- Дифференциальный выход трансивера Phy 0 S16 Тх0+ 11.5. Phy-уровень SAS Phy-уровень, расположенный «этажом» выше физического, определяет логиче- ское кодирование (8В10В), «внеполосную» (ООВ) сигнализацию и согласова- ние скоростей. Для избыточного кодирования используется метод 8В10В, применяемый во мно- гих современных технологиях передачи данных. Все передачи организуются в виде двойных слов, которые могут быть двойными словами данных (data dword), примитивами (primitive) или недействительными. Двойные слова данных содержат только символы, кодирующие байты данных; примитивы начинаются с управ- ляющих символов К28.3, К28.5 или К28.6, за которыми следует три символа данных. Остальные двойные слова являются недействительными (как и слова с ошибочными символами или с некорректным диспаритетом, которые позволяет выявить кодирование 8В/10В). В SAS имеет место порядок Big Endian (в двой- ном слове старший байт передается первым), в SATA — Little Endian, этот же по- рядок используется при туннелировании SATA через SAS (в протоколе STP). При внеполосной (Out Of Band, ООВ) сигнализации пачки примитивов ALIGN(0) передаются с паузами, во время которых передается нулевой дифференциальный сигнал или дифференциальное состояние не меняется. ООВ-сигналы восприни- маются аналоговыми схемами приемников (нас интересует огибающая сигнала), информативна длительность пауз, по которым различают сигналы COMINIT, COMWAKE и COMS AS (табл. 11.4). Длительность сигналов задается числом би- товых интервалов на базовой скорости (OOBI, 0,666 нс). Каждый ООВ-сигнал представляет собой шесть пар пауз/пачек, после которых сигнал снимается на определенное время. Приемник распознает ООВ-сигналы по длительностям пауз. Для обнаружения сигнала он должен принять хотя бы четыре пары пауз/пачек и выжидать указан- ное время снятия, прежде чем пытаться распознавать следующие сигналы. Внеполосная сигнализация используется для обнаружения фактов подключения устройств и определения типа (SAS или SATA), а также для согласования скоро- сти интерфейса.
266 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Таблица 11.4. Передаваемые ООВ-сигналы Сигнал Длительность пач- ки, нс (OOBI) Длительность пау- зы, нс (OOBI) Длительность сня- тия, нс (OOBI) COMWAKE 106,7(160) 106,7(160) 280 COMINIT/COMRESET 106,7(160) 320,0 (480) 533,3 (800) COMSAS 106,7(160) 960,0(1440) 1600 (2400) Последовательность сброса Phy (Phy reset sequence) состоит из последователь- ности ООВ-сигналов обнаружения типа подключенного устройства (SAS или SATA) и согласования скорости. После этого канальный уровень (link) для SAS- устройств выполняет идентификацию устройства. Обнаружение факта подключения (рис. 11.5) начинается с подачи сигнала COMINIT и ожидания получения аналогичного сигнала. Приняв сигнал COMINIT, устрой- ство SAS посылает сигнал COMSAS. Получение сигнала COMSAS означает, что партнер — устройство SAS; если за определенное время сигнал COMSAS не по- лучен, это означает, что партнер — устройство SATA. Для этого партнера интер- фейс посылает сигнал COMWAKE — для партнера создается видимость подклю- чения к хост-контроллеру SATA. Данная сигнализация позволяет подключать к SAS только устройства SATA, но не хост-контроллеры (инициатором обмена с устройством SATA может быть только хост-контроллер SAS). COMINIT COMSAS PhyATx PhyB Rx PhyARx PhyB Tx IIIIILJIIIII IIIIII^SlIIII COMINIT COMSAS a COMINIT COMSAS COMWAKE SATA Phy Rx 4ЖН----------H+fH------------ШГ SAS Phy Rx SATA Phy Tx COMINIT Рис. 11.5. Последовательность определения типа подключенного устройства: а — SAS, б — SATA При отсутствии ответа на сигнал COMINIT конечные устройства SAS и экспан- деры реагируют по-разному. Целевое устройство SAS о своем появлении (вклю- чении) объявляет лишь однократно и ждет, когда его обнаружат (оно само не является источником трафика). Устройство-инициатор будет делать попытки обнаружения в произвольные моменты времени по своему желанию, но не чаще, чем через 10 мс после предыдущей попытки. Экспандер повторяет сигналы COMINIT с периодом 500 мс до тех пор, пока не дождется ответа, — от него зави-
11.6. Канальный уровень SAS 267 сит возможность работы инициаторов с целевыми устройствами и он должен прилагать максимальные усилия для установления связи. Такое поведение уст- ройств обеспечивает поддержку «горячего» подключения в SAS. Для согласования скорости с устройством SAS оба трансивера Phy посылают друг другу серию сигналов согласования на ряде нарастающих скоростей (Gl, G2, а при необходимости и на G3). Затем трансиверы посылают сигнал согласования на той скорости, на которой был принят самый последний распознанный сигнал согласования. Этот сигнал и несет информацию о согласованной скорости меж- ду парой трансиверов. Для каждой согласуемой скорости выделяется временное окно, в котором оба партнера передают друг другу серию примитивов ALIGN(0) на согласуемой скорости. Как только трансивер примет примитив ALIGN(0) от своего партнера, он в этом окне вместо примитивов ALIGN(0) будет посылать ALIGN(l). В окне, отведенном для неподдерживаемой скорости, трансивер пере- дает сигнал постоянного тока (DC Idle). В каждом окне передается 4096 прими- тивов, зазор между окнами — 500 мкс. Согласование скоростей занимает 1,8 мс для G1 (1,5 Гбит/с) и 2,4 мс для G2 (3 Гбит/с). Устройства SATA скорость согласуют иначе (см. 5.3) — они начинают с макси- мальной скорости и снижают ее до взаимопонимаемой; этот процесс занимает меньше времени. После согласования скорости устройство SATA автоматически запускает двига- тель; для управляемого запуска двигателя трансивер может задержать согласова- ние скорости с устройством SATA. В отличие от SATA устройства SAS после согласования скорости двигатель ав- томатически не запускают; для запуска двигателя устройство должно получить примитив NOTIFY (ENABLE SPINUP). 11.6. Канальный уровень SAS На канальном уровне решаются задачи идентификации подключенных уст- ройств, их сброса, согласования скоростей, арбитража, маршрутизации и управ- ления соединениями. Здесь рассматриваются общие функции канального уров- ня, его специфические функции для протоколов SSP, SMP и STP рассмотрены в соответствующих разделах. Примитивы Для служебных целей канального уровня SAS используются примитивы — двой- ные слова, начинающиеся с управляющего символа, за которым следуют три символа данных. Первый символ примитива является его отличительным при- знаком: К28.5 — примитив SAS, К28.3 — примитив SATA, К28.6 — специальный примитив для сигнализации ошибки SATA (воспринимается как недействитель- ное двойное слово). На примитивы порядок Little/Big Endian не влияет: и в SAS, и в SATA в примитиве первым передается специальный символ. Однако фор- мальные записи примитивов различаются: в SAS слева направо идет управляю- щий символ, за ним символы данных, в SATA — наоборот.
268 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Примитивы разделяются на несколько функциональных категорий: ♦ Примитивы, не связанные с конкретным типом соединения. Часть из них мо- жет передаваться только вне соединений, часть могут быть как вне, так и внутри соединений. К этой группе, например, относится примитив ERROR, который посылается в ответ на получение недействительного двойного слова. ♦ Примитивы, используемые внутри соединений SSP или SMP. ♦ Примитивы, используемые внутри соединений STP и в SATA. Многие примитивы представляются в различных версиях, эта множественность обусловлена как их функциональностью (например, использованием примити- вов ALIGN($)/ALIGN(1) при согласовании скорости), так и соображениями электромагнитной совместимости (чередование четырех вариантов примитива ALIGN предотвращает появление монотонного сигнала). Примитивы могут посылаться поодиночке или повторяющимися последователь- ностями. При передаче по интерфейсу примитив может потеряться (из-за ошибки). Потеря большинства типов примитивов (например, SOF или EOF) влияет толь- ко на текущее соединение, такие ошибки отрабатываются протоколами верхних уровней. Потеря «ответственных» примитивов CLOSE или BREAK может повли- ять на работу большого количества устройств, поэтому примитив CLOSE переда- ется троекратно, a BREAK — шестикратно. При этом примитив BREAK считается действительным, даже если он принят с одной битовой ошибкой. Примитивы, используемые в соединениях SSP и SMP, посылаются однократно. В соединени- ях STP применяются также повторяющиеся примитивы (как и в SATA). В SAS определены широковещательные примитивы BROADCAST, которые рас- пространяются всеми экспандерами во все трансиверы Phy, они служат для рас- пространения информации о смене конфигурации. Двойные слова данных до кодирования 8В/10В скремблируются, что позволяет избавиться от сосредоточенных (по спектру) электромагнитных помех при пере- даче монотонных (повторяющихся) данных. Примитивы не скремблируются, поскольку в SAS избегают повторяющихся примитивов, применяя при необходи- мости их разные формы {ALIGN(0)..ALIGN(3)), а для SATA и STP для повторов используют примитив SATA_CONT. При приеме декодированные данные деск- ремблируются. Скремблирование обязательно для всех устройств, но для отлад- ки (в лабораторных условиях) скремблирование может быть отключено. CRC- коды вычисляются (и проверяются) для нескремблированных (исходных) данных. Аппаратный сброс и идентификация устройств По завершении последовательности сброса Phy (определения типа партнера и согласования скорости) устройство может инициировать либо аппаратный сброс партнера, послав примитив HARD_RESET, либо последовательность иден- тификации, послав адресный кадр IDENTIFY. Если в соединенной паре один трансивер посылает примитив HARD RESET, а другой — IDENTIFY, то побежда- ет аппаратный сброс. Устройство SATA не делает ни того, ни другого: оно не имеет SAS-адреса, чтобы его посылать в кадре IDENTIFY, а аппаратный сброс выполняет по последовательности сброса Phy.
11.6. Канальный уровень SAS 269 Аппаратный сброс устройств вызывается посылкой примитива HARDRESET хотя бы в одном направлении (аналогично сигналу RST# в параллельной шине SCSI). Примитив HARD RESET не предназначен для широкого использования, и во из- бежание ложных сбросов он воспринимается только после последовательности аппаратного сброса интерфейса. После сброса устройства, вызванного данным примитивом, снова выполняется последовательность аппаратного сброса интер- фейса. Если в очередях целевого устройства на момент сброса присутствовали незавер- шенные команды и SAS-адрес партнера по интерфейсу не изменился, ЦУ может возобновить прежде открытые соединения. В последовательности идентификации трансиверы обмениваются адресными кад- рами IDENTIFY. В этом кадре сообщается тип устройства (конечное, Е-экспан- дер или F-экспандер), битовая карта поддерживаемых протоколов (инициатор, целевое устройство для протоколов SSP, STP и SMP), SAS-адрес и идентифика- тор трансивера (его номер в устройстве, необходимый для протокола SMP). В качестве SAS-адреса Phy конечного устройства указывает SAS-адрес порта, которому этот трансивер принадлежит; Phy экспандера сообщает SAS-адрес экс- пандера. Адресный кадр IDENTIFY, используемый при обмене адресной инфор- мацией после аппаратного сброса трансивера, имеет длину 32 байта (включая 4-байтный CRC-код). Использование полученной идентификационной информации зависит от типа устройства. Экспандер, получив SAS-адрес подключенного устройства, может выполнять прямую маршрутизацию для запросов с таким значением SAS-адре- са. Инициатор протокола SMP понимает, что к нему подключено, и начинает процедуру определения топологии, начиная с данного адреса. Целевые устройст- ва с этой адресной информацией ничего не делают, но они передают информа- цию о себе по запросам страниц режимов (mode page) и журналов (log page). Согласование скоростей и синхронизация устройств Согласование скоростей рассматривается в двух аспектах: обеспечение синхро- низации интерфейсов, работающих на формально одинаковых скоростях, и обес- печение эффективной работы в одном домене устройств, работающих на разных скоростях (Gl, G2...). В последовательных интерфейсах всегда существует проблема несогласованно- сти частот синхронизации устройств (clock skew): узел-источник данных и узел- приемник синхронизируются от собственных кварцевых генераторов с формально совпадающими частотами. Битовая синхронизация приемника осуществляется по принимаемому сигналу, используя фазовую автоподстройку частоты (PLL). Од- нако темп обработки принятых блоков данных (в SAS — двойных слов), а также их трансляции (между трансиверами экспандера) определяется собственным ге- нератором экспандера. При несовпадении тактовых частот источника и прием- ника данных возможны две ситуации:
270 Глава 11. Последовательный интерфейс для устройств SCSI — SAS ♦ перегрузка (overrun) медленного приемника данными от быстрого передатчи- ка, при которой часть передаваемых данных теряется; ♦ недогрузка (underrun) быстрого приемника данными от медленного передат- чика, вынуждающая приемник время от времени простаивать. Эта проблема несогласованности тактовых частот решается с помощью вставки в передаваемый поток специальных заполнителей, которые могут быть при необ- ходимости удалены без ущерба для информативности полезных данных. В SAS, как и в SATA, для согласования тактовых частот применяется вставка примитивов ALIGN в передаваемые потоки. Источник данных (конечное устрой- ство SAS) вставляет эти примитивы по одному на каждые 1024 двойных слова. Устройства SATA и порты SAS, через которые посылаются кадры протокола STP, эти примитивы посылают парами через каждые 256 двойных слов. Приемник данных игнорирует принимаемые примитивы ALIGN. Экспандеры, через кото- рые проходит соединение, пропускают принимаемые примитивы ALIGN. В слу- чае расхождения тактовых частот они корректируют число примитивов в про- пускаемом потоке: ♦ если экспандер работает быстрее источника данных, то он время от времени в транслируемый поток вставляет дополнительные примитивы ALIGN (для STP-соединений — парами); ♦ если экспандер работает медленнее, он время от времени удаляет примитивы ALIGN (их пары в STP-соединениях). В SAS к точности тактовых частот устройств предъявляются более высокие тре- бования, чем в SATA; в передаваемый поток SAS изначально вставляется 0,05 % избыточных данных, в поток SATA — 0,78 %. Таким образом искусственно зани- жается скорость передачи полезных данных источником данных до уровня, на котором может принимать информацию самое медленное (из-за отклонения час- тоты) устройство. Когда в домене присутствуют интерфейсы, работающие на разных скоростях (G1, G2...), требуется выравнивание скоростей. Для этого высокоскоростные транси- веры Phy «разбавляют» двойные слова данных примитивами ALIGN, снижая скорость передачи полезных данных до общедоступной в текущем соединении (аналогично поступают в IEEE 1394b). Так, трансивер, работающий на скоро- сти G2, для формирования потока, предназначенного для Phy G1, будет встав- лять по одному примитиву ALIGN после каждого двойного слова данных (вдо- бавок к вставленным для выравнивания частот). Phy экспандера, доводящего этот поток до устройства G1, удалит эти примитивы. Скорость G1 обязаны поддерживать все устройства — этим обеспечивается совместимость поколений устройств. Вместо примитивов ALIGN устройства SAS могут посылать примитив NOTIFY, который помимо вышеописанных целей согласования частот и выравнивания ско- ростей служит для передачи дополнительной информации (самим фактом сво- его появления).
11.6. Канальный уровень SAS 271 Установление, закрытие и разрыв соединений Для установления соединения Phy посылает адресный кадр OPEN, несущий при- знак типа соединения (SSP, STP или SMP) и SAS-адреса его участников. Экс- пандеры доводят этот кадр до трансивера назначения, который отвечает прими- тивом OPEN ACCEPT — соединение установлено, можно передавать кадры, или OPEN REJECT — соединение установить не удалось. По окончании передач трансиверы Phy обмениваются примитивами CLOSE д,ля закрытия соединения. Если в установление соединения вовлечены экспандеры, то в ответ Phy сначала получает примитивы AIP (Arbitration In Progress), сигнализирующие о выполне- нии арбитража. Затем Phy получает результат попытки: примитив OPEN_ ACCEPT или OPEN REJECT. В запросе соединения указывается SAS-адрес, а не конкретный относящийся к нему трансивер Phy. К одному SAS-адресу может относиться несколько тран- сиверов, и экспандеры вольны создавать соединение по любому пути, соединяю- щему источник запроса с указанным адресатом. Адресный кадр OPEN передается, когда интерфейс находится в покое: передают- ся примитивы IDLE и нет установленного соединения. Кадр OPEN обрамляется специальными примитивами SOAF (Start Of Address Frame) и EOAF (End Of Address Frame), позволяющими выделять эти кадры из общего битового потока. Кадр OPEN имеет длину 32 байта (включая 4-байтный CRC-код), в нем переда- ется следующая информация: ♦ протокол соединения (SSP, STP или SMP); ♦ скорость (Gl, G2...); ♦ тег соединения, который устанавливается инициатором, целевое устройство использует это значение для установления соединения с инициатором (тег позволяет инициатору избежать сравнения 64-битных адресов при получении примитива OPEN от целевого устройства); ♦ SAS-адрес получателя запроса соединения, по которому экспандеры опреде- ляют маршрут передачи запроса; ♦ SAS-адрес источника запроса, сообщающий получателю, кто его вызывает; ♦ счетчик блокировки (pathway blocked count) и время ожидания арбитража (arbitration wait time), используемые для справедливого арбитража. Полученный кадр OPEN экспандер запоминает и пересылает дальше, отрабаты- вая запрос соединения. Декодировав кадр, экспандер посылает в обратную сто- рону примитив AIP (Normal). В процессе работы над запросом с интервалом 128 двойных слов экспандер посылает примитивы AIP (Arbitration In Progress — выполняется арбитраж), сообщающие о состоянии процесса: ♦ AIP ( Waiting On Connection) — если выходной трансивер Phy занят другим со- единением; ♦ AIP ( Waiting On Partial) — если выходной трансивер Phy занят обслуживани- ем другого (незавершенного) запроса установления соединения;
272 Глава 11. Последовательный интерфейс для устройств SCSI — SAS ♦ AIP (Waiting On Device) — как только адресный кадр OPEN передан в выход- ной порт (с этого момента данный экспандер сам не посылает примитивов AIP, но начинает трансляцию двойных слов с выходного трансивера Phy во входной; в этом потоке могут быть и вышеперечисленные примитивы AIP). Когда от Phy устройства SAS назначения приходит подтверждение — примитив OPEN_ACCEPT, между источником запроса и устройством назначения устанав- ливается двунаправленный канал трансляции двойных слов. Этим каналом начи- нает пользоваться заявленный протокол (SSP, SMP или STP). Если в ответ на запрос получен примитив OPEN REJECT, то его типом указыва- ется класс отказа. Отказ типа Abandon означает, что запрос повторять не следует (неподдерживаемый протокол, проблемы с маршрутизацией и т. п.). К этому типу относятся следующие отказы: ♦ OPEN REJECT (BAD DESTINATION) — запрос адресуется тому же порту, из которого он пришел; ♦ OPEN REJECT (CONNECTION RATE NOT SUPPORTED) - запрошена слиш- ком высокая скорость; ♦ OPEN REJECT (PROTOCOL NOT SUPPORTED) — конечное устройство не поддерживает запрошенный протокол, роль или тег инициатора соединения; ♦ OPEN_REJECT (STP RESOURCES BUSY) — целевой STP-порт уже имеет ак- тивное соединение с другим инициатором (устройства SATA обслуживать не- скольких инициаторов не умеют); ♦ OPEN REJECT (WRONG DESTINATION) — запрошенный SAS-адрес не соот- ветствует адресу конечного устройства, чей трансивер получил данный запрос. При отказе типа Retry запрос можно повторить, он не удался из-за временной «закупорки» домена (нет свободных путей). К этому типу относятся следующие отказы: ♦ OPEN REJECT (NO DESTINATION) — не найдено конечное устройство: дан- ный SAS-адрес не присутствует в домене; запрос пришел от Phy с субтрак- тивной маршрутизацией, но не нашел цели; запрос пришел к мосту STP/ SATA, но устройство SATA не посылало первоначальный блок Register FIS (нет устройства SATA); ♦ OPENREJECT (PATHWAY BLOCKED) — сработал таймер ожидания установ- ления пути в экспандере; ♦ OPEN REJECT (RETRY) — адресуемое устройство временно занято, но в даль- нейшем должно принять этот запрос. Запрос может отвергаться и по нескольким причинам сразу, при этом примитив будет указывать на самую весомую причину, влияющую на изменение планов деятельности источника запроса. Для закрытия соединения трансиверы Phy обмениваются примитивами CLOSE — эти примитивы должны пройти по всему пути соединения между парой уст- ройств SAS. Протоколы SSP и SMP требуют, чтобы до закрытия соединения была завершена передача трафика этих протоколов, и устройства игнорируют несвоевременно пришедшие примитивы CLOSE. Для протокола STP необходимо,
11.6. Канальный уровень SAS 273 чтобы до закрытия соединение перестало быть активным. Экспандеры отрабаты- вают примитивы CLOSE независимо от состояния. Соединение может быть при- нудительно (аварийно) разорвано путем посылки примитива BREAK, этот при- митив разрывает соединение на том трансивере, через который он прошел, и распространяется по пути разрываемого соединения. Процесс установления соединения контролируется по времени. Таймеры Open Timeout (уставка 1 мс) в каждом устройстве и экспандере следят за тем, чтобы за- прос соединения не «завис». Каждый таймер перезапускается в момент прохож- дения (подачи) кадра OPEN и по получении каждого AIP. Если таймер сработает (1 мс без получения AIP), Phy разрывает возможно уже созданные фрагменты пути, посылая примитив BREAK. С этого момента в течение 1 мс ожидается воз- можный приход встречного BREAK, после чего трансивер готов к приему сле- дующих запросов соединений. Примитивы BREAK отрабатываются отдельно каждым физическим интерфейсом. Экспандер на примитив BREAK, пришедший по интерфейсу, отвечает встречной посылкой этого примитива. На другой тран- сивер экспандер будет транслировать примитив BREAK только в том случае, если он туда посылал примитив OPEN от данного трансивера. Справедливый арбитраж и предотвращение блокировки Домен SAS является общим ресурсом, обеспечивающим соединения инициато- ров и целевых устройств. За доступ к этому ресурсу могут состязаться множест- во устройств, поэтому должна решаться задача арбитража. Важными свойствами арбитража являются справедливость, ограниченная задержка обслуживания, вы- сокий коэффициент использования ресурсов подсистемы передачи и возможность масштабирования. В SAS используется справедливый арбитраж на основе алгоритма LRU (Least Recently Used). Кадр OPEN, являющийся запросом на установление соединения, содержит «возраст» запроса — 16-битное поле AWT (Arbitrayion Wait Time). В случае конкуренции запросов преимущество имеет запрос с наибольшим возрастом. Из запросов одного возраста побеждает тот, у которого больше значение SAS-адреса инициатора запроса (как и в параллельном интерфейсе SCSI). Если конкуриру- ют запросы одного возраста и от одного SAS-адреса (это может быть, когда ини- циатор запроса обладает широким портом), то сравниваются значения запраши- ваемых скоростей — побеждает запрос с большей скоростью. Если и скорости совпадают, то можно обслужить любой из них. Такой сложный в описании алго- ритм сравнения реализуется очень просто: сравниваются два числа, у которых старшие биты — возраст, средние — SAS-адрес, младшие — скорость. Поскольку интерфейс полнодуплексный, через него могут одновременно прохо- дить запросы соединения (кадры OPEN) во встречных направлениях. Однако по одному интерфейсу может одновременно быть установлено только одно соеди- нение. Какой из запросов победит, определяется по содержимому кадров OPEN и моменту их прихода:
274 Глава 11. Последовательный интерфейс для устройств SCSI — SAS ♦ Если кадр OPEN пришел до прихода примитива AIP, во встретившихся кад- рах сравниваются поля AWT и SAS-адресов, побеждает кадр с большим значе- нием. ♦ Если OPEN приходит после AIP, то побеждает пришедший кадр OPEN. Экс- пандер будет посылать кадры OPEN после AIP, только если ему нужно побе- дить; причем он это может делать и неоднократно. В ответ на «победивший» кадр OPEN посылается нормальный ответ (OPEN_ ACCEPT или OPEN_REJECT) от конечного устройства или AIP от экспандера). Значения AWT в диапазоне 0-7FFFh отражают время ожидания запроса в микро- секундах (0-32 767 мкс), значения AWT=8000-FFFFh соответствуют времени ожидания 32,768+AWT (мс). Первоначально посылая запрос, устройство указывает нулевое значение AWT. Экспандеры, проводящие этот запрос, в передаваемых кадрах OPEN указывают значение AWT, увеличенное на время пребывания кадра в данном экспандере. Та- ким образом, в каждой операции арбитража фигурирует время, отсчитанное от момента подачи запроса установления соединения. Если запрос приходится повторять, то в некоторых случаях устройство имеет право указывать в качестве начального ненулевое значение AWT — это повышает приоритет обслуживания данного запроса. Увеличивать AWT (повышать приори- тет) при повторной попытке установления соединения можно, когда получению доступа мешает входящий на данный порт трафик. Также AWT можно повышать, когда попытка установления соединения не удалась из-за занятости промежу- точных участков пути — получен ответ OPEN_REJECT (PATWAY BLOCKED). Повторные попытки после получения отказа из-за занятости или отсутствия устройства, а также из-за срабатывания тайм-аута делаются с AWT=O. Целевые устройства соблюдают правила справедливого арбитража — они посы- лают запросы с AWT=O. Инициаторы могут «жульничать» — посылать запросы с AWT в пределах 7FFFh. Это целесообразно, поскольку посылки команд, ради ко- торых инициатор запрашивает соединение, гораздо короче передач данных. По- скольку устройства SAS, как и устройства SCSI, поддерживают очереди (наборы заданий), их загрузку заданиями выгодно выполнять с дополнительным приори- тетом. При обслуживании конкурирующих запросов может возникнуть тупиковая си- туация (deadlock), если одновременно совпадают 4 условия: ♦ взаимоисключение: имеется неразделяемый ресурс — физическое соединение SAS; ♦ удержание и ожидание: отправитель запроса, удерживая ресурс, запрашивает другой ресурс; ♦ отсутствие вытеснения: в SAS нет возможности повлиять на чужой запрос; ♦ круговое ожидание: в наборе запросов Rl, R2,..., Rn запрос R1 ждет ухода R2, R2 ждет R3, a Rn ждет R1 — эта ситуация возможна при соединении несколь- ких экспандеров.
11.7. Протокол SSP 275 В SAS предпринимаются меры как для избежания совпадения всех четырех ус- ловий во времени, так и для обнаружения совпадения. Если при установлении соединения экспандер обнаруживает тупиковую ситуацию, он отбрасывает один из запросов установления соединения, опять-таки с учетом приоритетов по SAS- адресам. 11.7. Протокол SSP Протокол SSP обеспечивает выполнение заданий устройствами SCSI. Для рабо- ты протокола SSP требуется установление соединения SSP. Запросить соедине- ние SSP может как инициатор, так и целевое устройство. После установления соединения SSP трансиверы инициатора и целевого устройства обмениваются между собой кадрами SSP. После обмена кадрами соединение закрывается. Канальный уровень для протокола SSP Канальный уровень для SSP обеспечивает гарантированную доставку кадров и управление потоком. Для гарантированной доставки по приему каждого кадра трансивер посылает примитив АСК (положительное подтверждение) или NAK (ошибка CRC-контро- ля). Кадры неверной длины игнорируются — на них подтверждения не посыла- ются. Подтверждение должно прийти в течение 1 мс, его отсутствие является признаком ошибки, влекущей за собой закрытие соединения. Управление потоком основано на кредитах: для того чтобы передать кадр, пере- датчик должен иметь ненулевой кредит. Кредит ему дает партнер по соедине- нию посылкой примитива RRDY. При установлении соединения кредиты обну- ляются, получение примитива RRDY увеличивает кредит на 1, посылка кадра — уменьшает на 1. Кредиты встречных направлений независимы. Трансивер, по- славший кредит, должен быть готов к приему полноразмерного (1 Кбайт дан- ных) кадра. Значение кредита формально может достигать 255, но реально значения больше 2 не используются: в отличие от Fibre Channel, в SAS протя- женность домена и задержка доставки невелики, так что большие кредиты не требуются. Примитивом CREDITBLOCKED устройство предупреждает об от- сутствии кредита (в течение 1 мс не пришел примитив RRDY). Когда трансивер завершает передачу кадров, он должен инициировать закрытие соединения. Его партнер может удерживать соединение, если ему еще требуется передача. Посылкой примитива CREDIT BLOCKED трансивер сообщает партнеру о том, что надо закрывать соединение, а не ждать очередного кредита. SSP-кадр состоит из примитива SOF, двойных слов данных и примитива EOF. Обмен выполняется в полнодуплексном режиме: кадры могут передаваться в обоих направлениях. Примитивы-подтверждения и примитивы кредитов (АСК, NAK и RRDY) могут внедряться в поток двойных слов данных (как и примитивы ALIGN и NOTIFY), передаваемых во встречном направлении. В протоколе SSP используются блокированные и неблокированные передачи кадров. В случае блокированной передачи кадров (interlocked frame) очередной
276 Глава 11. Последовательный интерфейс для устройств SCSI — SAS кадр посылается только после получения подтверждения (АСК или NAK) пре- дыдущего. Блокированные передачи используются для кадров COMMAND, TASK, XFER RDY, RESPONSE; темп этих передач сдерживается временем оборота меж- ду источником и приемником. Для кадров данных (DATA) используется неблокированная передача', очередной кадр может быть послан без ожидания подтверждения предыдущих (подтвержде- ния передаются, но приходят позже). Здесь темп потока не зависит от времени прохождения данных между источником и приемником. Потоковые передачи дан- ных аналогичны синхронной передаче в параллельных версиях SCSI. Для небло- кированных (потоковых) передач требуется наличие кредита, предыдущий кадр должен быть тоже кадром данных. В потоке могут передаваться кадры только с одним и тем же значением тега, это требование предохраняет аппаратные средства конечных устройств от необходимости переключения контекста во время приема потока, что существенно при высокой скорости передачи (300 Мбайт/с). Во избежание тупиковых ситуаций трансивер, подтвердивший запрос соедине- ния, должен послать хотя бы один кредит. Если трансивер этого обеспечить не может, он должен послать отказ OPEN REJECT (RETRY). Если трансивер откры- вает соединение, посылая кадр OPEN, он должен послать хотя бы один кадр. Инициатор не должен отказывать в кредите только потому, что сам нуждается в передаче (целевое устройство при необходимости так поступать может). В про- тивном случае инициатор и ЦУ могут ждать друг друга бесконечно. Временный отказ в кредите — нормальное явление (он может быть вызван перегрузкой шины PCI). Трансивер, завершивший передачу кадров, сигнализирует о намерении закрыть соединение посылкой примитива DONE. Эта посылка не влияет на трафик встреч- ного направления: навстречу могут передаваться кадры, и трансивер должен на них нормально отвечать (примитивами RRDY, АСК, NAK и CREDIT BLOCKED). Когда и партнер соберется закрывать соединение, он пошлет примитив DONE. Когда оба партнера и пошлют, и примут примитив DONE, они посылают прими- тивы CLOSE — соединение закрывается. Примитивы DONE имеют разновидно- сти, связанные с причиной их посылки: ♦ DONE (NORMAL) — нет больше кадров для передачи; ♦ DONE (ACK/NAK TIMEOUT) — отсутствие своевременного подтверждения; ♦ DONE (CREDIT TIMEOUT) — отсутствие своевременно предоставленного кре- дита или получение примитива CREDIT BLOCKED. В трансивере имеется таймер, контролирующий использование соединения: если в течение 1 мс не передается ни кадра, ни примитива DONE, соединение принудительно разрывается. Транспортный уровень SSP В протоколе SSP используется единый тип кадра (рис. 11.6), основанный на кадре Fibre Channel. Кадр начинается с 24-байтного заголовка, за которым может следо- вать от 0 до 1024 байт информационного блока. При необходимости кадр выравни- вается с помощью 0-2 байтов-заполнителей; завершается кадр 4-байтным полем
11.7. Протокол SSP 277 CRC. Заголовок начинается с байта, определяющего тип кадра. За ним следуют трехбайтные поля хэшированных адресов получателя и источника, счетчик числа повторных передач, число байтов-заполнителей, 2-байтный тег информационного блока, 2-байтный тег передачи порта целевого устройства и 4-байтное поле смеще- ния данных. Длина поля данных явно не указывается, конец кадра определяется по примитиву EOF (предшествующее двойное слово — поле CRC, перед ним — последнее двойное слово данных). В SSP определено 5 типов кадров (табл. 11.5). Байт о 1 3 4 5 7 8 9 10 11 12 15 16 17 18 19 20 23 24 m п-3 п 1 L 6 1 5 1 4 1 3 1 2 1 1 1 1 ° FRAME TYPE (MSB) HASHED DESTINATION SAS ADDRESS (LSB) (MSB) HASHED SOURCE SAS ADDRESS (LSB) RETRY DATA FRAMES RETRANSMIT CHANGING DATA POINTER NUMBER OF FILL BYTES (MSB) TAG (LSB) (MSB) TARGET PORT TRANSFER TAG (LSB) (MSB) DATA OFFSET (LSB) INFORMATION UNIT (MSB) CRC (LSB) Рис. 11.6. Кадр протокола SSP Таблица 11.5. SSP-кадры Тип Длина информа- ционного блока Направление Назначение COMMAND 28-284 l->T Подача SCSI-команды TASK 28 1->Т Запрос функции управления заданиями XFER_RDY 12 Т->1 Запрос данных записи DATA 1-1024 к->т Данные записи (1->Т) или чтения (Т->1) RESPONSE 24-1024 Т->1 Посылка информации о состоянии (для команд) или ответа на запросы функций управления
278 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Для выполнения SCSI-команд используются кадры COMMAND, RESPONSE, DATA и XFERRDY. Последовательность кадров зависит от того, требуется ли в данной команде передача данных. Для SCSI-команд, не требующих передачи данных, инициатор посылает кадр COMMAND, по исполнении команды устройство посылает кадр RESPONSE. Для выполнения команд записи (передача данных от инициатора) целевое уст- ройство после получения кадра COMMAND посылает кадр XFER RDY, на который инициатор отвечает одним или несколькими кадрами DATA. Посылка XFER RDY и ответная посылка кадров DATA может производиться несколько раз, пока не будут переданы все данные для этой команды (или не возникнет особое усло- вие). По исполнении команды целевое устройство посылает кадр RESPONSE. Для выполнения команд чтения целевое устройство после получения кадра COMMAND посылает один или несколько кадров DATA, пока не будут переданы все данные для текущей команды (или не возникнет особое условие). По испол- нении команды целевое устройство посылает кадр RESPONSE. Для двунаправленных команд целевое устройство организует доставку данных по своему усмотрению, запрашивая данные записи кадрами XFER RDY и посы- лая данные чтения по своей инициативе. Для управления заданиями в SSP выделен специальный тип кадра TASK, в кото- ром содержится запрос функции управления (в Fibre Channel для запросов управления используется кадр COMMAND). На этот кадр целевое устройство отвечает кадром RESPONSE с результатом запроса. 11.8. Протокол SMP Протокол SMP служит для управления экспандерами и определения топологии домена. Канальный уровень для протокола SMP Для протокола SMP канальный уровень работает проще, чем для протокола SSP. SMP-соединение может запросить только инициатор. В каждом соединении пе- редается только два кадра: запрос от инициатора (SMP_REQUEST), на который адресованное устройство посылает ответ (SMPRESPONSE), после чего обменом примитивами CLOSE соединение закрывается. Для закрытия соединения прими- тив DONE не используется, примитив CLOSE трансивер посылает вслед за по- сылкой кадра. Внутри SMP-соединения используются только примитивы SOF и EOF, обрам- ляющие кадры. Подтверждения приема кадров (АСК или NAK) отсутствуют. Если инициатор принимает кадр с неверным CRC-кодом, он закрывает соедине- ние примитивом CLOSE, если поврежденный кадр принимает целевое устройст- во, оно разрывает соединение примитивом BREAK. SMP-соединения работают в полудуплексном режиме. Управление потоком не требуется: открытие соеди- нения является неявным кредитом для посылки единственного кадра инициато- ром и целевым устройством.
11.8. Протокол SMP 279 Транспортный и прикладной уровень SMP SMP-кадр состоит из 4-байтного заголовка, поля данных (0-1024 байт, допол- ненных до целого числа двойных слов) и 4-байтного поля CRC. В заголовке кад- ра запроса (SMP Request) нулевой байт определяет тип кадра (40h), первый байт — код функции (табл. 11.6). В заголовке кадра ответа (SMP Response) нуле- вой байт определяет тип кадра (41h), первый байт — функцию (повторяет код функции, указанный в кадре запроса), второй — результат выполнения функции (табл. 11.7). Остальные байты заголовков не используются, содержимое поля данных определяется функцией запроса. Таблица 11.6. Функции запросов протокола SMP Код Функция Информация об экспандере в целом 00h REPORT GENERAL — сообщение общей информации об экспандере 01h REPORT MANUFACTURER INFORMATION — информация об экспандере в виде, ана- логичном ответу на SCSI-команду INQUIRY Функции чтения 10h DISCOVER — информация о подключенных устройствах 11h REPORT PHY ERROR LOG — получение значений счетчиков ошибок 12h REPORT PHY SATA — получение информации, относящейся к подключенному устройству SATA 13h REPORT ROUTE INFORMATION — чтение элемента таблицы маршрутизации Функции записи 90h CONFIGURE ROUTE INFORMATION — запись элемента таблицы маршрутизации 91h Phy CONTROL — конфигурирование параметров Phy Таблица 11.7. Результаты выполнения функций протокола SMP Код Результат 00h SMP Function Accepted — нормальный результат 01h Unknown SMP Function — целевое устройство не поддерживает данный запрос 02h SMP Function Failed — отказ при выполнении функции (разные причины) 03h Invalid Request FrameLength — неверная длина кадра запроса 10h Phy Does Not Exist — недопустимый номер Phy (для запросов, в которых фигуриру- ет Phy Identifier) 11h Index Does Not Exist — запрос ссылается на элемент таблицы маршрутизации, не существующий для данного трансивера Phy (или этот трансивер не имеет таблицы маршрутизации) Продолжение &
280 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Таблица 11.7 (продолжение) Код Результат 12h Phy Does Not Support SATA — ответ на запрос REPORT PHY SATA, если к данному трансиверу Phy не подключено устройство SATA 13h Unknown Phy Operation — неизвестная функция управления Phy 14h Unknown Phy Test Function — неизвестная функция тестирования Phy 15h Phy Test Function in Progress — выполняется функция тестирования Phy Функции SMP запрашивает инициатор протокола SMP, с их помощью он может определить топологию домена, сконфигурировать экспандеры и управлять их портами. Инициаторами SMP могут быть как конечные устройства SAS, так и самоконфигурируемые экспандеры. Функция REPORT GENERAL позволяет получить общую информацию об экс- пандере (рис. 11.7). Эта информация не зависит от того, с какого трансивера при- нимается данный запрос. В ответе на запрос содержатся следующие параметры: ♦ Number of Phys — число трансиверов, указывающее инициатору (конфигура- ционному ПО), сколько раз оно должно послать ему запрос DISCOVER (с раз- ными номерами Phy). В экспандере трансиверы нумеруются с нуля до Number_ of_Phys-l. ♦ Expander Route Indexes — максимальный размер таблицы маршрутизации по всем трансиверам. Конфигурационное ПО должно быть готово к работе с числом элементов таблиц, равным произведению максимального размера на число трансиверов. ♦ Expander Change Count — счетчик посылок широковещательного примитива BROADCAST (CHANGE) данным экспандером. ♦ Бит CONFIGURABLE ROUTE TABLE — признак необходимости заполнения таблиц маршрутизации с помощью SMP-запросов от внешнего инициатора. Нулевое значение этого бита означает, что экспандер является самоконфигурируе- мым — у него есть внутренний инициатор SMP и он заполняет свои табли- цы сам. ♦ Бит Configuring в самоконфигурируемом экспандере указывает на незавер- шенность процесса изменения таблиц маршрутизации (при этом их бессмыс- ленно читать и не стоит пытаться обращаться к устройствам через данный экспандер). Функция REPORT MANUFACTURER INFORMATION позволяет получить сим- вольные (ASCII) идентификаторы (рис. 11.8). В SAS 1.0 были определены толь- ко поля для идентификаторов производителя (VENDOR IDENTIFICATION), продукта (PRODUCT IDENTIFICATION), версии (PRODUCT REVISION LEVEL), относящиеся к подсисте- ме (плата, шасси, стойка). Если поддерживается формат SAS 1.1 (единичное зна- чение бита 0 байта 8), то в ответе содержатся и символьные идентификаторы компонента, содержащего порт целевого устройства SMP (COMPONENT VENDOR IDENTIFICATION, COMPONENT ID, COMPONENT REVISION ID).
11.8. Протокол SMP 281 Байт о 1 2 3 4 5 6 7 8 9 10 11 27 28 31 Байт о 1 2 3 4 7 8 9 10 11 12 19 20 35 36 39 40 47 48 49 50 51 52 59 60 63 7 I 6 I 5 I 4 I 3 I 2 I 1 I 0 ______________________SMP FRAME TYPE (41 h)____________ _______________________________________________________FUNCTION (OOh)_ FUNCTION RESULT (MSB> EXPANDER CHANGE COUNT EXPANDER ROUTE INDEXES \ NUMBER OF PHYS Рис. 11.7. Ответ на запрос REPORT GENERAL I I 6 | 5 | 4 | 3 | 2 | 1 | 0 SMP FRAME TYPE (41 h) FUNCTION (01 h) FUNCTION RESULT Игнорируется 1 F0RMAT Игнорируется (MSB) VENDOR IDENTIFICATION (LSB) (MSB) PRODUCT IDENTIFICATION (LSB) (MSB) PRODUCT REVISION LEVEL (LSB) (MSB) COMPONENT VENDOR IDENTIFICATION (LSB) (MSB) COMPONENT ID (LSB) (MSB) COMPONENT REVISION ID (LSB) Vendor specific (MSB) CRC (LSB) Рис. 11.8. Ответ на запрос REPORT MANUFACTURER INFORMATION
282 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Запрос функции DISCOVER адресуется конкретному трансиверу экспандера (его номер указывается в 9-м байте кадра). Ответ на этот запрос содержит исчерпываю- щую информацию об устройстве, подключенном к данному трансиверу (рис. 11.9): ♦ PHY IDENTIFIER — идентификатор трансивера, к которому относится данный ответ. ♦ ATTACHED DEVICE TYPE — тип подключенного устройства: • 0 — нет устройства; • 1 — конечное устройство; • 2 — Е-экспандер; • 3 — F-экспандер. ♦ NEGOTIATED PHYSICAL LINK RATE — согласованная скорость интерфейса: • 0 — скорость неизвестна (работа Phy разрешена); • 1 — работа Phy запрещена; • 2 — при согласовании скорости произошла ошибка; • 3 — согласование скорости задержано для предотвращения запуска двига- теля устройства SATA; • 4 — подключен селектор порта SATA, но скорость еще не согласована; • 8 — согласована скорость 1,5 Гбит/с; • 9 — согласована скорость 3 Гбит/с. ♦ Биты-признаки наличия в подключенном устройстве инициаторов и целевых устройств протоколов SSP, STP и SMP, хоста SATA, устройства SATA и се- лектора портов SATA. ♦ SAS ADDRESS — SAS-адрес экспандера. ♦ ATTACHED SAS ADDRESS — SAS-адрес подключенного устройства. ♦ ATTACHED PHY IDENTIFIER — идентификатор Phy в подключенном устройстве. ♦ Минимальные и максимальные значения скоростей, с которыми способен ра- ботать трансивер (HARDWARE MINIMUM/MAXIMUM PHYSICAL LINK RATE) и которые мож- но установить программно (PROGRAMMED MINIMUM/MAXIMUM PHYSICAL LINK RATE). ♦ PHY CHANGE COUNT — число примитивов BROADCAST (CHANGE), сгенерирован- ных данным устройством (только для экспандеров). ♦ Признак виртуального трансивера (внутреннего устройства в экспандере). ♦ PARTIAL PATHWAY TIMEOUT VALUE - тайм-аут. ♦ ROUTING ATTRIBUTE — атрибут маршрутизации для данного трансивера: • 0 — direct; • 1 — subtractive; • 2 — table. Запрос функции REPORT PHY ERROR LOG возвращает значения счетчиков ошибок: ♦ INVALID DWORD COUNT — число принятых недействительных двойных слов; ♦ RUNNING DISPARITY ERROR COUNT — число ошибок чередования диспаритета (про- верка на уровне кодов 8В/10В);
11.8. Протокол SMP 283 Байт о 1 2 3 4 7 6 9 10 11 12 13 14 15 16 23 24 31 32 33 39 40 41 42 43 44 45 49 50 51 52 55 7 6 J 5_J 4 \ ? 1 1 ? 1 1 1 1 1 ® SMP FRAME TYPE (41 h) FUNCTION (1 Oh) FUNCTION RESULT Игнорируется PHY IDENTIFIER Игнорируется Игнорируется! ATTACHED DEVICE TYPE Игнорируется NEGOTIATED PHYSICAL LINK RATE ATTACHED SSP INITIATOR ATTACHED SMP INITIATOR ATTACHED STP INITIATOR ATTACHED SATA HOST ATTACHED SATA PORT SELECTOR ATTACHED SSP TARGET ATTACHED SMP TARGET ATTACHED STP TARGET ATTACHED SATA DEVICE SAS ADDRESS ATTACHED SAS ADDRESS ATTACHED PHY IDENTIFIER PROGR. MINIMUM PHYSICAL LINK RATE HARDWARE MINIMUM PHYSICAL LINK RATE PROGR. MAXIMUM PHYSICAL LINK RATE HARDWARE MAXIMUM PHYSICAL LINK RATE PHY CHANGE COUNT VIRTUAL PARTIAL PATHWAY TIMEOUT VALUE ROUTING ATTRIBUTE Vendor specific (msb) rRr CRC (LSB) Рис. 11.9. Ответ на запрос DISCOVER ♦ LOSS OF DWORD SYNCHRONIZATION COUNT — число потерь двойных слов синхрониза- ции (и последовательностей сброса интерфейса); ♦ PHY RESET PROBLEM COUNT — число случаев, когда трансиверам в конце последова- тельности сброса не удалось синхронизироваться. Запрос функции REPORT PHY SATA возвращает информацию от STP-порта, к трансиверу которого подключено устройство SATA: идентификатор Phy, SAS- адрес STP-порта, его способность к поддержанию привязки к инициаторам (AFFILIATION SUPPORTED), факт наличия привязки и SAS-адрес инициатора STP, к которому в данный момент привязан порт. Кроме того, в ответе на запрос при- сутствует содержимое информационной структуры начального состояния реги-
284 Глава 11. Последовательный интерфейс для устройств SCSI — SAS стров подключенного устройства SATA, в котором содержатся признаки устрой- ства SATA (см. 8.3). Функция REPORT ROUTE INFORMATION вызывается с указанием идентифика- тора Phy и индекса элемента в таблице маршрутизации этого трансивера. В отве- те повторяется идентификатор Phy и индекс элемента, а сам элемент содержит признак действительности и SAS-адрес (ROUTED SAS ADDRESS), с которым можно ус- тановить соединение через данный трансивер. Функция CONFIGURE ROUTE INFORMATION используется для заполнения элемента таблицы маршрутизации. В этом запросе фигурируют те же параметры (идентификатор Phy, индекс элемента, SAS-адрес и признак действительности). В запросе функции PHY CONTROL указываются идентификатор Phy, выполняе- мая операция, а также значения программируемых ограничений на скорости пе- редачи и тайм-аута PARTIAL PATHWAY TIMEOUT. Для Phy определены следующие опе- рации (код операции указан в скобках): ♦ NOP (00) — нет операции; ♦ LINK RESET (Olh) — сброс интерфейса; ♦ HARD RESET (02h) — аппаратный сброс устройства; ♦ DISABLE (03h) — запрет работы Phy; ♦ CLEAR ERROR LOG (05h) — сброс счетчиков ошибок; ♦ CLEAR AFFILIATION (06h) — сброс привязки STP-порта; ♦ TRANSMIT SATA PORT SELECTION SIGNAL — передача сигнала, вызывающе- го переключение селектора SATA-порта на данный трансивер. В запросе функции PHY TEST FUNCTION указываются идентификатор Phy, иден- тификатор теста и тестового примера, а также скорость, на которой должно вы- полняться тестирование. 11.9. Протокол STP Протокол STP поддерживает туннель между инициатором SATA (представлен- ным хост-контроллером SAS) и мостом STP/SATA, к которому подключено уст- ройство SATA. В SATA хост и устройство взаимодействуют непосредственно, без установления соединений. Протокол STP обеспечивает устройству SATA, под- ключенному к мосту STP/SATA, иллюзию непосредственного соединения с хост-контроллером SATA, правда, с дополнительными задержками. Эту иллю- зию создает STP-соединение между портом инициатора протокола STP (хост- адаптера SAS) и портом моста STP/SATA в экспандере, к которому подключено устройство SATA. Если устройство SATA подключено непосредственно к хост- адаптеру SAS, то протокол STP не используется (хост-адаптер с данным устрой- ством работает по обычному протоколу SATA). Канальный уровень для протокола STP Канальный уровень STP построен с учетом протокола SATA, который несколько проще протокола устройств SAS. Устройства SATA никогда не передают кадры
11.9. Протокол STP 285 во встречных направлениях одновременно. В связи с этим в STP-соединении ис- пользуется полудуплексный режим: в одном направлении передаются двойные слова данных, во встречном — примитивы R_IP. В SATA используются повторяющиеся примитивы, причем их число не имеет зна- чения. В соединении STP используются примитивы ALIGN и примитивы протоко- ла SATA. Примитивы протокола SATA в SAS обозначаются префиксом SATA_: ♦ SATA X RDY — запрос передачи кадра; ♦ SATARRDY — разрешение передачи кадра; ♦ SATASOF, SATAJEOF — границы кадра; ♦ SATAHOLD, SATA_HOLDA — временная приостановка передачи кадров; ♦ SATA WTRM — завершение передачи кадра; ♦ SATA_R_IP — прием кадра (процесс); ♦ SATA_R_OK — кадр успешно принят; ♦ SATA_RJERR — ка^др принят с ошибкой; ♦ SATA_PMREQ_P, SATA_PMREQ_S, SATAPMACK, SATAPMNAK - запросы и подтверждение управления энергопотреблением; ♦ SATA ERROR — посылка недействительного слова устройству SATA; ♦ SATASYNC — покой; ♦ SATA_DMAT — прекращение текущей операции DMA; ♦ SATACONT — переход в режим покоя со скремблированием данных. SATA-кадры по структуре аналогичны SAS-кадрам (4-байтный заголовок, поле данных и CRC-код), но поле данных (SATA FIS) может иметь длину до 8192 байт. Обмен кадрами и примитивами при установлении STP-соединения аналогичен установлению SSP-соединения, этот обмен выполняется между хостом и мостом и не выходит на порт подключения устройства SATA. Мост подтвердит установ- ление соединения, только если порт устройства SATA находится в покое (в обо- их направлениях передаются примитивы SATA SYNC). Закрытие STP-соедине- ния также происходит невидимо для устройства SATA, и оно также возможно только в состоянии покоя. Внутри открытого соединения кадры и примитивы передаются по сквозному пути между Phy инициатора и Phy устройства SATA. Соединение STP устанавливается каждый раз, когда у трансивера появляется потребность в передаче кадров. Установление соединения по инициативе хоста выполняется просто: хост (контроллер SAS) «знает» протокол SSP и «умеет» от- крывать и закрывать соединение. После получения подтверждения соединения Phy обычно посылает запрос разрешения передачи (SATA_X_RDY) и начинает- ся обмен по протоколу SATA. Когда передачу запрашивает устройство SATA, оно посылает примитив SATA_ XRDY, что заставляет мост STP/SATA запросить соединение с хост-адаптером. Когда это соединение устанавливается, хосту передается примитив SATAXRDY, а навстречу хост посылает примитив SATA R RDY. Когда устройство SATA завер- шает требуемые передачи кадров, оно посылает примитив SATASYNC, который доводится до хоста, что для моста является сигналом для закрытия соединения.
286 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Может случиться так, что соединение устанавливает хост, но к моменту его уста- новления возникает потребность в передаче и у устройства SATA, о чем оно сиг- нализирует примитивом SATAXRDY. В этом случае хост уступает право ис- пользования полудуплексного соединения устройству SATA, послав ему примитив SATARRDY. После того как устройство SATA закончит свои пере- дачи и пошлет примитив SATASYNC, мост не будет сразу закрывать соедине- ние, а позволит хосту выполнить его передачи. STP-соединение может закрывать любой его участник, когда у него не остается кадров для передачи. До закрытия соединения (обмена примитивами CLOSE) партнеры должны обменяться примитивами SYNC. Передача кадра SATA в STP-соединении происходит следующим образом. Уст- ройство в покое интерфейса {Idle) передает примитивы SYNC. Для запроса раз- решения на передачу кадра оно посылает примитивы X RDY. Получив разрешение (примитив RRDY), устройство передает кадр (SATASOF, данные, SATAEOF), после чего посылает примитивы WTRM — признак ожидания подтверждения. Получив подтверждение (ROK или R ER), устройство переходит в состояние покоя — передает примитивы SYNC. Примитивы SATA_X_RDY могут передаваться по физическому интерфейсу во встречных направлениях, при этом хост всегда уступает целевому устройству — посылает примитив SATARRDY. Для управления потоком приемник данных может потребовать временную при- остановку передачи, посылая примитивы HOLD. Во время приостановки пере- дающее устройство посылает примитивы HOLDA. Для продолжения передачи приемник перестает передавать HOLD. Эта приостановка применима только при передаче кадров DATA. Приемник должен запросить приостановку заранее, когда он еще способен принять 20 двойных слов. Бюджет управления потоком SATA рассчитан на непосредственное подключение устройства к инициатору ко- роткими кабелями. Длинные (суммарно до 10 м) кабели SAS и экспандеры, че- рез которые организуется туннель STP, могут вносить ощутимую задержку. Устройства SATA, в отличие от устройств SAS (и всех устройств SCSI), рассчи- таны на работу лишь с одним хостом. Целевое устройство протокола STP — мост STP/SATA — может работать и с несколькими инициаторами. Чтобы защитить устройство SATA от работы с несколькими инициаторами, используется меха- низм привязки (affiliation). Мост установит соединение с первым инициатором, который это соединение запросит, и привяжет этот мост (фактически, устройст- во SATA) к данному инициатору. Привязка будет удерживаться, пока не про- изойдет одно из следующих событий: ♦ будет выключено питание моста; ♦ соединение закроется специальным примитивом CLOSE (CLEAR AFFILIATION), посланным инициатором; ♦ управляющими функциями протокола SMP (PHY CONTROL) будет выпол- нен сброс (Reset или Clear) трансивера, к которому подключено устройство SAS; ♦ физический интерфейс устройства SATA начнет последовательность сброса.
11.10. Определение структуры домена 287 Инициатор, не привязанный к данному устройству, на запрос STP-соединения будет получать ответ OPEN REJECT (STP RESOURCES BUSY). В SATA определены примитивы запроса режимов пониженного энергопотребле- ния интерфейса (но не устройства SATA) — SATA PMREQ^P (режим Partial) и SATA_PMREQ_S (режим Slumber). Эти запросы в STP не поддерживаются, и устройства SATA будут получать на них ответ от инициатора SATA PMNAK. К сожалению, в SATA такой ответ имеет неоднозначное толкование: или «запрос не поддерживается», или «попытайся еще раз». Дисковые устройства для мо- бильных компьютеров могут довольно агрессивно пытаться использовать эти не- поддерживаемые функции. Устройства SATA запускают свой двигатель автоматически, как только в после- довательности сброса интерфейса будет выполнено согласование скорости. Для того чтобы все двигатели не запускались одновременно, трансивер, к которому подключено устройство SATA, при начальном включении не завершает процеду- ру согласования скорости. Об этом экспандер сообщает в ответе на запрос DISCOVER, а согласование скорости (и запуск двигателя) выполняется по запро- су PHY CONTROL с операцией LINK RESET. В SATA определены примитивы DM АТ, останавливающие передачу в режиме DMA. В протоколе STP эти примитивы могут не отрабатываться своевременно или не отрабатываться вообще, так что их использовать не рекомендуется. Огра- ничение на размер SATA-кадра в 8192 байт не является абсолютным: мосты, преобразующие параллельный интерфейс АТА в SATA, могут это ограничение нарушать (формировать более длинные кадры). В SATA нет требования провер- ки CRC до записи данных на носитель (правда, управляющие функции выпол- няются только после проверки CRC). Примитив SATA_SYNC всегда возвращает автомат состояния канального уровня в исходное состояние. 11.10. Определение структуры домена Структуру домена (дерево экспандеров и конечных устройств) определяет спе- циальное клиентское приложение-«разведчик» (discover), функционирующее на конечном устройстве SAS или в каком-либо экспандере. В процессе инициализа- ции интерфейсов (из кадра IDENTIFY) для каждого своего трансивера устрой- ству-разведчику становятся известными SAS-адрес и тип (конечное устройство, экспандер Е- или F-типа) подключенного к нему устройства SAS. К непосредст- венно подключенному устройству разведчик может обращаться сразу, до конфи- гурирования экспандеров, используя прямую маршрутизацию. К обнаруженному экспандеру разведчик первым делом посылает SMP-запрос REPORT GENERAL, по которому определяет число трансиверов Phy у экспандера и его свойства (самоконфигурируемость). Далее он посылает этому экспандеру запросы DISCOVER на каждый трансивер, определяя наличие и свойства подключенных к нему уст- ройств. По полученным ответам разведчик заполняет элементы таблиц маршру- тизации этого экспандера (если он не является самоконфигурируемым). Затем, пользуясь этими записями в таблицах, экспандер сможет провести SMP-соеди- нения от разведчика к каждому из обнаруженных партнеров данного экспандера.
288 Глава 11. Последовательный интерфейс для устройств SCSI — SAS Эти соединения нужны для посылок запросов REPORT GENERAL, а затем и DISCOVERY к обнаруженным экспандерам. Таким образом разведчик раскрыва- ет структуру уровень за уровнем, начиная от ближних к себе устройств и доби- раясь до всех конечных устройств домена. По ходу разведки он конфигурирует экспандеры, заполняя их таблицы маршрутизации. По окончании этого процесса весь домен становится прозрачным для установления любых соединений между любыми парами устройств. Разведчик (инициатор протокола SMP) получает список всех доступных устройств (их SAS-адресов). Целевым устройствам этот список не нужен — им приходится устанавливать соединения только с ранее вы- звавшими их инициаторами. Заниматься определением топологии могут и несколько инициаторов протокола SMP. Однако независимо от того, какой инициатор выполняет определение то- пологии, в конце этого процесса все таблицы маршрутизации должны содержать одни и те же записи на одних и тех же местах. Информация о структуре домена считается действительной до тех пор, пока не' получен широковещательный примитив BROADCAST (CHANGE). Этот примитив посылает экспандер, обнаруживший изменение конфигурации (подключение-от- ключение устройств). В примитиве не фигурирует идентификатор экспандера, так что конфигурационное ПО должно опросить все экспандеры SMP-запросом REPORT GENERAL. В ответе на этот запрос содержится счетчик посылок этого примитива данным экспандером (трансляции от соседей не считаются), Тот экс- пандер, у которого с момента прошлого опроса изменилось значение счетчика, и является источником примитива. Для этого экспандера необходимо выпол- нить запросы DISCOVER, чтобы определить новую топологию домена и перекон- фигурировать экспандеры (таблицы маршрутизации). Если в процессе разведки был получен примитив BROADCAST (CHANGE), разведку приходится повто- рять сначала.
ГЛАВА 12 Взаимодействие устройств SCSI через IP-сети — iSCSI Протокол iSCSI (Internet Small Computer System Interface) предназначен для взаи- модействия между устройствами хранения, хостами и клиентами в сетях хране- ния данных (SAN). В SAN сетевая инфраструктура позволяет использовать про- токол SCSI для высокоскоростного обмена данными на блочном (не файловом!) уровне между множеством узлов сети. Сети SAN предназначены для консолида- ции систем хранения данных, резервного копирования, кластеризации серверов, репликации данных, аварийного восстановления данных. Сети SAN географиче- ски могут быть распределены по множеству локальных (Local Area Network, LAN) и глобальных (Wide Area Network, WAN) сетей, основанных на различных тех- нологиях. Протокол iSCSI поддерживает надежное выполнение вышеприведен- ных функций с обеспечением требуемого качества обслуживания (Quality of Service, QoS). Протокол iSCSI полностью отвечает архитектурной клиент-серверной модели SAM (см. 9.2). Протокол iSCSI инкапсулирует команды, данные и блоки состоя- ния SCSI в сообщения, передаваемые между инициатором и целевым устройст- вом с помощью надежного транспорта TCP. Протокол iSCSI работает на промежуточном уровне: над этим уровнем распола- гается уровень SCSI, на котором генерируются и исполняются команды, генери- руются данные и информация о состоянии; под этим уровнем работает протокол TCP, обеспечивающий соединения с гарантированной доставкой потоков сооб- щений. Устройство iSCSI должно иметь средства соединения с IP-сетью (network entity), адресуемыми частями которых являются сетевые порталы (network portal), или просто порталы. Портал инициатора идентифицируется его IP-адресом; портал целевого устройства идентифицируется его IP-адресом и номером ТСР-порта, «слушающего» (listening port) сеть на предмет прихода запросов. Именно с пор- талом устанавливается каждое ТСР-соединение. Узел (node) iSCSI представляет один инициатор или целевое устройство SCSI. Узел идентифицируется своим уникальным iSCSI-именем, определяемым по специальным правилам; в дополнении к имени с узлом может быть связан псев- доним (alias), более удобный для пользователя. Одни и те же сетевые средства (порталы) могут использоваться более чем одним узлом iSCSI.
290 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI Сетевые средства устройства могут иметь более одного портала. Для того чтобы в один сеанс могло входить несколько транспортных соединений, организуются портальные группы (portal groups) — наборы порталов, коллективно используе- мых в сеансе. Каждый портал может принадлежать только одной портальной группе данного узла. В сеансе могут быть задействованы и не все порталы груп- пы. Портальная группа в узле идентифицируется 16-битным тегом портальной группы (target portal group tag). Портальные группы могут быть и у инициато- ров, и у целевых устройств, однако идентификация портальных групп в iSCSI требуется только для адресации целевых устройств. Идентификатор порта SCSI образуется из имени узла iSCSI и тега портальной группы. По TCP-соединениям передаются протокольные блоки iSCSI, различающиеся по назначению. Для исполнения SCSI-команд используются блоки, генерируемые и принимаемые уровнем SCSI, в которых содержатся: ♦ команды, пересылаемые от инициатбра к целевому устройству; ♦ информация о состоянии завершения команды, пересылаемая от целевого устройства к инициатору; ♦ данные, пересылаемые в обоих направлениях; ♦ сообщения о готовности целевого устройства к приему данных от инициатора; ♦ запросы (от инициатора) и ответы (от целевого устройства) для управления заданиями. Помимо вышеперечисленных блоков используются блоки со служебной инфор- мацией, связанной с уровнем iSCSI: ♦ запросы (от инициатора) и ответы (от целевого устройства) для входа-выхо- да, обнаружения устройств и управления параметрами протокола; ♦ холостые запросы и ответы для проверки соединения; ♦ запросы повторной передачи потерянных блоков; ♦ асинхронные сообщения о событиях, не связанных с заданиями. 12.1. Сеансы и соединения Протокол iSCSI организует среду доставки протокольных блоков SCSI между инициатором и целевым устройством с помощью одного или нескольких транс- портных TCP-соединений, по которым передаются протокольные блоки (Proto- col Data Unit, PDU) iSCSI. В iSCSI существует понятие сеанса (session) — связи инициатора и целевого устройства (соответствует связке I T в SAM, см. 9.2). Се- анс может быть образован одним или несколькими транспортными ТСР-соедине- ниями, установленными между данной парой узлов. В процессе работы к сеансу транспортные соединения могут как добавляться, так и удаляться. Для всех соединений сеанса целевое устройство выглядит как один образ (target image); также единственный образ (initiator image) существует и для инициатора. Все элементы, идентифицируемые инициатором (например, теги заданий), являются уникальными в сеансе независимо от соединения, по которому они доставляются. Инициаторы и целевые устройства должны поддер-
12.1. Сеансы и соединения 291 живать по крайней мере одно TCP-соединение, дополнительные соединения необязательны. Если в сеансе используется одно активное соединение, то для процедур восстановления при ошибках узлы должны иметь возможность устано- вить другое соединение. Идентификатор сеанса (Session ID, SSID) включает две части: ♦ часть, относящаяся к инициатору, — это идентификатор ISID, явно назначае- мый инициатором при входе; ♦ часть, относящаяся к целевому устройству, — это TSIH (Target Session Iden- tifying Handle), соответствующая тегу портальной группы. Тег портальной группы (TargetPortalGroupTag) назначается целевым устройством в соответствии с идентификатором портала целевого устройства (IP-адресом и номером TCP-порта), с которым устанавливается соединение. Этот тег целевое устройство сообщает инициатору в ответе на первый запрос в процедуре входа. Теги для разных порталов сообщаются целевым устройством и в ответ на запрос адресов и имен целевых узлов (SendTargets)} знание списков адресов и тегов по- зволяет инициатору определить возможности установления сеансов и соедине- ний с интересующим целевым узлом. Идентификатор соединения (Connection ID, CID) в сеансе назначает инициатор и использует его во время фазы входа (login) и выхода (logout). Инициатор с помощью идентификаторов определяет цель процедуры входа: ♦ создание нового сеанса с заданием нового значения ISID при TSIH=O и любом значении С ID; ♦ добавление соединения к существующему сеансу с заданием существующего значения ISID при TSIH=O и нового значения CID; ♦ восстановление соединения с заданием существующих значений ISID, TSIH и CID; ♦ восстановление сеанса с заданием существующего значения ISID при TSIH=O и любом значении CID. Иные сочетания идентификаторов приводят к отказу входа. Для любого запроса iSCSI ответы и иные связанные с ним протокольные блоки посылаются по тому же транспортному соединению. Если это соединение разо- рвется до завершения выполнения команды, привязка этой команды к иному со- единению выполняется явно процедурой восстановления. Привязка к соединению является покомандной, но не распространяется на зада- ния. Команды одного задания (из цепочки связанных команд) могут посылаться по разным соединениям сеанса. В iSCSI определено два типа сеансов: ♦ в нормальном сеансе можно выполнять команды; ♦ в разведывательном сеансе (discovery session) целевое устройство отвечает только на текстовые запросы SendTargets, по которым оно сообщает имена и адреса узлов, и запрос выхода (Logout) для закрытия данного сеанса. Тип се- анса выбирается при запросе входа (Login).
292 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI 12.2. Процедура входа — iSCSI Login Для того чтобы TCP-соединения можно было использовать для полноценной ра- боты протокола iSCSI, должна быть пройдена фаза входа — iSCSI Login, в ходе которой выполняется аутентификация участников соединения, согласуются па- раметры сеанса и соединение помечается как принадлежащее сеансу iSCSI. Се- анс для целевого устройства используется для идентификации всех его соедине- ний с определенным инициатором (связка 1_Т). Целевое устройство прослушивает известный TCP-порт (или иной порт), ожи- дая запроса соединения. Инициатор начинает процедуру входа, соединяясь с этим портом. В процедуре входа инициатор и целевое устройство должны вы- полнить взаимную аутентификацию, при этом они могут установить (и согласо- вать) для сеанса протокол защиты информации. Для защиты ТСР-соединения до выполнения процедуры входа может быть установлена защита протоколом IPSec. Фаза входа iSCSI Login состоит из последовательности запросов и ответов. После успеха взаимной аутентификации (если она требуется) и согласования парамет- ров сеанс переходит в полнофункциональную фазу (full feature phase), и инициа- тор может начинать посылку команд SCSI. До перехода в эту фазу допускается передача только протокольных блоков запросов и ответов входа {Login Request и Login Response), которые могут передаваться только в фазе входа. Блок запроса входа должен быть первым блоком, посылаемым в TCP-соединении; следующий блок запроса входа может передаваться только после закрытия соединения. Це- левое устройство, получившее в начале соединения блок, отличный от запроса входа, должно немедленно разорвать соединение. Если блок, отличный от запро- са входа, получен во время фазы входа, целевое устройство должно послать блок Login Reject и разорвать соединение. Если инициатор во время фазы входа полу- чит блок, отличный от ответа входа, он должен разорвать соединение. В начале диалога процедуры входа целевое устройство может сообщить иной адрес целе- вого узла, по которому следует установить соединение, и разорвать текущее со- единение. Сеанс входит в полнофункциональную фазу при успешном завершении фазы входа первого транспортного соединения. Как указывалось ранее, сеанс может состо- ять из нескольких соединений, устанавливаемых вслед за первым. Соединение находится в полнофункциональной фазе, когда сеанс, которому оно принадле- жит, находится в этой фазе и успешно пройдена фаза входа для данного соеди- нения. Соединение может выйти из полнофункциональной фазы (по блоку Logout). В полнофункциональной фазе инициатор может посылать команды SCSI к лю- бому логическому устройству (LU) целевого устройства, используя установлен- ный сеанс. При открытии сеанса указывается его назначение: ♦ рабочий сеанс предназначен для выполнения команд SCSI (при входе указы- вается SessionType=Normal и имя целевого узла обязательно); ♦ разведывательный сеанс предназначен для получения списка имен и адресов целевых узлов (SessionType=Discovery, имя целевого узла может не указываться).
12.3. Передача команд, данных и информации о состоянии 293 Соединение iSCSI может быть разорвано закрытием или сбросом транспортного соединения (сброс считается исключительным событием). Корректное закрытие TCP-соединения выполняется посылкой пакета с признаком завершения (TCP FIN) любым его участником, при этом соединение не должно находиться в пол- нофункциональной фазе. Целевое устройство может завершить полнофункцио- нальную фазу по своим внутренним событиям, но оно обязано объявить об этом посылкой блока асинхронного сообщения. Закрытие соединения при наличии незавершенных команд может потребовать выполнения процедур восстановле- ния. Перед закрытием соединения во время полнофункциональной фазы требу- ется очистка соединения, которая позволит инициатору и целевому устройству избежать получения устаревших блоков после процедур восстановления. 12.3. Передача команд, данных и информации о состоянии, управление заданиями Блоки с командами посылаются целевому устройству инициатором по его ини- циативе. Передачей данных и информации о состоянии в SCSI управляет целе- вое устройство; в iSCSI для повышения производительности (учитывая возмож- ные значительные задержки доставки сообщений) введены дополнительные соглашения. Здесь допускается «коллапс фаз» (phase-collapse) — совместная пе- редача команд и данных (от инициатора), как и данных (от целевого устройства) и информации о состоянии, а также посылка инициатором не ожидаемых дан- ных. Для корректной работы сеансов с несколькими соединениями в iSCSI ис- пользуется нумерация команд и посылок информации о состоянии и упорядочи- вание доставки данных. Команды нумеруются глобально для сеанса, нумерация команд обеспечивает их упорядоченную доставку iSCSI-прослойкой к SCSI-части целевого устройства при наличии множества соединений, а также управление потоком команд. Команды могут посылаться и с признаком немедленной доставки (на это указывает бит I в заголовке PDU запроса). Эти команды, в отличие от упорядоченных, попадают на исполнение в SCSI-часть целевого устройства сразу же, как только они рас- познаются iSCSI-прослойкой. Нумерация команд начинается с первого запроса Login первого установленного соединения сеанса. Поле CmdSN (32 бит) в PDU с командой, передаваемой инициатором, указывает номер очередной команды. Этот номер инкрементируется по определенным правилам (посылка команд с немедленной доставкой не вызывает инкремента номера). Сложность правил ну- мерации обусловлена поддержкой как целевых команд (например, чтения и за- писи), так и команд управления заданиями. При наличии множества соединений могут возникать ситуации, когда блоки PDU с командами управления задания- ми обгоняют PDU с собственно заданиями. В блоках PDU, посылаемых целе- вым устройством, поле ExpCmdSN (ожидаемый номер) указывает на подтвержде- ние приема всех команд с предшествующими номерами. В этих же блоках PDU посылается поле MaxCmdSN, задающее максимально допустимый (на данный мо- мент) номер посылаемой команды. Это поле предназначено для управления
294 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI потоком посылки команд; способность уровня iSCSI к поддержке очередей дос- тавки определяется значением (MaxCmdSN-ExpCmdSN+1). Данные к инициатору целевое устройство посылает по своей инициативе; дан- ные от инициатора оно запрашивает посылкой запросов R2T (Ready to Transfer). Помимо ожидаемых данных, посылаемых в ответ на блоки R2T, инициатор мо- жет посылать и не ожидаемые (unsolicited) данные (как пользовательские дан- ные, так и параметры команд). Неожидаемые данные могут посылаться как в блоках с командами iSCSI («непосредственные данные»), так и в отдельных бло- ках. Для непосредственных данных подразумевается, что они начинаются с ну- левого смещения буфера записи инициатора. Для остальных блоков с данными начальное смещение указывается явно в заголовке блока. Посылка неожидаемых данных для команд записи позволяет сократить задержки исполнения команд (не требуется ожидание первого блока R2T) и накладные расходы протокола. Предельный размер и способ посылки неожидаемых данных согласуются в фазе входа; остальные данные должны посылаться как ожидаемые. Целевое устройст- во при согласовании может запретить использование не ожидаемых данных (ра- ботать в режиме R2T Mode), Блоки с данными нумеруются последовательно (начиная с нуля) для каждой ко- манды (полем DataSN). Аналогично нумеруются и блоки R2T сообщений о готов- ности к передаче (полем R2TSN). В отличие от блоков команд и информации о со- стоянии, номера блоков данных и R2T не подтверждаются в полях обычных встречных пакетов. Блоки данных чтения могут подтверждаться по требованию с помощью специальной формы блоков SNACK. Блоки данных и R2T неявно подтверждаются состоянием выполнения команды. Поля DataSN и R2TSN позволя- ют инициатору обнаружить потери пакетов данных и R2T. Инициатор обязан отвечать на блоки R2T передачей данных; он не должен сле- дить за количеством переданных и принятых данных. Подсчетом оставшихся данных для пересылки занимается целевое устройство, его счетчики могут рас- ходиться со счетчиками инициатора (из-за ошибок передачи, повторов и воз- можного наложения сегментов). Привязка пакетов данных к командам осущест- вляется с помощью тегов. При использовании не ожидаемых данных порядок их посылки по каждому транспортному соединению должен соответствовать поряд- ку посылки команд по этому соединению (при этом возможно чередование ко- манд и данных). Инициатор помечает посылаемые команды тегами, уникальными в пределах се- анса. Целевое устройство метит своими (иными) тегами запросы ожидаемых данных, инициатор помещает эти теги в отправляемые данные. Теги заданий, идентифицирующих их в процессе выполнения, рассматриваются инициатором и целевым устройством в комбинации с номером логического устройства (LUN). Информацию о состоянии завершенной команды (SCSI Status) целевое устрой- ство передает в специальном блоке SCSI Response; для команд с вводом данных информация о состоянии может быть передана и в последнем блоке данных (если завершение не требует уточнения состояния). Все ответы целевого устройства на команды и запросы инициатора нумеруются полем StatSN, инкрементируемым по каждой из этих посылок (кроме запрошен-
12.4. Имена iSCSI 295 ных повторных передач этих посылок). Нумерация для каждого соединения се- анса своя, она начинается с ответа Login Response на первый запрос Login. Ини- циатор указывает номер подтвержденного ответа в поле ExpStatSN. Большая разница между значениями этих полей может являться признаком отказа в со- единении и поводом для запуска процедур восстановления. При управлении заданиями SCSI предполагается, что любое задание можно от- менить, сославшись на него по тегу; при отмене группы заданий существенен мо- мент подачи команды управления. При этом подразумевается синхронность опе- раций: после получения ответа на команду отмены (abort) инициатор не получит никаких сообщений от «убитых» заданий. В iSCSI инициаторы и целевые устройства взаимодействуют асинхронно через несколько соединений, так что требуются специальные протокольные механизмы, обеспечивающие видимость синхронности на асинхронной инфраструктуре. Для управления заданиями пре- дусмотрены специальные протокольные блоки запросов и ответов. 12.4. Имена iSCSI Для идентификации инициаторы и целевые устройства должны иметь имена. Эти имена не должны зависеть от местоположения (адреса) устройства — они играют важную роль во взаимной аутентификации инициаторов и целевых уст- ройств и используются для идентификации и управления ресурсами устройств хранения. Поскольку IP-сеть может быть глобальной (в мировом масштабе), то требуется и глобальная уникальность имен. Имена iSCSI связаны с узлами iSCSI, но не с сетевыми адаптерами, так что замена адаптеров не влечет за собой реконфигурирования ресурсов. Помимо имен узлы могут иметь и необязатель- ные псевдонимы, более удобные для конечных пользователей. Однако псевдоним является лишь дополнением к имени, которое обязательно и первично. Имена могут иметь длину до 223 символов, представляя собой строку UNICODE UTF-8, содержащую только печатные символы, включая буквы латинского алфавита и символы двоеточия (:), точки (.) и дефиса (-). Имена нечувствитель- ны к регистру. Для обеспечения уникальности имеется две формы построения имен: ♦ iqn (iSCSI Qualified Name) — имена, доступные владельцам доменных имен Интернета. При этом имя домена по прямому назначению (службами DNS) не используется, а является лишь ключом обеспечения уникальности. Имя в этом виде состоит из доменного имени в обратной записи, даты (месяца) по- лучения этого доменного имени и части, формируемой администратором ор- ганизации. Пример имени: iqn.2001 -04.com.example:storage:disk2.sys1-xyz. Здесь iqn является признаком данного формата, 2001-04 — самый первый месяц, пер- вого числа которого организация уже владела именем example.com (владелец имени домена может меняться, но имена устройств iSCSI останутся прежни- ми). После двоеточия, следующего за обратным именем com.example, следует произвольная часть имени (storage:disk1 .sys2-xyz), которая может быть (не- обязательно) отформатирована символами двоеточия (:), точки (.) и дефиса (-).
296 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI Самое короткое имя для устройства этой организации имеет вид iqn.2001-04. com.example. ♦ eui (IEEE EUI-64) — формат, доступный производителям оборудования, за- регистрированным в IEEE. Имя начинается с признака eui., за которым сле- дует шестнадцатеричное представление 64-битного уникального идентифика- тора. Пример имени — eui.02004567A425678D. 12.5. Обнаружение целевых узлов Для получения списка доступных целевых узлов iSCSI и их адресов инициатор использует текстовые запросы SendTargets. Эти запросы инициатор может посы- лать только после успешного открытия сеанса с целевым устройством (в полно- функциональной фазе). Запрос выглядит как текстовая строка: SendTargets=[All | <имя 1SCSI>] Параметр запроса Al 1 допустим только в разведывательном сеансе, он позволяет получить список имен и адресов узлов, доступных данному инициатору. Если в запросе задано имя (iSCSI паше), то ответом будет только список адресов для дан- ного имени. Если параметр запроса опущен (что допустимо в нормальном сеан- се), то ответом будет список адресов того узла, с которым установлен сеанс. Ответ на запрос состоит из списков записей целевых узлов (target record), каждая запись начинается строкой имени (TargetName=<HMfl iSCSI>), за которой следует ноль или более строк с адресом вида TargetAddress=<IP-aflpec или 0М8-имя>[:<ТСР-порт>],<Тег_портальной_группы> Если строка с адресом не передается, подразумевается адрес и номер ТСР-порта, с которым установлено соединение. Если в одной записи присутствует несколь- ко строк адреса, это означает, что с данным узлом можно установить несколько сеансов. Если есть строки с одинаковыми значениями тегов, то с узлом можно установить сеансы с множественными соединениями. Напомним, что тег отно- сится к имени целевого узла (в записях разных целевых узлов данного устройст- ва теги могут численно совпадать). В разведывательном сеансе на запрос АП может сообщаться список как всех целе- вых узлов, так и список узлов, разрешенных к использованию данному инициатору. После получения ответа в разведывательном сеансе инициатор может открыть рабочий сеанс с интересующим узлом (при этом он может и не закрывать разве- дывательный сеанс и продолжать посылать по нему запросы SendTargets). 12.6. Обнаружение ошибок и процедуры восстановления Протокол iSCSI имеет развитые средства обнаружения и обработки ошибок (error handling), которые весьма вероятны в IP-сетях, особенно глобальных. Транс- портное TCP-соединение не является абсолютно надежным, поэтому в iSCSI принят ряд мер повышения достоверности и надежности передач протокольных
12.6. Обнаружение ошибок и процедуры восстановления 297 блоков. Поверх встроенной в TCP защиты, основанной на контрольных суммах (и CRC-контроля нижележащих сетевых технологий), в iSCSI могут применять- ся свертки, они же дайджесты (digest) для заголовков и полей данных, пред- ставляющие собой CRC-коды, генерируемые по соглашениям iSCSI. Возможна ситуация, когда в принятом блоке PDU окажется некорректный дайджест, несмот- ря на его успешную доставку TCP-транспортом. Уровень iSCSI может (необяза- тельно) восстановить эти потерянные блоки. Ошибка дайджеста заголовка прото- кольного блока не позволяет использовать его поля, чтобы определить длину блока и, следовательно, положение начала следующего блока. Если не используются до- полнительные средства синхронизации (например, маркеры с фиксированными ин- тервалами), то при такой ошибке приходится разрывать соединение. Транспортное TCP-соединение в любой момент может быть разорвано (из-за от- каза), и iSCSI (необязательно) предоставляет возможность продолжения выпол- нения команды через иные соединения данного сеанса. Процедуры восстановления могут различаться в разных реализациях iSCSI, но при этом устройства заранее договариваются о применяемых процедурах восста- новления. Исходной предпосылкой является способность инициатора (SCSI плюс iSCSI) повторять передачу командного блока и данных записи, пока он не получит информацию состояния завершения команды. В свою очередь, целевое устройство может хранить переданные им данные (или повторно считать их с сервера устройства), а также информацию о состоянии выполнения команды и способно к повторной передаче этой информации вплоть до получения от ини- циатора подтверждения приема информации о состоянии. В iSCSI возможны следующие варианты восстановления, расположенные в по- рядке упрощения: ♦ внутри команды, то есть без повторной ее посылки; ♦ внутри соединения, то есть без^восстановления соединения но, возможно, с повторной посылкой команды; ♦ восстановление соединения, возможно, с повторной посылкой команды; ♦ восстановление сеанса. Средства восстановления организованы в иерархию, где каждый уровень реали- зует всё функции нижележащего и дополняет их своими возможностями. Уро- вень поддерживаемых процедур восстановления согласуется в фазе входа (пара- метр ErrorRecoveryLevel=n) и имеет следующие значения: ♦ 0 — восстановление сеанса; ♦ 1 — обработка ошибок свертки (внутри команды или внутри соединения) плюс возможности уровня 0; ♦ 2 — восстановление соединения плюс возможности уровня 1. Восстановление внутри команды Для целевого устройства, как и для инициатора, поводом для восстановления внутри команды является потеря блока данных, которая выявляется ими одним из трех способов:
298 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI ♦ обнаружение ошибки дайджеста данных; ♦ тайм-аут приема последовательности (нет данных или не пришел блок с при- знаком F — последний); ♦ обнаружение ошибки дайджеста заголовка, что опять-таки проявится в виде тайм-аута. Недостающие данные целевое устройство запрашивает посылкой блока R2T, инициатор — посылкой блока SNACK. Чтобы избежать «состязаний в усердии» восстановления, инициатор не должен запрашивать повторного блока R2T по- сылкой блока SNACK по причине срабатывания своего тайм-аута. Восстановление внутри соединения Для инициатора поводом для восстановления внутри соединения может быть длительное отсутствие подтверждения приема запроса, явного (по ExpCmdSN) или неявного (по приему данных и информации о состоянии). Инициатор может повторить посылку не подтвержденной команды. Другой повод — отсутствие нумерованного ответа (response), проявляющееся либо как ошибка дайджеста принятого блока, либо как прием блока ответа с номером, превышающим ожи- даемый. В обоих случаях инициатор запрашивает неполученный ответ с помо- щью запроса SNACK. Если целевое устройство долго не получает подтверждение ответа, оно может послать инициатору блок NOP-In, в котором содержится номер ответа, ожидаю- щего подтверждения. Это позволит инициатору обнаружить пропуск ответа и послать на него блок SNACK. Восстановление при потере соединения Инициатор, обнаруживший разрыв TCP-соединения, должен явно или неявно выполнить выход (logout) с указанием кода причины Remove the connection for recovery и переназначить незавершенные команды данного соединения на иные соединения, уже существующие или вновь устанавливаемые. Переназначение команд выполняется запросом управления заданиями Task reassign-, незавершен- ными командами инициатор считает все, на которые он не получил информацию об их состоянии завершения. Инициатор может получить асинхронное сообщение о том, что одно или все со- единения сеанса разорваны. В этом случае он должен выполнить вышеописан- ную процедуру восстановления для каждого из разорванных соединений. Целевое устройство, обнаружив разрыв TCP-соединения (но не последнего в дан- ном сеансе), должно послать инициатору асинхронное сообщение о разорванном соединении и ждать восстановительных действий инициатора. Восстановление сеанса Восстановление сеанса — это самое примитивное и грубое средство, которое должно применяться, если иные (вышеперечисленные) попытки восстановле- ния не привели к успеху. В этой процедуре закрываются все соединения сеанса
12.7. Безопасность 299 и сбрасываются все незавершенные команды как в инициаторе, так и в целевом устройстве. После этого новый сеанс начинается на новых соединениях. Про- стейшие устройства iSCSI могут выполнять это восстановление по любой ошиб- ке, обнаруженной протоколом iSCSI. 12.7. Безопасность Исторически сложилось так, что собственно устройства хранения данных не обла- дают встроенными средствами защиты (например, шифрования данных). Когда они устанавливаются внутри компьютера, заниматься злонамеренным съемом и подменой информации на их интерфейсе бессмысленно (это проще сделать с консоли компьютера). При подключении устройств к сетям хранения на базе Fibre Channel или SAS считается, что сама транспортная среда защищена от не- санкционированного доступа. Поскольку протокол iSCSI может использоваться в сетях, где возможен нелегальный доступ к передаваемым данным, в протоколе принят ряд мер обеспечения безопасности. Технически возможно использование iSCSI и с отключенными средствами безопасности, но это допустимо лишь при применении в качестве транспорта частных (и контролируемых) сетей. Средства безопасности iSCSI (iSCSI Security) состоят из двух частей, дополняющих друг друга: ♦ защита IP-пакетов, выполняемая средствами IPSec и обеспечивающая кон- фиденциальность, целостность данных, аутентификацию IP-портов, пред- ставляющих участников соединения; ♦ взаимная аутентификация инициатора и целевого устройства, выполняемая посылкой протокольных блоков запросов и ответов Login (In-band authenti- cation). Обсуждение вопросов, связанных с протоколом IPSec, относится к транспортно- му уровню сетей и выходит за рамки темы данной книги. Для протокола iSCSI защищенность (или незащищенность) транспортного соединения незаметна, в лю- бом случае соединение прозрачно. Способ открытия транспортного соединения (защищенного или нет) протоколом iSCSI не регламентируется. Во время выполнения входа (Login) целевое устройство обязательно должно вы- полнить аутентификацию инициатора — признать его подлинность (для предо- ставления доступа). Встречная аутентификация — признание инициатором под- линности устройства — необязательна. Аутентификация инициатора защищает от возможной безвозвратной потери (для всех) данных на устройстве хранения или предоставления их неавторизованным клиентам. Встречная аутентифика- ция защищает от ошибочного использования подложных устройств. Полная вза- имная аутентификация позволяет избежать обеих этих неприятностей. Метод аутентификации согласуется в фазе входа Login, согласование распростра- няется на соединение. Первый шаг по согласованию аутентификации выполняет инициатор, посылая в запросе Login ключ AuthMethod, определяющий метод (KRB5, SPKM1, SPKM2, SRP, CHAP, None). Далее кратко рассматриваются последова- тельности обменов для разных методов аутентификации. Если целевое устройст- во «не признает» инициатора, оно прекращает процедуру входа ответом Reject
300 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI с сообщением «Autentication Failure» или «Autorisation Failure». Если ответ аутентификации «не нравится» инициатору, он просто закрывает соединение. Из перечисленных метод CHAP должны поддерживать все инициаторы и целе- вые устройства, поддержка остальных методов необязательна. Помимо этих методов могут использоваться собственные методы, в них ключи начинаются символом Z, за которым следует идентификатор разработчика и ключа, постро- енный по определенным правилам. По умолчанию аутентификация отсутствует (AuthMethod=None). Сообщения, которые используются в аутентификации, представляют собой двоич- ные последовательности длиной не более 65 535 байт (ограничения на длину отно- сятся к исходному сообщению, а не к его представлению в закодированном виде). Аутентификация по методу CHAP CHAP (Challenge Handshake Authentication Protocol) — это протокол аутенти- фикации с требованием подтверждений, определенный в RFC 1994. В диалогах CHAP фигурирует имя N (текстовая строка), требование С (двоичная последова- тельность), ответ R (двоичная последовательность), идентификатор I (число) и номер алгоритма A, Al, А2 (число), определенные в RFC 1994. Из алгоритмов, определенных в этом документе, обязательна поддержка номера 5 (CHAP с MD5). Начиная процедуру аутентификации, инициатор посылает сообщение с предло- жением алгоритмов аутентификации Al, А2,... (в порядке предпочтения) СНАР_А=<А1.А2...> На это целевое устройство либо отвергает вход ответом Reject с сообщением «Autentication Failure», либо отвечает сообщением выбранного алгоритма А: СНАР_А=<А> СНАР_1=<1> СНАР_С=<С> Если инициатор не требует аутентификации целевого устройства, он продолжа- ет диалог сообщением CHAP_N=<N> CHAP_R=<R> Если аутентификация целевого устройства требуется, то сообщение будет иметь вид CHAP_N=<N> CHAP_R=<R> CHAP_I=<I> СНАР_С=<С> Если аутентификация инициатора не прошла, целевое устройство отвергает вход ответом Reject с сообщением «Autentication Failure». Если требовалась аутенти- фикация целевого устройства, то оно должно ответить сообщением CHAP_N=<N> CHAP_R=<R> Аутентификация по методу KRB5 Начиная процедуру аутентификации по методу KRB5 (Kerberos V5), инициатор посылает запрос КРВ_АР_РЕО=<сообщение запроса> В поле параметров сообщения может быть запрошена взаимная аутентифика- ция. Если аутентификация инициатора не прошла, целевое устройство отвергает
12.7. Безопасность 301 вход ответом Reject с сообщением «Autentication Failure». Если требовалась аутентификация целевого устройства, то оно должно ответить сообщением: КРВ_АР_РЕР=<сообщение ответа> Тело сообщения запроса (client message) и ответа (server’s response message) фор- мируется в соответствии с RFC 1510. По умолчанию (до конфигурирования ад- министратором) в качестве главного имени (principal name), используемого при формировании сообщения, указывается имя узла iSCSI (инициатора или целе- вого устройства), которому предшествует префикс «iscsi/». Аутентификация по методу SPKM Метод SPKM (Simple Public-Key Mechanism — простой механизм с публичным ключом) имеет две разновидности — SPKM1 и SPKM2. Начиная аутентифика- цию, инициатор посылает запрос SPKM_REQ=<nepBbin маркер инициатора> Если аутентификация инициатора не прошла, целевое устройство отвергает вход ответом Rejects сообщением «Autentication Failure». Если выбран метод SPKM1 или требуется взаимная аутентификация, целевое устройство отвечает 8РКМ_РЕР_Т1=<маркер целевого устройства> В ответ на это инициатор продолжает последовательность сообщением SPKM_REP_TI=<BTopofi маркер инициатора> Маркеры (token) формируются по правилам, определенным в RFC2025. Воз- можна ситуация, когда требуется посылка маркера ошибки SPKM ERROR, что может заставить партнера повторно послать последний маркер. Аутентификация по методу SRP При использовании метода SRP (Secure Remote Password — безопасный удален- ный пароль) инициатор, начиная аутентификацию, посылает сообщение SRP_U=<U> TargetAuth=Yes Если аутентификация целевого узла не требуется, то указывается аргумент TargetAuttHlo. Целевое устройство либо отвергает вход {Reject с сообщением «Autorisation Failure»), либо отвечает посылкой с предлагаемыми группами G1,G2... (в порядке предпочтения): SRP_GROUP=<G1,G2...> SRP_s=<s> Если инициатор не разорвет соединение, он должен послать ответ, выбирающий одну из предложенных групп: SRP_A=<A> SRP_GROUP=<G> Целевое устройство либо отвергает вход {Reject с сообщением «Autentication Failure»), либо отвечает посылкой SRP В=<В>
302 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI В ответ инициатор либо разрывает соединение, либо отвечает: SRP_M=<M> Если аутентификация инициатора не удалась, целевое устройство отвергает вход (Reject с сообщением «Autentication Failure»). Если аутентификация инициатора удалась, а в первой посылке была запрошена взаимная аутентификация, то целе- вое устройство отвечает: SRP_HM=<H(A | М | К)> Здесь применяются значения U, s, А, В, М и Н(А | М | К), определенные в RFC2945 (с использованием хэш-функций); G, Gl, G2... — это идентификаторы групп SRP; G, Gn и U — текстовые строки; s, А, В, М и Н(А | М | К) — двоичные значения (не более 1024 байт). 12.8. Синхронизация блоков Транспорт TCP обеспечивает гарантированную упорядоченную доставку потока байтов из точки в точку. Поток разбивается на сегменты, каждый сегмент пере- дается своим пакетом. В пакете указываются позиция данного сегмента в потоке (смещение) и его длина, что позволяет собрать поток из пакетов, пришедших даже не в том порядке, в котором они были отправлены. Возможность неупоря- доченного прихода сегментов является расплатой за повышение пропускной спо- собности сети с большой задержкой доставки путем применения метода «сколь- зящего окна» подтверждений: передающая сторона посылает очередной пакет, не дожидаясь подтверждения получения предыдущего. Какие-то пакеты могут быть потеряны, что и приводит к нарушению порядка доставки сегментов. Приемник отслеживает позицию в потоке — отсчитывает число уже принятых байтов. В традиционной реализации TCP, если смещение пришедшего пакета больше текущей позиции в принятом потоке, пакет временно сохраняется в проме- жуточном буфере и не отдается приложению, пока не будут приняты пакеты с предшествующими данными. Передача потерянных пакетов организуется через механизм подтверждений. Если пришел пакет со смещением, меньшим ожидае- мой позиции, он отбрасывается (это повторная доставка пакета, на который по- терялось подтверждение). В iSCSI поток состоит из протокольных блоков (PDU), в заголовке каждого бло- ка указывается его длина, по которой определяется позиция начала следующего протокольного блока. Длина блока кратна 4 байт. Блоки не привязаны к пакетам TCP: блок может начаться в любом месте пакета и занимать более одного пакета; в одном пакете может размещаться несколько блоков. При использовании тради- ционного механизма сборки сегментов потеря (или задержка доставки) пакета, содержащего заголовок PDU, не позволяет определить границы последующих блоков PDU, которые физически могут находиться уже в приемнике потока. В интерфейсе SCSI с его многозадачностью эти блоки в ряде случаев могут быть использованы до приема пропущенных. Для определения границ блоков в iSCSI могут применяться маркеры постоянных интервалов (Fixed Interval Markers, FIM), вводимые в поток. В маркере указывается смещение начала следующего
12.9. Форматы протокольных блоков 303 блока PDU относительно текущей позиции (то есть число байтов потока, кото- рые следует пропустить до начала блока). Маркеры представляют собой 8-байт- ные структуры, состоящие из двух копий 32-битного значения. Поскольку в iSCSI длина блока (и маркера) кратна 4 байт, два младших бита значения всегда нулевые. Даже если маркер окажется разрезанным границей пакетов, хотя бы одна из его копий будет доступна. Маркеры вставляются в поток с постоянным интервалом, отсчитываемым от момента установления соединения. Позиция маркера в потоке определяется как (MI + 8) х п - 8, где MI — фиксированный ин- тервал (в байтах), п — целое число. Для начальной фазы соединения имеется безмаркерная зона, длящаяся до завершения фазы Login, Маркеры не учитыва- ются при подсчете дайджестов протокольных блоков. Использование маркеров и интервал их введения согласуются в фазе входа для обоих направлений переда- чи: OFMarklnt — интервал для направления от инициатора, IFMarklnt — к инициа- тору. При согласовании интервал задается в 4-байтных единицах, по умолчанию принимается 2048 слов (М1=8192 байт). 12.9. Форматы протокольных блоков Формат протокольного блока iSCSI приведен на рис. 12.1. Все структуры выров- нены до границ 32-битного слова (при необходимости применяются байты-за- полнители). Протокольный блок начинается с сегмента основного заголовка BHS (Basic Header Structure), за которой могут следовать сегменты дополнительных заголовков AHS (Additional Header Structure). Заголовочная часть может сопро- вождаться необязательным дайджестом (header digest) — CRC-кодом, обеспечи- вающим дополнительно (сверх контрольных сумм TCP и CRC-контроля сете- вых кадров) контроль достоверности передачи. Сегмент данных (data segment) может также сопровождаться своим дайджестом (data digest); сегмент данных может и отсутствовать (если в основном заголовке указана его нулевая длина), при этом отсутствует и дайджест данных. Использование дайджестов согласует- ся в процедуре входа. ПРИМЕЧАНИЕ ------------------------------------------------ На последующих рисунках используется нумерация битов и байтов, принятая в iSCSI: байт с ну- левым номером передается самым первым, в двойном слове он является самым старшим. В байте нулевой бит является старшим. Формат сегмента основного заголовка протокольного блока iSCSI приведен на рис. 12.2, а, в нем фигурируют следующие поля: ♦ I — маркер немедленной доставки для PDU-запросов. ♦ Opcode — код операции iSCSI PDU, определяющий тип инкапсулируемого элемента SCSI (табл. 12.1). Коды делятся на две категории: коды инициатора, используемые в запросах, и коды целевых устройств (target opcodes), исполь- зуемые в ответах. ♦ F (Final) — признак последнего (или единственного) блока PDU в последова- тельности.
304 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI Байт 0 Байт 1 Байт 2 Байт 3 О|1|2|3|4|5|6|7О|1|2|3|4|5|6|7О 70 7 0 44 Basic Header Segment (BHS) 48 Additional Header Segment 1 (AHS) (необязательно) Additional Header Segment n (необязательно) Header-Digest (необязательно) Data Segment (необязательно) Data-Digest (необязательно) Рис. 12.1. Формат протокольного блока iSCSI ♦ Opcode-specific Fields — поля, значение которых зависят от кода операции. ♦ Total AHSLength — суммарная длина сегментов всех дополнительных заголов- ков (включая заполнители), измеряемая в 4-байтных словах. ♦ DataSegmentLength — длина сегмента данных (в байтах, не включая заполнители). ♦ LUN (Logical Unit Number) — номер логического устройства, 8 байт (если опе- рация относится не к логическому устройству, поле используется иначе). ♦ Initiator Task Tag — тег задания, назначенный инициатором (на время жизни задания). Байт 0 Байт 1 Байт 2 Байт 3 0 1 2 | 3 | 4 | 5 | 6 | 7 0 1|2|3|4|5|6|7 0 7 0 7 У/ I Opcode F Opcode-specific fields TotalAHSLength DataSegmentLength LUN или Opcode-specific fields Initiator Task Tag Opcode-specific fields 0 Байт 0 7|° Байт 1 7 0 Байт 2 7 о Байт 3 7 AHSLength AHSType AHS-Specific б Рис. 12.2. Форматы сегментов заголовков протокольных блоков iSCSI: а — основного (BHS), б — дополнительного (AHS) Сегмент дополнительного заголовка (AHS, рис. 12.2, б) начинается с поля длины этого сегмента (AHSLength, в байтах) и его типа (AHSType). В поле AHS-Specific мо- жет находиться, например, продолжение длинного (более 16 байт) дескриптора командного блока (AHSType=000001xxb) или длина ожидаемых данных чтения
12.9. Форматы протокольных блоков 305 для команд с двунаправленной передачей (AHSType=000010xxb). Остальные зна- чения AHSType зарезервированы. Таблица 12.1. Коды операций iSCSI Код Назначение Коды инициатора 0x00 NOP-Out — пробный запрос для проверки соединения 0x01 SCSI Command — запрос команды (посылка дескриптора командного блока) 0x02 SCSI Task Management function request — запрос управления заданиями 0x03 Login Request — запрос входа 0x04 Text Request — текстовый запрос 0x05 SCSI Data-out — данные для операций записи 0x06 Logout Request — запрос выхода 0x10 SNACK Request — запрос повтора определенного блока 0х1с-0х1е Vendor specific codes — специфичные коды Коды целевого устройства 0x20 NOP-In — ответ на запрос проверки соединения 0x21 SCSI Response — ответ команды (состояние выполнения, уточненное состоя- ние или иная ответная информация) 0x22 SCSI Task Management function response — ответ управления заданиями 0x23 Login Response — ответ входа 0x24 Text Response — текстовый ответ 0x25 SCSI Data-in — данные для операций чтения 0x26 Logout Response — подтверждение выхода 0x31 R2T (Ready То Transfer) — запрос на получение данных от инициатора 0x32 Asynchronous Message — асинхронное сообщение (для особых случаев) ОхЗс-ОхЗе Vendor specific codes — специфические коды Ox3f Reject — отказ выполнения запроса Блоки запросов и ответов команд В начале заголовка блока запроса команды (SCSI Command), показанного на рис. 12.3, содержатся биты-признаки немедленной доставки (I) и выполняемых передач данных — R (ввод, передача к инициатору), W (вывод, передача от ини- циатора) и поле ATTR — атрибуты задания (в соответствии с SAM: 0 — Untagged, 1 — Simple, 2 — Ordered, 3 — Head of Queue, 4 — АСА, см. 9.2). Бит F указывает на отсутствие не ожидаемых данных, посылаемых инициатором вслед за данным блоком. В специфичных полях заголовка содержится следующая информация:
306 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI ♦ CmdSN — номер команды (глобальный для сеанса). ♦ ExpStatSN — номер ожидаемого блока состояния (блоки с номерами по ExpStatSN-1 включительно считаются подтвержденными, счет идет по модулю 232). ♦ Expected Data Transfer Length — ожидаемая длина передачи данных. Для двуна- правленных команд здесь указывается длина выводимых данных, а длина вво- димых указывается в дополнительном заголовке. ♦ CDB — дескриптор командного блока SCSI; если он длиннее 16 байт, то остаток помещается в дополнительный заголовок. Байт 0 Байт 1 Байт 2 0 7 Байт 3 0 7 0 1 2l3l4l5lel7 0 1 2 |3|4|5|6|7 0 I 0x01 F R W 7//Л attr 4 TotalAHSLength DataSegmentLength 8 12 LUN 16 Initiator Task Tag 20 Expected Data Transfer Length 24 CmdSN 28 ExpStatSN 32 44 SCSI Command Descriptor Block (CDB) Рис. 12.3. Формат заголовка блока запроса команды Для команд с выводом данных за заголовком может следовать сегмент с неожи- даемыми данными. В начале заголовка блока ответа команды {SCSI Response), показанного на рис. 12.4, содержатся биты-признаки 0 (Overflow), U (Underrflow) избытка или недостатка данных; для двунаправленных команд эти признаки относятся к вы- воду, а биты о, и сигнализируют о тех же ситуациях при вводе. Поле Status несет код состояния (0, 2, 8, 18h, 28h, 30h, 40h, см. 9.2), оно действительно только при нулевом коде ответа. Поле Response содержит код ответа: 0 — Command Completed at Target, целевое устройство завершило исполнение команды, 1 — отказ в целе- вом устройстве, коды 80-FFh отданы производителям. В специфичных полях заголовка содержится следующая информация: ♦ SNACK Tag — копия тега последнего запроса повтора блока {SNACK, см. далее), принятого целевым устройством по данному соединению для той команды, на которую посылается ответ. Нулевое значение означает, что поле не исполь- зуется. Инициатор, посылавший SNACK, должен игнорировать состояние из всех получаемых ответов до тех пор, пока эта копия не совпадет с тегом по- следнего запроса повторного приема данных, посланного им по этому соеди- нению для данной команды. ♦ StatSN — последовательный номер ответа для данного соединения (посылка повторных ответов по запросам SNACK не увеличивает номер). ♦ ExpCmdSN — номер ожидаемой команды.
12.9. Форматы протокольных блоков 307 о 4 8 12 16 20 24 28 32 36 40 44 Байт 0 Байт 1 Байт 2 Байт 3 0 | 1 2 | 3 | 4 | 5 | 6 | 7 0 1 | 2 3 4 5 6 7 0 7 0 7 0x21 1 //// о u 0 U '// Response Status TotalAHSLength DataSegmentLength Initiator Task Tag SNACK Tag или резерв StatSN ExpCmdSN MaxCmdSN ExpDataSN или резерв Bidirectional Read Residual Count или резерв Residual Count или резерв Рис. 12.4. Формат заголовка блока ответа команды ♦ MaxCmdSN — максимальный номер ожидаемой команды. Если его значение рав- но ExpCmdSN-1, это означает, что целевое устройство не способно принять сле- дующую команду. Когда оно сможет принять команду, оно должно будет по- слать блок NOP-IN с новым значением MaxCmdSN. ♦ ExpDataSN — номер последнего блока Data-IN, посланного целевым устройством для данной команды. Поле не используется при ненулевом коде ответа и при ответе на команду записи. ♦ Residual Count (действителен, если установлен бит U или 0), Bidirectional Read Residual Count (действителен, если установлен бит и или о) — счетчики избы- точных или недостающих данных. В сегменте данных (если он ненулевой длины) содержится уточненная инфор- мация о состоянии (Sense Data), если поле Status=2 (CHECK CONDITION). Уточ- ненная информация о состоянии сообщает об ошибках, специфических для про- токола iSCSI: ♦ Unexpected unsolicited data — непредвиденные, не ожидаемые данные; ♦ Incorrect amount of Data — недопустимо большая длина не ожидаемых или ожидаемых данных; ♦ Protocol Service CRC error — ошибка CRC-контроля; ♦ SNACK rejected — запрос повторной передачи отвергнут. Блоки запросов и ответов управления заданиями В начале заголовка блока запроса управления заданиями (SCSI Task Management function request), показанного на рис. 12.5, может быть установлен признак не- медленной доставки (I), поле Function определяет управляющую функцию: ♦ 1 — Abort Task, снятие задания по тегу, указанному в поле Referenced Task Tag; ♦ 2 — Abort Task Set, снятие всех заданий в ЛУ, поставленных в данном сеансе;
308 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI ♦ 3 — Clear АСА, снятие задания и сброс режима АСА', ♦ 4 — Clear Task Set, сброс набора заданий; ♦ 5 — Logical Unit Reset, сброс логического устройства (и всех заданий и режи- мов); ♦ 6 — Target Warm Reset, «теплый» сброс целевого устройства (и всех его логи- ческих устройств): снятие всех заданий от данного инициатора; ♦ 7 — Target Cold Reset, «холодный» сброс целевого устройства (и всех его логи- ческих устройств): снятие всех заданий от данного инициатора и закрытие всех TCP-соединений (со всеми инициаторами); ♦ 8 — Task Reassign, переназначение привязки к соединению задания по тегу, указанному в поле Initiator Task Tag, на данное соединение и возобновление обменов для данной задачи. О 4 8 12 16 20 24 28 32 36 40 44 Байт 0 Байт 1 Байт 2 Байт 3 0 1 2 | 3 | 4 | 5 | 6 | 7 0 1|2|3|4|5|б|7 0 7 0 7 '// I 0x02 1 Function TotalAHSLength DataSegmentLength Logical Unit Number или резерв Initiator Task Tag Referenced Task Tag или Oxffifffff CmdSN ExpStatSN RefCmdSN или резерв ExpDataSN или резерв У////////////////////////////////////////////////^^^ Рис. 12.5. Формат заголовка блока запроса управления заданиями В специфичных полях заголовка содержится следующая информация: ♦ Referenced Task Tag — тег, по которому ссылаются на задание. ♦ CmdSN — последовательный номер команды. ♦ ExpStatSN — номер ожидаемого блока состояния. ♦ RefCmdSN — номер команды, на которую ссылается запрос снятия задания. Если запрос относится к команде, посланной с признаком немедленного выполне- ния, в данном поле устанавливается то же значение, что и CmdSN. В противном случае указывается номер команды для задания, идентифицируемого полем Referenced Task Tag. ♦ ExpDataSN — ожидаемый (для инициатора) номер блока данных чтения: 0 или число, большее номера (DataSN) последнего блока данных, подтвержденного инициатором, но не большее, чем DataSN+1 последнего блока, посланного ини- циатором. В командах без ввода данных поле не используется.
12.9. Форматы протокольных блоков 309 В начале заголовка блока ответа управления заданиями (SCSI Task Management function response), показанного на рис. 12.6, в поле Response указывается код от- вета: ♦ О — Function complete, успешное выполнение функции; ♦ 1 — Task does not exist, указанное задание не существует; ♦ 2 — LUN does not exist, указанное логическое устройство не существует; ♦ 3 — Task still allegiant, задание сохраняет привязанность к соединению; ♦ 4 — Task allegiance reassignment not supported, переназначение на другое соеди- нение не поддерживается; ♦ 5 — Task management function not supported, управляющая функция не поддер- живается; ♦ 6 — Function authorization failed, функция не авторизована; ♦ 255 — Function rejected, функция отвергнута. Байт О Байт 1 Байт 2 Байт 3 0x22 4 8 12 16 20 24 28 32 36 40 44 TotalAHSLength 0 7 Response 0 7 DataSegmentLength Initiator Task Tag _______________________________StatSN_____________________________ ExpCmdSN MaxCmdSN Рис. 12.6. Формат заголовка блока ответа управления заданиями В специфичных полях заголовка ответа содержится следующая информация: ♦ StatSN — номер ответа; ♦ ExpCmdSN — номер ожидаемой команды; ♦ MaxCmdSN — максимальный номер команды. Блоки для передачи данных Для передачи данных SCSI используются блоки с собственно данными (Data- Out, Data-In) и блоки сообщений о готовности к передаче (R2T). В заголовке блока передаваемых данных (SCSI Data-Out), показанном на рис. 12.7, бит F является признаком последнего блока не ожидаемых данных или послед- него блока последовательности, посылаемой в ответ на запрос R2T. В специфич- ных полях заголовка содержится следующая информация:
310 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI ♦ Target Transfer Tag — тег передачи, выполняемой в ответ на R2T (копия тега, посылаемого в R2T). Значение ffffffffh означает, что тег не используется. ♦ ExpStatSN — номер ожидаемого ответа. ♦ DataSN — номер блока данных в последовательности, идентифицируемой те- гом задания (для не ожидаемых данных) или посылаемой в ответ на R2T. ♦ Buffer Offset — смещение в буфере, относящееся к началу данного блока. Байт 0 Байт 1 Байт 2 Байт 3 0 1 2 | 3 | 4 | 5 | 6 | 7 0 1|2|3|4|5|6|7 0 7 0 7 7/7/ 0x05 TotalAHSLength DataSegmentLength Logical Unit Number или резерв Initiator Task Tag Target Transfer Tag или Oxffffffff ExpStatSN 7//////////////////////////////////////////////////////^^ DataSN Buffer Offset Рис. 12.7. Формат заголовка блока передаваемых данных В заголовке блока принимаемых данных (SCSI Data-In), показанном на рис. 12.8, бит F является признаком последнего блока последовательности. Бит А указыва- ет на необходимость подтверждения приема данного блока (устанавливается по определенным правилам лишь при ненулевом уровне восстановления после ошибок). Флаги избытка и недостатка данных (О, U) действительны только при установленном флаге S, означающем, что в данный блок включена и информа- ция о состоянии. Флаг S означает и действительность полей Status, StatSN и Residual Count (см. описание блока ответа команды). В специфичных полях заго- ловка содержится следующая информация: ♦ Target Transfer Tag — тег передачи, формируемый целевым устройством при установленном бите А. Значение ffffffffh означает, что тег не используется. ♦ ExpCmdSN — номер ожидаемой команды. ♦ MaxCmdSN — максимальный номер команды. ♦ DataSN — номер блока для данной команды. ♦ Buffer Offset — смещение в буфере, относящееся к началу данного блока. Блоком готовности к передаче (Ready to Transfer, R2T), заголовок которого пока- зан на рис. 12.9, целевое устройство запрашивает посылку данных от инициатора. Ответом на данный блок является один блок данных DATA-Out или их после- довательность (sequence); последний блок в последовательности (или единст- венный) идет с признаком F. Если в процедуре Login согласовано условие DataPDUInOrder=Yes, то блоки в последовательности должны идти с нарастаю-
12.9. Форматы протокольных блоков 311 щим смещением и не перекрывать друг друга. Если в процедуре Login согласова- но условие InitialR2T=No, то первую порцию данных записи инициатор посыла- ет, не дожидаясь R2T. Блоки R2T (с новым номером R2TSN) могут использоваться и для запроса потерянных данных (если блок пришел с некорректным дайдже- стом или превышен тайм-аут ожидания завершения последовательности). Байт 0 Байт 1 Байт 2 0 7 Байт 3 0 7 0 1 2|3|4|5|б|7 0 1 2 3 4 5 6 7 0 0x25 F A 0 0 0 О и s Status или резерв 4 TotalAHSLength DataSegmentLength 8 12 Logical Unit Number или резерв 16 Initiator Task Tag 20 Target Transfer Tag или Oxffifffff 24 StatSN или резерв 28 ExpCmdSN 32 MaxCmdSN 36 DataSN 40 Buffer Offset 44 Residual Count Рис. 12.8. Формат заголовка блока принимаемых данных Байт 0 Байт 1 Байт 2 0 7 Байт 3 0 7 °|/ 2|3|4|5|б|7 0 1 |2|3|4|5|б|7 0 Ж 0x31 1 4 TotalAHSLength DataSegmentLength 8 12 Logical Unit Number 16 Initiator Task Tag 20 Target Transfer Tag 24 StatSN 28 ExpCmdSN 32 MaxCmdSN 36 R2TSN 40 Buffer Offset 44 Desired Data Transfer Length Рис. 12.9. Формат заголовка блока готовности к передаче В заголовке используются следующие поля: ♦ Target Transfer Tag — тег передачи, идентифицирующий последовательность. Значение ffffffffh означает, что тег не используется. ♦ StatSN — номер следующего ответа для данного соединения. ♦ ExpCmdSN — номер ожидаемой команды. ♦ MaxCmdSN — максимальный номер команды. ♦ R2TSN — номер блока данных ввода для команды с указанным тегом задания.
312 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI ♦ Buffer Offset — смещение в буфере. ♦ Desired Data Transfer Length — ожидаемая длина данных. Асинхронные сообщения Асинхронные сообщения передаются целевым устройством в блоке Asynchronous Message, формат заголовка которого приведен на рис. 12.10. Поля в заголовке имеют следующее назначение: ♦ StatSN — номер сообщения. ♦ ExpCmdSN — номер ожидаемой команды. ♦ MaxCmdSN — максимальный номер команды. ♦ AsyncEvent — код события: • 0 — асинхронное событие SCSI от логического устройства, указанного в LUN (событие рписано в сегменте данных); • 1 — целевое устройство просит закрыть данное соединение; • 2 — целевое устройство сообщает о разрыве соединения (его CID находится в первом параметре), второй и третий параметры указывают время ожида- ния Time2Wait (в секундах) до переназначения и максимальное время после ожидания (Time2Retain), в течение которого может быть выполнено пере- назначение; • 3 — целевое устройство сообщает о разрыве всех соединений данного сеанса, второй и третий параметры указывают время ожидания Time2Wait до попытки установления новых соединений и максимальное время после ожидания (Time2Retain), в течение которого может быть выполнено переназначение; • 4 — целевое устройство запрашивает согласование параметров данного соединения (текстового запроса) не позже, чем через время, указанное в третьем параметре; • 255 — специфическое событие, код которого указан в AsyncVCode. О 4 8 12 16 20 24 28 32 36 40 44 Байт 0 Байт 1 Байт 2 Байт 3 °|1 2I3I4I5I6I7 0 1|2|з|4|5|б|7 0 7 0 7 %/// 0x32 1 TotalAHSLength DataSegmentLength Logical Unit Number или резерв OxflTfTfTf 7///////////////^^^^ StatSN ExpCmdSN MaxCmdSN . AsyncEvent | AsyncVCode Parameterl или резерв Parameter или резерв Parameters или резерв Рис. 12.10. Формат заголовка блока асинхронного сообщения
12.9. Форматы протокольных блоков 313 В сегменте данных, если он не нулевой длины, присутствуют уточненные данные о состоянии SCSI (после двухбайтного поля их длины); за ними могут присутст- вовать данные iSCSI. Блоки запросов и ответов входа и выхода Сразу после установления TCP-соединения инициатор должен начать процеду- ру входа Login, состоящую из серии запросов и ответов. Инициатор и целевое устройство должны последовательно пройти состояния 0 — SecurityNegotiation (согласование защиты данных), 1 — LoginOperationalNegotiation (согласование опе- рационных параметров), 3 — FullFeaturePhase (полнофункциональная фаза). Они переходят в следующее состояние, если в паре «запрос—ответ» установлены биты Т и совпадают поля NSG; если поля не совпадают, инициатор и целевое устройство должны закрыть TCP-соединение. Переход в состояние 3 с классом состояния О (успех) означает завершение процедуры входа и возможность посылки команд SCSI. Заголовки запросов и ответов входа не защищаются дайджестом. Формат заголовка блока запроса входа (Login Request) приведен на рис. 12.11. Этот запрос всегда имеет признак немедленной доставки. В начале заголовка бит Т (Transit) указывает на готовность инициатора к переходу в следующее состоя- ние. Бит С означает, что продолжение текста сообщения будет в следующем бло- ке. Поля CSG и NSG задают коды текущего и следующего состояний. Поля Versiоп- тах и Versi on-min задают максимальный и минимальный номера версий протоко- ла iSCSI, поддерживаемых инициатором. В специфичных полях заголовка со- держится следующая информация: ♦ ISID — компонент идентификатора сеанса, генерируемый инициатором. Это 6-байтное поле начинается с 2-битного поля типа формата ISID и заканчива- ется 16- или 24-битным квалификатором (целым числом). В зависимости от типа формата средняя часть формируется либо по определенным правилам (OUI-Format или EN-Format, содержащий номер IANA Enterprise Number), либо случайным образом. ♦ TSIH — компонент идентификатора сеанса, генерируемый целевым устройст- вом. Инициатор указывает это поле в первом запросе Login, для первого со- единения нового сеанса указывается TSIH=O, в ответ на этот запрос целевое устройство сообщит значение TSIH, которое инициатор должен будет исполь- зовать для входов по остальным соединениям данного сеанса. ♦ CID — уникальный идентификатор соединения в данном сеансе. Запрос Login при ненулевом значении TSIH и со значением С ID существующего соединения подразумевает действие Logout, за которым следует данный запрос Login. ♦ CmdSN — номер команды, начальный (для первого входа в сеансе) или текущий (на момент посылки данного запроса, если в сеансе уже передаются команды по другим соединениям). ♦ ExpStatSN — для первого запроса при рестарте соединения содержит значение ExpStatSN старого соединения. В последующих запросах это поле использует- ся для подтверждений ответов.
314 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI Байт О Байт 2 О 4 8 12 16 20 24 28 32 44 0x03 TotalAHSLength Байт 1 0 1 2 | 3 4 | 5 6 | 7 0 т I C CSGI NSGI DataSegmentLength Version-max о Version-min CID ISID TSIH Initiator Task Tag CmdSN ExpStatSN или резерв Рис. 12.11. Формат заголовка блока запроса входа В сегменте данных располагаются параметры входа в формате текстовых запро- сов (см. далее). Формат заголовка блока ответа входа (Login Response) приведен на рис. 12.12. В начале заголовка бит Т (Transit) указывает на готовность целевого устройства к переходу в следующее состояние. Бит С означает, что продолжение текста сооб- щения будет в следующем блоке. Поля CSG и NSG задают коды текущего и следую- щего состояний. Поля Version-max и Version-active задают максимальный номер версии протокола iSCSI, поддерживаемый целевым устройством и принятый (наибольший из доступных ему и инициатору). В специфичных полях заголовка содержится следующая информация: ♦ ISID — компонент идентификатора сеанса, генерируемый инициатором (взя- тый из запроса). ♦ TSIH — компонент идентификатора сеанса, генерируемый целевым устройст- вом. Во всех ответах, кроме финального ответа первого соединения нового се- анса, возвращается значение, посланное инициатором. В финальном ответе первого соединения нового сеанса целевое устройство посылает сгенериро- ванное им значение. ♦ StatSN — номер ответа (для данного соединения). ♦ ExpCmdSN — номер ожидаемой команды. ♦ MaxCmdSN — максимальный номер команды. ♦ Status-Class — класс состояния: • 0 — успех; • 1 — перенаправление (в сегменте данных находится новый адрес целевого устройства, по которому к нему следует обращаться); • 2 — запрос не может быть удовлетворен по вине инициатора (нет прав дос- тупа, нет такого устройства, невозможность установить указанное соеди- нение...); • 3 — ошибка целевого устройства.
12.9. Форматы протокольных блоков 315 ♦ Status-Detail — указание причины неуспеха (значение рассматривается в паре с классом). 0 Байт 0 0 1 2 | 3 | 4 | 5 | 6 | 7 Байт 1 0 1 2 | 3 4 | 5 6 | 7 Байт 2 0 7 Байт 3 0 7 С//у 0x23 Т СЖ CSG NSG Version-max Version-active 4 TotalAHSLength DataSegmentLength 8 12 ISID I | TSIH 16 ол Initiator Task Tag У//////////////////////////////////////////////////////////, ZU 24 ^/////////////////////////////////////////////////////////// StatSN 28 ExpCmdSN 32 MaxCmdSN 36 Status-Class | Status-Detail 40 44 Рис. 12.12. Формат заголовка блока ответа входа В заголовке запроса выхода (Logout Request), показанном на рис. 12.13, поле CmdSN имеет обычное значение, специфичные поля имеют следующее назначение: ♦ Reason Code причина выхода: • 0 — закрытие сеанса со снятием всех связанных с ним заданий; • 1 — закрытие соединения со снятием всех связанных с ним заданий; • 2 — закрытие соединения для переназначения его заданий на новое соеди- нение. ♦ CID — идентификатор закрываемого соединения. ♦ ExpStatSN — последнее значение номера ожидаемого состояния для закрывае- мого соединения. Байт О Байт 1 Байт 2 Байт 3 0x06 4 8 12 16 20 24 28 TotalAHSLength 2|3|4|5|6|70 70 7 Reason Code DataSegmentLength Initiator Task Tag СЮ ИЛИ резерв CmdSN ExpStatN Т 44 Рис. 12.13. Формат заголовка блока запроса выхода
316 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI В заголовке ответа на запрос выхода (Logout Response), показанном на рис. 12.14, поля Initiator Task Tag, StatSN, ExpCmdSN и MaxCmdSN имеют обычное значение, спе- цифичные поля имеют следующее назначение: ♦ Response — ответ: • 0 — успешный выход; • 1 — не найден указанный идентификатор С ID; • 2 — восстановление соединения не поддерживается; • 3 — очистка не прошла. ♦ Time2Wait — время ожидания (в секундах) до переназначения и максимальное время после ожидания (Time2Retain), в течение которого может быть выполне- но переназначение. Байт О Байт 1 Байт 2 Байт 3 0x26 4 8 12 24 28 ^///////////////^^^^^ TotalAHSLength Time2Wait Response DataSegmentLength Initiator Task Tag StatSN ExpCmdSN MaxCmdSN Time2Retain о 7 Рис. 12.14. Формат заголовка блока ответа на запрос выхода Блоки текстовых запросов и ответов Текстовые запросы и ответы используются для согласования различных пара- метров и возможных расширений протокола. Инициатор должен в любой мо- мент времени иметь посланный запрос, на который еще нет ответа. В начале заголовка блока текстового запроса (Text Request), показанного на рис. 12.15, может быть установлен признак немедленной доставки (I). Бит F ука- зывает на последний блок для данного запроса, бит С указывает на то, что за данным блоком следует продолжение запроса. Специфические поля в заголовке имеют следующее назначение: ♦ Target Transfer Tag — тег передачи. Новый запрос инициатор посылает с тегом ffffffffh; целевое устройство ответ метит тегом, значение которого инициа- тор использует в продолжении данного текстового диалога. Последний ответ в диалоге целевое устройство метит тегом ffffffffh. ♦ CmdSN — номер сообщения. ♦ ExpStatSN — номер ожидаемого ответа.
12.9. Форматы протокольных блоков 317 о 4 8 12 16 20 24 28 32 44 Байт 0 Байт 1 Байт 2 Байт 3 0 1 2 | 3 | 4 | 5 | 6 | 7 0 1 2 | 3 | 4 | 5 | 6 | 7 0 7 0 7 I 0x04 TotalAHSLength DataSegmentLength LUN или резерв Initiator Task Tag Target Transfer Tag или Oxflffffff CmdSN ExpStatSN Рис. 12.15. Формат заголовка блока текстового запроса В начале заголовка блока текстового ответа (Text Response), показанного на рис. 12.16, бит F указывает на последний блок для данного запроса, бит С указы- вает на то, что за данным блоком следует продолжение запроса. Специфические поля в заголовке имеют следующее назначение: ♦ Target Transfer Tag — тег передачи. ♦ StatSN — номер ответа. ♦ ExpCmdSN — номер ожидаемой команды. ♦ MaxCmdSN — максимальный номер команды. 0 4 8 12 16 20 24 28 32 36 44 Ш_____________ TotalAHSLength 0x24 012 3 4 5 6 70 7 DataSegmentLength LUN или резерв Initiator Task Tag или OxffffffTf Target Transfer Tag или OxffflTHT StatSN ExpCmdSN MaxCmdSN о Рис. 12.16. Формат заголовка блока текстового ответа В сегментах данных текстовых запросов и ответов содержатся пары вида <ключ>=<значение> Блоки запроса повтора и отказа запроса Блок запроса повтора (SNACK Request), показанный на рис. 12.17, использует- ся инициатором для запроса повторной передачи блоков от целевого устройства
318 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI или посылки явных подтверждений приема данных. Сегмент данных отсутству- ет. В заголовке поле ExpStatSN имеет обычное значение, специфичные поля име- ют следующее назначение: ♦ Туре — тип запроса: • 0 — Data/R2T SNACK, запрос одного или более блоков данных или R2T; • 1 — Status SNACK, запрос одного или более блоков ответов состояний; • 2 — DataACK, явное подтверждение приема блока данных (пришедших с установленным битом А); • 3 — R-Data SNACK, запрос повторной передачи данных с возможной ре- сегментацией. ♦ Initiator Task Tag — для запросов Status SNACK и DataACK содержит специ- альное значение ffffffffh, для остальных запросов — тег задания, к которому они относятся. ♦ BegRun — номер первого блока, запрашиваемого для повторной передачи (О для R-Data SNACK); для подтверждений — номер DataSN следующего ожи- даемого блока данных. ♦ RunLength — число блоков, которые должны быть переданы (0 означает запрос всех блоков с номерами, начиная с BegRun; если и BegRun=0, то повторно пере- даются все неподтвержденные блоки). о 4 8 12 16 20 24 28 32 36 40 44 °|1 Байт 0 2I3I4151617 0 Ба£ 1 |2|3 1Т 1 4 | 5 | 6 | 7 Байт 2 0 7 Байт 3 0 7 0x10 1 7/7/7/ Туре 77///7777////7777/7//777//7/ TotalAHSLength DataSegmentLength LUN или резерв Initiator Task Tag или Oxffffflff Target Transfer Tag или SNACK Tag или Oxffffffff RunLength Рис. 12.17. Формат заголовка блока запроса повтора Запросы повторных передач должны предшествовать подтверждению приема информации о состоянии команды. Повторно блоки передаются в том же виде, что и исходные (потерянные); запрос R-Data SNACK означает, что повторы должны быть посланы с учетом новой установленной длины сегмента. Блок отказа запроса {Reject), показанный на рис. 12.18, посылает целевое уст- ройство, указывая причину отказа в поле Reason: ♦ 01 — зарезервировано; ♦ 02 — ошибка дайджеста данных или заголовка;
12.9. Форматы протокольных блоков 319 ♦ 03 — отвергается SNACK] ♦ 04 — протокольная ошибка (запрос SNACK для уже подтвержденного состоя- ния); ♦ 05 — не поддерживаемая команда; ♦ 06 — слишком много команд с немедленной доставкой; ♦ 07 — задание в работе; ♦ 08 — недопустимое подтверждение данных; ♦ 09 — недопустимое поле блока; ♦ 0Ah — длинная операция отвергнута, невозможно сгенерировать тег Target Transfer Tag (недостаточно ресурсов); ♦ OBh — сброс согласований; ♦ ОСЬ — ожидание выхода {Logout). БайтО °I1I2I3I4I Байт 1 Байт 2 Байт 3 0 12 3 4 5 6 7 0 0x3f 4 8 12 16 24 28 32 36 40 44 TotalAHSLength 0 7 _______________V7777777/77 DataSegmentLength Oxffffffff StatSN ExpCmdSN MaxCmdSN DataSN/R2TSN или резерв Рис. 12.18. Формат заголовка блока отказа запроса Поле DataSN/R2TSN содержит номер следующего блока, который пошлет целевое устройство для данной команды (только для отвергнутого из-за протокольной ошибки запроса Data/R2T SNACK). Поля StatSN, ExpCmdSN и MaxCmdSN имеют обычное значение и не относятся к от- вергнутому запросу. В поле данных передается заголовок отвергнутого блока. Блоки пробных запросов и ответов Блоки пробных запросов и ответов NOP-Out (от инициатора) и NOP-In (от целе- вого устройства) используются для проверки соединения. Пробу может запра- шивать инициатор или целевое устройство (эти варианты различимы по исполь- зованию тегов). В сегменте данных располагаются пробные данные; в ответе на пробу возвращаются те же данные, что были посланы в запросе.
320 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI Блок NOP-Out (рис. 12.19) может иметь признак немедленной доставки (I). В за- головке поля CmdSN и ExpStatSN имеют обычное значение, специфичные поля име- ют следующее назначение: ♦ Initiator Task Tag — действительное значение тега, если пробу запрашивает инициатор и он ожидает ответ; значение ffffffffh устанавливается при ответе на пробу от целевого устройства или при запросе, на который не требуется ответ. ♦ Target Transfer Tag — ffffffffh, если пробу запрашивает инициатор; если это от- вет на пробу от целевого устройства, то возвращается значение тега, послан- ного целевым устройством. Байт О 151617 00 Байт 1 Байт 2 Байт 3 4 8 12 16 20 24 28 TotalAHSLength о DataSegmentLength LUN или резерв Initiator Task Tag или Oxffffffff Target Transfer Tag или Oxffffffff CmdSN ExpStatSN о 7 Рис. 12.19. Формат заголовка блока NOP-Out В заголовке блока NOP-In (рис. 12.20) поля ExpCmdSN и MaxCmdSN имеют обычное значение, специфичные поля имеют следующее назначение: ♦ Initiator Task Tag — ffffffffh, если пробу запрашивает целевое устройство; если это ответ на пробу от инициатора, то возвращается значение тега, посланного целевым устройством. 0 4 8 12 16 20 24 28 32 36 44 Байт 0 о|1 2|з|4|5|б|7 Байт 1 Байт 2 Байт 3 01|г|з|4|5|б|70 70 7 0x20 TotalAHSLength DataSegmentLength LUN или резерв Initiator Task Tag или Oxffffffff Target Transfer Tag или Oxffffffff StatSN ExpCmdSN MaxCmdSN Рис. 12.20. Формат заголовка блока NOP-In
12.10. Согласование параметров протокола iSCSI 321 ♦ Target Transfer Tag — действительное значение тега, если пробу запрашивает целевое устройство и оно ожидает ответ; значение ffffffffh устанавливается при ответе на пробу от инициатора или при запросе, на который не требуется ответ. ♦ StatSN — номер следующего блока состояния (не увеличивается, если Initiator Task Tag=ffffffffh). ♦ LUN — должно содержать корректное значение, если используется действитель- ный тег Initiator Task Tag. 12.10. Согласование параметров протокола iSCSI Ряд параметров протокола iSCSI подлежит согласованию или объявлению. Пара- метры передаются в текстовом виде парами <ключ>=<значение>, каждая пара завер- шается символом Null (00h). Эти пары в фазе входа размещаются в сегментах данных запросов-ответов входа, в полнофункциональной фазе — в сегментах данных текстовых запросов. Если пары параметров, подлежащих согласованию или объявлению, не умещаются в одном блоке, то в заголовке блока устанавли- вается бит С и сообщение продолжается в следующем блоке. Последний блок по- сылается с признаком F. На получение блока с признаком С инициатор или целе- вое устройство посылает подтверждение приема — блок ответа с нулевой длиной сегмента данных. Ответное сообщение согласования (с ненулевой длиной дан- ных) посылается только в ответ на последний блок сообщения (с признаком F, он может быть и единственным). Параметры могут быть различными по форма- ту: двоичными (Yes или No), строковыми, численными (с разными диапазонами значений, десятичными, шестнадцатеричными). Буквенные значения чувстви- тельны к регистру. Параметры разделяются на декларативные и согласуемые. Декларативные параметры только объявляются инициатором или целевым уст- ройством и не требуют согласования. Согласование параметров представляет собой диалог, в котором сторона, начи- нающая согласование (это может быть и инициатор, и целевое устройство), по- сылает ключ со своим предложением значений, а отвечающая сторона — тот же ключ со своим предложением. Предложения посылаются в виде единственного значения, диапазона значений (только для числового параметра) или списка зна- чений (разделенных запятыми). В списке значения располагаются в порядке убывания предпочтений. Ответом должно быть конкретное значение для данно- го ключа, которое и будет считаться согласованным параметром для обеих сто- рон диалога. Вместо значения параметра в ответе могут быть зарезервированные слова: ♦ Reject — предложение отвергнуто (неприемлемое значение параметра); ♦ Irrelevant — предложение неуместно (этот параметр в данной фазе согласова- нию не подлежит); ♦ NotUnderstood — неизвестный ключ параметра. Зарезервированное слово None (в предложении и ответе) означает, что функция не используется.
322 Глава 12. Взаимодействие устройств SCSI через IP-сети — iSCSI Ключи, характеристики и назначение параметров приведены в табл. 12.2. Графа «Характеристики» в сокращенном виде определяет применимость ключа. Пер- вая часть задает фазу, в которой ключ применим: АН — в любой, LO — только в Login, Ю — только в первом запросе (ответе) Login, FFPO — только в полно- функциональной фазе. Вторая часть определяет сторону, посылающую данный ключ: I — инициатор, Т — целевое устройство, IT — оба. Третья часть (если при- сутствует) задает область действия параметра: СО — только данное соединение, SW — весь сеанс. Таблица 12.2. Ключи параметров iSCSI Ключ Характеристики Назначение HeaderDigest, DataDigest IO-IT-CO Согласование использования дайджестов: CRC32C или None (по умолчанию) MaxConnections LO-IT-SW Согласование максимального числа соеди- нений в сеансе: от 1 (по умолчанию) до 65 535 включительно. Неуместно в< разведы- вательном сеансе SendTargets FFPO-I-SW Запрос сообщения списка целевых узлов TargetName IO-I-SW, FFPO-T-SW Имя целевого узла (см. 12.4) InitiatorName IO-I-SW Объявление имени инициатора (в первом запросе входа каждого соединения) TargetAlias AII-T-SW Объявление псевдонима целевого узла InitiatorAlias AII-I-SW Объявление псевдонима инициатора TargetAddress AII-T-SW Объявление адреса целевого узла TargetPortalGroupTag IO-T-SW Объявление тега портальной группы lnitialR2T LO-IT-SW Согласование необходимости использования запроса R2T для посылки первой порции данных записи: Yes (по умолчанию) или No ImmediateData LO-IT-SW Согласование возможности посылки непо- средственных данных: Yes (по умолчанию) или No MaxRecvDataSegmen tLength AII-IT-CO Объявление максимального размера сегмен- та принимаемых данных: от 512 до 224 - 1 включительно (по умолчанию — 8192) MaxBurstLength LO-IT-SW Согласование максимального размера по- следовательности данных: от 512 до 224 - 1 включительно (по умолчанию — 262 144) FirstBurstLength LO-IT-SW Согласование максимального размера не ожидаемых данных: от 512 до 224 - 1 включи- тельно (по умолчанию — 65 536)
12.10. Согласование параметров протокола iSCSI 323 Ключ Характеристики Назначение DefaultTime2Wait LO-IT-SW Согласование времени ожидания до явного или неявного выхода или переназначения ак- тивных задач при неожиданном разрыве со- единения: от 0 до 3600 с включительно (по умолчанию — 2 с) DefaultTime2Retain LO-IT-SW Согласование времени (после периода ожи- дания), в течение которого возможно пере- назначение активных задач: от 0 до 3600 с включительно (по умолчанию — 20 с). Значе- ние 0 означает невозможность переназначе- ния MaxOutstandingR2T LO-IT-SW Согласование максимального числа необслу- женных запросов R2T для каждого задания: от 1 (по умолчанию) до 65 535 включительно DataPDUInOrder LO-IT-SW Согласование требования к упорядоченности сегментов данных внутри последовательно- стей: Yes (по умолчанию) или No DataSequencelnOrder LO-IT-SW Согласование требования к упорядоченности передачи последовательностей данных: Yes (по умолчанию) или No. При выборе значе- ния Yes целевое устройство может повторить только последний запрос R2T, а инициатор может запросить повтор только последней последовательности ErrorRecoveryLevel LO-IT-SW Согласование уровня восстановления: от 0 (по умолчанию) до 2 включительно SessionType LO-I-SW Объявление типа сеанса: Normal (по умолча- нию) или Discovery Х#<имя ключа, заре- гистрированного^ Х-<имя не регистри- рованного ключа> All-IT Расширение для введения зарегистрирован- ных (в IANA) или не регистрированных клю- чей (дополнительных параметров) AuthMethod LO-IT-CO Согласование метода аутентификации: KRB5, SPKM1, SPKM2, SRP, CHAP, None (по умолчанию)
ГЛАВА 13 Интерфейс Fibre Channel Fibre Channel (FC) — интерфейс высокоскоростных коммуникаций между ком- пьютерами и периферийным оборудованием, широко используемый в сетях хра- нения данных (SAN). Интерфейс Fibre Channel сочетает в себе «канальные» черты интерфейсов устройств хранения, включая высокую пропускную способность, малые задержки доставки, высокую надежность передачи, и черты сетевых тех- нологий, в том числе возможность подключения большого количества устройств, возможность передачи на большие расстояния, наличие средств управления и диагностики. История Fibre Channel началась в 1988 г., с 1994 г. это — стандарт ANSI, кото- рым занимается комитет NCITS Т11. В интерфейсе имеет место последователь- ная передача данных в виде пакетов. Первоначально интерфейс предназначался только для оптоволокна (Fiber), позже ввели медный кабель и в связи с этой уни- версальностью изменили написание названия (Fibre) на европейский манер. Ба- зовая (называемая также полной) скорость передачи данных в интерфейсе — 1,0625 Гбит/с, что с учетом накладных расходов пакетного протокола и кодиро- вания 8В/10В обеспечивает скорость передачи полезных данных 100 Мбайт/с. Помимо базовой скорости, определен ряд более высоких (200, 400, 800 и 1200 Мбайт/с) и меньших (50, 25 и 12,5 Мбайт/с) скоростей. В интерфейсе име- ется возможность выбора топологии соединений: двухточечное соединение, кольцевая топология (FC-AL) и топология с коммутационной фабрикой (FC- SW). Среда передачи в основном определяется требуемым расстоянием между соединяемыми устройствами: медный кабель — для коротких (до 60 м) дистан- ций, многомодовое волокно — для средних (до 500 м), одномодовое оптоволок- но — для дальних (до 10 км). Наиболее широко FC применяется для устройств хранения в качестве транспортного средства протокола SCSI. Здесь основные преимущества — высокая скорость, а также возможность передачи на большие расстояние и подключения большего числа устройств, чем в традиционном ин- терфейсе SCSI. В настоящее время широко используются скорости 100 и 200 Мбайт/с (1,0625 и 2,125 Гбит/с); там, где требуется более высокая произво- дительность, используется скорость 10 Гбит/с (только оптические кабели). По- скольку SCSI применяется для различных классов устройств (не только уст- ройств хранения), Fibre Channel тоже подходит для разнообразных соединений. Это могут быть и соединение процессорных блоков, и подключение принтеров (без встроенных принт-серверов), и мультимедийные соединения.
13.1. Архитектура стандарта Fibre Channel 325 Интерфейс Fibre Channel позволяет использовать общую физическую среду пе- редачи для общепринятых верхнеуровневых протоколов (Upper Layer Protocol, ULP) сетевых и канальных технологий. Здесь под каналами подразумеваются относительно постоянные (статичные) соединения, устанавливаемые, как прави- ло, между компьютерами и периферийным оборудованием (устройствами хране- ния данных). При этом число компьютеров и устройств относительно небольшое (десятки). Типичным примером использования каналов является интерфейс SCSI. Компьютерные сети — это объединение значительного количества узлов, между которыми обмен информацией непредсказуем, так что организовывать каналы между какими-то парами нецелесообразно. Из сетевых протоколов наи- более широкое применение получил IP, который традиционно используют на технологиях Ethernet, Token Ring и FDDI. Построение сетей на основе Fibre Channel само по себе особых преимуществ не дает (слишком дорогое оборудова- ние), но при применении FC для устройств хранения позволяет в ряде случаев отказаться от дополнительной инфраструктуры локальной сети. 13.1. Архитектура стандарта Fibre Channel Интерфейс FC описывается многоуровневым набором протоколов (рис. 13.1). ♦ FC-0 — спецификации среды передачи, сигналов, приемников и передатчи- ков. ♦ FC-1 — кодирование символов с обнаружением ошибок (8В/10В), управле- ние каналом. ♦ FC-2 — разбиение информационных блоков верхних протоколов на последо- вательности (sequence) и кадры (frame), определение формата кадра, управ- ление последовательностями и обменами, управление потоком, классы сервиса, подключение/отключение (Login/Logout), топологии, сегментация и обрат- ная сборка блоков данных. ♦ FC-3 — уровень-прослойка, позволяющий включать дополнительные функ- ции. При необходимости здесь могут выполняться сжатие и шифрование дан- ных, аутентификация и прочие специфические функции (на усмотрение раз- работчиков). Пока что уровень только определяет варианты использования множества портов для одного узла: • Striping — использование связки портов для умножения пропускной спо- собности; • Hunt group — возможность группе портов отвечать на псевдонимы адреса, снижает шанс получения отказа запроса из-за занятости порта узла; • Multicast — групповая передача, доставка одной передачи множеству пор- тов назначения. ♦ FC-4 — отображение протоколов верхних уровней (ULP mapping) в обмены по FC: SCSI, IP, HIPPI (High Performance Parallel Interface), ATM-AAL5, IPI-3 (Intelligent Peripheral Interface), SBCCS (Single Byte Command Code Sets) и др.
326 Глава 13. Интерфейс Fibre Channel Канальные приложения Сетевые приложения -------------------------1 I-------------------1 FC-4 | IPI | | SCSI | | HIPPI | |SBC CS| | 802.2 | | IP | | ATM | FC-3 | Общие сервисы | FC-2 | Протокол обмена кадрами и управление потоком FC-1 [ Кодирование/декодирование FC-PH FC-О 1133 Мбит/с | | 266 Мбит/с~] | 531 Мбит/с~] 11062 Мбит/с] Рис. 13.1. Архитектурная модель Fibre Channel Распределение по уровням не соответствует семиуровневой модели взаимодей- ствия открытых систем (Open System Interconnect, OSI) ISO. FC-0 и FC-1 в nape примерно соответствуют физическому уровню OSI. FC-2 решает задачи под- уровня МАС канального уровня OSI. FC-3 уровнем (в понимании OSI) как та- ковым не является. Уровень FC-4 подводит вышеописанные уровни к выполне- нию функций транспортного уровня OSI. Спецификации Fibre Channel существуют в виде большого числа документов, часть из которых оформлены как стандарты ANSI. Основополагающим является документ FC-PH (ANSI Х3.230-1994, Fibre Chan- nel — Physical and Signaling Interface), в котором определены уровни FC-0, FC-1 и FC-2. Дополнительные возможности этих уровней определены в FC-PH-2 (ANSI ХЗ.297-1997). В новом виде эти спецификации определены в FC-FS (Fibre Channel — Framing and Signaling, 2003 г.), ведется работа над новым документом FC-FS-2. Документ FC-AL (ANSI ХЗ.272-1996, Fibre Channel — Arbitrated Loop) определя- ет поведение устройства в кольцевой топологии (арбитражном кольце). Этот ва- риант топологии появился уже после публикации FC-PH, поэтому и стал от- дельным стандартом. Его развитие — FC-AL-2 (1999 г.) и проект FC-AL-3. 13.2. Топология и типы портов Интерфейс FC допускает различные варианты топологии (рис. 13.2): ♦ Двухточечное (point-to-point) соединение — самый простой вариант выделен- ного интерфейса для соединения двух узлов (например, компьютера и уст- ройства хранения). Это самый дешевый и высокопроизводительный вариант соединения с интерфейсом Fibre Channel, применяемый в тех случаях, когда увеличение числа устройств не предвидится. ♦ FC-AL, арбитражное кольцо (arbitrated loop) — объединение до 126 узлов без какого-либо дополнительного оборудования (каждый узел играет роль повто- рителя). Среда передачи разделяется между всеми узлами, каждому из кото- рых в среднем достается лишь часть пропускной способности интерфейса. В любой момент времени возможна передача данных только для одной пары узлов, передача происходит на номинальной скорости интерфейса. Адреса
13.2. Топология и типы портов 327 узлов назначаются автоматически во время инициализации кольца. Кольцо может быть организовано с применением относительно простых концентра- торов, или хабов (hub), напоминающих концентраторы FDDI или Token Ring. Все узлы кольца работают на одной скорости и, как правило, должны использовать однотипные кабели. При большой длине кольца задержки в кабеле и узлах (при их большом числе) приводят к большим издержкам вре- мени на арбитраж — для получения доступа сигнал запроса арбитража дол- жен сделать полный круг. По некоторым оценкам, кольцо в плане пропуск- ной способности эффективно при числе узлов до 30 и длине до 100 м, при дальнейшем увеличении размеров будет заметно снижение эффективной производительности. Однако если требуется большое пространственное раз- несение устройств, то FC-AL сохраняет работоспособность (пусть и со сни- женной производительностью) и при полном числе узлов (126), удаленных друг от друга по кольцу на 10 км. ♦ FC-SW, коммутационная фабрика1 (switch fabric) — объединение до 224 узлов с помощью одного или нескольких связанных между собой коммутаторов, обеспечивающих неблокируемые соединения между любыми парами узлов. Среда передачи разделяемой не является, одновременно возможен обмен дан- ными между несколькими парами узлов. Узлы могут работать на разных ско- ростях и подключаться разнотипными кабелями. Фабрика обеспечивает назначение идентификатора естественного адреса (S_ID) каждому подклю- чаемому к ней узлу. Фабрика выполняет функции серверов группового веща- ния, широковещания и псевдонимов, а также средства обеспечения классов передач и сервера каталогов. Соединение через фабрику обеспечивает под- ключение самого большого (для FC) числа узлов с самой высокой суммарной пропускной способностью. ♦ Смешанная топология — фабрика, к которой подключаются конечные узлы и кольца. Для реализации этой топологии фабрика должна иметь FL-порты (см. далее). Кольца и FL-порты могут быть частными (private) и публичными (public). Публичные кольца и порты имеют связь с фабрикой, частные — нет, причем частный FL-порт может находиться в публичном кольце. FC-порты различаются по назначению, среде передачи и поддерживаемым ско- ростям. По назначению можно выделить: ♦ порт конечного узла, N-nopm (например, компьютера или дискового накопи- теля); ♦ порт фабрики (коммутатора), F-nopm, к которому можно подключать конеч- ный узел; ♦ порт для соединения коммутатора с другим коммутатором, Е-порт — этот порт не обязательно должен поддерживать стандарт FC (на усмотрение про- изводителя оборудования для фабрики), поскольку для подключения конеч- ных узлов не он требуется; 1 Слово «fabric» можно перевести и как «структура» или «архитектура» (связанных пор- тов), однако для удобства дальнейшего использования остановимся на простой трансли- терации — «фабрика».
328 Глава 13. Интерфейс Fibre Channel Рис. 13.2. Варианты топологии: а — двухточечная топология, б — физическое кольцо, в — логическое кольцо, г — смешанная топология ♦ универсальный порт фабрики, G-nopm, который может выступать как F-порт и как Е-порт; ♦ порты узлов и коммутаторов, способные работать с арбитражным кольцом: NL-nopm, FL-nopm и GL-nopm. 13.3. Канал передачи данных (FC-PH, FC-FS) «Лицо» Fibre Channel для вышестоящих протоколов в основном определяют его уровни FC-0...FC-2, описанные в спецификации FC-PH, а затем в FC-FS. Среда и скорости передачи (FC-O) Интерфейс FC допускает многообразие скоростей и сред передачи. Физический уровень интерфейса — кабели, коннекторы и приемопередатчики — описан в FC-0. Базовой, или полной, скоростью (full speed) считается 1,0625 Гбит/с, что при ко- дировании 8В/10В и учете накладных расходов на заголовки и обрамление кад- ров дает скорость передачи данных 100 Мбайт/с. Помимо полной определены ряд более низких скоростей — half speed, quarter speed и eighth speed (50, 25 и 12,5 Мбайт/с, или 531, 266 и 133 Мбит/с соответственно), а также двойная и че- тырехкратная скорости — double speed и quadruple speed (200 и 400 Мбайт/с, или 2,126 и 4,252 Гбит/с). Физический уровень должен обеспечивать уровень бито- вых ошибок не более 10"12 — на полной скорости это не более одной битовой ошибки за 16 минут. В 10-гигабитной версии 10GFC приемопередатчики могут работать на скоростях 1,06, 2,12, 4,25 и 10,2 Гбит/с. Здесь изменена схема кодирования — вместо 8В/10В применяется кодирование 64b/66b (8 байт пересылаются 66-битным символом).
13.3. Канал передачи данных (FC-PH, FC-FS) 329 В электрическом интерфейсе (EL) используются дифференциальные сигналы с уровнями ECL или PECL (ЭСЛ или псевдоЭСЛ). Сигналы описываются до- вольно сложным набором параметров, размах выходного дифференциального сигнала составляет 0,6-2 В. Приемник и передатчик связаны только по перемен- ному току (AC-Coupled), разделительные конденсаторы стоят на стороне пере- датчика. Кабели имеют линейное волновое сопротивление 75 Ом, дифферен- циальное — 150 Ом. Электрический интерфейс применяется для скоростей до 200 Мбайт/с (на 200 — только коаксиальный кабель). Оптический интерфейс используется для любых скоростей, в качестве передат- чиков применяются светодиоды (LE), коротковолновые и длинноволновые лазе- ры (SL и LL). Для работы с коротковолновыми лазерами в FC-О определен меха- низм безопасности открытого волокна OFC (Open Fibre Control system). Если приемник порта не получает сигнал, то его передатчик вместо нормального сиг- нала посылает короткие импульсы (безопасной мощности). Узел, получающий такой сигнал, тоже должен укоротить посылаемые импульсы. Если узел, посы- лающий короткие импульсы, получает такие же короткие импульсы от своего партнера, значит, волоконное соединение восстановлено и следует перейти на режим нормальной передачи данных. Физический интерфейс в FC-О имеет четырехэлементное обозначение вида [Speed] - [Media] - [Transmitter] - [Distance] Здесь: ♦ Speed — скорость передачи в мегабайтах в секунду (12, 25, 50, 100, 200, 400, 1200). ♦ Media — среда передачи: • SM — одномодовое оптоволокно; • М5 — многомодовое оптоволокно (50/125 мкм); • Мб — многомодовое оптоволокно (62,5/125 мкм); • MI — миниатюрный коаксиальный кабель типа RG 179B/U (75 Ом); • TV — телевизионный коаксиальный кабель типа RG 59/U (75 Ом); • LV — толстый телевизионный кабель типа RG 6/U (75 Ом), применяемый для длинных линий; • ТР — экранированная витая пара (150 Ом IBM Туре 1 для Token Ring); • TW — твинаксиальный кабель (пары параллельных проводов в экране). ♦ Transmitter — тип передатчика: • EL — электрический; • LL — длинноволновый (1300 нм) лазер; • LC — дешевый длинноволновый лазер; • SL — коротковолновый лазер с управлением OFC; • SN — коротковолновый лазер без OFC; • LE — длинноволновый светодиод.
330 Глава 13. Интерфейс Fibre Channel ♦ Distance — допустимое расстояние: • L (long) — дальнее; • I (Intermediate) — среднее; • S (short) — короткое. Допустимую длину соединения для различных вариантов интерфейса иллюст- рирует табл. 13.1. Таблица 13.1. Варианты интерфейса FC И ограничения на длину кабельного соединения Тип Скорость, Мбайт/с 12,5 25 50 100 200 400 LV-EL-S 0-60 ? — TV-EL-S 0-100 0-75 0-50 0-25 (50) ? — MI-EL-S 0-35 0-25 0-15 0-10(15) ? - TW-EL-S 0-30(13) ? — TP-EL-S 0-100 0-50 0-28 ? - - SM-LL-L 2-10 000 2-10 000 2-10 000 2-10 000 - - SM-LL-I — 2-2000 2-2000 2-2000 2-2000 2-2000 M5-SN-I — - - 2-500 2-300 2-175 M5-SL-I - 2-2000 2-1000 2-500 - - M6-SN-I — — — 2-175 2-90 2-50 M6-SL-I - 2-700 2-350 2-175 — - M5-LE-I — — — — — — M6-LE-I 2-1500 2-1500 2-500 — - - Кабели и коннекторы В FC применяются разнообразные коннекторы и кабели, различающиеся конст- рукцией, составом сигнальных и питающих линий. Между устройствами-инициа- торами (компьютерами) и целевыми устройствами (например, массивом диско- вых накопителей) передаются только сигналы приемопередатчиков FC. Собст- венно устройства хранения (например, винчестеры с интерфейсом FC) через разъем электрического интерфейса могут получать еще и питание, а также кон- фигурационную информацию. В чисто кольцевой топологии (без концентраторов) применяются одиночные ка- бели (один коаксиал, пара проводов или волокно), в остальных топологиях тре- буется дуплексный кабель (два коаксиала, две медные пары или два оптоволокна). Каждый дуплексный кабель является перекрестным, он соединяет выход пере- датчика OUT (на одном конце) и вход приемника IN (на другом концё).
13.3. Канал передачи данных (FC-PH, FC-FS) 331 Для электрического интерфейса используется традиционный разъем DB-9 (рис. 13.3, а) и его более современные компактные варианты HSSDC и HSSDC2 (рис. 13.3, бив соответственно). Назначение контактов этих разъемов приведено в табл. 13.2. Цепи GND, +5V, Module Fault Detect, Output Disable необязательны, они требуются только для работы с оптическими трансиверами (MIA, см. далее). В минимальном варианте на разъеме DB-9 используются только контакты 1, 5, 6 и 9 (экран соединяется с кожухом разъема). В трехконтактных разъемах РТР (рис. 13.3, г) присутствуют только дифференциальная пара и общий провод (эк- ран), порт FC образует пара таких разъемов. а бег Рис. 13.3. Интерфейсные разъемы FC: а — DB-9 (минимальный вариант), б — HSSDC, в - HSSDC2, г — РТР Таблица 13.2. Назначение контактов интерфейсных разъемов FC Сигнал Назначение Контакт DB9 Контакт HSSDC/HSSDC2 +OUT Выход передатчика 1 1 +5V Питание трансивера 2 7 Module Fault Detect Обнаружение отказа модуля 3 4 Резерв — 4 - +IN Вход приемника 5 8 -OUT Выход передатчика 6 3 Output Disable Запрет выхода 7 5 GND Общий для цепи +5V 8 2 -IN Вход приемника 9 6 Рядовые медные соединительные кабели выпускаются длиной 0,5-5 м с относи- тельно тонким проводом (калибр 24-24 AWG), в кабелях длиной 10 м применяют более толстый провод (22-23 AWG). Для особо длинных (до 30 м) соединений используют согласованные кабели (equalized cables), в которых между проводами и разъемом устанавливаются RC-цепи, согласующие импеданс. Эти цепи пря- чутся в корпусах разъемов.
332 Глава 13. Интерфейс Fibre Channel Для оптических кабелей наиболее распространен разъем SC-дуплекс, применя- ются и более современные малогабаритные разъемы, например, LC-дуплекс. На накопителях с интерфейсом FC обычно устанавливается разъем SCA-2, на- зываемый также SCA-40 (по числу контактов). Подключение накопителя од- ним разъемом SCA (Single Connector Attachment), обеспечивающим не только связь с устройством, но и подачу питания и дополнительных сигналов, удобно в системах хранения с «горячей» заменой. Назначение контактов SCA-2 приведе- но в табл. 13.3. Таблица 13.3. Назначение контактов разъема SCA-2 Контакт Цепь Контакт Цепь 1 -EN Bypass Port 1 21 +12V 2 +12V 22 GND 3 +12V 23 GND 4 +12V 24 +IN1 5 -Parallel ESI 25 -IN1 6 GND 26 GND 7 ACTLED 27 +IN2 8 Reserved 28 -IN2 9 START1 29 GND 10 START2 30 +OUT1 11 -EN Bypass Port 2 31 -OUT1 12 SEL6/-DSK.WR 32 GND 13 SEL5/-DSK.RD 33 +OUT2 14 SEL4/-ENCL_ACK 34 -OUT2 15 SEL3/D3 35 GND 16 FLTLED 36 SEL2/D2 17 DEVCTRL2 37 SEL1/D1 18 DEVCTRL1 38 SELO/DO 19 +5V 39 DEVCTRLO 20 +5V 40 +5V На разъеме SCA-2 присутствуют сигналы двух портов FC (+IN1, -IN1, +OUT1, -OUT1, +IN2, -IN2, +OUT2, -OUT2), линии питания +5V, +12V и ряд дополнительных сигна- лов. Скорость работы интерфейса задается сигналами DEVCTRL[2:0]: 7 — 1 Гбит/с, 6 — 2 Гбит/с, 5 — 4 Гбит/с, 4...0 — резерв. Выходные сигналы -EN Bypass Port 1, -EN Bypass Port 2 устанавливаются на высокий уровень при корректной работе портов 1 и 2 соответственно. Выходы индикаторов активности (ACTLED) и отказа привода (FLTLED) предназначены для подключения катодов светодиодов.
13.3. Канал передачи данных (FC-PH, FC-FS) 333 Для управления запуском двигателя предназначены сигналы START[1:2]: 00 — автоматический немедленный запуск, 01 — запуск по SCSI-команде Start Unit, 10 — задержка запуска, зависящая от адреса устройства в кольце, И — резерв. Для задания идентификатора (адреса) устройства используются сигналы SEL[6:0], действующие в момент инициализации по включению питания. Эти же сигналь- ные линии используются для интерфейса ESI, с помощью которого к устройству может быть подключен сервисный процессор SES (SCSI Enclosure Services — об- служивание стоек SCSI). Интерфейс ESI (Enclosure Services Interface) позволяет общаться с процессором SES, подключенным к SCSI-устройству посредством команд Send Diagnostic и Receive Diagnostic Results. При выполнении этих команд устройство (например, дисковый накопитель) низким уровнем сигнала -Parallel ESI переключает ли- нии в режим сервисного. В интерфейсе ESI данные передаются параллельно тетрадами по линиям D[3:0], сигнал -DSK_WR является стробом записи (переда- ча от диска к SES), сигнал -DSK_RD — стробом чтения данных из процессора SES. Сигналом -ENCL_ACK SES подтверждает выполнение операции записи или чтения. Для интерфейса FC существуют разнообразные адаптеры: переходные кабели с разнотипными разъемами (DB-9, HSSDC и HSSDC2), Y-образные разветвите- ли с разъемами РТР. Помимо интерфейсных разъемов FC на них могут присут- ствовать разъемы для подачи питания +5V (обычные 4-контактные, используе- мые для питания накопителей в ПК). Адаптеры с разъемом SCA-2 помимо вывода сигналов FC (на разъемы РТР, HSSDC, HSSDC2 или DB-9) содержат конфигурационные джамперы, разъем подачи питания на привод и, необязатель- но, разъем интерфейса ESI. Пример такого адаптера приведен на рис 13.4, а. а б Рис. 13.4. Интерфейсные адаптеры: а — дня подключения к SCA-2, б — для подключения оптическим кабелем к разъему DB-9
334 Глава 13. Интерфейс Fibre Channel Интерфейсный адаптер MIA (Media Interface Adapter, рис. 13.4, б) обеспечивает подключение оптоволокна к электрическому порту. В этом адаптере оптический трансивер питается от напряжения +5 В, подаваемого через контакты 2 и 8 разъ- ема DB-9. Есть аналогичные адаптеры и с иными электрическими разъемами. Последовательная передача данных (FC-1) Для последовательной передачи данные кодируются по методу 8В/10В, избы- точность вводится для обнаружения ошибок и введения специальных управляю- щих символов. Это позволяет уровню FC-1 обеспечить первичный контроль дос- товерности передачи данных и управлять соединением. Уровень FC-1 при передаче преобразует по методу 8В/10В байты информации в 10-битные символы битового потока, передаваемого по последовательному ин- терфейсу (через FC-О). При приеме выполняется обратное преобразование и контроль достоверности. Помимо собственно данных по интерфейсу передается специальная управляющая информация, обеспечивающая посимвольную син- хронизацию (определение начала передаваемых слов), разметку потока на кадры и смену состояний интерфейса. Кодирование 8В/10В обеспечивает отсутствие длинных последовательностей нулей или единиц, а также стабильное соотношение нулей и единиц в выходном потоке, не зависящее от входных данных. Первое из этих свойств важно для би- товой синхронизации принимаемых данных, второе — для стабильности мощно- сти выходного сигнала лазерного передатчика. В передаваемых символах не встречается более 4 подряд идущих нулей или единиц, единственное исключе- ние — служебный символ К28.5 с пятью нулями или единицами. Этот специаль- ный символ используется как ключевой для символьной синхронизации. В при- емнике имеется специальная схема обнаружения данного символа. В FC информация по последовательному интерфейсу передается 40-битными словами, состоящими из четырех смежных символов данных или служебных символов. Для синхронизации и управления интерфейсом используются специ- альные наборы передаваемых слов (ordered set); каждый набор начинается с сим- вола К28.5, следующие три символа определяют тип набора (его назначение). В FC используются несколько групп специальных наборов: ♦ Разделители кадров (frame delimiters) SOF и EOF — признаки начала и конца кадра. Для нужд управления последовательностями определено более 20 раз- личных разделителей. ♦ Примитивные сигналы (primitive signals) посылаются для поддержания син- хронизации и управления интерфейсом: Idle — нейтральный заполнитель для поддержания синхронизации, R RDY — готовность к приему, ARB — запрос арбитража, OPN и CLS — открытие и закрытие соединения и др. (всего более 10 различных сигналов). ♦ Последовательности примитивов (primitive sequence) вызывают соответст- вующие действия только после того, как получено подряд определенное чис- ло однотипных примитивов. Среди них имеются примитивы NOS (Not Ope- rational — узел неработоспособен или обнаружил ошибку соединения), OLS
13.3. Канал передачи данных (FC-PH, FC-FS) 335 (Off-line — отключение, ответ на примитив NOS), LR (Link Reset — запрос сброса интерфейса), LRR (Link Reset Response — ответ на запрос сброса) и др. (более 15 различных последовательностей). Инициализация интерфейса — первое действие, выполняемое, как только FC-порт обнаруживает действительный сигнал (по включению питания или подсоедине- нию кабеля). Процедура инициализации выполняется с помощью последова- тельностей примитивов NOS, OLS, LR, LRR. После инициализации интерфейса выполняется процедура входа Login, которая исполняется уже на уровне FC-2. Иерархия передач и протоколы (FC-2) Уровень FC-2 принимает информационные блоки вышестоящих протоколов и разбивает их на кадры, передаваемые по интерфейсу. На приемной стороне вы- полняется обратная задача — сборка блоков из последовательности кадров. Самой крупной организационной единицей, которой оперирует FC, является об- мен (exchange) между парой N-портов: источником (originator) и ответчиком (responder). Обмен состоит из одной или нескольких последовательностей и мо- жет быть однонаправленным или двунаправленным. Обмен имеет двухбайтный идентификатор (OX ID у источника и RX ID у ответчика), который помещается в заголовок кадра. Последовательностью (sequence) называется цепочка кадров, в которую преоб- разуется информационный блок. Последовательность идентифицируется одно- байтным полем SEQ ID в заголовке кадра. Кадры в последовательности нумеруют- ся (2-байтное поле SEQ CNT), что обеспечивает возможность их правильной сбор- ки. Последовательность является минимальной единицей повторной передачи в случае обнаружения ошибки (по CRC-коду) в любом слове любого кадра. Для гигабитных скоростей это выгоднее, чем выполнять повторную отправку отдель- ных кадров. Уровень FC-2 обеспечивает заказанный класс сервиса, управление потоком (предохранение от потери кадров из-за переполнения), контроль досто- верности, а для сервисов с гарантированной доставкой — повторную передачу в случае обнаружения ошибки. FC-кадр (рис. 13.5) представляет собой цепочку от 28 до 2140 байт (тело кадра), обрамленную примитивами начала (5OF) и конца (EOF) кадра. В разделителе SOF содержатся указание класса сервиса (определяющего требования к полосе пропускания и необходимость подтверждений) и признак начального/промежу- точного кадра последовательности. В разделителе EOF может содержаться указа- ние на завершение определенного класса сервиса, а также на недействительность кадра и прекращение последовательности (Abort). Тело кадра состоит из заголовка (Frame Header, 6 слов), поля данных (Data Field, 0-2112 байт) и CRC-кода (1 слово). В заголовке указываются тип кадра (Туре), адреса источника (Source Address) и получателя (Destination Address), длина дан- ных, управляющая информация (CTL), идентификаторы обмена (Exchange lD) и последовательности (Seq_ID), а также номер кадра (Seq_Cnt) в последователь- ности.
336 Глава 13. Интерфейс Fibre Channel Поле данных Рис. 13.5. Кадр Fibre Channel Поле данных может содержать 64-байтный дополнительный заголовок (Optional Header) и контейнер с полезными данными (Payload, 0-2048 байт). Если длина данных не кратна 4 байт, в контейнер добавляется заполнитель, выравнивающий его длину до целого числа слов. Помимо кадров, несущих данные верхнеуровневых протоколов (device data frames), имеются управляющие кадры (link control frames) для канальных под- тверждений (АСК) и ответов (Busy и Reject). Кадр ACC (Accept Link Service) яв- ляется ответом на запросы канальных сервисов (например, подключения) и оз- начает, что запрос принят и выполнен. При работе с фабрикой кадр F BSY (Fabric Port Busy) означает временную невозможность доставки из-за занятости узла или порта, кадр F RJT (Fabric Port Reject) означает отказ доставки (не под- держиваемый класс сервиса, некорректный заголовок или недоступный порт на- значения). Управление потоком Для предотвращения потери кадров из-за переполнения буферов приемника ис- пользуются механизм управления потоком, основанный на кредитах (иной по сравнению с Gigabit Ethernet). Кредитами оперируют узлы, посылающие кадры. При подключении (Login) порт узнает значение Credit — число буферов для при- нимаемых кадров у своего партнера. Порт может посылать кадры партнеру, не дожидаясь подтверждений (они придут позже). Передающий порт работает со счетчиком кредита Credit—CNT, который обнуляется при подключении и инкре- ментируется на 1 при передаче каждого кадра. Счетчик декрементируется по по- лучении подтверждения от партнера-приемника. Порт может передавать кадры до тех пор, пока счетчик CreditCNT не достигнет значения Credit. В зависимости от класса сервиса и топологии управление потоком может быть сквозным (End- to-End, ЕЕ), межбуферным (Buffer-to-Buffer, ВВ) и смешанным. Сквозное управление потоком (ЕЕ) выполняется конечными узлами (N-портами) — источником и получателем последовательности. Получатель на каждый успешно принятый кадр данных должен ответить канальным кадром АСК, а если во вход- ном буфере нет места для приема — кадром Busy. На прием кадра с ошибкой он должен ответить кадром Reject. Инициатор последовательности оперирует счет- чиком EE_Credit_CNT, значение EECredit он получает при подключении N Login. Счетчик декрементируется по получении кадра подтверждения АСК,
13.3. Канал передачи данных (FC-PH, FC-FS) 337 который может подтверждать получение одного кадра, п кадров или всей после- довательности. Межбуферное управление потоком (ВВ) при использовании фабрики выполня- ется между парами N-порт и F-порт, а при двухточечной топологии — между па- рой N-портов. Каждый порт оперирует счетчиком ВВCredit CNT, значение ВВ Credit он получает при подключении Fabric Login. Счетчик декрементирует- ся на 1 при получении каждого примитива R RDY; эти примитивы порт посыла- ет партнеру при освобождении каждого входного буфера. Классы сервиса Для вышестоящих уровней FC-2 обеспечивает несколько классов сервиса переда- чи информационных блоков: ♦ Класс 1 (Class 1) — обеспечивает выделенное соединение между парой узлов с подтверждениями доставки каждого кадра. Фактически, это скоммутиро- ванная цепь, гарантированно обеспечивающая максимальную пропускную способность между парой N-портов. При использовании фабрики этот класс требует установления выделенного пути для данных, термин «routing» здесь означает передачу кадров между портами фабрики без промежуточной буфе- ризации. Число одновременно установленных соединений в фабрике ограни- чено (не может быть больше половины числа ее F-портов). Для класса 1 имеет место сквозное управление потоком (рис. 13.6, а), установление соединения (посылка первого кадра) занимает значительное время. Последующие кадры могут идти друг за другом непрерывно (в пределах кредита), что и обеспечи- вает максимальную пропускную способность для потока. Порядок доставки кадров соблюдается. ♦ Класс 2 (Class 2) — коммутация кадров без установления соединения с под- тверждением доставки. Возможно конкурирующее взаимодействие нескольких пар узлов, полоса пропускания разделяется между несколькими конкурирую- щими источниками. Кадры могут быть доставлены в измененном порядке. Здесь имеет место смешанное управление потоком (рис. 13.6, б). Подтвер- ждение каждого кадра снижает эффективность использования интерфейса (протокольные накладные расходы и задержки доставки). ♦ Класс 3 (Class 3) — коммутация кадров без установления соединения и под- тверждений. Самый эффективный класс — имеет минимум накладных расхо- дов. Здесь имеет место только межбуферное управление потоком (рис. 13.6, в). ♦ Класс 4 (Class 4) — виртуальные цепи; класс позволяет в чисто фабричной то- пологии N-порту устанавливать одновременно более одного соединения — виртуальных цепей (Virtual Circuit, VC), возможно, с разными N-портами. Порядок доставки гарантируется, полоса разделяется между установленными виртуальными цепями. Для сигнализации готовности виртуальной цепи к приему данных используется специальный примитив VCRDY, в котором указывается идентификатор виртуальной цепи. ♦ Класс 6 (Class 6) — предназначен специально для группового вещания с под- тверждениями, только для фабрики. Передающий N-порт устанавливает
338 Глава 13. Интерфейс Fibre Channel соединение класса 1 с сервером группового вещания (multicast server), находя- щимся в фабрике (общеизвестный адрес FFFFF5h). Этот сервер устанавли- вает аналогичные соединения с N-портами, подписавшимися на получение вещания данной группы. Для получения членства в группе N-порты исполь- зуют сервер псевдонимов (alias serVer) с адресом FFFFF8h. Управление пото- ком, как и у класса 1, сквозное: порты-получатели посылают подтверждения, агрегирующиеся сервером группового вещания в один кадр, получаемый пор- том-источником. Рис. 13.6. Управление потоком: а — сквозное (класс 1), б — смешанное (класс 2), в — межбуферное (класс 3). Пунктиром со стрелкой обозначен примитив R_RDY Наиболее употребим класс 3, при этом надежность доставки (подтверждения) обеспечивают верхнеуровневые протоколы. Этот класс применяется для сетей устройств хранения данных, он пригоден и для широковещания в реальном вре- мени (для мультимедийных FC-приложений). Класс 1 практически не использу- ется из-за невозможности одновременного обслуживания множества соединений, класс 2 тоже почти не используется из-за больших протокольных накладных расходов. Фабрики могут поддерживать и смешанный (intermix) класс сервиса: при установленном соединении класса 1 в свободное время могут передаваться кадры классов 2 и 3, причем как между узлами, соединенными по классу 1, так и между иными узлами. Однако это требует специальной поддержки как со сторо- ны фабрики, так и со стороны N-портов. Внутренние протоколы В FC-2 определен набор внутренних протоколов: ♦ Primitive Sequence Protocol — протокол последовательностей примитивов для обнаружения отказа и восстановления соединений; ♦ Fabric Login Protocol — протокол подключения к фабрике, предназначен для обмена параметрами обслуживания между N-портом и фабрикой;
13.3. Канал передачи данных (FC-PH, FC-FS) 339 ♦ NJPort Login Protocol — обмен параметрами обслуживания между парой N-портов; ♦ Data Transfer Protocol — передача данных верхнеуровневых (ULP) протоко- лов с соответствующим управлением потоком; ♦ NJPort Logout Protocol — отзыв установленных параметров обслуживания (ос- вобождение ресурсов). Адресация узлов В FC используется трехбайтный идентификатор узла, динамически назначае- мый при конфигурировании. Этот идентификатор фигурирует в качестве адреса источника (S ID) и получателя кадра (D ID). Адреса FFFFFO-FFFFFEh приме- няются как специальные общеизвестные (например, серверов псевдонимов и группового вещания). Значение OOOOOOh означает неопределенный (несконфигу- рированный) адрес, FFFFFFh отводится для широковещания. Адрес узла назна- чает фабрика процедурой подключения Fabric Login, в случае двухточечного со- единения эта процедура не проходит, и узлы выбирают себе пару произвольных (разных) адресов. Для кольца физический адрес AL PA (младший байт идентифи- катора) назначается автоматически во время инициализации кольца (см. далее). Два старших байта адреса назначаются фабрикой, а если кольцо с фабрикой не связано, они нулевые. Для глобально уникальной идентификации в FC используются 64-битные иден- тификаторы имени (Nameldentitiers), назначаемые производителями обору- дования: Node Name — идентификатор узла, Port Name — идентификатор порта и Fabric Name — идентификатор фабрики. Эти идентификаторы используются при отображении верхнеуровневых протоколов, но в кадрах как средства мар- шрутизации не фигурируют. Подключение Прежде чем начать обмены с другими узлами, узел должен пройти процедуру подключения (Login). В FC определено две процедуры подключения: к фабрике (Fabric Login) и к узлу (N_Port Login). Подключения действуют до последующей инициализации или до явного отключения по протоколу NJPort Logout. Попытку подключения к фабрике должны выполнять все порты, за исключени- ем частных портов кольца (Private FL-Port). После инициализации порт посылает кадр FLOGI по общеизвестному адресу фабрики (FFFFFEh), на что он ожидает получить кадр-подтверждение ACC (Accept). В случае наличия фабрики проце- дура подключения дает информацию о параметрах фабрики, включая классы сервиса и значение BBjCredit, а также назначает (или подтверждает) идентифи- катор узла. Здесь же устанавливается значение тайм-аута E D TOV (Error Detect Timeout value) для процедур обработки ошибок, определяемое максимальным временем оборота по фабрике (порядка единиц секунд). В случае отсутствия фабрики на кадр FLOGI может ответить N-порт, что будет признаком двухточеч- ной топологии.
340 Глава 13. Интерфейс Fibre Channel До начала обменов с портом узла необходимо к нему подключиться, выполнив процедуру NPort Login. Для этого по адресу данного узла посылается кадр PLOGI, нормальным ответом на который будет кадр-подтверждение АСС. Про- цедура подключения дает информацию о параметрах узла, включая классы сер- виса и значение EECredit. В случае двухточечной топологии здесь же устанав- ливается и значение ВВ Credit. 13.4. Арбитражное кольцо (FC-AL) Арбитражное кольцо (FC-AL) — распространенный вариант использования FC, не требующий дорогостоящей коммутационной фабрики. В кольцо может объ- единяться большое число узлов, размер кольца ограничен временем оборота сиг- нала по кольцу (тайм-аут кольца, AL_TIME=15 мс). При задержке передачи в каж- дом узле равной 6 слов и расстоянии между узлами кольца равном 10 км в кольцо может собираться до 134 узлов, при меньших расстояниях число узлов может быть и больше. Активными участниками (источниками и получателями кадров) в кольце может быть не более 127 узлов; если узлов больше, часть ока- зывается в безучастном режиме (nonparticipating mode) — они только трансли- руют битовый поток. Внешне кольцо напоминает FDDI или Token Ring — все узлы собираются в замк- нутую цепочку и транслируют приходящие кадры дальше по кольцу. Синхрони- зация передатчика каждого узла автономна, а для компенсации расхождения частот синхронизации используются межкадровые слова-заполнители, часть из которых может периодически отбрасываться или вводиться дополнительно при трансляции. Кольцо FC-AL может быть построено на звездообразной и древовидной физиче- ской топологии, более удобной в обращении (см. рис. 13.2, в). Для этого при- меняются концентраторы (хабы). Простейший концентратор содержит набор связанных в кольцо портов (приемопередатчиков). При этом порт включает в кольцо подключенное устройство, лишь получив от него сигнал (примитив сбро- са). Порт, на который с внешнего разъема не поступает сигнал, замыкается ком- мутатором порта. Таким образом обеспечивается обход отказавших (отключен- ных) узлов. Более сложные концентраторы обеспечивают дистанционное управление портами и передачу сообщений об их состоянии. Без концентрато- ров кольцо становится уязвимым — при отказе одной линии или устройства раз- рушается все кольцо. До начала нормальной работы кольцо должно быть проинициализировано — каж- дому узлу назначен физический адрес ALPA. Этот адрес становится младшим байтом адресных идентификаторов (D ID и SI ID). Число активных узлов (127) ограничено числом комбинаций с нейтральным паритетом (числом нулей и еди- ниц) для 10-битного символа, отображающего байт. Если в кольце присутствует более 127 узлов, то часть из них не сможет получить адрес ALPA и перейдет в «безучастный» режим. В этот режим узел может переходить и по своей инициа- тиве (если его участие не требуется).
13.4. Арбитражное кольцо (FC-AL) 341 Арбитраж и открытие соединений В FC-AL право доступа разыгрывается путем арбитража, а не передачей маркера (как в FDDI и Token Ring). Узел запрашивает право доступа (передачи), посы- лая в кольцо примитив ARBx, где х — его физический адрес в кольце (ALPA, Arbitrated Loop Physical Address). Если до узла по кольцу дойдет посланный им примитив ARBx, значит, он выиграл арбитраж и получил доступ. После этого, послав примитив OPN (open) к узлу назначения, он устанавливает двухточечное соединение с требуемым узлом. При этом все остальные узлы просто транслиру- ют битовые потоки. Для разрыва соединения узел-участник соединения посылает примитив CLS (close). В примитиве OPN указываются тип соединения и необхо- димые параметры. Для полнодуплексного соединения задаются идентификато- ры назначения и источника соединения, для полудуплексного дважды указыва- ются идентификаторы назначения. Для соединений с размножением кадров указывается идентификатор назначения (для широковещательного соединения параметров не требуется). Запрашивать арбитраж узел может, только убедившись, что шина не занята. Ар- битраж выполняет каждый узел: если узел, нуждающийся в доступе, принимает примитив ARBx с адресом, большим его собственного, то вместо трансляции это- го примитива он посылает примитив ARBx со своим адресом. Таким образом, при одновременной попытке доступа победит узел, у которого номер ALPA мень- ше. Этот узел захватывает управление кольцом на неограниченное время — в этом проявляется канальная (а не сетевая) сущность FC-AL. Остальные узлы получат шанс доступа только после того, как данный узел освободит шину. Алго- ритм (необязательный) справедливого доступа (access fairness algorithm) дает другим узлам шанс на доступ к шине, прежде чем узел получит право повторной попытки доступа. Инициализация кольца Инициализация кольца начинается с посылки последовательности примитивов инициализации LIP (Loop Initialization Primitive). Эту последовательность начи- нает посылать любой узел по включении питания или по обнаружении ошибки в кольце (потере синхронизации своим приемником). LIP распространяется по кольцу и заставляет каждый узел генерировать LIP. Д&лее должен быть выбран узел-мастер инициализации, управляющий назначе- нием адресов. Для этого L-порты непрерывно посылают кадры LISM (Loop Initialization Select Master). Если кольцо подключено к порту фабрики, то масте- ром станет этот порт (получив по кольцу свой же кадр LISM). Если фабрики нет, то мастером станет узел с минимальным значением имени (Port Name). Третий этап инициализации — назначение физических адресов (AL PA). Для это- го мастер кольца посылает специальный кадр, в котором имеется битовая карта на 127 бит. Каждый бит соответствует своему значению AL PA, «О» соответствует свободному адресу, «1» — занятому. Каждый узел выбирает для себя и устанав- ливает в битовой карте полученного кадра один из битов (принятых с нулевым значением). Кадр посылается четыре раза, каждый раз отметиться в карте имеют
342 Глава 13. Интерфейс Fibre Channel право узлы с различным приоритетом получения адреса. Список этих кадров с убывающим приоритетом захвата адресов выглядит так: ♦ LIFA (Loop Initialization Fabric Assigned) — первый кадр, в котором некото- рые адреса ALPA занимают порты фабрики; ♦ LIPA (Loop Initialization Previously Acquired) — второй кадр, в котором адреса занимают порты, имевшие действительные адреса ALPA перед данной ини- циализацией; ♦ ЫНА (Loop Initialization Hard Assigned) — третий кадр, в котором узлы пыта- ются захватить предопределенные (аппаратно заданные) адреса; ♦ LISA (Loop Initialization Soft Assigned) — последний кадр, в котором узлы бе- рут первые из оставшихся свободных адресов. К моменту получения кадра LISA мастером кольца все узлы получают свои адре- са AL PA. Далее мастер может послать еще пару дополнительных кадров (если их поддерживают он сам и все узлы кольца): ♦ LIRP (Loop Initialization Report Position) — кадр-список узлов, к которому в конец каждый узел добавляет байт со своим идентификатором (когда этот кадр вернется к мастеру, он будет содержать информацию о взаимном распо- ложении узлов в кольце); ♦ LILP (Loop Initialization Loop Position) — окончательный список адресов уз- лов, доступный всем узлам кольца. Завершая инициализацию, мастер посылает примитив CLS, информирующий все узлы о начале нормальной работы. 13.5. Большие сети на базе FC Несмотря на значительную допустимую длину интерфейсных кабелей (до 10 км), сеть Fibre Channel все-таки является локальной. «Островки» Fibre Channel могут объединяться в большие сети хранения данных с помощью различных ма- гистральных сетей. По этим сетям передаются кадры Fibre Channel, для чего ис- пользуются различные механизмы отображения, зависящие от сервисов, предо- ставляемых магистралью: ♦ Передача битового потока Fibre Channel через предоставляемые оптические линии (здесь никакого дополнительного отображения не требуется). Оптиче- ские линии предоставляются волоконными магистралями с мультиплексиро- ванием по длине волны: CWDM (Coarse Wave Division Multiplexing — «гру- бое» мультиплексирование с большой разницей длин волн и малым числом каналов), DWDM (Dense Wave Division Multiplexing — «плотное» мульти- плексирование с большим числом каналов), Dark Fiber (предоставление во- локна). ♦ Адаптация сигналов FC к кадрам SONET/SDH — «прозрачный» механизм GFP-T (Generic Framing Procedure — Transparent). ♦ Инкапсуляция Fibre Channel в ячейки ATM (FC over ATM).
13.6. Протокол FCP — Fibre Channel для SCSI (FC-4) 343 ♦ Инкапсуляция Fibre Channel в дейтаграммы протокола IP (FC over IP). В этом случае сервис класса 1 не поддерживается. ♦ Передача кадров протокола FC через соединение FCIP-Link, основанное на одном или нескольких транспортных соединений TCP/IP (уместна аналогия с протоколом iSCSI, описанным в главе 12). Эту передачу обеспечивает про- токол FCIP (Fibre Channel Over TCP/IP, RFC 3821), его место иллюстрирует рис. 13.7. FC-фабрики FC-фабрики Рис. 13.7. Объединение FC-сетей с помощью протокола FCIP 13.6. Протокол FCP — Fibre Channel для SCSI (FC-4) Протокол FCP (Fibre Channel Protocol for SCSI) предназначен для взаимодейст- вия устройств SCSI через FC, используя сервисы FC-PH (или FC-FS). Прото- кол позволяет любому FCP-порту представлять устройство SCSI, являющееся инициатором или целевым устройством. FCP-портом называют любой порт узла (N-порт или NL-порт), способный выполнять транзакции FCP. Операции ввода- вывода SCSI протокол отображает FC-обменами, блоки с командами, данными и информацией и состоянии устройств SCSI — информационными блоками (Ш). Операция ввода-вывода в протоколе FCP соответствует термину задание архи- тектурной модели SAM (SCSI-3). Архитектура FC позволяет между любой па- рой FCP-портов одновременно поддерживать до 65 535 обменов (16-битный иден- тификатор), в каждом обмене может быть до 256 последовательностей. Эти воз- можности превышают потребности устройств SCSI при многозадачной работе. Ограничения на число операций ввода-вывода, одновременно находящихся в ак- тивном состоянии, определяются допустимой глубиной очереди устройства SCSI и допустимым числом конкурирующих обменов для FCP-порта. Для протокола FCP могут использоваться сервисы FC класса 2 или 3. Использо- вание класса 3 (без подтверждений) требует в FCP специальных процедур вос- становления при ошибках, эти процедуры описаны в версиях FCP-2 и FCP-3. Для выполнения операции ввода-вывода SCSI клиентское приложение выпол- няет запрос FCP-сервиса Execute command. Операция может состоять из одной команды или цепочки связанных SCSI-команд. Программный запрос содержит
344 Глава 13. Интерфейс Fibre Channel всю информацию, необходимую для выполнения команд: адрес устройства хра- нения, адреса буферов данных, собственно команду (цепочку команд). Отрабатывая запрос, инициатор посылает блок IUFCP_CMND с командой: иден- тификатор LUN (8-байтный), управляющие флаги, описания буферов и собственно CDB — дескриптор команды SCSI. Этот блок является началом обмена, идентифи- цирующегося полным квалификатором FQXID. Данный идентификатор использу- ется для всех кадров до конца выполнения операции и позволяет отличать кадры от всех других обменов. Полный квалификатор обмена для кадров, посылаемых инициатором, состоит из значений D ID, S ID и OXID; для кадров, посылаемых це- левым устройством, к этому набору добавляется и значение RX ID. Когда устройство, получившее SCSI-команду, ее интерпретирует и становится готовым к передаче данных для этой команды, оно посылает информационный блок FCP_XFER_RDY с дескриптором той части данных, которую следует пере- слать. При выполнении команды записи инициатор в ответ на блок FCP_XFER_ RDY посылает заказанный блок данных FCPDATA. При выполнении команды чтения целевое устройство вслед за блоком FCP XFER RDY посылает объяв- ленный блок данных FCP_DATA. Нормально на каждый запрос FCP_XFER_RDY посылается по одному блоку данных FCP_DATA, но этот механизм управления потоком может быть отключен (если используется иной). После передачи всех данных устройство посылает блок FCP RSP, содержащий информацию о состоянии выполнения SCSI-команды, а при ненормальном за- вершении — расширенную информацию о состоянии (SCSI REQUEST SENSE). На этом выполнение команды завершается. Если команда в операции является последней (или единственной), то на этом завершается и обмен. Если команда не является последней в цепочке и информация о состоянии, переданная ини- циатором в блоке FCPRSP, позволяет продолжать выполнение, инициатор по- сылает блок FCP CMND для следующей команды с тем же идентификатором по- следовательности. Эта команда будет выполняться вышеописанным образом. Некоторые устройства FCP нуждаются в подтверждении успешной доставки блока FCPRSP, чтобы их «понимание» завершенности команды строго соответствовало пониманию этого факта инициатором. Целевое устройство может запрашивать подтверждение (confirmed completion) только для команд, завершающих процесс (одиночная команда или последняя в цепочке); для промежуточных это подтверж- дение может запрашиваться только в случае ошибок или особых условий (Check Condition). Возможность подтверждаемого завершения согласуется инициатором и целевым устройством. Для того чтобы начать работу по протоколу FCP, процесс одного FCP-порта должен установить связь с процессом другого FCP-порта, выполнив процедуру входа PRLI (Process Login). Процедура PRLI выполняется канальным уровнем (FC-2). Эта процедура устанавливает связи пар образов процессов (Image Pair) и позволяет инициатору и целевому устройству согласовать параметры протокола FCP. Связи и согласование параметров в некоторых случаях могут устанавли- ваться и без использования процедуры PRLI (случай неявного входа — implicit login). Связи по FCP устанавливаются только между комплементарными парами: инициатором и целевым портом. Если два FCP-порта поддерживают функции
13.6. Протокол FCP — Fibre Channel для SCSI (FC-4) 345 и инициатора, и целевого устройства, между ними устанавливаются две пары связей образов. В запросе входа (PRLI request) указываются следующие параметры: ♦ цель запроса — установление связи или только обмен параметрами; ♦ наличие функций инициатора и целевого устройства; ♦ желание и возможность использования повторов при неудачных передачах бло- ков данных; ♦ возможность использования подтверждаемого завершения команд; ♦ использование блока FCP_XFER_RDYдля управления потоком (раздельно для чтения и записи); ♦ возможность перекрытия данных (data overlay): смещение для очередного бло- ка передаваемых данных указывается так, что он частично накладывается на ранее переданные данные, при этом часть данных передается повторно (сум- марное число физически переданных данных оказывается больше длины бу- фера, но переполнения не происходит). В ответе на запрос входа (PRLI accept) сообщается, установлена или нет связь пар образов, также сообщаются вышеперечисленные параметры, принятые отве- чающей стороной. Разорвать связь пары образов позволяет процедура выхода PRLO (Process Logout). После разрыва связи взаимодействие пары портов (N-портов или NL-портов) по протоколу FCP становится невозможным. Форматы информационных блоков протокола FCP отвечают потребностям SAM (см. 9.2). Для подачи команд используется информационный блок FCP CMND (рис. 13.8), в котором фигурируют следующие поля: ♦ FCP LUN — 8-байтный идентификатор логического устройства; ♦ CRN (Command Reference Number) — номер команды, посланной данным ини- циатором данному Л У (используется, если разрешен контроль точной достав- ки команд); ♦ PRIORITY — приоритет по отношению к другим заданиям, уже имеющимся в данном наборе (используется сервером устройства для планирования вы- полнения); ♦ TASK ATTRIBUTE — атрибуты, связанные с дескриптором команды: Simple, Head Of Queue, Ordered, ACA\ ♦ TASK MANAGEMENT FLAGS — флаги, указывающие на функции управления задания- ми: CLEAR АСА, LOGICAL UNIT RESET, CLEAR TASK SET, ABORT TASK SET (допустима уста- новка не более одного из флагов; если флаг установлен, то поле CDB и связан- ные с ним параметры игнорируются); ♦ ADDITIONAL FCP CDB LENGTH — длина дополнительного поля дескриптора (превы- шающего 16 байт); ♦ RDDATA, WRDATA — флаги, указывающие на передачу данных в направлении к ини- циатору (SCSI-чтение) и от инициатора (SCSI-запись) соответственно;
346 Глава 13. Интерфейс Fibre Channel ♦ FCPCDB, ADDITIONAL FCPCDB — дескриптор команды и его дополнение (если дли- на превышает 16 байт); ♦ FCP DL — длина передаваемых (для команд записи и двунаправленных команд) или принимаемых (для команд чтения) данных; ♦ FCP BIDIRECTIONAL READ DL — длина принимаемых данных для команд с двуна- правленной передачей. J___5____I___1___I___: FCP_LUN Байт о 7 8 9 10 11 12 27 28 п п+1 п+4 п+5 п+8 Рис. 13.8. Информационный блок FCP_CMND (MSB) (LSB) COMMAND REFERENCE NUMBER_____________ PRIORITY | TASK ATTRIBUTE TASK MANAGEMENT FLAGS ADDITIONAL FCP_CDB LENGTH = (N-27)/4 (MSB) FCP_CDB (MSB) (MSB) (MSB) ADDITIONAL FCP_CDB FCP_DL FCP_BIDIRECTIONAL_READ_DL | RDDATA IWRDATA (LSB) (LSB) (LSB) (LSB) Для управления потоком данных используются информационные блоки FCP_ XFER RDY (рис. 13.9), в которых поле FCP DATA RO задает смещение передаваемо- го блока относительно начала буфера, а поле FCP BURST LEN — длину блока. Рис. 13.9. Информационный блок FCP_XFER_RDY Для передачи информации о завершении операции используются информацион- ные блоки FCP RSP (рис. 13.10), передаваемые логическим устройством по ис- полнении каждой команды. В этих блоках передаются байт кода состояния (SCSI STATUS CODE) и дополнительная информация об исполнении команды. На дейст- вительность и значение этой дополнительной информации указывают флаги в байте 10. Флагом FCP CONF REQ устройство требует от инициатора подтверж- дения получения информации завершения (посылки блока FCP CONF — кадра, состоящего только из заголовка).
13.6. Протокол FCP — Fibre Channel для SCSI (FC-4) 347 Байт 7 6 5 4 | 3 I 2 | 1 I 0 0 9 10 FCP- BIDI- RSP FCP- BIDI- READ- RESID- UNDER FCP_ BIDI- READ- RESID- OVER FCP_ CONF- REQ FCP- RESID- UNDER FCP- RESID- OVER FCP- SNS_ LEN_ VALID FCP- RSP- LEN- VALID 11 SCSI STATUS CODE 12 15 (MSB) FCP.RESID (LSB) 16 19 (MSB) FCP_SNS_LEN (= n) (LSB) 20 23 (MSB) FCP_RSP_LEN (= m) (LSB) 24 23+т (MSB) FCP_RSP_INFO (длина m байтов) (LSB) 24+т 23+т+п (MSB) FCP-SNSJNFO (длина n байтов) (LSB) 24+т+п 27+т+п (MSB) FCP_BIDIRECTIONAL_READ LRESID (LSB) Рис. 13.10. Информационный блок FCP_RSP Поле FCP RESID содержит разницу между числом байтов, переданных при испол- нении команды, и запрошенным числом байтов. Флаг FCP RESID UNDER указывает на то, что передано байтов меньше, чем ожидалось. Флаг FCP RESID OVER указывает на то, что не все данные поместились в буфер (недостаточное значение FCP DL). Поле FCP BIDIRECTIONAL READ RESID имеет аналогичное назначение, но использует- ся только для данных чтения двунаправленных команд (поле присутствует толь- ко при установленном флаге FCP BIDI RSP). Недостаток или избыток данных определяется флагами FCP BIDI READ RESID UNDER и FCP BIDI READ RESID OVER соот- ветственно. Уточненное состояние выполнения SCSI-команды передается в поле FCP SNS INFO. Длина поля FCP_SNS_INFO задается в поле FCP_SNS_LEN, а на присутствие поля (и действительность значения длины) указывает флаг FCP SNS LEN VALID. Если в блок ответа включается поле FCP RSP INFO (длина поля — в FCP RSP LEN), то устанавливается флаг FCP RSP LEN VALID. Причина, по которой включается это поле, указывается в его 3-м байте (код RSP CODE): ♦ функция управления заданием выполнена (ООЬ), отвергнута (04h), не выпол- нена (failed, 05h) или относится к недействительному номеру логического устройства (09Ь); ♦ блок данных (FCPDATA) имеет длину, отличающуюся от указанной в поле FCP BURST LEN (Olh), или смещение данных (FCP DATA RO) некорректно (ОЗЬ); ♦ в блоке FCPCMND обнаружены некорректные поля (02Ь).
ГЛАВА 14 Интерфейсы и конструктивы твердотельных носителей информации Твердотельные устройства хранения используются в миниатюрных компьюте- рах, а также компьютеризированных цифровых устройствах бытовой электрони- ки — фотокамерах, плеерах, приемниках глобальной системы позиционирования (Global Positioning System, GPS), музыкальных инструментах и пр. В большин- стве своем эти устройства основаны на микросхемах флэш-памяти, в наиболее современных используется память со структурой NAND. Этому типу флэш-па- мяти присущи быстрые чтение, запись и стирание небольших блоков (256 или 512 байт), что удобно для записи файлов. Правда, для этой памяти характерны довольно медленное чтение произвольного байта и отсутствие возможности по- байтной записи, но приложениям этих карт такая возможность и не требуется, поскольку они ориентированы на блочный обмен. Устройства флэш-памяти яв- ляются энергонезависимыми (в режиме хранения не требуют питания), эконо- мичными в плане потребления, особенно при чтении, достаточно производитель- ными, но, увы, недешевыми. Запись на эти носители специфична: быстрее всего она выполняется в чистый (стертый) блок (сектор диска), а перезапись требует довольно длительного стирания. Кроме того, флэш-память имеет хоть и большое (порядка 105), но ограниченное число циклов стирания-записи — как ни стран- но, устройства с подвижным носителем с этим ограничением не сталкиваются. Полноценные устройства хранения представляют собой комбинацию собственно микросхем памяти и микроконтроллера, обеспечивающего внешние интерфейс- ные функции. Ряд типов флэш-карт собственного контроллера не имеют, на них располагаются только микросхемы памяти; устройством хранения (в привычном понимании) они становятся при участии программного обеспечения (драйвера) хоста, к которому подключаются. Флэш-карты, не имеющие контроллера, могут ис- пользоваться и в качестве памяти с произвольным побайтным доступом (не как устройства хранения, а как энергозависимое расширение внутренней памяти). Есть и другие твердотельные хранители, например ферроэлектрическая память (FRAM), но пока что массового применения они не имеют. Менее чем за десяти-
14.1. CompactFlash 349 летие устройства хранения на флэш-памяти прошли большой путь от электрон- ных «дисков» («винчестеров») размером в 3" до современных карт размером с почтовую марку. Интерфейсы твердотельных устройств хранения — карт внешней памяти — тесно связаны с их конструктивами; основные характеристи- ки наиболее распространенных карт приведены в табл. 14.1. Таблица 14.1. Основные характеристики карт внешней памяти Параметр CompactFlash SmartMedia Card MultiMedia Card Sequre Digital Miniature Card Длина 36,0 45,0 32,0 32,0 33,0 Ширина 43,0 37,0 24,0 24,0 38,0 Высота 3,3/5,0 0,76 1,4 2,1 3,5 Коннектор Штырьковый Печатный Печатный Печатный Эластомер Число контактов 50 22 7 9 60 Перечисленные в таблице карты можно подключать и к обычным компьютерам. Для этого существуют различные адаптеры: для слотов PC Card (к блокнотным ПК), для шины USB (для самых разных ПК) и для других внешних интерфей- сов. С помощью этих адаптеров компьютер «видит» подключенную карту как обычный сменный носитель информации (диск). Конечно, компьютеры общего назначения в такой внешней памяти не нуждаются — своя и больше, и дешевле. Главная цель подключения карты к ПК — быстрая передача прикладных данных бытового устройства (фотографий, музыки и т. п.) или перенос (хранение) ин- формации (вместо дискет). В качестве интерфейса твердотельных устройств хранения может использовать- ся и самый обычный вариант АТА. Существуют устройства DOM (Disk On Module) — небольшие модули, которые вставляются в обычный 40-контактный разъем АТА, имеющийся на любой современной системной плате. Правда, этот «винчестер» не блещет выдающимися параметрами: объем — в пределах 1 Гбайт, средняя скорость передачи данных — 1,6 Мбайт/с, удельная стоимость хране- ния — около 1,5 доллара за мегабайт. Внутри модуля находится флэш-память структуры NAND с контроллером, эмулирующим систему команд АТА. Основ- ное применение этих модулей — хранение ПО встраиваемых компьютеров, но ими также можно пользоваться как сменными устройствами хранения. Есть и твердотельные устройства хранения, по техническим характеристикам почти не уступающие винчестерам. 14.1. CompactFlash Карты CompactFlash (рис. 14.1), поддерживаемые ассоциацией CFA (Compact Flash Association), широко используются в различных электронных приборах: цифро-
350 Глава 14. Интерфейсы и конструктивы твердотельных носителей вых фотокамерах, фотопринтерах, МРЗ-плеерах, цифровых диктофонах, персо- нальных коммуникаторах и, конечно же, компьютерах — настольных, карман- ных, мобильных. Рис. 14.1. Карты CompactFlash Карты CFA Type I имеют размер 42,8 х 36,4 х 3,3 мм (4 мм с учетом выступа) и 50-контактный разъем (розетка на карте, двухрядный штырьковый разъем с шагом 1,27 мм на слоте). У карт Type II толщина 5 мм. Назначение контактов приведено в табл. 14.2. Через переходник (50- на 68-контактный разъем) карты могут устанавливаться в слот PC Card Type II или III, имеющийся практиче- ски во всех блокнотных ПК. Объем памяти выпускаемых в настоящее время карт — от 4 Мбайт до 1 Гбайт, напряжение питания — 5 или 3,3 В. Карты могут работать в одном из трех режимов: карт памяти (Мет), карт ввода-вывода (I/O) PC Card, «чистого» режима IDE (АТА). В первых двух режимах карты работают с теми же интерфейсными сигналами, что и PC Card. В режиме IDE электрический интерфейс и система команд полностью совместимы со специ- фикацией АТА (см. 4.1), правда, обмен данными возможен только в режиме РЮ. Режим IDE выбирается заземлением на стороне хоста сигнала ATA_SEL#. При этом из шины адреса используются только сигналы А[2:0] (остальные заземлены хостом); шина данных при обращениях к регистрам АТА имеет раз- рядность 8 бит, а при передаче данных — 16 бит. Сигналы CS0# и CS1# исполь- зуются для выбора блока командных и управляющих регистров соответственно. Сигналы PDIAG#, DASP#, CSEL#, RESET# и IORDY соответствуют спецификации АТА. Сигналом CSEL# выбирается роль карты: при заземленном контакте — устройство 0 (master), при разомкнутом — устройство 1 (slave); можно вос- пользоваться и «кабельной выборкой». Сигналы REG# и WE# должны подклю- чаться к шине питания (Vcc). Сигналы CD1# и CD2# являются индикаторами установки карты (их контакты замыкаются последними, на карте они заземле- ны). В табл. 14.3 описан чисто пассивный переходник, позволяющий подклю- чить карту CompactFlash к обычному порту АТА (IDE), имеющемуся на любой современной системной плате.
14.1. CompactFlash 351 Таблица 14.2. Назначение контактов карт CompactFlash Nfi Мет I/O IDE № Mem I/O IDE 1 GND GND GND 26 CD1# CD1# CD1# 2 D03 D03 D03 27 D11 D11 D11 3 D04 D04 D04 28 D12 D12 D12 4 D05 D05 D05 29 D13 D13 D13 5 D06 D06 D06 30 D14 D14 D14 6 D07 D07 D07 31 D15 D15 D15 7 CE1# CE1# CSO# 32 CE2# CE2# CS1# 8 А10 А10 А10 33 VS1# VS1# VS1# 9 OE# OE# ATA.SEL# 34 IORD# IORD# IORD# 10 А09 А09 A09 35 IOWR# IOWR# IOWR# 11 А08 А08 A08 36 WE# WE# WE# 12 А07 А07 A07 37 RDY/BSY IREQ INTRQ 13 VCC VCC VCC 38 VCC VCC VCC 14 А06 А06 A06 39 CSEL# CSEL# CSEL# 15 А05 А05 A05 40 VS2# VS2# VS2# 16 А04 А04 A04 41 RESET RESET RESET# 17 АОЗ АОЗ АОЗ 42 WAIT# WAIT# IORDY 18 А02 А02 A02 43 INPACK# IN PACK# INPACK# 19 А01 А01 A01 44 REG# REG# REG# 20 А00 А00 A00 45 BVD2 SPKR# DASP# 21 D00 D00 DOO 46 BVD1 STSCHG# PDIAG# 22 D01 D01 D01 47 D08 D08 D08 23 D02 D02 D02 48 D09 D09 D09 24 WP IOIS16# IOCS 16# 49 D10 D10 D10 25 CD2# CD2# CD2# 50 GND GND GND Таблица 14.3. Переходник CompactFlash Card — АТА ATA, koht. Nfi Цепь CFC, koht. Ns CFC, koht. Nfi Цепь ATA, koht. Nfi 2 GND 1 26 CD1# - 11 D03 2 27 D11 10 9 D04 3 28 D12 12 Продолжение &
352 Глава 14. Интерфейсы и конструктивы твердотельных носителей Таблица 14.3 (продолжение) АТА, конт. № Цепь CFC, конт. № CFC, конт. № Цепь ATA, конт. № 7 D05 4 29 D13 14 5 D06 5 30 D14 16 3 D07 6 31 D15 18 37 CS0# 7 32 CS1# 38 GND’ А10 8 33 VS1# - GND’ ATA_SEL# 9 34 IORD# 25 GND’ А09 10 35 IOWR# 23 GND’ А08 11 36 WE# +5V2 GND’ А07 12 37 INTRQ 31 +5V2 VCC 13 38 VCC +5V2 GND’ А06 14 39 CSEL# 283 GND’ А05 15 40 VS2# - GND’ А04 16 41 RESET# 1 GND’ АОЗ 17 42 IORDY 27 36 А02 18 43 INPACK# - 33 А01 19 44 REG# +5V2 35 А00 20 45 DASP# 39 17 D00 21 46 PDIAG# 34 15 D01 22 47 D08 4 13 D02 23 48 D09 6 32 IOCS16# 24 49 D10 8 - CD2# 25 50 GND GND’ 1 С шиной GND должны быть соединены контакты 2, 19, 22, 24, 26, 30 и 40 разъема АТА, а также контакт разъема питания. 2 Питание +5 В на переходник подается от дополнительного разъема. 3 Возможно подключение не к разъему АТА, а к шине GND через джампер: замкнут — ве- дущее устройство, разомкнут — ведомое. 14.2. SmartMedia Card Карты SmartMedia Card (SMC), поддерживаемые ассоциацией PCMCIA, предна- значены примерно для того же круга приложений, что и CompactFlash. Они со- всем тонкие, имеют менее «нежный» печатный разъем с малым числом контак- тов (всего 22) и не боятся не только повышенной влажности, но и воды. Карты
14.2. SmartMedia Card 353 основаны на Микросхемах флэш-памяти с организацией запоминающих ячеек NAND. Бывают карты SMC с однократным программированием (на основе ма- сочных ПЗУ), для них возможно только считывание информации. Средняя ско- рость передачи данных — 2 Мбайт/с, пиковая — до 10 Мбайт/с. Вид карт приве- ден на рис. 14.2. Карты на 5 В выпускались объемом 16 и 32 Мбит (2 и 4 Мбайт). Карты большего объема питаются напряжением 3,3 В, у них контакт 17 соединен с Vcc. Для карт SmartMedia выпускают простые переходные адаптеры на слот PC Card Type II. Есть даже устройства FlashPath™ для считывания этих карт в обычном дисководе(!) 1,44 Мбайт. Площадка защиты записи .ов а Рис. 14.2. Карты SmartMedia: а — питание 5 В, б — питание 3,3 В а Флэш-память SMC имеет блочную организацию с независимым поблочным сти* раннем и постраничной записью. Блок состоит из набора страниц (pages), каж- дая страница состоит из области данных (data area) и служебной секции (redundant section). Страницы карты малого объема (1-2 Мбайт) имеют размер 256 + 8 байт, новые карты (4 Мбайт и больше) имеют страницы 512 + 16 байт. В служебной области каждой страницы находятся поля ЕСС-кода, а также атри- буты блока и страницы. Размер блока (число страниц) зависит от объема карты и составляет 4, 8 или 16 Кбайт области данных. В картах, поддерживающих мультиблочную запись, блоки распределяются по независимым районам (district): блоки 0, 4, 8... — рай- он 1; блоки 1, 5, 9... — район 2; блоки 2, 6,10... — район 3; блоки 3, 7, И... — район 4. Карта может состоять из нескольких чипов (микросхем) памяти, в каждом чипе располагаются блоки со смежными адресами (например, блоки 0-4095 — чип 1, 4096-8192 - чип 2). Помимо массива NAND карта имеет считываемый идентификатор (4 байта: код изготовителя, код устройства и два байта настройки), расширенный идентификатор (индикатор 4-канальной организации). Некоторые типы карт имеют уникальный 128-битный идентификатор, процедура его считывания не разглашается. Физический интерфейс Физический интерфейс SMC — параллельная 8-битная шина данных в совокуп- ности с сигналами управления, уровни сигналов — ТТЛ (5 или 3,3 В). По шине
354 Глава 14. Интерфейсы и конструктивы твердотельных носителей передаются команды, адреса и собственно данные. Назначение контактов и сиг* налов интерфейса приведено в табл. 14.4. Таблица 14.4. Назначение контактов SmartMedia Card Контакт I/O Назначение 6...9, 13...16 I/O D[0:7] — двунаправленная шина данных 21 I CE# — выбор карты (низким уровнем) 2 I OLE — признак подачи команды (команда фиксируется по сигналу WE#) 3 I ALE — признак подачи адреса (адрес фиксируется по сигналу WE#) 20 I RE# — сигнал чтения данных или состояния (результат фиксируется по положительному перепаду) 4 I WE# — сигнал ввода адреса, команды или записи данных (состояние шины фиксируется по положительному перепаду) 19 О R/B# (Ready/Busy#) — сигнал готовности (высокий уровень) к чтению или записи данных. Низкий уровень означает занятость внутренними операциями. Выход с открытым стоком требует подтягивающего ре- зистора 5 I WP# — предохранение от записи. Низкий уровень запрещает работу внутреннего источника высокого напряжения, что используется для предохранения от неоконченных операций при нестабильном питании 11 О CD# (Card Detect) — сигнал наличия карты (заземлен на карте) 17 О LVD (Low Voltage Detect) — признак напряжения питания, на 5-вольто- вых флэш-картах свободен, на 3,3-вольтовых флэш-картах и масочных ПЗУ соединен с Vcc 1, 10, 18 GND — земля 12, 22 Vcc — питание карты (3,3 или 5 В) Система команд Обмен с картами SMC выполняется по командам (табл. 14.5). Команды подают- ся по шине данных и сопровождаются сигналом WE# при высоком уровне CLE. Подавать команду можно только при наличии готовности карты (высоком уров- не R/B#), исключение составляют команды чтения состояния и сброса (их мож- но подавать всегда). Вслед за командой посылается адрес (если требуется) и вы- полняется обмен данными. После команды чтения состояния по сигналу RE# карта возвращает байт состояния'. ♦ бит О (P/F) — признак успешности (0) или неудачи (1) выполнения опера- ции (действителен только при готовности); ♦ биты [5:1] — нули;
14.2. SmartMedia Card 355 ♦ бит 6 — готовность (1) или занятость (0) карты; ♦ бит 7 — защита записи (0) или нет защиты (1). Таблица 14.5. Команды SmartMedia Card Код Назначение 80h Serial Data Input — последовательный ввод данных для записи 00h Read (1) — чтение с первой половины страницы 01h Read (2) — чтение со второй половины страницы 50h Read (3) — чтение служебного поля FFh Reset — сброс (при любом состоянии R/B#) 10h Page Program — программирование страницы 60h, DOh Block Erase — стирание блока (требует двух байтов команды) 70h 0 Status Read — чтение состояния (при любом состоянии R/B#) 90h ID Read — чтение идентификатора Физический обмен данными с картой выполняется побайтно последовательно, начиная с указанного адреса. Адресация данных довольно специфична. Адрес байта состоит из номера страницы (старшая часть номера страницы является но- мером блока) и номера байта. Чтение данных начинается с подачи команды чтения, за которой следует адрес. Данные можно считывать, когда сигнал RY/BY# показывает готовность. Число считываемых данных произвольно; при переходе к данным следующей страницы (последовательное чтение, только в пределах блока) готовность теряется на вре- мя чтения страницы (£R). Последовательность адресов считываемых ячеек зави- сит от кода команды чтения (рис. 14.3). Для чтения данных следующего блока требуется новая команда чтения. Адрес байта для карт большого объема задается 3-5-байтной последовательностью, карты малого объема последние 1-2 байта игнорируют. Байты адреса несут следующую информацию: ♦ 1-байт (А[7:0]) — номер байта в странице относительно точки, определяемой командой: • для команды Read (1) — относительно начала первой половины страницы; • для команды Read (2) — относительно начала второй половины страницы; • для команды Read (3) — относительно начала служебной области, при 512-байтных страницах биты А[7:4] игнорируются, при 256-байтных стра- ницах игнорируются биты А[7:3]; ♦ 2-байт (А[ 16:9]) — младший байт адреса страницы; ♦ 3-байт (А[24:17]) — средний байт адреса страницы; ♦ 4-байт (А[32:25]) — старший байт адреса страницы; ♦ 5-байт (А[40:33]) — самый старший байт адреса страницы.
356 Глава 14. Интерфейсы и конструктивы твердотельных носителей Рис. 14.3. Последовательность считывания данных карт SmartMedia для разных команд: а — Read (1), б — Read (2), в — Read (3) Программирование страницы начинается с подачи команды ввода данных (80h), за которой следуют адрес ячейки (4 байта), 528 байт данных и команда програм- мирования (10h). После этого следует дождаться готовности (RY/BY#), считать состояние (команда 70h) и определить результат (успех или отказ). Верифика- ция записи происходит автоматически в микросхеме. Каждая страница может программироваться целиком или частями (сегментами), но число сегментов (се- ансов программирования одной страницы) — не более 3. Данные для байтов не- программируемых в данный момент сегментов должны иметь значение FF. Стирание блока начинается с подачи команды подготовки (60h), за которой сле- дуют адрес страницы стираемого блока (3 байта, начиная с А9) и команда стира- ния (DOh). После этого следует дождаться готовности (RY/BY#), считать состояние (команда 70h) и определить результат (успех или отказ). Верификация стирания происходит автоматически в микросхеме. Мультиблочное программирование состоит из серии подготовок к записи стра- ниц, за которой следуют команда программирования (15h) и ожидание готовно- сти; состояние считывается по команде 71h. Подготовка страниц начинается с подачи команды ввода данных (80h), за которой следуют адрес ячейки (4 байта) и 528 байт данных, подготовка завершается фиктивной командой программиро- вания (llh). При мультиблочном программировании можно записывать сразу несколько групп страниц, принадлежащих одному или нескольким (до четырех) блокам. Эти блоки должны принадлежать разным районам, но одной микро- схемы (chip) карты. В каждом программируемом районе можно использовать до 32 страниц. Чтение состояния по команде 71h дает результаты верификации по районам. Мультиблочное программирование накладывает ограничения на адре- са и число страниц в районах. В блоке страницы должны программироваться с нарастанием адреса страницы (необязательно последовательно, но немонотон- ный порядок запрещен). Мультиблочное стирание состоит из 1-4 последовательностей подготовки к сти- ранию (аналогично стиранию блока), но после команды стирания (DOh) по го- товности состояние считывается командой 71h, что дает результаты верифика- ции стирания по блокам (по районам). Стираемые блоки должны принадлежать одной микросхеме, но разным ее районам. Команда чтения идентификатора ID Read (1) (код 90h) позволяет считать 4 бай- та: код изготовителя, код устройства и два байта параметров.
14.2. SmartMedia Card 357 Команда чтения расширенного идентификатора ID Read (2) (код 91h) позволяет считать байт-индикатор 4-канальной организации (результат 21h указывает на возможность мультиблочных операций). Механизм чтения 128-битного идентификатора не разглашается. Логическая организация карты Для того чтобы карту SMC можно было использовать как полноценное устрой- ство хранения, способное записывать и считывать 512-байтые секторы по их ли- нейному адресу (LBA), определена стандартная логическая организация карты (рис. 14.4). Логическое устройство хранения Страницы флэш-памяти (физические секторы) Логические секторы S-1 Логический блок В-1 со X 5 со X <3 CIS/IDI Логический блок 3 Логический блок 2 Логический блок 1 Логический блок О Логический блок В-1 Логический блок 3 Логический блок 2 Логический блок 1 Логический блок О ММ Рис. 14.4. Логическая организация карты SmartMedia Физические блоки 2 1 О Логически карта разделена на зоны — наборы физических блоков; границы зон с физической организацией карт не связаны. Начальная зона предназначена для хранения идентификационной информации (CIS/IDI), остальная часть (storing area — область хранения) предназначена для записи и чтения данных. Эта часть может состоять из одной или нескольких зон хранения (read-write zone). Число зон хранения (максимальный номер зоны) зависит от объема карты. Каждая зона хранения образует массив логических блоков, состоящих из 16 или 32 секторов. Логический блок — это физический блок памяти, назначенный для использования. Каждый логический блок имеет свой логический номер, уникаль- ный в пределах зоны. Логический номер блока хранится в служебных секциях всех страниц (секторов) физического блока, в которых расположен данный логи- ческий блок. Для каждой зоны хранения на карте выделяется физических блоков больше, чем число логических блоков в зоне. Это дает свободу маневров при перезаписи сек-
358 Глава 14. Интерфейсы и конструктивы твердотельных носителей торов. Кроме того, должен быть запас на случай, если блок станет негодным (для этого достаточно «сломаться» всего лишь одному его сектору). Зона как часть логического устройства хранения представляет собой упорядо- ченную последовательность логических блоков с нарастающими номерами (от О до MAX BLOCKNUM-1). Все устройство хранения — это последовательность линейно адресуемых (LBA) логических секторов. По линейному логическому адресу сек- тора определяются номер его зоны (если зон хранения 2 и более), номер логиче- ского блока и номер сектора в блоке. Номер зоны (Zone) определяется делением логического адреса сектора на число секторов в зоне. Разделив остаток от деле- ния на число секторов в блоке, получаем логический номер блока (LogBlock). Ос- таток от этого деления дает номер сектора, то есть номер физической страницы в блоке (Sector). Номер физического блока (PhyBlock) определяется по заданному номеру логического блока через просмотровую таблицу (Look Up Table, LUT), формируемую драйвером устройства в ОЗУ. Таблица формируется по результатам чтения служебных данных всех физиче- ских блоков области хранения карты, индексом в таблице является номер логи- ческого блока, элементы таблицы содержат номера физических блоков. Таблица обеспечивает однозначное соответствие физических и логических блоков, одна- ко ситуация, когда не всем логическим блокам назначены номера физических блоков, считается нормальной. Для каждой зоны хранения должна быть своя таблица LUT, хотя может использоваться и одна (сквозная). Форматы физического блока и страниц Каждый физический блок состоит из набора секторов (по 512 байт данных), сов- падающих с физическими страницами (для карт со страницами 256 + 8 опериру- ют парами страниц). В служебной области каждой страницы находятся поля ЕСС-кода, относящиеся к данной странице, а также атрибуты блока (одинако- вые для всех страниц данного блока) и атрибуты страницы. Страницы (256 + 8) карт малого размера в плане служебной информации используют парами (чет- ные и нечетные), и логически такая пара 2 х (256 + 8) эквивалентна большой странице 512 + 16. Все физические страницы защищены ЕСС-кодом, поскольку носитель информа- ции является недостаточно надежным. Байты-признаки действительности, кор- ректности и пригодности информации страниц трактуются, исходя из свойств флэш-памяти: все байты стертой страницы имеют значение FF, при записи мож- но биты только обнулять. Поскольку какой-либо бит байта-признака может ока- заться дефектным, информативным является количество нулевых битов в байте- признаке (их всегда можно добавить). Страницы, содержащие информационную структуру и идентификатор карты, и страницы области хранения имеют различ- ную структуру. Страницы с полем CIS/IDI Поле CIS (Card Information Structure) содержит структуру, идентифицирующую карту, эта структура происходит из CIS PC Card. Поле IDI содержит информа- цию, которая сообщается по команде идентификации устройства (как в диске
14.2. SmartMedia Card 359 ATA); здесь не весь «паспорт диска», а лишь идентификаторы производителя и устройства, серийный номер и произвольная информация изготовителя (ос- тальное формирует драйвер). Поле CIS/IDI занимает 512-байтную страницу (или 2 х 256), оно может распола- гаться в нулевой или последующей странице блока; признаком действительно- сти данных CIS/IDIявляется значение Invalid Data Flag=FF в служебной области страницы. При недействительности данных в этой странице (Invalid Data Flag=OO) CIS/IDI следует искать в следующей странице. Нормально в неиспользуемых страницах блока с CIS/IDI все байты данных и служебные равны FF. Для повы- шения надежности поля CIS/IDI дублируются (каждое поле по 128 байт, 2 копии занимают страницу 512 байт). Структура областей данных и служебных полей страниц с CIS/IDI приведена в табл. 14.6. Поле CIS/IDI располагается в физиче- ском блоке 0, если он дефектный, то в другом нормальном блоке с минимальным физическим номером. Признаком ненормальности блока с CIS/IDI является два и более нулевых бита в 6-м байте служебных данных во всех страницах этого блока (для организации 256 + 8 — в 6-м байте служебных данных во всех нечет- ных страницах этого блока). Для области хранения используются все остальные нормальные блоки карты. Таблица 14.6. Назначение байтов страницы для блока с CIS/IDI Номер байта в странице 512 + 16 Номер байта в странице 256 + 8 Назначение 0-127 0-127 (чет.) CIS Field-1, 1-я копия CIS 128-255 128-255 (чет.) IDI Field-1, 1-я копия IDI 256-383 0-127 (нечет.) CIS Field-2, 2-я копия CIS 384-511 128-255 (нечет.) IDI Field-2, 2-я копия IDI 512-515 256-259 (чет.) Function Select Information Field, (FF FF FF FF, резерв на будущее) 516 260 (чет.) Invalid Data Flag, флаг недействительности данных: FF — данные действительны, 00 — нет1 517 261 (чет.) Признак нормального блока: FF — блок нор- мальный, 00 — нет2 518-519 262-263 (чет.) 0000И (фиксированное значение) 520-522 256-258 (нечет.) ЕСС Field-2, контрольные биты для байт 256-511 523-525 259-260 (нечет.) 0000И (фиксированное значение) 525-527 261-263 (нечет.) ЕСС Field-1, контрольные биты для байт 0-255 1 4 и более нулевых бита в этом байте считаются эквивалентными 00. 2 2 и более нулевых бита в этом байте считаются эквивалентными 00.
360 Глава 14. Интерфейсы и конструктивы твердотельных носителей Страницы области хранения В страницах области хранения (табл. 14.7) помимо собственно данных содер- жится информация о блоке, к которому принадлежит страница, — его логиче- ский номер и информация о состоянии. Логический номер блока хранится в виде двух копий поля адреса (Block Address Field-1, Block Address Field-2) в служеб- ной области страницы, каждая копия защищена битом Р (дополнение до четного числа единичных битов). Согласно физической спецификации 1.0, поле адреса показано на рис. 14.5. Приведенный формат позволяет адресовать до 1024 логи- ческих блоков (0-3FFh), что при размере блока 16 Кбайт (32 страницы) позво- ляет адресовать до 16 Мбайт. Байт 1 2 7 6 5 4 3 2 1 0 0 0 0 1 0 ВА9 ВА8 ВА7 ВА6 ВА5 ВА4 ВАЗ ВА2 ВА1 BA0 Р Рис. 14.5. Формат поля адреса блока Таблица 14.7. Назначение байтов страницы для блока области хранения Номер байта в странице 512 + 16 Номер байта в странице 256 + 8 Назначение 0-511 0-255 Data area, данные 512-515 256-259 (чет.) Reserved Field, резерв на будущее (FF FF FF FF) 516 260 (чет.) Data Status Byte, флаг состояния данных: FF — данные корректны, 00 — нет1 517 261 (чет.) Block Status Byte, флаг состояния блока: FF — блок нормальный, 00 — дефектный2 518-519 262-263 (чет.) Block Address Field-1, 1-я копия адреса блока 520-522 256-258 (нечет.) ЕСС Field-2, контрольные биты для байт 256-511 523-524 259-260 (нечет.) Block Address Field-2, 2-я копия адреса блока 525-527 261-263 (нечет.) ЕСС Field-1, контрольные биты для байт 0-255 1 4 и более нулевых бита в этом байте считаются эквивалентными 00. 2 2 и более нулевых бита в этом байте считаются эквивалентными 00. ЕСС-контроль ЕСС-контроль выполняется внешними (по отношению к карте SMC) средства- ми, карта обеспечивает только место для хранения ЕСС-кода. Принятая схема ЕСС-контроля позволяет исправлять все однократные и обнаруживать все дву- кратные ошибки в каждой странице. Для каждых 256 байт данных в странице имеется 22-битное поле ЕСС-кода, располагающееся в трехбайтных полях ЕСС Field-1 (для байтов 0-255) и ЕСС Field-2 (для байтов 256-511), как показа-
14.2. SmartMedia Card 361 но на рис. 14.6. 256-байтные поля данных рассматриваются как 2048-битные строки. Каждый бит строки получает свой И-разрядный адрес, который записы- вается в форме LLLLLLLL,CCC, где LLLLLLLL — номер байта, ССС — номер бита в байте. Биты строки выстраиваются в таблицу (матрицу) размером 256 строк на 8 столб- цов. Для ее строк и столбцов вычисляются контрольные биты LP[OO: 15] и СР[0:5] как дополнение до нечетного (odd parity) числа единичных битов, адреса кото- рых соответствуют условиям, приведенным в табл. 14.8. В маске адреса символ х означает любое значение бита. В случае однократной ошибки (искажен один бит данных в странице) несовпадение контрольных битов, рассчитанных при считы- вании по битам данных, с хранящимся в служебной области, будет в одном из пары контрольных битов, указанных в каждой строке таблицы. При этом адрес искаженного бита станет известен (EL[7:0], ЕС[2:0]) и значение бита можно будет исправить. Если из всех контрольных битов не совпал лишь один, это означает ошибку в самом контрольном бите. Остальные варианты несовпадений означают неисправимую ошибку. Таблица 14.8. Формирование ЕСС-кода в картах SMC Бит Маска адреса Адрес ошибки Бит Маска адреса Адрес ошибки LPOO хххххххО.ххх ELO=O LPO1 ХХХХХХХ1,ХХХ ELO=1 LP02 ххххххОх.ххх Е1_1=0 | LP03 хххххх1х,ххх EL1=1 LP12 хОхххххх.ххх EL6=0 | LP13 х1хххххх,ххх EL6=1 LP14 Оххххххх.ххх EL7=0 | LP15 1ххххххх,ххх EL7=1 СРО хххххххх.ххО ЕС0=0 СР1 ХХХХХХХХ,ХХ1 EC0=1 СР2 хххххххх.хОх ЕС1=0 СРЗ хххххххх,х1х EC1=1 СР4 хххххххх.Охх ЕС2=0 СР5 хххххххх,1хх EC2=1 7 6 5 4 3 2 1 0 Страницы 256+8 Страницы 512+16 LP07 LP06 LP05 LP04 LP03 LP02 LPO1 LPOO Байты 256, 261 Байты 520, 525 LP15 LP14 LP13 LP12 LP11 LP1O LP09 LP08 Байты 257, 262 Байты 521, 526 CP5 CP4 CP3 CP2 CP1 CPO 1 1 Байты 258, 263 Байты 522, 527 Рис. 14.6. Расположение контрольных битов карт SMC Выделение, освобождение, стирание физических блоков Физические блоки могут пребывать в разных состояниях: ♦ Блок является свободным, если все байты служебных областей всех его стра- ниц пустые (FFh). При этом подразумевается, что и все поля данных тоже пустые. Блок становится свободным после стирания.
362 Глава 14. Интерфейсы и конструктивы твердотельных носителей ♦ Блок является назначенным, если в адресных полях хотя бы одной его стра- ницы прописан непустой логический номер и все страницы действительны (или пустые). ♦ Блок (сектор) является действительным, если Data Status Byte = FF. Если Data Status Byte = 00 — данные недействительны. ♦ Блок является негодным, если Data Status Byte = 00. При первоначальной записи сектора логического блока выбирается свободный нормальный физический блок, и в страницу, соответствующую номеру сектора, записываются данные, флаг их действительности, поля ЕСС и две копии логиче- ского номера блока. Если запись прошла успешно, номер физического блока прописывается в таблице LUT, иначе выбирается другой блок, а плохой помечает- ся соответствующим флагом. При записи других секторов в этот же логический блок тот же логический номер прописывается в требуемые страницы. При пере- записи любого сектора (группы секторов) логического блока все неизменяемые секторы старого блока должны быть скопированы в новый (свободный) блок. Затем в новый блок записываются обновляемые секторы (и их ЕСС). При ус- пешной записи в LUT заносится номер нового физического блока, старый блок помечается как недействительный (далее его можно стереть). При неудаче запи- си выбирается другой свободный блок. Очевидно, что посекторная модифика- ция крайне невыгодна, более эффективны мультисекторные операции записи. Файловая система В SMC в качестве внешней памяти используется файловая система FAT (FAT- 12 или FAT-16). Логически устройство представляется как жесткий диск, имею- щий главную загрузочную запись (Master Boot Record, MBR) с таблицей разде- лов, в которой указывается лишь первое вхождение. Для описания в таблице разделов принимается эмуляция трехмерной адресации CHS в зависимости от объема памяти устройства. Взаимодействие с устройством выполняется в режи- ме LBA (линейный адрес сектора). Для доступа к файлам данных (чтение) считывающее устройство должно выпол- нить следующую процедуру. 1. Считать CIS/IDI, чтобы определить объем карты и инициализировать пустую таблицу LUT. 2. Считать логические адреса всех годных физических блоков, имеющих запи- санные страницы (может потребоваться чтение всех страниц блока, чтобы найти записанную), чтобы заполнить таблицу LUT. 3. Считать страницу с MBR — найти описание раздела (по спецификации дол- жен быть лишь 1), найти номер начального сектора раздела (страницы с boot- блоком). 4. Считать страницу с boot-блоком — найти описание логического диска, вычис- лить страницу с корневым каталогом (root). Считать страницы с корневым каталогом (root) — получить список файлов (и подкаталогов) в корне.
14.3. MultiMediaCard и Sequre Digital 363 5. Найти требуемый файл, определить сектор FAT с его началом, считать FAT, найти страницы с секторами файла и их считать. Столь подробное описание SMC показывает, насколько сложна работа с «голой» флэш-памятью (не имеющей контроллера). Работа с винчестером, где любой сектор прямо адресуем и его можно в любой момент просто перезаписать, гораз- до проще (благодаря его встроенному контроллеру). 14.3. MultiMediaCard и Sequre Digital Карты MultiMediaCard (ММС) и Secure Digital (SD) предназначены для хране- ния мультимедийной информации, включая электронные книги (eBook). Одна- ко назначение этих карт различно: карты ММС предназначены для широкого распространения данных — музыки, игр, электронных книг, — они являются до- вольно дешевыми носителями информации. Карты SD предназначены для без- опасного (в смысле конфиденциальности) распространения информации, они несколько дороже. Карты ММС могут содержать постоянную (ROM) или перезаписываемую (флэш) память или использоваться как устройства ввода-вывода (как коммуникацион- ные устройства). Доступ к данным может быть защищен паролем. Карта предос- тавляет только память, которая может быть и ненадежной. Контроль и исправле- ние ошибок возлагаются на внешние (по отношению к карте) компоненты: интеллектуальный адаптер или драйвер в хосте (с примитивным адаптером, ко- торый может быть даже просто программно-управляемым интерфейсом на базе LPT-порта). В картах ММС помимо собственно памяти имеются несколько ре- гистров. Регистр OCR (Operation Conditions Register) хранит параметры пита- ния карты и позволяет определять состояние питания. Регистр CID (Card IDen- tification) содержит уникальный 128-битный идентификатор карты. Регистр CSD (Card-Specific Data) определяет тип содержимого памяти и атрибуты досту- па: формат данных, метод коррекции ошибок, время доступа и т. п. В 16-битный регистр относительного адреса (Relative Card Address, RCA) можно записать ад- рес, используемый для адресуемых обменов хоста с картой. Адрес устанавлива- ется на этапе идентификации, по умолчанию — ООО lh. Существует несколько вариантов карт: ♦ Обычные карты ММС, размер 32 х 24 х 1,4 мм (рис. 14.7, а), 1-битная шина данных при частоте до 20 МГц, питание — 3,3 В (2,7-3,6 В). ♦ Карта MMPplus при тех же размерах может иметь разрядность шины 1, 4 или 8 бит при частоте до 26 МГц (52 МГц в картах HS-MMC), скорость чтения — не ниже 2,4 Мбайт/с, питание — 3,3 В. ♦ Карты MMCmobile, они же DV-RS-MMC, — это карты уменьшенного размег pa (reduced size) 18 х 24 х 1,4 мм (рис. 14.7, б), которые с помощью механиче- ского адаптера-удлинителя можно вставлять в обычный слот. Питание двой- ное (dual voltage) — 1,8 В (1,65^-1,95) или 3,3 В (на выбор). Разрядность и скорость те же.
364 Глава 14. Интерфейсы и конструктивы твердотельных носителей ♦ Secure ММС — карты с развитыми функциями защиты информации (некая* комбинация ММС и смарт-карты в конструктиве ММС). Питание двойное, разрядность и скорость те же. В 2005 г. были доступны полноразмерные карты до 1 Гбайт и мини-карты до 256 Мбайт. а Рис. 14.7. Карты памяти ММС: а — обычная (вид сзади), б — DV-RS-MMC, в — адаптер Интерфейс карт может работать в двух режимах: шины ММС и SPI, — режим выбирается при инициализации (после подключения). В режиме шины ММС сигнал Clk сопровождает каждый бит данных на шине CMD и все (1, 4 или 8) биты шины DAT. Тактовая частота может лежать в пределах от нуля до макси- мальной (20, 26 или 52 МГц). Двунаправленная линия CMD предназначена для подачи команды на карту и получения от нее ответа. При использовании данно- го режима возможны команды одиночного, последовательного и блочного чте- ния/записи. Передача данных контролируется CRC-кодом. К шине ММС мож- но подключить несколько карт, адресуя их с помощью регистра адреса. В режиме SPI используется однобитный интерфейс с раздельными линиями вво- да и вывода (см. [3]). В этом режиме CRC-контроль передач не применяется. Карты можно соединять в цепочку, для выбора карты задействуют сигнал CS. Назначение контактов карт ММС и SD приведено в табл. 14.9. У обычных карт ММС отсутствуют контакты 9-13, у карт SD нет контактов 10-13. Карты Secure Digital (SD) «отпочковались» от первоначального варианта карт ММС. В картах SD используется 4-битная шина данных. В первоначальной вер- сии частота интерфейса достигала 25 МГц, в версии SD1.1 частота поднята до 50 МГц. Конструктивно карты SD сделаны так, что устройства, работающие с ними, физически могут взаимодействовать и с картами ММС, но не наоборот
14.3. MultiMediaCard и Sequre Digital 365 (в тонкий слот ММС более толстую карту SD не вставить). Логическая совмес- тимость должна быть реализована программным обеспечением хоста (устройства, в которое вставляют карту). Карты SD разработаны альянсом трех компаний — Toshiba, Matsushita (более известная по торговой марке Panasonic) и SanDisk, которые организовали ассоциацию SDA (Secure Digital Association), выпускаю- щую спецификации, принятые уже сотнями фирм во всем мире. Членство в ас- социации платное и дорогостоящее; по вполне понятным причинам технические детали SD широко не освещаются (иначе грош цена провозглашаемой безопас- ности). Таблица 14.9. Назначение контактов карт ММС и SD Контакт Цепь в режиме ММС Цепь в режиме SPI 1 DAT3* CS 2 CMD DI 3 Vss1 Vss1 4 Vdd Vdd 5 CLK SCLK 6 Vss2 Vss2 7 DATO DO 8 DAT1* - 9 DAT2* - 10 DAT4* - 11 DAT5* - 12 DAT6* - 13 DAT7* - * Цепи могут не использоваться. Карты SD (рис. 14.8, а) имеют размер 32 х 24 х 2,1 мм; справа на рисунке виден переключатель защиты записи (WP), предохраняющий от случайного стирания. На печатной плате карты SD смонтированы флэш-память структуры NAND, SD- контроллер и вспомогательные компоненты. 9-контактные разъемы карт SD и ММС совпадают (см. табл. 14.9). Карты SD допускают «горячее» подключе- ние/отключение. Конструкция коннектора рассчитана на 10 000 циклов вставки- изъятия. Карты выдерживают до 200 000-300 000 циклов записи в каждый блок флэш-памяти и падение на пол с высоты 3 м. Они устойчивы и к жаре, и к моро- зу. Скорость передачи данных у первых карт SD — 2 Мбайт/с, объем — 8-512 Мбайт; в 2005 г. достигнута скорость чтения и записи 22,5 и 15 Мбайт/с соответственно и объем до 2 Гбайт. Начальная удельная цена хранения была вы- сокой — 3 доллара за 1 Мбайт, но в 2006 г. она уже снизилась до уровня 0,2 дол- лара за 1 Мбайт (что тоже немало).
366 Глава 14. Интерфейсы и конструктивы твердотельных носителей Q 1 2 3 4 5 6 7 ft а WP (защита записи) Рис. 14.8. Карты SD: а — обычная (вид сзади), б — MiniSD, в — адаптер Карты MiniSD (рис. 14.8, б) имеют те же свойства, но уменьшенные габариты (20 х 20 х 1,27 мм) и емкость (пока до 1 Гбайт), питание — 2,7-3,6 В. Для уста- новки в слот стандартных карт SD предназначены пассивные адаптеры (рис. 14.8, в). Для карт SD разработаны (и разрабатываются) спецификации форматов данных на трех уровнях: ♦ физический уровень описывает перезаписываемые карты (SD-Rewritable) и постоянную память (SD-Read Only); ♦ уровень файловой системы использует стандарт ISO 9293; ♦ прикладной уровень учитывает специфику атрибутов различных типов содер- жимого, в том числе музыки (SD-Audio), изображений (SD-Picture), речи (SD-Voice), видео (SD-Video) и др. На всех уровнях действуют средства безопасности (security), являющиеся основ- ным «коньком» SD. В SD используются технологии обеспечения безопасности CPRM (Content Protection for Recordable Media — защита содержимого записы- ваемых носителей) — стандарта шифрования и сертификации/аутентификации, разработанного и лицензируемого фирмами IBM, Intel, Matsushita (Panasonic) и Toshiba. Карты SD-Audio отвечают требованиям SDMI (Secure Digital Music Initiative) к портативным устройствам. Карта SD имеет три области хранения с разными возможностями доступа: об- ласть хранения ключей шифрования и аутентификации, область секретных дан- ных и область данных общего назначения. Секретные данные хранятся и пере- даются в зашифрованном виде, их кодирование-декодирование выполняется хостом (устройством, в которое устанавливается карта). Для того чтобы устано- вить канал обмена секретными данными, требуется взаимная аутентификация хоста и карты: хост должен «признать» карту, а карта — хост. Таким образом, об- мен данными с защищенной областью карты возможен только на «фирменных» устройствах (до тех пор, пока алгоритмы и ключи шифрования не попадут в руки хакеров). Карты SD продаются в форматированном виде, при необходимости они могут быть переформатированы на специальном устройстве или хосте SD, имеющем функции форматирования. Нештатное форматирование (например, на компью-
14.4. Miniature Card 367 тере) может привести карту в негодность — защита может сработать как дверь, захлопнувшаяся на замок, единственный ключ от которого остался внутри. Совместимость SD и ММС весьма ограничена. Хосты карт SD совместимы с кар- тами ММС на физическом уровне; в картах ММС и SD используется одна и та же структура таблицы размещения файлов (FAT), чем обеспечивается совмести- мость и на уровне записи/чтения файлов. Однако на прикладном уровне про- граммные спецификации («начинки») этих карт могут различаться. Так, в МРЗ- плееры, ориентированные на карты SD, из-за разницы в форматах данных нель- зя вставлять карты ММС. Данные общего назначения (не секретные) могут быть перенесены с ММС на SD, но перенос секретных данных хосты не допустят (если хост — не компьютер со взломанным ПО). Хосты для карт ММС и SD не- совместимы даже чисто физически (карты SD в слот для ММС не влезут по тол- щине). Помимо карт SD-памяти, планируется выпуск карт ввода-вывода (SD I/O card). В первую очередь рассматривается интерфейс Bluetooth, позволяющий быстро и без проводов синхронизировать данные устройств, имеющих слот SD, друг с другом и с устройствами с этим интерфейсом. 14.4. Miniature Card Карты Miniature Card предназначены для использования в недорогих устройст- вах бытовой электроники в качестве сменной флэш-памяти, а также расширения динамической памяти (рис. 14.9). Рис. 14.9. Карта Miniature Card: a — общий вид, б — вид снизу В интерфейсе карт обеспечивается линейный доступ к произвольной ячейке па- мяти с адресуемым объемом до 64 Мбайт. Карты имеют немультиплексирован- ную 16-разрядную шину данных и могут работать в пакетном режиме передачи. Также имеется возможность работы с 8-разрядным хостом (старший и младший байты шины запараллеливаются, линия BS8# заземляется). Интерфейс хоста для этих карт конфигурируется на функционирование в режиме DRAM или флэш- памяти; карты снабжаются микросхемой энергонезависимой памяти идентифи-
368 Глава 14. Интерфейсы и конструктивы твердотельных носителей кации с интерфейсом 12С. Карты имеют прорези для правильного позициониро- вания и коннектор, обеспечивающий «горячее» (даже для DRAM!) подключе- ние. При установке передний край карты вводят в слот, при этом подключаются контакты «первой очереди»: GND, Vcc и CINS# (контакт, замыкающийся на «зем- лю»). Затем карта опускается вниз, прижимаются контакты основного эласто- мерного разъема и замыкается контакт обнаружения сигнала CD#. Карты могут работать с питанием 5 и 3,3 В; для идентификации питания служат сигналы VS1#, VS2#. Карта Miniature Card через переходный адаптер может устанавли- ваться в слот PC Card типа 2. При работе по интерфейсу DRAM используются линии адреса А[12:0] и управ- ляющие сигналы RAS#, CASH# и CASL# (стробы для старшего и младшего бай- тов), а также WE#. Карты имеют отдельную линию питания VCCR для регенера- ции при отключенном основном питании. При работе по интерфейсу флэш-памяти используются линии адреса А[24:0] и управляющие сигналы OE# (чтение), WE# (запись), CEH# и CEL# (выборка для старшего и младшего байтов).
ГЛАВА 15 Шины USB и FireWire для устройств хранения Шины USB и FireWire (IEEE 1394) для устройств хранения обеспечивают пере- дачу устройствам команд, определяющих выполняемую операцию, получение от устройства информации о завершении исполнения команды и, наконец, транс- портировку хранимых данных. Эти шины похожи друг на друга: ♦ возможностью подключения значительного числа внешних и внутренних уст- ройств; ♦ удобными и компактными кабелями и разъемами; ♦ возможностью «горячего» подключения-отключения; ♦ поддержкой РпР и т. п. Однако за внешней похожестью стоит принципиально разная идеология взаимо- действия: корни равноранговой шины FireWire — в интерфейсе SCSI, хост-цен- трическая шина USB по идеологии близка к АТА. Шина USB является сугубо хост-центрической: она обеспечивает обмен инфор- мацией между устройством и оперативной памятью хоста (компьютера, к кото- рому это устройство подключено). Конфигурирование устройств (начиная с назначения адресов) выполняется программным обеспечением хоста и занимает значительное время (от секунд до минут). Равноранговые обмены между устрой- ствами в USB не предусмотрены. В обмене информацией участвуют аппаратные средства (хост-контроллер USB) и программное обеспечение (драйверы). Все опе- рации обмена (транзакции на шине USB) планируются и исполняются по ини- циативе хоста со значительным привлечением ресурсов его центрального про- цессора1. Периферийные устройства на шине являются сугубо пассивными (они только ждут обращений хоста). Увеличение числа подключенных устройств вле- чет за собой повышение нагрузки на центральный процессор. При большой на- грузке ресурсов центрального процессора может оказаться недостаточно для полного использования пропускной способности шины. Устройства хранения с интерфейсом USB в современных ПК поддерживаются на уровне BIOS: они могут использоваться в качестве устройств начальной загрузки. 1 Хост-контроллеры ОНС, в определенной степени свободные от этого недостатка, менее распространены, чем контроллеры UHC, к которым данное замечание относится в пол- ной мере.
370 Глава 15. Шины USB и FireWire для устройств хранения Шина FireWire является равноранговой: на ней возможен обмен информацией между любыми парами устройств (а также широковещательные передачи). Кон- фигурирование устройств и шины выполняется низкоуровневыми аппаратными средствами устройств, при подключении-отключении устройств реконфигури- рование занимает доли секунды. Обмен устройств с компьютером происходит так же через ОЗУ компьютера, но большая часть работы выполняется аппарат- ными средствами хост-контроллера с минимальным участием процессора. Каждое периферийное устройство содержит внутри себя сервер устройства, берущий на себя инициативу по доставке команд, данных и информации о состоянии. Благо- даря этому обеспечивается масштабируемость системы: подключение дополни- тельных устройств привносит в систему новых агентов доставки (серверов уст- ройств), так что коэффициент полезного использования шины при увеличении числа устройств не снижается. Устройства хранения с интерфейсом FireWire в PC-совместимых компьютерах, как правило, поддерживаются только средствами операционной системы; возможность загрузки с них пока поддерживается редко. В ПК Macintosh интерфейс FireWire давно уже является одним из штатных ин- терфейсов устройств хранения. Подробную информацию о шинах USB и FireWire можно найти в [2], здесь огра- ничимся лишь краткими сведениями, необходимыми для понимания механиз- мов взаимодействия с устройствами хранения. 15.1. Применение шины USB для устройств хранения данных Интерфейс USB широко используется для подключения внешних переносных устройств хранения данных: магнитных (винчестеров), оптических (CD и DVD), магнитооптических, флэш-«дисков», флэш-карт (с использованием переходных адаптеров). По меркам устройств хранения USB обеспечивает среднюю скорость передачи: от 1 до 24 Мбайт/с. Шина USB для подключения внешних устройств хранения привлекательна широкой доступностью (в компьютерах всех классов), а также возможностью питания устройств от шины. Устройства хранения с подвижным носителем и интерфейсом USB, как правило, состоят из обычного накопителя с интерфейсом АТА и микроконтроллера-мос- та, транслирующего транзакции USB в транзакции АТА. Несмотря на ограни- чение скорости USB, здесь имеет смысл применение режимов UltraDMA на интерфейсе АТА. В цепочке «хост—привод» появляется дополнительная проме- жуточная «перевалочная база», в которой происходит преобразование последо- вательного интерфейса (USB) в параллельный (АТА), причем целыми пакетами USB. До того как закончится передача данных для одной команды, следующая команда передаваться не будет (так, увы, обычно реализована программа микро- контроллера-моста). Так что минимизация времени передачи на промежуточном этапе позволяет сократить время выполнения команды и приблизиться к пре- дельной пропускной способности интерфейса USB для одного устройства (его конечной точки). В твердотельных устройствах протокольные функции USB обеспечиваются микроконтроллером, обслуживающим флэш-память.
15.1. Применение шины USB для устройств хранения данных 371 О способности устройств к многозадачной работе (поддержка очередей команд) при подключении по шине USB говорить не приходится. Таким образом, рас- сматривать USB как интерфейс подключения основного устройства хранения (винчестера) не стоит, его роль — обеспечение удобного подключения перенос- ных устройств. Подключение устройства USB Устройства хранения с интерфейсом USB подключаются к хост-контроллеру USB (его корневому хабу) непосредственно или через промежуточные хабы. Устройства хранения могут быть как полноскоростными (Full Speed, FS), так и высокоскоростными (High Speed, HS) устройствами USB. Низкоскоростными (Low Speed, LS) их не делают (на этой скорости передачи массивов данных недо- пустимы). Для устройства HS (только в USB 2.0) шина обеспечивает полезную пропускную способность до 24 Мбайт/с (половина теоретической пропускной способности шины), для FS скорость едва достигает 1 Мбайт/с. Высокая ско- рость обеспечивается только для устройств HS, подключенных к контроллеру USB 2.0 непосредственно или через хабы USB 2.0. Если на пути от устройства HS к хост-контроллеру появляется хаб USB 1.x, скорость работы автоматически понизится до FS. Высокоскоростная работа контроллера USB 2.0 может не под- держиваться компьютером по вине ОС или драйверов, эта проблема решается установкой более современного ПО. Кроме того, возможны временные «капри- зы», когда порт USB 2.0 вдруг отказывается работать с устройством HS на высо- кой скорости. Эта проблема обычно устраняется после перезагрузки ОС и/или повторного отключения-подключения устройства (к этому или другому порту), в крайних случаях дело доходит до переустановки драйверов. Шина USB обеспечивает подключаемым устройствам питание: номинальное на- пряжение 5 В при токе до 0,5 А (мощный порт) или до 0,1 А (маломощный порт). Мощными являются порты компьютеров и хабов, питающихся от сети. Мало- мощными являются порты хабов, питающихся от шины, а также портативных компьютеров при их автономном питании. Формально в USB заложены средст- ва управления питанием: устройство в дескрипторе сообщает свои потребности в питании, и хост не должен конфигурировать (разрешать работу) устройства, если ресурсов питания недостаточно. На практике зачастую (по разным причи- нам) устройство конфигурируется, включается в работу, но работа с ним может оказаться неустойчивой (или вообще невозможной) именно из-за недостатка питания, причем без каких-либо диагностических сообщений, указывающих на проблемы питания. Для подключения устройств USB применяются разъемы, изображенные на рис. 15.1; на рисунке показана и полярность напряжения питания. Разъемы USB устанавливаются на системной плате и картах-контролерах, однако эти разъемы выходят на заднюю стенку ПК, что не всегда удобно. Дополнительные разъемы, выходящие на лицевую панель, боковые стенки или скобки, устанавливаемые в слоты задней стенки, подключаются к контроллеру кабелями с промежуточ- ными разъемами. Эти промежуточные разъемы могут быть источником ошибок подключения, влекущих за собой неприятные последствия разной степени тяже-
372 Глава 15. Шины USB и FireWire для устройств хранения сти: от временной неработоспособности устройств и «зависаний» компьютера до выгорания устройств и системной платы. Форма вилки Форма вилки е mini-A Рис. 15.1. Разъемы USB: а — гнездо А, б — гнездо В, в — гнездо mini-B, г — вилка mini-B, д — вилка mini-A, е — гнездо mini-AB ВНИМАНИЕ ----------------------------------------------------------- Ошибка в полярности подводимого питания на разъеме USB может необратимо повредить подключаемое устройство. По этой причине наиболее безопасными для подключаемого уст- ройства являются внешние разъемы USB, запаянные на системной плате или карте контролле- ра USB. Их неправильное подключение маловероятно. Для подключения устройств USB 2.0 должны использоваться кабели, имеющие соответствующую маркировку: от кабелей USB 1.0 они отличаются наличием эк- рана и несколько большей толщиной. Максимальная длина кабеля от устройства до порта не должна превышать 5 м. Между хостом и устройством может распо- лагаться до 5 промежуточных хабов, таким образом, максимальное удаление уст- ройства от компьютера может достигать 6 х 5 = 30 м. Превышение указанных ог- раничений чревато срабатыванием тайм-аутов ожидания ответа. Программное взаимодействие с устройствами USB При подключении устройства USB ОС идентифицирует его (считав дескрипто- ры), назначает ему адрес, загружает драйверы и связывает их с данным устройст- вом. В ОС Windows соответствие устройств и драйверов прописывается в реест- ре; если для идентификаторов подключенного устройства нет записи в реестре, ОС запускает процедуру установки драйверов, которая может выполняться как автоматически, так и с привлечением пользователя. Устройство становится дос- тупным для использования только после успешной идентификации устройства и установки драйверов. Однако устройства хранения (флэш-карты) могут стать доступными для работы и раньше, чем операционная система установит все драйверы, нужные (по мнению ОС) для данного устройства.
15.1. Применение шины USB для устройств хранения данных 373 ПРИМЕЧАНИЕ ---------------------------------------------------------- В реестре ОС Windows устройство USB идентифицируется не только по собственным дескрип- торам, хранящимся в устройстве, но и по номеру порта, к которому оно подключено. При этом перестановка устройства в иной порт (даже в соседний порт промежуточного хаба) восприни- мается как установка нового (!) оборудования и влечет за собой установку драйверов и новую запись в реестре. Старые записи при этом не удаляются. Программное взаимодействие с устройством USB осуществляется через его драй- вер, который, в свою очередь, пользуется сервисами системного драйвера USBD (USB Driver). Драйвер устройства имеет возможность обмениваться информа- ционными блоками с устройством через каналы (pipe), связанные с конечными точками (End Point, ЕР), входящими в интерфейс. Каждое устройство USB может содержать один или несколько интерфейсов — наборов конечных точек, используемых для взаимодействия с некоторым функциональным блоком. Уст- ройство имеет набор дескрипторов, в которых описываются конфигурации (набо- ры интерфейсов), интерфейсы (наборы конечных точек) и сами конечные точки. Для устройства (или каждого его интерфейса) определяются коды его класса, под- класса и протокола; устройство имеет идентификаторы производителя (Vendor ID, VID) и продукта (Product ID, PID). По этим кодам и идентификаторам об- наруженное устройство USB связывается со своим драйвером. На физическом уровне обмен информацией происходит пакетами, передаваемы- ми по последовательному интерфейсу с необходимой защитой от искажения (дублирование полей и CRC-контроль). Транзакции состоят из пакетов-марке- ров, определяющих тип транзакции и адрес (номера устройства и точки), паке- тов данных и пакетов квитирования. Время на шине разбивается на кадры (ин- тервал 1 мс), а в USB 2.0 на высокой скорости — на микрокадры (125 мкс). В кадре может умещаться несколько транзакций, каждая транзакция не должна пересекать границу (микро)кадра. С помощью пакетов квитирования, посылае- мых и хостом, и устройством, на шине USB обеспечиваются гарантированная доставка и управление потоком. Пакет АСК подтверждает прием пакета данных или выполнения операции; пакет NAK сигнализирует о временном отказе от приема1 или незавершенности операции; пакет Stall сигнализирует об остановке канала по инициативе устройства или об отрицательном результате выполнения управляющей транзакции. Пакет, принятый с ошибкой, игнорируется — повтор будет организован автоматически (аппаратными средствами) по тайм-ауту. Ос- тановленный канал для дальнейшего использования должен быть «оживлен» специальным управляющим запросом Clear EP Halt. К сожалению, не все драй- веры позволяют отличать отказ выполнения запроса ввода-вывода из-за блоки- ровки канала от отказа по тайм-ауту из-за длительной неготовности устройства. Каждый канал связан с одной конечной точкой устройства. В зависимости от типа конечной точки связанный с ней канал обеспечивает передачи одного из четырех типов: 1 В USB 2.0 есть еще ответ NYET, которым устройство подтверждает прием пакета, но пре- дупреждает о временном отсутствии свободного места для приема следующего.
374 Глава 15. Шины USB и FireWire для устройств хранения ♦ Control — управляющая передача, обеспечивающая гарантированную двуна- правленную доставку с невысокой пропускной способностью (малая скорость обусловлена малым разрешенным размером пакета). Управляющая передача начинается с фазы установки (Setup), в которой хост передает устройству 8-байтный управляющий блок (запрос) стандартной структуры (см. далее). Затем может следовать фаза данных, в которой устройству передается блок данных (транзакция Control Write) или из него принимается блок данных (транзакция Control Read). Длина блока данных произвольна (она указывает- ся в запросе). Завершается передача фазой состояния (Status), в которой уст- ройство подтверждает (пакетом АСК) или отвергает (пакетом Stall) успешное выполнение данного запроса. Эта фаза может быть довольно длительной — устройство может посылать пакеты NAK, пока не завершит внутреннюю обра- ботку запроса. ♦ Bulk-IN, Bulk-OUT — передача массивов данных от устройства (Bulk-IN) или к устройству (Bulk-OUT). Гарантируется надежность доставки (с автоповто- ром пакетов, принятых с ошибкой), но нет обязательств по времени выполне- ния передач (используется пропускная способность шины, остающаяся от пе- редач иных типов). ♦ Interrupt-IN, Interrupt-OUT — «прерывания», гарантированная доставка паке- тов с гарантированной предельной задержкой обслуживания устройства, го- тового к обмену. Время обслуживания может немного увеличиться, если из- за ошибки потребуется повтор передачи пакета. В USB 1.x прерывания используются для передачи лишь коротких пакетов, время обслуживания мо- жет заказываться в пределах 1-125 мс. В USB 2.0 по одному прерыванию можно передавать до 3 Кбайт данных и требовать времени обслуживания от 125 мкс до 4 с. Таким образом, передачи данного типа позволяют организо- вать ввод или вывод данных с высокой (до 24 Мбайт/с) скоростью передачи. «Прерывания» в USB организуются в виде периодических попыток обмена с конечными точками данного типа; период попыток и определяет макси- мальную задержку обслуживания. ♦ Isoc-IN, Isoc-OUT — изохронные передачи потоков с гарантированной (зара- нее согласованной) пропускной способностью. В случае обнаружения ошиб- ки приема пакет повторно не передается. Изохронные каналы обеспечивают регулярную (с заданным периодом) передачу пакетов с длиной, не превы- шающей установленную. Особенность транзакций через точку типа Control — безусловная синхронизация передачи в обоих направлениях: данные, считываемые по транзакции Control Read, гарантированно относятся к запросу, посланному в фазе Setup этой транзакции. При чередовании передач Control Read и Control Write порядок выполнения опе- раций чтения и записи строго соответствует порядку запросов передач на сторо- не программного обеспечения (запросов к драйверу устройств). Запросы управ- ляющих передач выполняются драйвером всегда синхронно (функцией lOjControl), и пока запрос не будет завершен (успешно или нет), драйвер не вернет управле- ние вызывающей функции. Точки остальных типов являются однонаправленными, в каждом направлении гарантируется упорядоченная доставка данных, но изначально синхронизиро-
15.1. Применение шины USB для устройств хранения данных 375 ванные встречные потоки могут довольно быстро рассинхронизироваться. За- просы записи, как и запросы чтения, могут выполняться драйвером асинхронно (функциями Write и Read соответственно): при вызове функции запрос ставится в очередь и управление от драйвера возвращается приложению, а по исполнении запроса драйвер выполняет обратный вызов (call back) процедуры в приложе- нии. Такой подход к взаимодействию позволяет максимально эффективно ис- пользовать пропускную способность шины, но вносит определенные сложности в протокол взаимодействия с устройством. Заметим, что асинхронную запись и тем более асинхронное чтение поддерживают далеко не все драйверы устройств. Более того, эти операции некоторые драйверы выполняют вызовом функций lOControl, не ориентированных на высокопроизводительный обмен. Для уст- ройств хранения в основном используются точки Bulk-IN, Bulk-OUT (передача команд и массивов данных) и Interrupt-IN (сообщения о завершении выполне- , ния команд). Обычно в устройстве имеется только одна точка Control, обязательная для всех устройств ЕРО и используемая для общего управления устройством (считывание дескрипторов, конфигурирование). Она может применяться и для прикладного интерфейса (подачи команд и опроса состояния). В управляющей передаче на стадии установки (setup stage) в 8-байтном поле данных устройству передается собственно запрос (табл. 15.1). В запросе указывается направление, в котором будет передача на стадии передачи данных (data stage). Запрос идентифициру- ется обязательными полями bmRequestType и bRequest, содержимое полей wValue, wlndex и wLength требуется не во всех запросах, не используемые поля должны быть нулевыми. Стадия передачи данных применяется не во всех запросах (ко- гда ее нет, wLength=0). На стадии передачи информации о состоянии устройство подтверждает успешное выполнение запроса (пакетом АСК) или отвергает его (пакетом STALL). Получение пакета STALL от управляющей конечной точки явля- ется нормальным ответом, не требующим разблокирования данной точки. Таблица 15.1. Информация, передаваемая на стадии установки Смещение Поле Длина Содержание 0 bmRequestType 1 Характеристики запроса: D7: направление передачи данных (0 — от хос- та к устройству, 1 — от устройства к хосту); D6...5: тип (0 — стандартный, 1 — для класса, 2 — специфичный, 3 — зарезервирован); D4...0: получатель (0 — устройство, 1 — интер- фейс, 2 — точка, 3 — другой, 4...31 — зарезер- вировано) 1 bRequest 1 Запрос 2 wValue 2 Параметр запроса 4 wlndex 2 Индекс или смещение (определяется запросом) 6 wLength 2 Число байтов, передаваемых в фазе данных
376 Глава 15. Шины USB и FireWire для устройств хранения Хост-контроллеры USB Хост-контроллер является аппаратным посредником между устройствами USB и хостом. Хост-контроллер выполняет физические транзакции с устройствами по шине USB в соответствии с описаниями (дескрипторами) этих транзакций, помещенными в системное ОЗУ драйвером хост-контроллера. При этом тран- закции разных типов обрабатываются по-разному. В плане обработки ошибок проще всего изохронные транзакции, в которых ошибки не требуют повторов. Транзакции передач с гарантированной доставкой в случае ошибок требуют по- второв до «победного конца» или до признания неудачи (исчерпания допусти- мого числа повторов). С точки зрения планирования выделяются периодические транзакции, которые должны выполняться строго по графику, остальные — как получится, и их ставят в очереди. Из-за особенностей планирования и возмож- ных повторов порядок завершения обработки дескрипторов транзакций (успеш- ных или нет) будет отличаться от порядка их помещения в память, что прибав- ляет забот хост-контроллеру и его драйверу. Основное взаимодействие драйвера с хост-контроллером происходит с помощью дескрипторов, расположенных в памяти. Прерывания от контроллера могут ини- циироваться различными событиями, такими как выполнение транзакций (из- бранных), обнаружение факта приема короткого пакета, прием сигнала возоб- новления или появление ошибки. В настоящее время имеется три спецификации хост-контроллеров (UHC, ОНС и ЕНС), каждой из них соответствует свой комплект драйверов хост-части. Вы- шеприведенные задачи они решают по-разному и используют разные стратегии планирования транзакций. Универсальный хост-контроллер Разработанный Intel универсальный хост-контроллер (Universal Host Controller, UHC) для шины USB 1.x впервые появился в микросхеме РПХЗ (мост PCI-ISA) чипсетов системных плат для процессоров Pentium и продолжает использовать- ся во многих последующих изделиях Intel. Это хост-контроллер для скоростей FS/LS, который большую часть забот по планированию транзакций переклады- вает на ПО — драйвер контроллера UHC (UHCD). Драйвер UHC формирует для хост-контроллера дескрипторы, называемые в UHCI дескрипторами передач (Transfer Descriptor, TD), реально описывающие каждую шинную транзакцию. Одному запросу ввода-вывода (IRP) может соответствовать несколько «передач». Драйвер UHC разбивает запрос на транзакции и помещает дескрипторы этих транзакций в соответствующую очередь, а очередь включает в ближайшие планы. Драйвер отвечает за балансировку загрузки шины в каж- дом кадре. Планированием кадров обеспечивается требуемая частота обращений к точкам периодических передач. Большое неудобство работы с UHC возникает из-за необходимости программно- го просмотра всех дескрипторов передач на предмет выявления завершенных. Дескрипторы завершенных передач приходится программно извлекать из цепо- чек, сохраняя связанность элементов. Планирование транзакций (составление списков дескрипторов и заголовков) — тоже довольно трудоемкая задача для
15.1. Применение шины USB для устройств хранения данных 377 драйвера. Очевидно, преследовалась цель упрощения аппаратных средств хост- контроллера. Однако это упрощение оборачивается зависимостью эффективной производительности шины USB от мощности и загрузки центрального процессо- ра. Такой подход к организации ввода-вывода трудно назвать эффективным. Открытый хост-контроллер Открытый хост-контроллер (Open Host Controller, ОНС) для шины USB, как и универсальный хост-контроллер (UHC), предназначен для поддержки скоро- стей FS/LS. Однако в отличие от UHC большую часть забот по планированию берут на себя аппаратные средства ОНС, разгружая ЦП от рутины постоянной обработки дескрипторов. Спецификация интерфейса (OHCI) разработана ком- паниями Compaq, Microsoft и National Semiconductor (1999 г.). Контроллер ОНС оперирует дескрипторами конечных точек и дескрипторами передач. Дескрипторы конечных точек (Endpoint Descriptor, ED) создаются для всех сконфигурированных конечных точек всех подключенных устройств. Эти деск- рипторы размещаются в памяти и связываются между собой; конфигурация свя- зей задает порядок их обслуживания хост-контроллером. Дескриптор конечной точки описывает ее полный адрес, направление, тип, допустимый размер пакета, скорость, состояние точки и дескриптора. Дескрипторы передач ОНС, в отличие от UHC, действительно описывают переда- чи по USB. Каждая передача может разбиваться на несколько транзакций, и это разбиение выполняет сам хост-контроллер, исходя из размера пакета, установ- ленного в дескрипторе конечной точки. Дескрипторы передач собираются в оче- реди, которые присоединяются к дескрипторам конечных точек. Существует и специальная очередь, в которую контроллер (автоматически) помещает отрабо- танные дескрипторы из очередей запросов. Контроллер ОНС по сравнению с UHC наделен большим интеллектом, что обес- печивает более высокую эффективность загрузки шины при меньшей загрузке ЦП. К сожалению, контроллер ОНС на системных платах встречается нечасто, он более широко распространен в виде карт расширения (PCI). Расширенный хост-контроллер Расширенный хост-контроллер (Enhanced Host Controller, ЕНС) был введен фир- мой Intel для поддержкй высокой скорости в USB 2.0. Спецификация его интер- фейса (EHCI) была опубликована в 2002 г. Контроллер ЕНС предназначен толь- ко для работы с Устройствами и хабами, подключенными к корневому хабу на высокой скорости; прй этом для устройств FS/LS, которые подключены через промежуточный хаб USB 2.0<контроллер ЕНС выполняет расщепленные тран- закции. С теми портами корневого хаба, к которым непосредственно подключены хабы и устройства USB 1.x, работает контроллер-компаньон (UHC или ОНС). Коммутацию портов и контроллеров осуществляет маршрутизирующая логика, входящая в состав корневого хаба USB 2.0. Обнаружением фактов подключения устройств к корневому хабу занимается драйвер ЕНС через регистры ЕНС. Об- наружив факт подключения устройства FS/LS, драйвер перекоммутирует дан- ный порт на контроллер-компаньон, и с этого момента порт отдается в ведение компаньону и его драйверу.
378 Глава 15. Шины USB и FireWire для устройств хранения С точки зрения взаимодействия с драйвером ЕНС отчасти напоминает UHC, но высокая скорость передачи (480 Мбит/с) потребовала усиления интеллекта кон- троллера с целью уменьшения числа операций обмена между драйвером, памя- тью и контроллером. В ЕНС просматриваются многие идеи, заложенные в ОНС. Структуры данных разработаны с учетом минимизации обращений к памяти. В EHCI с точки зрения планирования транзакций передачи делятся на периоди- ческие (изохронные передачи и прерывания) и асинхронные (управляющие пере- дачи и передачи массивов). Каждый из этих двух планов реализуется по-своему и может быть включен в работу и выключен. Контроллер начинает каждый мик- рокадр с периодических передач (если они разрешены), оставшееся от них время выделяется для асинхронных передач. За то, чтобы в микрокадре оставалось вре- мя для асинхронных передач, отвечает драйвер. Хост-контроллер аппаратно сле- дит лишь за тем, чтобы транзакции не пересекали Заницу микрокадра. Для всех передач с гарантированной доставкой (прерывания, управляющие пе- редачи и передачи массивов) используются очереди буферов, в которых автома- тически обеспечивается упорядоченное исполнение потоков передач. В ЕНС под передачей понимается последовательность однотипных транзакций1, ограничен лишь суммарный размер передаваемых блоков (20 Кбайт). Драйвер может дина- мически (во время исполнения плана) добавлять новые передачи в очереди. Для изохронных передач используются специальные структуры данных, различающие- ся для устройств HS и FS (для последних требуется расщепление транзакций). Основой планирования периодических транзакций является список кадров. Основой планирования непериодических транзакций является асинхронный список, пред- ставляющий собой кольцо из заголовков очередей. Обслуживание всех асинхрон- ных очередей выполняется по кругу, возможен и специальный режим парковки, в котором контроллеру разрешается выполнить подряд несколько транзакций из одной очереди. Постановка запросов передач в очереди, как и включение изохронных передач в план, а также добавление/удаление очередей могут выполняться драйвером динамически во время работы хост-контроллера. Для «сбора урожая» — поиска отработанных передач — драйверу приходится просматривать во всех дескрип- торах передач признаки активности. Такого сервиса, как очередь исполненных передач (как в ОНС), контроллер ЕНС не предоставляет. Но по сравнению с UHC, конечно же, объем работ драйвера ЕНС сокращается, поскольку этот кон- троллер оперирует передачами, а не транзакциями. Однако у драйвера ЕНС по- является дополнительная довольно сложная задача — планирование расщеплен- ных транзакций. Протоколы для устройств хранения Спецификация USB для устройств хранения (mass storage) определяет класс 08, в котором имеется несколько подклассов и протоколов. Подкласс определяет со- держимое командного блока: 1 По сравнению с UHC это уже некоторый прогресс.
15.1. Применение шины USB для устройств хранения данных 379 ♦ 01 — сокращенный набор команд (Reduced Block Commands, RBC), типично для устройств на флэш-памяти, но этот набор команд могут использовать лю- бые устройства хранения; ♦ 02 — SFF8020i, ММС-2 (ATAPI), типично для устройств CD/DVD; ♦ 03 — QIC-157 (ленточные устройства); ♦ 04 — UFI, типично для НГМД; ♦ 05 — SFF8070i, типично для НГМД; ♦ 06 — прозрачная передача команд SCSI. Протокол определяет способ транспортировки команд, информации о состоянии и данных через конечные точки устройства USB: ♦ 00 — CBI-транспорт с прерываниями, используются точки EP0, Bulk-OUT, Bulk-IN, Interrupt-IN, ♦ 01 — CBI-транспорт без прерываний, используются точки EP0, Bulk-OUT, Bulk-IN, ♦ 50h — ВО-транспорт (ВОТ), используются точки EP0, Bulk-OUT, Bulk-IN. Подклассы и протоколы независимы (любой формат блока можно доставлять любым транспортом). Для доставки аудиопотока от CD используется отдельный интерфейс, обеспечивающий изохронную передачу через соответствующую ко- нечную точку. Протокол ВОТ Протокол ВОТ (Bulk-Only Transport) обеспечивает доставку блоков команд от хоста к устройству, передачу блоков данных (в любом направлении) и передачу блоков состояния (результата) выполнения команд от устройства к хосту. Про- токол ВОТ применяется в устройствах хранения со скоростями FS и HS, он ре- комендован для всех новых разработок. Протокол (по крайней мере в версии 1.0) не поддерживает команд с двунаправленной передачей данных (двунаправлен- ная передача используется в некоторых командах SCSI, в системе команд АТА их нет). Также не поддерживаются очереди команд — реакция устройства на по- лучение новой команды до того, как оно передаст информацию о состоянии вы- полнения предыдущей, не определена. Протокол ВОТ обеспечивает взаимную синхронизацию устройства и хоста, при- меняя никак не синхронизируемые (системой USB) потоки независимых кана- лов Bulk-IN и Bulk-OUTчерез пару соответствующих точек. Помимо обмена бло- ками через точки Bulk-IN и Bulk-OUT в протоколе используются два классовых запроса к точке EP0 для определения числа доступных логических устройств и сброса интерфейса: ♦ По запросу Get_Max_LUN (bmRequestType = 10100001b, bRequest = FEh) уст- ройство возвращает байт с максимальным возможным номером логического устройства (нумерация с нуля). В запросе в поле wlndex указывается номер интерфейса, wLength = 1. ♦ По запросу Bulk-Only_Mass_Storage_Reset (bmRequestType = 00100001b, bRequest = FFh) выполняется сброс интерфейса, указанного в поле wlndex, — интерфейс
380 Глава 15. Шины USB и FireWire для устройств хранения переводится в состояние ожидания команды, все предыдущие запросы сбра- сываются. Этот запрос выполняется в процедуре восстановления после оши- бок1, за ним должны следовать стандартные запросы, разблокирующие конеч- ные точки Bulk-IN и Bulk-OUT. Блоки команд (в потоке вывода) и информации о состоянии (в потоке ввода) распознаются в последовательности пакетов по фиксированной длине пакета (они всегда ложатся точно в один пакет) и определенному формату пакета. Формат проверяется по сигнатурам и соответствию содержимого полей определенным соглашениям (проверяются и нули в резервных полях). Собственно командный блок длиной до 16 байт позволяет транспортировать любые наборы команд, используемые в устройствах хранения с традиционными интерфейсами (АТА/ ATAPI, SCSI и др.). Протокол передачи команд и данных работает следующим образом: 1. Хост посылает командный блок CBW (Command Block Wrapper) в «оболочке» — пакет фиксированной длины (31 байт), включающий: • 4-байтную сигнатуру (dCBWSignature = 43425355b); • 4-байтный тег (dCBWTag), который служит для пометки и идентификации ответного блока состояния; • 4-байтное поле длины передаваемых данных (dCBWDataTransferLength); • байт флагов (bmCBWFlags), в котором используется лишь бит 7, указываю- щий направление передачи данных (1 — чтение из устройства), остальные биты — нули; • байт с 4-битным номером логического устройства, к которому обращается данный командный блок (bCBWLUN в битах [3:0], остальные биты — нули); • байт длины командного блока (bCBWCBLength в битах [4:0], допустимо 1-16, остальные биты — нули); • собственно командный блок (CBWCB) длиной от 1 до 16 байт и заполнитель, доводящий длину этого поля до 16 байт. 2. Устройство подтверждает успех приема (пакетом квитирования АСК), анали- зирует пакет и, если «оболочка» корректна и командный блок действителен, выполняет прием или передачу заказанного блока данных. Обмен данными инициирует хост в соответствии с посланной командой (данные могут и не предполагаться, тогда указывается их нулевая длина). 3. На каждый командный блок (после успешного исполнения и передачи дан- ных или отвергая его) устройство отвечает блоком состояния CSW в аналогич- ной «оболочке» — 13-байтным пакетом, содержащим: • 4-байтную сигнатуру (dCSWSignature = 53425355b); • 4-байтный тег (dCSWTag), привязывающий этот ответ к конкретному команд- ному блоку; 1 В [2] ошибочно указано, что по данному запросу выполняется еще и «оживление» конеч- ных точек.
15.1. Применение шины USB для устройств хранения данных 381 • 4-байтное поле (dCSWDataResidue), в котором указывается разность между заказанным (и переданным) объемом данных и объемом, реально отрабо- танным устройством; • байт состояния (bCSWStatus) выполнения команды: 00 — успешно, 01 — от- каз (failed), 02 — фазовая ошибка (нарушение последовательности команд и данных). Если устройство получает командный пакет в правильной «оболочке», но с не- допустимой командой, оно его7 отвергает посылкой соответствующего блока CSW (с байтом состояния 01). Если устройство обнаруживает внутреннюю ошибку в процессе исполнения принятой команды, оно посылает блок CSW (Phase Error, байт состояния 02) или же блокирует обе точки. Если устройство, ожидающее приема командного пакета, принимает что-то иное (длина не 31 байт, не совпада- ет сигнатура и поля не соответствуют формату), оно должно заблокировать точ- ку Bulk-IN (это «почувствует» хост) и игнорировать всю последующую прини- маемую информацию (или заблокировать точку Bulk-OUT) до получения запроса на сброс. На каждый выпущенный командный пакет хост должен получить ответ — ин- формацию о состоянии с тем же тегом (теги назначает хост, устройство ими только метит ответ). Нарушение этой последовательности, как и ошибки, сооб- щаемые устройством (значением 02 в байте состояния или блокировкой канала), отрабатываются с помощью классового запроса «сброс интерфейса», передавае- мого через EP0 — интерфейс переходит в исходное состояние (готов принять ко- мандный блок). За этим запросом следуют стандартные запросы Clear EP HALT, которые разблокируют конечные точки. Протокол CBI В протоколе CBI (Control-Bulk-Intemipt), в отличие от ВОТ, активно использу- ется точка EP0 — основной канал сообщений для передач команд и информации о состоянии их выполнения. Этот устаревший протокол предназначен только для устройств FS, для новых разработок он не рекомендуется, на устройствах HS его применение не допускается. Для доставки команд служит классовый запрос ADSC (AccessDevice Specific _ Command, bmRequestType = 00100001b, bRequest = 00), передаваемый через точку EP0 (основной канал сообщений). Для доставки данных используются точки Bulk IN и Bulk-OUT. Через эти же точки (включая и EP0) передается и информа- ция о состоянии завершения команды; в протоколе с кодом 00 для передачи ин- формации о состоянии выделяется дополнительная точка Interrupt-IN с длиной пакета 2 байта. Командный блок передается в фазе данных транзакции управления (через EP0), реализующей запрос ADSC. В запросе в поле wlndex указывается номер интер- фейса, wLength — длина командного блока. Положительная квитанция (АСК) на стадии передачи информации о состоянии означает, что команда успешно при- нята (этот ответ может быть задержан на неопределенное время посылкой отри- цательных квитанций NACK). Посылкой пакетов Stall устройство сообщает, что команда отвергнута.
382 Глава 15. Шины USB и FireWire для устройств хранения Данные передаются пакетами через точки Bulk-IN и Bulk-OUT, укороченный па- кет (вплоть до нулевой длины) служит признаком конца блока данных. Хост и устройство отслеживают соответствие объема передаваемых данных запрошен- ному в команде. В случае обнаружения несоответствия устройство может сигна- лизировать об этом передачей информации о состоянии через точку Interrupt-IN или через ответ Stall в транзакциях передачи данных. Способ сообщения о состоянии выполнения команды зависит от того, требуется ли передача данных. Для команд, не требующих передачи данных, устройство может задержать ответ (стадию передачи информации о состоянии запроса ADSC) на время выполнения команды1. При нормальном завершении устройство отве- чает пакетом АСК, При любом ненормальном завершении устройство отвечает пакетом Stall, информацию о состоянии хост сможет получить посылкой сле- дующей команды (уточнить состояние). Такой способ передачи информации о состоянии имеет место и в командах, требующих передачи данных, если ошибка устройством обнаружена сразу (до начала передачи данных). Если используется протокол с прерываниями, то устройство может сообщить состояние завершения и по каналу прерываний (через точку Interrupt-IN). Для команд, требующих ввода данных (от устройства), может использоваться сигнализация по каналу Bulk-IN. Хост запрашивает очередные данные в количе- стве, известном и ему, и устройству (по команде). Если устройство обнаружива- ет ошибку и не может передать заказанные данные или же хост запрашивает слишком много данных, устройство блокирует канал (пакетом Stall). Если уст- ройство не может передать всех запрошенных данных, оно должно послать уко- роченный (вплоть до нулевой длины) пакет. Для команд, требующих вывода данных, устройство принимает данные от хоста по своей готовности. Если хост передает слишком мало данных, для устройства эта ситуация неотличима от работы слишком медленного хоста. На лишние дан- ные устройство, в зависимости от реализации, может реагировать блокировкой канала {Stall), фиктивным подтверждением (АСК) или бесконечным отрицани- ем (NAK). Сброс устройства можно выполнить, послав в запросе ADSC специальный ко- мандный блок с содержимым 1D, 04, FF, FF, FF... По этой команде устройство предпримет попытку безопасного прекращения текущей операции, очистит все буферы и очереди. После этого хост должен выполнить запросы Clear EP Halt чтобы разблокировать точки и привести их в исходное состояние. Сброс через порт USB (по запросу к хабу) во время исполнения команды чреват потерей данных. Прерывания (точка Interrupt-IN) используются только для протокола 00. На ка- ждый посланный ADSC хост ждет прерывание, если устройство ответит на ADSC условием Stall, то для этой команды прерывание уже не ожидается. Если у уст- ройства есть не переданный запрос прерывания, а хост посылает уже следующий ADSC, то прежний запрос прерывания устройство аннулирует. 1 Это исключение для спецификации USB, в которой время выполнения управляющей транзакции ограничено.
15.2. Шина IEEE 1394 для устройств хранения данных 383 15.2. Шина IEEE 1394 для устройств хранения данных Шина IEEE 1394 (FireWire) давно уже применяется как штатный интерфейс устройств хранения в компьютерах Macintosh (фирмы Apple). Высокая пропуск- ная способность и архитектура, унаследованная от SCSI, позволяют использо- вать данный интерфейс для подключения большого числа как внутренних, так и внешних устройств хранения. Существуют модели ПК Macintosh, в которых этот интерфейс используется еще и для подключения основного винчестера, при этом он может стать доступным для обращения через внешний разъем шины 1394 без участия (и при отсутствии) ПО, работающего на данном ПК. С интерфейсом IEEE 1394 выпускаются разнообразные устройства хранения дан- ных — жесткие диски, приводы CD и DVD, AV-диски (винчестеры, оптимизиро- ванные для записи и чтения мультимедийных данных). Выпускаются и преобра- зователи интерфейсов 1394-IDE, оформленные в виде корпусов для стандартных устройств IDE форматов 5” или 3,5”. В эти корпуса можно установить обычные винчестеры, приводы CD и DVD, получая переносные устройства хранения данных. При этом, конечно, теряются архитектурные преимущества устройств с «родным» интерфейсом IEEE 1394 (полноценный сервер устройства отсутст- вует), но основная функциональность, естественно, сохраняется. В устройствах хранения, подключаемых к компьютерам, шину IEEE 1394 (Fire- Wire) обычно используют как транспортное средство передачи пакетов команд и данных SCSI. При этом для ОС и приложений устройства хранения выглядят как устройства SCSI соответствующих классов. Спецификация RBC (Reduced Block Commands, ftp.symbios.com/pub/standards/io/x3t10/drafts/rbc/) описывает со- кращенный набор команд SCSI, относящихся к устройствам хранения, с исполь- зованием протокола SBP-2. Эта спецификация применяется для устройств хра- нения в ОС Windows, Mac OS и др. Для дисковых устройств хранения среди спецификаций AV/C (http://www.1394ta.org) имеются общая спецификация (disk general specification) и следующие расши- рения: ♦ AV/C MiniDisk subunit — расширения для мини-дисков; ♦ AV/C hard disk drive subunit — расширения для винчестеров; ♦ AV/C compact disk subunit — расширения для компакт-дисков; ♦ AV/C storage object descriptor subunit — абстрактное описание класса устройств хранения. Подключение устройств к шине FireWire На высокоскоростную последовательную шину уже имеется три версии стандарта: ♦ Стандарт IEEE 1394-1995 определяет архитектуру шины, возможные ско- рости передачи сигналов по кабелям S100, S200 и S400 (98,304, 196,608 и 393,216 Мбит/с), кабели и 6-контактные разъемы, позволяющие передавать сигналы и питание.
384 Глава 15. Шины USB и FireWire для устройств хранения ♦ В дополнении IEEE 1394а (2000 г.) введен ряд усовершенствований, повышаю- щих эффективность использования шины и расширяющих возможности управ- ления узлами и портами, а также миниатюрный 4-контактный разъем (без питающих линий). ♦ Дополнения IEEE 1394b (2002 г.) в основном касаются повышения скорости (S800, S1600) и дальности передачи. Это обеспечивается применением бета- сигнализации, которая позволяет задействовать как медную, так и оптиче- скую среду передачи и поменять механизм арбитража (ради дальнейшего по- вышения эффективности использования шины). Для медного кабеля введен миниатюрный 9-контактный разъем (с подачей питания), пригодный для ско- ростей до 3,2 Гбит/с. Введены новые типы среды передачи: • пара пластиковых или стеклянных оптических волокон для расстояний до 50 или 100 м; • кабель UTP-5 (используются 2 пары) с разъемами RJ-45 для расстояний до 100 м с трансформаторной гальванической развязкой. Устройства с интерфейсом FireWire соединяются друг с другом кабелями, обра- зующими кабельную шину. Каждое устройство (узел сети) обычно имеет несколько (1-4) равноправных соединительных разъемов, представляющих его порты. Мно- гопортовые узлы позволяют соединять множество узлов IEEE 1394 без вспомога- тельного оборудования (хабов). Кабельная шина допускает большую свободу вы- бора топологии физических соединений при соблюдении следующих ограничений: ♦ на шине может быть не более 63 узлов; ♦ между любой парой узлов может быть не более 16 кабельных сегментов (в 1394а допускается до 24 сегментов); ♦ длина сегмента стандартного кабеля не должна превышать 4,5 м; ♦ суммарная длина кабеля не должна превышать 72 м; ♦ топология не должна содержать петель (в первых редакциях стандарта за это отвечал только пользователь, в IEEE 1394b имеются средства автоматическо- го исключения петель). Упомянутые ограничения на длину относятся к традиционным кабелям FireWire (две экранированные витые пары для передачи сигналов и, необязательно, пара проводов питания). Витая пара категории 5 (UTP-5) и несколько типов оптово- локна, введенные в IEEE 1394b, допускают большую длину сегментов. Устройства, соответствующие стандартам IEEE 1394 и 1394а, совместимы меж- ду собой (при необходимости используются соединительные кабели-адаптеры с разнотипными разъемами). Устройства, соответствующие стандарту 1394b и ра- ботающие с бета-сигнализацией, несовместимы с устройствами IEEE 1394 и IEEE 1394а, работающими с традиционной сигнализацией (DS-сигнализацией). Однако в IEEE 1394b есть и «двуязычные» (bilingual) узлы, способные частью своих портов работать со старыми узлами IEEE 1394/1394а (в режиме DS), а другой — с узлами IEEE 1394b (в бета-режиме). С помощью таких узлов мож- но строить смешанные сети и преодолевать вышеуказанные ограничения по рас- стоянию.
15.2. Шина IEEE 1394 для устройств хранения данных 385 Устройства на шине могут передавать данные на разных скоростях. Базовой ско- ростью, поддерживаемой любым устройством, является S100. Скорость обмена данными между любой парой узлов определяется возможностями самих узлов и промежуточных узлов, обеспечивающих трансляцию трафика (выбирается мак- симальная скорость слабейшего звена в этой цепочке). В кабельной шине IEEE 1394 используются разъемы, изображенные на рис. 15.2, на портах устанавливаются гнезда, на кабелях — вилки. Для традицион- ных портов (режим DS) используются разъемы, представленные на рис. 15.2, а и б. Миниатюрные 9-контактные разъемы, введенные в 1394b, имеют две моди- фикации: ♦ для бета-портов — с широким ключом на кожухе; ♦ для «двуязычных» портов — с узким ключом. На вилках имеются соответствующие ключи; к бета-порту можно подключить кабель только с бета-вилкой, к «двуязычному» — с любой вилкой 1394b. Кабель с «двуязычной» вилкой может на противоположном конце иметь вилку любого типа (4-, 6- или 9-контактную). В IEEE 1394b для UTP-5 используются разъемы RJ-45, для пластикового и стеклянного оптоволокна применяются свои разъе- мы — эти разъемы используются только для бета-режима. Рис. 15.2. Разъемы IEEE 1394 (размеры увеличены): а — 6-контактное гнездо, б — 4-контактное гнездо, в — 9-контактное гнездо бета-порта, г — 9-контактное гнездо «двуязычного» порта Шина обеспечивает питание узлов постоянным током с напряжением 8-40 В при токе до 1,5 А. В IEEE 1394а диапазон напряжений сужен до 8-33 В, типично питание 12 В. Узлы могут быть источниками, потребителями питания или не пользоваться питанием от шины, мощность, подаваемая в шину от нескольких узлов, суммируется. При подключении 4-контактными разъемами (а также по UTP-5 и оптоволокну) питание от шины недоступно. При подключении и отключении устройств на шине автоматически выполняют- ся процедуры конфигурирования шины (выстраивается иерархическая структу- ра для арбитража) и узлов (они назначают себе уникальные физические иденти- фикаторы). Эти процедуры выполняются аппаратными средствами физического уровня всех узлов и занимают доли секунды (в это время полезные передачи на
386 Глава 15. Шины USB и FireWire для устройств хранения шине невозможны). Устройства хранения, подключаемые к РС-совместимым компьютерам, распознаются операционными системами и поддерживаются их драйверами. Взаимодействие устройств на шине IEEE 1394 Шина FireWire обеспечивает равноранговое взаимодействие устройств, являю- щихся ее узлами, посредством асинхронных транзакций и потоковых передач, последние могут быть как изохронными, так и асинхронными. Шина IEEE 1394 состоит из узлов, соединенных кабельными сегментами1, в пре- делах шины локализуются процессы арбитража (в регулярной работе) и са- моидентификации узлов (при смене конфигурации). Сеть — объединение не- скольких (формально — до 1024) шин с помощью мостов (коммутаторов), обеспечивающих возможность выполнения транзакций между любыми узлами. Для того чтобы начать транзакцию (передачу пакета), узел должен получить право доступа к шине, используя механизм арбитража. Протокол транзакций обеспечивает гарантированную доставку посредством квитирования. Для посыл- ки пакетов квитирования арбитраж не требуется, поскольку только один узел на шине будет отвечать на пакет, требующий квитирования. Для асинхронных транзакций используется 64-битная адресация, формат адреса IEEE 1394 приведен на рис. 15.3. Каждое устройство представляется на шине в виде регистров и областей памяти, расположенных в 48-битном пространстве ад- ресов, выделенном данному узлу в общем 64-битном адресном пространстве сети шин. Поле Bus# определяет номер шины, поле Node# — физический идентифика- тор узла на шине, а поле Node Address — адрес внутри узла. На практике чаще все- го встречаются одиночные кабельные шины, так что 10 бит полного адреса, фак- тически, не используются. Узлы могут обращаться друг к другу с асинхронными транзакциями чтения и записи, указывая полный адрес искомой ячейки и раз- мер передаваемого блока информации. Фактически, узлы имеют возможность организации прямого доступа к памяти друг друга. Помимо транзакций чтения и записи, имеются асинхронные транзакции сблокированных операций чтения-за- писи специальных регистров, с помощью которых организуется конкурирующий доступ к каким-либо ресурсам шины (например, запрос изохронных каналов). Транзакциями записи в определенные регистры узла можно удаленно вызвать прерывание для его процессора. О 9 10 15 16 63 Bus# Node# / Node Address ---------------------------------------------—----------- Рис. 15.3. Формат адреса IEEE 1394 Для потоковых передач используется адресация по 6-битному номеру канала, что позволяет на шине вести одновременно до 64 передач. Асинхронные и изо- хронные потоки передаются однотипно (с одними и теми же структурами паке- 1 В стандарте определен и вариант кросс-шины (backplane) со специфичным физическим уровнем.
15.2. Шина IEEE 1394 для устройств хранения данных 387 тов), разница между ними заключается в способе получения доступа к шине. Изохронные передачи приоритетнее асинхронных, чем и обеспечивается гаран- тированная полоса пропускания для каждого изохронного канала (при условии соблюдения правил использования каналов). Для управления изохронными пе- редачами и каналами применяются асинхронные транзакции. Хост-контроллеры шины IEEE 1394 Для шины IEEE 1394 существует открытый хост-контроллер (ОНС), представ- ляющий собой реализацию канального уровня шины IEEE 1394 с дополнитель- ными средствами поддержки уровней транзакций и управления шиной. Для вы- сокопроизводительного обмена данными ОНС содержит контроллеры прямого доступа к памяти (DMA). Контроллер поддерживает все типы пакетов, переда- ваемых по шине 1394. Спецификация 1394 Open Host Controller Interface Speci- fication доступна в Сети (ftp://ftp.austin.ibm.com/pub/chrptech/1394ohci). Со стороны шины IEEE 1394 хост — узел с контроллером ОНС — выглядит как обычный узел шины, способный выполнять функции мастера циклов и диспет- чера изохронных ресурсов. Контроллер позволяет хосту быть инициатором любых транзакций шины IEEE 1394 и отвечать на любые транзакции, адресованные узлу хоста. В адресном пространстве этого узла расположены архитектурные регистры и память конфигурации, большая часть пространства доступна для обращений в виде обычных транзакций шины. Часть пространства узла может отображать пространство физических адресов памяти хоста. Часть обращений к хосту может отрабатываться исключительно аппаратными средствами контроллера, остальные обращения хост отрабатывает программно. Принимаемые пакеты запросов для про- граммной отработки ОНС своими каналами DMA помещает в буферы, размещен- ные в памяти хоста. Пакеты ответов программа размещает в других буферах, из ко- торых ОНС организует их передачу в шину, опять же с помощью каналов DMA. Для асинхронных транзакций контроллер обеспечивает чтение пакетов из сис- темной памяти хоста и их передачу в шину, пакеты, принимаемые из шины, кон- тролер записывает в системную память. Обмен производится с помощью кана- лов DMA. Контроллер может функционировать и как шинный мост, аппаратно отрабатывая запросы транзакций чтения и записи шины IEEE 1394 как обраще- ния к пространству памяти хоста. Для изохронных операций ОНС может исполнять роль мастера циклов, синхро- низируясь от внутреннего генератора синхронизации или (необязательно) от внеш- него источника. Для изохронных операций ОНС имеет два контроллера DMA — для приема и для передачи данных. Каждый из этих контроллеров может под- держивать до 32 каналов DMA, называемых контекстами DMA. Передающий контроллер в каждом цикле может передавать данные из каждого контекста для связанного с ним изохронного канала. Принимающий контроллер способен в каждом цикле принимать данные в каждый контекст из связанного с ним канала. Кроме того, один из принимающих контекстов может быть настроен на прием данных из множества каналов. По обнаружении сброса на шине ОНС автоматически очищает все очереди асин- хронных пакетов для передачи; прием пакетов не прерывается, но в потоке пакетов
388 Глава 15. Шины USB и FireWire для устройств хранения запросов появляется маркер, индицирующий факт сброса. Новый физический идентификатор узла (PHYID), получаемый от физического уровня, контроллер записывает в соответствующий регистр. Контроллер возобновляет асинхронные передачи только по указанию программы, при этом повторное использование старых запросов в общем случае невозможно: физический идентификатор узла назначения может измениться. Изохронный прием и передача по сбросу не пре- кращаются — они возобновляются сразу по завершении инициализации. Устройство контроллера ОНС Упрощенная структурная схема ОНС приведена на рис. 15.4. Рис. 15.4. Структура контроллера ОНС шины IEEE 1394 Интерфейс системной шины (host bus interface) обеспечивает взаимодействие с контроллером в двух режимах: ♦ ведомый режим (PCI target) поддерживает программный доступ к регистрам контроллера со стороны центрального процессора хоста; ♦ ведущий режим (PCI bus master) предоставляет контроллеру возможность прямого доступа к системной памяти хоста — в этом режиме интерфейс сис- темной шины должен выдерживать поток данных по крайней мере базовой скорости S100 (100 Мбит/с) с накладными расходами на организацию пря- мого доступа к памяти. Контроллеры DMA обеспечивают обмен данными между шиной и системной па- мятью. В ОНС имеются семь типов контроллеров DMA: ♦ контроллер асинхронной передачи (AT DMA); ♦ контроллер асинхронного приема (AR DMA); ♦ два контроллера в блоке физических запросов: • контроллер приема аппаратно обрабатываемых запросов (physical receive); • контроллер ответов на аппаратно обрабатываемые запросы (physical res- ponse);
15.2. Шина IEEE 1394 для устройств хранения данных 389 ♦ контроллер изохронной передачи (IT DMA); ♦ контроллер изохронного приема (IR DMA); ♦ контроллер приема пакетов самоидентификации (Self ID DMA). Каждый контроллер работает со своими контекстами — наборами регистров, управляющих работой канала и выборкой запросов из списков, расположенных в системной памяти. Контроллеры асинхронной передачи и приема имеют от- дельные контексты для запросов ответов шинных транзакций. Контроллеры изо- хронного приема и передачи могут иметь до 32 контекстов каждый. Канальный уровень ОНС передает пакеты из буферов FIFO передающих каналов и отдает в FIFO принятые пакеты с корректным адресом, предназначенные дан- ному узлу. Уровень выполняет следующие действия: ♦ передает и принимает пакеты форматов IEEE 1394; ♦ генерирует соответствующие пакеты квитирования для принятых асин- хронных пакетов, отрабатывая однофазный или двухфазный протокол по- второв [2]; ♦ выполняет функции мастера циклов; ♦ генерирует и проверяет корректность 32-битных CRC-кодов; ♦ обнаруживает пропуски пакетов начала цикла; ♦ взаимодействует с регистрами физического уровня; ♦ принимает изохронные пакеты (все время); ♦ игнорирует асинхронные пакеты во время изохронной фазы цикла. Буферы FIFO, находящиеся между каналами DMA и канальным уровнем, выпол- няют промежуточную буферизацию данных, считываемых из системной памяти для передачи в шину и принимаемых из шины для записи в память. Буферы FIFO обеспечивают и выравнивание данных, побайтное для хоста и поквадлетное для шины IEEE 1394. При необходимости буферы FIFO вставляют байты-запол- нители, выравнивающие данные до границ квадлетов1. Переполнение (overflow) или переопустошение (underrun) буферов (по вине интерфейса системной шины и памяти), приводящее к потерям принимаемых или передаваемых пакетов, кон- тролируется аппаратными средствами ОНС. Буферы могут «на лету» выполнять преобразование форматов представления квадлетов. Шина IEEE 1394 и, соответственно, канальный уровень работают с квадлетами, представленными в формате Big Endian (старший байт передается первым). Передача данных через хост-интерфейс может выполняться по выбору: ♦ в формате Big Endian, используемом на платформах фирмы Apple; ♦ в формате Little Endian (младший байт передается первым), используемом на платформах фирмы Intel. Для поддержки функций управления ОНС имеет 64-битный регистр глобально уникального идентификатора (GUID, он же IEEE EUI-64), автоматически загру- 1 Квадлетом в IEEE 1394 называют последовательность из четырех байтов.
390 Глава 15. Шины USB и FireWire для устройств хранения жаемый из энергонезависимой памяти по сбросу контроллера (или однократно программируемый в самом контроллере). Для выполнения функций диспетчера изохронных ресурсов контроллер имеет 4 автономных регистра, реализующих блокированные операции (compare_sw ар) как со стороны шины, так и со стороны хоста. Взаимодействие хоста и ОНС Взаимодействие хоста и ОНС производится несколькими способами: ♦ Программные обращения процессора хоста к регистрам контроллера обеспе- чивают общее управление контроллером и узлом хоста, управление контрол- лерами прямого доступа и их контекстами, управление прерываниями и их идентификацию, доступ к автономным регистрам. ♦ При прямом доступе к памяти хоста (DMA) различают доступ по контекст- ным программам и доступ физических обращений к памяти. • Прямой доступ по контекстным программам. Структуры данных, располо- женные в памяти хоста, описывают списки буферов данных. Контроллер автоматически последовательно обходит эти списки, передавая данные и обновляя в этих структурах информацию о состоянии выполнения. Каж- дый контекст DMA имеет набор регистров, через которые программа цен- трального процессора управляет контекстом. • Прямой доступ физических обращений к памяти. Контроллер аппаратно преобразует транзакции чтения и записи определенного диапазона адре- сов узла IEEE 1394 в транзакции чтения и записи определенного диапазо- на физической памяти (ОЗУ) хоста. Для программы хоста эти обращения невидимы и при нормальной работе прерываний не вызывают. ♦ Прерывания центрального процессора хоста вырабатываются контроллером по различным событиям, включая исполнение (или отказ) передачи или приема, завершение обработки контекстной программы, прием потока паке- тов самоидентификации и т. п. Контроллер имеет регистры идентификации и маскирования событий, вызывающих прерывания. Протокол SBP-2 Для подключения устройств хранения к компьютерам в основном используется протокол SBP-2 (Serial Bus Protocol-2). Это транспортный протокол, обеспечиваю- щий асинхронный обмен данными и командами и изохронную доставку данных, широко используется фирмами Microsoft и Apple. Протокол основан на механизме прямого доступа к памяти и позволяет уменьшить необходимое число прерываний центрального процессора. Часть области системного ОЗУ ПК отображается на ад- ресное пространство узла IEEE 1394. В нем формируется связанный список команд и указателей на буферы данных. Адрес этого списка передается устройству, и оно исполняет требуемые команды и обмен данными, самостоятельно обращаясь к па- мяти ПК транзакциями IEEE 1394. Спецификация SBP-2 не определяет конкрет- ные форматы команд — они специфичны для устройств разных классов. Черновик стандарта можно найти на ftp://ftp.symbios.com/pub/standards/io/x3t10/drafts/sbp2.
15.2. Шина IEEE 1394 для устройств хранения данных 391 Протокол SBP-2 обеспечивает транспортировку команд, данных и информации о состоянии между устройствами, подключенными к шине IEEE 1394, с исполь- зованием расщепленных транзакций. Протокол соответствует требованиям ар- хитектурной модели SCSI-3 (SAM), что позволяет реализовать протоколы SCSI в последовательной шине. В протоколе имеются расширения (относительно SAM), служащие для управления изохронными соединениями и передачи изо- хронных данных. Организация взаимодействия устройств Протокол SBP-2 определяет процедуры взаимодействия инициаторов с целевыми устройствами. Понятия инициатор, целевое устройство, задание, наборы заданий, контекст задания соответствуют приведенным в описании SAM (см. 9.2). За время своей жизни задание использует ресурсы как инициатора, так и целевого устройства. Для выполнения каждого задания инициатор формирует запрос, оформленный в виде структуры данных в памяти узла шины. Целевое устройст- во само выбирает задания из памяти и исполняет их, при определенных услови- ях оно имеет право изменять порядок исполнения заданий в пределах набора. Оно же отвечает и за передачу данных, необходимых для выполнения заданий. Это как раз и обеспечивает масштабируемость системы: добавление новых пери- ферийных устройств дополнительно не нагружает процессор инициатора (хост- компьютера), поскольку каждое новое устройство входит в систему со своим встроенным сервером. Состояние выполнения задания (успешное или с ошиб- кой) целевое устройство сообщает записью по адресу, указанному инициатором в запросе. Инициатор может динамически добавлять задания, а также управлять выполнением заданий (принудительно завершать). Структура целевого устройства Целевое устройство, с которым работает протокол SBP-2, содержит одно или не- сколько логических устройств (logical unit), каждое из которых представляет мо- дель устройства (например, устройство хранения, принтер и т. п.). Каждое логи- ческое устройство имеет идентификатор LUN, уникальный в пределах данного целевого устройства. Логическое устройство с LUN=O должно присутствовать обязательно. Разные логические устройства в пределах одного целевого устрой- ства могут представлять устройства с разнотипными моделями. Присутствие ло- гических устройств в узле может быть описано в памяти конфигурации узла FireWire или же определяться с помощью запросов, адресованных целевому уст- ройству. С каждым логическим устройством должен быть связан сервер устройства (device server), отвечающий за исполнение команд, посланных устройству. Пото- ковое устройство должно иметь еще и контроллер потока (stream controller), один или несколько. Сервер устройства должен обслуживать один или несколь- ко наборов заданий (task set), в которых содержатся команды для исполнения сервером устройства или контроллером потока. Сервер устройства (как и кон- троллер потока) является составной частью самого устройства, эта черта сущест- венно отличает устройства IEEE 1394 (как и SCSI) от менее интеллектуальных устройств для хост-центрических интерфейсов (USB, АТА, SATA).
392 Глава 15. Шины USB и FireWire для устройств хранения Логические устройства составляют блок (unit) — часть узла шины, обеспечиваю- щую некоторую функциональность (память, ввод-вывод, хранение, обработку данных и т. п.). После инициализации узла блок предоставляет интерфейс, кото- рым обычно пользуется программный агент инициатора. Узел может содержать несколько блоков, как правило, независимых друг от друга. Каждый блок и его логические устройства описываются в памяти конфигурации узла. В корневом каталоге памяти конфигурации имеется ссылка на каталог блока (unit directory), описывающий его свойства. В каталоге имеются иденти- фикаторы спецификации блока, версии ПО, спецификации системы команд бло- ка, версии системы команд. Здесь (необязательно) может присутствовать уни- кальный идентификатор блока ЕШ-64. Для простых блоков здесь же находится описание логического устройства. Для сложных блоков, состоящих из несколь- ких логических устройств, создаются каталоги логических устройств (logical unit directory), в которых находятся их описания. Уникальный идентификатор ЕШ-64, состоящий из идентификатора производи- теля узла и идентификатора блока, позволяет однозначно идентифицировать блок. Идентификация через EUI-64 независима от физического идентификатора узла, в котором значение Phy lD может меняться после любого сброса. В описании логического устройства содержатся его номер (LUN), тип и характе- ристики: поддержка изохронных операций, строгий или произвольный порядок исполнения команд, поддерживаемая модель управления заданиями (базовая или полная), протокол безопасности (резервирование логического устройства, пароль на носитель, резервирование носителя), тайм-аут выполнения процедуры входа, размер блока запроса, а также относительный адрес управляющего агента. Запросы Целевые действия (например, чтение с диска, в ходе которого данные с носителя передаются в системную память) определяются запросами, формируемыми ини- циатором и сигнализируемыми им целевому устройству. Запрос содержится в структуре данных, называемой блоком запросов операций (Operation Request Block, ORB). Конечный статус запроса содержится в блоке состояния (status block), ко- торый целевое устройство записывает по адресу, указанному инициатором. Стан- дарт SBP-2 описывает различные форматы блоков ORB, используемых для сле- дующих целей: ♦ получения доступа к ресурсам целевого устройства (login requests)', ♦ транспортировки командных блоков, обычных и потоковых (command block requests); ♦ управления наборами заданий и освобождения целевых ресурсов (management requests); ♦ управления потоком изохронных данных (stream control requests). Запросы получения доступа и управления заданиями направляются агентам, которые обслуживают по одному запросу. Остальные запросы содержат специ- альные поля-указатели на следующий блок ORB (или нулевые указатели). Это
15.2. Шина IEEE 1394 для устройств хранения данных 393 позволяет строить очереди — связанные списки запросов (linked request list), представляющие наборы заданий. Агенты целевого устройства Агенты целевого устройства — это его программные компоненты, занимающие- ся приемом и отработкой запросов. По назначению различают три типа агента целевых устройств. ♦ Агенты управления (management agent) принимают запросы подключения (login), управления заданиями (task management) и отключения (logout). Эти агенты отрабатывают только одиночные запросы. До того как инициатор ус- пешно выполнит защищенное подключение (sequre login), никакие другие за- просы к целевому устройству выполняться не могут. ♦ Агенты командных блоков обслуживают основной поток целевых запросов (обычных и потоковых) в соответствии с правамй, полученными при подклю- чении. Эти агенты работает с очередями. ♦ Агенты управления потоком связаны с изохронными операциями. Агент управления потоком связывается с агентом, обеспечивающим передачу пото- ковых командных блоков. Эти агенты также работают с очередями. Взаимодействие инициатора с агентами осуществляется через регистры агентов це- левого устройства. Одиночные запросы сигнализируются инициатору транзакцией записи (или блокированной транзакцией), в которой передается адрес запроса. Запросы из очереди обслуживаются выбирающим агентом (fetch agent) целевого устройства, который читает запросы из памяти инициатора, когда инициатор сигнализирует об их доступности. Для обслуживания запросов из очередей ини- циатор и целевое устройство работают с контекстом очереди. Этот контекст дол- жен содержать, как минимум, связанный список запросов, адрес текущего запро- са и «звонок» (doorbell), которым инициатор информирует целевое устройство о поступлении новых запросов (обновлении списка заданий). Целевое устройство имеет право на упреждающее чтение (read ahead) последую- щих доступных запросов еще до завершения обслуживания ранее считанных. Целевому устройству для повышения производительности позволяется изме- нять порядок обслуживания запросов очереди. По завершении обслуживания за- проса, успешному или аварийному, целевое устройство записывает блок состоя- ния по адресу, указанному инициатором в данном запросе. Структуры данных SBP-2 В протоколе SBP-2 фигурируют несколько классов структур данных: блоки запросов операций, блоки управляющих запросов, таблицы страниц, блоки со- стояния выполнения запросов. Инициатор обмена располагает и инициализиру- ет эти структуры данных в системной памяти узлов шины. Все эти структуры выравниваются по границе квадлета (32-битного слова), они адресуются 64-бит- ными указателями, соответствующими формату адреса в IEEE 1394. Поле иден- тификатора узла Node lD (номер шины и физический идентификатор) в ряде слу- чаев является избыточным и не используется. Младшие два бита 48-битного смещения всегда нулевые (из-за выравнивания).
394 Глава 15. Шины USB и FireWire для устройств хранения Блоки запросов операций Блоки запросов операций (Operation Request Block, ORB) описывают действия целевого устройства, которые ему предписывает исполнить инициатор. Блоки ORB выбираются целевым устройством посредством транзакций чтения. ORB являются блоками переменного размера, размер определяется типом устройства и его набором команд и указывается в памяти конфигурации. Используются не- сколько типов ORB. ♦ Пустой блок используется как указатель на следующий блок или признак конца цепочки. ♦ Нормальный командный блок используется для описания действия целевого устройства, связанного с асинхронными транзакциями шины IEEE 1394. Примером этих действий может быть чтение (или запись) блоков данных с устройств хранения, передача данных на принтеры, ввод данных со сканера и т. п. В блоке содержится ссылка на следующий нормальный блок (или при- знак конца цепочки), задаются местоположение буфера данных (сам буфер или таблица страниц), направление передачи данных, скорость передачи, мак- симальный размер передачи за одну транзакцию, длина поля данных и собст- венно командный блок, посылаемый целевому устройству. ♦ В потоковом командном блоке описаны действия целевого устройства, связан- ные с изохронными (или асинхронными потоковыми) передачами. В блоке содержится ссылка на следующий нормальный блок (или признак конца це- почки), задаются длина передаваемого фрагмента, его позиция в потоке (но не адрес данных в памяти!) и собственно командный блок, посылаемый целе- вому устройству. ♦ Блок управления потоком используется для управления контроллером пото- ка. В блоке содержится ссылка на следующий аналогичный блок (или при- знак конца цепочки), задается управляющая функция (старт-стоп-пауза, смена маски каналов, управление штекерами, реакция на ошибки...) и определяется событие, по наступлении которого выполняется данная функция управления. Блоки управляющих запросов Блоки управляющих запросов представляют собой структуры фиксированной длины (32 байта), используемые для целей защиты (login, logout) и управления заданиями. В этих блоках явно указывается их привязка к конкретным наборам заданий (очередям) или потокам, хотя они и так неявно привязаны к агентам, выбирающим командные блоки и блоки управления потоками. Каждое задание однозначно идентифицируется адресом, по которому находится командный блок, инициирующий выполнение этого задания. Определены следующие функции: ♦ SECURE LOGIN — защищенный вход, который должен быть выполнен до на- чала любых действий (кроме опроса состояния подключений) с целевым уст- ройством. В этом запросе указываются номер логического устройства, поло- жение и длина буферов памяти, в одном из которых находится пароль доступа к носителю, а в другой должен помещаться ответ на запрос входа. В ответе пе- редаются 16-битный идентификатор входа login lD, базовый адрес регистра агента командного блока command block agent и объем возвращаемых данных.
15.2. Шина IEEE 1394 для устройств хранения данных 395 ♦ QUERY LOGINS — опрос состояния подключений, возвращающий для ука- занного логического устройства один из двух списков: • список идентификаторов (ЕШ 64) всех зарегистрированных владельцев логического устройства и код используемого протокола защиты для носи- теля, установленного в логическое устройство; • список всех текущих инициаторов обмена с логическим устройством (идентификаторов узлов, идентификаторов входа и EUI_64). ♦ ISOCHRONOUS LOGIN — вход для доступа к потоковым запросам. ♦ RESECURE LOGIN — восстановление защищенного входа после сброса на шине, когда идентификаторы узлов могут измениться. В запросе передается преж- ний идентификатор входа. Целевое устройство проверяет, совпадает ли иден- тификатор EUI-64 инициатора с тем, который был зарегистрирован для дан- ного идентификатора. В случае успешного восстановления инициатор может пользоваться адресами агентов, сообщенными ему при первоначальном входе. ♦ SET REGISTERED EUI-64 — задание списка идентификаторов (EUI-64) ини- циаторов, разрешенных для работы с данным целевым устройством. В запро- се передаются идентификатор входа, а также указатель и длина буфера, в ко- тором находится обновленный список разрешенных инициаторов. Этот список целевое устройство получает транзакцией чтения. ♦ LOGOUT — выход с потерей права дальнейшего доступа. В запросе передает- ся идентификатор входа. ♦ TERMINATE TASK — преждевременное завершение указанного задания (воз- можно, с передачей не всех затребованных данных). ♦ ABORT TASK — отказ от выполнения указанного задания. ♦ ABORT TASK SET — отказ от выполнения набора заданий. ♦ CLEAR TASK SET — сброс набора заданий. ♦ LOGICAL UNIT RESET — сброс логического устройства. ♦ TARGET RESET — сброс целевого устройства. Таблицы страниц Буферы данных, требуемые для выполнения транзакций по последовательной шине, считаются непрерывными в логическом адресном пространстве узла. При этом они могут отображаться на физическую память в виде непрерывной или фрагментированной на постраничном базисе области. Эта фрагментация обу- словлена страничной трансляцией адресов, применяемой для организации вир- туальной памяти в большинстве современных процессоров. Если буфер данных является непрерывным в пространстве физических адресов узла, то в командных блоках на этот буфер делается прямая ссылка: задаются начальный адрес, длина буфера и признак прямой ссылки. Если буфер фрагментирован, то ссылка ведет на таблицу страниц указывается число элементов в таблице, в запросе обяза- тельно указываются размер страницы (популярный размер — 4 Кбайт) и при- знак косвенной ссылки. Таблица страниц должна находиться в памяти того же узла, в котором расположены буферы данных. Таблица страниц — массив эле-
396 Глава 15. Шины USB и FireWire для устройств хранения ментов, описывающих сегменты, в которых расположен буфер данных. Каждый элемент таблицы имеет размер 2 квадлета и формат, соответствующий 64-битно- му адресу IEEE 1394. В этом адресе младшие п бит являются смещением в сег- менте, число этих битов определяется размером страницы. Старшие биты явля- ются физическим адресом начала каждой страницы. Длина буфера определяется числом описателей таблицы страниц и значениями полей смещения описателя первого сегмента (указывающего на начало) и последнего сегмента (указываю- щего на конец). В промежуточных сегментах буфер занимает всю страницу. Блок состояния По исполнении запроса при установленном бите оповещения (п) или в случае обнаружения ошибки целевое устройство помещает блок состояния (status block) в буфер FIFO, адрес которого указан в блоке запроса. Целевое устройство может поместить в FIFO и блок состояния, неожиданный для инициатора. Блок состоя- ния может иметь размер от 8 до 32 байт. Помимо содержательной части, опреде- ляемой набором команд устройства, в нем содержится следующая информация: ♦ признак неожиданного сообщения; ♦ признак того, что данное состояние относится к последнему запросу в цепочке; ♦ тип завершения (с транспортной ошибкой или без, недопустимый тип запро- са, специфическое сообщение); ♦ дополнительная информация (недопустимый тип запроса; не поддержива- ются указанная скорость, размер страницы, данное логическое устройство; доступ запрещен; слишком мал допустимый размер поля данных; слишком много каналов; ресурс недоступен; функция отвергнута; нераспознанный идентификатор входа); ♦ адрес блока запроса, к которому относится завершение. Регистры агентов целевого устройства Регистры агентов целевого устройства предоставляют инициатору доступ к сер- висам целевого устройства. Регистр управляющего агента обеспечивает подклю- чение к сервисам (и отключение) и управление заданиями, регистры выбирающих агентов позволяют ставить задания в очереди на выполнение. Адрес регистра управляющего агента инициатор узнает из памяти конфигурации целевого уст- ройства. Базовые адреса регистров выбирающих агентов сообщаются инициато- ру по запросам входа (secure login и isochronous login). Регистр управляющего агента целевого устройства предназначен для записи 64- битного адреса управляющего запроса. Эту запись выполняет инициатор в виде одной 8-байтной транзакции записи. Успешная запись в регистр приводит к тому, что управляющий агент целевого устройства^ считывает управляющий блок ORB из памяти инициатора (по указанному адресу) и исполняет его. Если агент оказывается занятым, запись не удастся, инициатор получает об этом уве- домление (в коде возврата) и должен будет повторить попытку позже. Неудав- шиеся попытки записи целевым устройством игнорируются. Каждый выбирающий агент имеет регистры, расположенные со стандартным смещением относительно базового регистра:
15.2. Шина IEEE 1394 для устройств хранения данных 397 ♦ регистр состояния определяет текущее состояние агента: сброшен, активен (выполняет запросы), приостановлен (последний запрос цепочки исполнен), «умер» (прекращает выборку заданий); ♦ регистр сброса — запись любого значения вызывает сброс агента; ♦ регистр адреса текущего блока ORB (CURRENT ORB) — запись в регистр вызыва- ет выборку ORB по указанному адресу (в состоянии «умер» запись игнориру- ется); ♦ регистр сигнализации обновления списка запросов (DOORBELL) — записью лю- бого значения в регистр инициатор указывает агенту целевого устройства на обновление списка; ♦ регистр подтверждения состояния — записью в этот регистр инициатор под- тверждает прием неожиданного блока состояния. Выполнение нормальных заданий Работа инициатора с целевым устройством начинается с запроса входа (LOGIN), указатель на который инициатор записывает в регистр управляющего агента. После успешного входа инициатор получает указатели на базовые регистры тре- буемых ему выбирающих агентов. Это позволяет инициатору взаимодействовать с агентом целевого устройства для выполнения заданий и их наборов. Понятие «задание» соответствует одному запросу (ORB), а «набор заданий» — связанной цепочке запросов. Агенты требуют инициализации: инициатор должен сформировать в своей памя- ти пустой блок ORB с нулевым указателем на следующий блок и транзакцией записи в регистр CURRENT ORB передать указатель на этот блок агенту. Агент, вы- брав и выполнив пустой блок, перейдет в состояние приостановлен. Для постановки заданий в очередь инициатор формирует в памяти цепочку бло- ков запросов и помещает ссылку на первый блок цепочки в пустой блок ORB, заданный при инициализации. Об этой модификации памяти инициатор сооб- щает агенту записью в его регистр DOORBELL, что заставляет агента снова считать блок запроса и перейти к исполнению первого запроса цепочки. В дальнейшем к существующей цепочке можно динамически добавлять следующие запросы (или цепочки). Для этого инициатор помещает указатель на новый запрос в блок, бывший последним в предыдущей цепочке, и сигнализирует об этом обновлении записью в регистр DOORBELL. Если новые запросы добавляются, когда агент приос- тановился, то добавление можно выполнять записью в регистр CURRENT ORB указа- теля на новый блок (это исключает повторную выборку старого блока ORB). За передачу данных, необходимых для выполнения запросов, отвечает целевое устройство. В ORB описывается передача блока данных, которые могут и не умещаться в одну транзакцию шины. Целевое устройство разбивает передачу на транзакции с размером поля данных пакета, не превышающим определенного в ORB, и выполняет транзакции чтения или записи на заданной скорости. Состояние завершения запроса целевое устройство сообщает инициатору, запи- сывая в FIFO блок состояния (транзакцией записи блока). Состояние сообщает- ся только для запросов, у которых в ORB установлен бит уведомления, а также
398 Глава 15. Шины USB и FireWire для устройств хранения запросов, завершающихся с ошибкой. Сообщение о состоянии является указани- ем инициатору на возможность повторного использования памяти, занятой дан- ным блоком ORB (если только он не последний в цепочке) и всех предшествую- щих ему в наборе заданий. Управление заданиями может быть реализовано в различных объемах. Для базо- вой модели управления все задания в наборе имеют одинаковые возможности в плане изменения порядка исполнения или строгой упорядоченности. Эти воз- можности неявно определяются природой целевого устройства и инициатором не управляются. Для наборов потоковых заданий обязательна строгая упорядо- ченность, для нормальных наборов возможность изменения порядка указывает- ся в памяти конфигурации целевого устройства. Все задания в пределах набора однозначно идентифицируются адресом своего блока ORB. Для базовой модели обязательна поддержка функций управления ABORT_TASK, ABORT_TASK_SET и TARGET-RESET, функция TERMINATETASK должна отвергаться. В более сложной модели управления установленный порядок выполнения запро- сов может быть нарушен запросами управления. Конкретно указанное (по адресу ORB) задание может быть принудительно завершено (функцией TERMINATE- TASK) на том этапе выполнения, на котором оно находится. При этом в блоке состояния будет отражена данная причина завершения (function rejected), если завершение оказалось преждевременным. В случае возникновения ошибки при выполнении задания целевое устройство должно сбросить весь остаток набора заданий: остановить выборку запросов (пе- рейдя в состояние «умер»), дождаться успешной записи в память инициатора информации о состоянии выполнения всех предыдущих запросов и передать ин- формацию о состоянии задания, завершенного с ошибкой. Получение состояния с ошибкой для инициатора означает, что оставшиеся задания в наборе отвергнуты. Описание выполнения потоковых задний выходит за рамки темы данной книги, его можно найти в [2].
ГЛАВА 16 Системная поддержка устройств хранения Дисковая память имеет стандартную поддержку на уровне BIOS и операцион- ной системы. Поддержка дисков со стороны BIOS заключается в предоставле- нии вышестоящим уровням программного обеспечения возможности чтения и записи секторов диска, форматирования трека и выполнения вспомогательных функций. Эти возможности предоставляются программным вызовом прерыва- ния INT 13h BIOS — дискового сервиса. Дисковый сервис BIOS предназначен для изоляции вышестоящего ПО (ОС и приложений) от подробностей реализации дисковой системы. Дисковый сервис INT 13h работает на уровне физических устройств, называемых также физическими приводами (physical drive). Традиционный дисковый сервис имеет программный интерфейс, сохранившийся еще со времен IBM PC/XT. Он позволяет оперировать дисками размером до 528 Мбайт [4]. Когда появились диски большего размера, в традиционный дисковый сервис ввели расширение (алгоритмы преобразования), позволяющее преодолеть этот барьер и, теоретиче- ски, работать с дисками объемом до 8,4 Гбайт. Для работы с дисками большего объема введены новые функции INT 13h BIOS, интерфейс которых совершенно не похож на традиционный. Операционная система предоставляет прикладным программам сервисы более сложные, чем функции BIOS, обеспечивая доступ к файловой системе диска. Са- мый низкий уровень обращения, допускаемый операционной системой, опери- рует секторами логических дисков, или приводов (logical drive), ассоциированны- ми с именем устройства (А, В, С, ..., Z). Один физический диск (жесткий) может содержать несколько логических дисков. На физическом диске могут присутст- вовать системные области (MBR и резервированные секторы), доступ к которым операционная система не предоставляет. Для работы утилит и приложений с дисковой памятью имеется несколько уров- ней сервиса. ♦ Возможно обращение к контроллеру дисков на уровне регистров путем зада- ния адреса блока и количества секторов, требуемых для передачи. Это самый производительный способ обмена данными, но он требует знания как органи- зации разделов диска и файловой системы, так и контроллера диска (его сис- темы команд). Доступ обеспечивается ко всем элементам, кроме блоков,
400 Глава 16. Системная поддержка устройств хранения закрытых командой Set Max Address (для дисков АТА). При этом обходится фаза трансляции геометрии, выполняемая, в общем, по усмотрению BIOS. ♦ Сервисы INT 13h BIOS также позволяют получить неограниченный доступ к диску, но если используются традиционные вызовы (функции с номерами ниже 40h), то доступны лишь диски объемом до 8,4 Гбайт (при трансляции геометрии) или до 528 Мбайт (без трансляции). За абстрагирование от систе- мы команд контроллера приходится расплачиваться некоторым снижением производительности, связанным с накладными расходами программного ин- терфейса. ♦ Используя интерфейс функций ОС, можно получить доступ к любому секто- ру логического диска по функциям чтения/записи абсолютных секторов, ука- зав лишь логическое имя диска и номер сектора. Но при этом первым доступ- ным сектором (логический адрес 0) является загрузочный сектор логического диска, а секторы с таблицами разделов и те, что не попадают в разделы логи- ческих дисков, оказываются недоступными. Для осмысленного доступа к дан- ным необходимо знать структуры данных, используемые файловой системой, а риск «наломать дров», вплоть до полной потери данных, довольно велик. ♦ И наконец, интерфейс файловой системы ОС позволяет довольно легко соз- давать, искать и удалять файлы и каталоги, выполнять чтение и запись фай- лов целиком или частично, а также некоторые другие вспомогательные функ- ции. При этом от пользователя данного интерфейса скрываются все тонкости работы с файловой системой (и конечно же, все премудрости нижних уров- ней). Прикладные программы и утилиты изолируют пользователя от все^с этих тонко- стей, что позволяет ему сконцентрировать внимание на решении смысловых за- дач. Уровень, на котором программа обращается к дискам, выбирается програм- мистом из соображений минимальной достаточности: чем выше уровень сервиса, тем легче достичь совместимости с остальным ПО (существует меньше возмож- ностей для совершения ошибок). Чем ниже уровень сервиса, тем больше знаний нужно вложить в программу, чтобы она общалась с диском должным образом. Информация по многим вопросам программного взаимодействия с устройства- ми хранения приведена в [5]. Поскольку CD-ROM (как и CD-R, CD-RW) по организации данных (файловой системе) существенно отличается от традиционных дисков (гибких и жестких), для обеспечения «прозрачного» доступа приложений к файлам на CD-ROM тре- буются специальные программные средства. Несмотря на возможность загрузки ОС с CD-ROM, реализованную в современных версиях BIOS, полной поддерж- ки доступа к CD-ROM (такой, как к обычным дискам) BIOS не предоставляет. Приложениям доступ к CD-ROM обеспечивают только сервисы операционной системы, встроенные в ОС или загружаемые. Для загрузки ОС с CD-ROM фирмы Phoenix и IBM выпустили спецификацию «Е1 Torito Bootable CD-ROM Format Specification» (см. 16.5). Спецификация расширяет традиционный набор функций BIOS, она ориентирована на приводы с интерфейсами ATAPI и SCSI.
16.1. Функции дисковых сервисов BIOS 401 16.1. Функции дисковых сервисов BIOS Функции дискового сервиса вызываются программным прерыванием INT 13h. При этом требуется задать номер функции, логический адрес устройства (не путать с именем логического диска!), адрес сектора и число передаваемых секторов, а также указать, в каком месте оперативной памяти находится буфер для обмена данными с диском. Все хлопоты по взаимодействию с контроллером требуемого диска берет на себя BIOS. Драйверы традиционных устройств — НГМД и винче- стеров с интерфейсом АТА — находятся в системном модуле BIOS. Для других устройств, в том числе и винчестеров с интерфейсом SCSI, используются специ- альные собственные драйверы. Для дисков SCSI они располагаются в дополни- тельном модуле BIOS, находящемся на карте контроллера SCSI (или в систем- ной микросхеме BIOS, если контроллер SCSI расположен на системной плате), или в загружаемых программных модулях. Исторически сложилось так, что в дисковом сервисе адресация выполняется не- посредственно к цилиндрам, головкам и секторам устройства (CHS), хотя в боль- шинстве случаев для программ более удобной была бы линейная адресация (LBA). Однако, как известно, в случае дисков с интерфейсом АТА к реальному физическому устройству накопителей координаты сектора, передаваемые по ин- терфейсу, имеют только косвенное отношение. Для дисков с интерфейсом SCSI, у которых адресация секторов линейная, BIOS контроллера SCSI эмулирует трехмерную геометрию. Программный интерфейс с линейной адресацией логи- ческих блоков предоставляют только новые расширения INT 13h (функций с но- мерами 4xh). Традиционно дисковый сервис подразделяет физические диски на дискеты (diskette) и фиксированные диски (fixed disk). Набор функций для этих классов устройств несколько различается как по составу, так и по реализации совпадаю- щих функций (см. 6.2). Классы различаются по диапазонам номеров физических устройств: для дискет отводятся номера 0-7Fh (реально — только 0-3), а для фиксированных дисков — 80h-FFh. Таким образом, признаком, по которому BIOS определяет, какой процедуре передать обслуживание запроса, является бит 7 в байте номера устройства. По смыслу бит 7 номера диска разделяет уст- ройства на «дискеты» и «не дискеты». Если бит 7 равен нулю, выполняется про- цедура для контроллера НГМД, а если единице, выполняется процедура для контроллера жестких дисков. Контроллеры дисковых интерфейсов, имеющие в своем составе дополнительные модули BIOS, перехватывают вектор INT 13h, беря на себя обслуживание своих устройств. Когда в компьютере IBM PC/XT появились жесткие диски со своим контроллером, его модуль BIOS, инициали- зирующийся во время теста POST, вставал на место INT 13h, а указатель на ис- ходный обработчик дискового сервиса (драйвер НГМД из системного модуля BIOS) сохранялся на месте INT 40h. Хотя поддержка жестких дисков давно уже встроена в системный модуль BIOS, ради совместимости возможность использо- вания прерывания INT 40h для вызова драйвера гибких дисков сохраняется. Ин- терфейс этого вызова совпадает с INT 13h, но номер устройства (в регистре DL) не должен превышать 7Fh.
402 Глава 16. Системная поддержка устройств хранения Помимо функций дискового сервиса (INT 13h), с дисковыми устройствами связаны еще и векторы, обслуживающие аппаратные прерывания от контроллера НГМД — INT OEh (линия IRQ 6) и от контроллера жестких дисков — INT 76h (линия IRQ 14). При наличии двухканального АТА-порта второй канал обычно использует ли- нию IRQ 15 (вектор 77h). В XT контроллер жестких дисков использовал линию IRQ 5 (вектор ODh). Дополнительные контроллеры дисков могут задействовать и другие прерывания. Аппаратные прерывания вырабатываются контроллерами по завершении внутренних операций (нормальном и аварийном). На эти преры- вания BIOS не реагирует, а при инициализации их векторы направляются на программную заглушку (инструкцию IRET). Стандартные драйверы дисковых функций BIOS (включая и расширенный сер- вис) имеют однозадачное происхождение («наследие» процессора 8088). Во вре- мя выполнения функции значительное процессорное время может затрачиваться на ожидание завершения операции относительно медленным (по своей электроме- ханической природе) устройством. Драйверы многозадачного режима построены иначе: у них есть вызывающая часть, инициализирующая начало операции, и об- работчик аппаратного прерывания от контроллера, сообщающий операционной системе о выполнении операции и результате. Таким образом, время, необходи- мое контроллеру и накопителю для выполнения операции, для процессора оста- ется свободным. Естественно, что многозадачный драйвер операционной систе- мы должен иметь точное представление об аппаратной реализации контроллера, поскольку общение с ним идет на уровне регистров, а не функций BIOS. Это яв- ляется одной из причин того, что «серьезную» операционную систему нужно ус- танавливать на компьютер в конкретном аппаратном окружении. Простое копи- рование операционной системы с соседнего компьютера может быть чревато серьезными проблемами и даже потерей данных. Сервисы BIOS работают в реальном (16-разрядном) режиме процессора. Для со- временных ОС, работающих в 32-разрядном защищенном режиме, вызовы функ- ций BIOS неэффективны еще и по причине необходимости согласования режи- мов, сопровождаемого большими накладными расходами. Своей функцией 48h расширенный дисковый сервис дает операционной системе все сведения, необ- ходимые для реализации обеих частей дисковых драйверов, работающих в защи- щенном режиме процессора. Интерфейс дискового сервиса допускает многосекторные операции чтения и за- писи, но для дискет запрашиваемая цепочка секторов не должна переходить за границу адресованного трека. В зависимости от того, поддерживают ли конкрет- ный адресуемый контроллер и привод многосекторные передачи (и разрешена ли эта возможность в BIOS Setup), многосекторный вызов транслируется на фи- зическое устройство либо цепочкой одиночных запросов, либо как многосектор- ный. Заметим, что некоторые старые накопители могут некорректно отрабаты- вать многосекторные запросы на физическом уровне. Если имеются подозрения на эту неисправность, многосекторный режим может быть запрещен параметра- ми BIOS Setup (часто даже для каждого накопителя индивидуально). Конечно, при этом теряется производительность из-за увеличения доли накладных расхо- дов на формирование запросов.
16.2. Традиционный сервис BIOS 403 16.2. Традиционный сервис BIOS Традиционный дисковый сервис работает 6 16-разрядном режиме процессора, все параметры вызова передаются через регистры процессора. Адрес сектора задает- ся в системе CHS и размещен весьма специфично (рис. 16.1). Сервис вызывается программным прерыванием INT 13h, при вызове принимаются следующие согла- шения: ♦ Номер функции задается в регистре АН и не должен превышать 3Fh. ♦ Логический номер диска (drive number) указывается в регистре DL (бит 7=0 — признак обращения к НГМД). В каждом классе устройства нумеруются с нуля: DL=00h — дисковод A, DL=01h — дисковод В, DL=80h — первый жесткий диск (диск С), DL=81h — второй жесткий диск (диск D) и т. д. ♦ Номер цилиндра (cylinder number) ограничен значением 10 бит (!), два стар- ших бита — в регистре CL[7,6], младшие 8 бит — в регистре СН. Диапазон но- меров цилиндра — 0-1023. ♦ Номер головки (head number), 8 бит — в регистре DH (диапазон 0-255). ♦ Номер начального сектора (sector number), 6 бит — в регистре CL[5:0]. В отличие от всех других параметров, нумерация секторов начинается с единицы (диа- пазон 1-63). ♦ Количество секторов, участвующих в операции, 8 бит — в регистре AL (0-255). ♦ Указатель на начало буфера оперативной памяти ддя считываемых и записы- ваемых данных (address of buffer) — в регистрах ES:BX. ♦ Результат выполнения операции определяется по флагу переноса: CF=O — ус- пешное выполнение операции, CF=1 — обнаружены ошибки. Код состояния возвращается в регистре АН (см. далее). Код завершения последней операции с дискетами хранится по адресу 40:4 lh, с жесткими дисками — 40:74h. ♦ Таблица параметров диска для дискет (DPT) задана указателем в памяти по адресу 0:78h, для жестких дисков (HDPT) — 0:104h или 0:118h (см. далее). Список функций традиционного сервиса приведен в табл. 16.1. Устройства мо- гут не поддерживать некоторые функции, о чем драйверы должны сообщить ко- дом возврата 01h. Бит Регистр 7 6 5 4 3 2 1 0 DL I D7 d6 d5 d4 d3 d2 d1 d0 | DH I Н7 h6 h5 h4 h3 h2 hi h0 | CLI C9 08 S5 s4 s3 s2 s1 sO | CH | c7 c6 c5 o4 c3 C2 d Рис. 16.1. Размещение адреса в регистрах процессора: D7...d0 — логический номер диска, С9...С0 — номер цилиндра, H7...h0 — номер головки, S5...S0 — номер сектора
404 Глава 16. Системная поддержка устройств хранения Таблица 16.1. Функции традиционного дискового сервиса Номер функции Назначение Использование регистров, указате- лей и таблиц параметров АН DL DH, CL, СН AL ES:BX DPT/ HD PT 00h Reset Disk System — сброс диско- вой системы (всех контроллеров и устройств), позиционирование на нулевой цилиндр — — — — — 01h Read Status of Last Operation — чте- ние состояния последней операции + - - - - 02h Read Sectors into Memory — чтение секторов с диска в память + + + + + 03h Write Sectors from Memory — запись секторов из памяти на диск + + + + + 04h Verify Sectors — верификация сек- торов (холостое чтение без записи в память и проверка CRC/ECC) + + + - + 05h Format Desired Track — форматиро- вание трека + + + + + 08h Get Drive Parameters — получение параметров диска +3 +3 +3 - +3 09h’ Initialize Drive Parameters — инициа- лизация таблиц параметров диска + - - - + OAh’ Read Long — «длинное» чтение (сектор и поле ЕСС) + + + + + OBh’ Write Long — «длинная» запись (сектор и поле ЕСС) + + + + + OCh’ Seek — поиск цилиндра + + - - - ODh’ Alternative Disk Reset — альтерна- тивный сброс (не затрагивая кон- троллера дискет) + - - - - 10h’ Test Drive Ready — проверка готов- ности + - - - - 11h1 Recalibrate — рекалибровка (пози- ционирование на нулевой цилиндр) + - - - - 14h’ Controller Internal Diagnostics — диаг- ностика контроллера жестких дисков - - - - -
16.2. Традиционный сервис BIOS 405 Номер функции Назначение Использование регистров, указате- лей и таблиц параметров АН DL DH, CL, СН AL ES:BX DPT/ HD PT 15h Read DASD Type — получение типа диска: AH=O — нет диска; АН=1 — дискета без датчика смены диска; АН=2 — дискета с датчиком смены диска; АН=3 — жесткий диск; иные значения — код ошибки. CX:DX содержат число 512-байтных секторов на диске + 16h1 2 Diskette Change Line Status — про- верка статуса смены дискеты: CF=O АН=О — смены носителя не было; CF=1: АН=1 — недопустимый номер диска; АН=6 — была смена диска или оп- ределение смены не поддержива- ется; AH=80h — дисковод не готов или не установлен; иные значения — код ошибки + 17h2 Set Diskette Type for Format — уста- новка типа дискеты для форматиро- вания (перед форматированием) + +3 18h2 Set Media Type for Format — уста- новка типа носителя (для формати- рования) + +3 - - - 20h2 Get Media Type — получение типа установленного носителя + - - - - 24h1 Set Multiple Mode — установка па- раметров режима многосекторного обращения (в AL — число секторов за операцию) + — + - — 25h’ Identify Drive АТА — идентификация накопителя (только для АТА-дисков) + - - + - 1 Только для фиксированных дисков. 2 Только для дискет и других сменных носителей. 3 См. описание функции.
406 Глава 16. Системная поддержка устройств хранения Функции 0-4, ODh, 10h и 14h особых пояснений не требуют. Для обычных операций считывания и записи данных в буфере находятся поля данных секторов, участ- вующих в обмене. Функция 5 выполняет форматирование трека согласно структуре, описанной в буфере. Для дискет каждому сектору соответствует 4-байтная структура, со- держащая (по порядку следования байтов) номер трека, номер головки, номер сектора и описатель размера сектора (Olh — сектор 256 байт, 02h — 512 байт, 03h — 1024 байт). Варьируя номера (и их последовательность) секторов, а ино- гда и их размер, можно формировать нестандартные дискеты, используемые как ключи защиты программного обеспечения. Если программа, считывающая ключ, способна определить еще и последовательность секторов (это можно сделать по задержкам между считыванием секторов, а также быстрым последовательным чтением идентификаторов секторов), то подобрать такой ключ будет относи- тельно сложно. Для жестких дисков структура данных проще — на каждый сек- тор отводится пара байтов, первый является признаком дефектности (80h) или годности (00h) сектора, второй — номером сектора. Для дисков ESDI, SCSI и большинства дисков АТА функция форматирования не поддерживается. Функция 8 позволяет определить параметры привода и число устройств на кон- троллере. В регистрах СХ и DH возвращаются максимальные значения номера ци- линдра, головки и сектора (формат см. на рис. 16.1). Для дискет в DL сообщается количество установленных дисководов, в BL — тип привода (значение из CMOS: 01 - 360 Кбайт, 02 - 1,2 Мбайт, 03 - 720 Кбайт, 04 - 1,44 Мбайт, 06 - 2,88 Мбайт); (ES:DI) указывает на 14-байтную таблицу параметров (см. далее), ассоциированную с носителем максимального объема, допустимого для данного устройства. Для жестких дисков в DL сообщается количество дисков на первом контроллере, а в ES:DI возвращается указатель на таблицу HDPT (см. далее), в которой содержится подробное описание диска. Из-за интерфейсных ограни- чений на разрядность номера головки и цилиндра параметры жесткого диска, со- общаемые через регистры, могут отличаться от параметров, указанных в HDPT. Через регистры можно описать диск в пределах 1024 х 256 х 63 (8,4 Гбайт), через HDPT - 65 536 х 256 х 63 (33,8 Гбайт). Функция 9 инициализирует выбранный жесткий диск в соответствии с парамет- рами, хранящимися в его таблице HDPT. Для дисков ESDI и SCSI никаких дей- ствий не выполняется (они свои параметры устанавливают сами, не пользуясь ‘таблицами). Функции 0А и OBh «длинного» чтения и «длинной» записи. В буфере находятся данные сектора и относящиеся к нему байты CRC или ЕСС (по умолчанию — 4 байта, но производитель может изменить длину этого поля). Если операция чтения завершилась с обнаружением исправимой ошибки ЕСС, то в буфере на- ходятся корректные данные. «Длинные» операции возможны лишь с одним сек- тором. Кстати, сформировав в буфере блок данных с неверным значением полей CRC/ECC и выполнив «длинную» запись, можно записать на диск сектор, все- гда читаемый с ошибкой. Если есть подозрения о неработоспособности схем кон- троля диска, этим приемом можно их проверить — контроллер с неисправными (или отсутствующими) схемами контроля ошибку не обнаружит. Для дисков ESDI и SCSI функция не поддерживается.
16.2. Традиционный сервис BIOS 407 Функция OCh выполняет только поиск заданного цилиндра (головки и сектора), но не вызывает обмена данными. Она полезна для ускорения обмена: ее выпол- няют, если в буфере (в ОЗУ) еще нет подходящего места для данных, а адрес следующего запроса уже известен. Тогда последующая команда чтения/записи или форматирования выполнится быстрее за счет экономии времени на пози- ционировании. Функция 11h «встряхивает» механизм позиционирования, ее обычно используют после неудачной попытки обращения к диску. Функция 15h определяет тип диска. Некоторые версии BIOS могут сообщать число 512-байтных блоков, хранимых устройством (DX — младшее слово, СХ — старшее). Функция 16h определяет факт смены носителя; до применения этой функции следует убедиться в поддержке датчика смены по функции 15h. Функция 17h задает тип форматируемой дискеты (настраивает скорость переда- чи данных контроллера), при ее вызове в AL заносится значение: 01 — дискета на 360 Кбайт в дисководе на 360 Кбайт, 02 — дискета на 360 Кбайт в дисководе на 1,2 Мбайт, 03 — дискета на 1,2 Мбайт в дисководе на 1,2 Мбайт, 04 — дискета на 720 Кбайт в дисководе на 720 Кбайт. Для дискет на 1,44 и 2,88 Мбайт использу- ют функцию 18. Функция 18h служит тем же целям, но в регистрах СН и CL задаются количества треков и секторов на трек. Согласно спецификации SurePath BIOS (от IBM), в ES:DI возвращает указатель на 14-байтную структуру параметров, ассоцииро- ванную с выбранным типом носителя. Функция 20h (необязательная) позволяет определить возможности накопителя со сменными носителями. Значения АН при возврате: 30h — нет датчика смены носителя, 3lh — в устройстве нет носителя, 32h — привод не сообщает тип носи- теля. В AL возвращается тип установленного носителя: 06h — дискеты для режи- ма 4М (2,88 Мбайт), 04h - 2М (1,44 или 1,2 Мбайт), 03h - 1М (720, 360 или 180 Кбайт), остальные значения зарезервированы. Функция 24h (необязательная) позволяет заказать число секторов, передаваемых в режиме многосекторных передач за одну команду АТА. Функция 25h используется для считывания в буфер 512-байтного «паспорта уст- ройства» ATA/ATAPI (см. 8.3). Таблица параметров дискет (Diskette Parameter Table, DPT) содержит набор ll-байтных структур (табл. 16.2), описывающих свойства дисковых устройств с логическими адресами 0-3. Управляя этими параметрами, ОС и прикладные программы могут манипулировать скоростными характеристиками дисководов (в пределах возможности устройств), что заметно влияет на производительность дисковых операций. Подробнее смысл параметров пояснен в 2.3. Указатель на начало таблицы (таблица для нулевого устройства) расположен по адресу 0:78h — на месте вектора прерывания INT lEh, таблицы для следующих устройств начина- ются со смещением И, 22 и 33 байт соответственно. В спецификации SurePath BIOS (от IBM) предложен^ более длинная структура (14 байт), ссылку на нача- ло для каждого дисковода можно получить по функции INT 13h(18h) BIOS.
408 Глава 16. Системная поддержка устройств хранения Таблица 16.2. Таблица параметров дискет (DPT) Смещение Назначение 0 Биты 4-7 — время перемещения головок на один шаг (Step Rate Time, SRT), для приводов на 1,44 Мбайт по умолчанию — D. Биты 0-3 — время разгруз- ки головок (Head Unload Time, HUT), для приводов 1,44 Мбайт по умолча- нию — F 1 Бит 0: 1=DMA не используется (всегда 0). Биты 1-7 — время успокоения после загрузки головок (Head Load Time, HLT), для приводов 1,44 Мбайт по умолчанию — 0000001 2 Время выключения мотора после последней операции (в интервалах по 55 мс), по умолчанию — 25h (2,03 с) 3 Размер сектора: 0=128 байт или в соответствии с байтом 6, 1=256 байт, 2=512 (стандартный размер), 3=1024 4 Номер последнего сектора на треке (EOT), при тривиальной нумерации соот- ветствует числу секторов на треке 5 Временной зазор для операций чтения/записи (GPL1, 2Ah для 5", 1 Bh для 3,5”) 6 Длина сектора в байтах, если байт 3=0 7 Временной зазор для операции форматирования трека (GPL2, 50h для 5”, 54h для 3,5") 8 Символ-заполнитель для форматирования (обычно F6h) 9 Время успокоения головок после позиционирования (head settle time), мс; по умолчанию — OFh (15 мс) OAh Время разгона двигателя (в интервалах по 125 мс), по умолчанию — 8(1 с) OBh’ Максимальный номер трека OCh’ Скорость передачи данных ODh’ Тип дисковода в CMOS 1 Для SurePath BIOS (IBM). Таблицы параметров жестких дисков (Hard Disk Parameter Table, HDPT), в от- личие от предыдущих, в значительной степени «морально устарели». Стандарт- ная таблица (табл. 16.3) не позволяет различать физическую и логическую гео- метрию (см. 16.3), «зато» в ней есть параметры предкомпенсации записи и парковки, которые уже очень давно не используются. Указатель на таблицу первого жесткого диска (HDD0, логический адрес 80h) расположен по адресу 0:104h (на месте вектора прерывания INT 41h), второго (HDD1, логический адрес 81h) — 0:118h (INT 46h), а для других дисков стандартного места не предусмотре- но. Адрес таблицы параметров для любого жесткого диска можно получить в ре- гистрах ES: DI по функции 8 (получение параметров диска). Для того чтобы всту- пили в силу изменения, внесенные программой в таблицы параметров первого
16.2. Традиционный сервис BIOS 409 или второго дисков, следует выполнить функцию INT 13h (9), указав только номер диска (80 или 81h). При этом предполагается, что указатель на соответст- вующую таблицу находится на штатном месте. В расширенной версии BIOS, в которой используется трансляция геометрии, таблица параметров соответству- ет табл. 16.4. Признаком данного формата'таблицы является байт сигнатуры Axh (смещение 3), значение которого зависит от способа трансляции. Параметры же- стких дисков заносятся в таблицы во время начального тестирования компьюте- ра (в ходе теста POST). Они задаются утилитой BIOS Setup или определяются автоматически по фактически подключенным устройствам (в зависимости от на- стройки Setup). Таблицы параметров жестких дисков не позволяют описывать диски размером более 33,8 Гбайт, поскольку предел физической геометрии — 65 536 х 16 х 63. Однако для современных ОС, использующих большие диски, это не проблема — они попросту данными таблицами не пользуются, а работают в режиме LBA. Таблица 16.3. Стандартная таблица параметров жестких дисков (HDPT) Смещение Длина Назначение 0 2 Число цилиндров 2 1 Число головок 3 2 Цилиндр, начиная с которого снижается ток записи (только для XT)’ 5 2 Цилиндр, начиная с которого включается предкомпенсация записи1 7 1 Длина поля ЕСС 8 1 Флаги операций: биты 0-2 — параметры привода (только для XT); бит 3: 1 — число головок больше 8 (только для АТ); бит 4=0; бит 5: 1 — карта дефектов записана на цилиндре, следующем за максимальным; бит 6 — запрет исправления ошибок с помощью ЕСС; бит 7 — запрет повторов в случае ошибок 9 1 Тайм-аут для обычных операций (только для XT) OAh 1 Тайм-аут для операции форматирования (только для XT) OBh 1 Тайм-аут для операции проверки устройства (только для XT) OCh 2 Номер цилиндра зоны парковки (только для XT) OEh 1 Число секторов на треке (для АТ) OFh 1 Резерв 1 Устарело, не используется.
410 Глава 16. Системная поддержка устройств хранения Таблица 16.4. Транслированная таблица параметров жестких дисков Смещение Длина Назначение 0 2 Логическое число цилиндров 2 1 Логическое число головок (не более 256, 0 означает 256) 3 1 Сигнатура таблицы (АхИ) 4 1 Физическое число секторов на треке (не более 63) 5 2 Цилиндр, начиная с которого включается предкомпенсация записи1 7 1 Резерв 8 1 Флаги операций: биты 0-2 — параметры привода (только для XT); бит 3: 1 — число головок больше 8 (только для АТ); бит 4=0; бит 5: 1 — карта дефектов записана на цилиндре, следующем за максимальным; бит 6 — запрет исправления ошибок с помощью ЕСС; бит 7 — запрет повторов в случае ошибок 9 2 Число физических цилиндров, не более 65 536 (0 означает 65 536) OBh 1 Число физических головок, не более 16 (0 означает 16) ОСИ 2 Номер цилиндра зоны парковки (только для XT) ОЕИ 1 Логическое число секторов на треке (для АТ) OFh 1 Контрольная сумма (двоичное дополнение байтов 0-14) 1 Устарело, не используется. В табл. 16.5 представлены коды ошибок обращения к НГМД, в табл. 16.6 — коды ошибок обращения к фиксированным дискам. Код состояния возвращается в ре- гистре АН. Код завершения последней операции с дискетами хранится по адресу 40:4 lh, с жесткими дисками — 40:74h. Таблица 16.5. Коды ошибок обращения к НГМД Код (АН) Ошибка 00h No error — нет ошибок 01h Invalid diskette parameter or function not supported — неверные параметры дис- кеты или не поддерживаемая функция 02h Address mark not found — не найден адресный маркер 03h Write-protect error — попытка записи на защищенный диск 04h Requested sector not found — сектор не найден 06h Diskette change line active — обнаружен сигнал смены носителя
16.2. Традиционный сервис BIOS 411 Код (АН) Ошибка 08h DMA overrun on operation — переполнение операции DMA 09h DMA attempt across a 64KB boundary — попытка пересечь границу 64-кило- байтных блоков при операции DMA OCh Media type not found — не определен тип носителя 10h Cyclic redundancy check (CRC) error on diskette read — ошибка CRC-кода при чтении 20h General controller failure — общий отказ контроллера 30h Drive does not support media sense — накопителем не поддерживается датчик типа носителя 31h No media in drive — нет носителя в приводе 32h Media type not supported by drive — тип носителя не поддерживается приводом 40h Seek operation failed — ошибка операции поиска 80h Diskette drive not ready — неготовность дисковода Таблица 16.6. Коды ошибок обращения к фиксированным дискам Код (АН) Ошибка 00h No error — нет ошибок 01h Unsupported function or parameter — не поддерживаемая функция или параметр 02h Address mark not found — не найден адресный маркер 04h Sector not found — сектор не найден 05h Reset failed — ошибка при сбросе 07h Drive parameter activity failed — ошибка активации параметров диска 09h Data-boundary error — нарушение границы данных OAh Bad sector flag detected — обнаружен сектор, помеченный как дефектный OBh Bad cylinder detected — обнаружен дефектный цилиндр ODh Invalid number of sectors on format — недопустимое для формата количество секторов OEh Control data address mark detected — обнаружен адресный маркер управляю- щих данных OFh DMA arbitration level out of range — арбитражный уровень DMA вне диапазона 10h Uncorrectable error checking and correction (ECC) or cyclic redundancy check (CRC) error — ошибка, неисправимая с помощью ЕСС или обнаруженная с по- мощью CRC 11h ЕСС corrected data error — ошибка, исправленная ЕСС (данные в памяти кор- ректны) Продолжение &
412 Глава 16. Системная поддержка устройств хранения Таблица 16.6 (продолжение) Код (АН) Ошибка 20h General controller failure — общая ошибка контроллера 40h Seek operation failed — ошибка операции поиска 80h Recal drive or controller time-out — тайм-аут операции рекалибровки AAh Drive not ready — привод не готов BBh Undefined error occurred — неопределенная ошибка CCh Write fault on selected drive — ошибка записи EOh Status error/error register=O FFh Sense operation failed — ошибка операции определения носителя Итак, традиционный дисковый сервис предоставляет набор базовых функций (чте- ние, запись, форматирование, определение параметров), достаточный для рабо- ты ОС и приложений. Однако применительно к жестким дискам у него есть ряд ограничений: ♦ малый (по нынешним меркам) размер обслуживаемого диска — 8,4 Гбайт (об- щее ограничение), а для дисков АТА (самых популярных) — 528 Мбайт; ♦ в системе зарезервировано место под таблицы параметров только для двух жестких дисков, в то время как к двухканальному контроллеру АТА можно подключить до четырех дисков; ♦ интерфейс взаимодействия с вызывающей программой — 16-разрядный, что не позволяет в полной мере использовать возможности современных процес- соров. Поскольку на использовании сервиса INT 13h BIOS основана загрузка всех ОС, а в MS DOS (и не только) на этом сервисе держатся вообще все обращения к дискам (современные многозадачные системы, будучи загруженными, пользуют- ся собственными драйверами), возникла необходимость «продлить ему жизнь», сохраняя обратную совместимость. 16.3. Преодоление барьера 528 Мбайт (ECHS и LBA) Формально традиционный сервис позволяет работать с дисками, имеющими до 1024 х 256 х 63 = 16 515 072 секторов (около 8,4 Гбайт). Ряд операционных сис- тем имеет ошибку, не позволяющую использовать полный объем, допустимый данным сервисом. Для дисков объемом более 15 481 935 секторов следует при- менять только функции расширенного сервиса (см. 16.4). Однако при работе с устройствами АТА имеется еще и барьер в 528 Мбайт. Дело в том, что контрол- лер жесткого диска АТА (и ST-506/412), на который ориентированы драйверы INT 13h, имеет только 4-битный регистр номера головки (а в BIOS — 6 бит).
16.3. Преодоление барьера 528 Мбайт (ECHS и LBA) 413 Правда, этот же контроллер способен принимать 16-битный номер цилиндра (в BIOS — 10 бит). Понятно, что непосредственно без искажений через эти два фильтра (формат вызова и формат регистров контроллера) может пройти только вызов с самыми жесткими ограничениями по каждой координате. Тогда огра- ничение, полученное тем же перемножением диапазонов координат, получается около 528 миллионов байт: (210 = 1024 цилиндра) х (24 = 16 головок) х (26 - 1 = 63 сектора) х 512 байт = = 528 482 304 байт. Для преодоления 528-мегабайтного барьера у дисков АТА в BIOS ввели рас- ширение традиционного дискового сервиса, не затрагивая программного интер- фейса. Интерфейс АТА в трехмерной геометрии позволяет реализовать доволь- но большой (но уже не запредельный) объем диска: (216 = 65 536 цилиндров) х (24 = 16 головок) х (28 - 1 = 255 сектора) х 512 байт = = 136,9 Гбайт. Чтобы достичь хотя бы интерфейсного ограничения BIOS (8,4 Гбайт), стали применять трансляцию параметров вызова функций INT 13h, которые будем те- перь называть логическими, в физические параметры, передаваемые контролле- рам дисков АТА. В функции, которая сообщает параметры диска (функция 8), производится обратная трансляция, так что на стороне вызова программного ин- терфейса INT 13h присутствуют только логические параметры. Естественно, ло- гический объем диска не может превышать физического: (СН5)ЛОГ < (СН5)физ. Есть два основных пути трансляции: оставаясь в пределах трехмерной геомет- рии (CHS) или перейдя на логическую адресацию блоков (LBA), если таковую поддерживает накопитель. Возможности выбора пути трансляции определяются конкретной версией BIOS. При использовании режимов, называемых Large Disk или ECHS (Extended CHS), общение с накопителем производится в трехмерной системе, но с преобразован- ными номерами цилиндров и головок. Главная задача преобразования — умень- шить число логических цилиндров, которое физически у больших дисков превы- шает предельные 1024, и увеличить логическое число головок при ограничении в 16 физических. Для того чтобы программы могли определить физическую гео- метрию диска, таблицу параметров HDPT модернизировали и на место устарев- ших параметров ввели описание физической геометрии. Там, где раньше было описание геометрии, теперь находятся логические параметры, используемые при вызовах. Попутно в расширении увеличили число поддерживаемых таблиц (по крайней мере для четырех дисков). Способов трансляции, к сожалению, может быть несколько. Можно, например, физическое количество цилиндров диска разделить на К (К = 2,4, 8, 16..., при этом параметр преобразования К определяется так, чтобы результат не превышал 1024), а физическое число головок умножить на К (это произведение не должно превышать 255). Умножение и деление на степень числа 2 легко выполняется путем сдвигов, программный код трансляции получается компактным и работа-
414 Глава 16. Системная поддержка устройств хранения ет быстро. Эта схема преобразования, называемая bit shift translation, рекоменду- ется фирмой Phoenix для включения в расширенный дисковый сервис BIOS. Она работает на любых дисках АТА, как поддерживающих LBA, так и не поддер- живающих. Количество секторов на треке при трансляции не изменяется. Логи- ческие (параметры INT 13h) и физические (передаваемые устройствам АТА) па- раметры дисков для данной схемы приведены в табл. 16.7. Специально под эту схему в приложениях к АТА-2 и более поздним стандартам приводятся правила сообщения геометрии устройствами разной емкости, позволяющие наиболее эф- фективно использовать пространство диска (сводя к минимуму число потерян- ных секторов). К сожалению, это — не единственный способ трансляции геомет- рии, но другие мы здесь рассматривать не будем. Нам важно знать лишь цель преобразования и тот факт, что из-за несовпадения методов трансляции в режи- мах Large Disk (ECHS) возможна несовместимость дисков, размеченных при раз- личных версиях BIOS. Таблица 16.7. Трансляция геометрии сдвигом битов Параметры устройства АТА Параметры, сообщаемые INT 13h Теоретический предел Число цилиндров, С Число головок, Н Число цилиндров Число головок 1-1,024 1-16 С Н 528,4 Мбайт 1,024-2048 1-16 С/2 Нх2 1,057 Гбайт 2048-4096 1-16 С/4 Нх4 2,114 Гбайт 4096-8192 1-16 С/8 Нх8 4,228 Гбайт 8192-16 384 1-16 С/16 Нх 16 8,456 Гбайт 16 384-32 768 1-8 С/32 Н х 32 8,456 Гбайт 32 768-65 536 1-4 С/64 Н х 64 8,456 Гбайт В режиме LBA параметры стандартных вызовов транслируются в линейный ад- рес, который вычисляется однозначно в «естественном» порядке счета секторов. Сектору с нулевым логическим адресом соответствует первый сектор нулевой годовки нулевого цилиндра. Общая формула вычисления логического адреса выглядит так: LBA = (CYL х HDS + HD) х SPT + SEC - 1, где CYL, HD и SEC — логические номера цилиндра, головки и сектора в про- странстве CHS; HDS — количество головок; SPT — количество секторов на тре- ке. Трехмерную геометрию в ответ на вызов функции 8 INT 13h BIOS сообщает следующим образом: ♦ количество секторов на треке (SPT) — всегда 63; ♦ количество головок (HDS) — 16, 32, 64, 128 или 255 в зависимости от объема диска; ♦ количество цилиндров определяется делением общего числа секторов на про- изведение SPT х HDS.
16.3. Преодоление барьера 528 Мбайт (ECHS и LBA) 415 Число головок выбирается так, чтобы полученное число цилиндров не превыша- ло 1024 (табл. 16.8). Недостатком данного метода являются более сложные вы- числения при преобразованиях (здесь при умножении и делении уже не обой- тись просто сдвигами). Таблица 16.8. Трансляция геометрии с использованием LBA Число секторов в устройстве АТА, N Параметры, сообщаемые INT 13h (в регистрах) Теоретиче- ский предел Число секто- ров на трек Число голо- вок Число цилин- дров 1-1 032 192 63 16 N/(63x16) 528,4 Мбайт 1 032 192-2 064 384 63 32 N/(63 х 32) 1,057 Гбайт 2 064 384-4 128 768 63 64 N/(63 х 64) 2,114 Гбайт 4 128 768-8 257 536 63 128 N/(63x128) 4,228 Гбайт 8 257 536-16 450 560 63 255 N/(63 x 255) 8,422 Гбайт Когда в CMOS Setup выбирается режим LBA, это означает использование схемы трансляции LBA assisted translation, соответствующей табл. 16.8. При этом вовсе не обязательно задействовать линейную адресацию в обращениях к физическим устройствам АТА — если диск способен установить геометрию из данной табли- цы (по АТА-команде Initialize Device Parameters), то обращения могут произво- диться и в режиме CHS. Обращение к диску в режиме LBA, безусловно, выгод- но, лишь когда BIOS обслуживает вызов расширенной функции 4х (см. далее), поскольку при этом не требуется никакой трансляции (экономится процессор- ное время). Для того чтобы определить, в каком режиме используется диск АТА, можно прочитать байт из регистра D/H (1F6 для первичного контроллера или 176 для вторичного). Значение Ех или Fx указывает на то, что в последней операции использовался режим LBA (для ведущего или ведомого устройства соответст- венно), значение Ах или Вх — режим CHS. Прочитать порт можно, например, с помощью команды «I 1F6» (I 176 для вторичного контроллера) отладчика DEBUG (в среде DOS). Итак, для дисков размером более 528 Мбайт BIOS определяет фиктивные пара- метры геометрии (если большие диски поддерживаются). Операционной системе и прикладным программам они сообщаются как реальные, a BIOS при вызовах дисковых сервисов преобразует параметры вызова так, что номера цилиндров и головок принадлежат пространству «внешних координат» диска АТА. Еще раз подчеркнем, что 528-мегабайтный барьер для дисков АТА имеет чисто программное происхождение. Интерфейс и регистры контроллера накопителя ог- раничивают объем до 136,9 Гбайт в трехмерной адресации и 0,5 Тбайт — в ли- нейной. Средства преодоления этого барьера носят чисто программный характер и должны быть реализованы на уровне BIOS. Здесь могут быть следующие вари- анты: ♦ Современные версии BIOS имеют встроенный механизм трансляции, кото- рый включается для дисков объемом более 528 Мбайт. При трансляции мо-
416 Глава 16. Системная поддержка устройств хранения жет использоваться режим LBA, если его поддерживает диск, или режим ECHS (Large Disk), допустимый для любых дисков АТА. Выбор режима трансляции выполняется при конфигурировании диска в BIOS Setup. Ряд версий BIOS не поддерживают LBA, некоторые не поддерживают ECHS. Если в компьютере применяется флэш-BIOS, но поддержки трансляции нет, то имеет смысл обновить версию BIOS, чтобы проблема преодоления барьера решалась самым лаконичным способом. ♦ Для компьютеров со старыми версиями BIOS, не имеющими встроенной под- держки трансляции и не допускающими легкого обновления, выпускались платы интерфейса E-IDE, снабженные микросхемой расширения ROM BIOS. Эта микросхема хранит программный код драйвера INT 13h, реализующего тот или иной тип трансляции (обычно ECHS). В остальном плата могла и не от- личаться от традиционного адаптера АТА, хотя могла иметь интерфейс шины VLB или PCI и более сложный контроллер с буферами и управлением шиной (Bus-Master). ♦ Если BIOS трансляцию не поддерживает, а плата с расширением ROM BIOS не применяется, то остается программная загрузка драйвера INT 13h. Однако этот драйвер должен быть загружен до загрузки операционной системы, кото- рая уже опирается на BIOS. Такой драйвер может загружаться через главный загрузчик (MBR). Код этого загрузчика исполняется в конце теста POST, и если он до загрузки загрузчика операционной системы (boot record из ак- тивного раздела диска) поместит в память новый драйвер INT 13h, то операци- онная система воспримет его как часть BIOS. На таком принципе работают драйверы типа Disk Manager и EZ-Drive. Подобное решение проблемы имеет ряд неудобств. Во-первых, загружаемый драйвер использует часть области стандартной памяти, которую в среде DOS бывает жалко. Во-вторых, проце- дура конфигурирования диска с таким драйвером сложнее, чем обычного, по- скольку требует установки дополнительного программного обеспечения, да еще и размещаемого в системной области диска. И в-третьих, в нештатных ситуа- циях (например, под действием вируса) обслуживание диска становится бо- лее тонкой задачей. Так, универсальное (хотя и не общеизвестное) «лечение» главной загрузочной записи командой FDISK/MBR заменит загрузчик драй- вера стандартным загрузчиком, и процедуру конфигурирования диска при- дется повторять. Конечно, в Disk Manager имеются соответствующие утили- ты, но о необходимости их использования нужно помнить, а сами утилиты хранить на дискете. Однако ради большого объема диска приходится идти и на такие издержки. Поскольку преобразования в LBA отличаются от преобразования в ECHS, дис- ки, размеченные в режиме LBA, не будут работать в режиме ECHS, и наоборот. Тот же результат возможен при переносе диска, размеченного в режиме ECHS, на другой компьютер, у которого применен другой алгоритм трансляции. Если повезет, то эта неработоспособность проявится сразу невозможностью загрузки операционной системы (сообщение «Missing Operation System»). Значительно хуже, когда ОС загружается и кажется, что все хорошо. А в это вре- мя, возможно, все записи на диск идут по неправильным адресам, и крупная
16.4. Расширенный сервис BIOS 417 потеря данных приближается неумолимо. По той же причине нельзя пытаться решать проблему больших дисков, форматируя их на компьютере с расширенной версией BIOS, а эксплуатируя на машине со стандартной версией, имеющей 528- мегабайтный барьер. Сначала все будет хорошо, но когда начальная 528-мега- байтная область заполнится, следующая запись пойдет по нулевому цилиндру. А там были и главный загрузчик, и таблица разделов, и копии FAT. До области данных эта перекрывающая запись дойти, скорее всего, не успеет, но легче от этого не станет — данные будут потеряны. Сказанное не очень актуально для операционных систем, не использующих BIOS при обращении к дискам, — если такую ОС удается загрузить с диска, то проблему большого диска можно считать решенной. 16.4. Расширенный сервис BIOS До сих пор мы говорили о способе преодоления первого барьера емкости диска (528 Мбайт), вызванного несогласованностью ограничений параметров вызовов сервиса BIOS и устройств АТА. Однако давно уже актуально преодоление огра- ничений интерфейса самой системы BIOS, которое, как было показано ранее, составляет около 8,4 Гбайт. Чтобы получить возможность работы через BIOS с дисками большего объема, потребовалось ввести новые функции дискового сер- виса. Расширенный дисковый сервис (Enhanced Disk Drive services, EDD) BIOS, про- двигаемый фирмой Phoenix Technologies LTD, реализуется многими разработчи- ками BIOS и устройств массовой памяти. Он позволяет работать с устройствами, имеющими объем до 2е4 секторов, эффективно используя архитектуру процессо- ров IA-32 и IA-64. Сервис оперирует линейным логическим адресом сектора (LBA). Вместо традиционных таблиц параметров дисков в нем применяются но- вые таблицы, дающие исчерпывающую информацию об устройствах, их физиче- ской организации и интерфейсе. Устройства могут иметь сменные носители и сами быть съемными в процессе работы компьютера (например, подключенные к шине USB или IEEE 1394), так что понятие «сменяемость носителя» несколько размывается. Такие устройства должны поддерживать механизм уведомления о смене носителя и программное блокирование смены носителя. По прогнозам, емкости данного интерфейса должно хватить на 15-20 лет. Расширения INT 13h BIOS используют ОС Windows 95, Windows 98, Windows ХР/200х. Правда, это использование ограничено лишь начальной загрузкой и процессом установки (FDISK, FORMAT), поскольку в регулярной работе при- меняются собственные 32-разрядные драйверы. Расширения INT 13h не исполь- зуют ОС DOS (все версии), Windows 3.1х, Windows NT, Novell NetWare, OS/2 Warp, Linux, Unix. В настоящее время определены три набора функций: ♦ доступ к фиксированным дискам (fixed disk access subset) — функции 41-44h, 47h и 48h; ♦ блокировка и смена носителя (device locking and ejecting subset) — функции 41h, 45h, 46h, 48h и 49h;
418 Глава 16. Системная поддержка устройств хранения ♦ поддержка расширенных дисков (enhanced disk drive support subset) — функ- ции 41h и 48h. Для эмуляции дисков CD-ROM имеются расширенные функции 4A-4Dh, опи- санные в 16.5. Расширенный сервис, как и традиционный, вызывается программным прерыва- нием INT 13h с номерами функций свыше 3Fh (регистр АН), номер устройства (ре- гистр DL) допустим в диапазоне 80h-FFh. Основные параметры вызова — на- чальный адрес блока, число секторов для передачи и адрес буфера — передаются через адресный пакет (device address packet). Формат пакета по сравнению с пе- редачей параметров традиционного сервиса через регистры процессора довольно просторный (табл. 16.9). Таблица 16.9. Формат адресного пакета Смещение Длина Назначение 0 1 Длина пакета в байтах (не менее 16, при меньшей длине запрос отвергается с CF=1 и AH=01h) 1 1 Резерв(0) 2 1 Число блоков (секторов), подлежащих передаче, в пределах 0-127 (0-7Fh). 0 означает отсутствие передачи. Запрос со значениями 80h-FEh отвергается с CF=1 и AH=01h. При значении поля FFh чис- ло блоков берется из поля со смещением 18h, при этом адрес бу- фера берется из поля со смещением 10h 3 1 Резерв (0) 4 4 Адрес буфера передачи в форме Seg:Offset. FFFF:FFFFh указывает на использование поля со смещением 10h для задания адреса 8 8 Логический адрес начального блока (LBA), 64 бит 10h 8 64-битный линейный адрес буфера передачи; используется, если поле 2=FFh или поле 4=FFFF: FFFFh 18h 4 Число блоков (секторов), подлежащих передаче; используется, если поле 2=FFh 1Ch 4 Резерв(0) Поскольку расширение BIOS может и отсутствовать, имеется функция проверки его наличия (номер 41h). Расширение может действовать избирательно (не для всех устройств), так что проверку надо производить для конкретного устройства, интересующего программу. Проверка дает номер версии расширения и карту поддерживаемых наборов функций. Функции расширенного чтения, записи, вери- фикации и поиска (42h, 43h, 44h и 47h) по смыслу не отличаются от их аналогов из традиционного сервиса. Для работы со сменными носителями введены функ- ции отпирания/запирания, извлечения и проверки факта смены носителя (45h, 46h и 49h). От идеологии традиционного сервиса сильно отличается функция по- лучения параметров устройства (48h). Она возвращает в ОЗУ буфер с набором
16.4. Расширенный сервис BIOS 419 параметров и детальным описанием устройства, позволяющим ОС и приложе- ниям работать с ним, минуя BIOS. На диске адресуются до 2е4 секторов. Адрес буфера передачи может задаваться либо в 16-битном формате реального режима (SegiOffset), либо 64-битным ли- нейным адресом. Число блоков, участвующих в операции, может задаваться дву- мя способами (см. табл. 16.9) и достигать 232. После выполнения операции в пакете окажется число блоков, с которыми операция выполнена успешно (при ошибке оно будет отличаться от указанного при входе). В описании функций подразумевается, что при вызове в регистрах АН и DL зада- ются номера функции и устройства соответственно. При успешном выполнении функция возвращает CF=O, при ошибке — CF=1 и код ошибки в АН. Остальные ре- гистры используются в зависимости от функции (см. далее). Функция 41 h — проверка присутствия расширения (check extensions present). При вызове в ВХ заносится 55AAh. Если расширение присутствует, то при воз- врате установится CF=O и BX=AA55h, в АН — номер версии расширения (30h для данного описания), в СХ — битовая карта поддержки функций: ♦ бит 0: 1 — присутствует поддержка доступа к фиксированным дискам; ♦ бит 1:1 — присутствует поддержка блокировки и смены носителя; ♦ бит 2: 1 — присутствует поддержка расширенных дисков; ♦ бит 3: 1 — присутствует 64-битное расширение (действительны поля 1 Oh и да- лее в адресном пакете); ♦ биты 4-15 — резерв. Если для заданного устройства расширение не поддерживается, устанавливается CF=1 и в АН — код ошибки (01). Функция 42h — расширенное чтение (extended read), DS:SI — адресный пакет. Функция 43h — расширенная запись (extended write), DS:SI — адресный пакет. При вызове с AL=O или 1 — запись без верификации, AL=2 — с верификацией. Если заказанная верификация не поддерживается устройством, запрос отверга- ется (CF=1, AH=01h). Функция 44h — верификация (verify sectors), DS:SI — адресный пакет. Функция 45h — запирание/отпирание носителя (lock/unlock media). В AL — под- команда: 0 — запереть носитель, 1 — отпереть, 2 — сообщить состояние. При ус- пешном возврате состояние сообщается в AL: 1 — носитель заперт, 0 — нет. Для каждого устройства должен быть счетчик запираний (до 255); носитель открыва- ется, если отперто каждое запирание (счетчик обнулен). Если делается лишнее отпирание, вызов возвращается с CF=1 и AH=B0h. Если число запираний превы- шает допустимое, вызов возвращается с CF=1 и AH=B40h. При включении пита- ния и системном сбросе устройства считаются открытыми. Реализация запира- ния/отпирания зависит от устройства, но ОС и приложения полагают, что смена носителя в запертом устройстве невозможна. Функция 46h — извлечение носителя (eject removable media), при вызове AL=O. Если носитель не сменный, вызов возвращается с CF=1 и AH=B2h. Если носитель заперт, вызов возвращается с CF=1 и AH=Blh. Если носителя нет, вызов возвра-
420 Глава 16. Системная поддержка устройств хранения щается с CF=1 и AH=31h. Если носитель отперт, то возможность извлечения опре- деляется через вызов INT 15h (функция 52h) BIOS и в случае отказа запрос от- вергается. Если извлечение разрешено, но при его выполнении возникает ошибка, вызов возвращается с CF=1 и AH=B5h. Функция 52h INT 15h BIOS определяет возможность извлечения носителя с точ- ки зрения системы кэширования. При ее вызове в AH=52h и в DL задается номер устройства. Возврат с CF=O и АН=О означает возможность изъятия носителя, при CF=1 и AH=Blh или ВЗЬ изъятие не разрешается. Функция 47h — расширенный поиск (extended seek), DS:SI — адресный пакет. Вызов уведомляет устройство о возможном последующем доступе к блокам, ука- занным в пакете. К моменту возврата поиск может и не быть реально завершен. Функция 48h — получение параметров устройства (get device parameters). DS:SI — адрес буфера результата. Длина буфера указывается в первом слове бу- фера (табл. 16.10). Если при вызове указывается длина менее 26, вызов отверга- ется. Если длина указывается менее 30, то указатель на таблицу параметров дис- ка не возвращается. В буфере возвращается геометрия, сообщаемая устройством (физическая); логическую геометрию можно получить по INT 13h(8). Таблица 16.10. Содержимое буфера параметров устройства Смещение Длина Назначение 0 2 Длина буфера 2 2 Флаги свойств: бит 0 — «прозрачная» обработка пересечения границ страниц DMA; бит 1 — геометрия, сообщаемая в словах 4, 8 и 12, действительна; бит 2 — носитель сменяем, биты 4-6 действительны; бит 3 — поддержка записи с верификацией; бит 4 — поддержка уведомления о смене носителя; бит 5 — носитель запираемый; бит 6 — указана максимально возможная геометрия, но носителя в устройстве нет; бит 7 — для доступа к устройству используется функция 50h INT 13h BIOS; биты 8-15 — резерв 4 4 Число физических цилиндров 8 4 Число физических головок 12 4 Число физических секторов на треке 16 8 Число секторов. Если оно больше 15 482 880, в слове 2 бит 1 нулевой 24 2 Число байтов в секторе 26 4 Указатель на расширенную таблицу параметров диска (DPTE, см. далее), в формате Seg:Offset. FFFF:FFFFh означает, что DPTE отсут- ствует
16.4. Расширенный сервис BIOS 421 Смещение Длина Назначение 30 2 BEDDh — ключ присутствия информации о пути к устройству (devicepath information) 32 1 Длина информации о пути к устройству, включая ключ (44) 33 1 Резерв(0) 34 2 Резерв(0) 36 4 Тип шины расширения (символы ASCII, дополненные пробелами): PCI — 50h, 43h, 49h, 20h; ISA — 49h, 53h, 41 h, 20h 40 8 Тип интерфейса устройства (символы ASCII, дополненные пробела- ми): АТА, ATAPI, SCSI, USB, 1394, FIBRE, I2O 48 8 Путь к интерфейсу 56 8 Путь к устройству 64 1 Резерв(0) 65 1 Контрольная сумма информации о пути (сумма байтов 30-73 долж- на быть нулевой) Путь к интерфейсу позволяет адресоваться к микросхемам контроллера интер- фейса устройства памяти. Он зависит от типа шины расширения: ♦ Для шины ISA в слове 48 находится базовый адрес портов ввода-вывода (16 бит), байты 50-55 зарезервированы (нулевые). ♦ Для шины PCI байт 48 содержит номер шины, 49 — номер слота, 50 — функ- ция, 51 — номер канала, байты 52-55 (двойное слово) зарезервированы (ну- левые). Путь к устройству определяется адресацией, характерной для его типа интер- фейса: ♦ АТА — байт 56 определяет номер устройства: 0 — устройство 0 (ведущее), 1 — устройство 1 (ведомое). ♦ ATAPI — байт 56 определяет номер устройства (аналогично АТА), байт 57 — номер логического устройства (LUN). ♦ SCSI — слово 56 определяет адрес устройства (SCSI ID), учетверенное слово 58 (8 байт) — номер логического устройства (LUN). ♦ USB — учетверенное слово 56 (8 байт) задает 64-битный серийный номер устройства, определенный спецификацией USB для устройств памяти. ♦ 1394 — учетверенное слово 56 (8 байт) задает 64-битный расширенный уни- кальный идентификатор EUI-64 (Extended Unique Identifier). ♦ FIBRE — учетверенное слово 56 (8 байт) задает 64-битный всемирный иден- тификатор WWID (Worldwide Identifier), учетверенное слово 64 (8 байт) — номер логического устройства (LUN). ♦ 12О — учетверенное слово 56 (8 байт) задает 64-битный тег идентификации IdentityTag.
422 Глава 16. Системная поддержка устройств хранения Остальные элементы пути к устройству зарезервированы (нулевые). Расширенная таблица параметров диска (Device Parameter Table Extension, DPTE) позволяет обращаться к дискам АТА в обход прерывания INT 13h BIOS. Ее формат приведен в табл. 16.11. Таблица 16.11. Расширенная таблица параметров диска (DPTE) Смещение Длина Назначение 0 2 Базовый адрес блока командных регистров (адрес регистра данных) 2 2 Базовый адрес блока управляющих регистров 4 1 Старшая тетрада для регистра номера устройства и головки: биты 0-3=0; бит 4 — выбор устройства АТА (бит DEV); бит 5=1; бит 6 — режим LBA; бит 7=1 5 1 Резерв для BIOS 6 1 Биты 0-3 — номер IRQ. Биты 4-7=0 7 1 Счетчик блоков для команд множественного чтения 8 1 Биты 0-3 — номер канала DMA. Биты 4-7 — тип DMA (согласно АТА-2) 9 1 Биты 0-3 — режим РЮ. Биты 4-7=0 10 2 Аппаратно-специфические параметры: бит 0 — разрешение скоростных режимов РЮ (действителен байт 9); бит 1 — разрешение использования DMA; бит 2 — разрешение мультисекторных операций; бит 3 — разрешена трансляция CHS (устройство имеет более 1024 цилиндров), тип трансляции в битах 9-10; бит 4 — разрешена трансляция LBA (адрес из пакета расширенного сервиса непосредственно передается в устройство); < бит 5 — сменный носитель; бит 6 — устройство ATAPI; бит 7 — разрешен 32-битный режим обмена; бит 8 — сообщение о готовности принять пакет через запрос пре- рывания (для ATAPI); биты 9-10 — тип трансляции (00 — с помощью сдвигов, 01 — с по- мощью LBA, 10 — резерв, 11 — специфическая схема); бит 11 — использование UltraDMA; биты 12-15=0 12 2 Резерв(0) 14 1 Версия таблицы (11h) 15 1 Контрольная сумма (двоичное дополнение суммы байтов 0-14)
16.5. Загружаемые диски CD-ROM 423 Функция 49h — получение информации о факте смены носителя (get extended media change status). При возврате CF=O и AH=O означает, что носитель не менял- ся; CF=1 и АН=06 означает активность сигнала смены носителя (хотя носитель мог и не меняться, просто открыли и закрыли дверку). Функция 4Eh — установка аппаратной конфигурации (set hardware configu- ration), в AL — подфункция: ♦ О — разрешение предвыборки (поиска); ♦ 1 — запрет предвыборки (поиска); ♦ 2 — установка максимально допустимого режима РЮ; ♦ 3 — установка режима РЮ 0; ♦ 4 — установка режима РЮ, заданного в BIOS Setup; ♦ 5 — разрешение использования максимально возможного режима DMA для INT 13h; ♦ 6 — запрет использования DMA для INT 13h. При нормальном возврате CF=O, АН=О, AL=O, если команда выполнена, не затраги- вая других устройств, AL=1, если команда влияет на другие устройства. Функция 50h — посылка командного пакета (send packet command), AL=D7h, ES:SI указывает на пакет. Пакет начинается со слова, задающего его длину, за которым следует тело пакета, специфичное для данного типа интерфейса. Возможные коды ошибок (при CF=1): ♦ 01 — функция не реализована; ♦ 80h — ошибка выполнения команды; ♦ 97h — подфункция D7h не поддерживается для данного устройства; ♦ C3h — пакет слишком короткий. 16.5. Загружаемые диски CD-ROM Для обеспечения возможности загрузки ОС с CD-ROM фирмы Phoenix и IBM выпустили спецификацию «Е1 Torito Bootable CD-ROM Format Specification», версия 1.0 была опубликована в январе 1995 г. Цель спецификации — обеспе- чить возможность загрузки ОС и приложений с CD-ROM средствами BIOS (на «голой» машине). При этом имеются следующие возможности: ♦ загрузка ОС по выбору из загрузочного каталога (boot catalog), находящегося на CD-ROM; ♦ предоставление возможности выбора варианта конфигурирования CD-ROM (в виде жесткого диска или дискеты); ♦ переименование существующих приводов (если необходимо); ♦ использование существующей технологии BIOS (доступ в режиме LBA) для обращения к кодам и данным; ♦ совместимость с приложениями DOS и Windows, использующими функции INT 13h.
424 Глава 16. Системная поддержка устройств хранения Спецификация расширяет традиционный набор функций BIOS, она ориентиро- вана на приводы с интерфейсом ATAPI и SCSI. В пункт выбора последователь- ности загрузочных устройств утилиты CMOS Setup должно быть введено новое устройство — CD-ROM и предлагаться выбор последовательности опроса уст- ройств, например: ♦ A, CD-ROM, С; ♦ CD-ROM, А, С; ♦ CD-ROM, С, А; ♦ С, A, CD-ROM; ♦ CD-ROM only. В параметрах CMOS Setup всегда должна быть возможность запрета загрузки с CD-ROM, поскольку формат начального сектора CD может быть произволь- ным (в зависимости от назначения диска), а загружаться можно только со спе- циального диска CD-ROM. Загружаемый диск CD-ROM должен иметь загрузоч- ную запись, загрузочный каталог и файл-образ дискеты (1,2, 1,44 или 2,88 Мбайт) или жесткого диска. На одном диске CD-ROM может быть несколько образов, все они должны быть описаны в загрузочном каталоге. При загрузке CD-ROM может стать диском А или С в зависимости от типа об- раза. При загрузке образа дискеты CD-ROM представляется в виде диска А, при этом существующий первый дисковод получает имя В. Если в системе два дисковода, то второй становится недоступным. При загрузке с образа жесткого диска CD- ROM замещает диск С (номер устройства — 80h), номера жестких дисков сдви- гаются, они все остаются доступными. Для доступа приложений и ОС к данным, расположенным в области образа диска, могут использоваться вызовы INT 13h без необходимости загрузки каких-либо драйверов. Образ диска выглядит как обычный диск, но защищенный от записи. Для доступа к остальному содержи- мому CD-ROM должны загружаться драйверы, необходимые операционной сис- теме, — эти драйверы должны быть размещены в образе диска. Функции начального загрузчика (bootstrap loader) INT 19h, выполняемого в конце теста POST, расширяются. Если ему предписана попытка загрузки с CD-ROM, то он читает (табл. 16.12) загрузочную запись тома (boot record volume descrip- tor, сектор 17) и, если она присутствует, берет из нее ссылку на загрузочный ка- талог (booting catalog) CD-ROM, в котором должны быть ссылки на загрузочный образ. Возможны два варианта реализации загрузчика в BIOS: с единственным образом (single-image INT 19h) или со множеством образов (multiple-image INT 19h). «Единообразный» загрузчик обращается к образу, описанному в элементе ката- лога, предназначенном для загрузки по умолчанию (initial/default entry). «Мно- гообразный» загрузчик позволяет выбрать требуемый образ из списка возмож- ных автоматически или запрашивая ответ пользователя. Собственно диск CD-ROM может иметь разные варианты структуры: обычный (незагрузочный), загрузочный с одним образом, загрузочный с множеством об- разов, а также незагрузочный, но с образами, доступными через INT 13h. После загрузки ОС доступ ко всем образам, указанным в загрузочном каталоге, возмо-
16.5. Загружаемые диски CD-ROM 425 жен через INT 13h как к обычным дискам, и если их файловая система поддержи- вается загруженной ОС, доступ к файлам и каталогом тоже будет обычным. Доступ к областям CD-ROM, не входящим в образы, на логическом уровне осуществля- ется через специальный драйвер. Доступ ко всем секторам CD-ROM возможен через функции 41-48h INT 13h в режиме LBA, размер блока — 2048 байт. Таблица 16.12. Формат загрузочной записи тома Смещение Тип Назначение 0 Байт Идентификатор загрузочной записи (00h) 1 Байт Идентификатор платформы (0 — 80x86, 1 — Power PC, 2 — Mac) 1-5 Байты Идентификатор ISO-9660 («CD001») 6 Байт Версия дескриптора (1) 7-26h Байты Идентификатор загрузчика (строка «EL TORITO SPECIFICATION», дополненная справа нулями) 27-46h Байт Не используются (0) 47-4Ah Двойное слово Абсолютный указатель на первый сектор загрузочного каталога 4B-7FFh Байт Не используются (0) Спецификация совместима с дисками 1SO-9660. Согласно спецификации El Torito (см. табл. 16.12), в секторе 17 (1 lh) от начала последней сессии должна нахо- диться загрузочная запись (boot record), содержащая абсолютный указатель на загрузочный каталог (номер логического сектора от начала сессии). Загрузоч- ный каталог (boot catalog) представляет собой набор 32-байтных описателей, упакованных по 64 в сектор CD-ROM. Размер каталога не ограничен, просмот- ром этого каталога при загрузке можно выбрать требуемый образ. Образы вир- туализируются в приводы (диски), доступные по INT 13h с номерами 00 или 80h для эмуляции загрузочных дисков и с номерами, следующими за последним об- наруженным жестким диском, для эмуляции незагрузочных дисков. Образ мо- жет и не эмулировать диск, а просто являться программным кодом, загружае- мым начальным загрузчиком в память (после чего ему передается управление). В загрузочном каталоге определено 5 типов описателей (табл. 16.13): ♦ Validation entry — первый элемент каталога, удостоверяющий его наличие на CD-ROM. Если этот элемент не найден, то остальные и не рассматриваются. ♦ Initial/default entry — ссылка на загрузочный образ, в котором программы и драйверы могут пользоваться только функциями INT 13h (0—19h и, возможно, 40-48h) BIOS. Этот образ используется «однообразным» загрузчиком BIOS. ♦ Section header — заголовок секции, предшествующий группе образов, с кото- рых может быть загружен компьютер. В заголовке имеется идентификатор платформы (х86, Mac, Power PC), и если система BIOS распознает свой иден- тификатор, она предлагает выбор образов из данной секции для загрузки
426 Глава 16. Системная поддержка устройств хранения (вместо образа, предлагаемого по умолчанию). Этот выбор, к примеру, может пригодиться при использовании многоязычных продуктов. ♦ Section entry — элемент секции, который может быть выбран для загрузки. Выбор может выполняться даже автоматически, тип критерия выбора указы- вается в элементе. Критерии могут быть различными (их определяет разра- ботчик BIOS). Для выбора по языку поле критерия должно начинаться с трехбайтного кода языка. Если размер поля критерия недостаточен, допуска- ется расширение элемента секции. ♦ Section entry extension — расширение элемента секции, определяющее допол- нение критерия выбора. Расширение должно следовать непосредственно за расширяемым элементом. Возможна организация цепочки расширений, при- знаком наличия продолжения является единица в бите 5 первого байта, у по- следнего расширения бит 5=0. Таблица 16.13. Структура элементов загрузочного каталога Смещение Тип Назначение Индикатор наличия каталога (validation entry) 0 Байт Идентификатор заголовка, 01 h 1 Байт Идентификатор платформы (0 — 80x86, 1 — Power PC, 2 — Mac) 2-3 Слово Резерв(0) 4-1 Bh Символы Идентификатор производителя CD-ROM (строка) 1C-1Dh Слово Контрольная сумма (сумма всех слов в элементе должна быть нулевой) 1Eh Байт Ключевой байт (55h) 1Fh Байт Ключевой байт (AAh) Описатель образа, предлагаемый по умолчанию (initial/default entry) 0 Байт Индикатор загружаемое™ (88h — загружаемый, 0 — нет) 1 Байт Биты 0-3 — тип загрузочного носителя (0 — без эмуляции; 1 — дискета 1,2 Мбайт; 2 — дискета 1,44 Мбайт; 3 — дискета 2,88 Мбайт; 4 — жесткий диск) 2-3 Слово Сегмент памяти, в который загружается образ. Если 0, то используется стандартный адрес сегмента — 7C0h 4 Байт Код файловой системы образа (копия байта со смещением 4 из элемента таблицы разделов) 5 Байт Не используется (0) 6-7 Слово Число виртуальных секторов (по 512 байт), которые должны быть загружены в указанный сегмент при начальной загрузке 8-OBh Двойное слово Адрес загрузочного блока (Load RBA) — относительный адрес нача- ла образа виртуального диска (номер логического сектора CD-ROM) 0C-1Fh Байт Не используется (0)
16.5. Загружаемые диски CD-ROM 427 Смещение Тип Назначение Заголовок секции (section header) 0 Байт Индикатор заголовка (90h — не последний заголовок секции, 91 h — последний заголовок секции) 1 Байт Идентификатор платформы (0 — 80x86, 1 — Power PC, 2 — Mac) 2-3 Слово Число элементов в секции 4-1Fh Символы Идентификатор секции (строка). Загрузчик (BIOS INT 19h) про- сматривает элементы только знакомых ему секций Элемент секции (section entry) 0 Байт Индикатор загружаемое™ (88h — загружаемый, 0 — нет) 1 Байт Биты 0-3 — тип загрузочного носителя (0 — без эмуляции; 1 — дискета 1,2 Мбайт; 2 — дискета 1,44 Мбайт; 3 —- дискета 2,88 Мбайт; 4 — жесткий диск) 2-3 Слово Сегмент памяти, в который загружается образ. Если 0, то ис- пользуется стандартный адрес сегмента — 7C0h 4 Байт Код файловой системы образа (копия байта со смещением 4 из элемента таблицы разделов) 5 Байт Не используется (0) 6-7 Слово Число виртуальных секторов (по 512 байт), которые должны быть загружены в указанный сегмент при начальной загрузке 8-OBh Двойное слово Адрес загрузочного блока (Load RBA) — относительный адрес начала виртуального диска (номер логического сектора CD-ROM) OC-1Fh Байт Тип критерия выбора (0 — нет критерия; 1 — информация о языке и версии (IBM); 2-FFh — резерв) OD-1Fh Байты Критерий выбора Расширение элемента секции (section entry extension) 0 Байт Индикатор расширения (44h) 1 Байт Биты 0-4 — не используются. Бит 5: 1 — следует продолжение расширения, 0 — расширение последнее. Биты 6-7 — не ис- пользуются 2-1Fh Байты Критерий выбора Загрузочный образ представляет собой посекторную копию эмулируемого дис- ка, секторы копируются друг за другом в естественном порядке (по нарастанию номера LBA от 0 до конца диска). Эмулятор, встроенный в INT 13h BIOS, для традиционных вызовов (функции 0-19h) осуществляет пересчет виртуальных секторов (размером 512 байт, как у всех дисков) в 2048-байтные секторы CD- ROM. Эмулятор INT 13h BIOS отвечает за представление трехмерной (CHS) гео- метрии образа, по которой к нему могут обращаться программы, использующие
428 Глава 16. Системная поддержка устройств хранения этот интерфейс. При эмуляции дискет геометрия определяется типом: 1,2 Мбайт — 80 х 2 х 15, 1,44 Мбайт — 80 х 2 х 18, 2,88 Мбайт — 80 х 2 х 36. При эмуляции же- сткого диска BIOS определяет геометрию из таблицы разделов образа, которая должна содержать корректное трехмерное описание начала и конца раздела. Спе- цификация требует, чтобы образ жесткого диска содержал только один раздел, описанный обязательно в первом элементе таблицы разделов. Когда выполняется эмуляция диска, его геометрию можно узнать по функции INT 13h(8); таблицей параметров для жесткого диска, на которую указывает вектор INT 41h, пользо- ваться нельзя. Функция INT 13h(48h) формирует расширенную таблицу парамет- ров диска, в которой эмулируемый диск описывается как ATAPI (в байте 10 бит 6=1). Это позволяет программам при необходимости распознать факт эмуляции. При обращении к CD-ROM в процессе загрузки проверяется индикатор загру- жаемое™ выбранного образа (в загрузочном каталоге); если он отличен от 88h, то производится обращение к следующему устройству в загрузочной последо- вательности, заданной в CMOS Setup. Однако при этом выполняется эмуляция дисков, и ОС, загруженная с другого устройства, получает доступ к содержимо- му образов через INT 13h без всяких драйверов. К сервисам INT 13h BIOS добавляется несколько новых функций. Функция 4Ah — начать эмуляцию диска (initiate disk emulation) AL=O, DS:SI ука- зывают на пакет спецификации эмулируемого диска (specification packet, табл. 16.14). При возврате значение CF=O означает, что диск с указанным но- мером является эмуляцией указанного образа и номера устройств изменились; CF=1 означает, что эмуляция не начата (код ошибки — в АХ). Функция 4Bh — завершить эмуляцию диска (terminate disk emulation) и сооб- щить информацию о состоянии. Завершение эмуляции приводит к сдвигу номе- ров устройств. При AL=O — сообщить информацию о состоянии и завершить эму- ляцию, AL=1 — только сообщить информацию о состоянии. В DL — номер устройства, для которого завершается эмуляция (DL=7Fh — для всех устройств). Регистры DS:SI указывают на пустой пакет спецификации. При возврате значе- ние CF=O означает завершение эмуляции; значение CF=1 означает, что эмуляции не было. В АХ — код ошибки. Регистры DS:SI указывают на заполненный пакет спецификации. Функция 4Ch — начать эмуляцию диска и выполнить загрузку (initiate disk emulation & boot) AL=0, регистры DS:SI указывают на пакет спецификации (табл. 16.14). При возврате значение CF=1 означает невозможность загрузки (код ошибки в АХ); значение CF=O возвратиться не может, поскольку в случае успеха (перезагрузки) возврат не предусматривается. Функция 4Dh — прочитать секторы загрузочного каталога (return boot catalog): AL=O, DL — номер устройства, DS:SI — указатель на командный пакет (табл. 16.15). При возврате значение CF=O означает нормальное выполнение; CF=1, если уст- ройство не является эмуляцией или командный пакет не вписывается в границы. В АХ — код ошибки. Функции 41-48h позволяют обращаться к любым логическим секторам CD- ROM (в режиме LBA с размером сектора 2048 байт), когда для данного привода включена эмуляция.
16.5. Загружаемые диски CD-ROM 429 Таблица 16.14. Структура пакета спецификации эмулируемого диска Смещение Тип Назначение 0 Байт Размер пакета (13h) 1 Байт Биты 0-3— тип загрузочного носителя (0 — без эмуляции; 1 — дискета 1,2 Мбайт; 2 — дискета 1,44 Мбайт; 3 — дискета 2,88 Мбайт; 4 — жесткий диск). Биты 4-5 — резерв (0). Бит 6 — образ содержит драйвер ATAPI, байты 8 и 9 относятся к IDE. Бит 7 — образ содержит драйвер SCSI, байты 8 и 9 относятся к SCSI 2 Байт Номер устройства (0 — для эмуляции дискеты, 80h — для эму- ляции загрузочного жесткого диска, 81-FFh — для эмуляции незагрузочного жесткого диска) 3 Байт Индекс контроллера, указывает номер контроллера выбранного устройства 4 Двойное слово Логический адрес сектора CD-ROM, с которого начинается об- раз эмулируемого диска 8 Слово Спецификация устройства. Для SCSI байт 8 содержит номер логи- ческого (LUN) и физического (SCSI ID) устройств, байт 9 — номер шины. Для ATAPI бит 0 байта 8 определяет номер устройства: 0 — устройство 0 (ведущее), 1 — устройство 1 (ведомое) А Слово Сегмент буфера пользователя (если не нуль), используемого для кэширования чтения CD. Размер буфера — 3 Кбайт С Слово Сегмент памяти, в который загружается образ. Если 0, то используется стандартный адрес сегмента — 7C0h E-F Слово Число виртуальных секторов (по 512 байт), которые должны быть загружены в указанный сегмент при начальной загрузке 10h Байт Младшие биты числа цилиндров, совпадает со значением СН после возврата функции INT 13h(8) 11h Байт Число секторов и старшие биты числа цилиндров, совпадает со значением CL после возврата функции INT 13h(8) 12h Байт Число головок, совпадает со значением DH после возврата функции INT 13h(8) Таблица 16.15. Структура командного пакета Смещение Тип Назначение 0 Байт Размер пакета (8) 1 Байт Число секторов для чтения из загрузочного каталога 2 Двойное слово Указатель на буфер для чтения 6 Слово Начальный номер сектора (при первом вызове функции 4D дол- жен быть нулевым)
Список литературы 1. Гук М. Аппаратные средства IBM PC: Энциклопедия. 3-е изд. — СПб: Питер, 2006. 2. Гук М. Шины PCI, USB и FireWire: Энциклопедия. — СПб: Питер, 2005. 3. Гук М. Аппаратные интерфейсы ПК: Энциклопедия. — СПб: Питер, 2002. 4. Гук М. Дисковая подсистема ПК. — СПб: Питер, 2001. 5. Кулаков В. Программирование дисковых подсистем. — СПб: Питер, 2002.
Алфавитный указатель ! 80-проводной кабель, 58 А АСА, 188 AHS, 303 АРМ, 166 АТА, 21, 45 Bus-Master, 88 IDE, 49 PIO Mode, 66 UltraDMA, 68 адаптер, 87 адресация CHS, ИЗ блочный режим передачи, 158 внешняя геометрия, ИЗ, 116 геометрия по умолчанию, 116 джамперы, 65 защита, 167 идентификация, 145 инициализация, 145 кабельная выборка, 63 каналы, 88 нестандартные команды, 170 основные команды, 141 потоковое расширение, 169 протокол, 128 регистр устройства, 118 режим передачи, 66 DMA, 67 РЮ, 66 сигналы, 54, 60 система команд, 134 сменные носители, 162 текущая геометрия, 116 управление, 145 установка параметров, 155 устройства Master и Slave, 47 флэш-память, 163 АТА (продолжение) электрический интерфейс, 54 энергопотребление, 165 ATA/ATAPI-4, 51 ATA/ATAPI-5, 51 ATA/ATAPI-6, 51 ATA/ATAPI-7, 52 АТА-2, 51 АТА-3, 51 ATAPI, 46, 142 А-кабель, 234 В BHS, 303 BIOS INT 08h, 36 INT OEh, 34 INT 13h, 399 стандартные драйверы дисков, 402 bit shift translation, 413 Bootable CD-ROM, 400, 423 Bus-Master, 47, 88 В-кабель, 235 c CA, 188 CD-ROM загружаемый, 423 системная поддержка, 400 CFA, 46 CHS, 16, 46, 113 CID, 363 CIS/IDI, 359 Comprehensive SMART error log, 159 CRC, 72 CS, 63 CSD, 363
432 Алфавитный указатель D DB-9, 331 Diff, 206 double speed, 328 DPA, 94 DPT, 407 DPTE, 422 DT, 207, 216 1 IDE, 45 ATA, AT-BUS, 53 Intelligent ATA, 49 Intelligent Zoned Recording, 50 Non-Intelligent, 49 категории устройств, 49 IEEE 1394, 22 E ECHS, 413 ECP, 246 EDD, 417 EHC, 377 E-IDE, 53 eighth speed, 328 El Torito, 400, 423 EP, 373 ESI, 333 Е-экспандер, 259 асинхронная транзакция, 387 базовая скорость, 385 изохронная операция, 387 кабельная шина, 384 сброс на шине, 387 сеть, 386 топология физических соединений, 384 хост, 387 IN, 66 INT 08h, 36 INT OEh, 34, 402 fast ATA-2, 51 FC кадр, 325, 335 канал, 325 компьютерная сеть, 325 концентратор, 340 подача команд, 345 полная скорость, 328 последовательность, 325, 335 слово, 334 специальный набор, 334 FCIP, 343 FCP, 343 FDC, 33 Fibre Channel, 22-23, 324 FIFO, 389 FIS, 72 FP DMA, 52 FS, 371 full speed, 328 F-экспандер, 259 INT 13h, 193, 399 буфер оперативной памяти, 403 количество секторов, 403 номер головки, 403 диска логический, 403 начального сектора, 403 функции, 403 цилиндра, 403 параметры вызова, 403 результат выполнения операции, 403 функции 00-24h, 403 41-49h, 418 4A-4D, 428 INT 19h, 424 INT 40h, 401 INT 76h, 402 Intelligent Zoned Recording IDE, 50 iSCSI, 22 безопасность, 299 главное имя, 301 запрос, 303 H half speed, 328 HBA, 98 HDPT, 408 HS, 371 HSSDC, 331 HSSDC2, 331 HVD, 206 имя, 289, 295 команда, 293 обработка ошибок, 296 ответ, 303 параметры объявление, 321 согласование, 321 портал, 289 портальная группа, 290
Алфавитный указатель 433 iSCSI (продолжение) последовательность, 310 протокольный блок, 290 псевдоним, 289, 295 сеанс, 290 узел, 289 Ш, 217 R RCA, 363 S SAM, 173, 391 SAS, 22 адрес, 257 L, М Large Disk, 413 LBA, 16, 46, ИЗ LEDB, 248 LRU, 273 LS, 371 LUN, 174 LVD, 206 M/S, 46 Mac SCSI, 235 Master, 47 Miniature Card, 367 MMC, 363 MultiMediaCard, 363 виртуальный трансивер, 258 домен, 259 задание SCSI, 258 порт, 257 трансивер, 257 устройство, 256 конечное, 257 экспандер, 258 хост-адаптер, 256 SAS НВА, 256 SATA передача кадра, 286 управление потоком, 286 SBP-2 блок, 392 задание, 391 N, О Narrow SCSI, 207 NCQ, 52, 111, 142 Non-Intelligent IDE, 49 OCR, 363 OHC, 377, 389 ORB, 392, 394 OUT, 66 запрос, 391-392 инициатор, 391 каталог блока, 392 логических устройств, 392 контекст задания, 391 контроллер потока, 391 логическое устройство, 391 набор заданий, 391 p pace, 207, 218 PCI, 88-89 PCI IDE, 89 PCI IDE Bus Master, 48 Phy, 257 PID, 373 PIO, 48, 66 PIO Mode, 66 PPR, 224 PRD, 92 PTP, 331 Р-кабель, 235 очередь, 393 сервер устройства, 391 уникальный идентификатор EUI-64, 392 целевое устройство, 391 SCAM, 208 SCSI, 22, 173 адресация устройств, 210 дифференциальная версия, 205-206 идентификатор порта, 290 устройства, 205 инициатор обмена, 210 кабели, 234 Q QAS, 213 quadruple speed, 328 quarter speed, 328 Q-кабель, 235 конфигурирование, 192, 254 линейная версия, 205-206 подключение устройств, 249 разъем СХ-50, 232 DB-25, 233
434 Алфавитный указатель SCSI (продолжение) USB HD-50, 233 интерфейс, 373 > HD-68, 233 канал, 373 IDC-50, 232 класс, 378 MiniD50, 233 конечная точка, 373 MiniD68, 233 конфигурация, 373 SCA, 234 подкласс, 378 VHDCI-68, 234 протокол, 379 система команд, 197 стадия терминаторы, 240 передачи данных, 375 узкий интерфейс, 205 передачи информации о управление, 221 состоянии, 375 хост-адаптер, 192 установки, 375 целевое устройство, 210 хост-контроллер, 376 шина, 192, 254 SCSI ID, 205, 210 V, W, X SCSI SPI, 208 VC, 337 SCSI-2, 176 VID, 373 SCSI-3, 176, 391 WDTR, 224 SD, 363-365 XFER, 19 SDTR, 224 SE, 206 А SE/LVD, 206 автономный регистр, 390 Secure Digital, 363-364 агент SEDB, 248 выбирающий, 393 SEMB, 82 командных блоков, 393 Serial ATA, 22, 48 управления потоком, 393 SES, 333 управляющий, 393 Singleword DMA, 67 целевого устройства, 393 Slave, 47 агрегирование прерываний, 111 SMART, 160 адаптер SMART self-test log, 159 АТА, 48, 87 SmartMedia Card, 352 IDE, 45 SMC хост-шины, 98 зона, 357 адрес, 210 область данных, 353 SAS, 257 район, 353 базовый, 91 расширенный идентификатор, 353 линейный, 414 система команд, 354 одномерный, 16 служебная секция, 353 адресация страница, 353 LBA-48, 115 уникальный 128-битный LUN, 184 идентификатор, 353 линейная, 15, 46, ИЗ чтение данных, 355 логическая, ИЗ SPI, 176 плоская, 183 SSA, 22 портов мультиплексора, 72 SSP, 258 ПУ, 183 ST, 207 расширенная, 184 трехмерная, 16, 46, ИЗ и адресный кадр, 271 UHC, 376 адресный пакет, 418 UltraDMA, 51-52, 68 активный набор указателей, 227
Алфавитный указатель 435 активный порт, 85 активный режим, 165 активный терминатор, 241 алгоритм LRU, 273 справедливого доступа, 341 альтернативный механизм смены носителя, 163 альтернативный регистр состояния, 120 аппаратное прерывание, 34 аппаратный сброс, 145, 269 арбитраж нормальный, 213 справедливый, 213, 273 ускоренный, 213 архитектурная модель SCSI-3, 391 асинхронная передача, 378 асинхронная транзакция, 387 асинхронное сообщение, 312 асинхронное уведомление, 188 асинхронный режим, 215 асинхронный список, 378 атрибут, 190 блока, 358 задания, 229 страницы, 358 Б базовая скорость, 385 базовый адрес, 91 байт состояния, 175, 227, 354 барьер 528 Мбайт, 412 безопасность открытого волокна, 329 безучастный режим, 340 блок, 46, 392 атрибуты, 358 готовности к передаче, 310 данных, 220, 294 действительный, 362 дескриптора команды, 178 запроса входа, 313 выхода, 315 команды, 305 операции, 392, 394 повтора, 317 управления заданиями, 307 информационный, 14-15, 216-217, 219, 343 командный, 46, 108, 124, 220, 381 логический, ИЗ, 357 назначенный, 362 блок (продолжение) негодный, 362 ответа входа, 314 команды, 306 на запрос выхода, 316 управления заданиями, 309 отказа запроса, 318 передаваемых данных, 309 принимаемых данных, 310 пробного запроса, 319 пробного ответа, 319 регистров SCR, 124 свободный, 361 состояния, 220, 380, 392, 396 стирание, 356 текстового запроса, 316 текстового ответа, 317 управления потоком, 394 управляющий, 124 физический, 357-358 хранения, 82 блокированная передача, 275 блокнотный ПК, 63 буфер FIFO, 389 принимаемых структур FIS, 103 в ведомое устройство, 46-47 ведомый режим, 388 ведущее устройство, 46-47 ведущий режим, 388 вилка, 232 виртуальный трансивер, 258 висящий сектор, 116 внешнее устройство, 16 внешний терминатор, 242, 252 внешняя геометрия, ИЗ, 116 внешняя память, 14 внутреннее устройство, 16 внутренний протокол, 338 внутренний терминатор, 242 внутренняя память, 14 внутренняя скорость, 19 возникновение ошибки, 398 восходящий трансивер, 261 время доступа, 18 ожидания, 18 поиска, 18 успокоения, 38
436 Алфавитный указатель входной сигнал, 54 входящий дескриптор, 248 выбирающий агент, 393 выборка кабельная, 63 выгруженная головка, 38 высокий уровень защиты, 167 высоковольтный дифференциальный интерфейс, 206 выходной сигнал, 54 г гарантированная доставка, 275 геометрия внешняя, 116 логическая, 116 по умолчанию, 116 текущая, 116 физическая, 116 гетерогенный домен, 245 главное имя, 301 главный пароль, 167 глобально уникальный идентификатор, 389 головка, 46 выгруженная, 38 загруженная, 38 гомогенный домен, 245 горячее подключение, 105 группа данных, 216-217 команд защиты, 167 портальная, 290 д дайджест, 297 данные, 382 неожидаемые, 294 ожидаемые, 294 двойное слово, 265 данные, 265 недействительное, 265 примитив, 265 двойной регистр, 115 двунаправленная команда, 184 двунаправленный канал, 272 двунаправленный обмен, 335 двухканальный контроллер DMA, 91 двухролевое устройство, 180 дежурный режим, 165 действительный блок, 362 дескриптор, 92 входящий, 248 исходящий, 248 дескриптор (продолжение) команды, 229 конечной точки, 377 передач, 376-377 диагностический код, 121, 158 диск логический, 399 физический, 399 фиксированный, 401 дискета, 401, 406 дисковый накопитель SMART, 160 предсказуемый отказ, 160 форматирование трека, 406 дисковый сервис BIOS, 401 расширенный, 417 традиционный, 403, 412 диспетчер заданий, 180 дифференциальный интерфейс SCSI, 205-206 домен SAS, 259 SCSI, 179 гетерогенный, 245 гомогенный, 245 дополнение IEEE 1394а, 384 IEEE 1394b, 384 дополнительный заголовок, 303 доставка немедленная, 293 упорядоченная, 293 доступ к файлам данных, 362 последовательный, 16 прямой, 16 драйвер, 20 дремлющее задание, 190 дуплексный кабель, 330 Е емкость памяти, 18 естественный режим PCI, 90 ж жесткий диск, 406 3 заблокированное задание, 190 завершение отработки команды, 133 завершенное задание, 190
Алфавитный указатель 437 зависимое логическое устройство, 182 заголовок дополнительный, 303 кадра, 335 основной, 303 загруженная головка, 38 загрузочная запись, 424 загрузочный каталог, 424 загрузочный образ диска, 427 задание, 175, 179, 189, 226, 343, 391 дремлющее, 190 заблокированное, 190 завершенное, 190 разрешенное, 190 задержанный старт, 255 закрытие соединения, 275 закрытое устройство, 167 замороженное устройство, 167 запись в регистр, 118 однонаправленная команда, 184 запрет 16-разрядного режима, 255 автоматического запуска шпиндельного двигателя, 255 двойной синхронизации, 255 запрос, 178, 303, 391-392 Bulk-Only_Mass_Storage_Reset, 379 Get Max LUN, 379 ввода-вывода, 376 входа, 397 из очереди, 393 одиночный, 393 прерывания, 128 сервиса, 343 запуск команды, 133 заснувшее устройство, 165 затребование разрывы соединения, 175 защита, 167 снятие, 168 установка, 167 защитное стирание обычное, 168 расширенное, 168 зона хранения, 357 и идентификатор, 210 глобально уникальный, 389 имени, 339 относительный, 180 порта, 180, 290, 339 идентификатор (продолжение) продукта, 373 производителя, 373 расширенный, 353 сеанса, 291 соединения, 291 узла, 339 устройства, 205, 254 фабрики, 339 идентификация АТА, 145 логического устройства, 229 питания, 368 тега, 229 известное логическое устройство, 174, 182 изохронная операция, 387 изохронная передача, 378 имя iSCSI, 289, 295 главное, 301 порта, 180 устройства, 180 инициализация агента, 397 интерфейса, 78, 335 по инициативе устройства, 78 по инициативе хоста, 78 инициатор, 180, 391 интерфейс АТА, 45 Fibre Channel, 23 SCSI, 22 USB, 373 дифференциальный, 205-206 высоковольтный, 206. низковольтный, 206 инициализация, 78 линейный, 205-206 НГМД, 30-31 оптический, 329 параллельный, 45 последовательный, 22, 48 программный, 90 системной шины, 388 устройства хранения, 348 шинный, 45 электрический, 329 информационная структура, 71-72 BIST Activate, 75 DMA Activate, 73 Setup, 74
438 Алфавитный указатель информационная структура (продолжение) PIO Setup, 74 данных, 75 передачи регистров, 72 установки битов, 73 информационный блок, 216-217, 219, 343 информация о состоянии, 294 исключение, 188 источник, 335 исходящий дескриптор, 248 к кабель 80-проводной, 58 IDE АТА, 54 SCSI, 234 дуплексный, 330 интерфейса НГМД, 32 перекрестный, 330 кабельная выборка, 63 кабельная шина, 384 кадр, 75, 325, 335 адресный, 271 канальный, 336 управляющий, 336 канал, 325, 373 АТА, 88 IDE, 47 двунаправленный, 272 канальный кадр, 336 канальный уровень, 389 карта CompactFlash, 349 ММС, 363 PCMCIA, 352 SD, 363-365 SmartMedia Card, 352 ввода-вывода, 367 каталог блока, 392 журналов, 159 логических устройств, 392 категории устройств IDE, 49 класс сервиса, 337 устройства, 373 клиент, 173 клиентское приложение, 178, 180 код CRC, 72 диагностический, 158 ошибки, 423 код (продолжение) сообщения, 222 состояния, 403 коллизия, 76, 84 кольцо публичное, 327 частное, 327 команда, 190, 354 без очередей, 104 блокировки, 44 блочного обмена, 141 верификации, 41, 141 выполняемая с постановкой в очередь, 142 двунаправленная, 184 диагностики, 158 длинного чтения, 170 завершение, 133 загрузки микрокода, 158 задания параметров блочного режима передачи, 158 записи, 344 буфера, 170 в режиме РЮ, 129 данных, 39 сектора, 141 удаленных данных, 40 запуск, 133 защитного стирания, 168 защиты, 167 идентификации, 145 конфигурирования, 44 не требующая передачи данных, 128 нестандартная, 170 одиночная, 175 однонаправленная, 184 определения версии контроллера, 44 относительного поиска, 42 передачи данных в режиме DMA, 129 в режиме UltraDMA, 129 поиска, 42, 142 расширенная, 170 рекалибровки, 42, 170 с обменом РЮ, 105 с очередями, 105 с расширенной адресацией, 142 сброса, 105 связанная, 175 спецификации, 43 успешное завершение, 111
Алфавитный указатель 439 команда (продолжение) установки параметров, 155 свойств, 155 фиктивная, 158 форматирования трека, 41, 170 чтения, 344 буфера, 170 в режиме РЮ, 128 данных, 39 журналов, 159 идентификатора, 43, 356 прерывания, 42 расширенного идентификатора, 357 регистров, 44 секторов, 141 состояния привода, 43 трека, 39 удаленных данных, 39 командная таблица, 99, 102 командный блок, 46, 108, 124, 220, 381 командный пакет, 142 командный слот, 102, ИЗ коммуникативный экспандер, 246 коммуникационное устройство, 197 коммуникационный протокол экспандеров, 247 компьютерная сеть, 325 конечная точка, 373 конечное устройство, 257 коннектор устройства 0, 65 устройства 1, 65 хост-контроллера, 64 контейнер, 336 контекст DMA, 387 задания, 391 контроллера, 389 очереди, 393 контроллер, 47 АТА, 48 DMA, 388 FDC АТ, 34 PCI IDE, 89 SATA, 72 асинхронного приема, 388 асинхронной передачи, 388 двухканальный, 91 изохронного приема, 389 изохронной передачи, 389 контроллер (продолжение) НГМД, 33 команды, 38 программирование, 34 регистры, 34 потока, 391 приема пакетов самоидентификации, 389 устройства хранения, 19 целевого устройства, 173 контроль четности, 254 концентратор, 82, 340 кредит, 275 л линейная адресация логических блоков, 15, 46, ИЗ линейный адрес, 414 линейный интерфейс SCSI, 205-206 логическая адресация, ИЗ логическая геометрия, 116 логические параметры, 413 логический блок, ИЗ, 357 логический диск, 399 логический номер, 357 логический привод, 399 логическое устройство, 174, 178, 391 зависимое, 182 известное, 182 м максимальный уровень защиты, 167 маркер ошибки, 301 постоянных интервалов, 302 маркированная очередь, 227 маршрутизация, 260 мастер инициализации, 341 межбуферное управление потоком, 337 метод доступа к информации, 16 механизм уведомления, 162 управления потоком, 336 многопортовое целевое устройство, 180 многопортовый инициатор, 180 множественный режим DMA, 67 модель SAM, 173 мост STP/SATA, 258 мультиблочное программирование, 356 мультиблочное стирание, 356 мультиплексор портов, 49, 82-83, 106
440 Алфавитный указатель набор Е-экспандеров, 259 заданий, 175, 182, 391 источников, 198 получателей, 198 назначение адресов, 248 назначенный блок, 362 накопитель CD-ROM, 196 на магнитной ленте, 16 НГМД интерфейс, 30-31 контроллер, 33 команды,-38 регистры, 34 программирование, 34 режим, 34 скорость передачи данных, 34 смена носителя, 31 неблокированная передача, 276 негодный блок, 362 немаркированная очередь, 227 немедленная доставка, 293 не ожидаемые данные, 294 неявный вход, 344 низковольтный дифференциальный интерфейс, 206 нисходящий трансивер, 261 номер байта, 355 блока, 355 логический, 357 страницы, 355 физического блока, 358 физической страницы в блоке, 358 нормальный арбитраж, 213 нормальный командный блок, 394 нормальный сеанс, 291 носитель сменяемый, 194 фиксированный, 194 нулевое слово, 167 О область данных, 353 хранения, 357 обмен, 335 в режиме DMA, 67 РЮ, 66 обмен (продолжение) двунаправленный, 335 однонаправленный, 335 режим, 158 сообщениями, 222 обнаружение факта подключения, 266 обновление логического блока, 196 обработка ошибок, 296 обслуживающий процессор, 82 объявление параметров протокола, 321 оверлей конфигурации устройства, 157 одиночная команда, 175 одиночная синхронизация, 216 одиночный запрос, 393 одиночный режим DMA, 67 одномерный адрес, 16 однонаправленная команда, 184 однонаправленная конечная точка, 374 однонаправленный обмен, 335 ожидаемые данные, 294 операция ввода-вывода, 343 изохронная, 387 определение типа кабеля комбинированный метод, 59 через устройство, 59 через хост-контроллер, 59 опрос возможностей экспандера, 249 параметров портов, 248 сохраненных параметров тренировки, 249 текущего состояния, 249 экспандера, 249 оптический интерфейс, 329 основной заголовок, 303 особые условия, 188 ответ, 178, 298, 303 ответчик, 335 отказ, 160 открытое устройство, 167 открытый хост-контроллер, 377 относительный идентификатор, 180 очередь, 142, 175 буферов, 378 дескрипторов передач, 377 запросов, 393 команд, 108, 130 маркированная, 227 немаркированная, 227 очистка соединения, 293 ошибка, 111
Алфавитный указатель 441 п пакет, 46, 142 память внешняя, 14 время доступа, 18 емкость, 18 питание, 17 внутренняя, 14 скорость записи, 19 передачи данных, 19 считывания, 19 твердотельная, 15 параллельная шина, 21, 173 параллельный шинный интерфейс, 45, 205 пароль главный, 167 пользовательский, 167 установка, 167 паспорт диска, 145 пассивный терминатор, 241 передача асинхронная, 378 блокированная, 275 данных, 229, 397 изохронная, 378 информации о завершении, 346 неблокированная, 276 периодическая, 378 с гарантированной доставкой, 378 с расширением спектра сигнала, 77 состояния, 230 перекрестный кабель, 330 перекрытие команд, 38, 108 периодическая передача, 378 периодическая транзакция, 376 питание терминаторов, 254 устройств, 17 планирование непериодических транзакций, 378 периодических транзакций, 378 плоская адресация, 183 подкласс устройства, 373 подключение узкого устройства к узкой шине, 250 к широкой шине, 250 широкого устройства к узкой шине, 250 к широкой шине, 250 подсистема доставки сервисов, 179 хранения, 82 подстраница свойств, 230 позиционирование головок, 18 поле CIS, 358 CIS/IDI, 359 IDI, 358 данных, 335-336 полинг, 108 полнофункциональная фаза, 292 полноценное устройство хранения, 348 полный квалификатор, 344 получение ответов, 248 пользовательский пароль, 167 порт, 70, 257 FCP, 343 SATA, 82 активный, 85 данных, 118 инициатора, 179-180 источник, 335 ответчик, 335 публичный, 327 управляющий, 83 устройств, 83, 85 целевого устройства, 179 целевой, 180 частный, 327 портал, 289 портальная группа, 290 последовательность, 310, 325, 335 идентификации, 269 примитивов, 334 сброса, 266 последовательный доступ, 16 последовательный интерфейс, 22, 48 постановка в очередь задания, 397 запроса, 111 поток, 169 потоковый командный блок, 394 право на разрыв соединения, 175 предвыборка, 105 предкомпенсация, 244 предсказуемый отказ, 160 прерывание, 382 аппаратное, 34 от таймера, 108 от устройства, 108 программное, 403, 418
442 Алфавитный указатель привод логический, 399 физический, 399 привязка, 286 признак автоактивации DMA, 74 приложение, 178 примитив, 72, 75, 265, 267 примитивный сигнал, 334 принтер, 196 принудительное переключение в линейный режим, 255 приоритет устройства, 210 программирование, 15 мультиблочное, 356 страницы, 356 программное прерывание, 403, 418 программный интерфейс, 90 программный сброс, 145 просмотровая таблица, 358 простой экспандер, 245 протокол ЕСР, 246 FCIP, 343 внутренний, 338 транспортный, 177 устройства, 373 протокольный блок iSCSI, 290 протокольный выбор порта, 85 процедура входа, 344 выхода, 345 подключения, 339 процесс ввода-вывода, 175, 226 процессорное устройство, 196 прямое управление шиной, 88 прямой доступ, 16 по контекстным программам, 390 физических обращений к памяти, 390 псевдоним, 289, 295 публичное кольцо, 327 публичный порт, 327 пустой блок, 394 путь, 258 к интерфейсу, 421 к устройству, 421 р рабочий сеанс, 292 равноранговые устройства, 173 разведчик, 287 разведывательный сеанс, 291-292 разветвитель портов, 83 раздел, 195 разделитель кадров, 334 разнесенный запуск, 105 разрешение отключения, 255 разрешенное задание, 190 разрядность шины, 207 разъем АТА, 54 DB-9, 331 РТР, 331 НГМД, 31 питания, 17 унифицированный 34-контактный, 31 район, 353 расширенная адресация, 184 расширенная команда, 170 расширенная таблица параметров диска, 422 расширенное управление энергопотреблением, 166 расширенный дисковый сервис, 417 расширенный идентификатор, 353 расширенный хост-контроллер, 377 регистр, 99 АТА, 97 PCI IDE, 97 SATA, 97 автономный, 390 адреса текушего блока ORB, 397 устройства, 120 глобально уникального идентификатора, 389 данных, 121 двойной, 115 запись, 118 запросов, 97 команд, 91, 123 командного блока, 118, 124 масок прерываний, 97 номера головки, 122 сектора, 122 устройства, 122 цилиндра, 122 ошибок, 121 подтверждения состояния, 397 сброса, 397 свойств, 121 сигнализации, 397 состояния, 92, 397 альтернативный, 120 основной, 122
Алфавитный указатель 443 регистр (продолжение) специальный, 97 справедливости, 213 стандартный, 97 счетчика секторов, 121 таблицы дескрипторов, 92 управления устройством, 120 управляющего агента, 396 управляющего блока, 118, 124 чтение, 118 режим АСА, 187 СА, 187 DMA множественный, 67 одиночный, 67 DMA АТА, 67 DPA, 94 HVD, 244 LVD, 243 расе, 207, 218 PCI естественный, 90 SE, 243 SPI, 364 UltraDMA, 68 асинхронный, 215 безучастный, 340 ведомый, 388 ведущий, 388У двойной синхронизации, 216 обмена, 158 парковки, 378 передачи АТА, 66 РЮ, 66 прямого подключения, 48 синхронный, 216 совместимости, 89 шины ММС, 364 эмуляции пар «ведущий—ведомый», 48 розетка, 232 С самоконфигурируемый экспандер, 280 сброс аппаратный, 145, 269 на шине, 387 по включению питания, 145 программный, 145 устройства, 382 свертка, 297 свободный блок, 361 связанная команда, 175 связь пар образов процессов, 344 сеанс, 290 нормальный, 291 рабочий, 292 разведывательный, 291-292 сегмент, 396 данных, 303 шины, 245 сегментация, 187 сектор, 46, ИЗ, 116, 358 селектор порта, 49, 82, 85 сервер, 173 группового вещания, 338 псевдонимов, 338 устройства, 180, 370, 391 сервис, 178 сетевой портал, 289 сеть, 325 сигнал входной, 54 выходной, 54 примитивный, 334 сигнатура, 145 синхронизация, 216 синхронный обмен, 254 синхронный режим, 216 система SCSI-команд, 174 сообщений, 221 сканер, 197 сквозное управление потоком, 336 скорость базовая, 385 внутренняя, 19 выполнения линейных запросов, 19 случайных запросов, 19 записи, 19 передачи данных, 19 работы внешнего интерфейса, 19 считывания, 19 скремблирование, 268 слово, 265, 334 слот ISA, 251 PCI, 251 служебная секция, 353 служебный символ, 334 сменяемый носитель, 194 смещение, ПО, 396
444 Алфавитный указатель согласование параметров протокола, 225, 321 разрядности передач, 225 синхронной передачи, 224 скорости обмена, 254, 267 ширины шины данных, 255 соединение, 290 SSP, 258 закрытие, 275 физическое, 177 сообщение, 312 состояние выполнения команды, 344, 382 процедуры, 179 завершения, 398 ожидания, 165 энергопотребления Partial, 78 PHY Ready, 78 Slumber, 78 спад, 209 специальный регистр интерфейса, 97 список асинхронный, 378 кадров, 378 команд, 102, ИЗ справедливый арбитраж, 213, 273 средства обслуживания, 82 стадия передачи данных, 375 информации о состоянии, 375 установки, 375 стандарт IEEE 1394-1995, 383 SPI/SIP, 208 SPI-2, 208 SPI-3, 208 SPI-4, 208 SPI-5, 208 стандартный регистр ATA, 97 PCI IDE, 97 SATA, 97 старт по команде, 255 стирание блока, 356 мультиблочное, 356 страница, 353 атрибуты, 358 свойств, 230 страница (продолжение) управления логическим устройством, 231 отключением-подключением, 230 режимом порта в короткой форме, 231 физическая, 358 стример, 16 структура данных, 99 информационная, 71-72 субтрактивная маршрутизация, 260 счетчик байтов, 110 событий физического интерфейса, 160 таблица дескрипторов, 92 командная, 99 маршрутизации, 260 параметров дискет, 407 дисков, 403 жестких дисков, 408 просмотровая, 358 страниц, 393, 395 твердотельная память, 15 тег задания, 109 очереди, 227 портальной группы, 291 текущая геометрия, 116 тело кадра, 335 терминатор, 209 FPT SE, 242 LVD, 242 LVD/SE, 242 SCSI, 240 SE активный, 241 пассивный, 241 включение, 254 внешний, 242, 252 внутренний, 242 питание, 254 технология NCQ, 111 тип FIS, 72 том, 194 топология двухточечная, 327 домена, 259
Алфавитный указатель 445 топология (продолжение) интерфейсов, 82 кольцевая, 324 с коммутационной фабрикой, 324 смешанная, 327 физических соединений, 384 шинная, 245 транзакция асинхронная, 387 периодическая, 376 шинная, 376 трансивер, 257 восходящий, 261 нисходящий, 261 трансляция в режиме LBA, 414 двойных слов, 272 параметров вызова, 413 сдвигами, 413 транспортный протокол, 177 тренировка приемопередатчиков, 244 трехмерная адресация, 16, 46, ИЗ У узел iSCSI, 289 указатель данных, 226 команды, 226 на буфер, 110 состояния, 226 универсальное устройство LVD, 206 универсальный терминатор, 242 универсальный хост-контроллер, 376 уникальный 128-битный идентификатор, 353 унифицированный 34-контактный разъем, 31 упорядоченная доставка, 293 управление АТА, 145 SCSI, 221 заданиями, 190, 229-230, 295, 398 потоком, 62, 275, 286, 336, 346 межбуферное, 337 сквозное, 336 приемопередатчиками, 248 уровнем акустического шума, 166 экспандерами, 248 энергопотреблением, 165 управляющий блок, 124 управляющий кадр, 336 управляющий порт, 83 упреждающее чтение, 393 уровень защиты высокий, 167 максимальный, 167 канальный, 389 ускоренный арбитраж, 213 успешное завершение команды, 111 установление соединения, 175, 228 устройство, 70, 119 АТА, 145 ATAPI, 105, 145 SAS, 256 SATA, 145 SCSI, 173, 210 аппаратный сброс, 269 ведомое, 46-47 ведущее, 46-47 внешнее, 16 внутреннее, 16 двухролевое, 180 закрытое, 167 замороженное, 167 известное, 174 инициатор, 180 коммуникационное, 197 конечное, 257 логическое, 174, 178, 391 однократной записи, 196 оптической памяти, 196 открытое, 167 полноценное, 348 последовательного доступа, 16, 195 процессорное, 196 прямого доступа, 16, 193 с зонным форматом, 50 с подвижным носителем, 14 смены носителей, 197 со встроенным контроллером, 45 универсальное, 206 физическое, 399 хранения, 19, 82, 348 целевое, 178 экспандер, 245, 258 ф фаза Arbitration, 210 Bus Free, 210 Command, 212 Data, *212 Message, 212
446 Алфавитный указатель фаза (продолжение) Reselection, 211 Selection, 211 Status, 212 входа, 292 исполнения, 37, 42 команды, 36 полнофункциональная, 292 результата, 37, 42 сообщений, 230 файл-образ, 424 физическая геометрия, 116 физическая страница, 358 физические параметры, 413 физический блок, 357-358 физический диск, 399 физический привод, 399 физическое соединение, 177 физическое устройство, 399 фиксированный диск, 401 фиксированный носитель, 194 фиктивная команда, 158 форма построения имен, 295 фронт, 209 функция PCI, 89, 99 верификации, 418 записи, 418 извлечения носителя, 418 отпирания/запирания, 418 поиска, 418 получения параметров устройства, 418 проверки наличия расширения BIOS, 418 факта смены носителя, 418 расширенного чтения, 418 X хост, 15, 82, 119 хост-адаптер, 47, 173, 192, 256 хост-интерфейс, 82 хост-контроллер, 64, 376 открытый, 377 хост-контроллер (продолжение) расширенный, 377 универсальный, 376 хост-порт, 83, 85 ц целевая программа, 174 целевое устройство, 178, 180, 391 двухролевое, 180 многопортовое, 180 целевой порт, 180 цепочка команд, 174 цилиндр, 46 ч частное кольцо, 327 частный порт, 327 частота переключений шины данных, 207 черты интерфейсов канальные, 324 сетевых технологий, 324 чтение, 184 регистров, 118 упреждающее, 393 ш шасси, 82 шина, 182 IEEE 1394, 386 SCSI, 192, 254 параллельная, 21, 173 шинная транзакция, 376 э экономия энергопотребления, 106 экспандер, 245, 258 коммуникативный, 246 простой, 245 самоконфигурируемый, 280 экстент, 194 электрический интерфейс, 329 элемент данных, 75 энергопотребление, 165
Михаил Гук Интерфейсы устройств хранения: АТА, SCSI и другие Энциклопедия Заведующий редакцией Ведущий редактор Литературный редактор Художник Корректоры Верстка А. Кривцов Ю. Суркис А. Жданов К Радзевич В. Листова, Н. Рощина Ю. Сергиенко Подписано в печать 28.07.06. Формат 70x100/16. Усл. п. л. 36,12. Тираж 3000. Заказ 2059. ООО «Питер Пресс», 198206, Санкт-Петербург, Петергофское шоссе, д. 73, лит. А29. Налоговая льгота — общероссийский классификатор продукции ОК 005-93, том 2; 95 3005 — литература учебная. Отпечатано по технологии CtP в ОАО «Печатный двор» им. А. М. Горького. 197110, Санкт-Петербург, Чкаловский пр., д. 15.
издательский дом СПЕЦИАЛИСТАМ КНИЖНОГО БИЗНЕСА! ПРЕДСТАВИТЕЛЬСТВА ИЗДАТЕЛЬСКОГО ДОМА «ПИТЕР» предлагают эксклюзивный ассортимент компьютерной, медицинской, психологической, экономической и популярной литературы РОССИЯ Москва м. «Павелецкая», 1-й Кожевнический переулок, д. 10; тел./факс (495) 234-38-15, 255-70-67, 255-70-68; e-mail: sales@piter.msk.ru Санкт-Петербург м. «Выборгская», Б. Сампсониевский пр., д. 29а; тел./факс (812) 703-73-73, 703-73-72; e-mail: sales@piter.com Воронеж Ленинский пр., д. 169; тел./факс (4732) 39-43-62, 39-61-70; e-mail: pitejyrn@comch.ru Екатеринбург ул. 8 Марта, д. 2676, офис 202; тел./факс (343) 256-34-37, 256-34-28; e-mail: piter-ural@isnet.ru Нижний Новгород ул. Совхозная, д. 13; тел. (8312) 41-27-31; e-mail: office@nnov.piter.com Новосибирск ул. Немировича-Данченко, д. 104, офис 502; тел./факс (383) 211-93-18, 211-27-18, 314-23-89; e-mail: office@nsk.piter.com Ростов-на-Дону ул. Ульяновская, д. 26; тел. (8632) 69-91-22, 69-91-30; e-mail: piter-ug@rostov.piter.com Самара ул. Молодогвардейская, д. 33, литер А2, офис 225; тел. (846) 277-89-79; e-mail: pitvolga@samtel.ru УКРАИНА Харьков ул. Суздальские ряды, д. 12, офис 10-11; тел./факс (1038057) 712-27-05, 751-10-02; e-mail: piter@kharkov.piter.com Киев пр. Московский, д. 6, кор. 1, офис 33; тел./факс (1038044) 490-35-68, 490-35-69; e-mail: office@kiev.piter.com БЕЛАРУСЬ Минск ул. Притыцкого, д. 34, офис 2; тел./факс (1037517) 201-48-79, 201-48-81; e-mail: office@minsk.piter.com Ищем зарубежных партнеров или посредников, имеющих выход на зарубежный рынок. Телефон для связи: (812) 703-73-73. E-mail: grigorjan@piter.com Издательский дом «Питер» приглашает к сотрудничеству авторов. Обращайтесь по телефонам: Санкт-Петербург — (812) 703-73-72, Москва - (495) 974-34-50. Заказ книг для вузов и библиотек: (812) 703-73-73. Специальное предложение - e-mail: kozin@piter.com