Vyšlo v týdeníku Computerworld č. 21/93 v roce 1993
Vytištěno z adresy: http://www.earchiv.cz/a93/a321c110.php3

Terminálové relace a vzdálené přihlašování

V minulém dílu jsme se začali zabývat celkovou koncepcí aplikačních služeb v sítích na bázi TCP/IP a naznačili si principy jejich začlenění do operačního systému (na příkladu Unixu). Dnes se již můžeme věnovat první konkrétní aplikaci, která umožňuje tzv. vzdálené přihlašování. Snad ale neuškodí si nejprve podrobněji naznačit, co tato možnost vlastně znamená a k čemu ji lze využít, a teprve pak se zabývat tím, jak je v prostředí TCP/IP sítí implementována.

Možnost vzdáleného přihlašovaní (v angličtině: remote login) úzce souvisí s existencí tzv. terminálových relací (anglicky: terminal sessions). Pro uživatele víceúlohových operačních systémů je to pojem jistě dobře známý, ale pro mnohé uživatele, "odkojené" počítači PC a jednoúlohovým prostředím MS DOSu, může představovat něco zcela nového a nepříliš "průhledného".

Od dávkového zpracování k interaktivnímu

Historicky nejstarším způsobem využití výpočetní techniky je dávkové zpracování (batch processing), při kterém uživatel sestavil svou úlohu, předem pro ni připravil veškerá její vstupní data a vše "zabalil" do jednoho celku - tzv. dávky. Ta pak byla ve vhodné době provedena. Obvykle byly jednotlivé dávky řazeny do front a každá dávka se provedla tehdy, až na ni došla řada. Uživatel tedy nebyl v přímém kontaktu se svou úlohou, nemohl bezprostředně reagovat na různé situace, ke kterým při provádění jeho úlohy mohlo docházet, a nemohl ani jinak interaktivně komunikovat se svou úlohou. V době, kdy se jeho úloha skutečně zpracovávala, nemusel vůbec být ve fyzické blízkosti příslušného počítače.

Obrat nastal až v okamžiku, kdy se přešlo na práci v režimu sdílení času. Nyní se již na jednom počítači mohlo současně nacházet více úloh v rozpracovaném stavu, a procesor velmi rychle přecházel z provádění jedné úlohy na provádění druhé úlohy, pak třetí atd. Díky tomuto rychlému střídání vznikla dostatečně věrná iluze toho, že procesor se věnuje více úlohám současně, tzn. že na jednom počítači běží najednou více úloh. Ve skutečnosti se avšak všechny tyto úlohy dělily o čas, který věnoval procesor jejich provádění. Jinými slovy: jednotlivé úlohy sdílely čas procesoru, odsud: režim sdílení času (time sharing).

Tímto způsobem (tj. v režimu sdílení času) bylo nadále možné provozovat úlohy připravené předem ve formě dávek, které nevyžadují bezprostřední styk se svým zadavatelem. Režim sdílení času však umožnil to, aby uživatelé byli v bezprostředním styku se svými úlohami a mohli s nimi komunikovat interaktivním způsobem.

Ukažme si na konkrétním příkladu, v čem byl pro uživatele rozdíl. Vžijme se do role programátora, který opravuje zdrojový text svého programu a má jej na daném počítači uložen jako jeden ze svých souborů. V případě dávkového zpracování musel tento uživatel předem připravit příkazy pro opravu všech chyb ve zdrojovém programu stylem: "na řádce XY změň řetězec ABCD na EFGH", přidat ještě příkaz pro nový překlad zdrojového textu, sestavit z těchto příkazů dávku, a tu zadat k provedení. Druhý den si přišel pro výsledek, zjistil nové chyby a celý postup se opakoval.

Na počítači pracujícím v režimu sdílení času může náš programátor pracovat odlišným způsobem. Nejprve začne komunikovat s operačním systémem, jemuž zadá příkaz ke spuštění interaktivního editoru. Jeho prostřednictvím pak postupně provede potřebné opravy v souboru se zdrojovým textem, načež práci s editorem ukončí a začne opět komunikovat přímo s operačním systémem. Tomu zadá příkaz k překladu opraveného zdrojového textu a nechá si výsledky tohoto překladu zobrazit. Odhalí-li překladač další chyby ve zdrojovém textu, uživatel si znovu zavolá editor a celý cyklus se opakuje. Tentokrát však již s "dobou obrátky", která se měří spíše na minuty než na celé dny, jako u dávkového zpracování.

Terminály a terminálové relace

Interaktivní způsob práce v systému se sdílením času má jeden důležitý předpoklad: operační systém i jednotlivé aplikační úlohy potřebují vhodný mechanismus komunikace se svým uživatelem. Zatímco v případě dávkového zpracování si úlohy své vstupní příkazy a data přebíraly ze samotné dávky a své vstupy posílaly tam, kam jim příkazy v dávce přikazovaly (obvykle do výstupních souborů, ev. na tiskárnu), v případě interaktivní komunikace čekají, až jim uživatel zadá příslušné příkazy či jiné vstupy ze své klávesnice, a své výstupy mu posílají na displej, kde si je uživatel může přečíst.

To ale znamená, že operační systém i aplikační úloha musí mít přístup ke klávesnici a k displeji, které příslušný uživatel používá. Navíc, jde-li o víceuživatelské prostředí, které umožňuje interaktivní způsob práce více uživatelům současně, musí takovýchto dvojic "klávesnice a displej" existovat více a každá konkrétní úloha musí vědět, na které z nich právě pracuje ten "její" uživatel.

Zmíněná dvojice "klávesnice a displej" se obvykle označuje jako terminál a často tvoří i jeden konstrukční celek (i když to není zdaleka podmínkou). Počítače s víceuživatelským operačním systémem, které pracují v režimu sdílení času, bývají vybaveny větším počtem těchto terminálů.

Existence více než jednoho terminálu však znamená, že operační systém i jednotlivé aplikační úlohy nemohou počítat s tím, že uživatel s nimi bude komunikovat vždy z jednoho a téhož terminálu. Naopak je žádoucí, aby z pohledu uživatelů byly všechny terminály ekvivalentní - aby uživatel mohl přijít ke kterémukoli z nich, který je právě volný, a pracovat z něj přesné stejným způsobem jako z kteréhokoli jiného terminálu.

Vztah mezi úlohou, která odněkud očekává své vstupy a někam chce posílat své výstupy, a konkrétním terminálem, ze kterého se uživatel rozhodne pracovat, je tedy vztahem, který není á priori a pevně dán, ale utváří se až v okamžiku, kdy uživatel "zasedne" k některému z terminálů a projeví své přání pracovat v operačním systému.

Toto své přání projevuje uživatel tzv. přihlášením (anglicky: login, nebo: logon), kdy na výzvu operačního systému zadá své uživatelské jméno a svou identitu prokáže potřebným heslem.

Přihlášením uživatele do systému z určitého terminálu vzniká výše naznačený vztah mezi konkrétním terminálem a aplikační úlohou, který je označován jako terminálová relace. Nejlépe si ji lze představit jako abstraktní rozhovor, který určuje, kdo s kým rozmlouvá. Přihlášením uživatele vzniká takováto terminálová relace mezi terminálem a operačním systémem jako takovým - přesněji mezi terminálem a tou systémovou úlohou, která zajišťuje funkci interpreteru příkazů operačního systému, vysílá na obrazovku terminálu nápovědný znak (tzv. prompt), přijímá od uživatele jeho příkazy pro operační systém, a zajišťuje jejich provedení (v prostředí Unixu se takováto úloha označuje jako shell).

Příkazem, jejž uživatel operačnímu systému zadává, může být například příkaz ke spuštění určité aplikace, která pak přebírá již existující terminálovou relaci a jejím prostřednictvím komunikuje se svým uživatelem. Jde-li například o editor, zobrazuje v rámci terminálové relace obsah editovaného souboru na displeji příslušného terminálu a z jeho klávesnice přijímá své příkazy.

V tuto chvíli je vhodné si naši postupně krystalizující představu terminálové relace ještě poněkud poopravit. Není totiž zcela přesné představovat si, že z jednoho terminálu je možné zřídit (někdy se říká též: otevřít) nejvýše jednu terminálovou relaci. V principu je možné, aby si uživatel z jednoho terminálu otevřel více relací s různými aplikacemi, či dokonce s aplikací jedinou - například aby si v každé jednotlivé relaci spustil tentýž editor (přesněji: instanci téhož editoru) a editoval jiný soubor. V každém okamžiku jsou sice klávesnice a displej terminálu vyhrazeny jen jedné relaci - tj. uživatel vždy komunikuje jen s jednou úlohou v rámci jedné relace - ale pomocí klávesnice se může mezi jednotlivými relacemi rychle přepínat (obvykle pomocí nějaké horké klávesy). Záleží jen na tom, zda daný operační systém a příslušný terminál vychází této možnosti vstříc.

Další zajímavé možnosti se pak otevírají v okamžiku, kdy do hry vstupují vzájemně propojené počítače a počítačové sítě.

Vzdálené terminálové relace

Až doposud jsme mlčky předpokládali, že terminálová relace se otevírá mezi úlohami běžícími na určitém počítači a konkrétním terminálem, který je k tomuto počítači připojen. Ve skutečnosti však jde jen o jednu z možností, která se neformálně označuje jako "lokální" či "místní" terminálová relace. Jejím charakteristickým rysem je skutečnost, že v ní vystupuje terminál přímo připojený k danému počítači. Není přitom podstatné zda je toto připojení realizováno krátkým kabelem (terminál se nachází ve fyzické blízkosti počítače), nebo zda je pro připojení terminálu využit například pevný telefonní okruh (vlastní terminál se nachází na druhém konci města).

Obrázek 65.1.
Obr. 65.1: Vzdálené vs. lokální terminálové relace
Jiná situace nastává v případě počítačů vzájemně propojených prostřednictvím počítačové sítě. Zde je totiž možné realizovat tzv. vzdálené terminálové relace (remote terminal session), při kterých vzniká terminálová relace ve výše uvedeném smyslu mezi terminálem jednoho počítače, a úlohou běžící na jiném počítači. Představme si - v souladu s obrázkem 65.1 - uzlové počítače A a B a jejich terminály Ta a Tb. Uživatel počítače A, který pracuje u terminálu Ta, se nejprve přihlásí do systému na počítači A (tj. provede tzv. login). Tím vytvoří "lokální" terminálovou relaci mezi terminálem Ta a počítačem A a v rámci táto relace bude komunikovat s interpreterem příkazů operačního systému počítače A (na obrazovce se mu tedy objeví nápovědný znak - tzv. prompt - operačního systému počítače A). Uživatel
Obrázek 65.2.
Obr. 65.2: Představa realizace vzdálené terminálové relace
však zadá příkaz ke spuštění zvláštní aplikační úlohy (říkejme jí pracovně "úloha telnet"), která zajistí následující věci: nejprve naváže spojení s počítačem B (obecně s tím počítačem, který jí uživatel zadá) a pak zřídí terminálovou relaci mezi terminálem Ta a počítačem B. Přesněji: mezi terminálem Ta a interpreterem příkazů operačního systému počítače B. V rámci této terminálové relace, která si již zaslouží přívlastek "vzdálená", se veškeré vstupy z klávesnice terminálu Ta dostávají nejprve k "úloze telnet" na počítači A, ale ta je ihned odesílá na počítač B, kde příslušná data vystupují ve stejné roli jako vstupy z kteréhokoli "místního" terminálu. Naopak veškeré výstupy, které jsou v rámci této relace generovány, jsou odesílány na počítač A, kde je přijímá "úloha telnet" a zajišťuje jejich okamžité zobrazení na displeji terminálu Ta (viz obr. 65.2).

Terminál Ta fyzicky připojený k počítači A se tak začne chovat jako terminál přímo připojený k počítači B. Na displeji terminálu se nejprve zobrazí nápovědný znak (prompt) interpreteru příkazů počítače B a uživatel pak může z terminálu Ta zadávat příkazy operačnímu systému na počítači B. Nejprve se tedy přihlásí do systému na počítači B (provést tzv. vzdálené přihlášení, angl.: remote login) a pak si například spustí nějakou aplikační úlohu. Ta "poběží" na počítači B, ale své vstupy bude očekávat z terminálu Ta, a její výstupy se budou zobrazovat na displeji terminálu Ta. Uživatel, který sedí u terminálu Ta, tak bude mít stejné postavení a stejné možnosti práce na počítači B, jako kdyby seděl přímo u terminálu Tb tohoto počítače.

K ocenění výhodnosti a užitečnosti vzdálených terminálových relací a vzdáleného přihlašování snad zbývá dodat jen jediné: je vcelku lhostejné, zda se počítače A a B nalézají blízko sebe nebo zda jsou například každý v jiném městě či na jiném kontinentě. Jedinou podmínkou pro možnost vzdáleného přihlašování je vhodné propojení obou počítačů a pak také softwarová podpora vzdálených terminálových relací. V případě počítačových sítí je potřebné spojení úkolem nižších vrstev a podpora vzdálených terminálových relací je jednou z aplikačních služeb. O tom, jak jsou vzdálené terminálové relace konkrétně realizovány v sítích na bázi TCP/IP, si povíme příště.