Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы_РСОИ.doc
Скачиваний:
51
Добавлен:
21.12.2018
Размер:
1.23 Mб
Скачать
  1. Процессы. Перенос кода

Существуют ситуации, когда передача программ, иногда даже во время их выполнения, позволяет упростить разработку распределенных систем.

Традиционно перенос кода в распределенных системах происходит в форме

переноса процессов (process migration) в случае которых процесс целиком переносится с одной машины на другую. Перенос работающего процесса на другую машину дорогостоящая и сложная задача, и для ее выполнения должна быть веская причина. Такой причиной всегда была производительность. Основная идея состоит в том, что производительность может возрасти при переносе процессов с сильно загруженной на слабо загруженную машину.

Например, систему клиент-сервер, в которой сервер управляет большой базой данных. Если клиентское приложение собирается выполнять множество операций с базой данных, используя большие объемы данных, может быть лучше перенести часть клиентского приложения на сервер, а по сети передавать только результаты. Сходная причина может быть использована и при переносе части сервера на клиент.

Помимо повышения производительности существуют и другие причины поддержания переноса кода. Наиболее важная из них это гибкость.

Модели переноса кода

Процесс состоит из трех сегментов. Сегмент кода — это часть, содержащая набор инструкций, которые выполняются в ходе исполнения программы. Сегмент ресурсов содержит ссылки на внешние ресурсы, необходимые процессу, такие как файлы, принтеры, устройства, другие процессы и т. п. И наконец,

сегмент исполнения используется для хранения текущего состояния процесса, включая закрытые данные, стек и счетчик программы.

Абсолютный минимум для переноса кода предлагает модель слабой мобильности (weak mobility). Согласно этой модели допускается перенос только сегмента кода, возможно вместе с некоторыми данными инициализации.

В противоположность слабой мобильности, в системах, поддерживающих

сильную мобильность (strong mobility), переносится также и сегмент исполнения. Характерная черта сильной мобильности — то, что работающий процесс может быть приостановлен, перенесен на другую машину и его выполнение продолжено с того места, на котором оно было приостановлено.

Независимо от того, является мобильность слабой или сильной, следует провести разделение на системы с переносом, инициированным отправителем, и системы с переносом, инициированным получателем. При переносе, инициированном отправителем, перенос инициируется машиной, на которой переносимый код постоянно размещен или выполняется. Обычно перенос, инициированный отправителем, происходит при загрузке программ на вычислительный сервер. Другой пример передача поисковых программ через Интернет на сервер баз данных в Web для выполнения запроса на этом сервере. При переносе,

инициированном получателем, инициатива в переносе кода принадлежит машине получателю. Пример такого подхода Java-апплеты.

В случае слабой мобильности процесс может быть исполнен в процессе-приемнике или в отдельном процессе. В случае сильной мобильности имеют место перенос процесса и клонирование процесса.

Перенос кода и локальные ресурсы

Выделено три типа связи процесса с ресурсами. Наиболее сильная связь наблюдается, когда процесс ссылается на ресурс по его идентификатору. В этом случае процесс требует в точности тот ресурс, на который ссылается. Примером подобной привязки по идентификатору (binding by identifier) является использование процессом URL-адреса для ссылки на конкретный web-сайт.

Более слабая связь процесса с ресурсами будет иметь место в том случае, если процессу необходимо только значение ресурса. В этом случае выполнение процесса ничуть не изменится, если такое же значение ему предоставит другой ресурс. Типичным примером привязки по значепию (binding by value)

являются обращения программ к стандартным библиотекам, как при программировании на языке С или Java.

Наиболее слабая форма связи имеет место в том случае, когда процесс указывает

на необходимость использования ресурса определенного типа. Подобная привязка по типу (binding by type) может быть проиллюстрирована ссылками

на локальные устройства, такие как принтеры, мониторы и т. п.

При переносе кода мы часто нуждаемся в изменении ссылок на ресурсы, при

этом изменять тип привязки ресурса к процессу запрещено. Нам нужно определить связь ресурсов с машиной и рассмотреть варианты.

Неприсоединенные ресурсы (unattachedresources) могут быть с легкостью перенесены с машины на машину. Файлы(данных) в этом случае обычно связаны только с переносимой программой. В противоположность им, перенос или копирование связанных ресурсов (fastened resources) возможно лишь с

относительно большими затратами. Типичными примерами связанных ресурсов могут быть локальные базы данных или web-сайты целиком. И, наконец,

фиксированные ресурсы (fixed resources) изначально привязаны к конкретной машине или среде и не могут быть перенесены на другую. Фиксированными ресурсами часто бывают локальные устройства. Другой пример фиксированных ресурсов локальные конечные точки взаимодействия.