- Commande SCSI
-
Dans l'architecture SCSI chaque équipement connecté au bus peut envoyer un ordre à n'importe quel autre. Le format de cet ordre ou commande est normalisé pour garantir l'interopérabilité (ainsi un disque dur de n'importe quel fabricant fonctionnera de la même façon une fois connecté à un contrôleur SCSI employé sur un serveur.)
Sommaire
Format d'une commande
Les commandes sont envoyées en respectant un format appelé CDB pour Command Descriptor Block. Historiquement le format des commandes SCSI employait un nombre d'octets prédéterminé (6, 10, 12 ou 16 octets), les commandes les plus récentes emploient un nombre variable d'octets, voici par exemple la description de la commande READ (6) :
bit→
↓octet7 6 5 4 3 2 1 0 0 8 = opération READ (6) 1 Numéro d'unité (MSB) 2 Numéro du premier bloc à lire 3 (LSB) 4 Nombre de blocs contigus à lire 5 Contrôle Un bloc est la capacité minimale transférable de/vers le support de stockage, le plus souvent il fait 512 octets pour un disque dur mais comme ce n'est pas nécessairement le cas, la commande READ CAPACITY permet à l'ordinateur y accédant de déterminer la taille exacte de l'unité de stockage manipulée par le support.
Les commandes varient selon la catégorie de l'équipement connecté au bus SCSI (disques durs, lecteurs de bandes magnétiques, robots de sauvegarde, tiroirs de disques, etc.) Il existe un ensemble commun de commandes que tout équipement implémente et des versions spécifiques selon la catégorie de l'équipement[1]. Le format CDB est spécifié dans le document d'architecture générale SCSI[2].
Exemples de commandes
Ces commandes correspondent à la norme ANSI INCITS 408-2005[3]. L'exemple READ vient de la norme ANSI INCITS 405-2005[4].
TEST UNIT READY
Cette commande permet de demander à un périphérique s'il est prêt à transférer des données, i.e. le disque dur est en rotation, la bande dans un lecteur est chargée et prête, etc.
bit→
↓octet7 6 5 4 3 2 1 0 0 0 = opération TEST UNIT READY 1 Numéro d'unité 2 (réservé) 3 4 5 Contrôle INQUIRY
Cette commande est obligatoirement présente sur tous les périphériques. Elle permet d'obtenir des informations sur l'équipement connecté. Cette commande est disponible dès que l'équipement est alimenté, même s'il n'a pas encore fini sa séquence d'initialisation (il fournira éventuellement une réponse plus complète une fois initialisé.)
bit→
↓octet7 6 5 4 3 2 1 0 0 0x12 = 18 = opération INQUIRY 1 Numéro d'unité (réservé) EVPD 2 Numéro de page 3 (MSB) Taille maxi de la réponse 4 (LSB) 5 Contrôle READ
Il existe plusieurs versions de cette commande, la plus ancienne READ (6) permet de coder le numéro de premier bloc à lire sur 21 bits (sur un disque dur cela ne permet d'accéder qu'au premier 1 Gio) cette commande est pourtant toujours obligatoirement supportée pour conserver la compatibilité avec les codes en ROM de certains serveurs informatiques qui lisent leur code d'amorçage via cette commande (ce dernier devra alors être enregistré vers le début du disque.)
bit→
↓octet7 6 5 4 3 2 1 0 0 8 = opération READ (6) 1 Numéro d'unité (MSB) 2 Numéro du premier bloc à lire 3 (LSB) 4 Nombre de blocs contigus à lire 5 Contrôle Read 10
La commande READ (10) est une extension de la précédente, elle propose un numéro de LBA sur 32 bits (2 Tio avec un bloc de 512 octets). Le bit DPO signale à l'unité qu'il n'est sans doute pas utile de mettre les données lues en cache car elles ne sont plus nécessaires, à l'inverse le bit FUA demande de ne pas utiliser le cache lors d'une lecture, enfin le bit RelAd est employé lors de commandes liées pour préciser que le numéro de LBA est relatif à la précédente commande de lecture. Cette commande a été spécifiée vers 1982 et aurait donc pu être décrite dans la première norme ce qui à l'époque où les plus gros disques durs n'atteignaient pas 1 Gio était d'une clairvoyance remarquable.
bit→
↓octet7 6 5 4 3 2 1 0 0 0x28 = 40 = opération READ (10) 1 Numéro d'unité DPO FUA (réservé) RelAd 2 (MSB) 3 Numéro du premier bloc à lire 4 5 (LSB) 6 (réservé) 7 (MSB) Nombre de blocs contigus à lire 8 (LSB) 9 Contrôle Read 12
La commande READ (12) est a nouveau une extension de la précédente, elle propose un nombre de blocs à lire codé sur 32 bits (avec un bloc de 512 octets cela permet un transfert maximum de 2 Tio en une seule commande.)
bit→
↓octet7 6 5 4 3 2 1 0 0 0xA8 = 168 = opération READ (12) 1 Numéro d'unité DPO FUA (réservé) RelAd 2 (MSB) 3 Numéro du premier bloc à lire 4 5 (LSB) 6 (MSB) 7 Nombre de blocs contigus à lire 8 9 (LSB) 10 (réservé) 11 Contrôle Read 16
La commande READ (16) est elle aussi une extension de la précédente, elle propose un numéro de LBA sur 64 bits (plus de 8 000 000 Pio avec un bloc de 512 octets).
bit→
↓octet7 6 5 4 3 2 1 0 0 0xA8 = 168 = opération READ (12) 1 Numéro d'unité DPO FUA (réservé) RelAd 2 (MSB) 3 4 5 Numéro du premier bloc à lire 6 7 8 9 (LSB) 10 (MSB) 11 Nombre de blocs contigus à lire 12 13 (LSB) 14 (réservé) 15 Contrôle Annexes
Articles connexes
Liens externes
- Le comité technique T10 responsable de la norme SCSI ;
- Les documents officiels ou en cours de rédaction concernant l'architecture SCSI, ne sont plus téléchargeables librement.
Notes et références
- Voir le lien externe vers l'ensemble des spécifications publiée par le comité T10.
- SCSI Architecture Model - 4 (SAM-4) ce document n'est plus (depuis janvier 2009) consultable librement ; la version suivante, en cours de rédaction, l'est encore SCSI Architecture Model - 5 (SAM-5).
- SCSI Primary Commands - 3 (SPC-3) ce document n'est plus (depuis janvier 2009) consultable librement ; la version suivante, en cours de rédaction, l'est encore SCSI Primary Commands - 4 (SPC-4).
- SCSI Block Commands - 2 (SBC-2) ce document n'est plus (depuis janvier 2009) consultable librement ; la version suivante, en cours de rédaction, l'est encore SCSI Block Commands - 3 (SBC-3).
Wikimedia Foundation. 2010.