Разработка командной оболочки с поддержкой конвейера (pipeline) | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 4 мая, печатный экземпляр отправим 8 мая.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №52 (342) декабрь 2020 г.

Дата публикации: 26.12.2020

Статья просмотрена: 15 раз

Библиографическое описание:

Евстратов, В. В. Разработка командной оболочки с поддержкой конвейера (pipeline) / В. В. Евстратов. — Текст : непосредственный // Молодой ученый. — 2020. — № 52 (342). — С. 24-26. — URL: https://moluch.ru/archive/342/77073/ (дата обращения: 26.04.2024).



В данной статье говорится об особенностях разработки командной оболочки (shell) для UNIX систем. Приводятся блок-схемы работы основных алгоритмов работы командной оболочки. Подробно разбирается реализация конвейера (pipeline).

Ключевые слова: shell, командная оболочка, pipeline, конвейер, UNIX, разработка

Введение

В вычислительной технике оболочка операционной системы — программа, предоставляющая интерфейс для взаимодействия пользователя с функциями системы. В общем случае оболочки операционной системы используют либо интерфейс командной строки CLI (command line interface), либо графический пользовательский интерфейс GUI (graphical user interface).

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

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

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

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

Разрабатываемый функционал

В данной статье будет показан принцип работы:

  1. выполнение программ в зависимости от пути в ОС до них;
  2. выполнение команд, встроенных в командную оболочку;
  3. обработка конвейера (pipeline, «|»);

Основная идея

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

Основной цикл программы

Рис. 1. Основной цикл программы

Процесс считывание команды полностью приводить нецелесообразно, поскольку существует много нюансов обработки вводимых символов: разделители («;», «|», «&&», «||»), два типа кавычек (одинарные и двойные), специальные символы («$», «?», «*»), экранирование специальных символов и прочее.

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

Выполнение команды

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

Чтобы выполнить другую программу, не закрывая командную оболочку, необходимо создать копию процесса командной оболочки (системный вызов fork), и в дочернем процессе запустить необходимую команду. Блок-схема подпрограммы execute command представлена на рисунке 2.

После выполнения fork, основной (родительский) процесс начинает выполняться одновременно с дочерним. Родительский процесс ждет (wait pid), пока выполнится дочерний. Это необходимо, чтобы затем сообщить пользователю код завершения выполняемой программы.

Подпрограмма dup file descriptor выполняет подмену файловых дескрипторов. Файловый дескриптор простыми словами — это описатель потока ввода-вывода, т. е. сущность, благодаря которой мы можем передавать данные между процессами, и даже выводить их на экран для пользователя (используя стандартные файловые дескрипторы stdin, stdout, stderr). Подмена необходима для тех случаев, когда процессу необходимо считать данные из конвейера или записать их в него.

Подпрограмма execute command

Рис. 2. Подпрограмма execute command

Реализация конвейера ( pipeline )

Для создания конвейера существует системный вызов pipe он возвращает два файловых дескриптора — вход и выход конвейера. Для соединения двух команд с помощью необходимо сделать следующее:

  1. создать конвейер;
  2. первая команда должна читать данные из fd = 0 (stdin), записывать во вход конвейера;
  3. закрыть вход конвейера;
  4. запомнить, из какого fd должна читать данные вторая команда;
  5. вторая команда должна читать данные из запомненного fd, и записывать результат в fd = 1 (stdout);
  6. закрыть выход конвейера.

В приведённом выше алгоритме подпрограмма execute command выполняется 2 раза (для первой и второй команды). Непосредственно перед fork необходимо запоминать из какого файлового дескриптора команда должна читать данные, и в какой файловый дескриптор записывать. А непосредственно после fork необходимо совершить подмену файловых дескрипторов с помощью системного вызова dup2.

Подмена заключается в следующем: например, программа должна считывать данные из fd = 3, перед exec мы заменяем fd = 0 на fd = 3 так, чтобы в fd = 0 находилась копия/ссылка на fd = 3 (exec всегда читает из fd = 0 и записывает в fd = 1).

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

Вывод

Выше была показана схема работы командной оболочки поддерживающую конвейер. Понимание работы командных оболочек, а также работы сущностей, которые они используют (файловые дескрипторы, пиды (pid — process id), конвейеры и прочие) позволяют лучше понимать работу компьютера на низком уровне.

Основные термины (генерируются автоматически): командная оболочка, UNIX, CLI, командная строка, системный вызов, данные, дочерний процесс, команда, операционная система, какой файловый дескриптор.


Ключевые слова

разработка, конвейер, pipeline, Shell, командная оболочка, UNIX

Похожие статьи

Информационные технологии. Общие понятия и классификация

Данные технологии активно применяются для обеспечения передачи информации от учителя к обучающемуся и наоборот, а также служат

«Информационно-коммуникационные технологии — совокупность методов, процессов и программнотехнических средств, интегрированных с...

Человеческий фактор в безопасности полетов. Модель SHELL

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

Опубликовать статью в журнале «Молодой учёный» №21...

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

Как цитировать иностранные источники — Молодой учёный

Электронная почта. Ваш вопрос. Нажимая кнопку «Отправить», вы даете согласие на обработку своих персональных данных.

Интеграция MS-DOS приложений в современные операционные...

Однако эта операционная система уже устарела, и использовать её становится неудобно, а порой даже не представляется возможным [1]. Несмотря на ограниченные возможности MS-DOS, а так же нестабильность работы и плохой пользовательский интерфейс большинства из...

Инструкция: Работа со списком цитирований автора на...

вручную находить и добавлять в автоматически сформированный список пропущенные

удалять цитирования, которые система некорректно распознала и ошибочно приписала автору.

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

История в загадках. Петр I. Царь-реформатор | Статья в журнале...

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

Цикл Деминга (PDCA) | Статья в журнале «Молодой ученый»

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

Похожие статьи

Информационные технологии. Общие понятия и классификация

Данные технологии активно применяются для обеспечения передачи информации от учителя к обучающемуся и наоборот, а также служат

«Информационно-коммуникационные технологии — совокупность методов, процессов и программнотехнических средств, интегрированных с...

Человеческий фактор в безопасности полетов. Модель SHELL

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

Опубликовать статью в журнале «Молодой учёный» №21...

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

Как цитировать иностранные источники — Молодой учёный

Электронная почта. Ваш вопрос. Нажимая кнопку «Отправить», вы даете согласие на обработку своих персональных данных.

Интеграция MS-DOS приложений в современные операционные...

Однако эта операционная система уже устарела, и использовать её становится неудобно, а порой даже не представляется возможным [1]. Несмотря на ограниченные возможности MS-DOS, а так же нестабильность работы и плохой пользовательский интерфейс большинства из...

Инструкция: Работа со списком цитирований автора на...

вручную находить и добавлять в автоматически сформированный список пропущенные

удалять цитирования, которые система некорректно распознала и ошибочно приписала автору.

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

История в загадках. Петр I. Царь-реформатор | Статья в журнале...

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

Цикл Деминга (PDCA) | Статья в журнале «Молодой ученый»

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

Задать вопрос