Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 65
Текст из файла (страница 65)
Отладчик может имитировать вызов и отправить ответ самостоятельно. Вместе с тем возможен и более стандартный ход: обработчик пересылает сообщение ядру при помощи изначально установленного порта 1ай поИу задания (на который отладчик обладает правами отправки).
При пересылке сообщения ядру ответ может быть послан напрямую заданию или на порт, указанный обработчиком. В последнем случае произойдет перехват ответа ядра. 278 Глава б. Межпроцессное взаимодействие С другой стороны, отладчик в состоянии перехватывать и все уведомления, передаваемые управляемому заданию, после чего он принимает решение о самостоятельной обработке уведомления или передаче его заданию. Иэ вышесказанного следует, что обработчик (или иное другое задание) может управлять заданием, если он передаст свои права на получение из порта 1ай ье(г" управляемого им задания. 6.9. Расширяемость Средства 1РС системы МасЬ разрабатывались с учетом возможности прозрачного расширения на распределегшые среды. Для расширения МасЬ 1РС иа сеть используется программа пользовательского уровня пе1шэдэегчег, даюшэл возможность взаимодействия с заданиями на удаленных машинах точно таи же, как будто эти задания выполняются на локальном компьютере.
Приложения ничего не знают об удаленном соединении, так как они продолжают использовать тот же интерфейс и набор вызовов, применяемых для локальныг коммуникаций. Приложение обычно не обладает информацией о том, является ли задание, с которым оно взаимодействует, локальным или удаленным. В системе МасЬ имеются две очень важные особенности, позволившис прозрачно расширить возможности 1РС на сеть. Во-первых, права портов используют независимое от местонахождения пространство имен.
Отправитель посылает сообщение на локальное имя порта (право отправки), при этом ои не знает, какой из объектов представлен этим портом — локальный или удаленный. Карты преобразований локальных имен портов в объект ядра погг держиваются на уровне ядра системы, Во-вторых, отправители являются анонимными. Сообщения их не идентифицируют.
Отправитель вправе переслать право на отправку в порт ответи прямо в сообщении. Ядро преобразует это таким образом, что получателю будет видно только локальное имя, действительное только для данного зада ния. Это означает, что получатель не может определить, кто является отпра. вителем сообщения. Более того, получатель даже не обязан быть владельцев права на порт ответа, ему достаточно обладать правом на отправку в этот порт. Указывая порт ответа, владельцем которого является другое задание, отправитель перенаправляет ответ на это задание.
Перечисленные возможности также могут применяться отладчиками, эмуляторами и другими программами. Функции пе1шздзегчег достаточно просты. Типичный сценарий работы программы показан на рис. 6.16. Программа песшздзепгег загружается на как. дой машине в сети. Если клиенту на узле А необходимо установить соединеиис с сервером на сервере Б, программа пе1шздэегчег на узле А установит порт. посредник, на который отправитель будет отсылать сообщения.
Затем оиа запросит сообщения, посланные на этот порт, и перешлет их программе пеЬпздзепгег узла Б, которая в свою очередь передаст их на порт сервера. 6.10. Новые возможности Ьласп 3.0 279 Если клиент ожидает ответа, он указывает в исходном сообшении порт ответа. Программа петптзйзевет на узле А получит права отправки в ответный порт. После этого пегшзйзевет на узле Б создаст порт-посредник для ответного порта и отправит право на порт-посредник сервера.
Сервер передает ответное сообщение на свой порт-посредник, которое далее будет передано через два петптздзеггег (сервера и узла) на порт ответа клиента. Рис. 6.1 6. Удаленные коммуникации с использованием программ пеппзвзенег Серверы регистрируют себя в локальной программе петшзйзетчет и затем передают ей право отправки на порт, прослушиваемый сервером. Программа поддерживает распределенную базу данных таких зарегистрированных сетевых портов и предоставляет для них набор служб (защиту, уведомления и т. д.), сходный с набором, выделяемых ядром для локальных портов машины. Таким образом, программа полдерживает глобальную службу поиска для всех имен портов.
Задания используют эту службу для получения прав отправки на порты, зарегистрированные удаленными программами пегп зйзегчет. В отсутствии сети программа работает как локальная служба имен. Программы петазйзевет взаимодействует между собой при помощи сетевых протоколов низкого уровня, не применяя при этом сообщений !РС. 6.10. Новые возможности Масп 3.0 В системе МасЬ 3.0 были расширены некоторые возможности средств 1РС ~7!. Были преодолены проблемы, возникавшие в ОС версии 2.5. Изменения коснулись как интерфейсной части, так и внутренних структур данных и используемых алгоритмов. В этом разделе показаны основные усовершенствования подсистемы 1РС.
Главной проблемой Мас!т 2.5 является передача прав. Средства 1РС тесно интегрируются с технологией «клиент-сервер», Обычно клиент посылает сооб- 280 Глава 6, Межпроцессное взаимодействие щенне, содержащее право отправки в порт ответа, владельцем которого он является. После генерации ответа серверу нет необходимости далее поддерживать посланное ему право.
С другой стороны, сервер не может после обработки запроса освободить порт, так как существует вероятность использования этого порта другой нитьк> серверного приложения, обрабатывающей одновременно другой запрос от того же задания. Ядро преобразует одно и то же право отправки для следуьощих нитей в одно и то же имя, следовательно, сервер обладает единым правом отправки на указанный порт.
Если нить, обработавшая первый запрос, освободит право, то вторая нить уже не сможет отправить на этот порт ответное сообщение. Означенная проблема решена серверами просто: они никогда не освобождают присланные им права отправки. Однако это приводит к необходимости решения уже новых проблем. Во-первых, появляется определенный риск безопасности работы; клиент может не желать, чтобы сервер постоянно имел право на отправку сообщений в его порт. Также существует проблема усложнения обработки «раздутых» таблиц преобразований, что влияет на общую производительность системы. И наконец, при удалении порта клиентом серверу приходится обрабатывать нс нужные ему уведомления об этом событии, Ядро обязано разослать такие уведомления всем серверам, которые имеют права на отправку в удаляемый порт, серверы, в свого очередь, должны получить и обработать их, даже если судьба порта их не интересует.
В системе Масьь 3.0 введены новые средства, позволяющие решить эту проблему: права на однократную отправку, запросы уведомлений н пользовательские ссылки на права отправки. 6.10.1. Права на однократную отправку Право на однократную отправку в порт — это, как и следует из его названия, право на отправку, которое может быть использовано только один раз. Такое право создается заданием-владельцем права на получение из порта и в дальнейшем может передаваться между заданиями.
Оно дает гарантию на получение ответного сообщения именью из указанного в нем порта. Обычно такое право применяется для использования порта в качестве получателя ответного сообщения и отзывается сразу после передачи на него ответа. Если право аннулируется вследствие других причин (ььаььример, при завершения работы его владельца), то вместо ответа ядром будет отослано однократное уведомление. В системе Маса права на однократную отправку используются для указания портов ответа. Такое право удаляется сразу после получения ответного сообщения, следовательно, теперь сервер не продолжает удерживать не нужные ему права.
Такой подход защищает от необходимости обработки излишних уведомлений, создаваемых при удалении порта клиентом. б.10. Новые возможности Масп 3.0 281 6 10.2. Уведомления в Масп 3.0 В системе МасЬ 2.5 уведомления отправлялись заданиями асинхронно в ответ иа различные системные события. Задания не могли контролировать процесс получения таких уведомлений. В большинстве случаев информация о произошедших событиях не нужна заданиям, поэтому уведомления просто уничтожаются. Однако существование таких излишних уведомлений влияет на общую производительность системы.
Более того, использование единого порта для уведомления всех нитей задания приводит к определенным ограничениям. Одна из нитей может перехватить и изъять уведомление, ожидаемое другой нитьк> задания. Г1рименение пользовательских библиотек увеличило вероятность такого варианта развития событий, так как основные программы и библиотеки используют уведомления независимо друг от друга и обрабатывают их различными способами. В системе МасЬ 3.0 уведомления отправляк>тся только тем заданиям, которые запросили их при помощи вызова щасЬ рог~ ~еццезГ по11Всас1оп.
При этом запросе используется право на однократную отправку в порт уведомлений. Таким образом, в ОС МасЬ 3.0 появилась возможность использования нескольких портов уведомлений внутри одного задания. Каждый программный компонент или нить может теперь указать собственный порт уведомлений, защитив себя тем самым от вышеуказанных проблем. 6.10.3. Подсчет прав на отправку Если задание дает несколько прав отправки для одного порта, ядро использует для всех них единое имя в пространстве имен портов, комбинируя тем самым все права в единое право на отправку. Если одна из нитей освободит право, ни одна другая нить больше не сможет воспользоваться им, даже если зта нить затребовала данное право ранее самостоятельно.