Команда 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 завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...
подробнее