![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Обмен данными между пользователями, приложениями и периферийными устройствами компьютера выполняет специальная подсистема ОС - подсистема ввода-вывода. Собственно для выполнения этой задачи и были разработаны первые системные программы, послужившие прототипами операционных систем.
Основными компонентами подсистемы ввода-вывода являются драйверы, управляющие внешними устройствами и файловая система. В работе подсистемы ввода-вывода активно участвует диспетчер прерываний. Более того, основная нагрузка диспетчера прерываний обусловлена именно подсистемой ввода-вывода, поэтому диспетчер прерываний иногда считают частью подсистемы ввода-вывода.
Файловая система - это основное хранилище информации в любом компьютере. Она активно использует остальные части подсистемы ввода-вывода. Кроме того, модель файла лежит в основе большинства механизмов доступа к периферийным устройствам.
На подсистему ввода-вывода возлагаются следующие функции:
· организация параллельной работы устройств ввода-вывода и процессора;
· согласование скоростей обмена и кэширование данных;
· разделение устройств и данных между процессами (выполняющимися программами);
· обеспечение удобного логического интерфейса между устройствами и остальной частью системы;
· поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера;
· динамическая загрузка и выгрузка драйверов без дополнительных действий с операционной системой;
· поддержка нескольких различных файловых систем;
· поддержка синхронных и асинхронных операций ввода-вывода.
54. Организация параллельной работы устройств ввода-вывода и процессора. Эволюция ввода-вывода может быть представлена следующими этапами:
· Процессор непосредственно управляет периферийным устройством.
· Устройство управляется контроллером. Процессор использует программируемый ввод-вывод без прерываний (переход к абстракции интерфейса ввода-вывода).
· Использование контроллера прерываний. Ввод-вывод, управляемый прерываниями.
· Использование модуля (канала) прямого доступа к памяти. Перемещение данных в память (из нее) без использования процессора.
· Использование отдельного специализированного процессора ввода-вывода, управляемого центральным процессором.
· Использование отдельного компьютера для управления устройствами ввода-вывода при минимальном вмешательстве центрального процессора.
Проследив описанный путь развития устройств ввода-вывода, можно заметить, что вмешательство процессора в функции ввода-вывода становится все менее заметным. Центральный процессор все больше освобождается от задач, связанных с вводом-выводом, что приводит к повышению общей производительности компьютерной системы.
Для персональных компьютеров операции ввода-вывода могут выполняться тремя способами.
1. С помощью программируемого ввода-вывода. В этом случае, когда процессору встречается команда, связанная с вводом-выводом, он выполняет ее, посылая соответствующие команды контроллеру ввода-вывода. Это устройство выполняет требуемое действие, а затем устанавливает соответствующие биты в регистрах состояния ввода-вывода и не посылает никаких сигналов, в том числе сигналов прерываний. Процессор периодически проверяет состояние модуля ввода-вывода с целью проверки завершения операции ввода-вывода. Таким образом, процессор непосредственно управляет операциями ввода-вывода, включая опознание состояния устройства, пересылку команд чтения-записи и передачу данных. Процессор посылает необходимые команды контроллеру ввода-вывода и переводит текущий процесс в состояние ожидания завершения операции ввода-вывода. На блок-схеме (рис. 4.3) видны недостатки такого метода - большие потери процессорного времени, связанные с управлением вводом-выводом.
2. Ввод-вывод, управляемый прерываниями. Процессор посылает необходимые команды контроллеру ввода-вывода и продолжает выполнять текущий процесс, если нет необходимости в ожидании выполнения операции ввода-вывода (рис. 4.4). В противном случае текущий процесс приостанавливается до получения сигнала прерывания о завершении ввода-вывода, а процессор переключается на выполнение другого процесса. Наличие прерываний процессор проверяет в конце каждого цикла выполняемых команд.
Такой ввод-вывод намного эффективнее, чем программируемый ввод-вывод, так как при этом исключается ненужное ожидание с бесполезным простоем процессора, однако и в этом случае ввод-вывод потребляет еще значительное количество процессорного времени, потому что каждое слово, которое передается из памяти в модуль ввода-вывода (контроллер) или обратно, должно пройти через процессор.
3. Прямой доступ к памяти (direct memory access - DMA). В этом случае специальный модуль прямого доступа к памяти управляет обменом данными между основной памятью и контроллером ввода-вывода. Процессор посылает запрос на передачу блока данных модулю прямого доступа к памяти, а прерывание происходит только после передачи всего блока данных.
В настоящее время в персональных и других компьютерах используется третий способ ввода-вывода, поскольку в структуре компьютера имеется DMA-контроллер или подобное ему устройство, обслуживающее, как правило, запросы по передаче данных от нескольких устройств ввода-вывода на конкурентной основе.
DMA-контроллер имеет доступ к системной шине независимо от центрального процессора, как показано на. Контроллер содержит несколько регистров, доступных центральному процессору для чтения и записи (регистр адреса памяти, счетчик байтов, управляющие регистры). Управляющие регистры задают, какой порт ввода-вывода должен быть использован, направление переноса данных (чтение или запись в устройство ввода-вывода), единицу переноса (побайтно, пословно), а также число байтов, которые следует перенести за одну операцию.
Согласование скоростей обмена и кэширования данных
При обмене данными всегда возникает задача согласования скоростей работы устройств. Решение этой задачи достигается буферизацией данных [8,18, 20]. В подсистеме ввода-вывода часто используется буферизация в оперативной памяти. Однако буферизация только на основе оперативной памяти часто оказывается недостаточной из-за большой разницы скоростей работы оперативной памяти и внешнего устройства объема оперативной памяти может просто не хватить. В этих случаях часто используют в качестве буфера дисковый файл, называемый спул-файлом. Типичный пример применения спулинга - вывод данных на принтер. (Для печатаемых документов объем в несколько Мбайт - не редкость, поэтому временное хранение такого файла в течение десятков минут в оперативной памяти нецелесообразно.)
Другим решением проблемы является использование большой буферной памяти в контроллерах внешних устройств. Такой подход полезен в тех случаях, когда помещение данных на диск слишком замедляет обмен (или когда данные выводятся на сам диск). Например, в контроллерах графических дисплеев применяется буферная память, соизмеримая по объему с оперативной памятью, и это существенно ускоряет вывод графика на экран.
При рассмотрении различных методов буферизации нужно учитывать, что существует, как отмечалось, два типа устройств - блочные и символьные. Первые сохраняют информацию блоками фиксированного размера и передают ее поблочно (диски, ленты). Вторые выполняют передачу в виде неструктурированных потоков байтов (терминалы, принтеры, манипулятор мыши, сканеры и др.).
Возможные схемы буферизации ввода-вывода приведены на рис. 4.7.
Простейший тип поддержки со стороны ОС - одинарный буфер. В тот момент, когда пользовательский процесс выполняет запрос ввода-вывода, операционная система назначает ему буфер в системной части оперативной памяти.
Работа одинарного буфера для блочно-ориентированных устройств может быть
описана следующим образом. Сначала осуществляется передача входных данных в сис-
темный буфер. Когда она завершится, процесс перемещает блок в пользовательское
пространство и немедленно производит запрос следующего блока. Такая процедура на-
зывается опережающим считыванием или упреждающим вводом.
Такой подход по сравнению с отсутствием буферизации обеспечивает повышение быстродействия, поскольку пользовательский процесс может обрабатывать один блок данных в то время, когда происходит считывание следующего блока.
Пусть Т - время, необходимое для ввода одного блока, а С - для вычислений, выполняющихся между запросами на ввод-вывод. Без буферизации время выполнения, приходящееся на один блок, будет равно Т + С, при использовании одинарной буферизации время будет равно max [С, Т] + М, где М - время перемещения данных из системного буфера в пользовательскую память. В большинстве случаев Т + С > max [С, Т] + М.
Схема одинарного буфера может быть применена и при поточно-ориентированном вводе-выводе - построчно или побайтно (в строчных принтерах, терминалах и др.). Например, при операции вывода пользовательский процесс может разместить в буфере строку и продолжить работу.
Улучшить схему одинарной буферизации можно путем использования двух системных. Теперь процесс выполняет передачу данных в один буфер (или считывает из него), в то время как ОС освобождает (или заполняет) другой. Эта технология известна как двойная буферизация, или сменный буфер.
Время выполнения при блочно-ориентированной передаче можно грубо оценить как max [С, Т]. Таким образом, если С < Т, то блочно-ориентированное устройство может работать с максимальной скоростью. Если С > Т, то двойная буферизация избавляет процесс от необходимости ожидания завершения ввода-вывода.
Двойной буферизации может оказаться недостаточно, если процесс часто выполняет ввод или вывод. Решить проблему помогает наращивание количества буферов. Если буферов больше двух, схема именуется циклической буферизацией.
Буферизация данных позволяет согласовать не только скорости работы процессора и внешних устройств, но и решить другую задачу - сократить количество реальных операций ввода-вывода за счет кэширования данных. Дисковый кэш является непременным атрибутом подсистем ввода-вывода практически всех операционных систем, значительно сокращая время доступа к хранимым данным.
Разделение устройств и данных между процессами
Устройства ввода-вывода могут предоставляться процессам как в монопольном, так и в разделенном режиме. При этом ОС должна обеспечивать контроль доступа теми же способами, что и при доступе процессов к другим ресурсам вычислительной системы путем проверки прав пользователя или группы пользователей, от имени которых действует процесс, на выполнение той или иной операции над устройством.
ОС может контролировать доступ не только к устройству в целом, но и к отдельным порциям данных, хранимых этим устройством. Диск является типичным примером такого устройства, где важно контролировать доступ к файлам и каталогам. В последнем случае непременным является задание режима совместного использования устройства в целом.
Одно и то же устройство в разные периоды времени может использоваться как в разделяемом, так и монопольном режимах. Тем не менее существуют устройства, для которых характерен один из этих режимов, например последовательные порты и алфавитно-цифровые терминалы чаще используются в монопольном режиме, а диск - в режиме совместного доступа.
В случае совместного использования ОС должна оптимизировать последовательность операций ввода-вывода для различных процессов в целях повышения общей производительности. Например, при обмене данными нескольких процессов с диском можно так упорядочить последовательность операций, что непроизводительные затраты времени на перемещение головок существенно уменьшаются (при этом для отдельных процессов возможно некоторое замедление операции ввода-вывода).
При разделении устройства между процессами может возникнуть необходимость в разграничении данных процессов друг от друга. Обычно такая потребность возникает при совместном использовании последовательных устройств, которые в отличие от устройств прямого доступа не адресуются. Типичный представитель такого устройства принтер. Для таких устройств организуется очередь заданий на вывод, при этом каждое задание представляет собой порцию данных, которую нельзя разрывать, например, документ для печати.
Для хранения очереди заданий используется спул-файл, который согласует скорость работы принтера и оперативной памяти и позволяет организовать разбиение данных на логические порции. Процессы могут одновременно выполнять вывод на принтер, помещая данные в свой раздел спул-файла.
Дата публикования: 2014-11-04; Прочитано: 5685 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!