3.2 Среда выполнения процессов

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

при чем их число логически не ограничивается, и множество частей программы

(такой как copy) может одновременно находиться в системе. Различные системные операции позволяют процессам порождать новые процессы, завершают процессы, синхронизируют выполнение этапов процесса и управляют реакцией на наступле-ние различных событий. Благодаря различным обращениям к операционной

системе, процессы выполняются независимо друг от друга.

Например, процесс, выполняющийся в программе, приведенной на Рисунке

1.4, запускает операцию fork, чтобы породить новый процесс. Новый процесс,

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

fork, равное 0, и активизирует операцию execl, которая выполняет программу

copy (Рисунок 1.3). Операция execl загружает файл "copy", который предполо-жительно находится в текущем каталоге, в адресное пространство порожденного

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

случае успешного выполнения операции execl управление в вызвавший ее процесс

не возвращается, поскольку процесс выполняется в новом адресном пространстве. Тем временем, процесс, запустивший операцию fork (родительский процесс), получает ненулевое значение кода завершения операции, вызывает операцию wait, которая приостанавливает его выполнение до тех пор, пока не закончится выполнение программы copy, и завершается (каждая программа имеет выход в конце главной процедуры, после которой располагаются программы стандартных библиотек Си, подключаемые в процессе компиляции). Например, если исполняемая программа называется run, пользователь запускает ее следующим образом:

main(argc,argv)

int argc;

char *argv[];

{

/* предусмотрено 2 аргумента: исходный файл и новый файл */

if (fork() == 0)

execl("copy","copy",argv[1],argv[2],0);

wait((int *)0)

printf("copy donen");

}

Рисунок 1.4. Программа порождения нового процесса, выполняющего копирование файлов

run oldfile newfile

Процесс выполняет копирование файла с именем "oldfile" в файл с именем

"newfile" и выводит сообщение. Хотя данная программа мало что добавила к

программе "copy", в ней появились четыре основных обращения к операционной

системе, управляющие выполнением процессов: fork, exec, wait и exit.

Вообще использование обращений к операционной системе дает возможность

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

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

входа в систему. Shell интерпретирует первое слово командной строки как имя

команды: во многих командах, в том числе и в командах fork (породить новый

процесс) и exec (выполнить порожденный процесс), сама команда ассоциируется

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

команды.

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

на языке Си). Во-вторых, именем команды может быть имя командного файла, содержащего набор командных строк, обрабатываемых 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.


Информация о работе «Особенности операционной системы UNIX»
Раздел: Информатика, программирование
Количество знаков с пробелами: 48139
Количество таблиц: 1
Количество изображений: 3

Похожие работы

Скачать
29699
0
0

... ; пароль, который проверяет вас на идентичность; инструкции для диалога и доступа к системе UNIX, если ваш терминал напрямую не связан с компьютером. Отличия операционной системы UNIX от других операционных систем. Unix состоит из ядра с включенными в него драйверами и из утилит (внешних по отношению к ядру программ). Если надо изменить конфигурацию (добавить устройство, изменить порт или ...

Скачать
18336
0
1

... , сетевые и другие коммуникационные службы, СУБД и утилиты. 4. Способы управления процессами и ресурсами Файлы и процессы, являются центральными понятиями модели операционной системы UNIX. Рисунок 1.2 представляет блок-схему ядра системы, отражающую состав модулей, из которых состоит ядро, и их взаимосвязи друг с другом. Слева изображена файловая подсистема, а справа подсистема управления ...

Скачать
17225
0
2

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

Скачать
17505
1
2

... программ. Совместимость с DOS-приложениями. Однако, работа с Windows не означает отказа от программ DOS (скорее она означает отказ от DOS в глобальном масштабе). На сегодняшний момент операционная система Windows фирмы Microsoft во всех ее проявлениях бесспорно считается самой распространенной опера­ционной системой на PC: в мире более 150 миллионов IBM PC-совместимых компьютеров, и система ...

0 комментариев


Наверх