Команда READ (12)

Команда READ (12) позволяет передать данные, записанные на носитель, инициатору (например, программе). Данная команда имеет размер 12 байт и поддерживается не всеми устройствами.

Описание команды.

  • Байт 0

    В байт следует поместить код команды READ, равный A8h.

  • Байт 1

    Состоит из пяти частей. В первую часть (биты 7—5) помещают логический номер устройства (ЛНУ). В данное время этот параметр не используется и оставлен ради совместимости с предыдущими стандартами интерфейса SCSI, поэтому сюда следует записать нулевое значение. Вторая часть (бит 4) используется для управления заменой логических блоков в кэш-памяти (УКП). Если этот бит, установлен в 1, контроллер не помещает (и не сохраняет) логические блоки, передаваемые командой READ в кэш-память. При установке в 0, логические блоки помещаются в кэшируемую память для повторного использования. Третья часть (бит 3) определяет доступ к кэш-памяти (ДКП). Установка бита в 0 позволит адресату при выполнении операции чтения обращаться к кэш-памяти. Любая информация, находящаяся в памяти, может быть передана инициирующему устройству непосредственно. Четвертая часть (биты 2 и 1) зарезервирована и не используется. Пятая часть (бит 0) указывает на относительный адрес (ОА) для двоичного смещения при определении логического адреса.

  • Байты с 2 по 5

    Это поле определяет значение адреса логического блока на диске, с которого начнется чтение данных.

  • Байты с 6 по 9

    Определяют количество непрерывных логических блоков, которые необходимо прочитать. Установка этого поля в ноль говорит о том, что никакие данные не будут считаны с диска и это не является ошибкой. Любое другое значение однозначно укажет на количество блоков.

  • Байт 10

    Зарезервирован и не используется.

  • Байт 11

    Служебный байт, завершающий команду. Не используется.

Как видно из описания команды READ, использование ее в программе не должно вызвать никаких трудностей. Кроме 12-байтовой, существуют 6- и 10-байтовые варианты данной команды. Здесь же приведем примеры кода, использующего команду READ (12). Напишем функцию, читающую с носителя 500 логических блоков. Поскольку размер одного логического блока зависит от типа носителя, мы опустим определение и заполнение буфера данных.

Листинг 9.5. Пример использования команды READ (12) на Visual C++

Пример функции чтения, реализованный на языке Visual Basic, приведен в листинге 9.6.

Листинг 9.6. Пример использования команды READ (12) на Visual Basic

 

 

2021-04-01

Google сообщил о запуске проекта Dunant

Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...

подробнее
2020-04-06

Новшества в обновленной Windows 10

Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...

подробнее

 

Все новости...

 

Научно-Техническое Объединение

Тел.: +7(4752) 55-95-86

E-mail:e-mail