• Большинство осуществляемых вами операций обмена сообщениями «с внешним миром» будут реализовываться с помощью вызовов функций высокого уровня (таких как функция
• Дескрипторы узлов не кэшируются — предполагается, что получив дескриптор, вы используете немедленно и забудете про него.
• Существует ряд библиотечных функций, предназначенных для преобразования имени пути (например, /net/magenta
Чтобы работать с дескрипторами узлов, вам понадобится подключить файл
Для преобразования строки в дескриптор узла используется функция
Так что если вы получили дескриптор «7» для узла /net/magenta
Поскольку дескрипторы узлов в сети не уникальны, возникает вопрос: «А как передавать эти штуки по сети?» Очевидно, взгляды узла magenta
wintermute
на дескриптор «7» будут радикально отличаться. Существуют два способа решения этой проблемы:• Не передавать по сети дескрипторы узлов и пользоваться символьными именами (например, /net/wintermute
• Применять функцию
Первый метод хорош как универсальное решение. Второй метод достаточно удобен на практике.
int netmgr_remote_nd(int remote_nd, int local_nd);
Эта функция принимает два параметра, где
Например, пусть wintermute
magenta
. Мы хотели бы выяснить, какой дескриптор узла использует узел magenta
для связи с нашим узлом:int remote_nd;
int magenta_nd;
magenta_nd = netmgr_strtond("/net/magenta", NULL);
printf("ND узла magenta — %d\n", magenta_nd);
remote_nd = netmgr_remote_nd(magenta_nd, ND_LOCAL_NODE);
printf("С точки зрения узла magenta, наш ND — %d\n",
remote_nd);
Это программа могла бы вывести что-то вроде следующего:
ND узла magenta - 7
С точки зрения узла magenta, наш ND — 4
Это говорит о том, что на узле magenta
Теперь вернемся к тому, о чем мы говорили в разделе «Кто послал сообщение?»). Параметр struct _msg_info
struct _msg_info {
int nd;
int srcnd;
...
};
Мы определили в описании для этих двух полей, что:
•
•
Так, для приведенного выше примера, где узел wintermute
magenta
— удаленный, когда узел magenta
посылает нам (узлу wintermute
) сообщение, эти поля заполняются следующим образом:•
•
Наследование приоритетов
Одним из интересных моментов в операционных системах реального времени является феномен инверсии приоритетов.
Инверсия приоритетов наблюдается, например, в случае, когда поток с низким приоритетом потребляет все процессорное время, в то время как в состоянии готовности находится поток с более высоким приоритетом.
Вы, наверное, сейчас думаете: «Минуточку! Вы утверждали ранее, что поток с более высоким приоритетом будет всегда вытеснять поток с более низким приоритетом! Как же такое может быть?»
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT