Для драйвера виртуального диска будет использоваться прямой метод, который обеспечивает возможность обмена большими данными и высокую скорость.
Об ошибках. 16-разрядная подсистема MS-DOSдиск:программаXXXX. Сбой при инициализации устанавливаемого драйвера виртуального.
Кафедра «Программное обеспечение ЭВМ и информационные технологии» Курсовой проект по системному программированию Расчетно-пояснительная записка Тема: «Драйвер виртуального диска» СОДЕРЖАНИЕ ВВЕДЕНИЕ 1. АНАЛИТИЧЕСКИЙ РАЗДЕЛ 1.1. Постановка задачи 1.2. Архитектура Windows 2000 1.3. Многослойная архитектура драйверов 1.4. Архитектура драйверов устройств хранения 1.5. Выбор файловой системы 2. КОНСТРУКТОРСКИЙ РАЗДЕЛ 2.1. Структура классового драйвера 2.2. Организация внутреннего хранения данных диска 2.3. Доступ к передаваемым данным 2.4. Обработка запросов Plug and Play 2.5. Обработка расширенных запросов 2.6. Структура драйвера 2.7. Расчет геометрии диска 3. ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ 3.1. Выбор и обоснование языка и среды программирования 3.2. Структуры данных классового драйвера 3.3. Блокировка выгрузки устройства 3.4. Процедуры драйвера виртуального диска 3.4.1. Инициализация драйвера 3.4.2 Обработка запросов записи/чтения 3.4.3. Обработка расширенных запросов 3.4.4. Обработка запросов Plug and Play 3.4.5. Выгрузка драйвера 3.5. Программа настройки параметров виртуального диска 3.6. Установка драйвера 4. ЭКСПЕРИМЕНТАЛЬНО-ИССЛЕДОВАТЕЛЬСКИЙ РАЗДЕЛ 4.1. Описание экспериментов 4.2. Результаты экспериментов ЗАКЛЮЧЕНИЕ СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ ВВЕДЕНИЕ В настоящее время все усложняются программные продукты и комплексы, что приводит к росту объема обрабатываемых данных, усложнению структуры их представления и хранения на компьютере. Все это приводит к повышению требований к скорости чтения и записи данных из файлов а также уменьшению времени доступа к каждому файлу в отдельности. Самым распространенным устройством для хранения данных в настоящее время является жесткий диск, который умеет хранить большие объемы данных. Время доступа к произвольному месту на диске зависит от скорости перемещения считывающей головки. Но быстродействие механики диска имеет предел, и время ответа для жесткого диска на несколько порядков выше, чем для оперативной памяти. Поэтому производительность при множественных операциях чтения и записи к различным данным катастрофически падает. Для решения данной проблемы существуют следующие средства повышения производительности. Все записываемые и считываемые данные не сразу пишутся на диск, а сохраняются в определенной области оперативной памяти - кэше. Но размер кэша не большой и в нем сохраняются только несколько или самых последних операций чтения записи или самых частых, в зависимости от стратегии кэширования. Однако буферизация только на основе оперативной памяти в подсистеме ввода-вывода оказывается недостаточной — разница между скоростью обмена с оперативной памятью, куда процессы помещают данные для обработки, и скоростью работы внешнего устройства часто становится слишком значительной, чтобы в качестве временного буфера можно было бы использовать оперативную память — ее объема может просто не хватить. Для таких случаев необходимо предусмотреть особые меры, и часто в качестве буфера используется дисковый файл, называемый также спул-файлом (от spool — шпулька, тоже буфер, только для ниток). Типичный пример применения спулинга дает организация вывода данных на принтер. Для печатаемых документов объем в несколько десятков мегабайт — не редкость, поэтому для их временного хранения (а печать каждого документа занимает от нескольких минут до десятков минут) объема оперативной памяти явно недостаточно. Другой подход для хранения данных в памяти – создание Ram дисков. В систему добавляется виртуальный диск, а образ диска расположен в оперативной памяти. Такой подход позволяет повысить быстродействие, когда приложение использует обращения случайного чтения, случайной записи. Так например, значительную часть всех обращений к данным в современных СУБД составляют случайные запросы на чтение данных. Другое преимущество виртуальных дисков – их можно использовать для бездисковых рабочих станций для промежуточных файлов. 1. АНАЛИТИЧЕСКИЙ РАЗДЕЛ 1.1 Постановка задачи К разрабатываемому драйверу виртуального диска предъявляются следующие требования: Разрабатываемый драйвер должен добавлять в операционную систему новый виртуальный диск Для увеличения скорости передачи, драйвер должен работать в блочном режиме передачи данных Драйвер должен быть конфигурируемым, для драйвера можно задать имя, которое присваивается диску и его размер Драйвер должен определять объем свободной физической памяти и ограничивать размер создаваемого виртуального диска. Драйвер может динамически выгружаться из системы и загружаться в нее без необходимости перезагружать компьютер Поскольку операции чтения записи, создания, переименования и удаления файлов выполняет драйвер файловой системы, то нужно обеспечивать считывание и запись необходимых файловой системе данных. Работа драйвера не должна влиять на работу других драйверов. 1.2 Архитектура Windows 2000 Наиболее распространены реализации Windows 2000 для платформы Intel x86 в одно- или многопроцессорных конфигурациях, однако существуют также версии для DEC Alpha и MIPS. Данная операционная система использует защищённый режим центрального процессора, реализует механизмы виртуальной памяти и многопоточности. Исполняемый код в Windows 2000 может исполняться в двух уровнях привилегий: пользовательском режиме и режиме ядра. Уровень привилегий накладывает определённые ограничения: в пользовательском режиме не могут выполняться привилегированные инструкции процессора и не разрешено обращение к защищённым страницам в памяти. Эти ограничения накладываются для обеспечения безопасности работы системы. Пользовательское приложение не должно иметь возможность — в результате ошибки или преднамеренно — вносить изменения в критические таблицы операционной системы или в память других приложений. В частности, такие ограничения запрещают пользовательскому приложению напрямую управлять внешними устройствами, потому что каждое из них является разделяемым ресурсом. В Windows 2000 обеспечение обмена данными и управление доступом к внешнему устройству как к разделяемому ресурсу возлагается на его драйвер. Ввод и вывод в драйверах осуществляется пакетами — IRP (Input/Output Request Packet). Запросы на ввод/вывод, посылаемые приложениями или другими драйверами, обрабатываются драйвером, после чего запрашивающей программе в том же пакете посылается статус завершения операции. Общий принцип взаимодействия проиллюстрирован на REF _Ref41953342 * Lower * MERGEFORMAT рис. 1 . Рис. SEQ Рис. * ARABIC 1. Архитектура ввода/вывода Windows 2000. 1.3 Многослойная архитектура драйверов Рассмотрим как строится архитектура драйверов. Операционная система Windows® поддерживает многослойную архитектуру драйверов. Каждое устройство обслуживается цепочкой драйверов, называемой стеком драйверов. Каждый драйвер в стеке изолирует аппаратно зависимые возможности от вышестоящего уровня. На рис. 2 показаны типы драйверов, которые могут обслуживать устройство. В действительности, некоторые из этих типов могут отсутствовать в стеке. Рис. 2 Многослойная архитектура драйверов Над стеком находятся приложения. Они обрабатывают запросы пользователя или других приложений и вызывают или подсистему Win 32 или клиент драйвер пользовательского режима. Клиент драйвер пользовательского режима обрабатывает запросы от приложений или от подсистемы Win32. При получении запросов, которые требуют обработки в режиме ядра, он вызывает нужный клиент драйвер режима ядра или процедуру обработки запроса через подсистему Win32. Клиент драйвер реализуются как динамические библиотеки (DLL). Клиент драйвер режима ядра обрабатывает запросы подобно клиент драйверу в режиме пользователя, за исключением того, что обработка идет в режиме ядра. Классовый и мини классовый драйвер устройства предоставляет основной набор сервисов обслуживания. Классовый драйвер предоставляет аппаратно независимую поддержку для специфичного класса устройств. Мини классовый драйвер обрабатывает отдельные операции для устройства из этого класса. Порт-драйвер (для некоторых устройств это драйвер хост-контроллера или хост-адаптера) выполняет требуемые операции ввода/вывода для порта, хаба или другого физического устройства, через которое осуществляется подключение. От типа устройства и шины через которую оно подключено зависит будет ли присутствовать этот драйвер в стеке. Все драйвера устройств хранения имеют порт-драйвер. Например, SCSI порт драйвер выполняет ввод/вывод через шину SCSI. Мини порт-драйвер обрабатывает специфичные операции порт-драйвера. Драйвер аппаратной шины находится в самом низу стека. Microsoft предоставляет эти драйвера для всех шин, как часть операционной системы. 1.4 Архитектура драйверов устройств хранения Для того, чтобы определить какой тип драйвера потребуется разработать, рассмотрим более подробно структуру взаимодействие драйверов устройств хранения в цепочке драйверов. Классовые и фильтр- драйвера для устройств хранения предоставляют интерфейс взаимодействия между драйверами высокого уровня, расположенными в стеке над ними, и порт-драйвером предоставляемым операционной системой. Рис. 3 Архитектура драйверов устройств хранения Запрос ввода/вывода от приложений пользователя обрабатывается подсистемой ввода/вывода. Подсистема формирует пакет запроса на ввод/вывод(IRP), который приходит классовому драйверу устройства ввода вывода через один или несколько промежуточных драйверов фильтров верхнего уровня(таких как например драйвер файловой системы). Классовый драйвер ввода вывода дополняет полученный пакет IRP дополнительным SCSI блоком запроса (SRB) и посылает запрос порт драйверу через фильтр драйверы нижнего уровня. Порт-драйвер полученные пакеты SRB преобразует к формату для передачи по аппаратной шине, и посылает их адаптеру главной шины (HBA), через драйвер вводы вывода шины и один или несколько фильтр драйверов. Благодаря тому, что виртуальный диск не является реальным физическим устройством, нам не требуется производить доступ к аппаратной шине и формировать специальные пакеты SRB. Данные в оперативной памяти уже доступны на уровне классового драйвера; нецелесообразно и не нужно передавать IRP пакеты на нижний уровень. Таким образом, требуется разработать классовый драйвер, в который будет происходить вся обработка запросов и обращение к данным диска для нашего класса устройств виртуального диска. 1.5 Выбор файловой системы Для того, чтобы начать работу с диском, диск разбивается на разделы. Раздел — это непрерывная часть физического диска, которую операционная система представляет пользователю как логическое устройство (используются также названия логический диск и логический раздел). Именно с логическими устройствами работает пользователь, обращаясь к ним по символьным именам, используя, например, обозначения А, В, С. В частном случае, когда все дисковое пространство охватывается одним разделом, логическое устройство представляет физическое устройство в целом. Исходя из того, что объем диска ограничен объемом имеющейся свободной оперативной памяти, то нецелесообразно разбивать виртуальный диск на несколько разделом. Создание одного логического раздела позволяет упростить логику устройства и сэкономить место, которое используется для описания каждого раздела. На каждом логическом устройстве может создаваться только одна файловая система. Для дисковых накопителей Windows поддерживает файловые системы FAT и NTFS. При выборе файловой системы виртуального диска учитывались следующие положения. Рамдиск не предназначен для долговременного хранения данных и при отключении питания все данные теряются. Как следствие проблема фрагментации файлов теряет свою актуальность и остроту. Объем диска ограничен и требуется, чтобы файловая система под файлы метаданных использовала минимум свободного места. Отличительные свойства NTFS[ REF _Ref104536223 r * MERGEFORMAT 2 ], то что она ориентирована для поддержки больших файлов, восстанавливаемости после сбоев и отказов программ и аппаратуры управления дисками – все это приводит к значительному размеру метаданных. Поэтому минимальный размер тома равен 10 Мб, а на практике использование NTFS оправдано для логических дисков от 400 Мб. Файловая система FAT относится к ФС с глобальным индексом, и поэтому метаданные состоят из метки тома, глобальной таблицы диска и коневого каталога. Все остальное место свободное и отводится под создаваемые файлы и каталоги. Тот факт, что при каждой операции чтения/ записи идет обращение к таблице FAT не влияет на производительность, т.к. время доступа для оперативной памяти ничтожно мало по сравнению с жестким диском. Также существует несколько версия FAT: 12, 16 и 32. FAT 12 можно использовать на маленьких дисках от 1 Мб. Использование FAT 32 в основном предназначена для томов объемом в несколько Гб, и минимальный размер тома ограничен 512 Мб, этому она не подходит для виртуального диска. Таким образом для нашего виртуального диска будет использоваться файловые системы FAT 12(когда объем диска не превышает 16 Мб) и FAT 16. 2. КОНСТРУКТОРСКИЙ РАЗДЕЛ 2.1 Структура классового драйвера Драйвер реализуется как набор процедур, каждая из которых предназначена для реализации отдельного типа обращений к драйверу со стороны диспетчера ввода/вывода. Процедуры, которые необходимо поддерживать классовому драйверу приведены в таблице 1. Таблица 1 Процедура Описание DriverEntry Выполняется при загрузке драйвера операционной системой. Здесь драйвер регистрирует свои остальные точки входа и выполняет свою общую инициализацию. Unload Вызывается при выгрузке драйвера. Здесь необходимо освободить все затребованные ресурсы. AddDevice Здесь создаётся объект-устройство, соответствующий полученному уведомлению от менеджера устройств, и выполняется инициализация данных, специфичных для данного устройства. DispatchPnP Выполняет обработку специфичных Plug&Play запросов , таких как инициализация устройства, таких как инициализация устройства, остановка, удаление устройства и обрабатывать остальные запроса DispatchPower Выполняет обработку запросов по управлению питанием устройства DispatchSystemControl Обрабатывает запросы от подсистемы инструментария Windows (WMI) DispatchCreate, DispatchClose, DispatchRead, DispatchWrite Обслуживают запросы на чтение запись данных для устройства. 2.2 Организация внутреннего хранения данных диска Определим, какую структуру данных оптимально использовать для хранения данных на диске. Самый простой способ – разместить все данные в одномерном массиве байт, и адресовать данные с помощью смещения от начала диска. Следует учесть тот факт, что при запросах на чтение /запись данных, в качестве параметров указывается : смещение в байтах с которого начинается передача данных (которое и служит индексом первого байта для чтения) и количество байт для передачи. Естественно, что применение более сложных структур организации данных(двумерный массив, списки и т.д.) приведет только к дополнительным накладным расходам по преобразованию адресации данных. Таким образом, виртуальный диск будет храниться в памяти как одномерный массив байт заданного размера. Для чтения данных, информация копируется из области памяти образа диска в буфер инициатора запроса. Для записи - копирование происходит в обратном направлении. Следующим шагом выберем, каким образом мы зарезервируем память для диска. Для резервирования памяти в режиме ядра Windows предоставляет специальные системные вызовы. Существуют следующие типы резервируемой памяти: Страничная память(Paged memory) – виртуальная память, которая может быть перемещена системой на жесткий диск в любой момент времени. В случае, если приложение обратиться к отсутствующей в физической памяти области своей виртуальной памяти, то возникает исключение по отсутствию страницы в памяти. В результате системный обработчик перехватывает это исключение и загружает в физическую память отсутствующую страницу. Однако при работе в режиме ядра, когда уровень приоритета равен или выше DISPATCH_LEVEL, это исключение создаст ситуацию, когда системный обработчик не может подгрузить страницу т.к. его IRQL меньше текущего. Нестраничная память (Nonpaged memory) – эта память никогда не может быть перемещена системой на жесткий диск и всегда остается в физической оперативной памяти. В результате, обращаться к этой памяти можно при любом уровне IRQL. Объем данной памяти ограничен даже при наличии достаточного объема физической памяти в Windows 2000 660 Мбайтами, а в Windows XP 1300 Мбайтами.
![драйвера виртуального драйвера виртуального](http://www.version-x.at/assets/images/VSPD.jpg)
![драйвера виртуального драйвера виртуального](http://01708.biz/images/55d3577324e6f.jpg)
Драйвер виртуального COM порта (для USB кабеля) Файл архив: CP210x_VCP_Win_XP_S2K3_Vista_7.zip. Windows: XP, Vista, 7.
Инструкция по установке драйвера виртуального COM-порта для соединения по USB в Windows 7. Если Вы впервые используете кабель для.
Скачать дипломные работы, курсовые, рефераты Драйвер виртуального. Если имеется меньше памяти или нужно просто иметь виртуальный диск.
![драйвера виртуального драйвера виртуального](http://esp8266.ru/forum/data/attachments/0/495-376159ef00002dca44e51fe5307d3f6b.jpg)