Основы функционирования драйверов в операционных системах Windows. Драйверы внешних устройств
56.Подсистема ввода/вывода. Схема взаимодействия подсистем ос. Понятие драйвера. Типы драйверов.
Подсистема управления вводом-выводом позволяет процессам поддерживать связь с периферийными устройствами, такими как накопители на магнитных дисках и лентах, терминалы, принтеры и сети, с одной стороны, и с модулями ядра, которые управляют устройствами и именуются драйверами устройств, с другой. Между драйверами устройств и типами устройств обычно существует однозначное соответствие: в системе может быть один дисковый драйвер для управления всеми дисководами, один терминальный драйвер для управления всеми терминалами и один ленточный драйвер для управления всеми ленточными накопителями. Драйверы обеспечивают интерфейс между ядром ос Unix и аппаратными частями компьютера (скрыта архитектура). Часть драйвера-доступ к физическим устройствам, другие предоставляют аппар независимые услуги /dev/null. В процессе запуска ос ядро вызывает соответствующий процесс инициализации установленных драйверов. Типы драйверов (различаются возможностями и способами доступа, управления)
Символьные (работа с устройствами, побайтовый доступ и обмен данными для модемов, принтеров, терминалов, доступ не включает использование буферного КЭШа)
Блочные производит обмен данными с устройствами фиксированными порциями, те порциями (например жесткий диск). Используется буферный кэш, он является интерфейсом между файловой системой и устройствами.
Драйвера низкого уровня. Тип интерфейса позволяет производить обмен с блочными устройствами минуя буферный КЭШ. Устройство мб адресовано элементами размер которых не совпадает с размером блока. Обмен данными не зависит от файла подсистемы и буферного КЭШа.
Управляющая схема взаимодействия драйвера устройств с другими подсистемами ОС Unix .
как видно из схемы не все драйверы предназначены для работы с физическими устройствами. Часть служит для предоставления различных услуг ядра прикладным процессам. Такие драйверы программные или драйверы псевдоустройств /dev/kmem. Доступ к виртуальной памяти ядра. Зная адреса внутренней структуры ядра процесс может считывать хранимую там информацию. С помощью драйвера может быть реализована версия утилиты БС которая выводит информацию о версии процесса (/dev/mem доступ к физической памяти, /dev/zero обеспечивает заполнение 0ми определенного буфера. Для инициализации определенной области памяти. Базовая архитектура драйвера Адресуемся старшим номером устройства среди атребут файловых устройств, наряду с другими. Младший номер интерпретируется наряду с драйверами. В то время как доступ к любому разделу производится через старший номер. Младший номер указывает к какому разделу доступ. Доступ к другим осуществляется ядром через структуру данных (коммуникатор устройств) Каждый элемент содержит указатель на соответствующие функции драйвера. Указатели называются точками входа. Старшее число в структуре указатель на коммуникатор (разделяется для блочных и символьных устройств) bde vsw блочные; cdcvew символьные. Ядро размещает отдельный массив для каждого типа коммуникаторов. Любой драйвер имеет доступ в соответствующем массиве. Если драйвер имеет как символьный так и блочный доступ, то точки входа фиксируются и в том и в другом массиве. Коммуникатор определяет интерфейс драйвера устройства. Каждый драйвер обеспечивает соотношение реализаций функций интерфейса. Если драйвер не поддерживает ф-й стандартного интерфейса тогда он заменен соответствующими точками, специальными заглушками, предоставляемыми ядром. Когда ядру надо запросить операц у драйвера устройств, ядро определяет элемент коммуникатора, затем вызывает требуемую функцию.
Имя точки входа XX open () (конкретный драйвер, действие). Соответствует вызову при выполнении каждой операции, открытие устройства. Обеспечивает необходимость реинициализации для физического устранения и внутренних данных драйвера.
Можно выделить 5 основных случаев в которых ядро обращается к функциям драйвера
Автоконфигурация (инициализация ОС Unix)
ВВ/выв запрос на операцию вв/выв прикладных процессов
Обработка прерываний
Специальные запросы
Реинициализация и остальное
Некоторые типы аппаратных архитектур требуют сброса и реинициализации устройств. Вызов при сбросе.
Встраивание драйвера в ядро
Есть два метода встраивания кода и данных драйвера в ядро ос:
Перекопиляция ядра
Динамическая установка драйвера требует выполнения следующих операций: размещение и динамическое связывание драйвера, инициализация драйвера и устройства, добавление т входа драйвера в соответствующий коммутатор устройств. Установка обраб прерывания
Если перекомпиляции не отличаются от компиляции обычной программы, все составляющие ядра являются объектами модуля (для получения исполнительного файла).
Начнем с того, что в операционных системах Windows все физические устройства условно разделяются на две большие группы: поддерживающие технологию PnP или не поддерживаю щие ее. Соответственно, драйверы, поддерживающие технологию PnP, называют WDM драй верами, а драйверы, не поддерживающие эту технологию – NT драйверами. Это весьма упро щенный подход, но при первоначальном изучении данной темы этого достаточно. Оба типа драйверов в своей основе используют одни и те же функции, но WDM драйвер включает ряд дополнительных функций, позволяющих реализовать возможности технологии PnP (установ ка удаление без перезагрузки, управление энергопотреблением и т. д.). Кроме того, для уста новки и обновления WDM драйвера устройства используется стандартный мастер Windows, знакомый всем пользователям (рис. 7.4):
Рис. 7.4
Мастер обновления
WDM драйвера устройства
Для установки/обновления WDM драйвера требуется наличие INF–файла, в котором опи
саны характеристики драйвера (имя файла, место установки, данные о производителе и т. д.).
Для установки NT драйвера INF файл не нужен, но требуется написать программу, позво ляющую с помощью специальных функций WINAPI включить драйвер в систему. То же самое, в принципе, можно сделать и вручную, прописав соответствующие значения ключей в систем ном реестре. Этот тип драйвера используется для работы с устройствами не PnP, а также при написании драйверов, не работающих с каким либо оборудованием. В частности, NT подоб ный драйвер можно использовать при работе с параллельным, последовательным портом, звуковой картой и другими устройствами в системе. Такой драйвер сравнительно несложно написать, что мы и продемонстрируем в последующих примерах.
Основы функционирования драйверов
Драйвер устройства операционной системы – это не обычная программа. Для пользова теля, привыкшего к разработке обычных приложений, технология разработки драйвера пока жется необычной. В драйвере нет точки входа в программу, как например, main в программе на языке C, хотя в момент начальной загрузки операционная система вызывает программу инициализации драйвера, известную под названием DriverEntry. Драйвер устройства можно представить как некий контейнер, в котором содержатся структуры данных и функции, что делает его в некотором смысле похожим на библиотеку динамической компоновки (dll). Обра щение к драйверу при выполнении операций с устройством – это обращение к одной из его функций.
Это весьма упрощенное описание структуры драйвера, но оно дает представление о том, как работает драйвер устройства. Жизненный цикл функционирования драйвера устройства можно разделить (условно) на три этапа:
1) инициализацию;
2) выполнение операций по запросам операционной системы на ввод вывод данных
(Менеджер ввода вывода);
3) остановка и удаление из системы.
Вначале драйвер устройства должен быть проинициализирован. Процесс инициализации в упрощенном виде показан на рис. 7.5:
Рис. 7.5
Схема инициализации драйвера устройства
Драйвер устройства записан на диске в формате файла с расширением.sys. Для опера ционных систем Windows общепринято располагать файлы драйверов в катклоге windows\ system32\drivers, хотя это вовсе не обязательно. Сведения об установленных драйверах хра
нятся в системном реестре Windows в ключе \registry\machine\system\currentcontrolset\ services. Исторически сложилось так, что записи о системных службах и драйверах хранятся в одном и том же разделе реестра (services). Помимо всего прочего записи содержат тип за пуска драйвера – по нему система определяет, когда нужно загружать драйвер. Здесь есть очень важный момент: при испытаниях работоспособности драйвера желательно не инициа лизировать драйвер в момент загрузки системы, иначе можно вообще не загрузиться, если в драйвере имеется какая либо ошибка.
При инициализации драйвера операционная система загружает двоичный образ дискового
файла в защищенную область памяти и передает управление функции DriverEntry. Основная задача этой функции – проинициализировать поля структур DriverObject и DeviceObject и выпол нить привязку устройства к пространству имен операционной системы, чтобы можно было обращаться к устройству из программы пользователя. Кроме этого, здесь же инициализиру ется массив указателей на функции вида IRP_MJ_XXX, где XXX обозначает операцию.
Например, указатель IRP_MJ_CREATE может ссылаться на функцию, которая будет вызы
ваться при создании (открытии) устройства (например, функцией CreateFile() из программы пользователя). Каждый драйвер может включать различные функции, в зависимости от на значения устройства. Например, в устройство можно только записывать данные, но нельзя читать – в этом случае можно не определять функцию для IRP_MJ_READ или сделать ее в виде программной «заглушки».
Как в драйвере выбираются функции, которые должны выполнять в данный момент опе
рацию с устройством? Для этого предусмотрен механизм пакетов запроса ввода вывода (I/O Request Packet, IRP). Например, если программа пользователя выполняет запись данных в устройство при помощи WINAPI функции WriteFile(), то Менеджер ввода вывода операцион ной системы формирует пакет запроса IRP_MJ_WRITE и посылает его драйверу устройства для выполнения. В свою очередь, драйвер устройства вызывает функцию, чей адрес указан при инициализации массива указателей и передает ей управление. Любой NT драйвер, тем не менее, должен обязательно включать обработчики пакетов запроса IRP_MJ_CREATE (откры тие устройства) и IRP_MJ_CLOSE (закрытие устройства).
Пакет запроса IRP содержит необходимые поля и адреса областей памяти, выделенных системой для временного хранения данных при чтении записи. Мы не будем детально рас сматривать структуру IRP, а перейдем к анализу функционирования драйвера.
Взаимодействие драйвера устройства с программой пользователя рассмотрим на приме
ре чтения данных из устройства ввода вывода (рис. 7.6).
На этом рисунке показана в упрощенном виде операция чтения данных устройства из приложения пользователя. Приложение пользователя вызывает функцию ReadFile(), переда вая ей дескриптор открытого устройства. Затем Менеджер ввода вывода, работающий в ре жиме ядра, по дескриптору устройства определяет, для какого драйвера следует формиро вать запрос IRP_MJ_READ и подготавливает пакет запроса. Далее вызывается функция обра ботки, соответствующая полученному запросу, которая выполняет необходимые действия по чтению данных из устройства. Здесь нужно отметить, что даже драйвер никогда не выполняет напрямую операций с портами ввода вывода устройства, а передает управление уровню ап паратных абстракций, реализованному в виде библиотечных функций в библиотеке hal.dll. Фактически здесь «заканчивается» аппаратная «независимость» всех операций и операции проводятся на уровне конкретных аппаратных средств.
После выполнения чтения данных (успешного или нет) в драйвер устройства передаются данные (если есть) и статус выполненной операции. Далее Менеджер ввода вывода транс формирует это в форму, с которой работает приложение и возвращает результат.
Рис. 7.6
Чтение данных из приложения пользователя
Таким образом, мы, в общем, рассмотрели схему работы NT подобного драйвера устрой ства. Здесь не анализируются другие важнейшие аспекты функционирования драйверов (прерывания, потоки, синхронизация очередей и т. д.); заинтересованных читателей могу ото слать к документации, входящей в состав Windows DDK.
Сейчас мы на практике посмотрим, как можно реализовать простые драйверы устройств и, чтобы почувствовать, как это работает, создадим простейший драйвер.
Драйвер устройства - необходим для каждого устройства. Для разных ОС нужны разные драйверы.
Драйверы должны быть частью ядра (в монолитной системе), что бы получить доступ к регистрам контроллера.
Это одна из основных причин приводящих к краху операционных систем. Потому что драйверы, как правило, пишутся производителями устройств, и вставляются в ОС.
Логическое расположение драйверов устройств. На самом деле обмен данными между контроллерами и драйверами идет по шине.
Драйвера должны взаимодействовать с ОС через стандартные интерфейсы.
Стандартные интерфейсы, которые должны поддерживать драйвера:
- Для блочных устройств
- Для символьных устройств
Раньше для установки ядра приходилось перекомпилировать ядра системы.
Сейчас в основном ОС загружают драйверы. Некоторые драйверы могут быть загружены в горячем режиме.
Функции, которые выполняют драйвера:
- обработка запросов чтения или записи
- инициализация устройства
- управление энергопотреблением устройства
- прогрев устройства (сканера)
- включение устройства или запуска двигателя
Конец работы -
Эта тема принадлежит разделу:
Операционная система, процессы, оборудование
Операционная система ос в наибольшей степени определяет облик всей вычислительной системы в целом ос выполняет две по существу мало связанные.. ос как виртуальная расширенная машина использование большинства компьютеров.. с точки зрения пользователя функцией ос является предоставление пользователю некоторой расширенной или виртуальной..
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ:
Что будем делать с полученным материалом:
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Все темы данного раздела:
Особенности аппаратных платформ
На свойства операционной системы непосредственное влияние оказывают аппаратные средства, на которые она ориентирована. По типу аппаратуры различают операционные системы персональных компьютеров, ми
Задачи и упражнения
1. Какие события в развитии технической базы вычислительных машин стали вехами в истории операционных систем?
2. В чем состояло принципиальное отличие первых мониторов пакетной обработки о
Архитектура операционной системы
Любая хорошо организованная сложная система имеет понятную и рациональную структуру, то есть разделяется на части - модули, имеющие вполне законченное функциональное назначение с че
Управление основной памятью
Память представляет собой большой массив слов или байт, каждый из которых имеет собственный адрес. Это хранилище данных, к которым обеспечивается быстрый доступ, распределенный между процессором и
Управление внешней памятью
Поскольку основная память (первичная память) энергозависима и слишком мала для размещения всех данных и программ постоянно, ВС должна обеспечить вторичную память для сохранения основной памяти. Бол
Подсистема управления файлами
Файл представляет собой набор взаимосвязанной информации, определенной при создании. Кроме собственно данных, файлы представляют программы, как в исходном, так и в объектном виде.
Подсисте
Сетевое обеспечение
Распределенная система - набор процессоров, которые не распределяют память или каждый процессор имеет свою локальную память. Процессоры в системе соединены посредством компьютерной сети и обеспечив
Ядро и вспомогательные модули ОС
Наиболее общим подходом к структуризации операционной системы является разделение всех ее модулей на две группы:
ядро - модули ОС, выполняющие основные функции;
Ядро и привилегированный режим
Для надежного управления ходом выполнения приложений операционная система должна иметь по отношению к приложениям определенные привилегии. Иначе некорректно работающее приложение мо
Многослойная структура ОС
Вычислительную систему, работающую под управлением ОС на основе ядра, можно рассматривать как систему, состоящую из трех иерархически расположенных слоев: нижний слой образует аппар
Структура ядра
Средства аппаратной поддержки ОС. До сих пор об операционной системе говорилось как о комплексе программ, но часть функций ОС может выполняться и аппаратными средствами. Поэт
Аппаратная зависимость и переносимость ОС
Многие операционные системы успешно работают на различных аппаратных платформах без существенных изменений в своем составе. Во многом это объясняется тем, что, несмотря на различия
Переносимость операционной системы
Если код операционной системы может быть сравнительно легко перенесен с процессора одного типа на процессор другого типа и с аппаратной платформы одного типа на аппаратную пл
Концепция
Микроядерная архитектура является альтернативой классическому способу построения операционной системы. Под классической архитектурой в данном случае понимается рассмотренная выше структурная органи
Двоичная совместимость и совместимость исходных текстов
Необходимо различать совместимость на двоичном уровне и совместимость на уровне исходных текстов. Приложения обычно хранятся в ОС в виде исполняемых файлов, содержащих двоичные обра
Трансляция библиотек
Выходом в таких случаях является использование так называемых прикладных программных сред. Одной из составляющих, формирующих прикладную программную среду, является набор фун
Способы реализации прикладных программных сред
Создание полноценной прикладной среды, полностью совместимой со средой другой операционной системы, является достаточно сложной задачей, тесно связанной со структурой операционной системы. Существ
Понятие процесса
Процессом называется некоторая деятельность, выполняемая на процессоре. Процессором в широком смысле называется любое устройство в составе ЭВМ, спо
Понятие ресурса
Одной из функций ОС является обеспечение эффективного и бесконфликтного способа управления ресурсами вычислительной системы.
Под ресурсом часто понимается показатель
Концепция виртуализации
Виртуализация того или иного ресурса осуществляется в рамках централизованной схемы распределения ресурсов. Путем виртуализации осуществляются две формы обмана пользователей:
Одноочередные дисциплины обслуживания
а) FIFO (First In -- First Out) – дисциплина обслуживания в порядке поступления. Все заявки поступают в конец очереди. Первыми обслуживаются заявки, находящиеся в начале очереди. Схематическ
Система прерываний
Ситуация, которая возникает в результате воздействия какого-то независимого события, приводящего к временному прекращению выполнения последовательности команд одной программы с цель
Понятие процесса
Процесс(задача) - программа, находящаяся в режиме выполнения.
С каждым процессом связывается его адресное пространство, из которого он может читать и в ко
Модель процесса
В многозадачной системе реальный процессор переключается с процесса на процесс, но для упрощения модели рассматривается набор процессов, идущих параллельно (псевдопараллельно).
Рассмотрим
Завершение процесса
(вызов exit или ExitProcess):
Плановое завершение (окончание выполнения) Плановый выход по известной ошибке (например, отсутствие файла)
Иерархия процессов
В UNIX системах заложена жесткая иерархия процессов. Каждый новый процесс созданный системным вызовом fork, является дочерним к предыдущему процессу. Дочернему процессу достаются от родительского п
Состояние процессов
Три состояния процесса:
Выполнение (занимает процессор) Готовность (процесс временно приостановлен, чтобы позволить выполняться другому процессу) Ожидание (процесс
Понятие потока
Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приход
Модель потока
С каждым потоком связывается:
Счетчик выполнения команд Регистры для текущих переменных Стек Состояние Потоки делят между собой элементы
Преимущества использования потоков
Упрощение программы в некоторых случаях, за счет использования общего адресного пространства. Быстрота создания потока, по сравнению с процессом, примерно в 100 раз. Повышен
Реализация потоков в пространстве пользователя, ядра и смешанное
А - потоки в пространстве пользователя
B
Особенности реализации Windows
Используется четыре понятия:
Задание - набор процессов с общими квотами и лимитами Процесс - контейнер ресурсов (память...), содержит как минимум один поток. Пото
Взаимодействие между процессами
Ситуации, когда приходится процессам взаимодействовать:
Передача информации от одного процесса другому Контроль над деятельностью процессов (например: когда они борются за о
Передача информации от одного процесса другому
Передача может осуществляться несколькими способами:
Разделяемая память Каналы(трубы), это псевдофайл, в который один процесс пишет, а другой читает.
Состояние состязания
Состояние состязания - ситуация когда несколько процессов считывают или записывают данные (в память или файл) одновременно.
Рассмотрим пример, когда два процесса пытаются
Критические области
Критическая область - часть программы, в которой есть обращение к совместно используемым данным.
Условия избегания состязания и эффективной работы процессов:
Два процесса не
Переменные блокировки
Вводится понятие переменной блокировки, т.е. если значение этой переменной равно, например 1, то ресурс занят другим процессом, и второй процесс переходит в режим ожидания (блокируется) до тех пор,
Строгое чередование
В этой модели, процессы могут выполняться строго по очереди, используя переменную.
Примитивы взаимодействия процессов
Вводится понятия двух примитивов.
sleep - системный запрос, в результате которого вызывающий процесс блокируется, пока его не запустит другой процесс.
wak
Семафоры
Семафоры - переменные для подсчета сигналов запуска, сохраненных на будущее.
Были предложены две операции down и up (аналоги sleep и wake
Планирование в системах пакетной обработки
6.2.1 "Первый пришел - первым обслужен" (FIFO - First In Fist Out)
Процессы ставятся в очередь по мере поступления.
Преимущества:
Циклическое планирование
Самый простой алгоритм планирования и часто используемый.
Каждому процессу предоставляется квант времени процессора. Когда квант заканчивается процесс переводится планировщиком в конец оче
Приоритетное планирование
Каждому процессу присваивается приоритет, и управление передается процессу с самым высоким приоритетом.
Приоритет может быть динамический и статический.
Динамичес
Планирование в системах реального времени
Системы реального времени делятся на:
жесткие (жесткие сроки для каждой задачи) - управление движением гибкие (нарушение временного графика не желательны, но допустимы) - уп
Общее планирование реального времени
Используется модель, когда каждый процесс борется за процессор со своим заданием и графиком его выполнения.
Планировщик должен знать:
частоту, с которой должен работать кажд
Взаимоблокировка процессов
Взаимоблокировка процессов может происходить, когда несколько процессов борются за один ресурс.
Ресурсы бывают выгружаемые и невыгружаемые, аппаратные и программные.
Моделирование взаимоблокировок
Моделирование тупиков с помощью графов.
Условные обозначения
На такой модели оч
Обнаружение и устранение взаимоблокировок
Система не пытается предотвратить взаимоблокировку, а пытается обнаружить ее и устранить.
Обнаружение взаимоблокировки при наличии одного ресурса каждого типа
Динамическое избежание взаимоблокировок
В этом способе ОС должна знать, является ли предоставление ресурса безопасным или нет.
Траектории ресурсов
Рассмотрим модель из двух процессов и двух ресурсов
Предотвращение четырех условий, необходимых для взаимоблокировок
Предотвращение условия взаимного исключения
Можно минимизировать количество процессов борющихся за ресурсы.
Например, с помощью спулинга для принтера, когда т
Принципы аппаратуры ввода-вывода
Два нижних уровня системы управления вводом-выводом составляет hardware: сами устройства, непосредственно выполняющие операции, и их контроллеры, служащие для организации совместной работы устройст
Контроллеры устройств
Устройства ввода-вывода обычно состоят из двух частей:
механическая (не надо понимать дословно) - диск, принтер, монитор электронная - контроллер или
Отображаемый на адресное пространство памяти ввод-вывод
Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. При помощи этих регистров ОС управляет (считывает, пишет, включает и т.д.) и определя
Прямой доступ к памяти (DMA - Direct Memory Access)
Прямой доступ к памяти реализуется с помощью DMA - контроллера.
Контроллер содержит несколько регистров:
регистр адреса памяти счетчик байтов
Прерывания
После того как устройство ввода-вывода начало работу, процессор переключается на другие задачи.
Чтобы сигнализировать процессору об окончании работы, устройство инициализирует прерывание,
Задачи программного обеспечения ввода-вывода
Основные задачи, которые должно решать программное обеспечение ввода-вывода:
Независимость от устройств - например, программа, читающая данные из файла не должна задумываться с чего
Программный ввод-вывод
В этом случае всю работу выполняет центральный процессор.
Рассмотрим процесс печати строки ABCDEFGH этим способом.
Управляемый прерываниями ввод-вывод
Если в предыдущем примере буфер не используется, а принтер печатает 100 символов в секунду, то на каждый символ будет уходить 10мс, в это время процессор будет простаивать, ожидая готовности принте
Обработчики прерываний
Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Лучше всего блокировать драйвер, начавший ввод-вывод.
Алго
Независимое от устройств программное обеспечение ввода-вывода
Функции независимого от устройств программного обеспечения ввода-вывода:
Единообразный интерфейс для драйверов устройств, Буферизация Сообщения об ошибках
Обобщение уровней и функций ввода-вывода
Уровни и основные функции системы ввода-вывода
Баз
Блокирующиеся, неблокирующиеся и асинхронные системные вызовы
Все системные вызовы, связанные с осуществлением операций ввода-вывода, можно разбить на три группы по способам реализации взаимодействия процесса и устройства ввода-вывода.
· К первой, на
Буферизация и кэширование
Под буфером обычно понимается некоторая область памяти для запоминания информации при обмене данных между двумя устройствами, двумя процессами или процессом и устройством. Обмен ин
Spooling и захват устройств
О понятии spooling мы говорили в первой лекции нашего курса, как о механизме, впервые позволившем совместить реальные операции ввода-вывода одного задания с выполнением другого зад
Обработка прерываний и ошибок
Если при работе с внешним устройством вычислительная система не пользуется методом опроса его состояния, а задействует механизм прерываний, то при возникновении прерывания, как мы уже
Планирование запросов
При использовании неблокирующегося системного вызова может оказаться, что нужное устройство уже занято выполнением некоторых операций. В этом случае неблокирующийся вызов может немедл
Принципы, заложенные в подсистему управления вводом-выводом в ОС UNIX
1. Эта подсистема построена единообразно с подсистемой управления данными (файловой системой). Пользователю предоставляется унифицированный способ доступа как к ПУ, так и к файлам. Под файлом в ОС
Управление памятью в ОС
4.1. Понятие об организации и управлении физической памятью в операционных системах
4.2. Методы связного распределения основной памяти
4.2.1. Связное распределен
Понятие об организации и управлении физической памятью в операционных системах
Организация и управление основной (первичной, физической, реальной) памятью вычислительной машины - один из важнейших факторов, определяющих построение операционных систем. В англоязычной техническ
Связное распределение памяти для одного пользователя
Связное распределение памяти для одного пользователя, называемое также одиночным непрерывным распределением, применяется в ЭВМ, работающих в пакетном однопрограммном режиме под управлением простейш
Связное распределение памяти при мультипрограммной обработке
При мультипрограммной обработке в памяти компьютера размещается сразу несколько заданий. Распределение памяти между заданиями в этом случае может быть выполнено следующими способами:
· рас
Стратегии размещения информации в памяти
Стратегии размещения информации в памяти предназначены для того, чтобы определить, в какое место основной памяти следует помещать поступающие программы и данные при распределении памяти неперемещае
Основные концепции виртуальной памяти
Термин виртуальная память обычно ассоциируется с возможностью адресовать пространство памяти, гораздо большее, чем емкость первичной (реальной, физической) памяти конкретной вычислительной м
Страничная организация виртуальной памяти
Виртуальный адрес при чисто страничной организации памяти _ это упорядоченная пара (p, d), где p - номер страницы в виртуальной памяти, а d - смещение в рамках страницы p. Процесс может выполняться
Сегментная организация виртуальной памяти
Виртуальный адрес при сегментной организации виртуальной памяти - это упорядоченная пара n = (s, d) , где s - номер сегмента виртуальной памяти, а d - смещение в рамках этого сегмента. Процесс мож
Странично-сегментная организация виртуальной памяти
Системы со странично-сегментной организацией обладают достоинствами обоих способов реализации виртуальной памяти. Сегменты обычно содержат целое число страниц, причем не обязательно, чтобы все стра
Стратегии управления виртуальной памятью
Стратегии управления виртуальной памятью, так же как и стратегии управления физической памятью, разделяются на три категории: стратегии вталкивания, стратегии размещения и стратегии выталкивания.
Стратегии вталкивания (подкачки)
Для управления вталкиванием применяются следующие стратегии:
· вталкивание (подкачка) по запросу (по требованию);
· вталкивание (подкачка) с упреждением (опережением).
Стратегии размещения
В системах со страничной организацией виртуальной памяти решение о размещении вновь загружаемых страниц принимается достаточно просто: новая страница может быть помещена в любой свободный
Стратегии выталкивания
В мультипрограммных системах вся первичная память бывает, как правило, занята. В этом случае программа управления памятью должна решать, какую страницу или какой сегмент следует удалить из первично
Именование файлов
Длина имени файла зависит от ОС, может быть от 8 (MS-DOS) до 255 (Windows, LINUX) символов.
ОС могут различать прописные и строчные символы. Например, WINDOWS и windows для MS-DOS одно и т
Структура файла
Три основные структуры файлов:
1. Последовательность байтов - ОС не интересуется содержимым файла, она видит только байты. Основное преимущество такой системы, это гибкост
Типы файлов
Основные типы файлов:
· Регулярные - содержат информацию пользователя. Используются в Windows и UNIX.
· Каталоги - системные файлы, обеспечивающи
Атрибуты файла
Основные атрибуты файла:
· Защита - кто, и каким образом может получить доступ к файлу (пользователи, группы, чтение/запись). Используются в Windows и UNIX.
· Пароль - пароль к фа
Файлы, отображаемые на адресное пространство памяти
Иногда удобно файл отобразить в памяти (не надо использовать системные вызовы ввода-вывода для работы с файлом), и работать с памятью, а потом записать измененный файл на диск.
При использ
Одноуровневые каталоговые системы
В этой системе все файлы содержатся в одном каталоге.
Од
Имя пути
Для организации дерева каталогов нужен некоторый способ указания файла.
Два основных метода указания файла:
· абсолютное имя пути - указывает путь от корневого ка
Реализация каталогов
При открытии файла используется имя пути, чтобы найти запись в каталоге. Запись в каталоге указывает на адреса блоков диска.
В зависимости от системы это может быть:
· дисковый ад
Реализация длинных имен файлов
Раньше операционные системы использовали короткие имена файлов, MS-DOS до 8 символов, в UNIX Version 7 до 14 символов. Теперь используются более длинные имена файлов (до 255 символов и больше).
Ускорение поиска файлов
Если каталог очень большой (несколько тысяч файлов), последовательное чтение каталога мало эффективно.
1 Использование хэш-таблицы для ускорения поиска файла.
А - совместно используемый файл
Такая файловая система называется ориентированный ациклический граф(DAG, Directed Acyclic Graph).
Возникает проблема, если дисковые адреса содержатся в самих каталоговых з
Размер блока
Если принято решение хранить файл в блоках, то возникает вопрос о размере этих блоков.
Есть две крайности:
· Большие блоки - например, 1Мбайт, то файл даже 1 байт займет целый бло
Учет свободных блоков
Основные два способа учета свободных блоков:
· Связной список блоков диска, в каждом блоке содержится номеров свободных блоков столько, сколько вмешается в блок. Часто для списка резервир
Дисковые квоты
Чтобы ограничить пользователя, существует механизм квот.
Два вида лимитов:
· Жесткие - превышены быть не могут
· Гибкие - могут быть превышены, но при выходе пользователь
Резервное копирование
Случаи, для которых необходимо резервное копирование:
· Аварийные ситуации, приводящие к потере данных на диске
· Случайное удаление или программная порча файлов
Основные
Непротиворечивость файловой системы
Если в системе произойдет сбой, прежде чем модифицированный блок будет записан, файловая система может попасть в противоречивое состояние. Особенно если это блок i-узла, каталога и
Кэширование
Блочный кэш (буферный кэш) - набор блоков хранящиеся в памяти, но логически принадлежащие диску.
Перехватываются все запросы чтения к диску, и проверяется наличие требуемы
Файловая система ISO 9660
Более подробная информация - http://ru.wikipedia.org/wiki/ISO_9660 Стандарт принят в 1988 г.
По стандарту диски могут быть разбиты на логические разделы, но мы будем рассматривать диски с
Каталоговая запись стандарта ISO 9660
Расположение файла - номер начального блока, т.к. блоки располагаются последовательно.
L - длина имени файла в байтах
Имя файла - 8 символов, 3 символа расширения (из-за совместим
Рок-ридж расширения для UNIX
Это расширение было создано, чтобы файловая система UNIX была представлена на CD-ROM.
Для этого используется поле System use.
Расширения содержат следующие поля:
1. PX -
Файловая система UDF (Universal Disk Format)
Более подробная информация - http://ru.wikipedia.org/wiki/Universal_Disk_Format
Изначально созданная для DVD, с версии 1.50 добавили поддержку CD-RW и CD-R.
Сейчас последняя верси
Файловая система MS-DOS (FAT-12,16,32)
В первых версиях был только один каталог (MS-DOS 1.0).
С версии MS-DOS 2.0 применили иерархическую структуру.
Каталоговые записи, фиксированны по 32 байта.
Имена файлов -
Они будут задействованы в Windows 98
Атрибут архивныйнужен для программ резервного копирования, по нему они определяют надо копировать файл или нет.
Поле время (16 разрядов) разбивается на три подполя:
Расширение Windows 98 для FAT-32
Для расширения были задействованы 10 свободных бит.
Форм
Основная надстройка над FAT-32, это длинные имена файлов
Для каждого файла стали присваивать два имени:
1. Короткое 8+3 для совместимости с MS-DOS
2. Длинное имя файла, в формате Unicode
Доступ к файлу может быть получен по люб
Формат каталогов записи с фрагментом длинного имени файла в Windows 98
Поле "Атрибуты" позволяет отличить фрагмент длинного имени (значение 0х0F) от дескриптора файла. Старые программы MS-DOS каталоговые записи со значением поля атрибутов 0х0
Файловая система NTFS
Файловая система NTFS была разработана для Windows NT.
Особенности:
· 64-разрядные адреса, т.е. теоретически может поддерживать 264*216 байт (1 208 925 819 M
Поиск файла по имени
При создании файла, программа обращается к библиотечной процедуре
CreateFile("C:windowsreadmy.txt", ...)
Этот вызов попадает в совместно используемую библиотеку уровня п
Сжатие файлов
Если файл помечен как сжатый, то система автоматически сжимает при записи, а при чтении происходит декомпрессия.
Алгоритм работы:
1. Берутся для изучения первые 16 блоков файла (н
Шифрование файлов
Любую информацию, если она не зашифрована, можно прочитать, получив доступ. Поэтому самая надежная защита информации от несанкционированного доступа - шифрование.
Даже если у вас украдут в
Файловая система UNIX V7
Хотя это старая файловая система основные элементы используются и современных UNIX системах.
Особенности:
· Имена файлов ограничены 14 символами ASCII, кроме косой черты "/&q
Структура i-узела
Поле
Байты
Описание
Mode
Тип файла, биты защиты, биты setuid и setgid
Nlinks
Создание и работа с файлом
fd=creat("abc", mode) - Пример создания файла abc с режимом защиты, указанном в переменной mode(какие пользователи имеют доступ). Используется системный
Файловая система BSD
Основу составляет классическая файловая система UNIX.
Особенности (отличие от предыдущей системы):
· Увеличена длина имени файла до 255 символов
· Реорганизованы каталоги
Размещение файловой системы EXT2 на диске
Другие особенности:
· Размер блока 1 Кбайт
· Размер каждого i-узла 128 байт.
· i-узел содержит 12 прямых и 3 косвенных адресов, длина адреса в i-узле стала 4 байта, что о
Файловая система EXT3
В отличие от EXT2, EXT3 является журналируемой файловой системой, т.е. не попадет в противоречивое состояние после сбоев. Но она полностью совместима с EXT2.
Файловая система XFS
XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).
Официальная информация на http://oss.sgi.com/projec
Файловая система RFS
RFS (RaiserFS)- журналируемая файловая система разработанная Namesys.
Официальная информация на RaiserFS
Некоторые особенности:
· Более эффективно работа
Файловая система JFS
JFS (Journaled File System) -журналируемая файловая система разработанная IBM для ОС AIX, но сейчас выпущенная как открытый код.
Официальная информация на Journaled File S
Структура уровней файловой системы NFS
VFS (Virtual File System) - виртуальная файловая система. Необходима для управления таблицей открытых файлов.
Записи для каждого открытого файла называются v-узлам
1.5 Структура драйвера устройства Windows
Все драйверы устройств Windows имеют одинаковую структуру. Каждый драйвер имеет объект драйвера, который создается диспетчером ввода-вывода при загрузке драйвера. В разделе 1.4 представлены структуры данных, которые относятся к драйверам устройств, в том числе и объекты драйверов. В этом разделе описываются процедуры, реализуемые драйвером, а также другие характеристики драйвера устройства хранения данных.
Драйвер устройства Windows реализует множество стандартных процедур, причем некоторые из них обязательны для выполнения, а некоторые – нет, что зависит от свойств драйвера. Ниже перечислены основные стандартные процедуры.
Обязательная процедура инициализации , которая используется драйвером для подготовки рабочего окружения и собственной инициализации, а также для настройки объектов устройств (в том числе их подключения в соответствующие цепочки стека драйверов). Эта процедура вызывается диспетчером ввода-вывода при загрузке драйвера.
Обязательный набор процедур диспетчеризации для обеспечения работы определенных функций, например чтения, записи, создания и закрытия файлов. Эти процедуры вызываются диспетчером ввода-вывода и получают в качестве параметра пакет запроса ввода-вывода.
Необязательная процедура запуска (startup routine – StartIO), которая инициирует ввод-вывод данных на физическое устройство. Очевидно, что только драйверы, работающие непосредственно с физическими устройствами (это касается не всех драйверов такого типа), требуют наличия такой процедуры.
Необязательная процедура обслуживания прерывания (interrupt service routine – ISR). Может использоваться драйверами, взаимодействующими с физическими устройствами. Процедуры обслуживания прерываний рассматриваются в разделе 1.5.1.
Необязательный отложенный вызов процедуры " (deferred procedure call – DPC), который может использоваться драйвером для дополнительной обработки процедуры обслуживания прерывания. Отложенный вызов процедуры рассматривается в разделе 1.5.2.
Необязательная процедура завершения, которая вызывается диспетчером ввода-вывода (в качестве механизма уведомления), когда драйвер более низкого уровня завершает обработку пакета запроса ввода-вывода. Поскольку вся операция ввода-вывода обрабатывается в качестве асинхронной, процедура завершения используется довольно часто, особенно в высокоуровневых драйверах, которые всегда обеспечивают обработку пакетов IRP более низкого уровня.
Обязательная процедура выгрузки, которая вызывается диспетчером ввода-вывода для выгрузки драйвера.
Необязательная процедура отмены (cancellation routine – CancellO), которая вызывается диспетчером ввода-вывода для отмены выполнения длительной операции.
Обязательная процедура уведомления об отключении системы, которая вызывается диспетчером ввода-вывода для уведомления драйвера о необходимости быстрого завершения работы, когда пользователь обращается с запросом о завершении работы системы.
Необязательная процедура протоколирования ошибок.
Обработка пакета запроса ввода-вывода совершается драйвером различными способами, в зависимости от структуры драйвера и запроса ввода-вы- вода в пакете. Ниже приведены некоторые примеры работы драйвера.
Выполнение запрошенной операции и завершение обработки IRP.
Выполнение элемента операции и передача IRP драйверу более низкого уровня.
Обычная передача IRP драйверу более низкого уровня.
Генерация нескольких пакетов IRP для драйвера более низкого уровня в ответ на получение одного пакета IRP. Например, в ответ на запрос об открытии файла, поступивший от драйвера NTFS, драйверу может потребоваться считать метаданные файла для поиска каталога и подкаталогов, в которых расположен необходимый файл.
Обычно драйверы получают доступ к своей области стека в пакете IRP, а также к области стека следующего драйвера. Самый нижний драйвер в цепочке стека получает доступ только к своему фрагменту стека в пакете IRP. Драйвер отвечает за изменение указателя в пакете IRP, который указывает на область стека, используемую следующим драйвером.
Обратите внимание, что один и тот же код драйвера может одновременно выполняться на разных центральных процессорах в одной системе Windows NT. Код драйвера должен обладать возможностью синхронизировать доступ к критическим данным кода, выполняемого на разных процессорах. Иногда повторное выполнение одного запроса может стать просто катастрофой, например при записи на магнитную ленту одних и тех же данных повторно.
1.5.1 Процедура обслуживания прерывания
Процедура обслуживания прерывания (interrupt service routine – ISR) обычно выполняется в ответ на получение прерывания от аппаратного устройства и может вытеснять любой код с более низким приоритетом. Процедура обслуживания прерывания должна использовать минимальное количество операций, чтобы центральный процессор имел свободные ресурсы для обслуживания других прерываний. Эта процедура собирает минимум необходимой информации и размещает в очереди вызов отложенной обработки (deffered processing call – DPC) для завершения обслуживания прерывания. Запуск вызова отложенной обработки не планируется на определенное время, т.е. вызов может быть запущен как немедленно, так и немного позднее, в зависимости от необходимости в другой обработке.
Для того чтобы обеспечить постоянную доступность процедуры обслуживания прерывания, процедуры никогда не выгружаются на жесткий диск. Процедура обслуживания прерывания может быть прервана процедурой обслуживания прерывания с более высоким приоритетом, но ее никогда нельзя вытеснить другим кодом, например вызовом отложенной обработки.
Процедура обслуживания прерывания обычно необходима драйверам, которые работают с аппаратным обеспечением, например с накопителем на магнитной ленте или жестким диском. Чаще всего, драйверы, которые обеспечивают работу некоторых программных функций, например драйверы файловой системы или фильтрации, не используют процедуру обслуживания прерывания.
1.5.2 Вызов отложенной обработки
При запуске от процедуры обслуживания прерывания требуется быстрое и эффективное выполнение поставленной задачи. Таким образом, процедура обслуживания прерывания проводит минимум операций и размещает в очереди запрос на вызов отложенной обработки , который используется для завершения оставшихся операций с низким уровнем приоритета (эти уровни обычно называются IRQ или IRQL). Вызов отложенной обработки может быть размещен в очереди не только из процедуры обработки прерывания. Запрос к очереди создает новый объект вызова отложенной обработки (средствами диспетчера объектов). После размещения в очереди создается аппаратный запрос на прерывание (IRQ level 2) для вызова отложенной обработки.
Ниже описаны некоторые важные свойства вызова отложенной обработки.
Вызов отложенной обработки может быть прерван другой процедурой обработки прерывания, однако никогда не может быть вытеснен кодом пользовательского режима.
Вызов отложенной обработки не должен приводить к ошибке обращения к странице, поэтому вся память, используемая вызовом отложенной обработки, должна быть заблокирована для выгрузки.
Вызов отложенной обработки не должен выполнять блокирующие действия, например блокирующий ввод-вывод.
Вызов отложенной обработки напоминает процедуру обработки прерывания, поскольку также должен выполняться быстро и эффективно. Для минимизации нагрузки на систему при планировании вызовов отложенной обработки Windows NT перед передачей управления DPC сохраняет минимальную информацию о состоянии. После завершения DPC восстановление состояния также занимает мало времени, так как при передаче управления сохранялся минимум информации. В результате DPC может выполняться в контексте произвольного процесса. Например, если программа Excel выполняется в виде процесса и запускает процедуру ввода-вывода, вызов отложенной обработки (если он потребуется) может запускаться в контексте процессов Word или PowerPoint (а не обязательно в контексте процесса Excel).
Каждый процесс имеет собственную очередь вызовов отложенной обработки. Таким образом, многопроцессорный компьютер с четырьмя центральными процессорами будет иметь четыре отдельных очереди DPC. Вызов отложенной обработки может иметь высокий, средний и низкий приоритет; по умолчанию присваивается средний приоритет. Драйвер может изменить значение приоритета. Вызов отложенной обработки
с высоким приоритетом размещается в начало очереди, a DPC с низким и средним приоритетом – в конец очереди.
Обычно вызов отложенной обработки выполняется на том же процессоре, что и процедура обслуживания прерывания, что можно изменить с помощью драйвера.
Если драйвер уже поместил DPC в очередь, следующий запрос на размещение DPC в очереди просто игнорируется. При выполнении DPC выясняется, существует ли несколько рабочих элементов, например, при многократной обработке прерываний, когда каждое прерывание требует наличия отдельного рабочего элемента.
Вызов отложенной обработки может быть размещен в очереди другого процессора, если очередь DPC текущего процессора превышает определенное значение. Ядро Windows NT периодически пытается выполнить вызов отложенной обработки, генерируя программные прерывания.
Вызов отложенной обработки не может быть выгружен на диск.
1.5.3 Асинхронный вызов процедуры
Асинхронный вызов процедуры (asynchronous procedure call – АРС) немного похож на вызов отложенной обработки, но существуют и заметные различия. Как и вызов отложенной обработки, АРС выполняется на уровне привилегий, превышающем уровень привилегий обычного кода. В отличие от вызова отложенной обработки, выполняемого в контексте произвольного процесса, асинхронный вызов процедуры всегда выполняется в контексте определенного процесса. Таким образом, асинхронный вызов процедуры требует больших затрат, чем вызов отложенной обработки, так как приходится сохранять и восстанавливать большее количество параметров. Читателю, знакомому с операционными системами UNIX, асинхронные вызовы процедур напомнят процедуры обработки сигналов UNIX.
Существует два типа АРС: вызов в режиме ядра и вызов в пользовательском режиме. Асинхронный вызов процедуры в режиме ядра связан с драйвером или другим кодом режима ядра и обычно используется для передачи данных, например для копирования данных из буфера ядра в пользовательский буфер. Помните, что пользовательский буфер должен быть доступен в контексте процесса, который владеет буфером.
Код пользовательского режима тоже может использовать асинхронный вызов процедур. Для этого необходим прикладной интерфейс программирования QueueUserAPC, который рассматривается в документации к набору Platform SDK. Асинхронные вызовы процедур в пользовательском режиме предоставляются только тогда, когда поток получает предупреждение, например при блокировании в результате вызова функций WaitForSingleObject или WaitForMultipleObject. Подробная информация об этих функциях доступна в документации Platform SDK. Достаточно сказать, что эти функции позволяют организовать синхронизацию потоков.
Асинхронный вызов процедуры может быть блокирующим, например для выполнения специального ввода-вывода. Вызовы помещаются в очередь, соответствующую потоку, т.е. существует несколько очередей асинхронных вызовов процедур.