Сервер

реклама
ПОДГОТОВИЛА: СТУД. ГР. ТМ-31М
КОБЗАРЬ Л.С.
2008
Потоки выполнения
Процесс (process) - это выполняемая программа,
то есть программа, которая в настоящее время
выполняется на одном из виртуальных
процессоров операционной системы.
При создании процесса операционная система (ОС)
создает независимое адресное пространство.
Выделение памяти требует инициализации
сегмента памяти, копирования соответствующей
программы в сегмент кода и помещения в стек
временных данных.
Потоки выполнения
Каждый процесс состоит минимум из одного потока.
Любой поток состоит из двух компонентов:
 объекта ядра, через который ОС управляет
потоком, и где хранится статистическая
информация о потоке(дополнительные потоки
создаются ядром);

стека потока, который содержит параметры всех
функций и локальные переменные, необходимые
потоку для выполнения кода.
Потоки, могут использовать одно и то же
пространство (внутри процесса) при этом,
выполняя действия не мешая друг другу.
Потоки выполнения
Рис. 3.1. Реализация потока как составной части
процесса
Потоки выполнения
Таблица 3.1. Три способа построения сервера
Модель
Характеристики
Однопоточный
Отсутствие параллелизма,
сервер
блокирующие системные вызовы
Потоки
выполнения
Параллельность, блокирующие
системные вызовы
Конечный
автомат
Параллелизм, неблокирующие
системные вызовы
Клиенты
Клиент – программное обеспечение,
предоставляющее интерфейс для взаимодействия
пользователя и сервера.
Клиентское программное обеспечение содержит
компоненты, обеспечивающие прозрачность
распределения.
Прозрачность доступа обычно обеспечивается путем
генерации заглушки клиента. Заглушка
предоставляет такой же интерфейс, как и сервер,
скрывая при этом разницу архитектур и реальное
взаимодействие.
Клиенты
Существуют различные способы реализации
прозрачности размещения, переноса и перемещения.
При изменении местонахождения сервера,
промежуточный уровень клиента скрывает истинное
местоположение сервера от пользователя и при
необходимости незаметно повторяет привязку к этому
серверу.
Клиенты
Аналогичным образом реализуется прозрачность
репликации на стороне клиента. Репликацию
удаленного объекта можно осуществить путем
рассылки всем репликам запроса
Заместител
ь
размножает
запросы
Реплик
а1
Реплик
а2
Все реплики
получают
одинаковое
обращение
Реплик
а3
Серверы
Сервер — это процесс, реализующий некоторую
службу, требующуюся группе клиентов.
Способы организации серверов:
 итеративный сервер (iterative server)
 параллельный сервер (concwrent server)
Клиент всегда посылает запросы в конечные точки
(endpoint), также именуемые портами (port), той
машины, на которой работает сервер. Каждый
сервер просматривает указанные ему конечные
точки.
Серверы
Существуют службы, которые не нуждаются в начальном
назначении конечной точки. Одно из решений— это
создание специального демона, который отслеживает
текущую конечную точку каждого из серверов, а также
просматривает общедоступные конечные точки, и предают
эти значения клиенту для связи с сервером.
Серверы
Типы серверов:


Сервер без фиксации состояния (stateless sewer) не
сохраняет информацию о состоянии своих клиентов и
может менять свое собственное состояние, не
информируя об этом своих клиентов.
Сервер с фиксацией состояния (stateful server) хранит и
обрабатывает информацию о своих клиентах.
Подобный сервер поддерживает таблицу, содержащую
записи пар (клиент, файл).
Серверы объектов
Сервер объектов (object server) — это сервер,
ориентированный на поддержку распределенных
объектов. Конкретные службы реализуются
объектами, расположенными на сервере.
Объект состоит из двух частей: данных, отражающих
его состояние, и кода, образующего реализацию его
методов.
Для любого объекта, к которому происходит
обращение, сервер объектов должен знать, какой
код выполнять, с какими данными работать,
запускать ли отдельный поток выполнения для
поддержки обращения.
Серверы объектов
Простейший подход — считать, что все объекты
выглядят одинаково и обращение к ним может
производиться единообразно. Более правильный
подход со стороны сервера — поддерживать
различные правила обработки объектов.
Существует множество разных подходов, относящихся
к работе с потоками выполнения. Простейший из
них — реализация сервера с единственным
управляющим потоком выполнения. С другой
стороны, сервер может поддерживать несколько
потоков выполнения — по одному на каждый
объект.
Перенос кода
Традиционно перенос кода в распределенных системах
происходит в форме переноса процессов (process
migration), в случае которых процесс целиком
переносится с одной машины на другую.
Также становится возможным конфигурировать
распределенные системы динамически.
Модели переноса кода
Процесс состоит из трех сегментов:
 Сегмент кода
 Сегмент ресурсов
 Сегмент исполнения
Абсолютный минимум для переноса кода предлагает
модель слабой мобильности (weak mobility).
Согласно этой модели допускается перенос только
сегмента кода с данными инициализации.
В противоположность слабой мобильности, в
системах, поддерживающих сильную мобильность
(strong mobility), переносится также и сегмент
исполнения.
Модели переноса кода
Проводят разделение на системы с переносом,
инициированным отправителем, и системы с
переносом, инициированным получателем.
При переносе, инициированном отправителем,
перенос инициируется машиной, на которой
переносимый код постоянно размещен или
выполняется.
При переносе, инициированном получателем,
инициатива в переносе кода принадлежит
машине-получателю.
Модели переноса кода
Общая классификация моделей переноса кода представлена
на рис. 3.6.
Рис. 3.6. Варианты переноса кода
Перенос и локальные
ресурсы
Сегмент ресурсов не всегда можно перенести с
такой же легкостью без изменений, как другие
сегменты.
Существует типа связи процесса с ресурсами:
 привязка по идентификатору (binding by identifier)
 привязка по значению (binding by value)
 привязка по типу (binding by type)
Перенос и локальные
ресурсы
Существует также три типа привязки ресурса к
машине:
 Неприсоединенные ресурсы (файлы данных)
 Связанные ресурсы (локальные базы данных)
 Фиксированные ресурсы (локальные устройства)
Скомбинировав три типа привязки ресурсов к
процессам и три типа привязки ресурсов к
машине, получим девять комбинаций, которые
следует рассмотреть, обсуждая вопрос переноса
кода.
Программные агенты
Программный агент (software agent) - автономный
процесс, способный реагировать на среду
исполнения и вызывать изменения в среде
исполнения, возможно, в кооперации с
пользователями или с другими агентам.
Отличие от процесса:
 способность функционировать автономно
 способность кооперироваться с другими агентами
Типы агентов
Кооперативный агент (collaborative agent) — это агент, часть
мультиагентной системы, в которой агенты, кооперируясь,
выполняют общие задачи.
Мобильный агент (mobile agent) — это просто агент, у которого
имеется способность перемещаться с машины на машину.
Интерфейсный агент (interface agent) — это агент,
помогающий конечному пользователю работать с одним или
несколькими приложениями.
Информационный агент (information agent) — управляет
информацией из множества различных источников.
Технология агентов
В качестве исходной точки организация FIPA
(Foundation for Intelligent Physical Agents)
разработала обобщенную модель программных
агентов.
Технология агентов
Агенты взаимодействуют друг с другом посредством
коммуникационного протокола прикладного
уровня, который называется языком
взаимодействия агентов. В нем имеется четкое
разделение между целью сообщения и его
содержимым. Язык взаимодействия определяет
коммуникационный протокол верхнего уровня:
посылка сообщения обычно предполагает
конкретную реакцию получателя на основании
исключительно цели сообщения.
Выводы
1. Процессы играют фундаментальную роль в распределенных
системах, поскольку они формируют базис для связи между
различными машинами.
2. Важным вопросом является внутренняя организация
процессов и в частности, способны ли поддерживать
несколько управляющих потоков выполнения.
Потоки выполнения в распределенных системах используются
для продолжения работы с процессором во время
блокирующих операций ввода-вывода. Таким образом,
появляется возможность построения более эффективных
серверов, в которых несколько потоков выполнения
работают одновременно.
Выводы
3. Клиентский процесс обычно реализует пользовательский
интерфейс. Клиентское программное обеспечение
способно поддерживать прозрачность распределения,
скрывая детали, касающиеся связи с серверами, текущего
местоположения серверов и репликации серверов, а также
возникающие сбои и процессы восстановления после
сбоев.
4. Серверы могут быть итеративными или параллельными,
реализовывать одну или несколько служб, сохранять
информацию о состоянии или не сохранять. Остальные
архитектурные особенности касаются адресации служб и
механизмов прерывания серверов после прихода запроса на
обслуживание.
Выводы
5. Сервер объектов — это процесс, содержащий
размещенные в своем адресном пространстве объекты
и готовый принимать направленные к ним обращения.
Посредством адаптера объектов в различных серверах
может быть реализована разная политика обращения к
объектам.
6. Важной для распределенных систем функциональной
возможностью является перенос кода с машины на
машину. Для того чтобы поддерживать перенос кода,
имеются две причины — повышение
производительности и мобильность. При переносе
кода существуют проблемы использования локальных
ресурсов и влияния гетерогенности системы.
Выводы
7. Программные агенты — специальный вид процессов,
работающих как автономные модули, способные
кооперироваться с другими агентами. С точки зрения
распределенных систем, отличие агентов от обычных
приложений в том, что агенты взаимодействуют друг с
другом посредством коммуникационного протокола
прикладного уровня, который называется языком
взаимодействия агентов.
Скачать