Администрирование локальных сетей
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: реферат по культурологии, доклад по биологии
| Добавил(а) на сайт: Tolkachjov.
Предыдущая страница реферата | 20 21 22 23 24 25 26 27 28 29 30 | Следующая страница реферата
Взаимоотношения процессов
Процессы в системе постороены по иерархическому принципу родитель-потомок.
Каждый процесс (за исключением init) имеет одного родителя, но каждый
родитель может иметь несколько потомков. Процесс потомок наследует
окружение родителя (переменные окружения, открытые файлы, рабочую
директорию). Все процессы за исключением init, pagedaemon, и
swapper) принадлежат к группам процессов.
Процесс ID и родительский процесс ID.
Во время создания процесса HP-UX назначает ему уникальный номер известный
как процесс ID (PID), именно по этому номеру ядро идентифицирует процесс
при выполнении системных вызовов. Помомо PID процесс имеет параметр как
PPID (PID родителя). Используя программу ps можно посмотреть эти параметры:
$ ps -f
UID PID PPID C STIME TTY TIME COMMAND torry 3865 3699 2 13:35:43 ttyp3 0:00 ps -f torry 3699 3698 0 12:58:21 ttyp3 0:00 ksh
Идентификаторы пользователя и группы. (реальные и эффективные)
Помимо PID и PPID процесс имеет еще ряд идентификационных номеров:
* реальный идентификатор пользователя (a real user ID)
* реальный идентификатор группы (a real group ID)
* эффективный идентификатор пользователя (effective user ID)
* эффективный идентификатор группы effective group ID.
Реальный идентификатор пользователя это целое число показывающее владельца процесса. Реальный идентификатор группы это целое число показывающее группу к которой принадлежал пользователь создатель процесса. Комманда id показывает оба этих значения.
%id uid=513(torry) gid=20(users)
% grep 513 /etc/passwd torry:EqqHevH:513:20:Torry Ho,[44MY],474-1969
,:/home/torry:/usr/bin/csh
Эффективный идентификатор пользователя и группы процесса позволяет процессу
получать доступ к файлам или выполнять программы как пользователь имеющим
ID равным эффективному. Обычно реальный и эффективные идентификаторы
процессов совпадают, но не всегда. Когда эффективный идентификатор равен
нулю, процесс начинает выполнять системные вызовы как администратор
системы.
Эффективный идентификатор пользователя и группы остаються установленными
до:
* окончания процесса.
* пока они не заменяться при выполнении системного вызова exec() программы c установленными битами setuid или setgid.
* пока эффективный, реальный или сохраненные идентификаторы группы и пользователя не будут установлены системными вызовами setuid(), setgid(), setresuid().
Группы процессов
Каждый процесс за исключением системных процессов таких как init и swapper принадлежат к группе процессов. Когда созхдается задание, шелл присваивает всем процессам в задании одну и туже группу процессов. Сигналы при этом могут распостраняться на все процессы в группе, в этом и заключается преимущество управления заданиями. Каждая группа процессов идентифицируется целым числом которое называется Process Group ID (PGID). PGID у группы процессов равен PID лидера группы – создателя группы. Все процессы в группе имеют одинаковый GID. PGID не может быть использован системой пока живет группа процессов. Время жизни группы процессов определяется как период времени между созданием группы и когда процесс покидает группу. Процесс покидает группу если:
* когда другой процесс вызывает wait() или waitpid() функции на неактивный процесс.
* при вызове setsid или setpgid системных вызовов.
Списки доступа группы
Каждый процесс имеет до NGROUPS_MAX списков групп к которым он может
принадлежать.
NGROUPS_MAX определено в /usr/include/limits.h, и обычно равняется 20.
Процессу разрешается получать доступ к файлам с групповымим правами любой
из списка групп. Списки доступа. Групповые права доступа контролируются
командой chgrp.
Сессии
Каждый процесс является членом сессии. Все процессы запущенные после логина принадлежат к одной сессии. Процесс принадлежит к той же сессии что и его родитель. Процесс может изменить сессию используя системный вызов setsid(), при этом этот процесс будет являться лидером сессии. Временем жизни сессии будет время с момента ее создания до момента завершения последнего процесса.
Процессы и терминальное взаимодействие.
Каждая сессия имеет управляющий терминал. Лидер сессии подключенный к управляющему терминалу называется еще контрольным процессом. Исключением являются процессы- демоны (cron, inetd, …) которые не имеют управляющего терминала. Все процессы принадлежащих к одной сессии используют управляющий терминал как стандартное устройство ввода, вывода и ошибок. В любой момент времени лишь одна группа процессов в сессии может находится не в фоновом выполнении и она имеет исключительные права на работу с управляющим терминалом.
Попытки чтения фоновой группой процессов
Если процесс из фоновой группы пытается читать из управляющего терминала, этой группе посылается сигнал SIGTTIN, который по умолчанию
приостанавливает процесс. В любом случае системный вызов read() возвращает
–1.
Попытки чтения фоновой группой процессов
Если процесс в фоновой группе пытается записать в управляющий терминал, группа процессов получает при этом сигнал SIGTTOU, который по умолчанию останавливает процесс.
Создание процессов
Один процесс может создать другой через:
* паралельное выполнение другой программы
* выполнение другой программы с ожиданием ее окончания
На системном уровне процесс создается во время вызова системного вызова fork() или vfork().
Системный вызов fork()
Этот системный вызов создает новый процесс путем клонирования существующего. В старых реализациях HP-UX, система копировала полностью сегмент данных процесса, что негативно сказывалось на скорости и эффективности работы системы. Сейчас реализуется механизм известный как copy-on-write (на самом деле HP-UX реализует механизм copy-on-access), который позволяет использовать общие страницы памяти до момента записи.
Системный вызов vfork()
Приложения которым нужно создать независимый процесс могут делать это более
эффективно если вместо fork() будут использовать vfork().Использование
vfork оправдано только когда процесс потомок сразуже выполняет exec() или
_exit() системные вызовы. При использовании vfork, потомок использует
виртуальное адресное пространство родителя, поэтому оба процесса не могут
работать одновременно. Процесс родитель при этом засыпает.
Системный вызов exec()
Очень часто после вызова fork() процесс запускает exec() на выполнение другой программы, при этом происходит перезапись сегмента кода и данных новым процессом.
Открытые файлы
При системных вызовах fork() и vfork() происходит наследование процессом потомков всех открытых файловых дискрипторов. Для системных параметра определяют ограничение на количество открытых файлов на процесс: maxfiles и maxfiles_lim. Параметр maxfiles определяет мягкий лимит как много открытых файлов может иметь процесс. Мягкий лимит наследуется после вызовов fork() vfork(). Параметр maxfiles_lim опреджеляет жесткий лимит на количество открытых файлов на один процесс. maxfiles должен быть меньше или равен maxfiles_lim. Мягкий лимит процесс наследует от своего родителя, который может быть уменьшен или увеличен до жесткого лимита (такое может сделать только процесс с правами администратора) с использованием системного вызова setrlimit().
Завершение процессов
Процесс завершается если:
* Он успешно окончил свое выполнение
* Процесс завершил.себя вызвав системный вызов exit()
Рекомендуем скачать другие рефераты по теме: бесплатные тесты бесплатно, рефераты по медицине.
Категории:
Предыдущая страница реферата | 20 21 22 23 24 25 26 27 28 29 30 | Следующая страница реферата