Jump to content

ПОТОКИ

(Перенаправлено из UNIX System V STREAMS )

В компьютерных сетях 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, «не должны использовать устаревшие функции».

Технический обзор

[ редактировать ]
Пример использования потоков для реализации удаленного выполнения команд по сети после ( Ритчи 1984 )

В версии 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 ]

Примечания

[ редактировать ]
  1. ^ ( Гудхарт 1994 , стр. 51–53, 403–527)
  2. ^ ( Гудхарт 1994 , стр. 52–53)
  3. ^ Перейти обратно: а б ( Гудхарт 1994 , стр. 17)
  4. ^ ( Гудхарт 1994 , стр. 51)
  5. ^ Перейти обратно: а б с ( Ричи 1984 )
  6. ^ ( Гудхарт 1994 )
  7. ^ Эрик С. Рэймонд (2003). «Глава 7. Мультипрограммирование» . Искусство программирования для Unix . Аддисон-Уэсли.
  8. ^ Перейти обратно: а б ( ДЛПИ и 2.0.0 )
  9. ^ ( НПИ и 2.0.0 )
  10. ^ ( ТПИ и 1,5 )
  11. ^ ( ТПИ и 2.0.0 )
  12. ^ ( КРУГ 1990 )
  13. ^ ( XAP 1993 )
  14. ^ «Базовые характеристики, выпуск 7, издание 2013 г., раздел B.2.6 ПОТОКИ» . Открытая группа . Проверено 9 марта 2015 г.
  15. ^ «Группа по пересмотру общих стандартов Остина» . Открытая группа . Проверено 9 марта 2015 г.
  16. ^ «Базовые спецификации открытой группы, выпуск 7, Коды» . Открытая группа . Проверено 9 марта 2015 г.
  17. ^ Пайк, Роб (1984). «Блит: мультиплексный графический терминал» . Технический журнал AT&T Bell Laboratories . 63 (8): 1607–1631. дои : 10.1002/j.1538-7305.1984.tb00056.x . S2CID   34062559 .
  18. ^ Перейти обратно: а б Бах, Морис Дж. (1986). Проект операционной системы UNIX . Прентис Холл. Бибкод : 1986duos.book.....B . ISBN  9780132017992 .
  19. ^ См.: putmsg – Справочник по системным интерфейсам, Единая спецификация UNIX , Версия 3 от Открытой группы и getmsg – Справочник по системным интерфейсам, Единая спецификация UNIX , версия 3 от Open Group .
  20. ^ Перейти обратно: а б Пресотто, Дэвид Л. (1990). Многопроцессорные потоки для Plan 9 . Учеб. Летняя конференция УКУУГ. CiteSeerX   10.1.1.42.1172 .
  21. ^ Ньютон, Марк. «Эмуляция FreeBSD SysVR4» . Страницы FreeBSD Марка Ньютона .
  22. ^ ( Барр 2001 )
  23. ^ ( Валентин 2001 )
  24. ^ «Машина Alpha Micro Phun: введение в AMOS» . Проверено 5 марта 2022 г.
  25. ^ Перейти обратно: а б «STREAMS, LiS и Netware Caldera для Linux — обновление» . Гроклав . 3 июля 2006 г. Проверено 14 июля 2022 г.
  26. Алан Кокс, Streams и Linux , Список рассылки ядра Linux, 28 июня 1998 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0caa48baeedc8d2d3f2583e80d6dfbe2__1703437020
URL1:https://arc.ask3.ru/arc/aa/0c/e2/0caa48baeedc8d2d3f2583e80d6dfbe2.html
Заголовок, (Title) документа по адресу, URL1:
STREAMS - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)