Команда WRITE (10)
Команда WRITE (10) позволяет записать данные, переданные от инициатора (программы) на носитель (диск).
Описание команды.
- Байт 0
В байт следует поместить код команды WRITE (10), равный 2Ah.
- Байт 1
Состоит из шести частей. В первую часть (биты 7—5) помещают логический номер устройства (ЛНУ). В данное время этот параметр не используется и оставлен ради совместимости с предыдущими стандартами интерфейса SCSI, поэтому сюда следует записать нулевое значение. Вторая часть (бит 4) используется для управления заменой логических блоков в кэш-памяти (УКП). Если этот бит установлен в 1, контроллер не помещает (и не сохраняет) логические блоки, передаваемые командой READ в кэш-память. При установке в 0 логические блоки помещаются в кэшируемую память для повторного использования. Третья часть (бит 3) определяет доступ к кэш-памяти (ДКП). Установка бита в 0 позволит адресату при выполнении операции чтения обращаться к кэш-памяти. Любая информация, находящаяся в памяти, может быть передана инициирующему устройству непосредственно. Четвертая часть (бит 2) определяет режим записи (Режим). Если этот бит установлен в 1, значит, устройство записи может пропустить операцию предварительного стирания перед новым процессом записи. Если бит установлен в 0, то устройство произведет нормальную операцию записи (по умолчанию). Для носителей с однократной записью этот бит должен быть зарезервирован. Пятая часть (бит 1) зарезервирована и не используется. Шестая часть (бит 0) указывает на относительный адрес (ОА) для двоичного смещения при определении логического адреса.
- Байты с 2 по 5
Определяют логический адрес, с которого начнется запись данных на носитель.
- Байт 6
Зарезервирован и не используется.
- Байты 7 и 8
Определяют количество непрерывных логических блоков данных, которые должны быть переданы. Установка этого поля в 0 не является ошибкой и указывает на то, что никакие данные не будут переданы.
- Байт 9
Служебный байт, завершающий команду. Не используется.
Если при выполнении команды WRITE произойдут ошибки, байт статуса установится в STATUS_RESCONF и никакие данные не будут записаны. Приведем примеры работы с командой записи. Напишем функцию, которая запишет на носитель 250 блоков с данными, где размер каждого блока равен 4 байтам.
Листинг 9.19. Пример использования команды WRITE на Visual C++
На языке Visual Basic аналогичный пример приведен в листинге 9.20.
Листинг 9.20. Пример использования команды WRITE на Visual Basic
2021-04-01
Google сообщил о запуске проекта Dunant
Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...
подробнее2020-04-06
Новшества в обновленной Windows 10
Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...
подробнее