Ugrás a tartalomhoz

Operációs rendszerek mérnöki megközelítésben

Benyó Balázs, Fék Márk, Kiss István, Kóczy Annamária, Kondorosi Károly, Mészáros Tamás, Román Gyula, Szeberényi Imre, Sziray József

Panem Kiadó

2.4. Készülékek és külső kapcsolatok

2.4. Készülékek és külső kapcsolatok

A virtuális gép fontos objektumai a folyamatok és tárak mellett a készülékek, illetve az egyéb külső kapcsolatok. Valamennyi olyan eszközt, amelyik a fizikai architektúra szerint perifériának minősül, igyekeznek egységesen kezelhetővé tenni, közös modellt találni számukra. Ez nem könnyű, mert ezek az eszközök igen sokfélék. Két fő irány figyelhető meg, amelyek – ha kicsit mélyebbre nézünk – nem is különböznek olyan lényegesen egymástól. A két irány a fájlok és a többi készülék viszonyának meghatározásában különbözik. Az egyik irány valamennyi külső eszközt a fájl absztrakció alá sorol be, és speciális fájloknak tekinti például a nyomtatót, a terminált és a többi perifériát, kezelésükre – esetleg speciálisan paraméterezhető – fájlműveleteket nyújt. A másik irány központi fogalma a logikai periféria, amelyik egy absztrakt be-/kiviteli eszköz, és a rendszer működése során a logikai perifériához akár különböző fizikai eszközök, és rendszerint fájlok is rendelhetők. Bármelyik irányból közelítünk is, a meglehetősen vékony fedőrétegek alatt elég hamar előkerülnek az eszközök különbözőségéből származó problémák, ami nem jelenti azt, hogy a készülékeket ne lehetne osztályokba sorolni. Ebben a fejezetben egyrészt egy rendszerezésre teszünk kísérletet, majd a jellegzetes készülékek modelljeit tárgyaljuk, amelyek a felhasználói, illetve programozói felületen megjelennek.

2.4.1. A külső eszközök fő típusai

A számítógépek körül egyre többféle olyan készüléket találunk, amelyekkel közvetlen kapcsolatban van. Ezek a készülékek feladataikat, szerkezetüket, működési elvüket tekintve rendkívül sokfélék lehetnek.

A perifériákat egyrészt jellegzetes feladatköreik szerint csoportosíthatjuk, amelyek a következők lehetnek:

  • ember–gép kapcsolat,

  • gép–gép kapcsolat,

  • adattárolás.

Jellemző tendencia, hogy egyre újabb, a korábbiakra alig emlékeztető ké­szülékek jelennek meg, amelyeknek együtt kell működniük a számítógéppel. Ugyanakkor – szerencsére – a készülékek csatlakoztatásának szabványosodása is megfigyelhető. Ugyancsak jellemző tendencia, hogy a perifériák egyre intelligensebb saját vezérlőegységgel rendelkeznek, így a kapcsolatokban is egyre magasabb szintű, a részleteket elfedő modellt láttatnak magukból. Mindennek eredményeként a fenti, funkcionális különbség a kapcsolat alacsony szintű rétegeiben nem ismerhető fel, ott minden eszköz a gép–gép kap­csolat sajátosságai és szabványai szerint kezelhető.

A következő csoportosítási szempont a perifériák működési sebessége lehet. Többségük mechanikus alkatrészeket is tartalmaz, ezért a perifériák működési sebessége (például feldolgozott bájt/s mértékegységben) általában lényegesen alatta marad a processzorok sebességének. Különösen azok az eszközök lassúak, amelyek működési sebességét emberi reakcióidők határozzák meg. Más esetekben azonban – főként célrendszerek, speciális alkalmazások gép–gép kapcsolataiban – a külső eszközként kezelt műszerek, érzékelők, egyéb készülékek olyan gyorsak, hogy a számítógéphez való illesztésük speciális megoldásokat igényel.

A készülékek jellegzetes sebességkategóriái (a felsorolás sorrendjében egyre gyorsabbak):

  • emberi beavatkozást igénylő készülékek,

  • mechanikus, elektromechanikus készülékek,

  • elektromos, elektronikus készülékek,

  • optikai készülékek,

  • részecskefizikai készülékek.

Ismét más csoportosítási szempont a készülékek vezérelhetősége. Vannak eszközök, amelyek (természetesen adott sebességi korlátokon belül) a számítógép által meghatározott ütemben képesek adatok küldésére vagy fogadására. Más eszközöknél ellenben éppen az jelenthet gondot, hogy egy hosz-szabb adatfolyamot csak saját ritmusukban képesek kezelni. Ilyenek például a hagyományos rendszerekben a diszkek a lemez folyamatos forgása miatt, vagy a mai rendszerek multimédiás, audio/video jelfolyamait közvetítő eszközök, a külső tv-adás számítógépes fogadásának, vagy számítógépes mozgókép tv-adásba történő közvetítésének eszközei. Ha a számítógép oldalán nem tudunk igazodni a készülék által diktált ütemhez (szinkronhoz), adatvesztés lép fel, és az átvitel egyáltalán nem, vagy csak jelentős időveszteséggel ismételhető meg.

Az operációs rendszer készítőjének szempontjából újabb rendező elv lehet az egyes készülékek illesztési módja a számítógéphez. A számítógép hardver általában különböző készülékvezérlők alkalmazásával oldja meg a készülékek és a tár közötti adatcserét. Egyes vezérlők csak egy-egy eszközt felügyelnek, mások egy külön sínrendszeren több eszközt kezelnek. Egyes vezérlők önálló processzorral és mikrokóddal, jelentős memóriával rendelkezhetnek, mások csupán néhány regisztert (adat ki-/bemenet, parancs, státus) és sínillesztő áramköröket tartalmaznak (portok). Egyes eszközök csak B/K-címeket használnak, mások memóriába ágyazott címeket, vagy azokat is. Egyes eszközök állapotjelzőit programozottan kell lekérdezni (polling), mások megszakításkéréssel jeleznek egy-egy eseményt. Egyes eszközök bájtonként vagy szavanként igényelnek processzorműveletet, mások blokkonként cserélnek adatot a memóriával (DMA).

Ez az utóbbi szempont nemcsak az illesztés, hanem a magasabb szintű kezelés során is előtérbe kerül. A készülék és a számítógép közötti adatfolyam jellege szerint ugyanis a készülékek karakteres vagy blokkos átvitellel működtethetők.

A bemutatott csoportosítás is érzékelteti, hogy az operációs rendszer által kezelt készülékek rendkívül sokfélék, ráadásul további, nehezen tipizálható tulajdonságokkal is rendelkeznek. Hogyan lehet ezeket a készülékeket a kezelői és programozói felületen egységesen megjeleníteni?

Az egységes felület kialakításának elve, hogy találjuk meg a lényeges közös vonásokat, és rejtsük el a részleteket, ruházzuk a megfelelő felelősségeket az architektúra alacsonyabb szintjeire. A készülékek esetén elég sok elrejteni való akad, és elég kevés a tipizálható, általánosítható funkció. A készülékkezelő (device driver) programokra meglehetősen sok feladat marad.

2.4.2. Készülékmodell az alkalmazói felületen

Az operációs rendszer programjai számára a legfontosabb absztrakció, hogy a készülékre adatokat lehet küldeni, illetve adatokat lehet róla fogadni. Ez megfelel a fájlokra kiadható írás, olvasás műveleteknek, ezért sok rendszer a fájl fogalmát terjeszti ki a készülékekre. A készülékek ilyen esetben a fájlokhoz hasonlóan nevükkel azonosíthatók, és beilleszkednek a könyvtári nyilvántartás névhierarchiájába. A fájlok használata előtt meg kell nyitni azokat, ami a készülékek esetén is értelmezhető, hiszen vannak eszközök, amelyek például előzetes motorindítást, kizárólagos használat lefoglalását, vagy kapcsolatfelépítést igényelnek, mielőtt az érdemi adatátvitelre sor kerülhetne. Ugyancsak értelmezhető a készülékekre a használati jog ellenőrzése. Mint a fájlok megnyitása, a készülékek előkészítése is gyakran rejtetten történik a folyamatok indulásakor, vagy az első hivatkozáskor.

A fájlrendszerre épülve, vagy amellett a rendszerek lehetővé teszik logikai perifériák használatát, ami a készülékfüggetlen programozást szolgálja. Egy logikai periféria a rendszerben névvel vagy sorszámmal azonosítható, és ez a név, vagy sorszám használható a be-/kiviteli műveletekben írás esetén a cél, vagy olvasás esetén a forrás kijelölésére. A névhez a kezelő rendelhet konkrét fizikai eszközt, vagy a folyamat az előkészítési szakaszában végrehajtott megnyitásokkal maga végzi el a hozzárendelést (ez a szakasz természetesen nem lesz készülékfüggetlen, de a kód döntő része az marad). A logikai perifériákhoz általában nemcsak készülékek, hanem fájlok is hozzárendelhetők. A logikai perifériákra egyszerű be-/kiviteli műveletek adhatók ki. Lássuk ennek egy modelljét részletesebben!

2.4.2.1. Egyszerű be-/kivitel

A kernel alkalmazói felületén a B/K-műveletek egy adatblokk mozgatására vonatkoznak a memória és valamely logikai periféria között. Ennek a műveletnek a bonyolítására egy indító (START), egy várakozó/tesztelő (WAIT) és rendellenességek esetére egy leállító (STOP) művelet szükséges, valamint az átvitel paraméterezéséhez egy egyezményes adatstruktúra, a B/K-leíró (IOCB: Input Output Control Block).

Az adatmozgatás paraméterei: forrás, cél, mennyiség. A forrás és a cél közül az egyik egy memóriacím, a másik egy logikai periféria név (vagy szám). A mennyiség az átviendő bájtok száma. A műveletek argumentumában a logikai periféria neve és egy mutató szerepel az IOCB-re. Az IOCB tartalma: parancs, ami lehet írás, olvasás stb.; állapotjelző, amelyik az átvitel sikerét vagy hibáját jelzi vissza, memóriacím; mennyiség; egyéb paraméterek, amelyek a periféria által értelmezhetők lehetnek (például diszkek esetén blokkcím).

A START a logikai periférianév alapján fizikai készüléket választ ki, a fizikai periféria várakozási sorába fűzi az átviteli paramétereket tartalmazó IOCB-t. Ha a periféria nincs működésben, meghívja a készülékkezelő program szabványos Start_Device műveletét (az egységes készülékcsatlakoztatási felület előírja, hogy ilyen műveletnek kell lennie). Ezután mindkét esetben visszatér, azaz aszinkron hívásként nem várja meg a B/K-művelet végét.

A WAIT művelet ellenőrzi az IOCB állapotjelzőjét. Ha a B/K-művelet még nem fejeződött be, a hívó folyamatleíróját ráfűzi a megadott IOCB-re és a folyamatot várakozó állapotba helyezi, majd CPU ütemezést indít. Ha a B/K- művelet befejeződött, visszatér a hívóhoz. Egyes rendszerekben a művelethez időkorlát rendelhető, amely 0 és végtelen értékekre is beállítható. A 0 érték lehetővé teszi az elindított művelet befejeződésének lekérdezéses észlelését (polling), a végtelen időkorlát pedig a blokkolt műveletek megvalósítását.

A STOP művelet használatával programhibák, leállások esetén megállítható az elindított, de még be nem fejeződött B/K-művelet. Ha a készülék még nem kezdte meg a végrehajtást (nem az első az IOCB a sorban), egyszerűen kifűzi az IOCB-t, ha már megkezdte, a szabványos készülékcsatlakoztatási interfészen keresztül meghívja a kezelőprogram Stop_Device eljárását.

Az alkalmazások általában nem közvetlenül ezt a felületet használják, hanem a nyelv, illetőleg a rendszer könyvtári csomagjainak eljárásait. Az egyszerű B/K-műveletek lehetővé teszik, hogy a magasabb szintű, nyelvi és könyvtári műveleteket akár szinkron (várakozó blokkolt), akár aszinkron (továbbfutó, nem blokkolt) változatban kialakíthassák. A blokkolt megoldás a START után azonnal WAIT hívást tartalmaz, így a folyamat általában várakozó állapotba kerül. A nem blokkolt megoldás csak elindítja az átvitelt, majd a folyamat tovább futhat, és alkalmas ponton lekérdezheti az átvitel eredményét. A magasszintű műveletek szívesebben alkalmaznak blokkolt megoldást, mert a vezérlési szál ilyenkor nem ágazik el a B/K-indítás következtében, és a programkód könnyebben érthető és követhető. Ha nem blokkolt megoldás szükséges, akkor is szívesebben hoznak létre inkább új szálat a folyamaton belül, és azon a B/K-műveletet akkor is blokkoltan hajtják végre.

2.4.2.2. Fájlműveletek

A legtöbb eszközre a szekvenciális fájl modellje jól illeszthető, hiszen az adatáramlás bájtfolyam jellegű.

A diszkes fájlok tipikus műveleteit az előző fejezetben áttekintettük. Megnyitáskor a fájlra névvel kell hivatkozni, a további read, write, seek műveletekben azonban már a megnyitáskor kapott számmal.

A virtuális tárat használó rendszerek gyakran lehetővé teszik a fájlok memóriába ágyazott kezelését. Egy leképező művelet helyet foglal a fizikai tárban a fájl memóriában tartandó részeinek és visszaadja azt a virtuális címtartományt, amelyben a fájl látszik. Ezt követően a fájl adataira memóriareferenciákkal hivatkozhatunk.

A további fizikai eszközök (például nyomtató, billentyűzet, modem, audio és video berendezések) read, write műveleteinek egy része ugyancsak blokkonkénti, más része karakterenkénti B/K-rendszerhívást okoz. Egyes eszközökre csak olvasás (billentyűzet, CD), vagy csak írás (nyomtató) értelmezhető, ettől eltekintve a fájlként történő kezelés a felhasználói felületen könnyen értelmezhető.

2.4.2.3. Grafikus eszközök kezelése

A grafikus eszközöket az alkalmazások általában egy grafikus könyvtár eljárásaival kezelik. Ezek az eljárások raszter- vagy vektorgrafikai modellt valósítanak meg, és alakzatrajzoló, törlő, mozgató, továbbá állapotbeállító (háttérszín, rajzolószín, vonaltípus, kitöltés stb.) műveleteket tesznek lehetővé. A könyvtári eljárások a monitorok grafikus memóriáját, vagy annak egy részét általában memóriába ágyazottan látják. Bizonyos eszközökben a könyvtári eljárások programja és a grafikus memória külön célprocesszorral együtt a grafikus vezérlő kártyáján helyezkedik el. Ezt az eszközt az operációs rendszer csak néhány B/K-címen, vagy memóriába ágyazottan kezelhető regiszterként látja. Ennek ellenére a felhasználó számára logikailag ugyanaz a felület jelenik meg mint a hagyományos megoldásoknál, a műveletek végrehajtása azonban lényegesen gyorsabb lehet.

2.4.2.4. Terminálkezelés

A terminál egy karakteres be-/kiviteli egység, amelyik képernyőt és billentyűzetet tartalmaz, és általában a számítógéptől távolabb helyezkedik el, ezért adatátviteli vonalon vagy hálózaton csatlakozik a számítógéphez. Az alkalmazások számára a terminál sororientált vagy képernyőorientált kezelésére állnak rendelkezésre műveletek. Az adatátvitel jellegzetesen karakterenkénti és nem transzparens, azaz egy adott kódrendszert (benne vezérlőkaraktereket is) használ. A terminálok igen sokféle szabvány szerint működhetnek, különösen a billentyűzet-kiosztás és a vezérlőkarakterek elhelyezése a kódtáblában lehet sokféle. Az operációs rendszerek ma már valamennyi, a fontosabb szabványoknak megfelelő kezelést választhatóan tartalmazzák, ám ezek közül választani sem egyszerű felhasználói feladat.

2.4.2.5. Hálózati kapcsolatok kezelése

A hálózati kapcsolatok kezelésére jellegzetes megoldás a logikai csatlakozók (socket) fogalmának bevezetése (lásd UNIX, Windows NT). Az alkalmazások létrehozhatnak csatlakozókat, segítségükkel becsatlakozhatnak távoli címekre, figyelhetik, hogy más rácsatlakozott-e az ő csatlakozójukra. A kapcsolat létrejötte után a csatlakozó egy indirekt kommunikációs objektumként működik. A szerver oldal – ahova több csatlakozón érkezhetnek hívások – munkájának támogatására nyújtják a rendszerek a select műveletet, amely viszsza­adja azon csatlakozók listáját, amelyiken van várakozó üzenet.

A csatlakozók mellett igen változatos további kommunikációs modellek is megjelennek a rendszerekben (postaláda, üzenetsor, pipe, stream stb.).

A készülékekbe épített vezérlők képességeinek fejlődésével számos készülék a folyamatok közötti kapcsolatokhoz egyre inkább hasonlatos módon ke­zel­hető.

2.4.3. Készülékmodell a kezelői felületen

Az egyszerű felhasználó kezelői felületén a készülékeket is az alkalmazások közvetítik.

Az alkalmazásfejlesztő számára az alkalmazói felület modellvilága bír elsődleges jelentőséggel, azon túl pedig az eszközök konfigurálása, a logikai, fizikai készülékek összerendelésének lehetőségei.

Újdonságot az eddigiekhez képest leginkább a rendszermenedzser számára nyújtandó készülékmodellek jelentenek. Neki kell ugyanis végrehajtani új készülékek csatlakoztatását a rendszerhez, továbbá elvégezni azok megfelelő beállítását. Ezen a szinten a rendszerek némelyike valóban egy széles, modellezett eszközválasztékot kínál, ahol tipikus funkciójú készülékek legfontosabb paraméterei beállíthatók, és a konkrét eszközpéldányok hozzárendelése is megtörténhet a megfelelő modellhez. Például egy modemre beállítható, hogy milyen adatkapcsolati protokollt használjon, használjon-e paritásbitet, meddig várjon a tárcsahangra stb., és az is, hogy mindez melyik fizikai csatlakozóra kapcsolt készülékre vonatkozik.