Стриймове

от Уикипедия, свободната енциклопедия

При комютърните мрежи, стриймовете (STREAMS) са вградената софтуерна рамка, в Unix System V. Стриймовете се използват за имплементиране на драйвъри, мрежови протоколи и междупрограмова комуникация. Стриймовете представляват верига изградена от секции от програми или процедури, които могат да подават данни за контрол към други програми. След подаване на данните, въпросната процедура или програма спира да работи, но във всеки един момент може да бъде инициализирана от мястото, на което е прекъсната. Стриймовете се използват за доставяне на съобщения между програма и драйвър (или две програми). Стриймовете се появяват за първи път във версия 8 на Research Unix.

Стриймовете представляват система от компоненти, които позволяват едновременно свързване в двете посоки между драйвърите на системата и тези на различните устройства. Най-често стриймовете се използват за поддържане на връзка между терминал и мрежови субсистеми, като по този начин терминалното устройство може едновременно да чете и променя дадена информация в определената инфорационна система. В System V Release IV, цялата терминална система бе пренаписана за използване на стриймове. Важна особеност на стриймовете е възможността да събира драйвърите заедно, като по този начин се образува клъстер. Няколко от тези драйвъри могат да бъдат свързани един към друг и в определен ред.

Технически характеристики[редактиране | редактиране на кода]

Във Version 7 Unix, командите бяха свързани към терминалите (клавиатура и монитор или клавиатура и принтер) посредством механизъм наричан редова дисциплина, която зарежда единствена линия от входящи данни, т.е. изчаква потребителя да натисне бутона „return“ преди да изпрати входящите данни към програмата. Този метод доставяше възможността за корекция на входните данни преди натискане „return“. Стриймовете замениха редовата дисциплина с низ от обработващи модули организирани в линейна верига, която позволява двойнопосочна комуникация между съседни модули. Програмите могат да поставят нов модул в края на веригата, за да променят поведението на терминала или други устройства. Денис Ричи дава примера на свързване на верига от модули за терминал с мрежовия модул Datakit, за да се постигне дистанционно свързване към мрежа. Освен символи/characters (байтове/bites) пътуващи от програма към устройство и обратно, стриймовете могат да пренасят и команди като „hangup“ (прекратяване на връзката) и ioctl (input/output control, контрол върху входно/изходните данни) съобщения.

Стриймовете могат също така да се използват и за вътрешно процесни съобщения, чрез връзка на два процеса към псевдотерминали. Тази възможност беше въведена за първи път в mpx window system (процес, при който няколко аналогови или дигитални сигнала се обединяват) за графичния терминал Blit, който може да възпроизвежда няколко терминални прозореца. Всеки прозорец беше процес, който комуникираше с window системата през псевдотерминал, който имаше инсталиран драйвър за редова дисциплина, изпращащ напечатани символи към прозореца и получаващ текст (или графика), които да възпроизведе. Контролни сигнали показваха желанията на потребителя дали да смени или затвори прозорците.

Фактическите стрийм модули са вградени в ядрото на Unix и се инсталират (pushed) и премахват (popped) от входно/изходните системни повиквания. За пример, за да се инсталира горе споменатата редова дисциплина към „file descriptor“ /fd/ (абстрактен индикатор използван за достъп до файл или входящ/изходящ ресурс) кореспондиращ с терминално устройство, трябва да се напише (в С).

Ioctl(fd, PUSH, TTYLD);

За да се работи с входящите/изходящите данни при стриймовете, трябва да се използват командите „read“ и „write“, заедно с обикновени „file descriptors“, или конкретни стрийм функции, за да се изпратят контролни съобщения. Денис Ричи призна, че съжалява, че е трябвало да вгради стриймовете в ядрото, а не в самите процеси, но е трябвало да се направи така, заради по-голямата ефективност. По-късен Plan 9 ъпдейт вгради модули като процеси, които да се контролират от потребителя.

  Тази страница частично или изцяло представлява превод на страницата STREAMS в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​