![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Основная функция менеджера ввода-вывода заключается в создании каркаса, в котором могут работать различные устройства ввода-вывода. Структуру каркаса образуют набор независимых от устройств процедур для определенных аспектов ввода-вывода и набор загруженных драйверов для общения с устройствами.
Чтобы гарантировать, что драйверы устройств хорошо работают с остальной частью системы Windows 2000, корпорация Microsoft определила для драйверов модель Windows Driver Model, которой драйверы устройств должны соответствовать. Более того, корпорация Microsoft также предоставляет набор инструментов, который должен помочь разработчикам драйверов в создании драйверов, соответствующих модели Windows Driver Model. Согласующиеся с ней драйверы должны удовлетворять всем следующим требованиям (а также некоторым другим):
1. Обрабатывать входящие запросы ввода-вывода, поступающие в стандартном формате.
2. Основываться на объектах, как и остальная часть системы Windows 2000.
3. Позволять динамическое добавление или удаление устройств plug-and-play.
4. Допускать, когда это возможно, управление энергопотреблением.
5. Допускать реконфигурацию в терминах использования ресурсов.
6. Быть реентерабельными для возможности их использования на мультипроцессорах.
Запросы ввода-вывода передаются драйверам в виде стандартизированных пакетов, называемых IRP (Input/output Request Packet – пакет запроса ввода-вывода). Драйверы, согласующиеся с моделью Windows Driver Model, должны уметь обрабатывать пакеты IRP. Драйвер должен поддерживать работу с объектами, то есть поддерживать определенный список методов, к которым может обращаться остальная система. Он также должен корректно работать с другими объектами операционной системы Windows 2000, доступ к которым осуществляется при помощи дескрипторов объектов.
Драйверы, согласующиеся с моделью Windows Driver Model, должны полностью поддерживать устройства plug-and-play. Это означает, что если устройство, управляемое драйвером, внезапно добавляется в систему или удаляется из системы, драйвер должен быть готов к получению данной информации и корректной реакции на эту информацию, даже в том случае, если устройство удаляется в момент обращения к нему. Также драйверы должны поддерживать управление энергопотреблением для тех устройств, для которых это возможно. Например, если система решает, что теперь пора перейти в режим низкого энергопотребления, все драйверы должны поддерживать этот режим, чтобы сберегать энергию. Они также должны поддерживать обратный переход в режим нормального функционирования.
Драйвер должен быть настраиваемым, что означает отсутствие каких бы то ни было встроенных предположений о линиях прерываний или портах ввода-вывода, используемых определенным устройством. Драйверы устройств также должны работать на многороцессорных машинах, так как поддержка многопроцессорности была заложена в операционную систему Windows 2000 при разработке. Это требование означает, это во время обработки драйвером запроса от одного центрального процессора может прийти запрос от другого центрального процессора. Второй центральный процессор может начать выполнение программы драйвера одновременно с первым центральным процессором. Драйвер должен функционировать корректно, даже когда он вызывается одновременно двумя и более центральными процессорами. Это означает, что доступ ко всем чувствительным структурам данных должен предоставляться только внутри критических областей. Простое предположение, что других обращений к драйверу не будет, пока не завершится обработка текущего обращения к нему, недопустимо.
В операционной системе UNIX обращение к драйверам производится по номеру главного устройства. В Windows 2000 применяется другая схема. Во время загрузки операционной системы или в тот момент, когда в систему добавляется новое устройство plug-and-play, поддерживающее установку системы без перезагрузки, операционная система Windows 2000 автоматически обнаруживает его и вызывает менеджер plug-and-play. Менеджер plug-and-play запрашивает у устройства название фирмы-производителя и номер модели устройства. Вооружившись данными сведениями, он ищет драйвер для данного устройства в определенном каталоге на жестком диске. Если этого драйвера нет, он отображает диалоговое окно, в котором пользователю предлагается вставить гибкий диск или CD-ROM с драйвером. Когда драйвер обнаружен, он загружается в память.
Каждый драйвер должен поставлять набор процедур, которые могут быть вызваны для получения требуемого обслуживания. Первая процедура, называемая DriverEntry, инициализирует драйвер. Она вызывается сразу после загрузки драйвера. Процедура может создавать таблицы и структуры данных, но не должна обращаться к самому устройству. Она также заполняет некоторые поля объекта драйвера, созданного менеджером ввода-вывода при загрузке драйвера. Поля в объекте драйвера включают указатели на все остальные процедуры, предоставляемые драйвером.
Кроме того, для каждого устройства, управляемого драйвером (например, для каждого диска IDE, управляемого драйвером диска IDE), создается объект устройства и инициализируется так, чтобы он указывал на объект драйвера. При наличии объекта устройства можно легко найти объект драйвера и, таким образом, обращаться к его методам.
Вторая процедура драйвера называется AddDevice. Она вызывается менеджером plug-and-play всего один раз для каждого добавляемого устройства. После этого драйвер вызывается первым пакетом IRP, который устанавливает вектор прерываний и инициализирует аппаратуру. Кроме того, драйвер должен содержать процедуру обработки прерываний, различные процедуры, управляющие таймерами, путь быстрого ввода-вывода, управление DMA, позволять прервать исполняющийся текущий запрос и многое другое.
В Windows 2000 драйвер должен сам выполнять всю работу. С другой стороны, в системе Windows 2000 могут существовать стеки драйверов. Это означает, что запрос может проходить через целую последовательность драйверов, каждый из которых выполняет свою часть работы. Стеки драйверов позволяют отделить управление шиной от управления собственно устройством. Например, управление шиной PCI отличается большой сложностью, что вызвано большим количеством режимов и транзакций шины. Таким образом, отделение управления шиной от управления устройством, подключенным к данной шине, облегчает работу по созданию драйвера. Программисту, пишущему драйвер устройства, более не нужно изучать вопрос управления шиной. Он может просто использовать стандартный драйвер шины, находящийся в стеке драйверов. У драйверов USB и SCSI есть части, специфичные для конкретных устройств, и общая часть, для которой используются отдельные драйверы.
Кроме того, стеки драйверов позволяют добавлять в стек драйверы-фильтры. Фильтрующий драйвер выполняет некоторые преобразования проходящих через них данных. Например, фильтрующий драйвер может сжать данные по пути к диску или зашифровать их по дороге в сеть. Помещение драйверного фильтра в стек драйверов означает, что ни прикладная программа, ни настоящий драйвер устройства не должны знать о присутствии фильтрующего драйвера и что фильтрующий драйвер работает автоматически для всех данных, поступающих с устройства или на устройство.
8.5. Файловые системы Windows 2000
Дата публикования: 2014-11-18; Прочитано: 255 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!