Подсистема_IO.ppt
- Количество слайдов: 18
Подсистема вводавывода Подсистема ввода-вывода обеспечивает обмен данными между приложениями и периферийными устройствами компьютера. Клиентами этой подсистемы являются 1. пользователи 2. приложения 3. компоненты самой ОС, которым требуется получение системных данных или их вывод
Подсистема вводавывода Подсистема ввода-вывода (Input-Output Subsystem) должна решать ряд задач: 1. организация параллельной работы устройств вводавывода и процессора; 2. согласование скоростей обмена и кэширование данных; 3. разделение устройств и данных между процессами; 4. обеспечение удобного логического интерфейса между устройствами и остальной частью системы; 5. поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера; 6. динамическая загрузка и выгрузка драйверов; 7. поддержка нескольких файловых систем; 8. поддержка синхронных и асинхронных операций вводавывода.
Подсистема вводавывода 1. Все устройства, обслуживаемые ОС UNIX, могут быть классифицированы на два типа 2. 1 Символьные (байт-ориентированные) устройства 3. это то устройство, обмен с которым осуществляется по одному байту (например, клавиатура). 4. 2 Блочные (блок-ориентированные) устройства. 5. это устройство, с которым обмен может осуществляться блоками. 6. При этом, одно и то же устройство может рассматриваться и как байт-ориентированное, и как блок-ориентированное (пример оперативная память).
Подсистема вводавывода Каждое устройство имеет соответствующий ему файл. Содержимого у файлов устройств нет, а есть только ID и имя. ID содержит 1. информацию о типе ассоциированного устройства 2. поле, определяющее номер драйвера, связанного с этим устройством (у одного устройства может быть несколько драйверов, но не наоборот). 3. некоторый цифровой параметр, который может быть передан драйверу в качестве уточняющего информацию о работе.
Подсистема вводавывода Обобщенная структура подсистемы ввода-вывода:
Подсистема вводавывода Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код. В зависимости от источника возникновения сигнала прерывания делятся на: 1. асинхронные или внешние (аппаратные) — события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ); 2. синхронные или внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции; 3. программные (частный случай внутреннего прерывания) — инициируются исполнением специальной инструкции в коде программы. Программные прерывания как правило используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы.
Подсистема вводавывода Для согласования работы слоев предусмотрен менеджер ввода-вывода Задачи такого менеджера: 1. Верхний слой менеджера составляют системные вызовы ввода-вывода, которые принимают от пользовательских процессов запросы на вводвывод и переадресуют их соответствующим модулям и драйверам, а также возвращают процессам результаты операций ввода-вывода. 2. Нижний слой менеджера реализует непосредственное взаимодействие с контроллерами внешних устройств, экранируя драйверы от особенностей аппаратной платформы. Этот слой принимает от драйверов запросы на обмен данными с регистрами контроллеров в некоторой обобщенной форме, а затем преобразует эти запросы в зависящий от аппаратной платформы формат. Диспетчер прерываний, рассмотренный выше, может входить в состав менеджера ввода-вывода или же представлять собой отдельный модуль ядра. 3. менеджер создает среды для остальных компонентов подсистемы, облегчающую их взаимодействие друг с другом. Эта задача может быть решена за счет создания некоторого стандартного внутреннего интерфейса взаимодействия модулей ввода-вывода между собой 4. менеджер ввода-вывода организует взаимодействие модулей вводавывода с модулями других подсистем ОС, таких как подсистема управления процессами, виртуальной памятью и другими.
Подсистема вводавывода Драйверы устройств обеспечивают интерфейс между ядром UNIX и аппаратной частью компьютера. Благодаря этому от остальной части ядра скрыты архитектурные особенности компьютера, что значительно упрощает перенос системы и поддержку работы различных периферийных устройств. Драйвер взаимодействует, с одной стороны, с модулями ядра ОС, а с другой стороны — с контроллерами внешних устройств. Поэтому существуют два типа интерфейсов: интерфейс «драйвер-ядро» - (Driver Kernel Interface, DKI) и интерфейс «драйвер-устройство» {Driver Device Interface, DDF). Соответственно, драйверы состоят из двух уровней: низкоуровневого и высокоуровневого драйверов.
Подсистема вводавывода 1. 2. 3. 4. 5. Низкоуровневый драйвер: входит в состав ядра операционной системы, работая в привилегированном режиме; непосредственно управляет внешним устройством, взаимодействуя с его контроллером с помощью команд ввода-вывода компьютера; обрабатывает прерывания от контроллера устройства; предоставляет прикладному программисту удобный логический интерфейс работы с устройством, экранируя от него низкоуровневые детали управления устройством и организации его данных; взаимодействует с другими модулями ядра ОС с помощью строго оговоренного интерфейса, описывающего формат передаваемых данных, структуру буферов, способы включения драйвера в состав ОС, способы вызова драйвера, набор общих процедур подсистемы ввода-вывода
Подсистема вводавывода Высокоуровневый драйвер: 1. 2. располагаются в общей модели над традиционными драйверами. как правило, не вызываются по прерываниям, а взаимодействуют с устройством через аппаратные драйвера.
Подсистема вводавывода Так же как и устройства, драйвера делятся на Блок-ориентированные Байт-ориентированные Блок-ориентированные драйверы управляют устройствами прямого доступа, которые хранят информацию в блоках фиксированного размера, каждый из которых имеет собственный адрес. Самое распространенное внешнее устройство прямого доступа — диск. Адресуемость блоков приводит к тому, что для устройств прямого доступа появляется возможность кэширования данных в оперативной памяти Байт-ориентированные Этот тип драйверов обеспечивает работу с устройствами с драйверы побайтовым доступом и обменом данными. К таким устройствам можно отнести модемы, терминалы, принтеры, манипуляторы мышь и т. д. Доступ к таким драйверам не включает использование буферного кэша, таким образом ввод и вывод как правило не буферизуется.
Подсистема вводавывода Существует проблема включения драйвера в состав модулей работающей ОС, то есть динамической загрузки-выгрузки драйвера. Есть два варианта: динамическое и статическое подключение. 1. Набор потенциально поддерживаемых устройств всегда существенно шире реально установленных устройств. ОС имеет возможность динамически загружать в оперативную память требуемый драйвер (без останова ОС) и выгружать его 2. при изменении текущей конфигурации внешних устройств необходима повторная компиляция кода ядра с требуемым набором драйверов При статических связях между ядром и драйверами структура ОС упрощается, но этот подход требует наличия исходных кодов модулей операционной системы. Поддержка динамической загрузки драйверов является практически обязательным требованием для современных универсальных операционных систем.
Подсистема вводавывода Буферизация Основной особенностью организации работы с блок-ориентированными устройствами является возможность буферизации обмена: в оперативной памяти системы организован пул буферов, где каждый буфер имеет размер в один блок. Каждый из этих блоков может быть ассоциирован с драйвером одного из физических блокориентированных устройств. Рассмотрим последовательность действий при исполнении заказа на чтение N-ого блока из устройства с номером M. 1. В буферном пуле ищется заданный блок. Если он обнаружен, фиксируем номер этого буфера. В этом случае, обращение к реальному физическому устройству не происходит, а операция чтение идет из найденного буфера. Переходим на шаг 4. 2. Если буфер не найден, то в буферном пуле ищется свободный буфер. Если такой есть (реально, эта ситуация возможна только при старте системы), фиксируем его номер и переходим к шагу 3. Если нет, то выбирается буфер, к которому не было обращений самое долгое время. Фиксируем его номер и переходим к пункту 3. 3. Осуществляется чтение N-ого блока устройства М в найденный буфер. 4. Происходит обнуление счетчика времени в данном буфере и увеличение на единицу счетчиков в других буферах. 5. Передаем в качестве результата чтения содержимое данного буфера.
Подсистема вводавывода Преимущества буферизации: - минимизируются реальные обращения к физическому устройству. - согласуются скорости генерации данных и их чтения Недостатки буферизации: - система чувствительна выключениям питания, т. е. ситуация, когда буфера системы не выгружены, а питание прервалось может привести к потере информации. - за счет буферизации разорваны во времени факт обращения к системе за обменом и реальный обмен. Предположим, при реальном физическом обмене происходит сбой, блок успешно записался в буфер, но когда система реально запишет этот блок на ВЗУ, неизвестно. При этом может возникнуть ситуация, что запись может не пройти, предположим, из-за дефектов носителя. Для устранения таких недостатков, - в системе предусмотрен параметр, который определяет периоды времени, через которые осуществляется сброс системных данных. - есть пользовательская команда SYNC. По этой команде осуществляется сброс данных на диск. - система обладает некоторой избыточностью, позволяющей в случае потери информации, восстановить некоторые блоки
Подсистема вводавывода Буферизация может производиться: 1. в оперативной памяти. Это эффективно, но буферизация только на основе оперативной памяти в подсистеме ввода -вывода оказывается недостаточной — разница между скоростью обмена с оперативной памятью, куда процессы помещают данные для обработки, и скоростью работы внешнего устройства часто становится слишком значительной 2. в качестве буфера используется дисковый файл, называемый также спул-файлом (Типичный пример применения спулинга дает организация вывода данных на принтер) 3. в буферной памяти в контроллерах внешних устройств (когда помещение данных на диск слишком замедляет обмен. Например, в контроллерах графических дисплеев применяется буферная память, соизмеримая по объему с оперативной, и это существенно ускоряет вывод графики на экран).
Подсистема вводавывода Поддержка операций ввода-вывода Устройства ввода-вывода могут предоставляться процессам как в монопольное, так и в совместное (разделяемое) использование. Если это монопольно используемое устройство, то ОС отслеживает процедуры захвата и освобождения монопольно используемых устройств. А в случае совместного использования - оптимизирует последовательность операций ввода-вывода для различных процессов в целях повышения общей производительности, если это возможно.
Подсистема вводавывода Поддержка операций ввода-вывода Операция ввода-вывода может выполняться по отношению к программному модулю, запросившему операцию, в синхронном или асинхронном режимах. Синхронный режим означает, что программный модуль приостанавливает свою работу до тех пор, пока операция ввода-вывода не будет завершена. При асинхронном режиме программный модуль продолжает выполняться в мультипрограммном режиме одновременно с операцией ввода-вывода.
Подсистема вводавывода Подсистема ввода-вывода должна предоставлять своим клиентам (пользовательским процессам и кодам ядра) возможность выполнять как синхронные, так и асинхронные операции ввода-вывода, в зависимости от потребностей вызывающей стороны. Системные вызовы ввода-вывода чаще оформляются как синхронные процедуры в связи с тем, что такие операции длятся долго и пользовательскому процессу или потоку все равно придется ждать получения результатов операции для того, чтобы продолжить свою работу. Внутренние вызовы операций ввода-вывода из модулей ядра обычно выполняются в виде асинхронных процедур, так кодам ядра нужна свобода в выборе дальнейшего поведения после запроса операции ввода-вывода.
Подсистема_IO.ppt