81.3.1.6. SCSILIZER




THIS SECTION IS UNDER CONSTRUCTION




SCSILizer - компонент, как правило встроенный в систему который преобразует типовые запросы на ввод/вывод операционной системы в SCSI команды. Например в Windows эту роль выполняет драйвер класса диска.

Например типичный запрос на чтение операционной системы содержит: - Block Device offset (в байтах, как правило 64бита) - Transfer Length (как правило тоже в байтах, обычно 32-бита). а устройству идет запрос - Начальный номер блока - Количество блоков Происходит верификация запроса, так как устройство блочное, то читать из него можно только по смещению кратному размеру блока, с длинной кратной размеру блока. Если это не так то на этот уровень вернет ошибку. (Некоторые системы позволяют читать хоть один байт - но у них на более высоких уровнях все равно идет буферизация). Кроме того, SCSIlizerу приходиться разбивать запросы. Так как SCSI например у SCSI READ(10) Transfer Len в блоках = 2 байта, и если читать больше 16K блоков за раз, то запрос не влезет в одну SCSI команду. Более того - у контроллеров есть ограничения (особенно для IDE) по количеству блоков которые можно передать за одну команду. Со SCSIlizeroм связаны и другие неприятные вещи: Например - у вас есть диск емкостью 5TB, с размером сектора 512 байт (LBA > 2^32), например SAS, есть контроллер, который поддерживает 16-байтовые SCSI команды, есть дрйвер к нему, который понимает 16-байтовые команды, но операционная система у Вас - Windows 2003 Server (не R2), у нее SCSILizer не генерирует команды для LBA > 2^32, поэтому вы увидите диск 2TB, а не 5TB. Что нужно для поддержки LBA > 32bit на SCSI: - Устройство с таким LBA - Контроллер который понимает 16-байтовые SCSI команды - Драйвер к нему который понимает 16-байтовые SCSI команды. - Операционная система содержащая правильный SCSILizer который готов работать с большими SCSI дисками.


Примерно такая же ситуация как со SCSI существует с IDE. Например в Windows есть ATA Port, который осуществляет трансляцию системных запросов на ввод/вывод в IDE_REQUEST_BLOCKs, которые он же и выдает на выполнение ATA минипортам.


Index Prev Next