ПОТОКИ
В компьютерных сетях STREAMS — это собственная платформа Unix System V для реализации драйверов символьных устройств , сетевых протоколов и межпроцессного взаимодействия . В этой среде поток — это цепочка сопрограмм , которые передают сообщения между программой и драйвером устройства (или между парой программ). ПОТОКИ возникли в версии 8 Research Unix как Streams (без заглавной буквы).
Конструкция STREAMS представляет собой модульную архитектуру для реализации полнодуплексного ввода-вывода между ядром и драйверами устройств. Чаще всего он использовался при разработке терминального ввода-вывода ( линейная дисциплина ) и сетевых подсистем. В System V Release 4 весь интерфейс терминала был переопределен с использованием STREAMS. [ 1 ] Важной концепцией STREAMS является возможность объединять драйверы — модули специального кода, которые могут изменять функциональность сетевого интерфейса или другого устройства — вместе, образуя стек. Некоторые из этих драйверов могут быть объединены в цепочку по порядку.
История
[ редактировать ]STREAMS был основан на подсистеме ввода-вывода Streams, представленной в восьмом издании Research Unix (V8) Деннисом Ритчи , где она использовалась для подсистемы терминального ввода-вывода и набора протоколов Интернета . Эта версия, еще не названная заглавными буквами STREAMS, соответствует новым функциям существующих системных вызовов ввода-вывода устройств ( open , close , read , write и ioctl ), [ 2 ] и его применение ограничивалось терминальным вводом-выводом и протоколами, обеспечивающими канальную семантику ввода-вывода.
Эта система ввода-вывода была перенесена в System V Release 3 Робертом Исраэлем, Гилом МакГратом, Дэйвом Оландером, Хер-Доу Че и Мори Бахом как часть более широкой структуры, предназначенной для поддержки различных транспортных протоколов, включая TCP, класс ISO. 4, SNA LU 6.2 и протокол AT&T NPACK (используется в RFS ). [ 3 ] Впервые он был выпущен вместе с пакетом Network Support Utilities (NSU) UNIX System V Release 3. [ 4 ] В этот порт добавлены putmsg , getmsg и poll системные вызовы , которые по своему назначению почти эквивалентны вызовам send , Recv и Select из сокетов Беркли. вызовы putmsg getmsg и Recv изначально назывались send и Системные . [ 5 ] но были переименованы, чтобы избежать конфликта пространств имен. [ 6 ] В System V Release 4 STREAMS был расширен и использовался для инфраструктуры и каналов терминального ввода-вывода, предоставляя новые полезные функции, такие как двунаправленные каналы и файловых дескрипторов . передача [ 3 ] порт для UNICOS Также был выпущен . Эрик С. Рэймонд цитирует слова Ричи о сложности System V STREAMS по сравнению с его V8 Streams: «Потоки означают нечто иное, когда их выкрикивают». [ 7 ]
Одновременно с портом System V Release 3 компания AT&T разработала независимые от протокола правила передачи сообщений STREAMS для канала . [ 8 ] сеть , [ 9 ] и транспортные уровни [ 10 ] модели OSI (уровни 2-4). Из-за типично тесной реализации сетевых и транспортных протоколов в данном стеке протоколов , а также типичной практики реализации уровней 5-7 вне ядра , только канал связи [ 8 ] и транспортный уровень [ 11 ] Сервисные интерфейсы STREAMS позже были стандартизированы X/Open . В сочетании с моделью передачи транспортных сообщений был определен интерфейс транспортного уровня (позже принятый как X/Open Transport Interface ), обеспечивающий независимый от транспортного протокола API для разработки приложений. Также библиотека, поддерживающая сеансовый , презентационный и прикладной уровни. [ 12 ] был определен и позже стандартизирован The Open Group . [ 13 ]
ПОТОКИ требовались для соответствия Единой спецификации UNIX версий 1 (UNIX 95) и 2 (UNIX 98), но в результате отказа разработчиков BSD и Linux предоставлять ПОТОКИ, [ нужна ссылка ] был помечен Austin Group как необязательный для соответствия POSIX в версии 3 (UNIX 03). POSIX.1-2008 с TC1 (IEEE Std 1003.1, издание 2013 г.) обозначил STREAMS как «отмеченный устаревшим». [ 14 ] [ 15 ] это означает, что указанная функциональность может быть удалена в будущей версии спецификации. Однако конкретное определение «устаревшего», используемое [ 16 ] также говорится, что приложения, строго соответствующие POSIX, «не должны использовать устаревшие функции».
Технический обзор
[ редактировать ]
В версии 7 Unix команда подключалась к терминалу (клавиатура и экран или клавиатура и принтер ) через механизм, называемый дисциплиной строки, который буферизировал одну строку ввода, т. е. ждал, пока пользователь нажмет клавишу возврата. перед отправкой входных данных в программу для обработки; это позволило просто исправить ошибки. Потоки заменили это набором модулей обработки, организованных в линейную цепочку, которая обеспечивала двустороннюю связь между соседними модулями. Программы могли «вставить» новый модуль на один конец цепочки, чтобы изменить поведение терминала или другого символьного устройства. Ричи приводит пример цепочки терминального модуля, связанного с сетевым модулем Datakit, для обеспечения удаленного входа в систему по сети. [ 5 ] Помимо символов (байтов), передаваемых из программы на устройство и наоборот , потоки могут переносить управляющие сообщения, такие как «зависание» (разрыв соединения) и ioctl сообщения .
Потоки также можно использовать для межпроцессного взаимодействия , соединяя два процесса с псевдотерминалами . Эта функциональность была реализована в оконной системе mpx для графического терминала Blit , которая могла отображать несколько эмулятора терминала окон . Каждое окно представляло собой процесс, который взаимодействовал с оконной системой через псевдотерминал, на котором был установлен драйвер дисциплины линии, отправляя ему напечатанные символы и получая текст (и графику) для отображения. Сигналы управления обозначали желание пользователя переключиться между окнами или закрыть их. [ 17 ] [ 18 ] : 348–350
Фактические модули Streams находятся в пространстве ядра Unix и устанавливаются (загружаются) и удаляются (извлекаются) системным вызовом ioctl. Например, чтобы установить вышеупомянутую дисциплину строк в файловом дескрипторе fd
ссылаясь на терминальное устройство, можно было бы написать (на C ): [ 18 ] : 347
ioctl(fd, PUSH, TTYLD);
Чтобы выполнить ввод/вывод в потоке, можно либо использовать read
и write
системные вызовы, как и обычные файловые дескрипторы, или набор функций, специфичных для ПОТОКОВ, для отправки управляющих сообщений. [ 19 ]
Ритчи признался, что сожалел о необходимости реализовать Streams в ядре, а не как процессы, но чувствовал себя обязанным сделать это из соображений эффективности. [ 5 ] В более поздней реализации Plan 9 модули были реализованы как процессы уровня пользователя. [ 20 ]
Реализации
[ редактировать ]STREAMS в основном использовался в мире System V Unix; однако существуют и другие реализации:
- Plan 9 изначально использовал многопроцессорный вариант Research Unix Streams. При переходе на третью редакцию Plan 9 потоки были еще больше упрощены до простых очередей ввода-вывода. [ 20 ]
- Реализация, написанная в Mentat, использовалась в Novell NetWare для ее стека TCP/IP и была лицензирована Apple для использования в классической Mac OS, начиная с версии 7.5.2, как часть сетевой системы Open Transport . (В macOS классическая среда использовала архитектуру STREAMS, но собственная сетевая архитектура использует API сокетов Беркли и является производной от сетевого кода BSD .)
- FreeBSD имеет базовую поддержку системных вызовов, связанных с STREAMS, как того требует уровень двоичной совместимости SVR4. [ 21 ]
- Ядро Windows NT предлагало полный порт STREAMS в виде двоичного файлаstreams.sys. В NT DDK даже была глава, посвященная ПОТОКАМ, появившаяся еще в NT4, хотя в NT4 DDK она была объявлена устаревшей. Исходный стек TCP/IP для Windows NT 3.1 был реализован поверх STREAMS компанией Spider Systems и использовал двоичный файлstreams.sys. Начиная с NT 3.5, TCP/IP был полностью переработан. [ 22 ] [ 23 ] приняв вариант из Microsoft LAN Manager для OS/2 1.x. [ нужна ссылка ]
- Сетевой уровень AlphaTCP в AMOS, операционной системе для компьютеров Alpha Micro , также был основан на SpiderStreams . [ 24 ]
Linux не поддерживает функции STREAMS без сторонних надстроек. Кальдера «настоял» на включении STREAMS в Linux ок. 1998, для поддержки своего Netware для Linux , но оно было категорически отвергнуто разработчиками ядра Linux по техническим причинам (в основном производительность). [ 25 ] Уровни совместимости Linux с другими операционными системами преобразуют операции STREAMS в сокеты как можно раньше. [ 26 ] В Caldera использовалась реализация «LiS» компании GCOM; Позже она участвовала в судебных тяжбах преемника Caldera, SCO Group , против Linux, причем SCO утверждала, что Linux с STREAMS нарушил, по ее мнению, ее авторские права на System V. [ 25 ]
Примечания
[ редактировать ]- ^ ( Гудхарт 1994 , стр. 51–53, 403–527)
- ^ ( Гудхарт 1994 , стр. 52–53)
- ^ Перейти обратно: а б ( Гудхарт 1994 , стр. 17)
- ^ ( Гудхарт 1994 , стр. 51)
- ^ Перейти обратно: а б с ( Ричи 1984 )
- ^ ( Гудхарт 1994 )
- ^ Эрик С. Рэймонд (2003). «Глава 7. Мультипрограммирование» . Искусство программирования для Unix . Аддисон-Уэсли.
- ^ Перейти обратно: а б ( ДЛПИ и 2.0.0 )
- ^ ( НПИ и 2.0.0 )
- ^ ( ТПИ и 1,5 )
- ^ ( ТПИ и 2.0.0 )
- ^ ( КРУГ 1990 )
- ^ ( XAP 1993 )
- ^ «Базовые характеристики, выпуск 7, издание 2013 г., раздел B.2.6 ПОТОКИ» . Открытая группа . Проверено 9 марта 2015 г.
- ^ «Группа по пересмотру общих стандартов Остина» . Открытая группа . Проверено 9 марта 2015 г.
- ^ «Базовые спецификации открытой группы, выпуск 7, Коды» . Открытая группа . Проверено 9 марта 2015 г.
- ^ Пайк, Роб (1984). «Блит: мультиплексный графический терминал» . Технический журнал AT&T Bell Laboratories . 63 (8): 1607–1631. дои : 10.1002/j.1538-7305.1984.tb00056.x . S2CID 34062559 .
- ^ Перейти обратно: а б Бах, Морис Дж. (1986). Проект операционной системы UNIX . Прентис Холл. Бибкод : 1986duos.book.....B . ISBN 9780132017992 .
- ^ См.: Единая спецификация UNIX , Версия 3 от Открытой группы и – Справочник по системным интерфейсам, Единая спецификация UNIX , версия 3 от Open Group . – Справочник по системным интерфейсам,
- ^ Перейти обратно: а б Пресотто, Дэвид Л. (1990). Многопроцессорные потоки для Plan 9 . Учеб. Летняя конференция УКУУГ. CiteSeerX 10.1.1.42.1172 .
- ^ Ньютон, Марк. «Эмуляция FreeBSD SysVR4» . Страницы FreeBSD Марка Ньютона .
- ^ ( Барр 2001 )
- ^ ( Валентин 2001 )
- ^ «Машина Alpha Micro Phun: введение в AMOS» . Проверено 5 марта 2022 г.
- ^ Перейти обратно: а б «STREAMS, LiS и Netware Caldera для Linux — обновление» . Гроклав . 3 июля 2006 г. Проверено 14 июля 2022 г.
- ↑ Алан Кокс, Streams и Linux , Список рассылки ядра Linux, 28 июня 1998 г.
Ссылки
[ редактировать ]- Доброе сердце, Берни; Кокс, Джеймс (1994), Объяснение волшебного сада: внутреннее устройство UNIX System V Release 4, дизайн открытых систем , Австралия: Прентис Холл, ISBN 0-13-098138-9
- Открытая группа (1999), «Спецификация интерфейса транспортного поставщика (TPI)», Спецификация CAE открытой группы (редакция 2.0.0, проект 2-го изд.), Беркшир, Великобритания: Публикация открытой группы
- Open Group (сентябрь 1993 г.), «ACSE/Presentation Services API (XAP)», Спецификация X/Open CAE , том. ХАП, нет. c303, Беркшир, Великобритания: X/Open Company Limited, ISBN 1-872630-91-Х
- Паджари, Джордж (1992) [1991], Написание драйверов устройств UNIX (2-е издание, 1-е изд.), Ридинг, Массачусетс: Аддисон-Уэсли, ISBN 0-201-52374-4
- Ричи, Деннис М. (октябрь 1984 г.). «Потоковая система ввода-вывода» . Технический журнал AT&T Bell Laboratories . 63 (8 Часть 2). АТ&Т: 1897–1910. дои : 10.1002/j.1538-7305.1984.tb00071.x . S2CID 33497669 . Проверено 13 января 2018 г.
- Стивенс, В. Ричард (1993), Расширенное программирование в среде UNIX (15-е издание, 1-е изд.), Ридинг, Массачусетс: Аддисон-Уэсли, ISBN 0-201-56317-7
- Томас, Ребекка; Роджерс, Лоуренс Р.; Йейтс, Джин Л. (1986), Руководство для опытных программистов по UNIX System V , Беркли, Калифорния: Осборн МакГроу-Хилл, ISBN 0-07-881211-9
- UNIX International (20 августа 1991 г.), Спецификация интерфейса поставщика каналов передачи данных (DLPI) (PDF) , Международная публикация UNIX (редакция 2.0.0, черновик 2-го изд.), Парсиппани, Нью-Джерси: UNIX International Press , получено 27 июля 2009 г.
- UNIX International (17 августа 1992 г.), Спецификация интерфейса сетевого провайдера (NPI) (PDF) , Международная публикация UNIX (версия 2.0.0, черновик 2-го изд.), Парсиппани, Нью-Джерси: UNIX International Press , получено 27 июля 2009 г.
- UNIX International (10 декабря 1992 г.), Спецификация интерфейса поставщика транспорта (PDF) , Международная публикация UNIX (редакция 1.5, черновик 2-го изд.), Парсиппани, Нью-Джерси: UNIX International Press , получено 27 июля 2009 г.
- UNIX International (25 октября 1990 г.), Спецификация интерфейса ACSE/презентационной библиотеки (APLI) , Международная публикация UNIX (проектная редакция), Парижппани, Нью-Джерси: UNIX International Press
- Группа Уэйта (1987), Митчел Уэйт (редактор), UNIX Papers (2-е издание, 1-е изд.), Индианаполис, Индиана: Howard W. Sams & Company, ISBN 0-672-22578-6
- Барр, Адам (19 июня 2001 г.), «Microsoft, TCP/IP, открытый исходный код и лицензирование» , Kuro5hin , получено 22 февраля 2013 г.
- Валентин, Марк (19 июня 2001 г.). «Re: Запрос: Как определить, использует ли Microsoft код BSD TCP/IP?» . freebsd-hackers (список рассылки) . Проверено 22 февраля 2013 г.
Внешние ссылки
[ редактировать ]- Оригинальное руководство по потоку (4) из Unix 8-го издания.
- Структура STREAMS в Digital UNIX - из Руководства программиста цифровой сети UNIX.
- Руководство по программированию Oracle (ранее Sun) STREAMS