Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архітектура методичка.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
20.71 Mб
Скачать

86. Система команд

Система команд SCSI включає загальні команди, що застосовуються для пристроїв всіх класів і специфічні для кожного класу. Як загальні, так і специфічні набори команд містять обов'язкові, додаткові та

фірмові команди. Будь SCSI-пристрій повинен підтримувати обов'язкові команди загального набору і свого класу, чим забезпечується високий рівень сумісності. Команда передається ІУ в ЦУ через блок дескриптора команди, який надсилається у фазі Command Деякі команди супроводжуються блоком параметрів, наступним за блоком дескриптора в фазі Data. Формати блоків стандартизовані, довжина блоку (6, 10 або 12 байт) визначається кодом операції (перший байт блоку). Структура блоків дескрипторів команд наведена на рис. 3.10.

Блок містить наступні поля:

- OpCode - код операції. Біти 7-5 визначають групу, а біти 4-0 код команди. У групі 0 блок дескриптора має довжину 6 байт, в групах 1 та 2 - 10 байт, у групі 5-12 байт. Групи 3 і 4 зарезервовані, групи 6 і 7 віддані на розсуд розробників.

- LUN - номер ЛУ (біти 7-5 байта 1). Якщо для ідентифікації використовуються повідомлення Identify, то це поле ігнорується (встановлюється LUN = 0).

- LBA - адреса логічного блоку, 21 біт для 6-байтних блоків і 32 біта для 10-і 12-байтних блоків. У ряді команд поле не використовується.

Length - довжина (кількість блоків або байтів) переданих даних або блоку параметрів. У ряді команд поле не використовується.

Control - байт управління. Біти 7-6 використовуються на розсуд розробника, біти 5-2 зарезервовані, біт 1 - Flag (при Flag = l повідомлення

Linked Command Complete (With Flag) викликатиме переривання між командами ланцюжка), біт 0 - Link (одиничне значення служить ознакою ланцюжка команд).

У полях LBA і Length першими передаються старші байти, потім молодші. Зарезервовані поля для сумісності з майбутніми стандартами повинні мати нульові значення

Виконання команди завершується у фазі Status передачею байта стану Status Byte. У байті стану використовують тільки біти 5-1, можливі стану наведено в табл. 3.12 (біти 7,6, 0 зарезервовані).

Набір команд для пристроїв класів 0-9 наведено у Додатку Д. Будь ЦУ SCSI-2 зобов'язана підтримувати чотири команди: Inquiry, Request Sense, Send Diagnostic, Test Jnit Ready. Вони використовуються для конфігурування системи, тестування пристроїв, а також повідомлень про помилки і виняткових ситуаціях. Команда Inquiry дозволяє отримати інформацію про ЛУ через стандартизований блок даних довжину 96 байт (тип підключеного ПУ, можливість зміни носія, підтримка 32 - або 16-бітного розширення, синхронного обміну, відносної адресації, ланцюжків команд, черг і повідомлення про асинхронних події).

Виконання команд. При виконанні одиночної команди (наприклад команда читання Read), ВП має активний набір покажчиків і кілька збережених наборів, по одному на кожен з процесів. ІУ відновлює покажчики процесу в активний набір і, вигравши арбітраж, вибирає ЦУ. Як тільки ЦУ вибрано, воно бере на себе управління процесом. У фазі Selection ІУ вводить сигнал ATN #, повідомляючи про намір послати повідомлення Identify із зазначенням адресується ЛУ. Таким чином встановлюється зв'язок ІУ з даним процесом і його набором покажчиків. ЦУ переходить у фазу Command і приймає блок дескриптора команди.

Інтерпретувавши команду, ЦУ переходить у фазу Data IN, передає дані, потім переводиться в фазу Status і посилає стан Good Потім у фазі Message IN пристрій посилає повідомлення Command Complete, після чого звільняє шину (фаза Bus Free).

Якщо пристрій, отримавши команду, визначить, що для одержання витребуваних даних необхідно багато часу, воно звільнить шину, надіславши повідомлення Disconnect. Як тільки необхідні дані готові в ЦУ, воно, вигравши арбітраж, вибере ІУ (у фазі Reselect) і у фазі Message IN пошле йому повідомлення Identify. ІУ відновить відповідний набір покажчиків в активний і продовжить виконання процесу, як описано вище. Якщо ЦУ хоче від'єднатися, коли частина даних вже передана (наприклад, головка дійшла до кінця циліндра і потрібен час на позиціонування), воно посилає повідомлення Save Data Pointer а потім Disconnect. Після повторного з'єднання передача даних відновиться з точки, визначеної останнім збереженим значенням покажчика. Якщо сталася помилка чи винятки ЦУ може повторити обмін даними, надіславши повідомлення Restore Pointers або від'єднати без повідомлення Save Data Pointers

У разі використання ланцюжка команд, після успішного завершення кожної команди, ЦУ автоматично переходить до виконання наступного. Усі команди ланцюжка адресуються до однієї і тієї ж зв'язку і є частиною одного процесу. Команди не є повністю незалежними - при використанні біта відносної адресації останній блок, адресований попередньою командою, доступний для наступної (наприклад команда Search Data знаходить на диску потрібний блок, а пов'язана з нею команда читання Read читає цей блок або блоки із зазначеним зсувом щодо знайденого. За виконання пов'язаних команд ЦУ посилає повідомлення Linked Command Complete (можливо, з прапором), а ІУ оновлює набір збережених покажчиків (вказують на чергову команду ланцюжка).

Команди можуть виконуватися з використанням черг. ЦУ можуть підтримувати немарковані та марковані черги. Підтримка немаркованих черг, визначена ще в SCSI-1, дозволяє будь-якому ЛУ (LUN) або цільовій програмі (TRN), зайнятим процесом від одного ІУ, приймати команди (починати процес) з іншими ІУ. Маркіровані черги визначені в SCSI-2 для ЛУ (LUN, але не TRN). Для кожної з цим існує своя чергу розміром до 256 процесів.

Постановка в чергу виконується через механізм повідомлень. Процес, поставлений в чергу з повідомленням Head Of Queue Tag, буде виконуватися

відразу після завершення поточного активного процесу (поза чергою). Процеси, поставлені в чергу з повідомленням Simple Queue Tag, виконуються ЦУ в порядку, який вона вважає оптимальним, а процес, поставлений в чергу з повідомленням Ordered Queue Tag, виповнюється останнім. ІУ може видалити процес з черги. Зміна порядку команд у черзі не стосується порядку в ланцюжку команд, оскільки ланцюжок належить одному процесу.