
192 Глава 3. Процессы
шествующие клиентские приложения, связанные с сервером. Существуют, разу-
меется, и недостатки. Наиболее серьезный, который мы будем обсуждать в гла-
ве 8, связан с безопасностью. Слепо верить в то, что загружаемый код реализует
только объявленные интерфейсы доступа к вашему незащищенному жесткому
диску и не отправляет наиболее интересные фрагменты неизвестно кому,
—
не
всегда оправдано.
Модели переноса кода
Хотя перенос кода подразумевает только перемещение кода с машины на маши-
ну, этот термин имеет более широкую область применения. Традиционно связь
в распределенных системах основана на обмене данных между процессами. Пере-
нос кода в широком смысле связан с переносом программ с машины на машину
с целью исполнения этих программ в нужном месте. В некоторых случаях, таких
как перенос процессов, также должны переноситься состояние программы, полу-
чаемые сигналы и прочие элементы среды.
Для лучшего понимания различных моделей переноса кода используем шаб-
лон, описанный в
[156].
Согласно этому шаблону, процесс состоит из трех сег-
ментов.
Сегмент
кода — это часть, содержащая набор инструкций, которые вы-
полняются в ходе исполнения программы.
Сегмент ресурсов
содержит ссылки на
внешние ресурсы, необходимые процессу, такие как файлы, принтеры, устройст-
ва, другие процессы и т. п. И наконец,
сегмент исполнения
используется для хра-
нения текущего состояния процесса, включая закрытые данные, стек и счетчик
программы.
Абсолютный минимум для переноса кода предлагает модель
слабой
мобильно-
сти {weak mobility). Согласно этой модели допускается перенос только сегмента
кода, возможно вместе с некоторыми данными инициализации. Характерной
чертой слабой мобильности является то, что перенесенная программа всегда за-
пускается из своего исходного состояния. Это происходит, например, с Java-an-
плетами. Достоинство подобного подхода в его простоте. Слабая мобильность
требуется только для того, чтобы мaшpп^a, на которую переносится код, была в
состоянии его исполнять. Этого вполне достаточно, чтобы сделать код переноси-
мым. Мы вернемся к данному вопросу, когда будем обсуждать перенос программ
в гетерогенных системах.
В противоположность слабой мобильности, в системах, поддерживающих
сильную мобильность {strong
mobility),
переносится также и сегмент исполнения.
Характерная черта сильной мобильности
—
то, что работающий процесс может
быть приостановлен, перенесен на другую машину и его выполнение продолжено
с того места, на котором оно было приостановлено. Ясно, что сильная мобиль-
ность значительно мощнее слабой, но и значительно сложнее в реализации. Приме-
ром системы, поддерживающей сильную мобильность,
является
система D'Agents,
которую мы рассмотрим позднее в этой главе.
Независимо от того, является мобильность слабой или сильной, следует про-
вести разделение на системы с переносом, инициированным отправителем, и сис-
темы с переносом, инициированным получателем. При переносе, инициирован-
ном
отправителем,
перенос инициируется машиной, на которой переносимый