Система ввода вывода linux

Ввод/вывод в Linux и их перенаправление

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

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

Конкурс на 1000 подписчиков на канале Просто Код Обещанный конкурс в связи с 1000 подписчиков на канале Просто Код объявляю открытым! Долго думал, как его организовать и провести, наконец мысли сошлись в единый паззл. Условия конкурса Принять участие могут только подписчики канала Просто Код, данный пост будет доступен только им. Так как Дзен не позволяет получать данные о подписчиках, то…

Ввод, вывод и потоки

Не будем углубляться сильно в теорию (для этого есть учебники и справочники), а просто примем за данность следующие моменты:

  • ввод — данные, которые поступают от пользователя в систему при помощи клавиатуры.
  • вывод — данные, которые поступают от системы пользователю при помощи терминала и монитора.

Кажется, что все пока просто, верно? Ввод и вывод распределяются между тремя стандартными потоками: stdin (standard input или стандартный ввод), stdout (standard output или стандартный вывод) и stderr (standard error или стандартная ошибка). Также каждый поток пронумерован: 0 (stdin), 1 (stdout) и 2 (stderr). Стандартный вывод используется командами только для считывания данных, остальные две (1 и 2) можно использовать только для их записи.

Источник

Ввод и вывод в Linux

Система файлов Linux, ориентированная на устройства, осуществляет доступ к дисковой памяти с помошью двух кэшей:

  • Данные хранятся в кэше страниц, который объединен с системой виртуальной памяти;
  • Метаданные хранятся в буферном кэше, причем каждый кэш индексируется блоком диска.
Читайте также:  Смена забытого пароля пользователя linux

Linux разбивает устройства на три класса: Блочные устройства допускают произвольный доступ к полностью независимым блокам данных фиксированного размера. Символьные устройства включают большую часть всех других устройств; они не нуждаются в поддержке функциональности обычных файлов. Сетевые устройства взаимодействуют с сетевой системой ядра. Модульная структура драйверов устройств в Linux изображена на рис. 1.5. Рис. 1.5. Модульная структура драйверов устройств. Блочные устройства обеспечивают основной интерфейс ко всем дисковым устройствам в системе. Блочный буферный кэш служит для двух основных целей:

  • Как буферный пул для активного ввода-вывода
  • Как кэш для завершенного ввода-вывода.

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

Взаимодействие процессов в Linux

Как и UNIX, Linux информирует процессы о наступлении событий с помощью сигналов. Существует ограниченный набор сигналов, и они не могут нести какую-либо информацию: только факт, что сигнал имеет место, доступен процессу. Ядро Linux не использует сигналы для коммуникации процессов, исполняемых в режиме ядра. Коммуникация внутри ядра осуществляется с помощью структур планировщика – states (состояния) и wait.queue (очередь ожидания). Механизм конвейера (pipe) позволяет дочернему процессу наследовать коммуникационный канал от процесса-родителя. Данные, записываемые с одного конца конвейера, могут быть прочитаны на другом конце. Общая память обеспечивает очень быстрый способ коммуникации; любые данные, записанные одним процессом в регион общей памяти, могут быть немедленно прочитаны любым другим процессом, который отобразил этот регион в свое адресное пространство. Однако с целью синхронизации общая память должна использоваться в сочетании с каким-либо другим комуникационным механизмом. Объект в общей памяти используется как файл откачки для регионов общей памяти, так же как файл может быть использован для откачки информации из региона, отображаемого в память. Отображения в общую память перенаправляют отказы страниц в регион памяти, занятый разделяемым объектом. Разделяемые объекты помнят свое содержимое, даже если в данный момент никакие процессы не отображают их в свои виртуальные пространства памяти.

Читайте также:  How to add linux users to groups

Источник

Тема 15: Реализация ввода-вывода в системе linux

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

Когда пользователь обращается к специальному файлу, (виртуальная) файловая система определяет номер старшего и младшего устройств, а так же выясняет, является ли файл блочным специальным файлом или символьным специальным файлом. Номер старшего устройства используется в качестве индекса для одной из двух внутренних хэш-таблиц, содержащих структуры данных для блочных или символьных специальных файлов. Найденная таким образом структура содержит указатели на процедуры открытия устройства, чтения из устройства, записи и т.д. Номер младшего устройства передается в виде параметра. Добавление нового типа устройства в системе linux означает добавление нового элемента к одной из этих таблиц, а так же предоставления соответствуюших процедур выполнения, различных операций с устройством. Каждый драйвер разделен на 2 части, причем обе они являются частью ядра linuxи работают в режиме ядра. Верхняя часть драйвера работает в контексте вызывающей стороны и служит интерфейсом к остальной системе linux. Нижняя часть работает в контексте ядра и взаимодействует с устройствами. Драйверам разрешается делать вызовы процедур ядра для выделения памяти, управления таймерами. Набор функций ядра, который они могут вызывать определен в документе под названием интерфейс-драйвер-ядро (Driver-Kernel-Interface). Система ввода-вывода занимается обработкой блочных специальных файлов и символьных специальных файлов.

1. Обработка блочных специальных файлов.

Главная цель при работе с данными файлами заключается в минимизации количества операций передачи данных. Для достижения данной цели в linux-системах между дисковыми драйверами и файловой системой имеется кэш. Кэш представляет собой таблицу в ядре, в которой хранятся тысячи недавно использованных блоков. Когда файловой системе требуется блок диска, то сначала проверяется кэш. Если нужный блок есть в кэше, то он берется оттуда, при этом обращения к диску удается избежать. Если же блока в кэше нет, то он считывается с диска в кэш и оттуда копируется в место назначения. Кэш страниц работает не только при чтении, но и при записи. Когда программа пишет блок, то этот блок не попадает напрямую на диск, а отправляется в кэш. В любой другой системе ОС linux существует решение проблемы излишних перемещений дисковых головок. Для решения этой проблемы в linuxиспользуется планировщик ввода-вывода. Цель планировщика – переупорядочить или собрать в пакеты запросы ввода вывода к блочному устройству. Базовый планировщик linux основан на исходном планировщике LinusElevatorScheduler. Он работает следующим образом:

Читайте также:  Check java installation on linux

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

2. Обработка символьных файлов.

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

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

Источник

Оцените статью
Adblock
detector