Опишите способы реализации механизмов ввода вывода данных

Способы реализации процесса ввода-вывода (алгоритмы ввода вывода)

Способы реализации процесса ввода-вывода (алгоритмы ввода вывода) — раздел Образование, Поколения операционных систем Три Способа Реализации Процесса Ввода-Вывода Данных (Алгоритмы Ввода-Вывода).

Три способа реализации процесса ввода-вывода данных (алгоритмы ввода-вывода):

1. Пользовательская программа выдает системный запрос, который ядро ОС транслирует в вызов соответствующего драйвера. Этот драйвер начинает процесс ввода-вывода. В это время драйвер выполняет короткий программный цикл, постоянно опрашивая готовность устройства, с которым он работает. Устройство имеет регистр состояния и регистр данных. Один конкретный бит указывает на то, что устройство еще занято. По завершении операции ввода-вывода драйвер помещает данные в регистр данных устройства и возвращается в исходное состояние. Затем ОС возвращает управление программе, осуществляющей вызов. Этот способ называется ожиданием готовности или активным ожиданием и имеет один недостаток: процессор должен опрашивать устройство до тех пор, пока оно завершит работу. См. рис. 10.

2. Драйвер запускает устройство и просит его выдать прерывание по окончании ввода-вывода. После этого драйвер возвращает данные, операционная система блокирует программу вызова (или не блокирует) и начинает выполнять другие задания. Когда контроллер обнаруживает окончание передачи данных, он генерирует прерывание, чтобы сигнализировать о завершении операции.

Прерывания очень важны в работе ОС, поэтому рассмотрим это понятие более подробно. На рис. 11 показан трехшаговый процесс ввода вывода.

На первом шаге драйвер передает команду контроллеру диска, записывая информацию в регистры устройства. Затем контроллер запускает устройство. Когда контролер заканчивает чтение или запись того количества байтов, которое ему было указано передать, он посылает сигнал микросхеме контроллера прерываний, используя определенные провода шины, — это шаг 2. На шаге 3, если контроллер прерываний готов к приему прерывания (а этого может и не быть, если он занят прерыванием более высокого порядка), то он подает сигнал на определенный контакт процессора, таким образом информируя центральный процессор.

На шаге 4 контроллер прерываний выставляет номер устройства на шину так, чтобы центральный процессор мог прочесть его и узнать, какое устройство только что завершило свою работу (ведь в одно и то же время могут работать несколько устройств).

Как только ЦП решил принять прерывание, содержимое счетчика команд (РС) и слова состояния процессора (PSW) помещаются в текущий стек, а процессор переключается в режим ядра. Номер устройства может использоваться как индекс части памяти, служащий для поиска адреса обработчика прерываний данного устройства. Эта часть памяти называется вектором прерываний. Когда обработчик прерываний (эта часть драйвера устройства, пославшего прерывание) начинает свою работу, он удаляет расположенные в стеке счетчик команд и слово состояния процессора, сохраняет их и запрашивает устройство, чтобы получить информацию о его состоянии. После того, как обработка прерывания целиком завершена, управление возвращается к работавшей до этого программе пользователя, к той команде, выполнение которой еще не было закончено. Описанные шаги показаны на рис.12.

3. Третий метод ввода-вывода информации заключается в использовании специального контроллера прямого доступа к памяти (DMA – Direct Memory Access), который управляет потоком битов между оперативной памятью и некоторыми контроллерами без постоянного вмешательства ЦП. Процессор вызывает микросхему DMA, “говорит ей”, сколько байтов нужно передать, сообщает адреса устройства и памяти, а также направление передачи данных и позволяет дальше действовать ей самой. По завершении работы DMA инициирует прерывание, которое обрабатывается также, как было описано выше.

Прерывания могут происходить во время обработки другого прерывания. Поэтому ЦП должен обладать возможностью запрещать прерывания и разрешать их позже. Пока прерывания запрещены, все устройства, завершившие работу, продолжают посылать свои сигналы, но работа процессора не прерывается до тех пор, пока прерывания не будут разрешены. Если заканчивают работу сразу несколько устройств в то время, когда прерывания запрещены, контроллер прерываний решает, какое из них должно быть обработано первым, обычно основываясь на статических приоритетах, назначенных для каждого устройства. Устройство с высшим приоритетом побеждает.

Источник

Большая Энциклопедия Нефти и Газа

Механизм — ввода-вывод

Механизм ввода-вывода заключается в пересылке байтов данных от устройств в оперативную память и обратно эффективным и надежным способом. Такая пересылка часто включает механические перемещения, например, вращение диска и ленты или нажатие клавиш клавиатуры. Время, затрачиваемое на такие перемещения, обычно значительно превышает время, в течение которого процессор обрабатывает данные. Таким образом, операции ввода-вывода требуют тщательного планирования для достижении максимальной эффективности. [1]

Механизм ввода-вывода заключается в пересылке байтов данных от устройств в оперативную память и обратно эффективным и надежным способом. [2]

Существует ли четкое разделение механизмов ввода-вывода и управления памятью. [3]

Каким образом способ функционирования механизма ввода-вывода влияет на процесс управления страничным обменом. [4]

ESS-интерфейс позволяет связываться с многоуровневым механизмом ввода-вывода , состоящим из нескольких альтернативных модулей. Пользователь, работающий на уровне записей, выдает соответствующую макрокоманду, и его запрос через ESS попадает на уровень PS ( Presentation Services — услуги по оформлению), а затем при необходимости — чуть ниже, на уровень MS ( Media Services — услуги связи), где осуществляется управление буферизацией, и далее — на уровень IOAS, если требуется физическое выполнение операций ввода-вывода. [5]

Читайте также:  Способы устранения двойного международного налогообложения

При связывании файла с программой устанавливается соответствующий уровень обслуживания, а также определяемые им взаимоотношения между уровнями механизма ввода-вывода . Когда выдается запрос на чтение, ESS сначала проверяет корректность параметров макрокоманд RECEIVE, а затем передает его ниже согласно распределительной таблице, созданной в момент. [6]

Кроме того, разработчику небезразлично распределение функций между процессором и другими активными устройствами. Хорошее знание структуры и функциональных характеристик механизмов ввода-вывода позволяет наилучшим образом определить интерфейсы, которыми следует обеспечить прикладных программистов, а также способы реализации соответствующих функций на более низком уровне. [7]

Первый из них — как много информации, относящейся к структуре и механизмам ввода-вывода системы 1432, следует знать обычному пользователю. [8]

Состав систем видеоотображения учетных данных обусловлен типом складского комплекса, организационной структурой управления предприятием по поставкам продукции, количеством зон и участков хранения, участков отборки и комплектации продукции производственно-технического назначения. Система видеоотображения учетных данных, как правило, включает ряд узловых терминальных устройств, состоящих из механизма ввода-вывода ( клавиатуры), дисплея на электроннолучевой трубке; печатающие и читающее устройства; системы управления штабелерами с установленными терминалами ( терминал-операторами); мини — ЭВМ, работающую в многопроцессорном режиме и содержащую не менее двух процессоров; каналы связи и другие аппаратные средства. [9]

Напомним, что во всех случаях расширение этих системных макро содержит команду ЕМТ, которая инициирует вызов специальной подпрограммы, обрабатывающей операции ввода-вывода. В системе разделения времени рядовому пользователю приходиться полагаться на управляемые монитором программы, поскольку такие системы не предоставляют пользователям, не имеющим особых привилегий, прямого доступа к механизму ввода-вывода . [10]

Обычно при удалении из диспетчерской очереди некоторой программы для нее определяется приблизительный размер рабочего пространства. Значения этого параметра используются в дальнейшем промежуточным планировщиком при анализе находящихся в его распоряжении программ с целью выяснения, какие из них лучше всего в данный момент передать диспетчеру для выполнения. Опыт эксплуатации мультипрограммных систем показал, что при включении в состав смеси программ, для которых суммарный объем рабочего пространства превышает объем физической памяти вычислительной установки, возникают слишком большие дополнительные нагрузки на процессор и механизм ввода-вывода , заметно снижающие эффективность работы систем в целом. [11]

Затем мы исследуем пользовательские интерфейсы операционной системы iMAX, использующие эти архитектурные решения ( разд. Гибкость предоставляемого интерфейса также существенно зависит от расширений языка 432 — Ада для работы со ссылочными типами уточнения пакетов, что проиллюстрировано ниже в данной главе. После рассмотрения структуры и механизмов ввода-вывода i432 мы сделаем несколько замечаний более высокого уровня, а также укажем преимущества структуры ввода-вывода i432 над более традиционными системами ( разд. В заключение главы ( разд. [13]

С листанием связано понятие виртуальной памяти. Поскольку программа отображается на физическую память лишь по требованию, программист при создании программы может считать, что у него есть значительно расширенное пространство памяти. IBM 370 / 168 с OS / VS 2.2 дает пользователю 16 миллионов ячеек виртуальной памяти. Программист может строить свою программу так, как если бы при исполнении ей были доступны миллионы ячеек памяти. Концепция виртуальной памяти освобождает программиста ( и компилятор) от необходимости планировать сложные структуры перезагрузки. Механизм листания заменяет по мере необходимости одни листы задачи на другие. Наличие большого объема виртуальной памяти влияет также на ввод-вывод. Файлы данных, которым обычно управляют команды ввода-вывода, могут быть представлены в виртуальной памяти как резидентные, и механизм листания становится по существу механизмом ввода-вывода . Программист, желающий переместить свои файлы в виртуальной памяти, не использует лвкых команд ввода-вывода. [14]

Источник

Вопрос 7. Способы реализации процесса ввода-вывода (алгоритмы ввода вывода).

Три способа реализации процесса ввода-вывода данных (алгоритмы ввода-вывода):

1. Пользовательская программа выдает системный запрос, который ядро ОС транслирует в вызов соответствующего драйвера. Этот драйвер начинает процесс ввода-вывода. В это время драйвер выполняет короткий программный цикл, постоянно опрашивая готовность устройства, с которым он работает. Устройство имеет регистр состояния и регистр данных. Один конкретный бит указывает на то, что устройство еще занято. По завершении операции ввода-вывода драйвер помещает данные в регистр данных устройства и возвращается в исходное состояние. Затем ОС возвращает управление программе, осуществляющей вызов. Этот способ называется ожиданием готовности или активным ожиданием и имеет один недостаток: процессор должен опрашивать устройство до тех пор, пока оно завершит работу. См. рис. 10.

2. Драйвер запускает устройство и просит его выдать прерывание по окончании ввода-вывода. После этого драйвер возвращает данные, операционная система блокирует программу вызова (или не блокирует) и начинает выполнять другие задания. Когда контроллер обнаруживает окончание передачи данных, он генерирует прерывание, чтобы сигнализировать о завершении операции.

Прерывания очень важны в работе ОС, поэтому рассмотрим это понятие более подробно. На рис. 11 показан трехшаговый процесс ввода вывода.

Читайте также:  Способы распространения семян репейника

На первом шаге драйвер передает команду контроллеру диска, записывая информацию в регистры устройства. Затем контроллер запускает устройство. Когда контролер заканчивает чтение или запись того количества байтов, которое ему было указано передать, он посылает сигнал микросхеме контроллера прерываний, используя определенные провода шины, — это шаг 2. На шаге 3, если контроллер прерываний готов к приему прерывания (а этого может и не быть, если он занят прерыванием более высокого порядка), то он подает сигнал на определенный контакт процессора, таким образом информируя центральный процессор.

На шаге 4 контроллер прерываний выставляет номер устройства на шину так, чтобы центральный процессор мог прочесть его и узнать, какое устройство только что завершило свою работу (ведь в одно и то же время могут работать несколько устройств).

Как только ЦП решил принять прерывание, содержимое счетчика команд (РС) и слова состояния процессора (PSW) помещаются в текущий стек, а процессор переключается в режим ядра. Номер устройства может использоваться как индекс части памяти, служащий для поиска адреса обработчика прерываний данного устройства. Эта часть памяти называется вектором прерываний. Когда обработчик прерываний (эта часть драйвера устройства, пославшего прерывание) начинает свою работу, он удаляет расположенные в стеке счетчик команд и слово состояния процессора, сохраняет их и запрашивает устройство, чтобы получить информацию о его состоянии. После того, как обработка прерывания целиком завершена, управление возвращается к работавшей до этого программе пользователя, к той команде, выполнение которой еще не было закончено. Описанные шаги показаны на рис.12.

3. Третий метод ввода-вывода информации заключается в использовании специального контроллера прямого доступа к памяти (DMA – Direct Memory Access), который управляет потоком битов между оперативной памятью и некоторыми контроллерами без постоянного вмешательства ЦП. Процессор вызывает микросхему DMA, “говорит ей”, сколько байтов нужно передать, сообщает адреса устройства и памяти, а также направление передачи данных и позволяет дальше действовать ей самой. По завершении работы DMA инициирует прерывание, которое обрабатывается также, как было описано выше.

Прерывания могут происходить во время обработки другого прерывания. Поэтому ЦП должен обладать возможностью запрещать прерывания и разрешать их позже. Пока прерывания запрещены, все устройства, завершившие работу, продолжают посылать свои сигналы, но работа процессора не прерывается до тех пор, пока прерывания не будут разрешены. Если заканчивают работу сразу несколько устройств в то время, когда прерывания запрещены, контроллер прерываний решает, какое из них должно быть обработано первым, обычно основываясь на статических приоритетах, назначенных для каждого устройства. Устройство с высшим приоритетом побеждает.

Источник

Основные методы ввода-вывода (I/O)

Авторизуйтесь

Основные методы ввода-вывода (I/O)

Начинающему разработчику зачастую сложно разобраться в средствах ввода-вывода (I/O), поскольку присутствует небольшая путаница в определении различий этих способов. В данном материале попробуем заполнить этот пробел и разобраться в классификации основных типов ввода-вывода.

I/O в аппаратном обеспечении

В современных операционных системах средства ввода-вывода представляют собой способы взаимодействия между обработчиком информации и внешним миром. Сюда можно отнести чтение или запись файлов на жёсткий диск или SSD, отправку и получение данных по сети, отображение информации на мониторе и получение ввода с мыши и клавиатуры.

Способы взаимодействия современных ОС с периферийными устройствами зависят от типа устройства, возможностей прошивки и аппаратного обеспечения. Можно считать, что периферия может обрабатывать несколько запросов одновременно. То есть время последовательного взаимодействия прошло. В этом смысле все взаимодействия устройств ввода-вывода с процессором асинхронны и находятся на стороне аппаратного обеспечения.

Такой асинхронный механизм называется аппаратным прерыванием. В простом случае, процессор отправляет запрос к внешнему устройству и начинает бесконечный цикл, в котором он каждый раз запрашивает у периферии, готовы ли данные, которые процессор мог бы считать, и ждёт в цикле, пока периферия не выдаст ему эти данные. Этот метод ввода-вывода называется методом опроса поскольку процессор должен постоянно проверять состояние периферии.

3–5 декабря, Онлайн, Беcплатно

На самом деле, на современном оборудовании процессор просит периферию выполнить действие и забывает о нём, продолжая обрабатывать другие инструкции. Как только устройство завершит свою работу, оно сообщает об этом процессору, вызывая прерывание. Это происходит на уровне аппаратного обеспечения, и при этом процессору никогда не приходится ожидать или опрашивать периферию, что освобождает его для другой работы, пока периферия сама не сообщит о своей готовности.

I/O в программном обеспечении

В среде программного обеспечения существует большое количество видов ввода и вывода: блокирующий, неблокирующий, мультиплексированный и асинхронный. Давайте рассмотрим их по очереди.

Блокирующий метод

Помните, что любая пользовательская программа запускается внутри процесса, а код выполняется в контексте потока? Предположим, вы пишете программу, которой нужно читать информацию из файла. С блокирующим вводом-выводом вы просите ОС «усыпить» ваш поток и «разбудить» его только после того, как данные из файла будут доступны для чтения.

То есть блокирующий ввод-вывод называется так, потому что поток, который его использует, блокируется и переходит в режим ожидания, пока ввод-вывод не будет завершён.

Неблокирующий метод

Проблема метода блокировки заключается в том, что поток будет спать, пока ввод-вывод не завершится. Поток не сможет выполнять никаких других задач, кроме ожидания завершения ввода-вывода. Иногда вашей программе больше и не надо ничего делать. В противном случае во время ожидания ввода-вывода было бы полезно выполнять другие задачи.

Читайте также:  Способ применения шампуня глубокой очистки

Один из способов осуществить это — использовать неблокирующий ввод-вывод. Его идея заключается в том, что когда программа делает вызов на чтение файла, ОС не будет блокировать поток, а просто вернёт ей либо готовые данные, либо информацию о том, что ввод-вывод ещё не закончен. Это не заблокирует поток, но программе придётся позже проверять, завершён ли ввод-вывод. Это означает, что ПО может по-разному реагировать в зависимости от того, завершён ли ввод-вывод и выполнять другие задачи. Когда же программе снова понадобится ввод-вывод, она сможет повторно попробовать прочесть содержимое файла, и если ввод-вывод завершён, то получит содержимое файла. В противном случае ПО снова получит сообщение о том, что операция ещё не завершена и сможет заняться другими задачами.

Мультеплексированный метод

Проблема с неблокирующим вводом-выводом в том, что с ним не удобно работать, если задачи, которые выполняет программа, ожидая ввода-вывода, сами из себя представляют другой ввод-вывод.

Хорошо, если ПО просит ОС прочитать содержимое из файла А, после чего выполняет какие-нибудь сложные вычисления. Затем проверяет, завершилось ли чтение файла А, и если да, то просто продолжает ту работу, для которой нужно было содержимое файла, а иначе снова выполняет некоторое количество сложных вычислений и так далее.

Но что, если программе не нужно выполнять сложные вычисления? Ей просто нужно прочесть файл A и одновременно файл B. Пока ПО ожидает завершения обработки файла А, оно делает неблокирующий вызов чтения содержимого файла В. Во время ожидания обработки программе больше нечего делать, потому она входит в бесконечный цикл опроса, проверяя, готово ли A и готово ли B, снова и снова. Это либо нагрузит процессор проверками состояния ваших неблокирующих вызовов, либо вам придётся вручную добавить какое-то произвольное время, которое ваш поток будет «спать», а значит, программа немного позже заметит, что ввод-вывод готов, что отрицательно скажется на пропускной способности ПО.

Во избежание этого можно использовать мультиплексированный ввод-вывод. Он тоже блокирует поток на операциях ввода-вывода, но вместо того, чтобы производить блокировку по очереди, вы можете запланировать все операции ввода-вывода, которые вам нужно сделать, и блокировать их все. Операционная система разбудит поток, когда какая-нибудь из операций завершится. В некоторых реализациях мультиплексированного ввода-вывода можно даже точно указать, что вы хотите, чтобы поток разбудили, только когда заданный набор операций ввода-вывода будет завершён, например, когда файлы A и C, или файлы B и D будут готовы.

Таким образом ПО делает неблокирующий вызов чтения файла A, потом неблокирующий вызов чтения файла B, и наконец говорит ОС: усыпи мой поток, и разбуди его, когда A и B будут оба готовы, или когда один из них будет готов.

Асинхронный метод

Проблема мультиплексированного ввода-вывода в том, что поток всё-таки спит, пока ввод-вывод не будет готов для обработки. Для многих программ это подходит, поскольку у них нет других задач, пока они ждут завершения операций ввода-вывода. Но иногда у них есть и другие задачи.

Например, ПО вычисляет цифры числа π и одновременно суммирует значения из нескольких файлов. Вам хотелось бы запланировать все операции чтения файлов, пока программа ждёт их выполнения, вычислять цифры числа π. Когда какой-нибудь из файлов будет прочитан, ПО прибавит записанное в нём значение и продолжит вычислять цифры числа π дальше, пока ещё один файл не будет прочитан.

Чтобы это работало, нужно, чтобы ваше вычисление цифр числа π могло быть прервано вводом-выводом, когда он завершается. Это можно сделать с помощью обратных вызовов, связанных с событиями. Вызов на чтение принимает функцию обратного вызова и возвращается немедленно. Когда ввод-вывод завершается, операционная система остановит ваш поток и выполнит обратный вызов. Когда обратный вызов завершится, система возобновит работу вашего потока.

Многопоточность или однопоточность?

Вы, наверно, заметили, что все вышеописанные способы ввода-вывода работают в рамках одного потока, главного потока вашего приложения. На самом деле, для выполнения ввода-вывода не требуется отдельный поток, поскольку, как вы видели в начале статьи, вся периферия выполняет ввод-вывод асинхронно. Поэтому и возможно делать блокирующий, неблокирующий, мультиплексированный и асинхронный ввод-вывод в однопоточной модели и одновременный ввод-вывод может работать без поддержки многопоточности.

Но обработка результатов операций ввода-вывода может быть и многопоточной. Это позволяет программе делать одновременные вычисления поверх одновременного ввода-вывода. Так что, ничто не мешает вам совмещать многопоточность и эти механизмы ввода-вывода.

В самом деле, есть пятый популярный метод ввода-вывода, который требует многопоточности. Его часто путают с неблокирующим или асинхронным, поскольку он похож по интерфейсу на те два. Он работает просто: он использует блокирующий ввод-вывод, но каждый блокирующий вызов делается в отдельном потоке. В зависимости от реализации, вызов либо принимает функцию обратного вызова, либо использует модель опроса, как если он возвращает Future .

Источник

Оцените статью
Разные способы