Windows операционную система устройства ввода вывода

Система ввода-вывода в Windows

На данный момент наиболее распространены два семейства ОС Windows: Windows NT, куда относятся Windows NT, 2000, XP, и Windows 9x (Win 95, 98, ME). При этом отмечается тенденция к отмиранию ветки 9х, хотя такие системы будут встречаться еще достаточно долго. Каждая ветка использует свою архитектуру ядра и подсистемы ввода-вывода. Поэтому естественно, написание драйверов для этих систем должно отличаться.

В Windows 9x долгое время использовались .vxd — драйвера. Эта модель драйверов начинает свою историю еще с Windows 3.1. Для .vxd — драйверов сохранилась совместимость «снизу вверх»: т.е. драйвер, написанный под Windows 3.1, будет нормально работать и под Windows 95, а может быть, и 98. Функции драйверов .vxd используются как Win32, так и Win16 приложениями.

В Windows NT 4.0 появилась своя архитектура драйверов. Она ставила перед собой цели повышения устойчивости работы драйвера, переносимости с одной платформы на другую, поддержки многопроцессорности т.п. Вместе с тем архитектура драйверов Windows NT 4.0 была, что называется, «сырой» и недоработанной, хотя и очень перспективной. С выходом систем Win98 и Win2000 появилась новая архитектура драйверов — WDM (Windows Driver Model). Она развилась из архитектуры драйверов Windows NT 4.0 с небольшими изменениями. WDM — драйвера с равным успехом могут быть использованы как в Win 98, так и в Win 2000.

Система Win 98 состоит как бы из двух слоев: User Mode (режим пользователя) и Kernel Mode (режим ядра). В режиме пользователя функционируют пользовательские приложения. Они работают в 3-м кольце защиты; каждая программа работает в своем виртуальном адресном пространстве. Для каждого DOS или Windows — приложения создается своя виртуальная машина (Virtual Machine, VM), задачей которой является виртуализация аппаратуры компьютера для данного приложения. Т.е. каждое приложение считает, что вся оперативная память и все остальные аппаратные ресурсы принадлежат только ему и приложение может обратиться к ним в любой момент. Ядро ОС содержи диспетчер виртуальных машин (Virtual Machine Manager, VMM). Задача VMM — корректно разрешать конфликты, возникающие при доступе к ресурсам системы из разных VM. Ядро, VMМ, виртуальные машины и драйвера виртуальных устройств (Virtual Device Drivers), естественно, работают в режиме ядра (Kernel Mode).


Рис. 1. Подсистема ввода-вывода Win 98.

В Windows 98 обработка запросов на ввод-вывод от приложений DOS и от старых Win16 — приложений отличается от обработки запросов новых Win32 — приложений. Для DOS — приложений создается своя виртуальная машина (DOS virtual machine), Win 16 и Win32 — приложения используют виртуальную машину Windows (System Virtual Machine). Обычно, когда приложение запрашивает операцию ввода-вывода (например, вызывает функцию API ReadFile — чтение из файла), этот запрос поступает в одну из системных DLL (в нашем случае — kernel32.dll). Оттуда запрос на операцию с внешним устройством передается сразу системным драйверам. Такая организация запроса Приложение -> dll -> Драйвер получила наибольшее распространение.

Система Windows 2000 имеет другую архитектуру, отличную от Win98. Это обусловлено повышенными требованиями к надежности, защите и переносимости этой системы (теоретически, Win2000 — переносимая система, и существуют реализации Win2000 под системы Alpha, MIPS и др.). В настоящее время именно благодаря этим особенностям Win2000 завоевывает все большую популярность, поэтому стоит рассмотреть особенности ее архитектуры подробнее.


Рис. 2 — главные компоненты Windows2000.

Окружение Win2000 включает компоненты, которые работают в режиме пользователя (User mode) и в режиме ядра (Kernel mode). В режиме пользователя работают подсистема защиты, подсистема Win32-архитектуры (обеспечивает стандартные API — вызовы Windows), подсистема POSIX (обеспечение кроссплатформенности). В режиме ядра работают все основные компоненты системы: диспетчер ввода-вывода (I/O manager), диспетчер конфигурации (Configuration Manager), подсистема PnP, диспетчер управления энергопотреблением (Power Manager), диспетчер памяти (Memory Manager) и прочие жизненно необходимые службы. Драйвера в Win2000 включены в подсистему ввода-вывода. При этом драйвера тесно взаимодействуют практически со всеми компонентами ядра. Драйвера взаимодействуют с аппаратурой при помощи Hardware Abstraction Level, HAL (уровень абстракции аппаратуры). HAL — программный компонент ядра Win2000, который обеспечивает интерфейс ядра (в том числе и некоторых драйверов) с аппаратурой. Т.к. Win2000 — платформенно независимая система (уже сейчас есть версии Win2000 для процессоров Alpha и RISC), то HAL избавляет ядро от непосредственного общения с кэшем, прерываниями, шинами ввода-вывода и большинством прочих устройств, оставляя эту работу драйверам, специально написанным для данной системы. Таким образом, ядро системы представляется набором отдельных изолированных модулей с четко определенными внешними интерфейсами.

Читайте также:  Разблокировка windows при помощи iphone

Все драйвера NT имеют множество стандартных методов драйвера, определенных системой, и, возможно, несколько специфических методов, определенных разработчиком. Драйвера Windows 2000 используют архитектуру WDM (Windows Driver Model). В Windows 2000 драйвера бывают следующих типов:

  • Kernel mode drivers (драйверы режима ядра). Основной тип драйвера. Такие драйвера используются для решения общих задач: управление памятью, шинами, прерываниями, файловыми системами, устройствами хранения данных и т.п.
  • Graphics drivers (драйверы видеокарт). Как правило, создаются одновременно с самой видеокартой. Очень сложны в написании, так как должны учитывать множество противоречивых требований и поддерживать множество стандартов. Скорее всего, вам не потребуется создавать ничего подобного.
  • Multimedia drivers (мультимедиа-драйверы). Драйверы для :
    • Аудиоустройств — считывание, воспроизведение и компрессия аудиоданных.
    • устройств работы с видео — захват и компрессия видеоданных.
    • позиционных устройств — джойстики, световые перья, планшеты и пр.
  • Network drivers (сетевые драйвера) — работа с сетью и сетевыми протоколами на всех уровнях.
  • Virtual DOS Drivers — драйверы для виртуальных машин MS-DOS. Постепенно переходят в раздел рудиментарных.

В свою очередь, существует три типа драйверов ядра, каждый тип имеет четко определенные структуру и функциональность.

  • Device drivers (драйвера устройств), такие как драйвер клавиатуры или дисковый драйвер, напрямую общающийся с дисковым контроллером. Эти драйвера также называются драйверами низкого уровня, т. к. они находятся в самом низу цепочки драйверов Windows NT.
  • Intermediate drivers (промежуточные драйвера), такие как драйвер виртуального или зеркального диска. Они используют драйверы устройств для обращения к аппаратуре.
  • File system drivers (FSDs). Драйверы файловых систем, таких как FAT, NTFS, CDFS, для доступа к аппаратуре используют Intermediate drivers и Device drivers.

Драйвера Windows 2000 должны удовлетворять следующим требованиям:

  • Переносимы с одной платформы на другую.
  • Конфигурируемые программно.
  • Всегда прерываемые.
  • Поддерживающие мультипроцессорные платформы.
  • Объектно-ориентированные.
  • Поддерживать пакетный ввод-вывод с использванием I/O request packets (IRPs, запросы ввода-вывода).
  • Поддерживать асинхронный ввод-вывод.

Система ввода-вывода Windows 2000 имеет следующие особенности:

Система ввода вывода, оперативная память компьютера.

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

Система ввода вывода

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

Основные компоненты подсистемы ввода/вывода:

  1. Драйверы.
  2. Файловая система.
  3. Диспетчер прерываний.

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

  • Организация параллельной работы устройств ввода/вывода и процессора.
  • Согласование скоростей обмена и кэширование данных.
  • Разделение устройств и данных между процессорами.
  • Обеспечение удобного логического интерфейса между устройствами и остальной частью системы.
  • Поддержка широкого спектра драйверов с возможностью включения в систему нового драйвера.
  • Динамическая загрузка и выгрузка драйверов.
  • Поддержка нескольких файловых систем.
  • Поддержка синхронных и асинхронных операций ввода/вывода.

Организация параллельной работы устройств ввода/вывода и процессора

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

Читайте также:  Где взять драйвера для windows 10 при установке

Контроллер периодически принимает от драйвера выводимую на устройство информацию, а также команды управления, которые говорят о том, что с этой информацией нужно сделать. Под руководством контроллера устройство может выполнять некоторое время свои операции автономно, не требуя внимания со стороны ЦП. Это время зависит от многих факторов – объема выводимой информации, степени интеллектуальности управляющего устройством контроллера, быстродействия устройства и т.п. Даже самый примитивный контроллер, выполняющий простые функции, обычно тратит довольно много времени на реализацию подобной функции после получения очередной команды от процессора. Это же справедливо и для сложных контроллеров, т.к. скорость работы любого устройства ввода/вывода обычно существенно ниже скорости работы процессора.

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

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

Согласование скоростей обмена и кэширование данных

Накопители на магнитных дисках обладают крайне низкой скоростью по сравнению с быстродействием центральной части компьютера: средняя скорость работы процессора с ОП на 2-3 порядка выше, чем средняя скорость передачи данных из внешней памяти в ОП.

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

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

Часто в качестве буфера используют используется дисковый файл, называемый также спул-файлом (spool – шпулька).

Пример. Организация вывода данных на принтер.

Другое решение этой проблемы – использование большой буферной памяти в контроллерах внешних устройств. Такой подход особенно полезен в тех случаях, когда помещение данных на диск слишком замедляет обмен (или когда данные выводятся на сам диск).

Пример. Буферная память в контроллерах графических дисплеев.

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

Разделение устройств и данных между процессами

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

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

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

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

Читайте также:  Расширенные настройки поиска windows

Пример.

PRN, LPT1 – для порта принтера, CON – для клавиатуры (символьные имена, а для ОС – это файлы).

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

Достоинством подсистемы ввода/вывода любой универсальной ОС является наличие разнообразного набора драйверов для наиболее популярных периферийных устройств.

Прекрасно спланированная и реализованная ОС может потерпеть неудачу на рынке только из-за того, что в ее состав не включен достаточный набор драйверов и администраторы и пользователи вынуждены искать нужный им драйвер или заниматься его разработкой (первые версии OS/2).

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

Драйвер взаимодействует, с одной стороны, с модулями ядра ОС (модулями подсистемы ввода-вывода, модулями системных вызовов, модулями подсистем управления процессами и памятью), а с другой стороны – с контроллерами внешних устройств. Поэтому существует два типа интерфейсов:

  1. Интерфейс «драйвер-ядро».
  2. Интерфейс «драйвер-устройство».

Для поддержки процесса разработки драйверов ОС обычно выпускается так называемый пакет DDK (Driver Development Kit), представляющий собой набор соответствующих инструментальных средств – библиотек, компиляторов и отладчиков.

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

Поддержка нескольких файловых систем

Пользовательские и системные файлы хранятся на дисках. Эти данные организуются в файловые системы. Свойства файловой системы во многом определяют свойства самой ОС: отказоустойчивость, быстродействие, максимальный объем хранимых данных.

Файловая система – подсистема ОС, определяющая способ организации данных на диске.

Файловая система отвечает за выполнение следующих действий:

  1. Создание, уничтожение, организацию, чтение, запись, модификацию и перемещение файловой информации.
  2. За управление доступом к файлам и за управление ресурсами, которые используются файлами.

Популярность файловой системы часто приводит к ее «миграции» из «родной» ОС в другие ОС.

Файловая система FAT появилась первоначально в MS-DOS, затем была реализована в OS/2, в семействе MS Windows и многих реализациях UNIX.

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

Слой VFS (Virtual File System) в версиях UNIX на основе кода System V Release 4.

Поддержка синхронных и асинхронных операций ввода-вывода

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

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

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

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

Оцените статью