Клонирование используется для большинства устройств STREAMS, таких как сетевые протоколы или псевдотерминалы. Следовательно, подсистема STREAMS поддерживает драйвер клонирования, который позволяет автоматизировать задачу клонирования устройств. Устройство клонирования имеет собственный старший номер и реализуется как драйвер STREAMS.
Также на сайте sporttebe.ru можно узнать много интересного на тему http://sporttebe.ru/. Что означает вообще тема спортивный интернет магазин - про это написано на сайте sporttebe.ru. Спасибо сайту за информацию.
Этот драйвер предоставляет каждому устройству STREAMS, поддерживающему клонирование, по одному файлу устройства. Его старший номер совпадает с номером устройства клонирования, а младший номер равен старшему номеру реального устройства.
Представим, к примеру, что драйвер клонирования имеет старший номер 63. Файл устройства /dev/tcp может представлять все потоки протокола TCP. Если драйвер TCP имеет старший номер устройства, равный 31, то файл /dev/tcp будет обладать старшим номером 63 и младшим номером 31. Когда пользователь открывает /dev/tcp, ядро выделяет объект snode и общий объект snode для этого файла и затем вызывает процедуру spec_open().
Процедура загружает операцию d_open драйвера клонирования, передавая указатель на номер устройства (то есть указатель на поле s_dev общего объекта snode).
Операция d_open драйвера клонирования реализована как процедура clnopen(). Она производит выделение младшего номера из поля s_dev (в рассматриваемом примере — 31) и использует его как индекс к таблице cdevsw[] с целью обнаружения драйвера TCP. Затем она загружает операцию d_open для этого драйвера, передавая ей в качестве гіЬраметров флаг CL0NE0PEN и номер устройства. В нашем примере это приведет к вызову функции tcpopen(). Функция tcpopen() распознает флаг CL0NE0PEN, генерирует неиспользованный ранее
младший номер устройства и записывает его в объект snode.
После возврата clnopen() процедура spec_open() различает случай открытия клона. Общий объект snode был ассоциирован с устройством клонирования (/dev/tcp), поэтому процедура spec_open() должна выделить для этого соединения новые объекты vnode и snode. Она инициализирует поле v_stream созданного объекта vnode так, чтобы оно ссылалось на головной интерфейс потока, и копирует в оба объекта новые младший и старший номера устройства (из поля s_dev). Затем вызывается stropen() для открытия нового потока.
Последним этапом работы spec_open() является обнуление поля v_stream оригинального общего объекта snode (ассоциированного с /dev/tcp). Система воспринимает это так, что устройство не открывалось ранее. Позже, если другой процесс пытается открыть файл /dev/tcp, ядро производит ту же серию операций и строит новый поток, а также выделяет номер устройства для него. В результате пользователь получает уникальное соединение TCP и ему не нужно знать о том, какой при этом используется младший номер.
Опубликовал katy
June 24 2015 20:31:02 ·
1 Комментариев ·
2518 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Oleg27 October 25 2023 16:37:43
Рабочее зеркало Melbet 1XbEt зеркало рабочее всегда доступно для пользователей, любой желающий может пользоваться сайтом, чтобы делать ставки на спорт на победу своей любимой команды. Больше не придётся устанавливать сторонние программы и приложения, в том числе VPN.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.