Используется отдельная схема вызова, позволяющая потокам одного процесса выполнять локальные вызовы более эффективно
1. Когда стартует серверная нить S, она экспортирует свой интерфейс, сообщая о нем ядру
2. Когда стартует клиентский поток К, он экспортирует интерфейс из ядра, если собирается вызвать S и получает специальный идентификатор для выполнения вызова.
3. Ядро после экспорта интерфейса создает структуры данных для подготовки к вызову (основная из них – это разделяемый стек аргументов)
4. Для вызова сервера, К помещает аргумент в разделяемый стек, используя обычную процедуру передачи параметров и помещает идентификатор в регистр
5. По идентификатору вызов определяется как локальный и запускается поток Сервер.
Для ускорения удаленных вызовов потоков, при поступлении запроса на сервер создается новый обрабатывающий поток, который уничтожается после выполнения запроса без блокировок или остановок (неявный вызов)
Синхронизация в распределенных системах
Алгоритмы синхронизации логических часов
Для 2 произвольных событий А и Б вводится отношение «случилось до». Это отношение транзитивное. Ставится задача такого механизма ведения времени, который для каждого события а мог указать значение времени Т(а), с которым были бы согласны все процессы системы. При этом, если а R b, то Т(а)<T(b) и корректировки времени могут выполняться только прибавлением положительных значений.
О 6 12 18 24 30 36 42 48 54 60 |
О 8 16 24 32 40 48 56 64 72 80 |
О 10 20 30 40 50 60 70 80 90 100 |
Если часы получателя показывают время меньше чем время отправки сообщения, то они переводятся вперед на следующий после отправки момент времени.