Типы устройств SCSI
Обмен данными по шине происходит не байтами и даже не словами, а кадрами, которые могут содержать команды, информацию о состоянии устройства (sense data) или собственно данные. Формат кадров и способ разрешения коллизий зависит от используемого типа соединений — в этом смысле разделение уровня соединений и уровня протокола не реализовано в полной мере. Каждый кадр содержит адреса отправителя и получателя. Каждое устройство имеет собственный адрес, называемый SCSI target ID. У старых версий протокола этот адрес был 3-битным, допуская адресацию восьми устройств, у современной версии (Ultra-SCSI или SCSI III) адрес 4- или 5-битный. Адаптер, через который шина SCSI подключается к системной или периферийной шине компьютера — НВА (Host Bus Adapter— адаптер системной шины) — также считается устройством и обычно имеет ID, равный, в зависимости от разрядности адреса, 7, 15 или 127.
Устройство, имеющее один target ID, может содержать несколько логически устройств, идентифицируемых номерами логических устройств (LUN — Logjc Unit Number). Спецификации протокола предусматривают два байта для код рования LUN, но реальное число логических устройств, поддерживаемых практике, обычно невелико.
Устройства SCSI делятся на два типа: инициаторы (initiator) и целевые ройства (target). Инициатор посылает команды, а целевое устройство их полняет. Спецификация допускает, что в разных актах обмена данными инициатор может становиться целевым устройством и наоборот, но в пределах одной операции эти роли заданы однозначно. Как правило, НВА может выступать только в роли инициатора, а периферийные устройства — только в роли целевых.
Блоки команд — CDB (Command Descriptor Block — блок описания команды) — невелики по размеру и могут содержать 6, 8, 10, 12 или 16 байт. Различие в длине обусловлено размером используемых в команде адресов: 6-байтовая команда использует 21-битный адрес блока на устройстве и 8-битное поле для длины требуемого блока данных, 8-байтовая — 32-разрядный адрес и 16-битное поле длины, а более длинные команды— 32-разрядные адрес и длину. 16-байтовая форма команды содержит, кроме 32-разрядных адреса и длины, также и 32-битное поле параметра. Кроме того, команда обязательно содержит код операции и поле управления. Под код операции отводится байт. Старшие три бита этого байта кодируют формат SCB. Некоторые команды используют только один формат SCB, другие допускают применение различных форматов (обычно с адресами и полем длины различной разрядности). Кроме перечисленных в табл. 9.4, различные типы устройств имеют собственные команды.
Блоки данных, в отличие от команд, имеют практически неограниченную длину. Многие команды интерпретируют поле длины CDB как указанное в блоках. При размере блока 512 байт это позволяет передать за одну операцию до 2 Тбайт (1 Тбайт=1024 Гбайт) данных. На практике, пакет данных, передаваемых за одну операцию шины, ограничен размерами буферов устройств, поэтому запросы на передачу больших объемов данных обрабатываются в несколькр приемов. Команда может либо принимать, либо передавать данные. В качестве данных могут передаваться либо блоки параметров и ответов, либо собственно данные. Существование команд, способных и передавать, и принимать данные, явно запрещено спецификациями, поэтому в CDB предусмотрена только одна группа полей описания буфера. Впрочем, операция может исполняться в виде последовательности команд и поэтому может предусматривать двусторонний обмен данными.
Большинство команд требует от устройства более или менее длительных подготовительных операций (перемещения головки, перемотки ленты), поэтому передача данных не может следовать немедленно за командой. По этой причине большинство современных устройств поддерживает очереди команд. Чтобы связать команду с пришедшим на нее ответом, команды могут снабжаться тегом задачи. Устройство способно параллельно исполнять несколько задач, а в рамках одной задачи может быть исполнена последовательность команд.