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 SCSI 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.)

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→
↓octet
7 6 5 4 3 2 1 0
0 8 = commande 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→
↓octet
7 6 5 4 3 2 1 0
0 0 = commande 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→
↓octet
7 6 5 4 3 2 1 0
0 0x12 = 18 = commande 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 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 avoir été enregistré vers le début du disque.)

bit→
↓octet
7 6 5 4 3 2 1 0
0 8 = commande 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 (Tio avec un bloc de 512 octets). Le bit DPO ("Disable Page Out") 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 ("Force Unit Access") demande de ne pas utiliser le cache lors d'une lecture, enfin le bit RelAd ("Relative Address") 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 Gio était d'une clairvoyance remarquable.

bit→
↓octet
7 6 5 4 3 2 1 0
0 0x28 = 40 = commande 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 à 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 Tio en une seule commande.)

bit→
↓octet
7 6 5 4 3 2 1 0
0 0xA8 = 168 = commande 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 des blocs de 512 octets).

bit→
↓octet
7 6 5 4 3 2 1 0
0 0x88 = 136 = commande READ (16)
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

Notes et références

  1. Voir le lien externe vers l'ensemble des spécifications publiée par le comité T10.
  2. 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).
  3. 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).
  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).
  • Portail de l’informatique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.