Особенности операционной системы UNIXРефераты >> Информатика >> Особенности операционной системы UNIX
на языке Си). Во-вторых, именем команды может быть имя командного файла, со-
держащего набор командных строк, обрабатываемых shell'ом. Наконец, команда
может быть внутренней командой языка shell (в отличие от исполняемого файла). Наличие внутренних команд делает shell языком программирования в дополнение к функциям командного процессора; командный язык shell включает команды организации циклов (for-in-do-done и while-do-done), команды выполнения по условиям (if-then-else-fi), оператор выбора, команду изменения текущего для процесса каталога (cd) и некоторые другие. Синтаксис shell'а допускает сравнение с образцом и обработку параметров. Пользователям, запускающим команды, нет необходимости знать, какого типа эти команды.
Командный процессор shell ищет имена команд в указанном наборе катало-
гов, который можно изменить по желанию пользователя, вызвав shell. Shell
обычно исполняет команду синхронно, с ожиданием завершения выполнения коман-
ды прежде, чем считать следующую командную строку. Тем не менее, допускается
и асинхронное исполнение, когда очередная командная строка считывается и ис-
полняется, не дожидаясь завершения выполнения предыдущей команды. О коман-
дах, выполняемых асинхронно, говорят, что они выполняются на фоне других ко-
манд. Например, ввод команды
who
вызывает выполнение системой программы, хранящейся в файле /bin/who (****) и осуществляющей вывод списка пользователей, которые в настоящий момент работают с системой. Пока команда who выполняется, командный процессор shell ожидает завершения ее выполнения и только затем запрашивает у пользователя следующую команду. Если же ввести команду
who &
система выполнит программу who на фоне и shell готов немедленно принять сле-
дующую команду.
В среду выполнения каждого процесса в системе UNIX включается текущий
каталог. Текущий для процесса каталог является начальным каталогом, имя ко-
торого присоединяется ко всем именам путей поиска, которые не начинаются с
наклонной черты. Пользователь может запустить внутреннюю команду shell'а cd
(изменить каталог) для перемещения по дереву файловой системы и для смены
текущего каталога. Командная строка
cd /usr/src/uts
делает текущим каталог "/usr/src/uts". Командная строка
cd /
делает текущим каталог, который на две вершины "ближе" к корню (корневому
каталогу): параметр " " относится к каталогу, являющемуся родительским для
текущего.
Поскольку shell является пользовательской программой и не входит в состав ядра операционной системы, его легко модифицировать и помещать в конкретные условия эксплуатации. Например, вместо командного процессора Баурна
(называемого так по имени его создателя, Стива Баурна), являющегося частью
версии V стандартной системы, можно использовать процессор команд Си, обес-
печивающий работу механизма ведения истории изменений и позволяющий збегать
повторного ввода только что использованных команд. В некоторых случаях при
желании можно воспользоваться командным процессором shell с ограниченными
возможностями, являющимся предыдущей версией обычного shell'а. Система может
работать с несколькими командными процессорами одновременно. Пользователи
имеют возможность запускать одновременно множество процессов, процессы же в
свою очередь могут динамически порождать новые процессы и синхронизировать
их выполнение. Все эти возможности обеспечиваются благодаря наличию мощных
программных и аппаратных средств, составляющих среду выполнения процессов.
Хотя привлекательность shell'а в наибольшей степени определяется его возможнос-тями как языка программирования и его возможностями в обработке аргументов, в данном разделе основное внимание концентрируется на среде выполнения процес-сов, управление которой в системе возложено на командный процессор Shell.
3.3 Элементы конструкционных блоков
Как уже говорилось ранее, концепция разработки системы UNIX заключалась
в построении операционной системы из элементов, которые позволили бы пользо-
вателю создавать небольшие программные модули, выступающие в качестве конст-
рукционных блоков при создании более сложных программ. Одним из таких эле-
ментов, с которым часто сталкиваются пользователи при работе с командным
процессором shell, является возможность переназначения ввода-вывода. Говоря
условно, процессы имеют доступ к трем файлам: они читают из файла стандарт-
ного ввода, записывают в файл стандартного вывода и выводят сообщения об
ошибках в стандартный файл ошибок. Процессы, запускаемые с терминала, обычно
используют терминал вместо всех этих трех файлов, однако каждый файл незави-
симо от других может быть "переназначен". Например, команда
ls
выводит список всех файлов текущего каталога на устройство (в файл) стандар-
тного вывода, а команда
ls > output
переназначает выводной поток со стандартного вывода в файл "output" в теку-
щем каталоге, используя вышеупомянутый системный вызов creat. Подобным же
образом, команда
mail mjb < letter
открывает (с помощью системного вызова open) файл "letter" в качестве файла
стандартного ввода и пересылает его содержимое пользователю с именем "mjb".
Процессы могут переназначать одновременно и ввод, и вывод, как, например, в
командной строке:
nroff -mm < doc1 > doc1.out 2> errors
где программа форматирования nroff читает вводной файл doc1, в качестве фай-
ла стандартного вывода задает файл doc1.out и выводит сообщения об ошибках в
файл errors ("2>" означает переназначение вывода, предназначавшегося для файла с дескриптором 2, который соответствует стандартному файлу ошибок).Програм-мы ls, mail и nroff не знают, какие файлы выбраны в качестве файлов стандартного ввода, стандартного вывода и записи сообщений об ошибках; командный процессор shell сам распознает символы "<", ">" и "2>" и назначает в соответствии с их указанием файлы для стандартного ввода, стандартного вывода и записи сообщений об ошибках непосредственно перед запуском процессов.
Вторым конструкционным элементом является канал, механизм, обеспечиваю-щий информационный обмен между процессами, выполнение которых связано с
операциями чтения и записи. Процессы могут переназначать выводной поток со
стандартного вывода на канал для чтения с него другими процессами, переназ-
начившими на канал свой стандартный ввод. Данные, посылаемые в канал первыми
процессами, являются входными для вторых процессов. Вторые процессы так же
могут переназначить свой выводной поток и так далее, в зависимости от пожеланий программиста. И снова, так же как и в вышеуказанном случае, процессам нет необходимости знать, какого типа файл используется в качестве файла
стандартного вывода; их выполнение не зависит от того, будет ли файлом стан-