На компьютерной терминологии термин I/O является сокращением от «Input/Output», который описывает технологию приема и передачи данных от компьютерных приложений. Например, клавиатура работает как устройство ввода, передавая набранный текст в компьютер, а монитор или принтер являются устройствами вывода, которые осуществляют вывод информации в удобном для пользователя виде. Прерывания ввода/вывода (I/O) играют ключевую роль в работе вычислительных систем, так как помогают управлять потоком входящих и исходящих данных.
Технические подробности
Прерывания часто используются для синхронизации работы устройств. Они могут блокировать передачу данных в тот момент, когда драйвер устройства не может обслужить поступивший запрос. Например, если вы запросили для чтения порцию данных с дискового накопителя в тот момент, когда они там отсутствуют, прерывание I/O переводит задание в отложенное состояние до того момента, пока нужные данные не станут доступными. Как только накопитель сможет выполнить запрос, процесс будет активирован и выполнение команды чтения будет продолжено. Аналогичную роль выполняют прерывания в том случае, если при попытке записи данных на диск его буферная память будет переполнена. В таком случае процесс записи будет отложен до того момента, когда в буфере появится свободное место.
Принцип работы
Разработчики компьютерного ПО внедряют в программный код специальные команды для активации прерываний I/O, чтобы обеспечить эффективную передачу данных и слаженное функционирование режимов. Без прерываний мы бы постоянно получали кучу ошибок при выполнении программ, что неизменно сказывалось бы производительности выполнения задач. Прерывания также очень часто используются на серверах, когда возникает необходимость быстрого переключения на более важные задачи, при невозможности параллельной обработки блоков данных в несколько потоков.
Преимущества использования прерываний
Прерывания для устройств ввода/вывода намного проще запрограммировать, чем другие варианты управления операциями I/O, что приводит к значительной экономии времени и трудовых затрат программистов. Помимо своей простоты аппаратные прерывания также несут большую пользу при управлении компонентами серверных систем и увеличивают совместимость устройств, так как могут одинаково использоваться на любых программных платформах – Unix, Windows и прочих.
Блокируемые операции I/O против неблокируемых
Основной альтернативой блокируемых операций ввода/вывода являются неблокируемые или асинхронные операции. В отличие от блокируемых (синхронных) операций, которые останавливают выполнение обработки данных при конкуренции запросов, асинхронные системы разделяют операции ввода/вывода на отдельные сегменты. Например, если данные на момент запроса сформированы не полностью, в асинхронных системах ввода/вывода отдается только часть существующих данных вместе с предупреждением о том, что они получены не полностью. Не блокируемая система запускает цикл опроса устройства до того момента, пока все запрошенные данные не будут отданы. Асинхронные системы ввода/вывода гораздо сложнее создавать, чем синхронные, но первые дают намного большую свободу при управлении конкурирующими процессами, предоставляя пользователям более полный и беспрерывный доступ к данным.