Опыт использования менеджера ресурса QNX

Операционная система QNX построена на тщательно проработанной в теории, но крайне редко реализуемой в OS концепции – коммутации сообщений. Ядро (микроядро) системы при этом подходе выступает в качестве компактного коммутатора сообщений между взаимодействующими программными компонентами.

В такой OS все привычные программисту запросы API (например, стандарта POSIX) пакуются в тело сообщений, а микроядро системы обеспечивает их синхронизацию и доставку от отправителя к получателю.

В технической документации OS QNX появляется такой термин как Resource Manager – Менеджер Ресурса. Менеджер Ресурса (МР) является такой универсальной программной структурой, которая потенциально является приёмником и обработчиком всех типов сообщений, циркулирующих в системе. Для написания РМ предлагается специальная техника, описание которой в HELP подсистеме QNX занимает свыше 80 страниц (и это при крайне лаконичной, даже “евангелистской” манере изложения в HELP QNX: “имеющий уши – да услышит”).

Почему этой технике уделено столь пристальное внимание? РМ обрабатывает как сообщения, несущие общеизвестные POSIX запросы (open, read, write, close …); так и сообщения, содержащие более специализированные не-POSIX запросы (devctl …); наконец, сообщения произвольных не специфицированных типов, несущих в себе любой пользовательский каприз. Идея, гениальная в своей простоте: для любых видов взаимодействий в OS иметь единый механизм передачи, приёма и обработки сообщений. Удивляет не то, что мы наблюдаем в QNX – удивляет то, что мы не наблюдаем нечто подобное в других семействах OS.

Итак, PM реализует универсальный серверный механизм внутри QNX (а все UNIX системы построены, во многом, на клиент — серверном взаимодействии). Что может быть написано в унифицированной технике РМ? Практически всё: драйверы устройств и псевдоустройств, файловые и сетевые системы, взаимодействие между пользовательскими специализированными подсистемами или оборудованием… — и всё в единой технике! После этого становится понятным, почему QSSL уделяет технике программирования РМ столь исключительное внимание.

Ещё одной отличительной особенностью этого механизма есть то, что все типы взаимодействий, реализованных в технике РМ в рамках одиночного локального узла, автоматически раздвигаются сетевым протоколом Fleet на всё пространство узлов сети QNET (“родная” сетевая система QNX, прозрачно и параллельно сосуществующая в ней с TCP/IP). Но этот факт сам по себе столь обстоятелен, что об этом – в другой раз.