80.1.2.1. STORAGE DRIVERS



Подсистема storage

Основа - блочные устойства разных уровней

	блочное устройство низкого уровня покрывает физическое устройство
	например IDE диск, или SCSI CD-ROM

	блочное устройство высокого уровня покрывает том
	том может находиться и на нескольких дисках сразу
	Файловая подсистема работает с блочным устройством - томом.

	На съемных носителях устройство тома остается, а данные могут меняться
	Основные проблемы: сменный носитель с более чем одной партицией
	Multisession CD - какую сессию брать
		DOS берет первую
		Windows XP берет последнюю
		Есть системы где можно выбрать какую


Как правило можно постороить следующую иерархию драйверов блочных устройств низкого уровня:


	Общий блочный драйвер (то с чем работает файловая система)
	(просто как интерфейс - реально его имплементация это драйвер класса устройства,
         он кстати может быть даже и не драйвером а просто частью функциональности
         встроенной в OS.

	Драйвер класса устройства
		пример: Disk Class Driver
		поддерживает общий блочный интерфейс + специфические запросы
		для данного типа устройств:
		например: Read TOC и Play Audio для CD/DVD носителей
		Как правило опирается на более низкоуровневвые драйверы специфичные к
		интерфейсу - например на IDE или SCSI miniportы, USB или FireWire storage
		class драйверы. Но тем не менее для нестандартных устройств (например 
		LPT ZIP драйв - может быть полностью реализован здесь.
		Как правило драйвер класса поддерживает SCSI PassThrough для SCSI устройств.


	Низкоуровневые драйверы специфичные к интерфейсу:
		SCSI miniport
		Поскольку большая часть storage устройств (если это не IDE),
		построена на основе SCSI команд.

		Основные Запросы к такому драйверу:
			Сбросить SCSI шину
		        Выполнить SCSI команду
				CDB (Command Description Block) - SCSI команда (6-16 байт)
				Направление куда пересылать данные (в host, из hosta)
				Буфер для данных
				Максимальный размер буфера
				Буфер куда будет записан SCSI Sense в процессе выполнения операции
				
		IDE miniport
		Осуществляет IDE запросы
		Запросы к такому драйверу
			Сброс IDE шины
			Выполнить IDE команду
				Блок IDE регистров
				Направление куда пересылать данные (в host, из hosta)
				Буфер для данных
				Максимальный размер буфера


	Промежуточные слои могут портить жизнь.
	Например Windows 2000. Max размер у диска в байтах поддерживаемый OS = 2^64
	Новый SCSI контроллер поддерживающий посылку 16-байтных SCSI команд
	SCSI Disk Array - который показывает себя как 5TB жесткий диск
	Система видит только 2TB жесткий диск
	Потому что SCSIlizer который преобразует запросы типа Read/Write/etc в SCSI команды
	в Windows 2000 понятие не имеет что есть 16-байтные SCSI команды и как следствие
	диски такого объема


	Для устройств находящихся на внешних шинах есть лишний уровень иерархии
	Например для USB:
		Disk Class Driver
		USB Storage Class Driver (обслуживает storage устройства)
		USB Bus Driver (USB Host controller)	


TODO: Примеры интерфейсов драйверов


Index Prev Next