Что называется вводом выводом

Ввод/вывод

С информатике, ввод/вывод (в англ. языке часто используется сокращение I/Oinput/output) означает взаимодействие между обработчиком информации (например, компьютер) и внешним миром, который может представлять как человек, так и любая другая система обработки информации. Ввод — сигнал или данные, полученные системой, а вывод — сигнал или данные, посланные ею (или из нее). Термин также может использоваться как обозначение (или дополнение к обозначению) определенного действия: «выполнять ввод/вывод» означает выполнение операций ввода или вывода. Устройства ввода-вывода используются человеком (или другой системой) для взаимодействия с компьютером. Например, клавиатуры и мыши — специально разработанные компьютерные устройства ввода, а мониторы и принтеры — компьютерные устройства вывода. Устройства для взаимодействия между компьютерами, как модемы и сетевые карты, обычно служат устройствами ввода и вывода одновременно.

Стоит отметить, что назначение устройства в качестве устройства ввода или вывода зависит от перспективы. Мыши и клавиатуры принимают физическое взаимодействие, осуществляемое человеком-пользователем (кстати, относительно него это будут действия по выводу информации), и превращает его в сигналы, понятные компьютеру. Вывод информации из этих устройств является вводом ее в компьютер. Аналогично, принтеры и мониторы получают на входе сигналы, которые выводит компьютер. Затем они преобразуют эти сигналы в такой вид, который человек сможет увидеть или прочитать. (Для людей-пользователей процесс чтения или просмотра подобных вариантов представления информации является вводом или получением информации).

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

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

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

Содержание

Интерфейс ввода-вывода

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

Установление контакта должно быть реализовано интерфейсом при помощи соответствующих команд типа (ЗАНЯТ, ГОТОВ, ЖДУ), чтобы процессор мог взаимодействовать с устройством ввода-вывода через интерфейс.

Если существует необходимость передачи различающихся форматов данных, то интерфейс должен уметь конвертировать последовательные (упорядоченные) данные в параллельную форму и наоборот.

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

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

Режимы адресации

Существует несколько способов, которыми данные могут быть прочитаны или помещены в память. Каждый метод представляет собой режим адресации и имеет собственные преимущества и ограничения.

Режимы адресации делятся на множество типов, как например, прямая адресация, косвенная (непрямая) адресация, непосредственная адресация, индексная адресация, базовая адресация, базово-индексная адресация, предполагаемая адресация и т. д.

Прямая адресация

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

В данном случае операнд Addr указывает на область памяти, содержащее данные и копирует их в указанный регистр Reg.

Косвенная адресация

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

Ввод-вывод с распределением (вводимой информации) по портам (памяти)

Ввод-вывод с распределением (вводимой информации) по портам (памяти) обычно требует применения инструкций, специально разработанных для выполнения операций ввода-вывода.

Источник

Устройства ввода и вывода информации

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

Устройства вывода информации

Устройства вывода информации – это те устройства, которые переводят информацию с компьютерного языка в формы, понятные для человека. Монитор принтер видеокарта проектор и плоттер, это именно те устройства которые следует отнести к устройствам вывода данных. Чтобы ввести информацию в компьютер нужно пользоваться устройствами ввода Главное их роль – создать воздействие на компьютер. Множества выпускаемых устройств ввода повлекли за собой целые технологии от осязаемых до голосовых. И хотя они функционируют по разному, но предназначение у них одно – дать пользователю связаться с компьютером. Именно благодаря своей компактности и наглядности представления информации человеком было создано устройства ввода графической информации. Основными сторонами использования устройств ввода графической информации являются системы автоматизированного проектирования, обработки изображений, обучения, управление процессами, мультипликации и многие другие.

Монитор

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

Принтер

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

Плоттер

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

Проектор

Лампа перераспределяющая свет вместе с концентрацией светового потока на маленькой плоскости называется проектор. Основным элементом данного прибора является лампа, свет которой, поступает через определенные элементы, поступает на экран и создает картинку. Лампа в проекторе является самым основным элементом, свет которого проходит через определенные элементы, поступает на экран и после этого мгновенно создает картинку. На сегодняшний день лампы проектора разделяют на LCD и DLP на основе оттого через какие элементы должен проходить свет. Компактность, а также менее негативное влияние на зрение, вот главные достоинства жидкокристаллических проекторов. Их недостатком является менее насыщенный чёрный цвет. Качественная картинка – это достоинство микрозеркальных проекторов. Утомляемость зрения при продолжительном просмотре – вот главная их слабая сторона

Колонки

Колонки – устройство, которое подключается к компьютеру и служит устройством вывода звуковой информации.

Устройства ввода информации.

Устройства при помощи, которых можно ввести данные в компьютер называется устройства ввода. Осуществить воздействие на компьютер, вот одна из главных задач устройств ввода. Разнообразие выпускаемых устройств ввода повлекли за собой целые технологии от осязаемых до голосовых. И хотя они служат для разного, но предназначены лишь для одного–дать пользователю связаться с компьютером. Благодаря своей компактности и наглядности человек создал устройства ввода.

Клавиатура

Клавиатура является одним из самых основных устройств ввода данных.

MFII вот стандарт клавиатуры в современном мире. Пять групп клавиш, доставляемых свою высокую функциональную поставку, вот что можно отметить в клавиатуре MFII. Специальные клавиши для слепых с осязаемыми точками на клавишах, специальные клавиатуры для складов и магазинов, дававшие устройства для чтения штрихового кода, вот что следует отметить среди других видов клавиатур. Сенсорные клавиатуры, имеющие в своей особенности защиту от опасного влияния, специальные покрытия клавиш дополнительной сенсорной фольгой, клавиатура подходящая для медицинских учреждений со специальными устройствами считывания информации со страховой карты, называются промышленными. В настоящее время появились клавиатуры со специальными клавишами для удобства работы с той или иной операционной системой (ОС), например, клавиатура для Windows 95. Таким образом, выбор клавиатуры зависит от ОС, с которой предлагается работать.

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

Сканеры

Для того чтобы читать графическую информацию с бумажного используется оптические сканеры. Сканируемое изображение считывается и изменяется в цифровую форму элементами дополнительного устройства: CCD – чипами. Сканеры– это устройство, которое, анализируя какой–либо объект, создает цифровую копию изображения объекта, этот процесс называется сканированием.

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

Источник

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

Preface

Зачем?

Годы программирования на PHP принесли свои плоды — я никогда не задумывался что происходит за кулисами. Но когда проекты стали медленно, но верно тормозить — я решил что пора взяться за ум и начал изучать питон (что с успехом делаю и сейчас). Но так как мне решительно надоели всякие слова типа «fork», «socket», «eventloop», «multiprocessing», «epoll» и т.п. я решил копнуть глубже. Что из этого получилось — решать вам. Тем не менее определенная путаница присутствует. Подтверждение этому можно найти в ссылках [6,7]

int main()

В данной статье рассматривается I/O на базе ОС Linux версии 2.6 и старше. Так как материал во многом ориентирован на таких как я (прибор для нагревания воды опционально оборудованный звуковым оповещателем), придется разобрать много азов, поэтому просто пропускайте ненужные вам пункты.

Базовые концепции
Модели ввода/вывода

Всего в Unix подобных системах доступно 5 + 1 различных моделей ввода/вывода. «Плюс одна» я объясню немного позже, а пока рассмотрим каждую модель более детально.

Блокирующий I/O (blocking I/O)

По умолчанию весь ввод вывод выполняется в блокирующем стиле. Рассмотрим схематичное изображение процессов происходящих при блокирующем вводе/выводе.

Что называется вводом выводом. Смотреть фото Что называется вводом выводом. Смотреть картинку Что называется вводом выводом. Картинка про Что называется вводом выводом. Фото Что называется вводом выводом

В данном случае процесс делает системный вызов recvfrom. В результате процесс заблокируется (уйдет в сон) до тех пор пока не придут данные и системный вызов не запишет их в буфер приложения.
После этого системный вызов заканчивается (return OK) и мы можем обрабатывать наши данные.
Очевидно, что данный подход имеет очень большой недостаток — пока мы ждем данные (а они могут идти очень долго из-за качества коннекта и т.п.) процесс спит и не отвечает на запросы.

Неблокирующий I/O (nonblocking I/O)

Мы можем установить неблокирующий режим при работе с сокетами, фактически сказав ядру следующее: «Если ввод/вывод, который мы хотим осуществить, невозможен без погружения процесса в блокировку (сон), то верни мне ошибку что не можешь этого сделать без блокировки.» Рассмотрим схематичное изображение процессов происходящих при неблокирующем вводе/выводе.

Что называется вводом выводом. Смотреть фото Что называется вводом выводом. Смотреть картинку Что называется вводом выводом. Картинка про Что называется вводом выводом. Фото Что называется вводом выводом

Первые три раза, которые мы посылаем системный вызов на чтение не возвращают результат, т.к. ядро видит, что данных нет и просто возвращает нам ошибку EWOULDBLOCK.
Последний системный вызов выполнится успешно, т.к. данные готовы для чтения. В результате ядро запишет данные в буфер процесса и они станут доступными для обработки.
На этой основе можно создать цикл, который постоянно вызывает recvfrom (обращается за данными) для сокетов, открытых в неблокирующем режиме. Этот режим называется опросом (поллинг/polling) т.к. приложение все время опрашивает ядро системы на предмет наличия данных. Я принципиально не вижу ограничений чтоб опрашивать несколько сокетов последовательно и соответственно читать из первого, в котором есть данные. Такой подход приводит к большим накладным расходам (overhead) процессорного времени.

Мультиплексирование I/O (multiplexing I/O)

Вообще слово multiplexing переводится как «уплотнение». Мне кажется его удачно можно описать девизом тайм-менеджмента — «учись успевать больше». При мультиплексировании ввода/вывода мы обращаемся к одному из доступных в ОС системному вызову (мультиплексору например select, poll, pselect, dev/poll, epoll (рекомендуемый для Linux), kqueue (BSD)) и на нем блокируемся вместо того, чтобы блокироваться на фактическом I/O вызове. Схематично процесс мультиплексирования представлен на изображении

Что называется вводом выводом. Смотреть фото Что называется вводом выводом. Смотреть картинку Что называется вводом выводом. Картинка про Что называется вводом выводом. Фото Что называется вводом выводом

Приложение блокируется при вызове select’a ожидая когда сокет станет доступным для чтения. Затем ядро возвращает нам статус readable и можно получать данные помощью recvfrom. На первый взгляд — сплошное разочарование. Та же блокировка, ожидание, да и еще 2 системных вызова (select и recvfrom) — высокие накладные расходы. Но в отличии от блокирующего метода, select (и любой другой мультиплексор) позволяет ожидать данные не от одного, а от нескольких файловых дескрипторов. Надо сказать, что это наиболее разумный метод для обслуживания множества клиентов, особенно если ресурсы достаточно ограничены. Почему это так? Потому что мультиплексор снижает время простоя (сна). Попробую объяснить следующим изображением

Что называется вводом выводом. Смотреть фото Что называется вводом выводом. Смотреть картинку Что называется вводом выводом. Картинка про Что называется вводом выводом. Фото Что называется вводом выводом

Создается пул дескрипторов, соответствующих сокетам. Даже если при соединении нам пришел ответ EINPROGRESS это значит, что соединение устанавливается, что нам никак не мешает, т.к. мультиплексор в ходе проверки все равно возьмет тот, который первый освободился.
А теперь внимание! Самое главное!
Ответьте на вопрос: У какого события вероятность больше? У события А, что данные будут готовы у какого-то конкретного сокета или у события Б, что данные будут готовы хотя бы у одного сокета?. Ответ: Б
В случае с мультиплексированием у нас в цикле проверяются ВСЕ сокеты и берется первый который готов. Пока мы с ним работаем, другие также могут подоспеть, тоесть мы снижаем время на простой (первый раз мы может ждем долго, но остальные разы — гораздо меньше).
Если же решать проблему обычным способом (с блокировкой) то нам придется гадать, из какого коннекта прочитать первым вторым и т.п. т.е. мы 100% ошибемся и будем ждать, а хотя могли бы не тратить это время

I/O в тредах/дочерних процессах (One file descr per thread or process)

Говоря в начале что существует 5 + 1 способ, имелся ввиду как раз такой подход, когда используется несколько потоков или процессов, в каждом из которых производится блокирующий I/O. Он похож на мультиплексирование ввода/вывода, но при этом имеет ряд недостатков. Всем известный — потоки в линуксе достаточно дорогие (с т.з. системных команд), так что использование потоков вызывает увеличение накладных расходов. К тому же если рассматривать python в качестве языка программирования, в нем существует GIL и соответственно в каждый момент времени внутри 1 процесса может выполняться только один поток. Другой вариант — создавать дочерние процессы для обработки ввода/вывода в блокирующем стиле. Но тогда надо продумывать взаимодействие между процессами (IPC — interprocess communication), что имеет некоторые сложности. К тому же если суммарное количество ядер не превышает единицы, то такой подход имеет сомнительный выигрыш. Кстати, насколько я знаю Apache работает как раз примерно по такой схеме (MPM prefork или threads) обслуживая клиента либо в треде либо в отдельном процессе.

Ввод вывод управляемый сигналами (signal-driven I/O)

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

Что называется вводом выводом. Смотреть фото Что называется вводом выводом. Смотреть картинку Что называется вводом выводом. Картинка про Что называется вводом выводом. Фото Что называется вводом выводом

Вначале необходимо установить параметры сокета для работы с сигналами и назначить обработчик сигналов (signal handler) с помощью системного вызова sigaction. Результат возвращается мгновенно и приложение, следовательно, не блокируется. Фактически, всю работу на себя берет ядро, т.к. оно отслеживает когда данные будут готовы и посылает нам сигнал SIGIO, который вызывает установленный на него обработчик (функция обратного вызова, callback). Соответственно сам вызов recvfrom можно сделать либо в обработчике сигнала, либо в основном потоке программы. Насколько я могу судить, здесь есть одна проблема — сигнал для каждого процесса такого типа может быть только один. Т.е. за раз мы можем работать только с одним fd (хотя я не уверен)

Асинхронный ввод/вывод (asyncronous I/O)

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

Что называется вводом выводом. Смотреть фото Что называется вводом выводом. Смотреть картинку Что называется вводом выводом. Картинка про Что называется вводом выводом. Фото Что называется вводом выводом

Делаем системный вызов aio_read и указываем все необходимые параметры. Всю остальную работу делает за нас ядро. Конечно, должен существовать механизм который бы уведомил процесс о том что I/O завершен. И тут потенциально возникает множество проблем. Но об этом в другой раз.
Вообще с данным термином связано очень много проблем, примеры ссылок уже приводились. Часто происходит смешение понятий между асинхронным, неблокирующим и мультиплексированным вводом выводом, видимо потому что само понятие «асинхронный» может трактоваться по-разному. В моем понимании асинхронный — значит независимый во времени. Тоесть единожды запущенный он живет своей жизнью пока не выполнится, а затем мы просто получаем результат

На практике

Я надеюсь что теперь хоть немного станет ясно об отличиях в тех вещах, в которых легко запутаться.
Ну и да, мультиплексинг рулит (пока не допилят aio, я думаю).
Изучая справочную литературу я пришел к выводу что в отличии от сокетов, регулярные файлы невозможно перевести в неблокирующий режим. Для них вроде бы доступен aio что рассмотрено тут: Asynchronous I/O on linux or welcome to hell

Источник

Ввод-Вывод

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

Другой тип устройств ввода-вывода — символьные устройства. Символьное устройство принимает или предоставляет поток неструктурированных символов. Оно не является адресуемым и не выполняет операцию поиска. Принтеры, сетевые адаптеры, мыши и большинство других устройств, не похожих на диски, можно считать символьными устройствами.

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

Часто интерфейс между устройством и контроллером является интерфейсом низкого уровня. С диска в контроллер поступает последовательный поток битов, начинающийся с заголовка сектора
(преамбулы), за которым следует 4096 бит в секторе, и контрольная сумма, называемая кодом исправления ошибок ЕСС ( Error Correcting Code ). Заголовок сектора записывается на диск во время форматирования. Он содержит номера цилиндра и сектора, размер сектора, коды синхронизации и другую служебную информацию.

Работа контроллера заключается в конвертировании последовательного потока битов в блок байтов и коррекцию ошибок. Обычно байтовый блок накапливается в буфере контроллера. Затем проверя-
ется контрольная сумма блока, и если она совпадает с указанной в заголовке сектора, то блок считается принятым без ошибок. После этого блок копируется в оперативную память.

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

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

Тесно связан с концепцией независимости от устройств принцип единообразного именования. Имя файла или устройства должно быть просто текстовой строкой или целым числом. Оно никак не
должно зависеть от физического устройства.

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

Одним из ключевых вопросов является способ переноса данных — синхронный (блокирующий) или асинхронный (управляемый прерываниями). Большинство операций ввода-вывода на физическом
уровне являются асинхронными — ЦП запускает перенос данных и переключается на другой процесс, пока не придет прерывание.

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *