Алгоритм Рэймонда — это алгоритм на основе блокировки для взаимного исключения в распределенной системе . Он накладывает логическую структуру ( K-ичное дерево ) на распределенные ресурсы. Согласно определению, каждый узел имеет только одного родителя, к которому направляются все запросы на получение токена.
Алгоритм
Узловые свойства
- У каждого узла есть только один родительский узел, которому пересылаются полученные запросы.
- Каждый узел поддерживает очередь FIFO запросов каждый раз, когда он видит токен;
- Если какой-либо узел пересылает привилегии другому узлу и имеет непустую очередь, то он пересылает сообщение-запрос вместе с
Алгоритм
- Если узел i (не имеющий токена) желает получить токен для входа в свою критическую секцию , он отправляет запрос своему родительскому узлу j .
- Если узел j FIFO пуст, узел j перемещает i в свою очередь FIFO; затем j отправляет запрос своему родительскому узлу k о том, что он хочет получить токен.
- Если очередь FIFO узла j не пуста, он просто перемещает i в очередь
- Когда узел k имеет токен и получает запрос от j, он отправляет токен в j и устанавливает j в качестве своего родителя.
- Когда узел j получает токен от k , он пересылает токен в i , и i удаляется из очереди j.
- Если очередь j не пуста после пересылки токена i , j должен отправить запрос i , чтобы получить токен обратно.
Примечание : Если j хочет запросить токен, и его очередь не пуста, то он помещает себя в свою собственную очередь. Узел j будет использовать токен для входа в свою критическую секцию , если он находится во главе очереди при получении токена.
Сложность
Алгоритм Рэймонда гарантированно будет O(log n) на запись критической секции, если процессоры организованы в K-ичное дерево. Кроме того, каждый процессор должен хранить не более O(log n) бит, поскольку он должен отслеживать O(1) соседей. [1]
Ссылки
- ^ Р. Чоу, Т. Джонсон; Распределенные операционные системы и алгоритмы ; Addison-Wesley, 1997.
Смотрите также