Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек СРВ от Анн.doc
Скачиваний:
11
Добавлен:
09.11.2019
Размер:
2.26 Mб
Скачать

Лекция №10. Сопоставление и передача путей между процессами.

План лекции.

1. Пространство ввода - вывода

2. Префиксы управления вводом – выводом

3. Сетевой корень

4. Сетевой корень по умолчанию.

5. Передача путей между процессами

1. Пространство ввода - вывода

Ресурсы ввода - вывода QNX не встроены в ядро. Вместо этого, службы ввода - вывода снабжаются процессами, которые могут быть начаты динамически, во время функционирования системы. Так как файловая система QNX произвольна, путь к выделенному пространству не встроен в файловую систему, как это сделано в большинстве монолитных систем.

Вместе с QNX, выделяемое пространство разделено на области полномочий. Любой процесс желающий быть обеспеченным файловыми службами ввода - вывода регистрирует префикс в администраторе обработки, определяющим часть дискового пространства, которым может управлять этот процесс (то есть область полномочия). Эти префиксы создают префиксное дерево, которое поддерживается в памяти на каждом компьютере, функционирующем QNX.

2. Префиксы управления вводом – выводом

Когда процесс открывает файл, путь сопоставляется с префиксным деревом, чтобы направить open() соответствующему администратору ресурса ввода - вывода. Например, администратор устройств (Dev ) обычно регистрирует префикс /dev. Если обработка вызывает open() с /dev/xxx, произойдет префиксное соответствие с /dev, и open() будет направлен к Dev ( как к владельцу).

Префиксное дерево может содержать частично перекрывание областей полномочий . В этом случае, предпочтение отдается более длинному. Например, предположите, что мы имеем три зарегистрированных префикса :

/ находящийся на диске файловая система (Fsys)

/dev устройство системы (Dev)

/dev/hd0 необработанный дисковый объем (Fsys)

Файловый администратор зарегистрирует два префикса, один для установленной QNX файловой системы (то есть /) и один для необработанного дискового объема, который представляет собой жесткий диск (то есть /dev/hd0). Администратор устройства зарегистрирует один префикс. Это иллюстрирует правило «длинного имени пути».

ПутьПараСопоставление

/dev/con1/devDev

/dev/hd0/dev/hd0Fsys

/usr/dtdodge/test/Fsys

Префиксное дерево управляется как список префиксов, отделенных двоеточиями следующим образом:

prefix=pid, unit: prefix=pid, unit: prefix=pid, unit

где pid – обрабатывающийся ID администратора ресурса ввода - вывода, и unit - одиночный символ, используется администратором, чтобы выбрать один из нескольких имеющихся префиксов. В слудующем примере, если Fsys обрабатывает 3, и Dev обрабатывает 5, то системное префиксное дерево могло бы выглядеть следующим образом:

/dev/hd0=3, a: /dev=5, a : / = 3, e

Если вы хотитеиспользуйте

Показать дерево префиксовPrefix утилиту

Получить префиксное дерево в пределах программы Cqnx_prefix_query() функцию

3. Сетевой корень

QNX поддерживает суперконцепцию или концепцию сетевого корня, которая позволяет сопоставлять имя пути с префиксным деревом определенного узла, которое определено именем пути, начинающееся двумя наклонными чертами вправо, сопровождаемое номером узла. Это также позволяет легко обращаться к файлам и устройствам, которые не находятся на вашем узле. Например, в типичной QNX сети следующие пути отобразили бы так:

/dev/ser1 локальный последовательный порт

//10/dev/ser1 последовательный порт на узле 10

//0/dev/serl локальный последовательный порт

//20/usr/dtdodge/test файл на узле 20

Обратите внимание, что //0 всегда относится к локальному узлу.

4. Сетевой корень по умолчанию.

Когда программа выполняется дистанционно, вы обычно хотите, чтобы любые пути были получены в пределах контекста имени вашего собственного узла. Например, эта команда:

// 5 ls /,

которая вызывает 1s на узле 5, должен возвратить то же самое как:

ls /,

который вызывает 1s , находящийся на вашем узле.

В обоих случаях, / должен быть определен через префиксное дерево вашего узла, но не через дерево узла 5. Иначе, вообразите хаос, который был бы результатом того, что если корень узла 5 (/) локальный жесткий диск, и ваш корень узла жесткий диск, локальный для вашей машины — выполняющий процедуру дистанционно получит файлы от полностью различных файловых систем.

Чтобы определять пути должным образом, каждый процесс связывает с ними корень сети по умолчанию, который определяет префиксное дерево узла для использования, чтобы определить любые пути, начинающиеся с отдельной наклонной черты вправо. Когда путь, начинающееся с / это означает, что корень сети по умолчанию – привязан к нему. Например, если процесс имел корень сети по умолчанию // 9, то:

/usr/home/luc

был бы определен как:

// 9/usr/horoe/luc,

который может интерпретироваться как " определить через префиксное дерево узла 9

/usr/home/luc.

Корень сети значения по умолчанию наследуются новыми процессами, когда они создаются, и инициализируются к вашему локальному узлу при запуске. Например, скажем, вы используете узел 9, находясь в оболочке с заданным по умолчанию сетевым корневым набором к узлу 9 (очень типичный случай). Если вы должны были выполнить команду:

1s /

команда наследовала бы значение корня сети по умолчанию // 9, и Вы вернете эквивалент:

1s // 9/

Аналогично, если Вы должны были ввести команду:

// 5 1s /

Вы запустили бы команду 1s на узле 5, но еще наследуется корень сети значения по умолчанию // 9, так что вы снова должны использовать эквивалент - //9/. В обоих случаях путь определен решено согласно тому же самому пробелу имени пути.

Если Вы хотитеиспользуйте

Получить ваш потокqnx_prefix_getroot() функция C

Установить ваш сетевой корень по умолчаниюqnx_prefix_setroot() функция C

Выполнить программу с новым сетевым корнем по умолчанию оn утилита