Книга: Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
Распределенный обмен сообщениями
Распределенный обмен сообщениями
Предположим, что мы пожелали изменить приведенный выше пример, чтобы можно было «поговорить» с другим узлом сети. Вы, наверное, думаете, что для этого придется вызывать специальные функции, чтобы «попасть в сеть». Вот сетевой вариант нашей программы:
#include <fcntl.h>
#include <unistd.h>
int main(void) {
int fd;
fd = open("/net/wintermute/home/rk/filename", O_WRONLY);
write(fd, "Это обмен сообщениямиn", 24);
close(fd);
return (EXIT_SUCCESS);
}
Вы будете правы, если скажете, что в обеих версиях программы почти одинаковы. Так и есть.
В традиционной ОС функция open() библиотеки Си вызывает ядро, которое анализирует имя файла и говорит: «Опа! Это не на нашем узле…» Ядро затем вызывает сетевую файловую систему NFS, которая уже определяет, где в действительности находится файл /net/wintermute/home/rk/filename
. Затем, NFS вызывает сетевой драйвер и посылает сообщение ядру на узле wintermute
, которое повторяет весь процесс, описанный нами в нашем первоначальном примере. Заметьте, что в этом случае оказываются вовлеченными две файловые системы, одна из которых — сетевая файловая система (NFS) клиента, а вторая — удаленная. К сожалению, в зависимости от реализации как удаленной файловой системы, так и NFS, некоторые операции (например, блокировки файлов) могут работать некорректно из-за неполной совместимости.
В QNX/Neutrino функция open() Си-библиотеки создает точно такое же сообщение, какое она создала бы для локальной файловой системы, и посылает его файловой системе узла wintermute
. Локальная и удаленная файловые системы при этом абсолютно одинаковы.
Это и есть еще одна фундаментальная особенность QNX/Neutrino: распределенные операции выполняются в ней абсолютно «непринужденно», поскольку потребности клиентов изначально абстрагированы от служебных функций, обеспечиваемых серверами, благодаря механизму обмена сообщениями.
В традиционном ядре действует «двойной стандарт», когда локальные сервисы реализуются одним способом, а удаленные (сетевые) — совершенно другим.
- ЧАСТЬ 2 ОБМЕН СООБЩЕНИЯМИ
- Мгновенный обмен сообщениями
- Глава 2 Обмен сообщениями
- Глава 20. Распределенный Ruby
- 13. Зарабатываем на своих файлах: файлообменники, загружаеми получаем процент за скачивание
- Обмен сообщениями в сети
- 5.12. Обмен файлами с мобильным телефоном по Bluetooth
- Обмен данными между гостевой и хостовой ОС
- Обмен сообщениями
- Буфер обмена и команды для работы с ним
- Использование буфера обмена
- Атаки типа «отказ в обслуживании» (DoS) и «распределенный отказ в обслуживании» (DDoS)