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

Многопроцессорная синхронизация Или процесс взаимного исключения. Имеет особое зачение в Ос с симметричной мультипроцессорной обработкой. Поскольку один и тот же системный код может одновременно выполняться На нескольких процессорах совместно используя структуры глобальных данных памяти.

Решение задачи синхронизации обращение разных участков системного кода к общим структурам данных осуществляет ядро. Для этого оно имеет примитивы взаимного исключения. На различных стадиях работы ядро должно гарантировать, что в каждый момент времени в критической секции исполняется код только одного процессора. Критические секции ядра- сегменты кода, модифицирующие глобальные данные. При этом наибольшего внимания требует код обработки прерываний. Поскольку прерывания могут возникать асинхронно по отношение к исполняющемуся коду. Механизм, используемый ядром для взаимоисключения многопроцессорной обработки называется спин-блокировкой

Схема показана на рисунке.(рис1)

Спин-блокировка названа так потому, что ядро, и следовательно процессор, запрограммировано(?) пока не получит блокировку. Если блокировка не свободна, то ядро пытается получить её пока это не увенчается успехом и более ничего ядро в этот момент не делает. Спин-блокировка как и защищаемые им структуры данных располагаются в глобальной памяти. Код получения и освобождения спин-блокировки написан на Assembler для максимального увеличения скорости опроса. Однако, во многих ОС вместо циклического опроса спин-блокировки реализованы команды «проверить» и «установить», которые одной атомарной операции проверяет значение переменной спин-блокировки и её захватывает.

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

Спин-блокировка доступна не только ядру , но и другим частям исполнительной системы через набор функций ядра. Драйверы устройств например используют спин-блокировку, чтобы к регистрам устройств и другим глобальным данным в любой момент времени имел доступ только одна часть драйвера и только одного процессора.

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

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

И когда критическая секция не может быть удалена из памяти

не может обращаться к нерезидентным данным

не может вызывать другие процедуры,в том числе системные сервисы

не может генерировать прерывания и исключения

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

Передача сообщений при помощи локального вызова процедур

В клиент-серверной модели Windows NT многое зависит от успешной работы механизма локального вызова процедур LPC

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

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

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

Средство LPC обеспечивают 3 разных способа передачи сообщений, предназначенных для разных ситуаций.

1Способ.

Посылка сообщения в объект порт, связанны с серверным процессом.

2

посылка в порт сервера указатель на сообщение и передача сообщения через совместно используемую память

3

передача сообщения определенному потоку сервера через особую область совместно используемой памяти

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

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

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

Порты соединения

Место куда клиент может передать запрос на установление канала связи с сервером

Порты соединения имеют имена, что делает их видимыми всем потокам всех процессов.

На данной схеме показана последовательность шагов установления клиент-сервер

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

Клиент использует свой дескриптор порта связи для посылки последующих сообщений и ожидания от неё ответов.

Сервер используют свой дескриптор для аналогичной операции с клиентом(?) Объект порт как и любой объект NT имеет заголовок и тело.

Тип объекта-порт, атрибутами-очередь сообщений,а также описатель секции

Сервисы объекта порт-создать порт соединения,открыть порт, ожидать у порта, установить,завершить соединение,послать запрос,ответить,послать запрос и ждать ответа, ответить и ждать ответа.

Дескрипторы объекта порт не могут наследоваться другими процессами(сервер не мог бы понять с каким установлено соединение)

Способы передачи сообщений

1.Передача сообщений в очередь сообщений объекта порт.

Используется для сообщения малого размера.

2.передача сообщений через объект совместно используемая память.

Для передачи сообщений большого размера

3.Быстрые LPC.

Используются исключительного компонентами Win32 для достижения минимальных накладных расходов и максимальной скорости.

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