Смекни!
smekni.com

Разработка драйвера виртуального жесткого диска (стр. 1 из 5)

Факультет: Информатика и системы управления

Кафедра: Программное обеспечение ЭВМ и информационные технологии

Курсовая работа

на тему: Разработка драйвера виртуального жесткого диска


СОДЕРЖАНИЕ

СОДЕРЖАНИЕ. 1

ВВЕДЕНИЕ. 2

1. АНАЛИТИЧЕСКИЙ РАЗДЕЛ.. 4

1.1 Постановка задачи. 4

1.2 Архитектура Windows 2000. 4

1.3 Многослойная архитектура драйверов. 5

1.4 Архитектура драйверов устройств хранения. 8

1.5 Выбор файловой системы.. 9

2. КОНСТРУКТОРСКИЙ РАЗДЕЛ.. 11

2.1 Структура классового драйвера. 11

2.2 Организация внутреннего хранения данных диска. 12

2.3 Доступ к передаваемым данным. 13

2.4 Обработка запросов Plug and Play. 14

2.5 Обработка расширенных запросов. 15

2.7 Расчет геометрии диска. 16

2.6 Структура драйвера. 17

3. ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ.. 18

3.1 Выбор и обоснование языка и среды программирования. 18

3.2 Структуры данных классового драйвера. 18

3.3 Блокировка выгрузки устройства. 19

3.4 Процедуры драйвера виртуального диска. 19

3.4.1 Инициализация драйвера. 19

3.4.2Обработка запросов записи/чтения. 22

3.4.3 Обработка расширенных запросов. 24

3.4.4 Обработка запросов Plug and Play. 26

3.4.5 Выгрузка драйвера. 28

3.5 Программа настройки параметров виртуального диска. 29

3.6 Установка драйвера. 29

4. ЭКСПЕРИМЕНТАЛЬНО-ИССЛЕДОВАТЕЛЬСКИЙ РАЗДЕЛ.. 31

4.1 Описание экспериментов. 31

4.2 Результаты экспериментов. 31

ЗАКЛЮЧЕНИЕ. 32

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ.. 33


ВВЕДЕНИЕ

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

Самым распространенным устройством для хранения данных в настоящее время является жесткий диск, который умеет хранить большие объемы данных. Время доступа к произвольному месту на диске зависит от скорости перемещения считывающей головки. Но быстродействие механики диска имеет предел, и время ответа для жесткого диска на несколько порядков выше, чем для оперативной памяти. Поэтому производительность при множественных операциях чтения и записи к различным данным катастрофически падает.

Для решения данной проблемы существуют следующие средства повышения производительности. Все записываемые и считываемые данные не сразу пишутся на диск, а сохраняются в определенной области оперативной памяти - кэше. Но размер кэша не большой и в нем сохраняются только несколько или самых последних операций чтения записи или самых частых, в зависимости от стратегии кэширования.

Однако буферизация только на основе оперативной памяти в подсистеме ввода-вывода оказывается недостаточной — разница между скоростью обмена с оперативной памятью, куда процессы помещают данные для обработки, и скоростью работы внешнего устройства часто становится слишком значительной, чтобы в качестве временного буфера можно было бы использовать оперативную память — ее объема может просто не хватить. Для таких случаев необходимо предусмотреть особые меры, и часто в качестве буфера используется дисковый файл, называемый также спул-файлом (от spool — шпулька, тоже буфер, только для ниток). Типичный пример применения спулинга дает организация вывода данных на принтер. Для печатаемых документов объем в несколько десятков мегабайт — не редкость, поэтому для их временного хранения (а печать каждого документа занимает от нескольких минут до десятков минут) объема оперативной памяти явно недостаточно.

Другой подход для хранения данных в памяти – создание Ram дисков. В систему добавляется виртуальный диск, а образ диска расположен в оперативной памяти. Такой подход позволяет повысить быстродействие, когда приложение использует обращения случайного чтения, случайной записи. Так например, значительную часть всех обращений к данным в современных СУБД составляют случайные запросы на чтение данных. Другое преимущество виртуальных дисков – их можно использовать для бездисковых рабочих станций для промежуточных файлов.


1. АНАЛИТИЧЕСКИЙ РАЗДЕЛ

1.1 Постановка задачи

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

1. Разрабатываемый драйвер должен добавлять в операционную систему новый виртуальный диск

2. Для увеличения скорости передачи, драйвер должен работать в блочном режиме передачи данных

3. Драйвер должен быть конфигурируемым, для драйвера можно задать имя, которое присваивается диску и его размер

4. Драйвер должен определять объем свободной физической памяти и ограничивать размер создаваемого виртуального диска.

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

6. Поскольку операции чтения записи, создания, переименования и удаления файлов выполняет драйвер файловой системы, то нужно обеспечивать считывание и запись необходимых файловой системе данных.

7. Работа драйвера не должна влиять на работу других драйверов.

1.2 Архитектура Windows 2000

Наиболее распространены реализации Windows 2000 для платформы Intel x86 в одно- или многопроцессорных конфигурациях, однако существуют также версии для DEC Alpha и MIPS. Данная операционная система использует защищённый режим центрального процессора, реализует механизмы виртуальной памяти и многопоточности.

Исполняемый код в Windows 2000 может исполняться в двух уровнях привилегий: пользовательском режиме и режиме ядра. Уровень привилегий накладывает определённые ограничения: в пользовательском режиме не могут выполняться привилегированные инструкции процессора и не разрешено обращение к защищённым страницам в памяти. Эти ограничения накладываются для обеспечения безопасности работы системы. Пользовательское приложение не должно иметь возможность — в результате ошибки или преднамеренно — вносить изменения в критические таблицы операционной системы или в память других приложений. В частности, такие ограничения запрещают пользовательскому приложению напрямую управлять внешними устройствами, потому что каждое из них является разделяемым ресурсом.

В Windows 2000 обеспечение обмена данными и управление доступом к внешнему устройству как к разделяемому ресурсу возлагается на его драйвер. Ввод и вывод в драйверах осуществляется пакетами — IRP (Input/Output Request Packet). Запросы на ввод/вывод, посылаемые приложениями или другими драйверами, обрабатываются драйвером, после чего запрашивающей программе в том же пакете посылается статус завершения операции. Общий принцип взаимодействия проиллюстрирован на рис. 1.

Рис. 1. Архитектура ввода/вывода Windows 2000.

1.3 Многослойная архитектура драйверов

Рассмотрим как строится архитектура драйверов. Операционная система Windows® поддерживает многослойную архитектуру драйверов. Каждое устройство обслуживается цепочкой драйверов, называемой стеком драйверов. Каждый драйвер в стеке изолирует аппаратно зависимые возможности от вышестоящего уровня.

На рис. 2 показаны типы драйверов, которые могут обслуживать устройство. В действительности, некоторые из этих типов могут отсутствовать в стеке.

Рис. 2 Многослойная архитектура драйверов

1. Над стеком находятся приложения. Они обрабатывают запросы пользователя или других приложений и вызывают или подсистему Win 32 или клиент драйвер пользовательского режима.

2. Клиент драйвер пользовательского режима обрабатывает запросы от приложений или от подсистемы Win32. При получении запросов, которые требуют обработки в режиме ядра, он вызывает нужный клиент драйвер режима ядра или процедуру обработки запроса через подсистему Win32. Клиент драйвер реализуются как динамические библиотеки (DLL).

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

4. Классовый и мини классовый драйвер устройства предоставляет основной набор сервисов обслуживания. Классовый драйвер предоставляет аппаратно независимую поддержку для специфичного класса устройств. Мини классовый драйвер обрабатывает отдельные операции для устройства из этого класса.

5. Порт-драйвер (для некоторых устройств это драйвер хост-контроллера или хост-адаптера) выполняет требуемые операции ввода/вывода для порта, хаба или другого физического устройства, через которое осуществляется подключение. От типа устройства и шины через которую оно подключено зависит будет ли присутствовать этот драйвер в стеке. Все драйвера устройств хранения имеют порт-драйвер. Например, SCSI порт драйвер выполняет ввод/вывод через шину SCSI.

Мини порт-драйвер обрабатывает специфичные операции порт-драйвера.

6. Драйвер аппаратной шины находится в самом низу стека. Microsoft предоставляет эти драйвера для всех шин, как часть операционной системы.

1.4 Архитектура драйверов устройств хранения

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

Классовые и фильтр- драйвера для устройств хранения предоставляют интерфейс взаимодействия между драйверами высокого уровня, расположенными в стеке над ними, и порт-драйвером предоставляемым операционной системой.

Рис. 3 Архитектура драйверов устройств хранения