Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Untitled 1.doc
Скачиваний:
4
Добавлен:
28.10.2018
Размер:
60.93 Кб
Скачать

Обратные выходы.

Обычно у сервера имеет несколько даже много портов связи, каждый из которых предназначен для обмена с одним клиентом. Для обслуживания портов связи сервер создает набор поток, ожидающих сообщений через соответствующий код. В то же время каждый поток сервера может обрабатывать любой запрос, т.е поток обработки сервера жестко не привязан к порту. Чтобы отслеживать каким клиентам послано сообщение, каждое сообщение содержит идентификатор клиента я ответа и порядковый номер, который присваивается сообщениям посредством LPC.

Когда сервер отвечает на сообщения, он помещает в ответе клиентский идентификатор потока, которому предназначен ответ, и порядковый номер сообщения клиента, на который присылается ответ.

Средство LPC проверяет ожидает ли клиент соответствующим идентификатором ответа на сообщение с указанным номером и если нет, то возвращает код ошибки.(серверу возвращ.)

Иногда сервер может оказаться не способен сразу же послать ответ. Ему может потребоваться дополнительная информация о клиентах. Для обработки таких ситуаций LPC предоставляет механизм обратных вызовов.

Обычно клиент посылает запрос и ожидает ответа .Однако,если клиент поддерживает обратные вызовы, то во время этого ожидания, он в свою очередь моет обрабатывать запросы от сервера. Клиент может ответь на запрос сервера посредством LPC и продолжить ожидания ответа на первоначальном сообщении. Таким образом, между сервером и клиентом могут генерироваться множество промежуточный запросов и ответов. Но клиент будет находится все время в состоянии ожидания, пока он не получит ответ на самый первый запрос.

Такая схема обратных вызовов является симметричной, разрешает любую вложенность запросов-ответов,

3Способ.Быстрый lpc

механизм быстрого LPC используется при взаимодействии клиентов только с подсистемой Win32.(самая загруженная подсистема, так как защищенные подсистема. единственная взаимодействует с графическим интерфейсом)

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

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

Для установления соединения с Win32 клиентский поток посылает сообщения в порт соединения(речь идет о Win32), указывая, что хочет использовать быстрый LPC.

В ответ сервер создает для клиента 3 ресурса:

1.выделенный серверный поток для взаимодействия с клиентом

  1. 64-ёх килобайтный разделяемую память, т.е объект секцию для передачи сообщений

  2. и синхронизирующий объект пара событий.

После этого потоки сервера и клиента вообще не используют порты и передают сообщения через разделяемую память. Синхронизирующий Объект пара событий содержит одно событие для клиентского потока и одного событие для серверного, обеспечивая механизм синхронизации их доступа к разделяемой памяти. Например клиент помещает сообщение в объект секцию и устанавливает серверное событие, одновременно начиная ожидать своё собственное событие. Когда устанавливается серверное событие, ядро пробуждает серверный поток, то сервер читает сообщения из разделяемой памяти, при этом серверу не требуется информация от какого сервера это сообщение и где он находится, поскольку обрабатывающий сообщение серверный поток является выделенным, т.е за крепленым за клиентом. Когда сервер закачивает обработку сообщения,он устанавливает событие клиента и сбрасывает свое событие. Ядро пробуждает клиента и т.д

Все это происходит до тех пор,пока не будет закрытие соединения быстрого LPC.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]