Опубликован: 28.04.2014 | Доступ: свободный | Студентов: 154 / 0 | Длительность: 03:30:00
Лекция 3:

Работа в Bash

< Лекция 2 || Лекция 3: 12 || Лекция 4 >

Процессы

Презентация к лекции

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

Процесс - это в выполняемая в данный момент программа.

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

Операционная система контролирует следующую деятельность, связанную с процессами:

  • создание и удаление процессов
  • планирование процессов
  • синхронизация процессов
  • коммуникация процессов
  • разрешение тупиковых ситуаций

Создание процесса

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

  • При запуске ОС;
  • При появлении запроса на создание процесса.

Маски файлов

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

Для чего это нужно?

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

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

Также возможность отбор файлов по маскам используется в некоторых приложениях.

Ну и конечно же эти маски используются при работе с командной строкой в консоли.

Для отбора файлов по маске используются символы "?" и "* ", где

"* " - набор произвольных символов, а "? " - один произвольный символ.

Работа с потоками ввода-вывода

Существуют stdout, stdin, stderr потоки для ввода-вывода. Ввод-вывод использует механизм перегрузки операций, гарантирующий вызов нужной функции-операции для указанного типа данных.

Классы потоков

Класс streambuf управляет буфером потока, обеспечивая базовые операции заполнения, опорожнения, сброса и прочих манипуляций с буфером.

Класс ios является базовым классом потоков ввода-вывода.

Классы istream и ostream - производные от ios и обеспечивают работу потоков соответственно ввода и вывода.

Класс iоstream является производным от двух предыдущих и предусматривает функции как для ввода, так и для вывода.

Классы ifstream, of stream и f stream предназначены для управления файловым вводом-выводом.

Классы istrstream и ostrstream управляют резидентными потоками (форматированием строк в памяти). Это устаревшая методика, оставшаяся в C++Builder в качестве пережитка.

Каждый процесс открывает потоки (помните, что в UNIX файл - это и есть поток данных?) для ввода и вывода данных, а также вывода сообщений об ошибках и другой диагностической информации. Эти потоки:

  • ? 0 - стандартный ввод (stdin),
  • ? 1 - стандартный вывод (stdout),
  • ? 2 - стандартный поток сообщений об ошибках (stderr).

Ссылаться на эти потоки можно по их файловым дескрипторам. 0, 1 и 2 - это и есть такие дескрипторы.

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

Все потоки можно перенаправить в другой файл. Это может быть файл на диске, файл устройства (например, принтер или /dev/null) или стандартный поток другого процесса.

Для перенаправления стандартного вывода команды используется символ >("больше"). Если местом назначения служит файл, то можно его не перезаписывать, а присоединить (append) выводимые данные в его конец. Для такого перенаправления применяется символ >>.

Стандартный ввод перенаправляется символомc< ("меньше").

Для перенаправления стандартного потока ошибок используется конструкция 2>. Чтобы присоединить stderr к stdout и перенаправить их вместе, пользуйтесь переадресацией 2>l&1.

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

Перенаправление стандартных потоков ввода вывода

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

Обычно синтаксис выглядит так: команда1 > файл1 - выполняет команду1, помещая стандартный вывод в файл1; команда1 < файл1 выполняет команду1, используя в качестве источника ввода файл1 (вместо клавиатуры).

На каждый запрос ввода программы считывается одна строка текста из файла. Конструкция команда1 < файл1 > файл2 совмещает два предыдущих варианта:

выполняет команду1 ввода из файла1 и вывода в файл2.

Создание конвейеров

Конвейеры - это возможность нескольких программ работать совместно, когда выход одной программы непосредственно идет на вход другой без использования промежуточных временных файлов. Синтаксис: команда1 | команда2, выполняет команду1 используя её поток вывода как поток ввода при выполнении команды2, что равносильно использованию двух перенаправлений и временного файла:

команда1 > ВременныйФайл

команда2 < ВременныйФайл

rm ВременныйФайл

Хороший пример командных конвейеров - это объединение echo с другой командой для получения интерактивности в неинтерактивных средах, к примеру:

echo -e "ИмяПользователя\nПароль" | ftp localhost

Здесь запускается ftp-клиент, который подключается к локальному узлу (localhost). На запрос программы водит первую строку ИмяПользователя, затем на следующий запрос ввода считывает строку Пароль. Строки в команде echoразделены через \n.

Редакторы

vi/vim- серия текстовых редакторов операционных систем семейства UNIX.

gedit - поставляется по умолчанию в окружении рабочего стола GMOME.

Nano- простой и удобный консольный текстовый редактор Linux.

История vi

Первая версия была написана Биллом Джоем в 1976 году. В то время наиболее распространённым был редактор ed.

Поскольку он был довольно сложным для "простого смертного", George Coulouris разработал редактор em (editor for mortals - редактор для смертных). Билл Джой модифицировал редактор em и назвал его en, а позже на его основе создал ex, в котором появился визуальный режим, вызывавшийся командой vi. Так как пользователи больше времени проводили в визуальном режиме, ex 2.0, ставший частью 2BSD, сразу запускался уже в нём.

Так появился vi, бывший в то время всего лишь жёсткой ссылкой на ex.

Режимы редактора vi

Редактор vi имеет три режима:

  1. Командный - в этом режиме можно перемещаться по файлу и выполнять редактирующие команды над текстом. Команды вызываются ОБЫЧНЫМИ ЛАТИНСКИМИ БУКВАМИ.
  2. Ввода текста - в этом режиме обычные латинские буквы будут вставляться в текст.
  3. Режим строчного редактора ED используется для управления файлами (типа сохранить файл, зачитать файл и т.д.)
< Лекция 2 || Лекция 3: 12 || Лекция 4 >
Алина Бёрнс
Алина Бёрнс
Ксения Птицына
Ксения Птицына

Когда можно будет пройти итоговую аттестацию