Книга: Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
Регистрация префикса
Регистрация префикса
Администратор ресурса должен сообщить администратору процессов, что одно или более имя пути теперь является его доменом ответственности — иными словами, что он готов обрабатывать клиентские запросы, относящиеся к этим именам путей.
Администратор последовательного порта способен обрабатывать (допустим, так) четыре последовательных порта. В этом случае он должен зарегистрировать у администратора процесса четыре различных имени пути: /dev/ser1
, /dev/ser2
, /dev/ser3
и /dev/ser4
. В результате этого в дереве имен путей у администратора процессов появятся еще четыре элемента, по одному на каждый из последовательных портов. Четыре элемента — это неплохо. А что если бы администратор последовательного порта обрабатывал, например, новомодную мультипортовую плату на 256 портов? Регистрация 256 отдельных префиксов (то есть от /dev/ser1
до /dev/ser256
) привела бы к появлению в дереве имен путей администратора процессов 256 различных элементов! Администратор процессов не оптимизирован для поиска по этому дереву — он предполагает, что элементы в нем, конечно, есть, но не сотни же там этих элементов.
Как правило, не следует регистрировать больше чем несколько дюжин отдельных префиксов, потому что поиск по дереву является линейным. Число 256 портов определенно больше. В таких случаях что мультипортовый администратор ресурсов должен сделать, так это зарегистрировать каталогоподобный префикс, например, /dev/multiport
. Это займет только один элемент в дереве имен путей. Клиент открывает последовательный порт, скажем, порт 57
:
fp = fopen("/dev/multiport/57", "w");
Администратор процессов разрешает это в четверку ND/PID/CHID/handle для мультипортового администратора; решать, насколько корректен при этом остаток имени («57») — это уже дело самого администратора ресурса. В этом примере, предположив, что часть имени пути после точки монтирования хранится в переменной path, администратор ресурса мог бы выполнить проверку очень простым способом:
devnum = atoi(path);
if ((devnum <= 0) || (devnum >= 256)) {
// Неправильный номер устройства
} else {
// Правильный номер устройства
}
Этот будет однозначно быстрее, чем поиск, выполняемый администратором процессов, — хотя бы потому что администратор процессов по сути своей намного более универсален, чем наш администратор ресурса.
- 4.2. Регистрация событий
- Регистрация ТСР
- 3.3. Регистрация в системе
- Защищенная регистрация
- 9.4.2. Регистрация времени, потраченного на выполнение задания
- 3.3.5. Регистрация пространств имен
- Глава 13 Удаленная регистрация на сервере
- Ситуация 3. Регистрация новых пользователей
- Регистрация обработчика прерывания
- Регистрация файла DateArc.wsc в качестве СОМ-объекта
- Регистрация управляющей программы службы
- Регистрация событий