Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 53
Текст из файла (страница 53)
В другой таблице204Глава 3. Процессысодержатся глобальные системные переменные, в которых хранятся коды ошибок, строки с сообщениями об ошибках, коды результатов, строки сообщений,выводимые вместе с результатами и т. п. Имеется также отдельная таблица, в которой хранятся все определенные пользователем глобальные переменные программы. И наконец, в отдельной таблице хранятся определения процедур, связанных с агентами. Эти определения процедур нуждаются в переносе вместес агентами для выбора интерпретатора на целевой машине.Более интересная часть, напрямую связанная с переносом агентов, — два стека, в которых хранится истинное состояние выполнения агента. В основе каждого агента лежит набор команд Тс1, возможно, встроенных в конструкции, такиекак циклы, инструкцрш множественного выбора и т.
д. Кроме того, команды могут быть сгруппрфованы в процедуры. Как это происходит во всех интерпретируемых языках, агент выполняется команда за командой.Сначала рассмотрим, что происходит при выполнении базовой команды Тс1,то есть команды, которая вызывается не из пользовательской процедуры.
Интерпретатор анализирует команду и строит запись, помещаемую в то, что мы называем стеком команд (command stack). Эта запись содержит все необходимые длявыполнения команды поля, как то: значения параметров, указатель на процедуруреализации команды и т. п. Запись помещается в стек, после чего может быть использована компонентом, отвечающим за выполнение команды. Другими словами, стек команд представляет собой место хранения текущего состояния выполнения агента.Тс1 также поддерживает определяемые пользователем процедуры. Кроме стекакоманд среда исполнения D'Agent отслеживает стек записей активизации, такженазываемых фреймами вызова. Фрейм вызова в D'Agent содержит таблицу переменных, локальных для процедуры, а также имена и значения параметров, с которыми эта процедура была вызвана.
Фрейм вызова создается только в результатевызова процедуры и относится к команде вызова процедуры, помещенной в стеккоманд. Фрейм вызова содержит ссылку на связанную с ним команду.Рассмотрим теперь, что происходит, например, когда агент вызывает командуagent_jump, при помощи которой он переносится на другую машину.
В этот момент полное состояние агента, описанное выше, подвергается маршалингу и превращается в последовательность байтов. Другими словами, все четыре таблицыи два стека укладываются в массив байтов и пересылаются на другую машину.Сервер D'Agent на целевой машине создает новый процесс, запуская интерпретатор Тс1. Процесс обрабатывает полученные данные, выполняет их демаршалинг и в результате получает состояние агента, в котором он Р1аходился передвызовом команды agent_jump. Выполнение агента продолжается путем простогоснятия с вершины стека команд очередной команды.3.5.
Программные агентыТеперь мы рассмотрим процессы под несколько другим углом. Сначала мы сосредоточимся на одном из ключевых вопросов, управляющих потоках выполнения3.5. Программные агенты205внутри процессов. С позиций взаимодействия мы поближе рассмотрим обобщенную организацию клиентов и серверов. И наконец, обсудим перенос программи процессов. Эти более или менее независимые представления процессов объединятся в то, что нередко называют программными агентами — автономные единицы, способные выполнять задания в кооперации с другими, возможно, удаленными агентами.Агенты играют в распределенных системах все более важную роль.
Однакоочень близко к действительности утверждение о том, что у нас есть лишь интуитивное определение того, что такое процесс [334]. Определение программныхагентов в таких условиях тоже нуждается в уточнении. В этом разделе мы поближе приглядимся к программным агентам и их роли в распределенных системах.3.5.1. Программные агентыв распределенных системахСуществует множество мнений о том, что такое агент. Взяв за основу описание,данное в [173], мы определяем программный агент {software agent) как автономный процесс, способный реагировать на среду исполнения и вызывать измененияв среде исполнения, возможно, в кооперации с пользователями или с другимиагентами. Свойство, которое делает агента чем-то большим, чем процесс, — этоспособность функционировать автономно и, в частности, проявлять при необходимости инициативу.Наше определение программного агента получилось весьма неопределенным,и в результате многие типы процессов с легкостью могут восприниматься в качестве агентов.
Вместо того чтобы делать попытки точнее определить программные агенты, будет разумнее говорить о разных типах программных агентов. Тоесть в литературе сделано несколько попыток разработать классификацию программных агентов, но договориться о единой классификации исследователям, повсей видимости, нелегко.Помимо автономности важнейшее качество агентов — возможность кооперироваться с другими агентами. Сочетание автономности и кооперации приводитнас к классу кооперативных агентов [320]. Кооперативный агент {collaborativeagent) — это агент, составляющий часть мультиагентной системы, то есть системы, в которой агенты, кооперируясь, выполняют некие общие задачи.
Типичноеприложение, использующее кооперативные агенты, — это электронная конференция. Каждый из докладчиков представлен агентом, имеющим доступ к вопросам, которые пользователь хочет представить на всеобщее рассмотрение. С учетом всех персональных ограничений на время, местоположение, перемещениеи т. п.
совместная работа отдельных агентов позволяет организовать конференцию. В перспективе, таким образом, могут производиться разработки распределенных систем, особенно предназначенных для обмена информацией.Многие исследователи также выделяют из других типов агентов мобильныеагенты. Мобильный агент {mobile agent) — это просто агент, у которого имеетсяспособность перемещаться с машины на машину. В терминах, которые мы ис-206Глава 3. Процессыпользовали при обсуждении переноса кода в предыдущей главе, мобильныеагенты часто требуют поддержки сильной мобильности, хотя это и не являетсяабсолютно необходимым. Требование сильной мобильности вытекает из тогофакта, что агенты автономны и активно взаимодействуют со своей средой.
Перенос агента на другую машину без учета его состояния будет сильно затруднен.Однако как было показано на примере системы D'Agent, сочетание агентов и слабой мобильности также вполне возможно. Отметим, что мобильность — это общее свойство агентов, наличие которого не приводит к выделению особого ихкласса. Так, например, имеет смысл говорить о существовании мобильных кооперативных агентов. Хороший пример практического использования мобильных агентов приведен в [74], где авторы описывают использование мобильныхагентов для получения информации, распределенной по большой гетерогеннойсети, такой как Интернет.Способность к кооперации с другими агентами или перемещению между машинами — это системные свойства агентов.
Они не говорят нам ничего о назначении агента. Для изучения функциональности агента нам требуется другая классификация.Традиционно выделяемый класс — это класс интерфейсных агентов. Интерфейсный агент {interface agent) — это агент, помогающий конечному пользователю работать с одним или несколькими приложениями. Среди традиционноимеющихся у интерфейсного агента свойств можно считать способность к обучению [280, 320]. Чаще всего они взаимодействуют с пользователями, обеспечиваяим поддержку.
В контексте распределенных систем примером интересного интерфейсного агента может быть агент, отслеживающий взаимодействия междуагентами и пользователями в некотором сообществе. Так, например, создаютсяспециальные интерфейсные агенты для взаимодействия продавцов с покупателями. Правильно поняв, что хочет увидеть или что может предложить его владелец, интерфейсный агент может помочь предложить нужную группу товаров.Очень близок к интерфейсному агенту информационный агент {informationagent).
Основная функция подобных агентов — управление информацией измножества различных источников. Управление информацией включает в себяупорядочение, фильтрацию, сравнение и т. п. Важности информационным агентам в распределенных системах придает тот факт, что они могут работать с информацией из физически разных источников. Стационарные информационныеагенты обычно работают с входящими потоками информации.
Так, например,почтовый агент может применяться для фильтрации в почтовом ящике непрошеной корреспонденции, ее владельца или автоматического перенаправления входящей почты в соответствующие теме почтовые ящики. В противоположностьим, мобильные информационные агенты обычно свободно путешествуют по сети, собирая по требованию их владельца необходимую ему информацию.В целом агенты могут быть охарактеризованы набором свойств, приведеннымв табл. 3.4 [152]. Дальнейшее разделение агентов можно провести, рассматривая,как они реально работают с точки зрения искусственного интеллекта.
Краткийобзор этой стороны дела можно найти в [175, 196, 496].3.5. Программные агенты207Таблица 3.4. Некоторые важные свойства агентовСвойствоОбщностьдля агентовОписаниеАвтономностьДаСпособность работать независимо от другихРеактивностьДаСпособность своевременно реагироватьна изменения в своем окруженииПроактивностьДаСпособность инициировать действия,влияющие на их окружениеКоммуникативностьДаСпособность обмениваться информациейс пользователями и другими агентамиПродолжительностьНетОтносительно долгое время жизниМобильностьНетСпособность перемещаться с места на местоАдаптивностьНетСпособность к обучению3.5.2.