The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование в Linux" / Оглавление документа
next up previous contents
Next: Локальная информация ядра Up: DIPC - Распределенные межпроцессные Previous: Удаление структур IPC   Contents

Окончательное удаление структур IPC

После того, как структура удалена, она может быть удалена ``окончательно'' (это осуществляется во всех случаях, когда имеются очереди сообщений и наборы семафоров). Поскольку структура удаляется окончательно, referee информируется об этом, а также referee окончательно удаляет данную машину из своих таблиц - как ``держателя'' данной структуры. Ниже показано, что происходит в этом случае:

                                    Сеть
      (Запрашивающий компьютер)      |    (Арбитрирующий компьютер)
                                     |
     |-1->back_end~>-2-+             |
     |                 |             |
ядро |              employer--3------|-> referee 
                                     |

Когда на компьютере окончательно удаляется структура IPC, об этом сообщается back_end (1). Он раздваивает employer (2) и ``приносит'' эти новости referee (3), который окончательно удаляет свои соответствующие элементы, проверяет наличие такой структуры в разделяемой памяти и является ли действующий компьютер единственным, содержащим эту структуру. Он должен быть владельцем. В этом случае referee действует как показано на схеме:

                            Сеть
(Арбитрирующий компьютер)    |        (Владелец разделяемой памяти)
                             |
            referee --4------|-> front_end --5-->shm_man

В итоге referee сообщает shm_man об отсоединении (4 и 5). Все похоже на случай с простым удалением из разделяемой памяти структуры IPC.

Далее следует все остальное:

                                Сеть
     (Компьютер-владелец)        |        (Арбитрирующий~компьютер)
                                 |
     |                           |
ядро |<----8--employer           |     referee
     |         |                 |        |
     |         +-7-< front_end <-|------6-+

Здесь referee информирует employer о том, что все действия сделаны (6 и 7); employer информирует ядро о том, что исходный пользовательский процесс, который вызвал окончательное удаление, может продолжаться.

Никаких специальных действий не предпринимается, когда
referee не может быть информирован об окончательном удалении: referee будет считать, что компьютер по-прежнему имеет структуру и давать ошибочные ответы о данной структуре другим машинам (См. программы в каталоге tools, позволяющие частично решить такую задачу).



2004-06-22



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру