Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 39
Текст из файла (страница 39)
Обработка исключительных состояний в системе Масв 166 Глава 4. Сигналы и управление сеансами При обработке каждого исключения создаются два сообщения. Когда нить-жертва устанавливает исключение, она посылает сообщение обработчику и затем ожидает ответа. Обработчик перехватывает это исключение сразу после получения сообщения и очищает его при помощи отправки ответного сообщения нити-жертве.
После получения ответного сообщения нить-жертва может продолжить свою работу. 4.8.1. Порты исключительных состояний В операционной системе МасЬ сообщения отправляются в определенный порт, который представляет собой защищенную очередь сообщений. Несколько задач могут обладать правам на отправку сообщений в конкретный порт, но только одна задача имеет право получать сообщения из порта. В системе МасЬ каждой задаче, а также каждой нити задачи назначается по одному порту исключений.
Это обеспечивает два способа обработки исключений, которые соответствуют двум вариантам применения исключений: обработке ошибок и отладке. Обработчики ошибок ассоциируются с нитями, так как ошибки обычно влияют только на ту нить, в которой они породили исключение.
Таким образом, каждая нить может иметь отличный от других нитей обработчик ошибки. Порт обработчика регистрируется как порт исключений нити. При создании новой нити ее порт исключительных состояний инициализируется в й0й~, что означает, что нить изначально не имеет обработчика исключений. Отладчик прикрепляется к задаче посредством регистрации одного из своих портов в качестве порта исключительных состояний задачи. Отладчик запускается в виде отдельной задачи и обладает правами па получение сообщений, отправленных в этот порт.
Каждая задача наследует порт исключительных состояний от своего родителя. Это позволяет отладчикам контролировать всех потомков отлаживаемой задачи. Так как исключение может использовать как порт исключений нити, так и порт исключений задачи, необходимо найти способ разрешения конфликта. Для этого необходимо заметить, что порт исключений нити используется обработчиками ошибок и будет прозрачным для отладчиков. Например, обработчик может ответить на ошибку потери значимости числа с плавающей точкой нулем как результатом операции. Такие исключения, как правило, не интересуют отладчик, который в обычных случаях применяется для перехвата только неисправимых ошибок.
Таким образом, если в приложении установлен обработчик ошибок, то МасЬ при возникновении ошибки в приложении отдаст предпочтение в ее обслуживании обработчику, нежели отладчику. Когда происходит исключение, оно отправляется в порт исключений нити, если таковой существует.
То есть те исключения, для которых определен обработчик, являются невидимыми для отладчика. Если установленный обработчик не сможет успешно очистить исключение, то он перенаправит 4.8, Обработка исключительных состояний в ЬяасГг 167 его в порт исключений задачи. (Так как обработчик является одной из нитей той же задачи, что и нити-жертва, он имеет право доступа к порту исключений задания,) Если ни один из обработчиков не исправит ошибку, то ядро системы завершит работу нити-жертвы.
4.8.2. Обработка ошибок Когда нить-жертва устанавливает исключение, в порт исключений самой нити либо задачи посылается сообщение, содержащее адрес обратного порта, идентифицирующего нить н задачу, в которой произошло исключение, и тип исключения. После обработки исключения обработчик отправляет ответное сообщение обратно в указанный порт. Задача, в которой произошло исключение, обладает правами на получение сообщений из этого порта, и нить-жертва ожидает считывания из порта ответного сообщения. Когда сообщение приходит, нить-жертва получает его и восстанавливает свое выполнение в обычном режиме.
Так как обработчик и жертва являются нитями одной задачи, обработчик разделяет адресное пространство нити-жертвы. Он также может иметь доступ и к контексту регистров нити-жертвы, используя для этого вызовы тгггеаб дет згате и Фгеад зев зтате. Система МасЬ поддерживает совместимость с ПМ1Х, поэтому обработчики сигналов должны в ней запускаться в том же контексте, что и нить, в которой возникло исключение. Такой подход противоположен философии МасЬ, согласно которой для обработки ошибок запускается отдельная нить. В Мас1г эта разница была сглажена за счет использования инициируемого системой обработчика.
Когда происходит исключение, для которого установлен обработчик 1ЛЧ1Х-сигнала, в особый инициируемый системой обработчик посылается сообщение. Этот обработчик изменяет нить-жертву так, что обработчик сигнала исполняется, когда нить-жертва восстанавливает свое выполнение. Он очищает исключение, приведшее к возникновению сигнала. За коррекцию стека после завершения работы обработчика сигнала отвечает приложение.
4.8.3. Взаимодействие с отладчиком Отладчик управляет задачей посредством регистрации порта, в котором он имеет такие же права на получение, что и порт исключений задачи. Когда в нити этой задачи возникает исключение, которое не может быть очищено ее обработчиком ошибок, ядро отправляет сообщение в этот порт, и отладчик получает это сообщение. Исключение приводит только к останову нити-жертвы, все остальные нити задачи продолжают работу. Однако отладчик может при необходимости приостановить функционирование всей задачи, используя вызов тай зцзрелд. 168 Глава д. Сигналы н управление сеансами ОС МасЬ располагает несколькими средствами, которые отладчик вправе использовать для управления задачей.
Он может обращаться к адресному пространству нити-жертвы при помощи функции угп геаг1 или угп игп1е, а также к ее контексту регистров, используя для этого функцию 1Ьгеаб де1 з1ате или Фгеаб зе1 зтасе. Отладчик также может приостанавливать или возобновлять работу приложения, а также завершить его функционирование при помощи функции газа гегпз1па1е. Механизм 1РС (межпроцессное взаимодействие) в системе МасЬ является узло-независимым, то есть сообщения могут отправляться в порт как на той же самой машине, так и на удаленные хосты. Специальная прикладная задача-сервер под названием пе1гпздзепгег расширяет возможности 1РС, делая этот механизм прозрачным при использовании через сеть. Сервер выделяет специальные прокси-порты для всех удаленных портов, принимает на них все сообщения, адресованные соответствующим удаленным портам, и затем пересылает эти сообщения по сети. Таким образом, весь механизм передачи сообщений делается для отправителя этих сообщений прозрачным'.
Это дает возможность отладчику управлять задачей на любом узле сети точно так же, как и на локальном узле. 4.8.4. Анализ Технология обработки исключений, реализованная в операционной системе МасЬ, разрешила многие проблемы, имеющиеся в традиционных вариантах 1ЛЯ1Х. Она оказалась более гибкой и предоставила некоторые возможности, не поддерживаемые в других реализациях ОС. Перечислим некоторые важные преимущества описываемой технологии: + преодоление ограничения на отладчик, по которому он управлял только своими непосредственными потомками. Теперь он может контролировать любое задание, если имеет соответствующие полномочия; + отладчик может присоединяться к работающему заданию'.
Для этого он регистрирует один из своих портов как порт исключений отлаживаемой задачи. Он также может отсоединиться от задания, устанавливая порт исключений задачи в его первоначальное значение. Порт исключений является всего лишь средством связи между отладчиком и задачей, ядро системы не содержит в себе каких-либо средств поддержки отладки; + расширение действия средств 1РС системы МасЬ на сеть позволяет создавать распределенные отладчики; ' Ведь сообшения отправляются в порт на локальной машине.
— Прим. ред. т На сегодняшний день большинство отладчиков используют файловую систему /ргос, которая позволяет получать доступ к адресному пространству несвязанным процессам. Таким образом, отладчики имеют вазможность легкого присоединения и отсоединения от процесса. Во времена разработки системы Маей такие средства были редкосю ю. 4.9. Группы процессов н управление терминалом 169 + наличие отдельной нити для обработчика обеспечивает чистое разделение контекста обработчика и нити-жертвы, при этом позволяя обработчику иметь полный доступ к контексту нити-жертвы; + происходит корректная обработка многонитевых процессов.
При возникновении исключения приостанавливается работа только одной нити, вызвавшей это исключение, в то время как остальные продолжают функционировать в обычном режиме. Если исключения произойдут сразу в нескольких нитях, то каждая из них создаст отдельное сообщение, и исключение каждой будет обрабатываться независимо от остальных. 4.9. Группы процессов и управление терминалом В системе 131ч1Х существует понятие групп процессов. Оно используется для управления доступом с терминала и поддержки сеансов входа в систему.
Устройство и реализация таких средств в различных вариантах (ЛЧ1Х сильно отличаются друг от друга. Этот раздел начинается с описания общих концепций, после чего приводится анализ основных реализаций для конкретных ОС. 4.9.1. Общие положения Группы процессов. Каждый процесс относится к определенной группе процессов, которая идентифицируется через идентификатор группы процессов (ргосеээ ягопр 1О). Этот механизм используется ядром для проведения некоторых действий сразу над всеми процессами группы. Каждая группа может иметь лидера. Лидер группы — это процесс, имеющий Р11), совпадающий с идентификатором группы процессов.