Драйвер виртуального диска

Автор: Пользователь скрыл имя, 29 Ноября 2011 в 19:08, курсовая работа

Описание работы

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

Содержание

ВВЕДЕНИЕ………………………………………………………………….3
1. АНАЛИТИЧЕСКИЙ РАЗДЕЛ
1.1. Постановка задачи………………………………………………………5
1.2. Архитектура Windows XP………………………………………………5
1.3. Многослойная архитектура драйверов………………………………...8
1.4. Архитектура драйверов устройств хранения………………………….9
1.5. Выбор файловой системы……………………………………………...11
……………………….38

Работа содержит 1 файл

Курсовой проект 1.doc

— 369.00 Кб (Скачать)

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

  На  каждом логическом устройстве может  создаваться только одна файловая система. Для дисковых накопителей Windows поддерживает файловые системы FAT и NTFS.

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

  Отличительные свойства NTFS[2], то что она ориентирована для поддержки больших файлов, восстанавливаемости после сбоев и отказов программ и аппаратуры управления дисками – все это приводит к значительному размеру метаданных. Поэтому минимальный размер тома равен 10 Мб, а на практике использование NTFS оправдано для логических дисков от 400 Мб.

  Файловая система FAT относится к ФС с глобальным индексом, и поэтому метаданные состоят из метки тома, глобальной таблицы диска и корневого каталога. Все остальное место свободное и отводится под создаваемые файлы и каталоги. Тот факт, что при каждой операции чтения/ записи идет обращение к таблице FAT не влияет на производительность, т.к. время доступа для оперативной памяти ничтожно мало по сравнению с жестким диском. Также существует несколько версия FAT: 12, 16 и 32. FAT 12 можно использовать на маленьких дисках от 1 Мб. Использование FAT 32 в основном предназначена для томов объемом в несколько Гб, и минимальный размер тома ограничен 512 Мб, этому она не подходит для виртуального диска.

  Таким образом для нашего виртуального диска будет использоваться файловые системы FAT 32.

 

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

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

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

  Таблица 1

                        Процедура                                                                     Описание
                       DriverEntry               Выполняется при загрузке драйвера операционной системой. Здесь драйвер регистрирует                с                cвои остальные точки входа и выполняет свою общую инициализацию.
                          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 Мбайтами.

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

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

  Рассмотрим, каким образом драйвер может  получить доступ к передаваемым данным. Пользовательский процесс, вызывая  функцию API (например, WriteFile), передаёт ей указатель на буфер, в котором размещается записываемая информация. Однако, передаваемый виртуальный адрес действительно будет указывать на записываемую информацию только в контексте данного процесса. Операции же ввода/вывода в драйвере происходят в контексте произвольного процесса. Из-за смены таблиц страничного преобразования при переключении процессов использовать переданный виртуальный адрес в произвольном контексте совершенно недопустимо.

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

  Буферизированный (buffered I/O). Драйверу в пакете запроса ввода/вывода передаётся указатель на копию исходного буфера в невыгружаемой памяти (поле AssociatedIrp.SystemBuffer). Подсистема ввода/вывода отвечает за точное соответствие содержимого этого буфера передаваемым данным. Этот метод, в основном, используется для устройств, не предающих больших объёмов данных: манипуляторы, низкоскоростные коммуникационные линии и т. п.

  Прямой (direct I/O). В этом случае система блокирует страницы пользовательского буфера, чтобы они не были выгружены на диск во время передачи данных. Расположение пользовательского буфера в физической памяти описывается структурой MDL (Memory Descriptor List), доступной в пакете запроса ввода/вывода через поле MdlAddress. По этой структуре необходимо настроить системную таблицу страниц на тот же буфер в физической памяти. Это осуществляется функцией MmGetSystem‌AddressForMdlSafe, которая возвращает виртуальный адрес буфера в системной области памяти. Данный метод эффективен с большими объёмами данных, например, при работе с дисковыми накопителями.

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

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

  В процессе работы диспетчер ввода-вывода может динамически управлять состоянием устройства: запускать, останавливать и выгружать. Реализация этих функций драйвером устройства хранения обеспечивает при обработке специфичных PnP IRP пакетов. В таблице 2 приведены описания IRP пакетов, которые должны поддерживаться. 

  Таблица 2

                   IRP_MN_Xxx                                                          Описание
                   IRP_MN_START_DEVICE                    Инициализация устройства с заданными ресурсами.
                   IRP_MN_QUERY_STOP_DEVICE              Проверка осуществимости остановки устройства для                                                    перерас  распределения ресурсов.
                   IRP_MN_STOP_DEVICE              Остановка устройства с потенциальной возможность. перезапуска и                или удаления из системы.
                 IRP_MN_CANCEL_STOP_DEVICE                Уведомляет, что предыдущий запрос на остановку не получит

                                                 дальнейшего развития.

              IRP_MN_QUERY_REMOVE_DEVICE                Проверка осуществимости безопасного удаления устройства.
              IRP_MN_REMOVE_DEVICE                Выполнить безопасное удаление устройства.
            

              IRP_MN_CANCEL_REMOVE_DEVICE

               Уведомляет, что предыдущий запрос на удаление не получит льне                                          дальнейшего развития.
              IRP_MN_SURPRISE_REMOVAL                Уведомляет, что устройство было удалено без предварительного п                                                   предупреждения.
 

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

  Основным  состоянием диска будет WORKING – когда диск находится в рабочем состоянии. Остальные состояния(приведенные в таблице 3) носят информативный характер, чтобы узнать текущий режим работы диска. При операциях доступа к устройству будет осуществляться проверка состояния WORKING, и только при нем доступ к диску разрешен. 
 

Информация о работе Драйвер виртуального диска