Аппаратные интерфейсы ПК

         

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


Для управления интерфейсом служит система сообщений — Message System, кото­рыми обмениваются ИУ и ЦУ. Обмен происходит в фазах Message IN/OUT (см. вы­ше), в одной фазе может передаваться несколько сообщений.

С помощью сообщений согласуются параметры синхронного режима и разряд­ность данных. Процесс согласования синхронного обмена называется Synchronous Negotiation. Устройство, запрашивающее синхронный обмен, посылает сообщение Synchronous Data Transfer Request с указанием допустимого периода цикла и отста­вания REQ/ACK. Если другой участник обмена поддерживает синхронный режим, он предложит свои параметры. Согласованными параметрами будут максималь­ный период и минимальное отставание (нулевое отставание эквивалентно асин-

5.4. Управление интерфейсом и выполнение команд

143

кронному режиму). Выбранный режим будет относиться только к фазам переда­чи между данной парой устройств. Отвергнутое сообщение является требовани­ем асинхронного режима. Поскольку старые хост-адаптеры не поддерживали со­гласование синхронного режима, на ЦУ запрос синхронного режима может быть заблокирован. О возможности работы в синхронном режиме хост может узнать, послав команды Request Sense и Inquiry.

Разрядность передач согласуется аналогично посредством сообщений Wide Data Transfer Request. Согласованные режимы будут действовать до сброса устройств по сообщению Bus Device Reset или «жесткого» сброса, что приведет к установке предопределенных режимов по включению. Согласование режимов не должно инициироваться в каждом процессе, поскольку затраты времени на эту процедуру сводят на нет выигрыш в производительности.

Система команд SCSI включает общие команды, применимые для устройств всех классов, и специфические для каждого класса. Любое SCSI-устройство должно поддерживать обязательные команды общего набора и своего класса, чем обеспе­чивается высокий уровень совместимости. Команда передается ИУ в ЦУ через блок дескриптора команды (command descriptor block), посылаемый в фазе Command. Некоторые команды сопровождаются блоком параметров, следующим за блоком дескриптора в фазе Data. Форматы блоков стандартизованы; длина блока, определя­емая кодом операции (первым байтом блока), может составлять б, 10 или 12 байт.


Рассмотрим процесс на шине SCSI на примере одиночной команды чтения Read. ИУ имеет активный набор указателей и несколько сохраненных наборов, по одно­му на каждый из допустимого числа одновременных конкурирующих процессов. ИУ восстанавливает указатели процесса в активный набор и, выиграв арбитраж, выбирает ЦУ. Как только ЦУ выбрано, оно берет на себя управление процессом. В фазе Selection ИУ вводит сигнал ATN#, сообщая о намерении послать сообщение Identify с указанием адресуемого ЛУ. ЦУ переходит в фазу Command и принимает блок дескриптора команды Read. ИнтеPnPетировав команду, ЦУ переходит в фазу Data IN, передает запрошенные данные, затем переводится в фазу Status и посылает состояние Good, Затем в фазе Message IN устройство посылает сообщение Command Complete, после чего освобождает шину (фаза Bus Free). Процесс завершен.

Рассмотрим тот же пример, но при условии отключения от шины (Disconnect) в процессе выполнения команды. Если устройство, получив команду Read, опре­делит, что для получения затребованных данных необходимо много времени, оно освободит шину, послав сообщение Disconnect. Как только требуемые данные го­товы в ЦУ, оно, выиграв арбитраж, выберет ИУ (в фазе Reselect) и в фазе Message IN пошлет ему сообщение Identify. ИУ вернет соответствующий набор указателей в активное состояние и продолжит выполнение процесса, как описано выше. Если ЦУ хочет отсоединиться, когда часть данных уже передана (например, головка диска дошла до конца цилиндра и требуется время на позиционирование), оно посылает сообщение Save Data Pointer, а затем — Disconnect. После повторного соединения передача данных возобновится с точки, определенной последним со­храненным значением указателя. Если произошла ошибка или исключение, ЦУ может повторить обмен данными, послав сообщение Restore Pointers или отсоеди­нившись без сообщения Save Data Pointers.

144                                                                                                          Глава 5.


Шина
SCSI

Теперь рассмотрим процесс с цепочкой связанных команд. По успешному заверше­нию каждой команды цепочки ЦУ автоматически переходит к исполнению сле­дующей. Все команды цепочки являются частью одного процесса. Команды не являются полностью независимыми — при относительной адресации последний блок, адресованный предыдущей командой, доступен для следующей. Так, напри­мер, можно исполнить команду Search Data, по которой на диске будет найден блок, содержащий информацию, совпадающую с эталоном поиска. Связав с ней команду чтения Read, можно прочитать этот блок или блок с указанным смеще­нием относительно найденного. По выполнении связанных команд ЦУ посылает сообщения Linked Command Complete (возможно, с флагом), а ИУ обновляет набор сохраненных указателей, так что они указывают на очередную команду цепочки. Команды в цепочке выполняются как одиночные, но с возможностью относитель­ной адресации.

Команды могут исполняться с использованием очередей. ЦУ могут поддерживать немаркированные и маркированные очереди. Поддержка немаркированных очере­дей, определенная еще в SCSI-1, позволяет любому Л У (LUN) или целевой про­грамме, занятым процессом от одного ИУ, принимать команды (начинать процесс) с другими ИУ.

Маркированные очереди (tagged queue) определены в SCSI-2 для ЛУ. Для каждой связи I_T_L (ИУ-ЦУ-ЛУ) существует своя очередь размером до 256 процессов. Каждый процесс, использующий маркированные очереди, идентифицируется свя­зью I_T_L_Q, где Q — однобайтный тег очереди (queue tag). Теги процессам назна­чаются ИУ, их значения на порядок выполнения операций не влияют.

Постановка в очередь выполняется через механизм сообщений, при этом очеред­ной процесс можно поставить в очередь «по-честному», а можно «пропихнуть» вне очереди: процесс, поставленный в очередь с сообщением Head Of Queue Tag, будет выполняться сразу после завершения текущего активного процесса. Процессы, поставленные в очередь с сообщением Simple Queue Tag, исполняются ЦУ 'ъ по­рядке, который оно сочтет оптимальным.Процесс, поставленный в очередь с со­общением Ordered Queue Tag, будет исполняться последним. ИУ может удалить процесс из очереди, сославшись на него по тегу. Изменение порядка выполнения команд ЦУ не касается порядка в цепочке команд, поскольку цепочка принадле­жит одному процессу, а в очередь ставятся именно процессы. Здесь мы не рассматриваем различные ситуации, приводящие к отклонениям от нормальной последовательности событий интерфейса. К ним относятся некоррект­ные соединения со стороны ИУ, выбор несуществующего ЛУ, неожиданные вы­борки ИУ, округление параметров, реакция на асинхронные события и т. п.


Содержание раздела