netch: (Default)
[personal profile] netch
Вот натеоретизировалось.

IPC надо строить в двух принципиально различных направлениях: "быстрый" IPC - для передачи уже договоренных данных по установленному каналу, и "богатый" - для первичного установления или связи без постоянного канала.
"Быстрый" - на сейчас это традиционные пайпы-сокеты. К средствам "богатого" IPC следует отнести
- выставки (для оповещения о своих способностях)
- очереди (для разовых передач и хэндшейкинга)
- проброс хэндла (для установления канала "быстрого" IPC)

Последовательно с конца:

Проброс хэндла - метод известен - recvmsg()+cmsg в Unix, что-то было в Windows. При этом принимающий процесс должен явно согласиться на приём хэндла; Windows, кажется, это не умеет. Хороший вариант - один процесс запускает что-то типа CatchHandle() в отдельной нити и ждёт приёма.

Очереди - неплохой вариант выглядит так: у процесса может быть несколько очередей обозначенных целыми числами. Очередь 0 предназначена (но не ограничена) для сообщений от системных средств, 1 - для произвольного первичного обмена, 2 и далее - для целей определяемых владельцем. На каждую очередь назначаются права на запись сообщений (acl'ем или хотя бы на уровне owner/group/other), читать может только данный процесс. Процесс определяет предельный размер очереди как сумму размеров сообщений и предельный размер одного сообщения. API процесса-владельца включает: создание/уничтожение; регулирование размера; чтение/удаление сообщений; атомарные чтение и сброс флага случившегося переполнения (попытка записи сообщения при разрешении правами доступа, не состоявшаяся по ограничению размера). API стороннего процесса состоит из одной функции записи (параметры: PID/handle процесса-получателя, номер очереди, адрес и размер сообщения) и возвращает шмогла/почему_не_шмогла.
Сообщение - массив байт (размером например до 64KB). Рекомендованная структура сообщения - в начале два UUID'а (тип и подтип сообщения), дальше в зависимости от этих параметров.

Выставка - набор параметров имя=значение. API процесса-владельца - добавление, удаление, замена, чтение, перебор. API стороннего процесса - поиск процессов с параметрами: только по конкретному имени; по конкретным имени и значению.

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

Date: 2006-10-09 07:28 pm (UTC)
From: [identity profile] nuclight.livejournal.com
Довести бы до нормального вида имеющиеся средства IPC...

Date: 2014-03-02 09:35 am (UTC)
From: [identity profile] d1f.livejournal.com
Строить не надо.
Напишите ядерный модуль и распространяйте.

Profile

netch: (Default)
netch

December 2023

S M T W T F S
     12
3456789
10111213141516
171819 20212223
24252627282930
31      

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 08:49 pm
Powered by Dreamwidth Studios