Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 40
Текст из файла (страница 40)
Обычно процесс наследует идентификатор группы от своего предка, а все остальные процессы в группе являются потомками лидера. Управляющий терминал. Любой процесс может обладать управляющим терминалом. Чаще всего это терминал входа в систему, от которого процесс был создан. Все процессы одной группы разделяют между собой один и тот же управляющий терминал. Файл /г1еч/ссу. С управляющим терминалом каждого процесса связан специальный файл /г(еч/агу. Драйвер устройства, связанный с этим файлом, перенаправляет все запросы на соответствующий терминал. Например, в системе 4.3ВВГ) номер устройства управляющего терминала хранится в поле в гту(( области ц. Чтение из терминала реализовано следующим образом: (*ссечан[ва)ог(о.о Ггус)).с геас) (щ и Гтус, г)а9а): 170 Глава 4.
Сигналы и управление сеансами Следовательно, если два процесса относятся к различным сеансам входа в систему и они оба откроют файл /меч/11у, то результатом станет доступ к разньгм терминалам. Управляющая группа. Каждьгй терминал ассоциируется с группой процессов. Такая группа, называемая управляющей группой терминала, идентифицируется при помощи поля Ь рдгр структуры ау этого терминала'. Сигналы, вырабатываемые при вводе с клавиатуры, такие как 51611тТ или 5160011, посылаются всем процессам управляющей группы терминала, то есть всем процессам, чье поле р рдгр в структуре ргос равно значению Ь рдгр структуры йу этого терминала.
Управление заданиями. Этот механизм (реализовацный в системах 4ВЗР и 5Ъ'К4) позволяет приостановить и возобновить работу группы процессов, а также управлять ее доступом к терминалу. Командные интерпретаторы, поддерживающие управление заданиями, такие как сзЬ или кзЬ, распознают специальные управляющие символы (обычно С~г1+1) и команды, такие как Тд и Ьд, для доступа к описываемым возможностям. Драйвер терминала обеспечивает дополнительное управление, посредством которого процессы, не входящие в управляющую группу терминала, защищены от чтения из терминала или записи в него.
Оригинальная реализация 5узгеш Ъ' формирует группы процессов главным образом как представления сеансов входа в систему и не имеет средств управления заданиями. В системе 4ВЗР с каждой введенной командной строкой командного интерпретатора ассоциируется новая группа процессов (следовательно, все процессы, связанные между собой конвейером командного интерпретатора, относятся к одной группе). Таким образом, в этой операционной системе появилось понятие задания. В 5КК4 произведена унификация этих различающихся друг от друга подходов при помощи понятия сеанса. В следующих разделах вы увидите описание всех трех технологий, перечисленных выше, а также анализ их преимуществ и недостатков. 4.9.2. Модель 8ЧВЗ В операционной системе 5Ъ'КЗ (и более ранних версиях ОС компании АТо.Т) группы процессов показывают характеристики сеанса входа в систему терминала.
Технология доступа с терминала в 5УКЗ проиллюстрирована на рис. 4.3. Ниже перечислены ее основные характеристики. Группы процессов. Каждый процесс во время создания вызовом Тогй наследует идентификатор группы от своего родителя. Единственный способ изменения группы процесса заключается в вызове венгр, который переустанавливает ' драйвер содержит отдельную структуру цу длл каждого терминала. 4.9. Группы процессов и управление терминалом 171 группу делающего этот вызов процесса на значение, равное его Р10. Таким образом, процесс становится лидером новой группы. Все потомки этого процесса, созданные при помощи 1ог1, присоединятся к его группе.
Управляющий терминал. Терминал принадлежит своей управляющей группе. То есть если процесс создает новую группу, то он теряет свой управляющий терминал. После этого первый терминал, им открываемый (который еще не является управляющим), становится его управляющим терминалом. Значение поля т рдгр структуры тту для этого терминала установится в значение поля р рдгр структуры ргос процесса.
Все потомки процесса наследуют управляющий терминал от своего лидера. Не может существовать две группы процессов с одним управляющим терминалом. Терминал Яп~ц ф Г-и Интерактивный;-, Группа г —, Сеанс входа й процесс процессов ь — ' в систему Рис. 4.3. Группы процессов в системе оуиэ ПЬах Типичный сценарий работы. Процесс 1пй порождает процесс-потомок для каждого терминала, описанного в файле /етс/1пйтаЬ. Потомок вызывает зетдгр, становясь в результате этого лидером группы, после чего при помощи ехес запускает программу детгу, которая выводит приглашение на вход в систему и ждет ввода. Когда пользователь вводит свое регистрационное имя, программа детку посредством ехес запускает программу !одоп, которая запрашивает и верифицирует пароль, и затем стартует командный интерпретатор, назначенный' при входе в систему. Таким образом, командный интерпретатор, ' Конкретному пользователю.
— Прим. ред. 172 Глава 4. Сигналы и управление сеансами запускаемый при входе в систему, является прямым потомком процесса глй и лидером группы процессов. Обычно остальные процессы не создают собственных групп (исключение составляют системные демоны, запускаемые из сеанса входа в систему), — следовательно, все процессы, относящиеся к сеансу входа в систему, отггосятся к одной группе. Доступ к терминалу. Не поддерживает управление заданиями. Все процессы, имеющие открытый терминал, обладают одинаковыми правами доступа к нему независимо от того, являются ли они фоновыми или интерактивными. Вывод таких процессов может производиться на терминал вперемежку.
Если несколько процессов попытаются прочесть данные с терминала одновременно, то может оказаться неочевидным, какой из них «перехватит» ту или иную строку ввода. Сигналы терминала. Такие сигналы, как 51600П или 5161И1, создаваемые при нажатии определенных клавиш клавиатуры, посылаются всем процессам управляющей группы терминала, то есть обычно всем процессам сеанса входа в систему. Однако такие сигналы в большинстве случаев необходимы только интерактивным процессам.
Поэтому командный интерпретатор при создании фонового процесса устанавливает для него игнорирование таких сигналов. Он также перенаправляет стандартный ввод таких процессов в /пеп/ппП, что не позволяет им читать данные с терминала через его дескриптор (чтобы начать чтение с терминала, процесс может открыть другие дескрипторы).
Отсоединение от терминала. Терминал отсоединяется от его управляющей группы при установке поля т рдгр своей структуры тгу в ноль. Такое происходит, если ни один из процессов не связан более с данным терминалом или когда лидер группы завершает работу (обычно процесс, порождаемый при в входе в систему с данного терминала).
Завершение работы лидера группы. Лидер группы становится управляющим процессом своего терминала и отвечает за управление терминалом для всей группы. Когда лидер завершает работу, его управляющий терминал отсоединяется от группы (поле т рдгр сбрасывается в ноль). Более того, всем остальным процессам группы оправляется сигнал 516НОР, и значения их полей р рдгр также сбрасываются в ноль, после чего эти процессы' больше не относятся ни к одной группе (становясь тем самым осиротевшими).
Реализация. Поле р рдгр структуры рюс содержит идентификатор группы процессов. Область и имеет два поля, относящиеся к терминалу: ц ттур (указатель на структуру гсу управляющего терминала) и ц ссуд (номер устройства управляющего терминала). Поле с рдгр структуры осу содержит идентификатор группы процессов, управляющей терминалом. ' Оставшиеся «в живых», так как сигнал 516НОР по умолчанию приведет к завершению получившего его процесса. — Прим.
лед. 4.9. Группы процессов и управление терминалом 173 4.9.3. Ограничения Реализация механизма групп процессов в системе БЪ'КЗ обладает несколькими ограничениями 18~: + не существует способов, которыми группа процессов могла бы закрыть свой управляющий терминал и выделить себе другой; + хотя группы процессов формируются уже после открытия сеансов входа в систему, не существует возможности сохранять такие сеансы после отсоединения их управляющего терминала. В идеальном варианте в системе должен присутствовать механизм, позволяющий сохранять сеансы так, чтобы к ним позже можно было присоединить другой терминал и восстановить сеанс в том состоянии, в котором он был сохранен; + нет какого-либо приемлемого способа обработки «потери несущей» управляющим терминалом.
Такой терминал выделен группе и в случае «потери несущей» может быть перекоммутирован на другую группу с иной реализацией; + ядро не синхронизирует доступ к терминалу между различными процессами группы. Фоновые и интерактивные процессы могут читать или вести запись на терминал в произвольном порядке; + по завершении работы лидера группы ядро системы рассылает сигнал 516НОР всем процессам группы. При этом процессы, игнорирующие этот сигнал, могут продолжить осуществлять доступ к терминалу даже в том случае, если он переназначен уже другой группе. Это может привести к тому, что пользователь системы будет наблюдать неожиданный для него вывод таких процессов или, что хуже, процесс станет считывать данные, введенные уже новым пользователем.