Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 42
Текст из файла (страница 42)
Группа процессов определена единым заданием. Новый объект сеанс представляет собой сеанс входа в систему. В следующих разделах вы увидите описание архитектуры сеансов, представленной в ОС ЗЪ'К4. Раздел 4.10.5 расскажет о реализации сеансов в 4.4ВБВ, которая схожа по функциональности с архитектурой, используемой в БЪ'Гк4, но дополнительно обладает совместимостью со стандартами РОЯХ. 4.10.1. Задачи, поставленные перед разработчиками Архитектура сеансов восполняет некоторые недостатки, имеющиеся в более ранних моделях.
Основными целями новой архитектуры явились: + поддержка на должном уровне как сеансов входа в систему, так и заданий; + обеспечение управления заданиями, в стиле ВЯЭ; + сохранение обратной совместимости с более ранними версиями Бузгет Ч; + предоставление сеансам входа в систему возможности подключения и отключения нескольких управляющих терминалов в течение времени существования сеансов (конечно, в один момент времени онн могут иметь только один управляющий терминал). Все этн изменения должны быть прозрачно распространены на все процессы сеанса; + реализация лидера сеанса (процесса, создающего сеанс входа в систему), ответственного за обеспечение его целостности и безопасности; 178 Глава 4. Сигналы и управление сеансами + предоставление доступа к терминалу, основываясь исключительно на правах доступа к файлу.
В частности, если процесс благополучно открыл терминал, то он может иметь к нему доступ на все то время, пока тот открыт; + устранение несовместимости с предыдущими реализациями. Например, в ОС БЪ'КЗ существует определенная нестыковка в случае, если лидер группы порождает потомка при помощи 1ог1 до того, как назначит управляющий терминал. Такой процесс-потомок будет получать сигналы (5161МТ и т. д.) от этого терминала, но не будет иметь к нему доступа через /оеу/11у. 4.10.2.
Сеансы и группы процессов Архитектура сеансов операционной системы БЧК4 продемонстрирована на рис. 4.5 112). Каждый процесс относится как к определенному сеансу, так и к группе. Точно так же каждый управляюгций терминал связан с сеансом и активной группой процессов 1то есть управляющей группой терминала). Сеанс играет роль группы процессов системы БЪ'КЗ, а лидер сесанса является ответственным за управление сеансом входа в систему и его изоляцию от других сеансов. Правом назначения или освобождения контролируемого терминала обладает только лидер сеанса. Терминал Д П о есс Г 1 Интерактивный;; Группа г — „Сеанс входа В СтРУкгУР П Процесс ~ф процесс '..' процессов ~ — ~ в систему сеанса Рис. 4.5.
Архитектура сеансов системы НЧЯ4 4ДО. Архитектура сеансов в системе ЯЧЯ4 179 Процесс создает новый сеанс при помощи вызова зеЫд, который устанавливает идентификаторы сеанса и группы в значение собственного Р1Р. Таким образом, вызов зегзгд делает вызвавший его процесс одновременно лидером группы и сеанса. Если процесс уже является. лидером группы, то он не может стать лидером сеанса, и выполнение вызова завершится с ошибкой. Группы процессов системы Я/К4 обладают основными чертами групп ОС 4.3ВЯР и обычно представляют собой задание внутри сеанса входа в систему. Таким образом, в одном сеансе входа в систему одновременно могут функционировать несколько групп процессов. Одна из таких групп является текушей и обладает неограниченным доступом к терминалу (то есть является управляюгцей группой терминала).
Так же как и в системе 4.ЗВЗР, фоновые процессы, пытающиеся получить доступ к управляющему терминалу, получат сигналы 516ТТ1(т' и 516ТТ00 (последний для этого должен быть разрешен, как это было описано в разделе 4.9.4). Процесс наследует свою группу от родителя и может изменить ее при помощи вызовов зетрдЫ или зегдгр. Вызов зегдгр идентичен варианту, представленному в Я/КЗ, и устанавливает значение группы в Р?Р сделавшего этот вызов процесса, делая его таким образом лидером группы. Вызов зегрдЫ схож с зегдгр системы 4.3ВЗР, но добавляет в действие некоторые существенные ограничения. Синтаксис зегрдЫ таков: зетрд10 (рЫ, рд)д); Задача этого вызова состоит в изменении группы процесса, указанного в рЫ, на значение, определенное в рд)д.
Если рдЫ равняется нулю, то идентификатор группы процесса устанавливается в значение, равное рЫ, что делает процесс лидером группы. Однако, как уже говорилось, в реализации зегрдЫ сушествует несколько важных ограничений. Так, процесс, над которым производится действие, должен сам вызывать эту функцию, либо это должен делать один из его потомков, еше не сделавший ехес. Вызываюший процесс и процесс, на который направлено действие, также должны относиться к одному и тому же сеансу.
Если значение рд14 не совпадает с Р1Р целевого процесса (или равно нулю, что дает одинаковый эффект), то оно должно быть равным одному из сушествуюших идентификаторов группы внутри того же сеанса. По указанным выше причинам процессы имеют возможность перемещаться из одной группы в другую в течение продолжительности сеанса.
Единственным способом покинуть сеанс для процесса является вызов зегзЫ, открывающий новый сеанс с этим процессом как единственным ее членом. Процесс, являющийся лидером группы, может оставить свое лидерство, переместив себя в другую группу. Однако этот процесс не может создать новый сеанс до тех пор, пока его Р1Р является идентификатором группы других процессов (то есть если группа, в которой он оставил лидерство, не пуста). Такой подход зашишает от возникновения ситуации, когда группа процессов обладает тем же идентификатором, что и сеанс, в который эта группа не входит.
180 Глава 4. Сигналы и управление сеансами Точно так же текущая (управляющая) группа может быть изменена только процессом сеанса, который управляет терминалом, и только на группу, которая реально существует в сеансе. Эта возможность используется командными процессорами, поддерживающими управление заданиями для перевода заданий в интерактивный и фоновый режимы работы. 4.10.3. Структуры данных На рис. 4.6 показаны структуры данных, используемые для управления сеансами и группами процессов. Вызов зетзЫ выделяет новую структуру сеанса и сбрасывает поля р зеззр и р рвйр структуры ргос.
Изначально сеанс не имеет управляюгцего терминала. Лидер группы Другая структура интерактивных Лидер сеанса ртс сеанса процессов Рис. 4.6. Структуры данных управления сеансом в оуи4 ЦМ!Х Когда лидер сеанса впервые открывает терминал (после того как он станет лидером), этот терминал станет управляющим терминалом сеанса, если только вызывающий процесс не передаст флаг О МОСТТУ в соответствующий вызов при открытии этого терминала. Структура сеанса инициализируется указателем на упоое этого терминала, а упос(е, в свою очередь, указывает на головной интерфейс потока (зтгеащ Ьеай) для устройства. Процессы-потомки лидера сеанса наследуют значение указателя в поле р зеззр структуры ргос, благодаря чему могут постоянно следить за изменениями объекта сеанса.
Поэтому процессы-потомки наследуют управляюгций терминал, даже если тот был открыт уже после того, как эти процессы были созданы. 4.10. Архитектура сеансов в системе ЫЧГ14 181 4.10.4. Управляющие терминалы Файл /беч/ггу снова выступает в качестве псевдонима управляющего терминала. Драйвер разрешает любые вызовы в /беч/тгу посредством просмотра указателя на сеанс в структуре ргос и, используя его, получает дескриптор чпобе управляющего терминала.
Если управлягощий терминал освобождается, то ядро системы устанавливает указатель на чпобе объекта сеанса в М(1~~, после чего все попытки доступа к /беч/1~~у закончатся неудачно. Если процесс открыл напрямую определенный терминал (в противоположность открытию /беч/агу), то он сможет продолжить доступ к нему даже после того, как терминал перестанет быть связанным с текущим сеансом входа в систему. Когда пользователь входит в систему, процесс, обеспечивающий вход, производит следующие действия: 1. Вызывает зетзгб для того, чтобы стать лидером сеанса. 2. Закрывает згб1п, з1боцт и втбегг'.
3. Вызывает ореп для открытия выбранного терминала. Так как этот терминал является первым из открытых лидером сеанса, то он становится управляющим терминалом для него. Вызов ореп возвращает дескриптор реального файла устройства терминала. 4. Дублирует и сохраняет полученный дескриптор, с тем чтобы не исгюльзовать зтбгп, зтбоц1 и згбегг для ссылки на реальный файл устройства. После закрывает оригинальный дескриптор. Управляющий терминал остается открытым через дублированный дескриптор. 5.
Открывает /беч/гту как зй!п и дублирует его в зтбоцг и зтбегг. Это действие эффективно открывает заново управляющий терминал через псевдоним устройства. Таким образом, лидер и все остальные процессы сеанса (которые наследуют эти дескрипторы) имеют доступ к терминалу только посредством /беч/тгу (если только другой процесс прямо не откроет файл устройства терминала). 6.
В конце происходит закрытие сохраненного дескриптора и удаление любых прямых контактов с управляющим терминалом. Если драйвер терминала обнаружит разорванное соединение (папримср, потерю несущей при модемном подключении), то он пошлет сигнал 516НОР только лидеру сеанса. Такой подход явно отличается от отправки сигнала текущей группе в системе 43ВБ1) и оправки сигнала всем процессам управляющей группы (сеанса) в БУКЗ. При таком подходе лидер сеанса является доверенным процессом, и ожидается, что он произведет корректные действия при потере управляющего терминала.