Слайд 1ВТ
Устройства ввода-вывода
Организация прерываний
Слайд 3Устройства ввода-вывода
Все устройства разделяются на следующие уровни:
Физические устройства - аппаратные
устройства, которые подсоединены к системе различными способами
Порты - физические коннекторы/адаптеры,
через которые подсоединены к системе физические устройства. Многие порты являются программируемыми с помощью системного программного обеспечения, чтобы обеспечить возможность подключения различных типов физических устройств.
Драйверы устройств - программное обеспечение ядра, с помощью которого контролируется активность портов и определяется формат передаваемых в устройства данных.
Логические устройства - программный интерфейс (специальные файлы) которые являются виртуальным представлением физических устройств для пользователей и программ.
Слайд 4Все логические устройства делятся на два типа:
Блок-ориентированные устройства - устройства
с произвольным доступом. Обычно это дисковые файловые системы. Осуществляют ввод/вывод
большими порциями (блоками). Блок-ориентированные устройства хранят информацию в блоках фиксированного размера, каждый из которых имеет свой собственный адрес.
Байт-ориентированные устройства - устройства не адресуемы и не позволяют производить операцию поиска, они генерируют или потребляют последовательность байтов. Примерами являются терминалы, строчные принтеры, сетевые адаптеры.
Слайд 5Примеры
Примеры блок-ориентированных устройств:
cd0 CD-ROM
fd0, fd0l, fd0h Дискета
hd1, lv00 Логический том
hdisk0
Физический том
Примеры байт-ориентированных устройств:
console, lft, tty0 Терминал
lp0 Принтер
rmt0 Ленточное устройство
tok0,
ent0 Адаптер
kmem, mem, null Память
rfd0, rfd0l, rfd0h Дискета
rhd1, rlv00 Логический том
rhdisk0 Физический том
Слайд 6Управление вводом-выводом
Одной из главных функций ОС является управление всеми устройствами
ввода-вывода компьютера.
ОС должна передавать устройствам команды, перехватывать прерывания и
обрабатывать ошибки;
ОС также должна обеспечивать интерфейс между устройствами и остальной частью системы.
В целях развития интерфейс должен быть одинаковым для всех типов устройств (независимость от устройств).
Слайд 7Внешнее устройство обычно состоит из механического и электронного компонента
Электронный компонент
называется контроллером устройства или адаптером.
Механический компонент представляет собственно устройство.
Некоторые контроллеры могут управлять несколькими устройствами. Если интерфейс между контроллером и устройством стандартизован, то независимые производители могут выпускать совместимые как контроллеры, так и устройства.
Слайд 8Операционная система обычно имеет дело не с устройством, а с
контроллером
Слайд 9Функции контроллера
преобразует поток бит в блоки, состоящие из байт
осуществляют контроль
и исправление ошибок.
Каждый контроллер имеет несколько регистров, которые используются
для взаимодействия с центральным процессором.
Слайд 10Структура контроллера устройства
Контроллеры устройств ввода-вывода весьма различны как по своему
внутреннему строению, так и по исполнению (от одной микросхемы до
специализированной вычислительной системы со своим процессором, памятью и т. д.), поскольку им приходится управлять совершенно разными приборами
Обычно каждый контроллер имеет по крайней мере четыре внутренних регистра, называемых регистрами состояния, управления, входных данных и выходных данных.
Разумеется, набор регистров и составляющих их битов приблизителен, он призван послужить нам моделью для описания процесса передачи информации от вычислительной системы к внешнему устройству и обратно, но в том или ином виде он обычно присутствует во всех контроллерах устройств
Слайд 11Регистр состояния
содержит биты, значение которых определяется состоянием устройства ввода-вывода
и которые доступны только для чтения вычислительной системой. Эти биты
индицируют завершение выполнения текущей команды на устройстве (бит занятости), наличие очередного данного в регистре выходных данных (бит готовности данных), возникновение ошибки при выполнении команды (бит ошибки) и т.д.
Слайд 12Регистр управления
получает данные, которые записываются вычислительной системой для инициализации
устройства ввода-вывода или выполнения очередной команды, а также изменения режима
работы устройства. Часть битов в этом регистре может быть отведена под код выполняемой команды, часть битов будет кодировать режим работы устройства, бит готовности команды свидетельствует о том, что можно приступить к ее выполнению
Слайд 13Регистр выходных /вХОДНЫХ данных
Регистр выходных данных служит для помещения
в него данных для чтения вычислительной системой.
Регистр входных данных предназначен
для помещения в него информации, которая должна быть выведена на устройство.
Обычно емкость этих регистров не превышает ширину линии данных (а чаще всего меньше ее).
Слайд 15для вывода информации, помещающейся в регистр входных данных, без проверки
успешности вывода процессор и контроллер должны связываться следующим образом
Процессор в
цикле читает информацию из порта регистра состояний и проверяет значение бита занятости. Если бит занятости установлен, то это означает, что устройство еще не завершило предыдущую операцию, и процессор уходит на новую итерацию цикла. Если бит занятости сброшен, то устройство готово к выполнению новой операции, и процессор переходит на следующий шаг.
Процессор записывает код команды вывода в порт регистра управления.
Процессор записывает данные в порт регистра входных данных.
Процессор устанавливает бит готовности команды. В следующих шагах процессор не задействован.
Когда контроллер замечает, что бит готовности команды установлен, он устанавливает бит занятости.
Контроллер анализирует код команды в регистре управления и обнаруживает, что это команда вывода. Он берет данные из регистра входных данных и инициирует выполнение команды.
После завершения операции контроллер обнуляет бит готовности команды.
При успешном завершении операции контроллер обнуляет бит ошибки в регистре состояния, при неудачном завершении команды – устанавливает его.
Контроллер сбрасывает бит занятости.
Слайд 16При необходимости вывода новой порции информации все эти шаги повторяются.
Если процессор интересует, корректно или некорректно была выведена информация, то
после шага 4 он должен в цикле считывать информацию из порта регистра состояний до тех пор, пока не будет сброшен бит занятости устройства, после чего проанализировать состояние бита ошибки
Слайд 17polling
Как видим, на первом шаге (и, возможно, после шага 4)
процессор ожидает освобождения устройства, непрерывно опрашивая значение бита занятости. Такой
способ взаимодействия процессора и контроллера получил название polling или, в русском переводе, способа опроса устройств.
Слайд 18Механизм прерываний
Для того чтобы процессор не дожидался состояния готовности устройства
ввода-вывода в цикле, а мог выполнять в это время другую
работу, необходимо, чтобы устройство само умело сигнализировать процессору о своей готовности.
Технический механизм, который позволяет внешним устройствам оповещать процессор о завершении команды вывода или команды ввода, получил название механизма прерываний.
Слайд 19Понятие прерывания
Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события.
При этом выполнение текущей последовательности команд приостанавливается и управление передаётся
обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код
Слайд 20В зависимости от источника возникновения сигнала прерывания делятся на следующие
классы
асинхронные или внешние (аппаратные) — события, которые исходят от внешних источников
(например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ);
синхронные или внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции;
программные (частный случай внутреннего прерывания, исключительные ситуации) — инициируются исполнением специальной инструкции в коде программы. Программные прерывания как правило используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы.
Слайд 21Механизм прерываний
Устройства сообщают о своей готовности процессору не напрямую, а
через специальный контроллер прерываний, при этом для общения с процессором
он может использовать не одну линию, а целую шину прерываний.
Каждому устройству присваивается свой номер прерывания, который при возникновении прерывания контроллер прерывания заносит в свой регистр состояния.
Номер прерывания обычно служит индексом в специальной таблице прерываний, хранящейся по адресу, задаваемому при инициализации вычислительной системы, и содержащей адреса программ обработки прерываний – векторы прерываний.
Для распределения устройств по номерам прерываний необходимо, чтобы от каждого устройства к контроллеру прерываний шла специальная линия, соответствующая одному номеру прерывания.
Слайд 22Организация программного обеспечения ввода-вывода
Основная идея организации программного обеспечения ввода-вывода состоит
в разбиении его на несколько уровней, причем нижние уровни обеспечивают
экранирование особенностей аппаратуры от верхних, а те, в свою очередь, обеспечивают удобный интерфейс для пользователей.
Слайд 23Для внешних прерываний характерны следующие особенности
Внешнее прерывание обнаруживается процессором между
выполнением команд (или между итерациями в случае выполнения цепочечных команд).
Процессор
при переходе на обработку прерывания сохраняет часть своего состояния перед выполнением следующей команды.
Прерывания происходят асинхронно с работой процессора и непредсказуемо, программист никоим образом не может предугадать, в каком именно месте работы программы произойдёт прерывание.
Слайд 24В зависимости от возможности запрета внешние прерывания делятся на:
маскируемые — прерывания,
которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний
немаскируемые
(англ. Non maskable interrupt, NMI) — обрабатываются всегда, независимо от запретов на другие прерывания. К примеру, такое прерывание может быть вызвано сбоем в микросхеме памяти.
Слайд 25Исключительные ситуации
Исключительные ситуации возникают во время выполнения процессором команды
К их
числу относятся ситуации переполнения, деления на ноль, обращения к отсутствующей
странице памяти и т. д.
Слайд 26Для исключительных ситуаций характерно следующее.
Исключительные ситуации обнаруживаются процессором во время
выполнения команд.
Процессор при переходе на выполнение обработки исключительной ситуации сохраняет
часть своего состояния перед выполнением текущей команды.
Исключительные ситуации возникают синхронно с работой процессора, но непредсказуемо для программиста, если только тот специально не заставил процессор делить некоторое число на ноль.
Слайд 27Программные прерывания. Свойства:
Программное прерывание происходит в результате выполнения специальной команды.
Процессор
при выполнении программного прерывания сохраняет свое состояние перед выполнением следующей
команды.
Программные прерывания, естественно, возникают синхронно с работой процессора и абсолютно предсказуемы программистом.
Слайд 28Принципы ПО управления вводом-выводом
Ключевым принципом является независимость от устройств. Вид
программы не должен зависеть от того, читает ли она данные
с гибкого диска или с жесткого диска.
Для именования устройств должны быть приняты единые правила.
Обработка ошибок – ошибки следует обрабатывать как можно ближе к аппаратуре. Если контроллер обнаруживает ошибку чтения, то он должен попытаться ее скорректировать. Если же это ему не удается, то исправлением ошибок должен заняться драйвер устройства.
Использование блокирующих (синхронных) и неблокирующих (асинхронных) передач. Большинство операций физического ввода-вывода выполняется асинхронно - процессор начинает передачу и переходит на другую работу, пока не наступает прерывание.
Одни устройства являются разделяемыми, а другие - выделенными. Диски - это разделяемые устройства, так как одновременный доступ нескольких пользователей к диску не представляет собой проблему. Принтеры - это выделенные устройства, потому что нельзя смешивать строчки, печатаемые различными пользователями.
Слайд 29Деление программного обеспечения ввода-вывода на четыре слоя
Обработка прерываний,
Драйверы устройств,
Независимый от устройств слой операционной системы,
Пользовательский слой программного обеспечения
Слайд 30Многоуровневая организация подсистемы ввода-вывода
Слайд 31Задачи ОС по управлению файлами и устройствами
Организация параллельной работы устройства
ввода-вывода и процессора;
Согласование скоростей обмена и кэширования данных;
Разделение устройств и
данных между процессами;
Обеспечение удобного логического интерфейса между устройствами и остальной частью системы;
Поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера;
Динамическая загрузка и выгрузка драйверов;
Поддержка файловых систем;
Поддержка синхронных и асинхронных операций ввода-вывода
Слайд 32Организация параллельной работы устройства ввода-вывода и процессора
Каждое устройство ввода-вывода –
диск, принтер, терминал – имеет блок управления (контроллер устройства).
Контроллер
взаимодействует с драйвером – системным программным модулем, предназначенным для управления устройством. Под управлением контроллера устройство может работать некоторое время автономно от команд ОС.
Подсистема ввода-вывода должна обеспечить работу – запуск и приостановку разнообразных драйверов, обеспечив приемлемое время реакции каждого драйвера на независимые события контроллера.
С другой стороны, необходимо минимизировать загрузку процессора задачами ввода-вывода
Слайд 33Согласование скоростей обмена и кэширования данных
При обмене информации в системе
возникает задача согласования скорости выполняемых процессов. Согласование скорости осуществляется за
счет буферизации данных в оперативной памяти и синхронизации доступа процессов к буферу.
Буферизация (от англ. buffer) — метод организации обмена, в частности, ввода и вывода данных в компьютерах и других вычислительных устройствах, который подразумевает использование буфера для временного хранения данных
В некоторых случаях свободной оперативной памяти недостаточно для буферизации данных. Для размещения данных в буфере используются специальные файлы – спул-файлы (спул-файл – файл, в который в процессе спулинга сбрасывается содержимое задания на печать;).
Другой способ – использование буферной памяти в контроллерах внешних устройств. Например, использование памяти, устанавливаемой на видеоадаптерах.
Слайд 34Разделение устройств и данных между процессами
Устройства ввода-вывода могут предоставляться процессам
в монопольном и разделяемом режимах.
Задача ОС обеспечить контроль доступа
к данным ресурсам системы путем проверки прав пользователя, от имени которых выполняется процесс. Операционная система имеет возможность контролировать доступ не только к устройству в целом, но и к отдельным порциям данных.
При разделении устройства между процессами возникает необходимость в разграничении порции данных от двух процессов. Для хранения очереди заданий применяется спул-файл, который синхронизирует скорости работы устройства и оперативной памяти.
Слайд 35Обеспечение удобного логического интерфейса между устройствами и остальной частью системы
Разнообразие
устройств ввода-вывода делает актуальной задачу создания экранирующего интерфейса между периферийными
устройствами и приложениями.
Современные ОС поддерживают файловую модель работы устройств, при котором устройства представляются набором байт, с которыми работают посредством унифицированных системных вызовов (read, write).
Для детализации конкретных свойств используются специфические модели устройств конкретного типа – графическая подсистема, принтер, сетевые адаптеры и т.д.
Слайд 36Поддержка широкого спектра драйверов с возможностью простого включения в систему
нового драйвера
Достоинством подсистемы ввода-вывода операционной системы является разнообразие устройств, поддерживаемых
данной ОС.
Для создания драйверов необходимо наличие удобного и открытого интерфейса между драйверами и другими компонентами ОС.
Драйвер взаимодействует, с одной стороны, с модулями ядра ОС, а с другой стороны – с контроллерами внешних устройств. Драйвер имеет два интерфейса DKI (driver kernel interface) и DDI (driver device interface).
Слайд 37Динамическая загрузка и выгрузка драйверов
Другой проблемой работы с устройствами ввода-вывода
является проблема включения драйвера в состав работающей ОС – динамическая
загрузка/выгрузка драйверов.
Способность системы автоматически загружать и выгружать из оперативной памяти требуемый драйвер повышает универсальность ОС.
Альтернативой динамической загрузке драйверов при изменении текущей конфигурации внешних устройств является повторная компиляция кода ядра с требуемым набором драйверов. Пример – некоторые версии UNIX
Слайд 38Поддержка файловых систем
Внешняя память вычислительной системы представляет собой периферийные устройства,
на которых хранится большая часть пользовательской информации и системных данных.
Для организации хранения информации на внешних носителях используется файловая модель.
Для обеспечения доступа к данным используется специальный программный слой, обеспечивающий поддержку работы с конкретной файловой системой – драйверы файловой системы.
Для обеспечения возможности работы с несколькими файловыми система применяется подход, основанный применении специального слоя, с которым взаимодействую приложения ОС – например, слой VFS (virtual file system) в некоторых версиях UNIX (Слой VFS является абстрактным слоем между прикладной программой и реализациями файловых систем).
Слайд 39Поддержка синхронных и асинхронных операций ввода-вывода
Операции ввода-вывода по отношению к
программному приложению выполняются в синхронном или асинхронном режимах.
Синхронный режим –
приложение приостанавливает свою работу и ждет отклика от устройства.
Асинхронный режим – приложение продолжает работу, параллельно с ожиданием отклика от устройства.
Операционные системы для разных приложений должны обеспечить синхронную и асинхронную работу с устройствами.
Слайд 40Выводы
Функционирование любой вычислительной системы обычно сводится к выполнению двух видов
работы: обработка информации и операции по осуществлению ее ввода-вывода. С
точки зрения операционной системы "обработкой информации" являются только операции, совершаемые процессором над данными, находящимися в памяти на уровне иерархии не ниже чем оперативная память. Все остальное относится к "операциям ввода-вывода", т. е. к обмену информацией с внешними устройствами.
Несмотря на все многообразие устройств ввода-вывода, управление их работой и обмен информацией с ними строятся на относительно небольшом количестве принципов. Основными физическими принципами построения системы ввода-вывода являются следующие: возможность использования различных адресных пространств для памяти и устройств ввода-вывода; подключение устройств к системе через порты ввода-вывода, отображаемые в одно из адресных пространств; существование механизма прерывания для извещения процессора о завершении операций ввода-вывода; наличие механизма прямого доступа устройств к памяти, минуя процессор.
Слайд 41Выводы:
Механизм, подобный механизму прерываний, может использоваться также и для обработки
исключений и программных прерываний, однако это целиком лежит на совести
разработчиков вычислительных систем.
Для построения программной части системы ввода-вывода характерен "слоеный" подход. Для непосредственного взаимодействия с hardware используются драйверы устройств, скрывающие от остальной части операционной системы все особенности их функционирования. Драйверы устройств через жестко определенный интерфейс связаны с базовой подсистемой ввода-вывода, в обязанности которой входят: организация работы блокирующихся, неблокирующихся и асинхронных системных вызовов, буферизация и кэширование входных и выходных данных, осуществление spooling и монопольного захвата внешних устройств, обработка ошибок и прерываний, возникающих при операциях ввода-вывода, планирование последовательности запросов на выполнение этих операций. Доступ к базовой подсистеме ввода-вывода осуществляется посредством системных вызовов.
Часть функций базовой подсистемы может быть делегирована драйверам устройств и самим устройствам ввода-вывода.