Перейти к основному содержимому

Ввод и вывод

Всем

Мы определили, что такое информация, данные, какие бывают их типы. Кроме того, мы усвоили, что они хранятся в постоянном или временном хранилище и обрабатываются процессором. Здесь — как программы получают данные извне и отдают результат — клавиатура, диск, сеть, экран.


Input/Output

Ввод-вывод (I/O, Input/Output) — обмен данными между программой и средой вне её процесса — устройствами, файлами, сетью, другими программами.

InputOutput.webp

Цепочка при нажатии клавиши: клавиатура → драйвер → ОС → очередь событий → программа (например, редактор) → отрисовка символа на экране (вывод).

Двойной щелчок по файлу — событие ОС:

  • система находит программу по расширению;
  • запускает её;
  • та выполняет чтение файла с диска;
  • вывод интерфейса на монитор.

Play ITЗагрузка интерактивного демо…


Программный ввод-вывод

Не только железо: у каждой программы есть стандартные потоки:

  • stdin — ввод (обычно клавиатура или pipe);
  • stdout — обычный вывод (консоль, файл);
  • stderr — вывод ошибок.
name = input("Ваше имя: ") # stdin → программа
print("Привет,", name) # программа → stdout

Перенаправление stdin из файла (python script.py < input.txt) — тот же поток ввода, только источник другой; разбор на Python — Lab — файлы и текст.

Тот же принцип у файлов и сокетов: программа вызывает API ОС, а ядро общается с устройством.


Ввод с устройств

Ввод передаёт данные в компьютер через устройства:

  • Клавиатура — аппаратно идут скан-коды клавиш; ОС по раскладке превращает их в символы (Unicode). Не "ASCII с провода", а событие "нажата клавиша".
  • Мышь — координаты и события (клик, прокрутка).
  • Сканер — изображение или текст в цифровой вид.
  • Микрофон — оцифровка звука (АЦП).

Вывод

Вывод получает данные из компьютера на устройство:

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

Двусторонние устройства

Двусторонние устройства могут как принимать, так и отправлять данные:

  • Жёсткий диск (HDD/SSD) хранит и читает данные, позволяя записывать информацию на него.
  • USB-накопители позволяют переносить данные между устройствами (есть и другие виды переносных устройств, к примеру, MicroSD или SD-карты, а также переносные жёсткие диски).
  • Сетевые карты обмениваются данными через интернет или локальную сеть, используя протоколы передачи данных.

Виды ввода-вывода

По способу организации, выделяются следующие виды ввода-вывода:

  • программно-управляемый ввод-вывод, когда процессор непосредственно управляет передачей данных (чтение данных из порта ввода-вывода);
  • ввод-вывод с использованием прерываний, когда устройство сигнализирует процессору о готовности данных через прерывание (нажатие клавиши);
  • прямой доступ к памяти (DMA, Direct Memory Access) - передача данных происходит напрямую между устройством и оперативной памятью без участия процессора (чтение данных с жесткого диска).

В зависимости от типа передаваемых данных выделяют:

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

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

По режиму работы:

  • Синхронный I/O — программа ждёт, пока операция завершится (классический read / write).
  • Асинхронный I/O — запрос отправлен, программа продолжает работу; результат приходит позже (колбэк, async/await, отдельный поток).

Ввод-вывод в широком смысле — это и чтение/запись файлов, и сеть, а не только "оцифровка с датчиков". Подробнее — в главе Чтение и запись.