ПОТОКИ

редактировать

В компьютерных сетях, ПОТОКИ - это собственная среда в Unix System V для реализации символьных устройств драйверов, сетевых протоколов и межпроцессного взаимодействия. В этой структуре поток представляет собой цепочку сопрограмм, которые передают сообщения между программой и драйвером устройства (или между парой программ). ПОТОКИ возникли в Версии 8 Research Unix как потоки (без заглавных букв).

STREAMS представляет собой модульную архитектуру для реализации полнодуплексного ввода-вывода между ядром и драйверами устройств. Чаще всего он использовался при разработке терминального ввода-вывода (линейная дисциплина ) и сетевых подсистем. В System V Release 4 весь интерфейс терминала был повторно реализован с использованием STREAMS. Важной концепцией STREAMS является возможность объединять драйверы - модули пользовательского кода, которые могут изменять функциональность сетевого интерфейса или другого устройства - вместе для формирования стека. Некоторые из этих драйверов можно связать вместе по порядку.

Содержание
  • 1 История
  • 2 Технический обзор
  • 3 Реализации
  • 4 Примечания
  • 5 Ссылки
  • 6 Внешние ссылки
История

ПОТОКИ были основаны на подсистема Streams I / O, представленная в Eighth Edition Research Unix (V8) Деннисом Ритчи, где она использовалась для подсистемы терминала I / O и пакет Интернет-протокола. Эта версия, еще не названная STREAMS в заглавных буквах, соответствовала новой функциональности в рамках существующих системных вызовов ввода-вывода устройств (открытие, закрытие, чтение, запись и ioctl), и ее применение было ограничено вводом-выводом терминала и протоколами, обеспечивающими канал. -подобная семантика ввода-вывода.

Эта система ввода-вывода была перенесена на System V Release 3 Робертом Израэлем, Гилом МакГратом, Дэйвом Оландером, Хер-Доу Че и Мори Бахом как часть более широкой структуры, предназначенной для поддержки различных транспортных протоколов., включая TCP, транспорт ISO класса 4, SNA LU 6.2 и протокол ATT NPACK (используется в RFS ). Впервые он был выпущен с пакетом Network Support Utilities (NSU) для UNIX System V Release 3. Этот порт добавил системные вызовы putmsg, getmsg и poll , которые по назначению почти эквивалентны send, recv, и выберите вызовы из сокетов Беркли. Системные вызовы putmsg и getmsg изначально назывались send и recv, но были переименованы, чтобы избежать конфликта пространств имен. В System V Release 4 STREAMS был расширен и использовался для инфраструктуры ввода-вывода терминала и каналов, обеспечивая полезные новые функции, такие как двунаправленные каналы и передача файлового дескриптора. Также был создан порт для Unicos. Эрик С. Реймонд цитирует слова Ричи о сложности ПОТОКОВ System V по сравнению с его потоками V8, что «потоки означают нечто иное, когда кричат».

Одновременно с System V Release 3 порт, ATT разработала протокол-независимые инструкции по передаче сообщений STREAMS для link, network и транспортных уровней OSI. модель (слои 2-4). Из-за типичной тесной связи реализации сетевых и транспортных протоколов в данном стеке протоколов и типичной практики реализации уровней 5-7 вне ядра только link и транспортный уровень Сервисные интерфейсы STREAMS были позже стандартизированы в X / Open. В сочетании с моделью передачи транспортных сообщений был определен интерфейс транспортного уровня (позже принятый как X / Открытый транспортный интерфейс ) для обеспечения независимого от транспортного протокола API для разработки приложений. Кроме того, была определена библиотека, поддерживающая сеанс, презентация и прикладные уровни, а затем стандартизованная . Open Group.

STREAMS была необходима для соответствия с единой спецификацией UNIX версий 1 (UNIX 95) и 2 (UNIX 98), но в результате отказа разработчиков BSD и Linux provide STREAMS, был помечен Austin Group как необязательный для соответствия POSIX в версии 3 (UNIX 03). POSIX.1-2008 с TC1 (IEEE Std 1003.1, издание 2013 г.) обозначил STREAMS как «помеченные как устаревшие», что означает, что указанные функциональные возможности могут быть удалены в будущей версии спецификации. Однако используемое конкретное определение «устаревшего» также гласит, что строго соответствующие приложения POSIX «не должны использовать устаревшие функции».

Технический обзор
Пример использования потоков для реализации удаленного выполнения команд по сети, после (Ritchie 1984)

В версии 7 Unix команда была подключена к терминал (клавиатура и экран или клавиатура и принтер ) через механизм, называемый дисциплиной линии, который будет буферизовать одну строку ввода, то есть ждать, пока пользователь нажмет клавишу возврата перед отправкой входных данных в программу для обработки; это позволило простое исправление ошибок. Потоки заменили это набором модулей обработки, организованных в линейную цепочку, которая обеспечивала двунаправленную связь между соседними модулями. Программы могли «протолкнуть» новый модуль на один конец цепочки для изменения поведения терминала или другого символьного устройства. Ричи приводит пример цепочки терминального модуля, соединенного с сетевым модулем Datakit для удаленного входа в систему по сети. Помимо символов (байтов) переходя от программы к устройству и наоборот, Streams может ry управляющие сообщения, такие как «зависание» (разрыв соединения) и сообщения ioctl.

Потоки также можно использовать для межпроцессного взаимодействия, подключив два процесса к псевдотерминалам. Эта функциональность была реализована в оконной системе mpx для графического терминала Blit, который мог отображать несколько окон эмулятора терминала. Каждое окно представляло собой процесс, который взаимодействовал с оконной системой через псевдотерминал, на котором был установлен драйвер линейной дисциплины, отправляя ему набранные символы и получая текст (и графику) для отображения. Управляющие сигналы обозначают желание пользователя переключаться между окнами или закрывать их.

Фактические модули Streams находятся в пространстве ядра в Unix и устанавливаются (вставляются) и удаляются (выталкиваются) Системный вызов ioctl. Например, чтобы установить вышеупомянутую линейную дисциплину на файловый дескриптор fd, относящийся к оконечному устройству, нужно написать (в C ):

ioctl (fd, PUSH, TTYLD);

Для выполнения ввода / вывода в потоке используются системные вызовы readи write, как с обычными файловыми дескрипторами, или набор специфичных для STREAMS функций для отправки управляющих сообщений.

Ричи признался, что сожалеет о том, что ему пришлось реализовывать потоки в ядре, а не как процессы, но чувствовал себя вынужденным сделать это по соображениям эффективности. В более поздней реализации Плана 9 модули были реализованы как процессы уровня пользователя.

Реализации

STREAMS в основном использовались в мире System V Unix; однако существуют и другие реализации:

  • Plan 9 изначально использовал многопроцессорный вариант Research Unix Streams. При переходе к третьей редакции Plan 9 потоки были дополнительно упрощены до простых очередей ввода-вывода.
  • Реализация, написанная в Mentat, использовалась в Novell NetWare для своего стека TCP / IP и лицензировано Apple для использования в классической Mac OS, начиная с версии 7.5.2, как часть сетевой системы Open Transport. (В macOS в классической среде использовалась архитектура STREAMS, но собственная сетевая архитектура использует API сокетов Berkeley и является производным от BSD сетевой код.)
  • FreeBSD имеет базовую поддержку системных вызовов, связанных с STREAMS, в соответствии с требованиями уровня двоичной совместимости SVR4.
  • Ядро Windows NT предлагает полную порт STREAMS как двоичный файл streams.sys. В NT DDK даже была глава о STREAMS, вплоть до NT4, хотя в NT4 DDK она была объявлена ​​устаревшей. Исходный стек TCP / IP для Windows NT 3.1 был реализован поверх STREAMS компанией Spider Systems и использовал двоичный файл streams.sys. Начиная с NT 3.5, TCP / IP был полностью переделан за счет использования протокола Microsoft LAN Manager для OS / 2 1.x.

Linux не включает Функциональность ПОТОКОВ без сторонних надстроек. Caldera «подтолкнула» к включению ПОТОКОВ в Linux ок. 1998 г., чтобы поддержать его, но разработчики ядра Linux категорически отвергли его по техническим причинам (в основном из-за производительности). Уровни совместимости в Linux для других операционных систем преобразуют операции STREAMS в сокеты как можно раньше. В Caldera использовалась реализация LiS, созданная компанией GCOM; позже он фигурировал в юридических баталиях преемника Caldera, SCO Group, против Linux, когда SCO утверждала, что Linux с STREAMS нарушает то, что, по ее мнению, является ее авторскими правами на System V.

Примечания
Ссылки
  • Гудхарт, Берни; Кокс, Джеймс (1994), «Волшебный сад» объяснил: внутреннее устройство UNIX System V Release 4, проект открытых систем, Австралия: Prentice Hall, ISBN 0-13-098138-9
  • Open Group (1999), «Спецификация интерфейса транспортного провайдера (TPI)», Open Group CAE Specification (Revision 2.0.0, Draft 2 ed.), Беркшир, Великобритания: Open Group Publication
  • Open Group (сентябрь 1993), "ACSE / Presentation Services API (XAP)", X / Open CAE Specification, Berkshire, UK: X / Open Company Limited, XAP (c303), ISBN 1 -872630-91-X
  • Паджари, Джордж (1992) [1991], Написание драйверов устройств UNIX (2-е издание, 1-е изд.), Ридинг, Массачусетс: Аддисон-Уэсли, ISBN 0-201-52374-4
  • Ричи, Деннис М. (октябрь 1984 г.). «Потоковая система ввода-вывода». Технический журнал ATT Bell Laboratories, 63, № 8, часть 2. ATT: 1897–1910. Проверено 13 января 2018.
  • Стивенс, У. Ричард (1993), Advanced Programming in the UNIX Environment (15th Printing, 1st ed.), Reading, MA: Addison-Wesley, ISBN 0-201-56317-7
  • Томас, Ребекка; Роджерс, Лоуренс Р.; Йейтс, Жан Л. (1986), Руководство продвинутого программиста по UNIX System V, Беркли, Калифорния: Осборн МакГроу-Хилл, ISBN 0-07-881211-9
  • UNIX International (август 20, 1991), Спецификация интерфейса провайдера канала передачи данных (DLPI) (PDF), UNIX International Publication (Revision 2.0.0, Draft 2 ed.), Parsippany, NJ: UNIX International Press, извлечено 2009-07 -27
  • UNIX International (17 августа 1992 г.), Спецификация интерфейса сетевого провайдера (NPI) (PDF), Международная публикация UNIX (редакция 2.0.0, проект 2-го изд.), Парсиппани, Нью-Джерси: UNIX International Press, получено 27 июля 2009 г.
  • UNIX International (10 декабря 1992 г.), Transport Provider Interface Specification (PDF), UNIX International Publication (Revision 1.5, Draft 2 ed.), Parsippany, NJ: UNIX International Press, получено 27 июля 2009 г.
  • UNIX International (25 октября 1990 г.), ACSE / Presentation Library Interface (APLI) Specification, UNIX International Publication (Draft ed.), Parisppany, NJ: UNIX International Press
  • Waite Group (1987), Mitchel Waite (ed.), UNIX Papers (2-я печать, 1-е изд.), Индианаполис, IN: Howard W. Sams Company, ISBN 0-672-22578-6
  • Барр, Адам (19 июня 2001 г.), «Microsoft, TCP / IP, открытый исходный код и лицензирование», Kuro5hin, получено 22 февраля 2013 г.
  • Валентин, Марк (19 июня 2001 г.). «Re: Query: Как узнать, использует ли Microsoft код BSD TCP / IP?». freebsd-hackers (Список рассылки). Получено 22 февраля 2013 г.
Внешние ссылки
Последняя правка сделана 2021-06-06 05:07:19
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте