Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Акуленок_часть1.doc
Скачиваний:
41
Добавлен:
13.11.2019
Размер:
1.43 Mб
Скачать

3.3.3. Прикладные процессы

К прикладным процессам относятся все остальные процессы, выполняющиеся в системе. Как правило, это процессы, порожденные в рамках пользовательского сеанса работы. С такими процессами выбудете сталкиваться чаще всего. Например, запуск команды ls(1) породит соответствующий процесс этого типа. Важнейшим пользовательским процессом является основной командный интерпретатор (login shell), который обеспечивает вашу работу в Unix . Он запускается сразу же после вашей регистрации в системе, а завершение работы login shell приводит к отключению от системы.

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

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

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

3.4. Атрибуты процесса

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

Важнейшими из них являются идентификатор процесса PID и идентификатор родительского процесса PPID. Существует еще четыре идентификатора, которые определяют доступ к системным ресурсам. К ним относятся идентификатор пользователя – UID, эффективный идентификатор пользователя – ЕUID, идентификатор группы GID и эффективный идентификатор группы ЕGID.

3.4.1. Идентификатор процесса

Каждому созданному процессу UNIX назначает уникальный идентификатор, известный как Process Identifier (PID), который позволяет ядру системы различать процессы. Этот PID, являющийся именем процесса в операционной системе, идентифицирует процесс и для самой ОС, и для множества команд и системных вызовов. Когда создается новый процесс, ядро присваивает ему следующий свободный (т.е. не ассоциированный ни с каким процессом) идентификатор. Присвоение идентификаторов происходит по возрастающей, т.е. идентификатор нового процесса больше, чем идентификатор процесса, созданного перед ним. Если идентификатор достиг максимального значения, следующий процесс получит минимальный свободный PID и цикл повторяется. Когда процесс завершит свою работу, ядро освобождает занятый им идентификатор.

3.4.2. Идентификатор родительского процесса

У каждого процесса имеется также Parent Process Iidentifier (PPID), который есть не что иное, как PID его «процесса–отца» или идентификатор процесса, породившего данный процесс. PPID указывает на родственные отношения между процессами, которые (как и в жизни) в значительной степени определяют его свойства и возможности.

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

Исходный процесс в терминологии ОС UNIX называют родительским, а его клон – порожденным. Помимо собственного идентификатора, каждый процесс имеет атрибут PPID, т.е. идентификатор своего родительского процесса.

Используя команду ps, вы можете всегда увидеть идентификаторы текущих процессов в системе.

К примеру, если ваше пользовательское имя (username) было terry, вы можем видеть на экране после выполнения команды ps следующее:

$ ps –f

UID PID PPID С STIME TTY TIME COMMAND

terry 3865 3699 2 13:35 ttypS 0:00 ps–f

terry 3699 3699 0 12:58 ttypS 0:00 ksh

Этот фрагмент показывает, что пользователь terry имеет два процесса: ps –f команду и ksh (Korn Shell). Заметим, что PPID процесса ps –f команды такой же, как PID ksh. Это потому, что ps –f был запущен из ksh командной строки; то есть ksh есть «процесс–отец», a ps –f есть «процесс–сын» ksh.