Операционные системы (архив ИПМ специалисты, бакалавры 2001г — 2021г, Богомолов)
- Современные операционные системы, Э. Таненбаум, 2002, СПб, Питер, 1040 стр., (в djvu 10.1Мбайт) подробнее>>
- Сетевые операционные системы Н. А. Олифер, В. Г. Олифер (в zip архиве 1.1Мбайт)
- Сетевые операционные системы Н. А. Олифер, В. Г. Олифер, 2001, СПб, Питер, 544 стр., (в djvu 6.3Мбайт) подробнее>>
9.1 Принципы аппаратуры ввода-вывода
9.1.1 Устройства ввода-вывода
Устройства делят на две категории (некоторые не попадают ни в одну):
блочные устройства — информация считывается и записывается по блокам, блоки имеют свой адрес (диски)
символьные устройства — информация считывается и записывается посимвольно (принтер, сетевые карты, мыши)
9.1.2 Контроллеры устройств
Устройства ввода-вывода обычно состоят из двух частей:
механическая (не надо понимать дословно) — диск, принтер, монитор
электронная — контроллер или адаптер
Если интерфейс между контроллером и устройством стандартизован (ANSI, IEEE или ISO), то независимые производители могут выпускать совместимые как контроллеры, так и устройства. Например: диски IDE или SCSI.
Операционная система обычно имеет дело не с устройством, а с контроллером. Контроллер, как правило, выполняет простые функции, например, при считывании с диска, преобразует поток бит в блоки, состоящие из байт, и осуществляют контроль и исправление ошибок, проверяется контрольная сумма блока, если она совпадает с указанной в заголовке сектора, то блок считан без ошибок, если нет, то считывается заново.
9.1.3 Отображаемый на адресное пространство памяти ввод-вывод
Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. При помощи этих регистров ОС управляет (считывает, пишет, включает и т.д.) и определяет состояние (готовность) устройства.
У многих устройств есть буфер данных (например: видеопамять).
Реализации доступа к управляющим регистрам и буферам:
номер порта ввода-вывода — назначается каждому управляющему регистру 8- или 16-рзрядное целое число. Адресные пространства ОЗУ и устройства ввода-вывода в этой схеме не пересекаются.
Недостатки
— для чтения и записи применяются специальные команды, например: IN и OUT
— необходим специальный механизм защиты от процессов
— необходимо сначала считать регистр устройства в регистр процессора
отображаемый на адресное пространство памяти ввод-вывод — регистры отображаются на адресное пространство памяти.
Недостатки
— при кэшировании памяти, могут кэшироваться и регистры устройств
— все устройства должны проверять все обращения к памяти, чтобы определить, на какие им реагировать. На одной общей шине это реализуется легко, но на нескольких будут проблемы.
смешанная реализация — используется в х86 и Pentium,
от 0 до 64К отводится портам,
от 640 до 1М зарезервировано под буферы данных.
Способы реализации доступа к управляющим регистрам и буферам
9.1.4 Прямой доступ к памяти (DMA — Direct Memory Access)
Прямой доступ к памяти реализуется с помощью DMA — контроллера.
Контроллер содержит несколько регистров:
регистр адреса памяти
управляющие регистры, могут содержать:
— порт ввода-вывода
— чтение или запись
— единицы переноса (побайтно или пословно)
Без контроллера происходит следующее:
Процессор дает команду дисковому контроллеру прочитать данные в буфер,
Считываются данные в буфер, контроллер проверяет контрольную сумму считанных данных (проверка на ошибки). Процессор, до прерывания, переключается на другие задания.
Контроллер диска инициирует прерывание
Операционная система начинает работать и может считывать из буфера данные в память
Работа DMA — контроллера
С контроллером происходит следующее:
Процессор программирует контроллер (какие данные и куда переместить)
Процессор дает команду дисковому контроллеру прочитать данные в буфер
Считываются данные в буфер, контроллер диска проверяет контрольную сумму считанных данных, (процессор, до прерывания, переключается на другие задания).
Контроллер DMA посылает запрос на чтение дисковому контроллеру
Контроллер диска поставляет данные на шину, адрес памяти уже находится на шине, происходит запись данных в память
Когда запись закончена, контроллер диска посылает подтверждение DMA контроллеру
DMA контроллер увеличивает используемый адрес и уменьшает значение счетчика байтов
Все повторяется с пункта 4, пока значение счетчика не станет равной нулю.
Контроллер DMA инициирует прерывание
Операционной системе не нужно копировать данные в память, они уже там.
После того как устройство ввода-вывода начало работу, процессор переключается на другие задачи.
Чтобы сигнализировать процессору об окончании работы, устройство инициализирует прерывание, выставляя сигнал на выделенную устройству линию шины (а не выделенный провод).
Контроллер прерываний — обслуживает поступающие прерывания от устройств.
Если необработанных прерываний нет, прерывание выполняется немедленно.
Если необработанных прерываний есть, контроллер игнорирует прерывание. Но устройство продолжает удерживать сигнал прерывания на шине до тех пор, пока оно не будет обработано.
Устройство выставляет сигнал прерывания
Контроллер прерываний инициирует прерывание, указывая номер устройства
Процессор начинает выполнять обработку прерывания, вызывая процедуру
Эта процедура подтверждает получение прерывания контроллеру прерываний
9.2 Принципы программного обеспечения ввода-вывода
9.2.1 Задачи программного обеспечения ввода-вывода
Основные задачи, которые должно решать программное обеспечение ввода-вывода:
Независимость от устройств — например, программа, читающая данные из файла не должна задумываться с чего она читает (CD, HDD и др.). Все проблемы должна решать ОС.
Единообразное именование — имя файла или устройства не должны отличаться. (В системах UNIX выполняется дословно).
Обработка ошибок — ошибки могут быть отловлены на уровне контроллера, драйвера и т.д.
Перенос данных — синхронный и асинхронный (в последнем случае процессор запускает перенос данных, и переключается на другие задачи до прерывания).
Проблема выделенных (принтер) и невыделенных (диск) устройств — принтер должен предоставляться только одному пользователю, а диск многим. ОС должна решать все возникающие проблемы.
Три основных способа осуществления операций ввода-вывода:
Управляемый прерываниями ввод-вывод
Ввод-вывод с использованием DMA
Рассмотрим их подробнее.
9.2.2 Программный ввод-вывод
В этом случае всю работу выполняет центральный процессор.
Рассмотрим процесс печати строки ABCDEFGH этим способом.
Этапы печати строки ABCDEFGH
Строка для печати собирается в пространстве пользователя.
Обращаясь к системному вызову, процесс получает принтер.
Обращаясь к системному вызову, процесс просит распечатать строку на принтере.
Операционная система копирует строку в массив, расположенный в режиме ядра.
ОС копирует первый символ в регистр данных принтера, который отображен на памяти.
Символ печатается на бумаге.
Указатель устанавливается на следующий символ.
Процессор ждет, когда бит готовности принтера выставится в готовность.
При использовании буфера принтера, сначала вся строка копируется в буфер, после этого начинается печать.
9.2.3 Управляемый прерываниями ввод-вывод
Если в предыдущем примере буфер не используется, а принтер печатает 100 символов в секунду, то на каждый символ будет уходить 10мс, в это время процессор будет простаивать, ожидая готовности принтера.
Рассмотрим тот же пример, но с небольшим усовершенствованием.
До пункта 8 тоже самое.
Процессор не ждет готовности принтера, а вызывает планировщик и переключается на другую задачу. Печатающий процесс блокируется.
Когда принтер будет готов, он посылает прерывание процессору.
Процессор переключается на печатающий процесс.
9.2.4 Ввод-вывод с использованием DMA
Недостаток предыдущего метода в том, что прерывание происходит при печати каждого символа.
Алгоритм не отличается, но всю работу на себя берет контроллер DMA.
9.3 Программные уровни и функции ввода-вывода
Четыре уровня ввода-вывода:
9.3.1 Обработчики прерываний
Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Лучше всего блокировать драйвер, начавший ввод-вывод.
Драйвер начинает операцию ввод-вывод.
Драйвер блокирует сам себя,
— выполнив на семафоре процедуру down
— выполнив на переменной состояния процедуру wait
— выполнив на сообщении процедуру receive
Обработчик прерываний начинает работу
Обработчик прерываний может разблокировать драйвер (например, выполнив на семафоре процедуру up)
9.3.2 Драйвера устройств
Драйвер устройства — необходим для каждого устройства. Для разных ОС нужны разные драйверы.
Драйверы должны быть частью ядра (в монолитной системе), что бы получить доступ к регистрам контроллера.
Это одна из основных причин приводящих к краху операционных систем. Потому что драйверы, как правило, пишутся производителями устройств, и вставляются в ОС.
Логическое расположение драйверов устройств. На самом деле обмен данными между контроллерами и драйверами идет по шине.
Драйвера должны взаимодействовать с ОС через стандартные интерфейсы.
Стандартные интерфейсы, которые должны поддерживать драйвера:
Для блочных устройств
Для символьных устройств
Раньше для установки ядра приходилось перекомпилировать ядра системы.
Сейчас в основном ОС загружают драйверы. Некоторые драйверы могут быть загружены в горячем режиме.
Функции, которые выполняют драйвера:
обработка запросов чтения или записи
управление энергопотреблением устройства
прогрев устройства (сканера)
включение устройства или запуска двигателя
9.3.3 Независимое от устройств программное обеспечение ввода-вывода
Функции независимого от устройств программного обеспечения ввода-вывода:
Единообразный интерфейс для драйверов устройств,
Сообщения об ошибках
Захват и освобождение выделенных устройств (блокирование)
Размер блока, не зависящий от устройств
Единообразный интерфейс для драйверов устройств
Кроме интерфейса, в него также входят проблемы,
Рассмотрим несколько примеров буферизации.
a) Не буферизованный ввод — после ввода каждого символа происходит прерывание
b) Буферизация в пространстве пользователя — приходится держать загруженными необходимые страницы памяти в физической памяти.
c) Буферизация в ядре с копированием в пространство пользователя — страница загружается только когда буфер ядра полный, данные из буфера ядра в буфер пользователя копируется за одну операцию. Проблема может возникнуть, когда буфер ядра полный, а страница буфера пользователя еще не загружена.
d) Двойная буферизация в ядре — если один буфер заполнен, и пока он выгружается, символы пишутся во второй буфер.
Сообщения об ошибках
Наибольшее число ошибок возникает именно от операции ввода-вывода, поэтому их нужно определять как можно раньше. Ошибки могут быть очень разные в зависимости от устройств.
Захват и освобождение выделенных устройств
Для устройств (принтер) с которыми должен работать в одно время только один процесс, необходима возможность захвата и освобождения устройств. Когда один процесс занял устройство, остальные встают в очередь.
Независимый от устройств размер блока
Размер блока должен быть одинаковый для верхних уровней, и не зависеть от устройств (размеров секторов на диске).
9.3.4 Программное обеспечение ввода-вывода пространства пользователя
Функции этого обеспечения:
Обращение к системным вызовам ввода-вывода (через библиотечные процедуры).
Форматный ввод-вывод (меняют формат, например, в ASCII)
Спулинг (для выделенных устройств) — создается процесс (например, демон печати) и каталог спулера.
9.3.5 Обобщение уровней и функций ввода-вывода
Уровни и основные функции системы ввода-вывода
Источник
Назначение, задачи и технологии подсистемы ввода-вывода
Обмен данными между пользователями, приложениями и периферийными устройствами компьютера выполняет специальная подсистема ОС – подсистема ввода-вывода. Собственно, для выполнения этой задачи и были разработаны первые системные программы, послужившие прототипами операционных систем.
Основными компонентами подсистемы ввода-вывода являются драйверы, управляющие внешними устройствами, и файловая система. В работе подсистемы ввода-вывода активно участвует диспетчер прерываний. Более того, основная нагрузка диспетчера прерываний обусловлена именно подсистемой ввода-вывода, поэтому диспетчер прерываний иногда считают частью подсистемы ввода-вывода.
Файловая система – это основное хранилище информации в любом компьютере. Она активно использует остальные части подсистемы ввода-вывода. Кроме того, модель файла лежит в основе большинства механизмов доступа к периферийным устройствам.
На подсистему ввода-вывода возлагаются следующие функции [5, 17]:
- организация параллельной работы устройств ввода-вывода и процессора;
- согласование скоростей обмена и кэширование данных;
- разделение устройств и данных между процессами (выполняющимися программами);
- обеспечение удобного логического интерфейса между устройствами и остальной частью системы;
- поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера;
- динамическая загрузка и выгрузка драйверов без дополнительных действий с операционной системой;
- поддержка нескольких различных файловых систем;
- поддержка синхронных и асинхронных операций ввода-вывода.
Эволюция ввода-вывода может быть представлена следующими этапами [17].
- Процессор непосредственно управляет периферийным устройством.
- Устройство управляется контроллером. Процессор использует программируемый ввод-вывод без прерываний (переход к абстракции интерфейса ввода-вывода).
- Использование контроллера прерываний. Ввод-вывод, управляемый прерываниями.
- Использование модуля (канала) прямого доступа к памяти. Перемещение данных в память (из нее) без применения процессора.
- Использование отдельного специализированного процессора ввода-вывода, управляемого центральным процессором.
- Использование отдельного компьютера для управления устройствами ввода-вывода при минимальном вмешательстве центрального процессора.
Проследив описанный путь развития устройств ввода-вывода, можно заметить, что вмешательство процессора в функции ввода-вывода становится все менее заметным. Центральный процессор все больше освобождается от задач, связанных с вводом-выводом, что приводит к повышению общей производительности компьютерной системы.
Для персональных компьютеров операции ввода-вывода могут выполняться тремя способами.
- С помощью программируемого ввода-вывода. В этом случае, когда процессору встречается команда, связанная с вводом-выводом, он выполняет ее, посылая соответствующие команды контроллеру ввода-вывода. Это устройство выполняет требуемое действие, а затем устанавливает соответствующие биты в регистрах состояния ввода-вывода и не посылает никаких сигналов, в том числе сигналов прерываний. Процессор периодически проверяет состояние модуля ввода-вывода с целью проверки завершения операции ввода-вывода.
Таким образом, процессор непосредственно управляет операциями ввода-вывода, включая опознание состояния устройства, пересылку команд чтения-записи и передачу данных. Процессор посылает необходимые команды контроллеру ввода-вывода и переводит текущий процесс в состояние ожидания завершения операции ввода-вывода. Недостатки такого метода – большие потери процессорного времени, связанные с управлением вводом-выводом.
- Ввод-вывод, управляемый прерываниями. Процессор посылает необходимые команды контроллеру ввода-вывода и продолжает выполнять текущий процесс, если нет необходимости в ожидании выполнения операции ввода-вывода. В противном случае текущий процесс приостанавливается до получения сигнала прерывания о завершении ввода-вывода, а процессор переключается на выполнение другого процесса. Наличие прерываний процессор проверяет в конце каждого цикла выполняемых команд.
Такой ввод-вывод намного эффективнее, чем программируемый ввод-вывод, так как при этом исключается ненужное ожидание с бесполезным простоем процессора. Однако и в этом случае ввод-вывод потребляет еще значительное количество процессорного времени, потому что каждое слово, которое передается из памяти в модуль ввода-вывода (контроллер) или обратно, должно пройти через процессор.
- Прямой доступ к памяти (direct memory access – DMA). В этом случае специальный модуль прямого доступа к памяти управляет обменом данных между основной памятью и контроллером ввода-вывода. Процессор посылает запрос на передачу блока данных модулю прямого доступа к памяти, а прерывание происходит только после передачи всего блока данных.
В настоящее время в персональных и других компьютерах используется третий способ ввода-вывода, поскольку в структуре компьютера имеется DMA-контроллер или подобное ему устройство, обслуживающее, как правило, запросы по передаче данных от нескольких устройств ввода-вывода на конкурентной основе.
DMA-контроллер имеет доступ к системной шине независимо от центрального процессора, как показано на рис. 7.1. Контроллер содержит несколько регистров, доступных центральному процессу для чтения и записи (регистр адреса памяти, счетчик байтов, управляющие регистры). Управляющие регистры задают порт ввода-вывода, который должен быть использован, направление переноса данных (чтение или запись в устройство ввода-вывода), единицу переноса (побайтно, пословно), а также число байтов, которые следует перенести за одну операцию.
Перед выполнением операции обмена ЦП программирует DMA-контроллер, устанавливая его регистры (шаг 1 на рис. 7.1). Затем ЦП дает команду дисковому контролеру прочитать внести данные во внутренний буфер и проверить контрольную сумму. После этого процессор продолжает свою работу. Когда данные получены и проверены контроллером диска, DMA может начинать работу.
DMA-контроллер начинает перенос данных, посылая дисковому контроллеру по шине запрос чтения (шаг 2). Адрес памяти уже находится на адресной шине, так что контроллер знает, куда пересылать следующее слово из своего буфера. Запись в память является еще одним стандартным циклом шины (шаг 3). Когда запись закончена, контроллер диска посылает сигнал подтверждения контролеру DMA (шаг 4). Затем контроллер DMA увеличивает используемый адрес памяти и уменьшает значение счетчика байтов. После этого шаги 2, 3 и 4 повторяются, пока значение счетчика не станет равным нулю. По завершению цикла копирования контроллер DMA инициирует прерывание процессора, сообщая ему о завершении операции ввода-вывода.
Рис. 7.1. Работа DMA
Необходимо обратить внимание на работу шины в этом процессе обмена данными. Шина может работать в двух режимах: пословном и поблочном. В первом случае контроллер DMA выставляет запрос на перенос одного слова и получает его. Если процессору также нужна эта шина (не забывайте, в основном он работает с кэш-памятью), ему приходится подождать. Этот механизм называется захватом цикла, потому, что контроллер устройства периодически забирает случайный цикл шины у центрального процессора, слегка тормозя его.
Ниже на рис. 7.2 показана позиция цикла команд, в которых работа процессора может быть приостановлена. В любом случае приостановка процессора происходит только при необходимости использования шины. После этого устройство DMA выполняет передачу слова и возвращает управление процессору. Однако это не является прерыванием: процессор не сохраняет контекст с переходом к выполнению другого задания. Он просто делает паузу на время одного цикла шины.
Рис. 7.2. Точки прерывания DMA
В блочном режиме работы контроллер DMA занимает шину на серию пересылок (пакет). Этот режим более эффективен, однако при переносе большого блока центральный процессор и другие устройства могут быть заблокированы на существенный промежуток времени.
При большом количестве устройств ввода-вывода от подсистемы ввода-вывода требуется спланировать в реальном масштабе времени (в котором работают внешние устройства) запуск и приостановку большего количества разных драйверов, обеспечив при этом время реакции каждого драйвера на независимые события контролеров внешних устройств. С другой стороны, необходимо минимизировать загрузку процессора задачами ввода-вывода.
Решение этих задач достигается на основе многоуровневой приоритетной схемы обслуживания прерываний. Для обеспечения приемлемого уровня реакции все драйверы распределяются по нескольким приоритетным уровням в соответствии с требованиями по времени реакции и временем использования процессора. Для реализации приоритетной схемы задействуется общий диспетчер прерываний ОС.
Источник