Автор: Пользователь скрыл имя, 20 Декабря 2011 в 14:11, контрольная работа
Одна из важнейших функций операционной системы состоит в управлении всеми ввода/вывода компьютера. Любые операции по управлению ввода-вывода выполняются только кодам самой операционной системой, для обеспечения этого принципа вводятся режимы пользователя и супервизор.
ВВЕДЕНИЕ 3
1. ФИЗИЧЕСКАЯ ОРГАНИЗАЦИЯ УСТРОЙСТВ ВВОДА-ВЫВОДА 4
2. ОРГАНИЗАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ВВОДА-ВЫВОДА 6
3. ОБРАБОТКА ПРЕРЫВАНИЙ 8
4. ДРАЙВЕРЫ УСТРОЙСТВ 10
4.1. Блочные драйверы 11
4.2. Символьные драйверы 12
4.3. Потоковые драйверы 12
4.4. Независимый от устройств слой операционной системы 13
4.5. Пользовательский слой программного обеспечения 14
5. ПРИНЦИПЫ СИСТЕМНОЙ БУФЕРИЗАЦИИ ВВОДА/ВЫВОДА 15
6. СИСТЕМНЫЕ ВЫЗОВЫ ДЛЯ УПРАВЛЕНИЯ ВВОДОМ/ВЫВОДОМ 17
7. СИНХРОННЫЙ И АСИНХРОННЫЙ ВВОД-ВЫВОД 21
7.1. Синхронный ввод-вывод 21
7.2. Асинхронный ввод-вывод 22
ЗАКЛЮЧЕНИЕ 24
СПИСОК ЛИТЕРАТУРЫ 25
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ 3
1. ФИЗИЧЕСКАЯ ОРГАНИЗАЦИЯ УСТРОЙСТВ ВВОДА-ВЫВОДА 4
2. ОРГАНИЗАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ВВОДА-ВЫВОДА 6
3. ОБРАБОТКА ПРЕРЫВАНИЙ 8
4. ДРАЙВЕРЫ УСТРОЙСТВ 10
4.1. Блочные драйверы 11
4.2. Символьные драйверы 12
4.3. Потоковые драйверы 12
4.4. Независимый от устройств слой операционной системы 13
4.5. Пользовательский слой программного обеспечения 14
5. ПРИНЦИПЫ СИСТЕМНОЙ БУФЕРИЗАЦИИ ВВОДА/ВЫВОДА 15
6. СИСТЕМНЫЕ ВЫЗОВЫ ДЛЯ УПРАВЛЕНИЯ ВВОДОМ/ВЫВОДОМ 17
7. СИНХРОННЫЙ И АСИНХРОННЫЙ ВВОД-ВЫВОД 21
7.1. Синхронный ввод-вывод 21
7.2. Асинхронный ввод-вывод 22
ЗАКЛЮЧЕНИЕ 24
СПИСОК
ЛИТЕРАТУРЫ 25
Одна из важнейших функций операционной системы состоит в управлении всеми ввода/вывода компьютера. Любые операции по управлению ввода-вывода выполняются только кодам самой операционной системой, для обеспечения этого принципа вводятся режимы пользователя и супервизор.
Операционная система должна давать этим устройствам команды, перехватывать прерывания и обрабатывать ошибки. Она должна также обеспечить простой и удобный интерфейс между устройствами и остальной частью системы. Интерфейс, насколько это возможно, быть одинаковым для всех устройств (для достижения независимости от меняемого оборудования). Программное обеспечение ввода/вывода составляет существенную часть операционной системы. Программное обеспечение вода может быть структурировано в виде уровней, каждому из которых строго очерченный круг задач.
Традиционно в ОС выделяются три типа организации ввода/вывода и, соответственно, три типа драйверов. Блочный ввод/вывод главным образом предназначен для работы с каталогами и обычными файлами файловой системы, которые на базовом уровне имеют блочную структуру
Символьный ввод/вывод служит для прямого (без буферизации) выполнения обменов между адресным пространством пользователя и соответствующим устройством. Общей для всех символьных драйверов поддержкой ядра является обеспечение функций пересылки данных между пользовательскими и ядерным адресными пространствами.
Потоковый
ввод/вывод похож на символьный ввод/вывод,
но по причине наличия возможности
включения в поток
Устройства ввода-вывода делятся на два типа: блок-ориентированные устройства и байт-ориентированные устройства. Блок-ориентированные устройства хранят информацию в блоках фиксированного размера, каждый из которых имеет свой собственный адрес. Самое распространенное блок-ориентированное устройство - диск. Байт-ориентированные устройства не адресуемы и не позволяют производить операцию поиска, они генерируют или потребляют последовательность байтов. Примерами являются терминалы, строчные принтеры, сетевые адаптеры. Однако некоторые внешние устройства не относятся ни к одному классу, например, часы, которые, с одной стороны, не адресуемы, а с другой стороны, не порождают потока байтов. Это устройство только выдает сигнал прерывания в некоторые моменты времени.
Внешнее
устройство обычно состоит из механического
и электронного компонента. Электронный
компонент называется контроллером
устройства или адаптером. Механический
компонент представляет собственно
устройство. Некоторые контроллеры
могут управлять несколькими
устройствами. Если интерфейс между
контроллером и устройством стандартизован,
то независимые производители
Операционная система обычно имеет дело не с устройством, а с контроллером. Контроллер, как правило, выполняет простые функции, например, преобразует поток бит в блоки, состоящие из байт, и осуществляют контроль и исправление ошибок. Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. В некоторых компьютерах эти регистры являются частью физического адресного пространства. В таких компьютерах нет специальных операций ввода-вывода. В других компьютерах адреса регистров ввода-вывода, называемых часто портами, образуют собственное адресное пространство за счет введения специальных операций ввода-вывода (например, команд IN и OUT в процессорах i86).
ОС
выполняет ввод-вывод, записывая
команды в регистры контроллера.
Например, контроллер гибкого диска
IBM PC принимает 15 команд, таких как READ,
WRITE, SEEK, FORMAT и т.д. Когда команда
принята, процессор оставляет контроллер
и занимается другой работой. При
завершении команды контроллер организует
прерывание для того, чтобы передать
управление процессором операционной
системе, которая должна проверить
результаты операции. Процессор получает
результаты и статус устройства, читая
информацию из регистров контроллера.
Основная идея организации программного обеспечения ввода-вывода состоит в разбиении его на несколько уровней, причем нижние уровни обеспечивают экранирование особенностей аппаратуры от верхних, а те, в свою очередь, обеспечивают удобный интерфейс для пользователей.
Ключевым принципом является независимость от устройств. Вид программы не должен зависеть от того, читает ли она данные с гибкого диска или с жесткого диска.
Очень близкой к идее независимости от устройств является идея единообразного именования, то есть для именования устройств должны быть приняты единые правила.
Другим важным вопросом для программного обеспечения ввода-вывода является обработка ошибок. Вообще говоря, ошибки следует обрабатывать как можно ближе к аппаратуре. Если контроллер обнаруживает ошибку чтения, то он должен попытаться ее скорректировать. Если же это ему не удается, то исправлением ошибок должен заняться драйвер устройства. Многие ошибки могут исчезать при повторных попытках выполнения операций ввода-вывода, например, ошибки, вызванные наличием пылинок на головках чтения или на диске. И только если нижний уровень не может справиться с ошибкой, он сообщает об ошибке верхнему уровню.
Еще один ключевой вопрос - это использование блокирующих (синхронных) и неблокирующих (асинхронных) передач. Большинство операций физического ввода-вывода выполняется асинхронно - процессор начинает передачу и переходит на другую работу, пока не наступает прерывание. Пользовательские программы намного легче писать, если операции ввода-вывода блокирующие - после команды READ программа автоматически приостанавливается до тех пор, пока данные не попадут в буфер программы. ОС выполняет операции ввода-вывода асинхронно, но
представляет их для пользовательских программ в синхронной форме.
Последняя проблема состоит в том, что одни устройства являются
разделяемыми, а другие - выделенными. Диски - это разделяемые устройства, так как одновременный доступ нескольких пользователей к диску не представляет собой проблему. Принтеры - это выделенные устройства, потому что нельзя смешивать строчки, печатаемые различными пользователями. Наличие выделенных устройств создает для операционной системы некоторые проблемы.
Для
решения поставленных проблем целесообразно
разделить программное
Рис. 1. Многоуровневая организация подсистемы ввода-вывода
Прерывания
должны быть скрыты как можно глубже
в недрах операционной системы, чтобы
как можно меньшая часть ОС
имела с ними дело. Наилучший способ
состоит в разрешении процессу, инициировавшему
операцию ввода-вывода, блокировать
себя до завершения операции и наступления
прерывания. Процесс может блокировать
себя, используя, например, вызов DOWN для
семафора, или вызов WAIT для переменной
условия, или вызов RECEIVE для ожидания
сообщения. При наступлении прерывания
процедура обработки прерывания
выполняет разблокирование
USB-Unit Control Block – блок управления устройств ввода-вывода.
Рис
2. Процесс управление вводом-выводом в
ОС
Весь зависимый от устройства код помещается в драйвер устройства. Каждый драйвер управляет устройствами одного типа или, может быть, одного класса.
В операционной системе только драйвер устройства знает о конкретных особенностях какого-либо устройства. Например, только драйвер диска имеет дело с дорожками, секторами, цилиндрами, временем установления головки и другими факторами, обеспечивающими правильную работу диска.
Драйвер устройства принимает запрос от устройств программного слоя и решает, как его выполнить. Типичным запросом является чтение n блоков данных. Если драйвер был свободен во время поступления запроса, то он начинает выполнять запрос немедленно. Если же он был занят обслуживанием другого запроса, то вновь поступивший запрос присоединяется к очереди уже имеющихся запросов, и он будет выполнен, когда наступит его очередь.
Первый шаг в реализации запроса ввода-вывода, например, для диска, состоит в преобразовании его из абстрактной формы в конкретную. Для дискового драйвера это означает преобразование номеров блоков в номера цилиндров, головок, секторов, проверку, работает ли мотор, находится ли головка над нужным цилиндром. Короче говоря, он должен решить, какие операции контроллера нужно выполнить и в какой последовательности.
После передачи команды контроллеру драйвер должен решить, блокировать ли себя до окончания заданной операции или нет. Если операция занимает значительное время, как при печати некоторого блока данных, то драйвер блокируется до тех пор, пока операция не завершится, и обработчик прерывания не разблокирует его. Если команда ввода-вывода выполняется быстро (например, прокрутка экрана), то драйвер ожидает ее завершения без блокирования.
Буферизация также является важным вопросом как для блочных, так и для символьных устройств по самым разным причинам. Для блочных устройств аппаратное обеспечение обычно требует того, чтобы чтение или запись производились большими блоками. Но для пользовательских программ такого ограничения нет, и они вправе передавать любые объемы информации. Поэтому, если пользователь передал только половину блока, операционная система обычно не станет сразу записывать эти данные на диск, а дождется того, когда будет передана оставшаяся часть блока. Что касается символьных устройств, то пользователь может передавать данные быстрее, чем устройство в состоянии их воспринять, таким образом, также необходима буферизация. Не исключено также, что данные, например, от клавиатуры, могут опережать свое считывание, и в этом случае также не обойтись без буфера.
Информация о работе Управление вводом-выводом в операционных системах