Content extract
Dr. Benyó Balázs Dr. Sziray József Dr. Kondorosi Károly OPERÁCIÓS RENDSZEREK Készült a HEFOP 3.31-P-2004-09-0102/10 pályázat támogatásával Szerzők: Dr. Benyó Balázs Széchenyi István Egyetem, Informatika Tanszék Dr. Sziray József Széchenyi István Egyetem, Informatika Tanszék Dr. Kondorosi Károly Budapesti Műszaki és Gazdaságtudományi Egyetem, Irányítástechnika és Informatika Tanszék Lektor: Dr. Csertán György Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Szerzők, 2007 Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom A dokumentum használata Vissza ◄ 3 ► A dokumentum használata Mozgás a dokumentumban A dokumentumban való mozgáshoz a Windows és az Adobe Reader megszokott elemeit és módszereit használhatjuk. Minden lap tetején és alján egy navigációs sor található, itt a megfelelő hivatkozásra kattintva ugorhatunk a használati
útmutatóra, a tartalomjegyzékre, valamint a tárgymutatóra. A ◄ és a ► nyilakkal az előző és a következő oldalra léphetünk át, míg a Vissza mező az utoljára megnézett oldalra visz vissza bennünket. Pozícionálás a könyvjelzőablak segítségével A bal oldali könyvjelző ablakban tartalomjegyzékfa található, amelynek bejegyzéseire kattintva az adott fejezet/alfejezet első oldalára jutunk. Az aktuális pozíciónkat a tartalomjegyzékfában kiemelt bejegyzés mutatja. A tartalomjegyzék használata Ugrás megadott helyre a tartalomjegyzék segítségével Kattintsunk a tartalomjegyzék megfelelő pontjára, ezzel az adott fejezet első oldalára jutunk. Keresés a szövegben A dokumentumban való kereséshez használjuk megszokott módon a Szerkesztés menü Keresés parancsát. Az Adobe Reader az adott pozíciótól kezdve keres a szövegben A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 3 ► Operációs rendszerek A
dokumentum használata | Tartalomjegyzék | Irodalom Tartalomjegyzék Vissza ◄ 4 ► Tartalomjegyzék Bevezetés. 6 1. Az operációs rendszerek áttekintése 8 1.1 Az operációs rendszerek funkciója 8 1.2 Az operációs rendszerek típusai 10 1.3 A számítógépek felépítése és működése 18 1.4 Az operációs rendszerek felépítése 21 1.5 Az operációs rendszerek szolgáltatásai 28 1.6 Rendszerfelépítés 29 1.7 Virtuális gépek31 1.8 Megvalósítás32 2. Folyamatok 34 2.1 A folyamat fogalma 34 2.2 Folyamatokból álló rendszerek 39 2.3 Folyamatok együttműködése 42 2.4 Holtpontok (deadlock) 57 2.5 Folyamatok kezelése az operációs rendszerekben 76 2.6 Processzorütemezés87 3. Tárkezelés 97 3.1 Memóriakezelés 98 3.2 Virtuális memória110 3.3 Fájlkezelés 117 4. Bemeneti-kimeneti (I/O) rendszer 131 4.1 Egységes alkalmazói felület 134 4.2 A kernel I/O alrendszere137 4.3 I/O kiszolgálás multiprogramozott rendszerben139 4.4
Háttértár-kezelés 141 5. Elosztott rendszerek147 5.1 Elosztott rendszerek definíciója 147 5.2 Elosztott rendszerek típusai 148 5.3 Elosztott rendszerek tulajdonságai153 5.4 Elosztott rendszerek operációs rendszerei160 5.5 Elosztott fájlrendszerek 163 A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 4 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tartalomjegyzék Vissza ◄ 5 ► 5.6 SUN Network File System (SUN NFS) 165 5.7 Az X Window rendszer169 6. Védelem és biztonság173 6.1 Számítógépes rendszerek védelme 173 6.2 Számítógépes rendszerek biztonsága 178 6.3 Rosszindulatú programok183 7. A UNIX operációs rendszer 188 7.1 A UNIX fejlesztésének története 188 7.2 A UNIX működésének alapjai190 Irodalom.193 A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 5 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bevezetés Vissza ◄ 6
► Bevezetés Az operációs rendszerek alapvető részét képezik bármelyik számítógépes rendszernek. Ennek megfelelően az informatikai oktatásban fontos helye van a velük foglalkozó tantárgynak. Ez a könyv bevezető áttekintést ad az operációs rendszerekről, azok alapvető működési elveiről, funkcióiról, felhasználásukról. A könyvben nem szenteltünk teret egyik meglevő operációs rendszer működésének részletes ismertetésére sem. Ehelyett olyan általános elveket tárgyalunk, amelyek a rendszerek széles körében alkalmazhatók. Az általános elvek, ill algoritmusok megvalósítására azonban néhol bemutatunk egy-egy példát, elsősorban a UNIX operációs rendszerből. A könyv végén, ugyancsak példaként, rövid áttekintést adunk a UNIX és a Windows NT operációs rendszerekről. A könyv hét fejezetből áll, amelyek tartalma a következő: Az 1. fejezet az operációs rendszerek funkcióit, típusait, illetve felépítésüket
ismerteti Ugyanitt kerül sor azoknak a hardver-elemeknek és megoldásoknak az ismertetésére is, amelyek szorosan kapcsolódnak az operációs rendszerekhez. A 2. fejezet a folyamatok (processzek) vezérlésével foglalkozik Egy folyamat a rendszer által végezett tevékenység alapegysége. A modern multiprogramozott rendszerekben egyidejűleg több végrehajtás alatt álló program, vagyis folyamat fut egymással párhuzamosan. Az operációs rendszer feladata a folyamatok ütemezése, szinkronizálása, a köztük levő kommunikáció lehetőségének biztosítása, valamint az esetlegesen fellépő holtpont szituációk kezelése. A 3. fejezet a központi memória és a háttértár kezelésének elveit írja le A rendszer és a felhasználók processzei a központi memóriában hajtódnak végre. A rendszer kapacitásának optimális kihasználása érdekében a folyamatokhoz megfelelő szervezéssel kell hozzárendelni a központi memóriát A fejezet a szervezés
algoritmusait mutatja be A felhasználók adataikat fájlokban tárolják A memóriaszervezési elveken felül a fejezet ismerteti, milyen módszerekkel történhet a fájlrendszerek kialakítása a különböző típusú háttértárakra támaszkodva. A 4. fejezet a bemeneti/kimeneti (input/output) rendszerekkel foglalkozik Ezek a rendszerek a számítógép leglassúbb komponensei Emiatt igen fontos feladat a működtetésük minél hatékonyabb megvalósítása. A A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 6 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bevezetés Vissza ◄ 7 ► fejezet erre vonatkozóan mutatja be a legelterjedtebb szervezési és működtetési megoldásokat. Az elosztott rendszerek témájával az 5. fejezet foglakozik Egy elosztott rendszer több párhuzamosan működő műveletvégző elemet (csomópontot) foglal magában A csomópontok egymástól függetlenül, autonóm módon
működnek, nincs közös memóriájuk és közös órajelük, egymással valamilyen kommunikációs csatornán, legtöbbször hálózati kapcsolaton keresztül érintkeznek. Az elosztott rendszerek felépítésüknél fogva lehetőséget teremtenek a megbízható működésre, párhuzamos művelet-végrehajtásra, az erőforrások (hardver eszközök, és adatok) különböző csomópontokon bejelentkező felhasználók közötti megosztására Ezek az előnyök az elosztott rendszerek elterjedését nagymértékben felgyorsították A védelem és biztonság kérdéseit a 6. fejezet tárgyalja A védelem olyan mechanizmust jelent, amely a programok, folyamatok egymással nem ütköző, egymástól védett vezérlésére szolgál. A biztonság a rendszerben tárolt információ (adat és kód egyaránt) általános védelmével van öszszefüggésben Mindez vonatkozik az illetéktelen hozzáférések kizárására, valamint a szándékos károkozás kivédésére is. A tankönyv
utolsó, 7. fejezete példaként a UNIX operációs rendszer alapvető vonásait mutatja be. Ez eredetileg nagyszámítógépes környezetre fejlesztett rendszer, mely az utóbbi időben egyre inkább elterjedtebb a PCk világában is. Ezt a tankönyvet elsősorban az informatikusi képzésben részesülő főiskolai és egyetemi hallgatóknak ajánljuk. Ugyanakkor azonban más hallgatók is hasznosíthatják, akiknek a tantervében az operációs rendszerekre vonatkozó ismeretek szerepelnek. Budapest, 2006. június 15 A szerzők A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 7 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 8 ► 1. Az operációs rendszerek áttekintése 1.1 Az operációs rendszerek funkciója Egy operációs rendszer olyan program, amely közvetítőként működik a felhasználó és a számítógép hardvere között. Elsődleges célja, hogy
biztosítsa azt a környezetet, amelyben a felhasználó kényelmesen és hatékonyan végre tudja hajtatni a saját programját. A másodlagos cél a számítógép hardverjének minél hatékonyabb használata. Mindehhez az is szükséges, hogy az operációs rendszerek megfelelő szolgáltatásokat nyújtsanak a programoknak és a programok felhasználóinak, azzal a céllal, hogy a programfejlesztési feladat könnyebbé váljék. A számítógépes rendszerek lényegében három fő komponensre oszthatók: hardver, operációs rendszer, valamint alkalmazói programok. A lehetséges alkalmazói programok: fordítóprogram, assembler, szövegszerkesztő, adatbázis-kezelő stb. Ezekhez a komponensekhez kapcsolódnak a különböző felhasználók, akik a saját fejlesztésű, vagy a vásárolt programokat futtatják. A hardver összetevői – a központi feldolgozó egység (CPU: Central Processing Unit), a memória, valamint a bemeneti/kimeneti (input/output, vagy röviden I/O)
egységek – szolgáltatják az alapvető számítási erőforrásokat (resources). Az alkalmazói programok – mint pl fordítóprogramok, adatbázis-kezelők, szövegszerkesztők, üzleti programok – a felhasználók számára segítik elő a saját speciális feladataik megoldását. Itt felhasználónak tekintendők a személyek, és a kapcsolódó másik számítógépek is Ebben az értelemben az operációs rendszer vezérli és koordinálja a hardver felhasználását a különböző alkalmazói programok között a különböző felhasználók számára. A legelterjedtebb felfogás szerint az operációs rendszer az a program, amely állandóan működik a számítógépen (a szoftver ún. központi magja), míg a többi program alkalmazóinak tekintendő A különböző funkciók hierarchikus szétosztásának jól bevált megoldása az, amelyben az egyes funkciókat egymásra épülő rétegekben valósítják meg. Egy-egy réteg azokat az összetartozó funkciókat,
más szóval szolgáltatásokat foglalja magában, amelyekre a felhasználó szempontjából általánosan van szükség Ebben a szervezésben az alapréteg maga a számítógépes hardver, amelyre egymás után épülnek a további szolgáltatási rétegek, mindegyik réteg szoftverben megvalósítva. Egy szoftver-réteg a saját szolgáltatásaiban felhasználja az alatta levő réteg szolgáltatásait A réteges megoldás elsődleges célja az, hogy az alkalmazói programok felé „elrejtse” A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 8 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 9 ► a rendszer belső működésének bonyolult folyamatait, szervezését, ezekkel nem terhelve a programok fejlesztőit. A másik fontos cél itt az, hogy hatékony végrehajtást eredményező funkciómegosztás valósuljon meg Az alkalmazói programok a számítógép
különböző erőforrásait használják fel. Az erőforrásoknak a futó programokhoz való hozzárendelését (allokációját, – allocation) az operációs rendszer szervezi és végzi el. Az alkalmazói programok és az operációs rendszer között az ún alkalmazási interfész (Application Programming Interface, – API) helyezkedik el. Szerepe az, hogy az alkalmazói programok számára úgy biztosítsa az operációs rendszerhez való kapcsolódást, hogy a programozó az általa használt magas szintű nyelv utasításkészletével tudja működtetni a szükséges erőforrásokat. Az átfogó működési felépítés, az egymásra épülő rétegekkel az 11 ábrán látható. Ebben a struktúrában az operációs rendszer arra használja a szoftver-hardver interfészt, hogy együttműködjék a számítógép hardverjével, vagyis a legalsó réteggel. Alkalmazási szoftver Alkalmazási interfész (API) Operációs rendszer Szoftver – hardver interfész Számítógép -
hardver 1.1 ábra Az operációs rendszer általános kapcsolatai Az egyik legfontosabb erőforrás a központi feldolgozó egység, a CPU. A modern számítógépekben a CPU is megosztásra kerül az egyes felhasználói programok között. Mindez abban nyilvánul meg, hogy a CPU az egyes programok futtatásáról úgy gondoskodik, hogy felváltva „szentel nekik” vezérlést, különböző időszakaszokat biztosítva fordítva a futtatásukhoz. Ilyenkor egy program futása felfüggesztődik, majd egy újabb program kapja meg a vezérlést, ugyancsak egy bizonyos ideig. A régebbi személyi számítógépek (PC-k) esetében az alacsony teljesítmény még nem tette lehetővé a CPU-megosztást. Az akkori állapothoz A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 9 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 10 ► igazodva terjedt el az IBM-kompatibilis PC-k
DOS operációs rendszere (Disk Operating System), amely mindig csak egy program teljes lefuttatását tette lehetővé, s csak azután következhetett egy újabb program. A mai PC-k teljesítőképessége már igen hatékony erőforrás-megosztást tud eredményezni. Ilyen szolgáltatással van ellátva például a Microsoft cég által kibocsátott Windows XP operációs rendszer, amely a DOS-t váltotta fel. Megemlítendő még, hogy az operációs rendszerek mögött több mint 40 éves fejlődés áll, ami folyamatosan hatással volt a hardver fejlődésére is. A következő alpontban e fejlődési folyamat egyes állomásait tekintjük át. Ezek az állomások egyben az operációs rendszerek eddig kialakult típusait is képviselik. 1.2 Az operációs rendszerek típusai 1.21 Egyszerű batch típusú (kötegelt feldolgozású) rendszerek A régebbi számítógépek igen nagy terjedelműek voltak, és egy központi terminálról (konzol) működtették őket. Bemeneti
eszközük a kártyaolvasó és a mágnesszalag egység volt, míg kimenetként a sornyomtató, mágnesszalag egység, illetve a kártyalyukasztó volt használatos. A felhasználó nem állt közvetlen kapcsolatban a számítógéppel. Egy munkafolyamatot (ún jobot) kellett előkészítenie, amely a futtatandó programokat, a szükséges adatokat, valamint a vezérlési információt foglalta magában A futási eredmény egy későbbi időpontban került a felhasználó elé Az ilyen számítógépek operációs rendszere eléggé egyszerű volt. Fő feladata abból állt, hogy a job-okat egyenként, egymás után hajtassa végre, automatikus vezérléssel Az operációs rendszer mindig teljes egészében a memóriában tartózkodott. A job-ok feldolgozásának felgyorsítása érdekében a hasonló igényű job-okat az operátorok egy csoportba (batch-be, kötegbe) válogatták, és ebben a szervezésben került sor a futtatásukra, amelyet a batch típusú operációs rendszer
vezérelt. Amikor egy job lefutott, az eredmények rendszerint egy sornyomtatón íródtak ki. A batch rendszerek alapvető sajátsága az volt, hogy egy job futása alatt a felhasználó semmilyen beavatkozási lehetőséggel (interakció) nem rendelkezett. A job a szerint futott le, ahogyan azt a felhasználó korábban előírta Ebben a végrehajtási környezetben a CPU gyakran várakozásra kényszerült amiatt, hogy a mechanikus I/O-eszközök több nagyságrenddel A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 10 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 11 ► (3-4) lassabban működtek, mint az elektronikus eszközök. A hatékonyság javítása érdekében a diszket vették igénybe: a lyukkártyák beolvasása közvetlenül a diszkre történt, és a kinyomtatandó sorok is diszkre íródtak. A job-ok végrehajtása a diszkről történt, míg a
printelés a job befejezése után ment végbe, ugyancsak a diszkről. Az ilyen szervezési feldolgozást spoolingnak nevezzük A név az angol elnevezés kezdőbetűiből származik: simultaneous peripheral operation on-line A spooling szervezés lehetővé tette, hogy egy job I/O-műveletei alatt egy másik job számítási műveletei hajtódjanak végre. További lehetőségek: egy job kártyabeolvasása alatt egy másik job printelése hajtódik végre, miközben egy harmadik job kártyái olvasódnak be diszkről, illetve íródnak diszkre a nyomtatandó sorai. Az egyidejűleg végbemenő műveletekre mutat be példát az 12 ábra JOB: Műveletek: JOB1: Job-kártyák beolvasása diszkre (input) JOB2: CPU-számítások JOB3: Printelés diszkről (output) JOB4: Printelés diszkre (output) t (idő) 0 1.2 ábra Párhuzamos spooling feldolgozás 1.22 Multiprogramozású batch rendszerek A spooling szervezés további gyorsítást is lehetővé tett. Ez azon alapul, hogy
egyszerre több job helyezkedik el a diszken a végrehajtásra várva. Az operációs rendszernek így mindig módjában áll kiválasztani a sorra kerülő job-ot, sőt beosztani, ütemezni is a job-ok végrehajtási folyamatát (job scheduling). A job-ütemezés vezetett el a multiprogramozáshoz, ahol az operációs rendszer egyidejűleg több job-ot (programot) tart bent a memóriában, a diszken levő job-ok közül. Ezekből kiválaszt egyet, és azt elindítja Amint a job I/O-művelethez ér, a rendszer nem hagyja a CPU-t várakozni, hanem egy újabb job-ot indít el a memóriában levők közül. Amikor ez is A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 11 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 12 ► várakozni kénytelen, akkor ismét egy új job végrehajtása indul el. Végül az első job befejezi a várakozást és visszakapja a CPU-t. Ebben a
megoldásban tehát a CPU állandóan számítással van lekötve, amíg a memóriában végrehajtandó job található. A multiprogramozott rendszerekben tehát időben átlapolódik, párhuzamosan megy végbe a CPU-használat és az I/O-műveletek, melynek eredményeként megnő a rendszer áteresztőképessége, vagyis az egységnyi idő alatt végrehajtott job-ok száma. A fenti folyamatok vezérlése bonyolult döntéseket kíván az operációs rendszertől: • megoldandó a diszken levő job-ok ütemezése (job scheduling), • mivel a memóriában egyszerre több program helyezkedik el, szükség van a memória futás közbeni szervezésére, a memóriakezelés (memory management) megoldására, • ugyancsak gondoskodni kell az egyidejűleg futtatható programok közüli választásról, ami a CPU-ütemezés (CPU scheduling) problémájához vezet. Mindezekkel a könyv későbbi fejezetei részletesen is foglakoznak. 1.23 Időosztásos rendszerek A multiprogramozású batch
rendszerek olyan környezetet biztosítanak, amelyben a számítógép erőforrásai, mint pl. a CPU, memória, perifériák hatékonyan vannak kihasználva. A batch típusú rendszereknek azonban van egy számottevő hiányossága: nem teszik lehetővé, hogy a felhasználó beavatkozhasson a saját job-jának a menetébe. Egy összetettebb futtatásnak többféle kimenetele lehetséges, amelyekkel a felhasználó a vezérlőkártyák átgondolt megadásával tud foglalkozni A több lépésből álló jobokban egy lépés függhet az előzőleg kapott eredményektől Ilyenkor nehéz előre definiálni, hogy a különböző esetekben mi legyen a teendő. A másik nehézséget az jelenti, hogy a futási eredmény és memóriatartalom listái (dump-ok) alapján a felhasználó a programját csak egy új jobban tudja javítani. Így tehát nincs lehetősége arra, hogy a programot végrehajtása közben tanulmányozza és mindjárt a job-on belül módosítsa Az időosztásos (time
sharing) vagy multitask-os (multitasking) operációs rendszerek a multiprogramozás logikus továbbfejlesztései. A CPU itt is több job-ot kezel a memóriában, egyikről a másikra kapcsolva. Az átkapcsolások viszont már olyan nagy gyakorisággal mennek végbe, hogy az egyes felhasználók futás közben is be tudnak avatkozni a saját programjuk A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 12 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 13 ► működésébe. Az ilyen rendszereket ezért interaktívnak is nevezzük (interakció: közbeavatkozás) Az interaktív rendszerek on-line kommunikációt tesznek lehetővé a felhasználó és számítógép között. A rendszer válaszideje, vagyis az az idő, ami a felhasználó beavatkozása és a rendszer reagálása között eltelik, tized másodperc nagyságrendű. A felhasználó utasításokat tud adni az
operációs rendszernek, vagy közvetlenül módosíthatja a programját, amire azonnali választ kap. Az ilyenkor szokásos bemeneti eszköz a klaviatúra, míg a válaszok többnyire a monitoron érkeznek A legtöbb rendszer interaktív szövegszerkesztővel rendelkezik a programok bevitelére, másrészt pedig interaktív nyomkövetővel (debugger) a futások elemzésére. Annak érdekében, hogy a felhasználó a programkódot és az adatokat kényelmesen tudja kezelni, egy ún. on-line fájlrendszert kell fenntartani A programok forráskódja, tárgykódja, továbbá az adatok külön fájlokban (állományokban) helyezkednek el. Az adatfájlok lehetnek numerikusok, szövegesek (alfabetikusak), valamint alfanumerikusok (betű és szám egyszerre) A fájlok ún. könyvtárakba (directory) vannak szervezve A különböző felhasználókhoz tartozó fájlok elérését az operációs rendszer felügyeli, illetve vezérli. A fájlkezelés (file management) az operációs rendszerek
fontos funkciója Az erre alkalmazott megoldások nagymértékben kihatnak az üzemelés hatékonyságára és biztonságára. Az időosztásos rendszerek arra szolgálnak, hogy a felhasználók között időben egyenletesen megosszák a számítógép erőforrásait. Mindegyik felhasználó programja helyet kap a memóriában Egy-egy program csak rövid időre kap futási lehetőséget, a rendszer folyamatosan átkapcsol egy másik program futtatására. Ilyen átkapcsolás történik az időigényes interaktív I/O-műveletek alatt is, annak érdekében, hogy a CPU ne várakozzék feleslegesen Az átkapcsolások gyakorisága olyan, hogy az egyes felhasználók úgy érzik, mintha a számítógép ”csak nekik dolgozna” A ma használatos operációs rendszerek többsége mind a batch, mind pedig az időosztásos üzemmódot el tudja látni. A batch feldolgozás olyankor kerül előtérbe, amikor egy nagyobb job hajtandó végre kevés interakcióval Egy másik ok lehet az is, hogy
a felhasználó nem tud, vagy nem kíván jelen lenni a futtatásnál. 1.24 Személyi számítógépes rendszerek A hardverköltségek folyamatos csökkenése lehetővé tette, hogy egyetlen felhasználóhoz lehessen rendelni egy számítógépet. Az ilyen gépeket ne- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 13 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 14 ► vezzük személyi számítógépnek (personal computer vagy PC). Ezek tipikus I/Oeszközei: klaviatúra, egér, monitor, nyomtató (pl lézer printer) A személyi számítógépek jóval kisebbek és olcsóbbak, mint a nagyszámítógépek. Ezzel függ össze a mikroszámítógép elnevezésük is Az ilyen gépeknél nem cél a CPU és a perifériák optimális kihasználása. Ehelyett a felhasználói kényelem került előtérbe A jelenleg legelterjedtebb operációs rendszer, a Microsoft Windows is
ezt a célt szolgálja. Az egyedi felhasználás számos más funkciót is feleslegessé tett. Ilyen pl a fájlkezelés és a hozzá tartozó fájlvédelem. Ugyanakkor napjainkban egyre erősödik az a tendencia, hogy a PC-ket hálózatokba kapcsolva, több más PC-vel együttműködve használják fel. Ezzel többfelhasználós üzemeltetés áll elő, ami már újra igényli a szervezett fájlkezelést és az illetéktelen hozzáférés elleni védelmet. Általánosan megállapítható, hogy a nagyszámítógépekre kidolgozott elvek jó része alkalmazható a személyi számítógépek operációs rendszereinél is. Ezt támasztja alá a nagyteljesítményű személyi számítógépek, az ún munkaállomások (work station) elterjedése, amelyeket többnyire hálózatokban alkalmaznak A PC-k teljesítményének gyors növekedése és a hálózati alkalmazás végső soron azt fogja eredményezni, hogy elmosódik a határvonal a nagyszámítógépek és a PC-k között. Ez a
tendencia az operációs rendszereknél is jelentkezni fog. Jó példa erre a nagygépekhez kifejlesztett UNIX operációs rendszer (Bell Laboratories, USA), amelynek a fő elvei átkerültek a PC-khez fejlesztett IBM OS/2, illetve Microsoft Windows XP operációs rendszerekbe. 1.25 Párhuzamos rendszerek A használatban levő számítógépek többsége csak egyetlen CPU-t tartalmaz, vagyis egyetlen processzort. Ugyanakkor egyre komolyabb igény jelentkezik a többprocesszoros (multiprocesszoros) rendszerek iránt. Az ilyen gépekben egynél több processzor található, amelyek szorosan együttműködnek, közös órajellel, megosztva egymás között az összes erőforrást Legfőbb előnyük a megnövelt számítási teljesítmény, ami abból adódik, hogy ugyanabban az időben annyi program futhat párhuzamosan, amennyi a processzorok száma. (Az IBM sakkozó gépe, a Deep Blue pl 256 Intel Pentium processzort tartalmazott. A gép 1997-ben legyőzte az akkori világbajnok
Kaszparovot) A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 14 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 15 ► A multiprocesszoros rendszerek használatának másik oka az, hogy nagymértékben megnövelik a megbízhatóságot. Megfelelő szervezéssel, egy processzor meghibásodása esetén a többiek veszik át a hibás egység feladatát. Az olyan rendszereket, amelyek saját meghibásodásuk esetén is el tudják látni feladatukat, hibatűrő rendszereknek (fault-tolerant systems) nevezzük. Használatukra elsősorban az űrhajókban, repülőgépeken, hadászatban, atomerőművekben, pályaudvari irányítórendszerekben, ipari folyamatoknál kerül sor, ahol számítási és vezérlési funkciókat látnak el Ezek többnyire nem általános célú számítógépek, hanem egy adott funkcióra kialakított rendszerek, amelyekben a processzorok a
célberendezés különböző helyeire kerülnek. Szokás még ezért beágyazott számítógépes rendszernek is nevezni őket (embedded computing systems). Az itt említett alkalmazásoknál elsődleges cél a biztonságos működés, amelyet mind a hardver, mind pedig a szoftver tervezésében és kivitelezésében kiemelten kell figyelembe venni. Az ilyen jellegű rendszerek elnevezése: biztonságkritikus rendszer (safety-critical system). A párhuzamos számítógépek operációs rendszerében kétféle szervezés terjedt el: • A szimmetrikus megoldásban mindegyik processzor ugyanannak az operációs rendszernek egy példányát futtatja (pl. UNIX-ot), és ezek a példányok egymással kommunikálnak. • Az aszimmetrikus megoldásban egy kitüntetett vezérlő processzor működik, míg a többi processzor saját megszabott feladattal van ellátva. 1.26 Elosztott rendszerek Az informatika területén újabban egy olyan irányzat kezd megerősödni, amelyben a számítási
feladatokat több, önálló műveletvégző elem (csomópont) között osztják meg. A csomópontok saját órajellel és memóriával rendelkeznek, egymás között nagysebességű csatornákon (hálózati kapcsolatokon) keresztül kommunikálnak. Ezeket a rendszereket elosztott rendszereknek nevezik Az ilyen rendszerek csomópontjai mind teljesítményben, mind funkcióban igen széles körben változhatnak. Lehetnek kis mikroprocesszoros rendszerek, PC-k, munkaállomások, valamint általános célú nagyszámítógépek. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 15 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 16 ► Az elosztott rendszerek alkalmazásának alapvető okai: • Erőforrások megosztása: A különböző helyeken levő felhasználók más helyek erőforrásait tudják használni, pl. nyomtatót, fájlokat, adtabázist, illetve programokat •
Nyílt és méretezhető rendszer készítése: Az elosztott rendszerek tipikusan nyílt rendszerek, vagyis támogatják a rendszer új komponensekkel történő bővítését. Erre a tulajdonságukra építve a rendszer kapacitását növekvő terhelés esetén könnyen lehet bővíteni, vagyis méretezni • Konkurens működés: Az elosztott rendszerek lehetőséget adnak folyamatok valóságos párhuzamos végrehajtására. Ha egy számítási feladatot egy időben futtatható részekre lehet osztani, akkor ezeket különböző helyekhez lehet rendelni, s így lehetőség van a részfeladatok párhuzamos végrehajtására. Ezt a megoldást terhelésmegosztásnak nevezik • Hibatűrés, megbízhatóság: Ha egy hely meghibásodik, a többi hely képes lehet arra, hogy átvegye feladatának megoldását. • Kommunikáció: A különböző helyek számítási folyamatai egymás között információt tudnak cserélni a kommunikációs hálózaton keresztül. Ugyanez a lehetőség
áll fenn a felhasználók között is Ezáltal csoportos munkavégzés (groupwork), valamint csoportos munkafolyamatok (workflow) hajthatók végre. A csoportos munkavégzést támogató szoftver-termékeket szokás még a groupware megjelöléssel is illetni Ilyen pl az IBM cég Lotus-Notes nevű irodaautomatizálási szoftvere. Kliens-szerver típusú hálózati kapcsolatok: A PC-k teljesítményének növekedésével a központosított rendszer-architektúra fokozatosan háttérbe szorult. A központi számítógéphez kapcsolódó terminálok helyét mára már többnyire PC-k töltik be Ennek megfelelően a felhasználói interfész funkciói is egyre inkább a PC-kre kerülnek át. A központosítás mai formája az ún kliens-szerver (client-server) felépítésben nyilvánul meg (13 ábra) Itt a központi szerepet a szerver számítógép játssza, amely a kliens gépek által generált igényeket elégíti ki. A szerver rendszer két kategóriába tartozhat: • Számítási
szerver: A kliens által kért számítási feladatot végzi el, és az eredményeket elküldi a kliensnek. • Fájl-szerver: Olyan fájlkezelő interfészt biztosít, amely a kliensek számára fájlok létrehozását, módosítását, beolvasását, ill. törlését teszi lehetővé. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 16 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Kliens Kliens Kliens Vissza ◄ 17 ► Kliens Hálózat Szerver 1.3 ábra A kliens-szerver rendszer általános felépítése Egyenrangú hálózati kapcsolatok Az Internet elnevezésű hálózati architektúra az 1980-as években kezdett elterjedni az USA-ban. Azóta világméretű felhasználói köre alakult ki Ez a kör ma is rohamosan bővül: 2001-ben az Internethez csatlakozó számítógépek mennyiségét 30 millióra lehetett becsülni. Ezek döntő többsége személyi
számítógép. Először az elektronikus levelezés (electronic mail, E-mail) és a fájl-átvitel (file transfer) volt a legfőbb szolgáltatás, mint Internet-alkalmazás. Az igazi fellendülést az 1990-es évek közepén megjelent újabb internetes alkalmazói rendszer, a Világháló hozta (World Wide Web, WWW, röviden Web). A Web-hez való csatlakozás lehetővé tétele ma már elengedhetetlen követelmény egy számítógépes rendszernél. A korszerű operációs rendszerek tartalmazzák azokat a komponenseket, amelyek a Web-es hozzáférést és adatforgalmat biztosítják. Ilyen operációs rendszerek pl a Windows, OS/2, UNIX, valamint a Linux is. A Web felhasználásával történő adatforgalom bármelyik két számítógép (host) között létre tud jönni, ami egyenrangú (angol elnevezéssel peer-to-peer) hálózati kapcsolatot jelent 1.27 Valós idejű rendszerek A valós idejű (real time) rendszerek működése szoros időbeli összhangban kell hogy legyen azzal
a külső folyamattal, amelyet a rendszer felügyel vagy vezérel. Ilyen pl egy ipari folyamat vezérlése, vasúti pályaudvar irányítása, űrrepülés felügyelete, rakétairányítás, vagy gyártási robotok vezérlése. A valós idejű operációs rendszer jól definiált fix időkorlátokkal működik. Ez azt jelenti, hogy bármelyik külső történéshez, eseményhez létezik egy időtartam, amelyen belül a számítógépnek előírt módon reagálnia kell. (Emiatt szokás még a reaktív rendszer elnevezést is használni.) Az időkorlát túllépése hibás működést eredményez. Például késedelem esetén egy robot kárt okoz a szalagon haladó autóban, vagy egy cirkáló rakéta téves célpont felé repül el. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 17 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 18 ► 1.3 A számítógépek
felépítése és működése A következőkben rövid áttekintést adunk a számítógépek felépítéséről és működéséről. Mindezt természetesen az operációs rendszerekhez kapcsolódóan tesszük Először az I/O-mechanizmusokat tekintjük át, azután pedig az adattárolási struktúrát. 1.31 A számítógépek felépítése A modern, általános célú számítógépek a CPU-ból, valamint különböző vezérlő egységekből állnak, amelyeket egy közös busz (adatsín) köt össze. Ezen az ún. rendszerbuszon keresztül lehet elérni a memóriát is Mindegyik vezérlő egység egy adott eszközhöz tartozik: pl. mágneslemez, mágnesszalag, monitor, nyomtató (14 ábra) A CPU és a vezérlők egyidejűleg tudják végezni a tevékenységüket, miközben versenyben állnak a közösen használt memória elérésében. Az elérési forgalom rendezett menetét külön memóriavezérlő biztosítja. CPU Diszkek Nyomtató Szalagegységek Diszkvezérlő
Nyomtatóvezérlő Szalagegység -vezérlő Memóriavezérlő Memória 1.4 ábra A számítógép felépítése A számítógép operációs rendszerének elindítását egy speciális indítóprogram (bootstrap program) végzi, amely előzőleg a hardver összes kezdeti állapotértékét is beállítja. Induláskor a rendszer első tevékenysége a saját kezdeti értékeinek beállítása A memóriában végrehajtás alatt levő mindenkori önálló programegységet szokás még folyamatnak, illetve processznek is ne- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 18 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 19 ► vezni. (Az angol elnevezés: process) Az első folyamat végrehajtása után az operációs rendszer egy olyan eseményre várakozik, amely a hardvertől, vagy a szoftvertől ered. Ezt az eseményt egy ún megszakítás (interrupt) formájában
észleli a rendszer A hardver bármikor indíthat megszakítást a CPU felé, a rendszerbuszon keresztül. A szoftver azáltal indít megszakítást, hogy végrehajt egy speciális műveletet, amelyet rendszerhívásnak (system call) nevezünk. Interruptot sokfajta esemény indíthat el: pl. egy I/O-művelet befejezése, nullával való osztás, érvénytelen memória-hozzáférés, vagy valamilyen szolgáltatás kérése az operációs rendszertől. A különböző fajtájú megszakítások feldolgozására külön rutinok szolgálnak Amikor a CPU megszakítást kap, azonnal felfüggeszti az éppen folytatott tevékenységét, és egy fix helyre adja át a végrehajtás vezérlését. Ez a fix hely rendszerint annak a rutinnak a kezdő címe, amely az adott megszakítás lekezelését hajtja végre. Mihelyt ez a rutin lefut, a CPU visszatér a korábban megszakított számítás folytatásához. A modern operációs rendszerek üzemelése lényegében a megszakítások egymás utáni
feldolgozására épül. Amikor nincsen végrehajtandó processz, és nincs I/O-kiszolgálás, sem pedig felhasználói kérés, az operációs rendszer tétlenül fog várakozni a soron következő eseményre. 1.32 I/O-struktúra Egy I/O-művelet kezdetén a CPU betölti a megkívánt periféria vezérlőjének regisztereit. A regisztertartalom alapján a vezérlő megkezdi az adatátvitelt Ha ez pl olvasás, akkor az adatok a vezérlő lokális pufferjébe (közbülső tárolójába) kezdenek bekerülni a külső eszköztől Amint az adatok behozatala megtörtént, a vezérlő közli a CPU-val, hogy befejezte a működését, amire a CPU egy interruptot ad ki. A felhasználói processzekhez kapcsolódó I/O-műveletek kétféle folyamatban mehetnek végbe: • szinkron I/O: a vezérlés csak az I/O-művelet végrehajtása után tér vissza a felhasználói folyamathoz, • aszinkron I/O: a vezérlés nem vár az I/O-művelet befejezésére, hanem visszatér a felhasználói
folyamathoz. Ezalatt folytatódik az I/Oművelet, ami így hatékonyabb rendszerműködést eredményez Az I/O-műveletek adatátvitele alatt a CPU kétféle megszakítási rendszerben működhet. A lassú perifériák esetében (klaviatúra, nyomtató) a CPU A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 19 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 20 ► minden egyes karakter átvitelekor megszakítást ad ki. Ez nem terheli le a CPU-t, mivel annak sebességéhez viszonyítva csak ritkán lép fel megszakítás. (Ez általában 1-2 ezreléknyi idő) A nagysebességű perifériáknál azonban más a helyzet (pl mágnesszalag, diszk) Ezek adatátvitelére külön gyorsító megoldást dolgoztak ki: a közvetlen memória-hozzáférési vagy DMA módszert. (DMA: Direct Memory Access) Ebben a megoldásban az I/O-eszköz vezérlője egy teljes adtablokkot visz át a
saját pufferjéből a memóriába, vagy onnan a pufferjébe, anélkül, hogy közben interrupt lépne fel. A megszakításra csak a blokk teljes átvitele után kerül sor A puffer mérete készülékenként változó, tipikusan 128tól 4096 bájtig terjedhet Amíg a DMA-vezérlő az adatátvitelt végzi, a CPU szabadon hajthat végre más feladatokat. 1.33 Memória-struktúra A végrehajtandó programoknak mindig a központi memóriában, az operatív tárban kell lenniük. Ez az egyetlen nagyobb tároló, amit a CPU közvetlenül el tud érni és innen tölti be a program utasításait az ún utasításregiszterébe Ezt követően kerül sor egy-egy utasítás dekódolására, értelmezésére, majd végrehajtására Az utasítások a memória és a CPU között rendszerint adatokat is mozgatnak. A CPU maga is intenzíven használ közbülső tárolókat, az ún. regisztereket, amelyek a számítógépen belül a leggyorsabb hozzáférést teszik lehetővé. Ugyancsak a sebesség
növelését szolgálja a különálló gyorsmemória (cache), amely lényegesen gyorsabb hozzáférést nyújt a CPU számára, mint a normál memória. A cache-be, megfelelő szervezéssel, azok a programutasítások, illetve adatok töltődnek be, amelyekkel a futást lényegesen lehet gyorsítani Az ideális megoldás az lenne, ha a programok és az adatok állandóan a memóriában lennének. Ez azonban két ok miatt nem lehetséges: • a központi tár rendszerint túl kicsi méretű a tárolási igény kielégítésére, • másrészt pedig nem képes megőrizni a tartalmát a tápfeszültség kikapcsolása vagy kimaradása után. Mindezért a számítógépeknél egy másodlagos tárolási lehetőséget is fenn kell tartani, a központi tár kiterjesztéseként. A másodlagos tárolók alkalmasak kell hogy legyenek nagy mennyiségű program és adat állandó megőrzésére. A legelterjedtebb másodlagos tár a mágneslemez (diszk, angolul disk), amely programokat és
adatokat egyaránt tárol. A programok a diszkről A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 20 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 21 ► töltődnek be a memóriába, amikor a futtatásukra kerül sor. Az általuk feldolgozandó információ forrása és rendeltetési helye többnyire ugyancsak a diszk. Ezért a mágneslemez adatforgalmának hatékony véghezvitele alapvető feladata az operációs rendszereknek. A másik elterjedt másodlagos tároló a mágnesszalag (magnetic tape). Jóllehet nagymennyiségű adat tárolására alkalmas, az adatok véletlen elérési ideje mintegy ezerszer hosszabb, mint a mágneslemeznél. Emiatt adatkimentésre, ritkán használt információ tárolására, illetve egyik rendszerről a másikra történő információátvitelre alkalmazható leginkább. A számítógépek tároló rendszereit hierarchikus
szintekhez rendelhetjük sebességük és költségük alapján. A felsőbb szintek a költségesebbek, viszont gyorsabbak. Lefelé haladva a hierarchián a bitenkénti költség csökken, míg az elérési idő növekszik. Az osztályozás az alábbi sorrendben végezhető el: • • • • • • • • regiszterek gyorsmemória (cache) központi memória elektronikus diszk mágneses diszk optikai diszk magneto-optikai diszk mágnesszalag A fenti felsorolásban az első három tároló elveszti tartalmát a tápfeszültség megszűnésekor, a többi viszont nem. 1.4 Az operációs rendszerek felépítése Az operációs rendszerek azt a számítógépes környezetet biztosítják, amelyen belül a programok végrehajtódnak. Az egyes rendszerek különböznek belső szervezésükben, összeállításukban. Tervezésük és létrehozásuk rendkívül komplex fejlesztési feladat A működés fő céljaitól függ az, hogy a fejlesztők milyen stratégiát,
szoftvertechnológiát, és milyen elveket, algoritmusokat alkalmaznak a megvalósításban. Néhány alapvető szempont a fejlesztéshez: • az ellátandó szolgáltatások köre, • a felhasználók számára nyújtott interfész, A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 21 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 22 ► • a rendszer komponensei és a köztük levő kapcsolat, • feldolgozási teljesítmény, • védelem és biztonság. A következőkben ezeknek a szempontoknak az alapján fogjuk az operációs rendszereket áttekinteni. Ehhez kapcsolódóan azokat a komponenseket ismertetjük, amelyek a legtöbb modern operációs rendszerben előfordulnak. 1.41 Folyamatkezelés (process management) A folyamat (processz) fogalmát általában szélesebb értelemben használjuk, mint egy végrehajtás alatt levő programot: tipikusan egy batch
job maga is egy folyamat, egy időosztásos felhasználó programja is egy folyamat, csakúgy, mint egy spooling üzemmódú nyomtatás végrehajtása is az. Egy folyamat nem más, mint egy elvégzendő munkaegység a rendszerben Egy processz végrehajtása erőforrások felhasználását kívánja meg: pl. CPU-időt, memóriát, fájlokat, I/O-eszközöket. A folyamatkezelés az egyes folyamatok által igényelt erőforrások szervezett, összehangolt szétosztását (allokálását) is magában foglalja. Az operációs rendszer a következő tevékenységeket látja el a folyamatok kezelésében: • Felhasználói folyamatok, illetve rendszerfolyamatok létrehozása vagy megszüntetése. • Folyamatok felfüggesztése, illetve újrakezdése. • Egyidejű folyamatok szinkronizálásának megoldása. • Folyamatok közti kommunikáció biztosítása. • Holtpontok (leállási helyzetek) kezelésének megoldása. Ezekkel a tevékenységekkel a következő fejezetben részletesen
foglalkozunk. 1.42 Memóriakezelés A központi memória a CPU és az I/O-eszközök által gyorsan elérhető információ tárolására szolgál. A végrehajtandó program is a memóriába töltődik be, miután pedig lefut, felszabadul az általa lefoglalt hely. Az operációs rendszer a következő főbb feladatokat látja el a memória kezelésében: A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 22 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 23 ► • Nyomon követi, hogy a memória mely részei vannak használatban, és mely programok által. • Meghatározza, hogy melyik processzet kell betölteni a memóriába, ha ott hely szabadul fel. • Memóriahelyeket jelöl ki, illetve von el az igényektől függően. A memóriakezelésre szolgáló technikákkal a 3. fejezet foglalkozik részletesebben 1.43 Fájlkezelés A fájlok kezelésének folyamata
kívülről is jól érzékelhető egy operációs rendszer használatakor. Az egyes tárolótípusok fizikailag különböző módon végzik a rajtuk elhelyezett fájlok mozgatását Az operációs rendszer ezzel szemben egységes logikai módon jeleníti meg a tárolt információt, ahol a logikai tárolási egység a fájl. Egy fájl a létrehozója által meghatározott, összefüggő információ gyűjteménye Programot és adathalmazt egyaránt képviselhet A fájlok rendszerint könyvtárakba vannak szervezve Az operációs rendszer a következő tevékenységeket látja el a fájlokkal kapcsolatosan: • • • • Fájlok létrehozása, illetve megszüntetése. Könyvtárak létrehozása, illetve megszüntetése. Fájlokra és könyvtárakra vonatkozó műveletek végzése. Fájlok mozgatása másodlagos tároló és a memória között. E tevékenységek részletezése a 3. fejezetben található 1.44 I/O-kezelés Az operációs rendszernek egyik fontos sajátsága, hogy
a felhasználó előtt elfedik a bemeneti/kimeneti eszközök hardver sajátosságait. A UNIX rendszerben például a beépített I/O alrendszer gondoskodik erről. Az I/O alrendszer a következő elemekből áll: • Memóriakezelő komponens, amely a közbülső tárolással (pufferelés), a cache-sel, valamint a spoolinggal foglalkozik. • Általános készülékmeghajtó interfész. • Meghajtók (driver-ek) a különböző hardver eszközökhöz. (Ezekbe van beépítve az eszköz sajátosságainak kezelése.) Ezekkel a kérdésekkel a 4. fejezetben foglalkozunk részletesebben A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 23 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 24 ► 1.45 Másodlagos tárolók kezelése Egy számítógépes rendszer elsődleges funkciója az alkalmazói programok végrehajtása. Ezek a programok a végrehajtás alatt a központ
memóriában kell hogy legyenek, az általuk kezelt adatokkal együtt. Mivel a központi memória mérete általában nem teszi lehetővé, hogy a programok és adataik elférjenek benne, ezért szükség van egy másodlagos tárolóra is a főmemória mellett. A legtöbb modern számítógépen erre a célra mágneslemezt használnak on-line tárolási közegként, mind a programok, mind pedig az adatok számára. A programok többsége a diszken van tárolva, és innen töltődik be a memóriába. Ilyenek például a fordítóprogramok, az assemblerek, és a szövegszerkesztők is A programok által feldolgozott adatok forráshelye (input) és rendeltetési helye (output) ugyancsak a diszk. Mindebből kitűnik, hogy a mágneslemezes tároló megfelelő kezelése központi jelentőségű egy számítógépes rendszerben. Az operációs rendszer a következő főbb tevékenységeket látja el a diszkkel kapcsolatban: • Szabad helyek kiválasztása. • Tárolási helyek kijelölése.
• Diszk-ütemezés (disk scheduling). Mivel a diszkhasználat nagyon gyakori, ezért a teljes rendszer üzemelése szempontjából sok múlik azon, hogy milyen az erre kialakított alrendszer, és milyen algoritmusok működnek benne. Mindezzel a 4 fejezetben foglakozunk bővebben 1.46 Hálózatkezelés Az elosztott rendszerekben tulajdonképpen önálló számítógépek működnek együtt, amelyek különböző kommunikációs vonalakon váltanak információt egymással. Az információforgalom egy ún kommunikációs hálózaton keresztül megy végbe. A hálózatba kötött elosztott rendszer egymástól eltérő rendszereket foglalhat magában, amelyben a felhasználók az összes különböző erőforrást elérhetik. Az operációs rendszerek általában a fájlokhoz való hozzáférésen keresztül teszik lehetővé a teljes körű kihasználást Egy erőforrás megosztása, vagyis több processzor által történő elérése az alábbiakat teszi lehetővé: • a
számítási sebesség növekedését, • a funkciók körének bővülését, A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 24 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 25 ► • az adatokhoz való hozzáférés körének szélesedését, • a megbízhatóság javulását. A különböző felépítésű és működtetésű számítógépek közötti adatforgalom az ún. kommunikációs protokollok (communication protocol) rögzített szabályainak betartásával megy végbe A protokollok szabványosított, nemzetközileg elfogadott előírásokat tartalmaznak Szerepükből adódóan nagymértékben befolyásolják az elosztott rendszerek használhatóságát Jó példa erre a Világháló (Web), amelyben az információ-megosztásra egy új elérési módszert alkalmaztak. Ebben a megoldásban nincs szükség arra, hogy egy felhasználó bejelentkezzen (log
in-t adjon meg) ahhoz, hogy egy távoli erőforrást elérjen. Ezt a http nevű protokoll (hypertext transfer protocol) teszi lehetővé, amely közvetlen elérést biztosít a felhasználó számára. A kérés után a távoli erőforrásról megérkezik az információ, ami lehet pl. szöveg, kép, vagy újabb információhoz való kapcsolódás, ún. link Ennél a pontnál érdemesnek tartjuk megemlíteni, hogy az elosztott hardver környezetben működő operációs rendszereknek két típusát különböztetjük meg: az egyik az elosztott operációs rendszer, a másik pedig a hálózati operációs rendszer. Az elosztott operációs rendszerek a felhasználói feladatok megoldásához szükséges erőforrásokat automatikusan határozzák meg és jelölik ki, allokálják. Ez az allokáció az erőforrások egyenletes és hatékony elosztását szolgálja. Például az elosztott operációs rendszer a legtöbb szabad memóriával rendelkező egységhez továbbít egy folyamatot,
vagy egy szabad perifériához egy nyomtatást. Ezzel szemben a hálózati operációs rendszer felhasználója saját maga dönti el és választja meg a hálózatban elérhető azon erőforrásokat, amelyeket ténylegesen igénybe akar venni. Az elosztott rendszerek és a hálózatok részletesebb tárgyalása az 5. fejezetben található 1.47 Védelmi rendszer Multiprogramozott rendszerekben a folyamatok párhuzamosan hajtódnak végre, osztozva a rendszer erőforrásain. Az operációs rendszernek gondoskodnia kell arról, hogy az egyes folyamatok működése ne zavarjon más folyamatokat, ne lehessen köztük semmiféle „ütközés”, vagy „összeakadás”. Ennek érdekében olyan mechanizmusokat kell beépíteni, amelyek biztosítják, hogy a különböző erőforrásokat (fájlokat, memóriarészeket, CPU-t stb.) csak azok a folyamatok használhassák, amelyek erre jogosultságot kaptak az operációs rendszertől A dokumentum használata | Tartalomjegyzék | Irodalom
Vissza ◄ 25 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 26 ► Védelemnek nevezzük eljárásoknak és módszereknek azon rendszerét, amely a számítógép erőforrásainak programok, folyamatok, ill. felhasználók által történő elérését ellenőrzi és szabályozza A védelem fogalmát fontos megkülönböztetnünk a rendszer biztonságának fogalmától. A biztonság annak a mértéke, hogy mennyire lehetünk bizonyosak a számítógépes rendszer, ill. a rendszerben tárolt adatok sérthetetlenségében A védelem egyaránt növeli a megbízhatóságot és a biztonságot is. Utóbbit például úgy, hogy megakadályozza a felhasználók téves tevékenységét, másrészt pedig kizárja az illetéktelen hozzáférést. A védelem és biztonság kérdéseit a 6. fejezetben tárgyaljuk részletesebben 1.48 Parancsértelmező rendszer Az operációs rendszerek egyik
legfontosabb komponense a parancsértelmező (command interpreter), amely az interfész a felhasználó és a rendszer között: a felhasználói felületet adja. Egyes rendszerek a belső magjukban tartalmazzák a parancsértelmezőt Mások, mint pl az MS-DOS és UNIX, a kerneltől független programot használnak, amely akkor indul, amikor egy job kezdődik, vagy egy felhasználó bejelentkezik a rendszerbe. A parancsok többek között folyamatok létrehozására és lebonyolítására, I/O-kezelésre, memória és másodlagos tárak kezelésére, fájlok elérésére, védelemre, továbbá hálózatkezelésre szolgálnak. 1.49 A komponensek funkcionális szervezése A következőkben röviden áttekintjük az egyes komponensek közötti funkcionális kapcsolatokat. Az 15 ábra az általános szervezési struktúrát mutatja be, amelyben a blokkok közötti összekötések információs, ill. vezérlési kapcsolatokat jelentenek A folyamatkezelő a hardver-processzor fölött
működve teremti meg a folyamatok végrehajtási környezetét. Az erőforrások szétosztását a memóriakezelő, fájlkezelő, valamint a másodlagos tárolókat (diszkeket) kezelő komponensekkel együttműködve végzi el. A fájlkezelő ugyancsak szoros együttműködésben van a memóriakezelővel, továbbá a másodlagos tárolókat kezelő komponensekkel, a fájlok kiírásának és beolvasásának szervezése során. Az I/O-kezelést végző összetevő a perifériák közvetlen elérésével kapcsolódik be a teljes működésbe A védelmi komponens a folyamtok biztonságos vezérlése érdekében a folyamatkezelővel, az illetéktelen külső beavatkozások kivédésére pedig a hálózatkezelővel tart fenn folyamatos kapcsolatot. A hálózatkezelő a kül- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 26 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 27
► világgal történő információcsere szervezése során együttműködik a folyamatkezelővel, valamint a fájlkezelővel. Külső környezet Hálózati kapcsolat Felhasználók Parancsértelmezés Hálózatkezelés Védelmi rendszer Folyamatkezelés Fájlkezelés Másodlagos tárolók kezelése Memóriakezelés Processzor I/O-kezelés Központi memória I/O eszközök Számítógép - hardver 1.5 ábra Az operációs rendszerek szervezési struktúrája A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 27 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 28 ► 1.5 Az operációs rendszerek szolgáltatásai A különböző operációs rendszerek szolgáltatásai általában eltérőek, de vannak olyan szolgáltatások, amelyek közösek bennük. Ezek a következők: • Program végrehajtása: Abból áll, hogy a program betöltődik a memóriába és
lefut, akár normálisan, akár hibaleállással. • I/O-műveletek: Hatékonysági és biztonsági okok miatt a felhasználó általában nem tudja közvetlenül vezérelni az I/O-eszközöket. Ez az operációs rendszer feladata, amely a futásban levő programok I/Okérésének teljesítéséhez nyújt szoftvereszközt. • Fájlkezelés: A fájlokba való írást és fájlok beolvasását teszi lehetővé a program számára. Ide tartozik még a fájlok név szerinti létrehozása, illetve törlése • Kommunikáció: Számos esetben van szükség arra, hogy egy processz információt váltson egy másikkal. Ilyen igény felléphet egyazon számítógépen belül, másrészt pedig két olyan gép processze között, amelyek közös hálózatba vannak kötve. Az operációs rendszer az első esetben a megosztott memórián keresztül intézi a kommunikációt, a másodikban pedig a gépek közti üzenetküldéssel. A hálózati üzenetküldés szigorúan meghatározott
információs egységekben, ún csomagokban történik • Hibalokalizálás: Az operációs rendszer állandó felügyeletet végez a működés közben fellépő hibák felismerése, detektálása végett. Hiba léphet fel többek között a CPU-ban, a memóriában, I/O-készülékben (pl. adatátviteli hiba, paritáshiba), hálózati kapcsolatban, a felhasználói programban (pl. túlcsordulás vagy túlcímzés) A rendszernek mindegyik detektált hibatípushoz megfelelő intézkedést kell tennie, a konzisztens működés biztosítására A további funkciók már nem a felhasználó segítésére szolgálnak, hanem inkább arra, hogy magának az egész rendszernek a működését tegyék hatékonnyá: • Erőforrások kijelölése (allokációja): Amikor több felhasználó van, vagy több job fut egyidejűleg, az erőforrásokat ki kell osztani számukra. Az operációs rendszer sokféle erőforrást kezel: CPU, memória, fájlok, I/O-eszközök, mágneslemez, mágnesszalag,
nyomtató, modemek stb. Az optimális üzemeltetés érdekében a rendszer jól kimunkált algoritmusokat, rutinokat alkalmaz A CPU kihasználására pl külön üte- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 28 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 29 ► mező rutinok szolgálnak, amelyek számításba veszik a CPU sebességét, a végrehajtandó processzeket, a szabad regisztereket, és egyéb más tényezőket. • Elszámolás: Az egyes felhasználók erőforrás-lekötésének mérésére és nyilvántartására szolgál. Ennek alapján lehet a számlákat kiállítani (pl gépidőköltség), vagy kihasználási statisztikát készíteni. A statisztikák egyébként a további kutatások és fejlesztések, illetve a teljesítmény növelésének alapját is képezhetik. • Védelem és biztonság biztosítása: A rendszer összes erőforrásának
egyidejű használatakor elengedhetetlen, hogy az ezekhez való hozzáférés ellenőrizve és összehangoltan történjen a különböző processzek között. Ugyancsak szükség van arra, hogy a rendszer védve legyen a jogosulatlan külső felhasználóktól. 1.6 Rendszerfelépítés A modern szoftver-technológia az olyan fejlesztési megközelítést támogatja, melyben a teljes rendszer elkülönített modulokból épül fel. Mindegyik modul a rendszer jól definiált része kell legyen, gondosan megtervezett inputtal, outputtal és funkcióval. Mindez vonatkozik az operációs rendszerek fejlesztésére is Tipikus modul felépítésű rendszerek pl az MS-DOS és a UNIX A modulokra való bontás sokféleképpen történhet. Az egyik elterjedt és előnyös megoldás az, amelyben az operációs rendszert ún. rétegekre (szintekre) bontják, ahol egy réteg az alatta levő rétegek tetején helyezkedik el. A hardvert tekinthetjük a rendszer legalsó rétegének (0-dik réteg),
míg a legfelső (N-edik) a felhasználói interfészt valósítja meg. A rétegszerkezetű rendszer általános felépítését az 16 ábra mutatja Réteg szerkezet esetén a modulok érintkezése szabályozva van: egy rétegben az adott rétegben megvalósított rutinokon kívül csak az alatta levő réteg rutinjai hívhatóak. Az egyes rétegek általában csak rutinjaik egy részét engedik más rétegek számára használni A mások által is hívható rutinok halmazát egy interfészben (felületben) definiálják Az ilyen szervezésű modularitás előnye egyrészt az, hogy az áttekinthető rendszerfelépítést ad, másrészt pedig lehetővé teszi, hogy fejlesztéskor a rétegeket lentről felfelé, egymás után teszteljük, csak azután lépve tovább, amikor egy rétegről már eldőlt, hogy hibátlanul működik. A rendszer karbantartása, fejlesztése is könnyebb, hiszen ha a rétegek interfészeit nem változatjuk meg, egy réteg megvalósítása könnyen
változtatható, a többi rész változatlanul hagyása mellett. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 29 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom alkalmazás Vissza ◄ 30 ► alkalmazás 4. réteg 3. réteg réteg által használt adat 2. réteg rétegek közötti interfészek 1. réteg hardver 1.6 ábra Réteg szerkezetű rendszer A legelső réteges tervezést a THE nevű operációs rendszernél alkalmazták az Eindhoveni Műszaki Főiskolán, E. W Dijkstra irányítása alatt (Technische Hogeschool Eindhoven, Hollandia, 1967) Az itt definiált hat réteg a következő volt (1.7 ábra): 5. réteg: felhasználói programok 4. réteg: pufferelés az I/O-eszközök számára 3. réteg: operátori konzol meghajtója 2. réteg: memóriakezelés 1. réteg: CPU-ütemezés 0. réteg: hardver platform 1.7 ábra A THE rendszer rétegfelépítése A réteges
tervezést azóta már több operációs rendszernél alkalmazták: pl. a UNIX-nál, az IBM OS/2-jénél, vagy a Microsoft Windows XP-jénél is. Ilyen megoldást a legújabb fejlesztésekben is alkalmaznak, a hatékonyság fokozása érdekében. Mindehhez még annyit teszünk hozzá, hogy az általános modul szervezésű rendszerekben is beszélhetünk hívási szintekről, vagyis rétegekről, ezekben azonban nem érvényesül szigorúan az az elv, hogy egy modul csak egy adott réteghez tartozhat. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 30 ► Operációs rendszerek Az operációs rendszerek áttekintése A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 31 ► A rétegszerkezet és az interfészek definiálása általános szoftverfejlesztési elv, melynek igen komoly jelentősége van a hálózati szoftverek világában is. Két, széles körben elterjedt megoldást érdemes megemlíteni: • Az OSI (Open Systems
Interconnection) architektúra (szabvány), mely a hálózati alkalmazások egymásra épülő hét rétegét definiálja. • Internet (TCP/IP) architektúra (szabvány), melyben az alkalmazásokat négy rétegben valósítják meg. Mindkét fenti megoldásban a legalsó réteget a számítógép-hardver képviseli, míg a legfelső az alkalmazási réteg. 1.7 Virtuális gépek A számítógépes rendszerek legalsó rétege a hardver. Az operációs rendszer belső magja (angolból átvett szóval: kernel ) közvetlenül erre támaszkodik: a hardver-utasításokat (gépi utasítások) használja arra, hogy a felsőbb rétegek számára szolgáltatásokat valósítson meg szoftver rutinok formájában. Ez azt jelenti, hogy a rendszer felsőbb rétegei olyan rutinokat hívnak, amelyek közvetlen gépi utasításokból épülnek fel. Az alkalmazói programok közvetett módon, a rendszerhívásokon keresztül érik el a kernel által megvalósított szolgáltatásokat. Ennek a
lépcsőzetes hozzáférési elvnek a továbbvitele volt az ún. virtuális gépek létrehozása Ezt a megoldást először az IBM alkalmazta néhány évtizede a VM operációs rendszerében (VM: Virtual Machine). A virtuális gép valójában egy olyan szoftver réteg, amely a valódi hardver működését mutatja (szimulálja) az őt használó felsőbb rétegek számára. Egy olyan réteget valósít meg, amely a hardver és a rendszer belső magja között helyezkedik el (1.8 ábra) Ez azt jelenti, hogy egy adott hardver működését, utasításkészletét szimulálja, függetlenül az általa használt hardver platformtól. processzek belső mag virtuális gép hardver 1.8 ábra A virtuális gép szerepe A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 31 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 32 ► Az IBM-VM rendszerben mindegyik processzhez rendelődik
egy saját, külön virtuális gép, amely az eredeti hardvert jeleníti meg. Ebben a számítógép összes erőforrása szét van osztva, beleértve a CPU-t, a memóriát, valamint az I/O-eszközöket. Ezáltal a felhasználók mindegyike saját virtuális gépet kap, amely a többi virtuális géptől látszólag függetlenül működik Ez a megoldás azzal a fő előnnyel jár, hogy a processzek közötti ütközések veszélye nem áll fenn. Ugyancsak rugalmas felhasználási lehetőség az is, hogy akár két különböző operációs rendszer is futtatható ugyanazon a számítógépen: tudniillik két virtuális gépen. A virtuális gépek napjainkban reneszánszukat élik, mivel elősegítik a különböző rendszerek közti programátvitelt (kompatibilitást). Például az Intel processzoros MS-DOS operációs rendszer alatt működő programok futtatását Sun gépen úgy érték el, hogy egy virtuális Intel gépet hoztak létre a Sun CPU-ja fölé. Az MS-DOS program ezen a
virtuális gépen fut A Sun hardveren való futást az teszi lehetővé, hogy az Intel CPU utasításai a virtuális gépen a Sun CPU utasításaira fordítódnak le. Egy másik példa a virtuális gépek használatára a Java nyelv, amely objektum-orientált programozást tesz lehetővé. A Java igen népszerű, a Sun Microsystem cég (USA) fejlesztése. A Java fordítóprogram tárgykódja a Java Virtual Machine (JVM) nevű virtuális gépen tud futni. Ahhoz, hogy egy adott CPU-n Java programok futhassanak, az szükséges, hogy a CPU-n működjön a JVM. A JVM ma már több platformon futtatható: IBMkompatibilis PC-k, Macintosh, UNIX munkaállomás, UNIX szerver, IBM nagyszámítógépek. A JVM behatolt az Internet világába is: implementálva van az olyan Web-keresőkben (browser) mint a Microsoft Explorer és a Netscape Communicator. Ugyanakkor ezek a keresők már különböző hardver platformokon tudnak működni, többféle operációs rendszer alatt is. Az internetes
környezetben működő Java alkalmazási programokat szokás még applet-eknek is nevezni. Az appletek mindig a felhasználó gépére töltődnek le és ott futnak le A Java gyors elterjedését az is elősegíti, hogy előnyösen használható fel a számítógépes hálózatok szoftverjének fejlesztésében. 1.8 Megvalósítás Az operációs rendszerek hosszú ideig csak assembler nyelven készültek. Ma már nem ez a helyzet: elsősorban magas szintű nyelveket használnak. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 32 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Az operációs rendszerek áttekintése Vissza ◄ 33 ► A UNIX, az OS/2 és Windows XP operációs rendszerek már C nyelven íródtak. A magas szintű nyelvek közismert előnyei: a programok gyorsabban írhatók, tömörebbek, könnyebben érthetőek és követhetőek, illetve javíthatóak. Ami pedig a kész rendszert illeti, könnyebben
lehet átvinni másik hardverre, ha magas szintű nyelven íródott (portábilis program). Például az MS-DOS rendszer Intel 8088 assemblerben íródott. Ennek következtében csak az Intel alapú CPU-kon tud üzemelni. A C-ben írott UNIX ugyanakkor különböző CPU-kon képes működni, mint pl Intel 80X86, Motorola 680X0, Sun-SPARC, DEC-Alpha, illetve IBM RSX. A magas szintű nyelven történő implementációk hátrányaként lehet betudni a kisebb sebességet és a nagyobb tárolóigényt. A modern fordítóprogramok kódoptimalizáló képessége ezen a hátrányon ma már sokat tud csökkenteni. Ugyanezt szolgálják a jól megtervezett adatstruktúrák, valamint működtető algoritmusok, amiket magas szinten könnyebb kezelni Fontos még az is, hogy az operációs rendszereknek viszonylag csak egy kis része játszik bele a nagy teljesítménybe: a CPU-ütemező és a memóriakezelő a legkritikusabb rutinok. Szükség esetén ezeket assemblerrel is megvalósíthatják A
dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 33 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 34 ► 2. Folyamatok 2.1 A folyamat fogalma A folyamat (processz, angolul process) a multiprogramozott operációs rendszerek alapfogalma, amelyet azonban szélesebb körben, más területeken is használnak. A modern számítógépes rendszerekben egy folyamat a számítási feladatok végrehajtásának alapegységét jelenti A folyamatkezelés (process management) az operációs rendszerek mindazon szolgáltatásainak körét foglalja magában, amelyek a folyamatok végrehajtására és az ehhez fűződő adminisztrálásra vonatkoznak. Folyamaton általában műveletek meghatározott sorrendben történő végrehajtását értjük. A folyamat elkezdődik és befejeződik, közben pedig minden részművelet végrehajtása csak akkor kezdődhet el, ha az előző részművelet végrehajtása már
befejeződött. A folyamathoz kötődő további fogalom a vezérlési szál (angolul thread ) fogalma. A műveletek sorrendjét szemléletesen úgy is meghatározhatjuk, hogy egy képzeletbeli fonalra egymás után felfűzzük a műveleteket jelképező gyöngyszemeket. Ezzel a hasonlattal a folyamat egy vezérlési szálon történő végighaladásnak felel meg. Mód van arra, hogy egy folyamat több párhuzamos szálra felosztva hajtódjon végre. Ilyenkor tehát „több szálon futnak” a folyamat műveletei. A multiprogramozott operációs rendszerek jellemzője, hogy a rendszerben egy adott pillanatban több feladat végrehajtása van folyamatban, azaz már megkezdődött, de még nem fejeződött be. A feldolgozás egységeinek megnevezése a különböző rendszerekben más és más – például job, feladat (task). Ennek megfelelően beszélhetünk több megkezdett jobról (kötegelt feldolgozás esetén), több végrehajtás alatt álló feladatról (valós idejű
rendszerekben), illetve egyidejűleg több felhasználó kiszolgálásáról (időosztásos rendszerekben) A megvalósítás közös problémái vezettek a valamennyi rendszerben egyaránt használható folyamat fogalmának kialakulásához. Tágabb értelemben a folyamat egy elvégzendő munkaegység a rendszerben: pl. job, felhasználói program, spooling-nyomtatás Felhasználói szinten tehát gyakran több program egymást követő végrehajtása alkot egy folyamatot, mint például a job is ilyen. Szűkebb értelemben egy végrehajtás alatt levő programot tekintünk egy folyamatnak. A továbbiakban, az operációs rendszerek tárgyalásakor ezt a A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 34 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 35 ► szűkítést fogjuk szem előtt tartani és követni. Ennek egyik oka az, hogy a program több szempontból is összetartozó feldolgozási
egység: Jól meghatározható funkciója van, egyetlen végrehajtandó fájlban tároljuk, végrehajtáskor egyetlen címtartományt rendelünk hozzá stb. A másik ok az, hogy az operációs rendszer felügyelete alatt futó program befejeződése és egy új program végrehajtásának megkezdése között éles választóvonal van, hiszen az új program betöltése és elindítása az operációs rendszer jelentős közreműködését igényli. Megjegyzendő még, hogy egy folyamat végrehajtása lépésenként történik, vagyis egy adott időben csak egy utasítás kerül végrehajtásra egy folyamaton belül. Ugyancsak hangsúlyozni kell még: egy program önmagában véve még nem folyamat, csak egy passzív dolog Ott tárolódik a diszken egy fájlban Ezzel szemben egy processz az egy működésben levő aktív dolog, amelyhez a futáshoz kapcsolódó elemek is hozzátartoznak. Ilyen elemek például: a programszámláló (a következő utasítás címét tartalmazza),
különböző segédregiszterek stb. Egy processz a létrejötte és végrehajtása alatt különböző állapotokba kerülhet. A lehetséges processz-állapotok a következők: • Új állapot: A processz elkészítés alatt áll. Ekkor a futtatását lehetővé tevő kezdeti adatok összeállítása történik meg, és egyéb előkészítő intézkedésekre kerül sor. Ennek eredményeként „születik meg” a processz • Készenlét: A processz készen áll arra, hogy a CPU kezelésébe kerüljön át, vagyis futásra kész állapotban van. • Futás: A processz utasításai végrehajtás alatt vannak. • Várakozás: A processz egy adott esemény bekövetkezésére várakozik. Például: egy I/O-művelet befejeződésére, vagy egy valamilyen célú jelzés megérkezésére. • Befejeződés: A processz végrehajtása befejeződött. Ezzel együtt a processz létezése is megszűnik. Az egyes állapotok közötti átmenetet legszemléletesebben egy diagramon ábrázolhatjuk,
amelyet állapot-átmeneti diagramnak vagy röviden állapotdiagramnak nevezünk. A fenti öt állapot közötti váltásokat a 21 ábrán mutatjuk be. Az egyik állapotból a másikba átvezető nyilazott ágakon azok a feltételek, események vannak feltüntetve, amelyek következményeként a nyíl által mutatott állapotba kerül át a processz. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 35 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza Új ◄ 36 ► Befejeződés futás megszakítása elfogava Készenlét Futás CPU - ütemezés Várakozás 2.1 ábra Egy folyamat állapotai A felsorolt állapotok mindegyik operációs rendszerben megtalálhatók. Némelyik rendszerben további állapotok is szerepelnek finomításként. Itt fontos tudni azt, hogy • Egy CPU egy időben csak egyetlen processzet képes futtatni. • Egy időben akármennyi processz lehet készenléti, illetve
várakozási állapotban. A folyamatok állapotai közötti működés és vezérlés részletesebb kifejtése a fejezet későbbi részében fog következni. Az operációs rendszerekben minden egyes processzt egy speciális adatstruktúra ún. processzvezérlési blokk (PVB) (process control block), vagy folyamatvezérlési blokk ír le A 22 ábra egy ilyen blokkot mutat be Egy PVB több olyan információt foglal magában, amely az adott folyamathoz kapcsolódik. Ezekből néhány fontosabbat az alábbiakban sorolunk fel: • Pointerek: A PVB-ket tároló adatszerkezethez tartozó mutatók, melyek a PVB-ben tárolt információ gyors elérését biztosítják. • A processz állapota: A 2.1 ábrának megfelelően (pl készenléti állapot) • Programszámláló: A folyamat következő végrehajtandó utasításának a címét tartalmazza. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 36 ► Operációs rendszerek Folyamatok A dokumentum használata |
Tartalomjegyzék | Irodalom Vissza ◄ 37 ► • CPU-regiszterek: A regiszterek a futás közbeni segédadatokat tartalmazzák. Interrupt esetén ezeket az adatokat el kell menteni a visszatérés érdekében, a programszámláló értékével együtt • CPU-ütemezési információ: A folyamat ütemezésével kapcsolatos adatokat tartalmazza. Például: a folyamat prioritása, sorban állási pointerek (hol van az adott processz a többi processz sorában), és egyéb ütemezési információk. • Memóriakezelési információ: A folyamat által használt memóriaterületek eléréséhez szükséges adatok, címtranszformációs táblázat. • Elszámolási információ: Felhasznált CPU-idő és valóságos idő, időkorlátok, számlázási számok stb. • I/O státus információ: A folyamathoz allokált I/O-eszközök listája (pl. mágnesszalag egység), a megnyitott fájlok listája stb Összegzésül megállapíthatjuk, hogy a processzvezérlési blokk (PVB)
valójában mindazon információ tárháza, gyűjtőhelye, amely az adott processzhez tartozik és annak futtatásához szorosan kapcsolódik. Ez az információ processzenként változik. Processz állapota Processz sorszáma Programszámláló Memória-korlátok Megnyitott fájlok listája Pointerek . . . 2.2 ábra Processzvezérlési blokk (PVB) A CPU az egyes folyamatok közötti váltásnál intenzíven felhasználja a folyamatok PVB-it. Ezt a felhasználást a 23 ábra szemlélteti, ahol az i-edik processz PVB-je PVBi, míg a j-ediké PVBj. Az ábra a várakozási, ill futási állapotba kerülő két folyamat PVB-kezelését érzékelteti. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 37 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Pi processz (PVBi) Futás Operációs rendszer IT vagy rendszerhívás ◄ Vissza 38 ► Pj processz PVBj Várakozás Állapotok elmentése PVBi-be .
Állapotok visszatöltése PVBj-ből Várakozás Futás IT vagy rendszerhívás Állapotok elmentése PVBj-be . Állapotok visszatöltése PVBi-ből Futás Várakozás 2.3 ábra CPU-használat váltása folyamatok között A folyamatok fentiekben leírt működési modellje mind az egyprocesszoros multiprogramozott, mind pedig multiprocesszoros rendszerek esetén használható. A multiprogramozott rendszerek jellemzője, hogy egyetlen fizikai processzoron, valamint a hozzá tartozó memórián és perifériákon kell egyidejűleg több folyamatot végrehajtani. Ezt úgy is felfoghatjuk, hogy az operációs rendszer a folyamatok számára erőforrásokat biztosít, azaz erőforráskiosztó, illetve erőforrás-gazdálkodási feladatot is ellát Multiprocesszoros rendszerek esetén az erőforrás-gazdálkodás egynél több processzorral, valamint a hozzájuk tartozó memóriával való gazdálkodást jelenti. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄
38 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 39 ► Összefoglalva: • Az operációs rendszerek körében a folyamat egy végrehajtás alatt álló, „életre kelt” program. • A folyamat létrejön (megszületik), amikor a végrehajtás megkezdődik, és megsemmisül, amikor a végrehajtás befejeződik. • Egy folyamat a végrehajtandó kóddal és a kódhoz tartozó változókkal (ezek együtt teszik ki magát a programot), másrészt pedig a végrehajtást kísérő CPU-információval, vagyis a processzvezérlési blokkal (PVB) határozható meg. 2.2 Folyamatokból álló rendszerek A multiprogramozás kialakulásának eredeti indoka a processzorkihasználás javítása volt. Bár ennek a szempontnak a jelentősége időközben csökkent, egyéb indokai is lehetnek annak, hogy egy rendszerben több folyamatot alakítunk ki Ezek az indokok a következők: • Hatékonyabb erőforrás-kihasználás: Ez a
processzor-kihasználás javításának egy általánosabb megfogalmazása. A processzoron kívül a rendszerben más, nagy értékű erőforrások is vannak, amelyeket egyetlen folyamat a működésének csak egy rövidebb szakaszában használ, a többi időben indokolt a használatot mások számára lehetővé tenni. Egy feladatmennyiség egy adott erőforráskészlettel akkor oldható meg a leghatékonyabban, ha lehetőleg minden eszköz (erőforrás) minden pillanatban valamilyen hasznos feladatot végez, és nem tétlen. • A végrehajtás gyorsítása: Egy feladatmennyiség gyorsabban végrehajtható, ha a szűk keresztmetszetet jelentő erőforrásokból több azonos képességű példányt működtetünk egymással párhuzamosan. Ilyenkor több részfeladat végrehajtása folyik egyidejűleg, azaz több folyamat van jelen a rendszerben • Többféle feladat egyidejű végrehajtása: A felhasználók a számítógépet egyidejűleg többféle célra használhatják.
(Például egy hosszadalmas számítás közben szövegszerkesztés végezhető) • Rendszerstrukturálás: Bizonyos feladatokra könnyebb olyan szerkezetű programrendszert készíteni, amelyen belül több folyamat működik együtt, mindegyik a feladat egy leválasztható részén dolgozik, csak meghatározott pontokon cserélnek információt. Ilyen feladatok elsősorban a valós idejű rendszerek körében fordulnak elő, ha a rendszer- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 39 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 40 ► nek a környezet többféle, egymástól függetlenül bekövetkező eseményére kell reagálnia (pl. folyamatirányító rendszerek, több kezelőt interaktívan kiszolgáló rendszerek) A rendszer folyamatai egymáshoz való viszonyukat, a köztük lévő csatolás erősségét tekintve lehetnek függetlenek, versengők, vagy pedig együttműködők
(kooperatívak). A független folyamatok egymás működését semmilyen módon nem befolyásolják. Végrehajtásuk teljes mértékben aszinkron, azaz egymással párhuzamosan is végrehajtódhatnak, a végrehajtás egymáshoz viszonyított sebességéről semmilyen feltételezést nem tehetünk (Önmagukban azonban természetesen szekvenciálisak.) Számunkra az ilyen folyamatok gyakorlatilag érdektelenek, ezek külön-külön vizsgálhatók A versengő folyamatok egymásról semmit nem tudnak, de közös erőforrásokon kell megosztozniuk. Ilyenek az egymást nem ismerő felhasználói job-ok, amelyek ugyanazon a számítógépen hajtódnak végre egy multiprogramozású operációs rendszer felügyelete alatt. Ezeknek a folyamatoknak nem kell tudniuk még azt sem, hogy őket multiprogramozottan fogják végrehajtani, ezért programkódjuk ugyanolyan, mintha egy soros feldolgozást végző rendszerre írták volna. A több egyidejűleg működő folyamat helyes és hatékony
futtatásának problémáit az operációs rendszeren belül kell megoldani: pl. mindegyik folyamatnak külön memóriaterülete legyen, a nyomtatásaik ne akadjanak össze, lehetőleg minden erőforrás munkában legyen stb. Ezt a bonyolult védelmi és koordinációs feladatot az operációs rendszereken belül is gyakran több együttműködő folyamattal oldják meg. Az operációs rendszer saját, belső folyamatait rendszerfolyamatoknak, a többit felhasználói folyamatoknak nevezzük. Az együttműködő folyamatok ismerik egymást, együtt dolgoznak egy feladat megoldásán, információt cserélnek. A rendszert ilyenkor tervszerűen bontottuk folyamatokra, amelyektől ezért a tervező szándéka szerinti kooperatív viselkedés várható el. Ezekben az esetekben a folyamatok egymástól való védelmének jelentősége kisebb Együttműködő folyamatok esetén a folyamatok leírása és az együttműködés műveletei a programkódban is megjelennek. Ez azt jelenti, hogy a
program utasításkészletében szerepelnie kell az ehhez szükséges konkrét utasításoknak (pl. folyamat indítása, erőforrás kizárólagos használatának kérése, üzenetküldés egy másik folyamatnak stb.) Valójában ezeket a műveleteket az operációs rendszer hajtja végre Az együttműködéshez szükséges funkciókon kívül ter- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 40 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 41 ► mészetesen a versengő folyamatoknál már említett erőforrás-kezelési feladatokat is el kell látnia az operációs rendszernek. Azokat az operációs rendszereket, amelyek lehetővé teszik, hogy a felhasználók együttműködő folyamatokat indíthassanak, multitask-os (multitasking) rendszereknek nevezzük. Mindeddig nem foglalkoztunk azzal a kérdéssel, hogy hogyan jönnek létre és hogyan szűnnek meg a rendszerben működő folyamatok.
Vizsgáljuk most ezt a kérdést az egyszerűség kedvéért egyetlen fizikai processzort tartalmazó, azaz multiprogramozott rendszerre. Mint ismeretes, a Neumann-elven működő számítógépek soros feldolgozást végeznek. Amikor egy ilyen számítógépet bekapcsolunk, elindul egy rendszerépítési folyamat (betöltés, inicializálás). Ezt egy ősfolyamatnak tekinthetjük, amely létrehozza a rendszert alkotó többi folyamatot. A rendszerépítés eredményeként már egy működésre kész operációs rendszer alakul ki, amely maga is több folyamatból állhat (rendszerfolyamatok). A működésre kész operációs rendszerben például interaktív kiszolgálás esetén minden terminálhoz tartozhat egy rendszerfolyamat, amelyik felhasználói parancsokat fogad és hajt végre. Kötegelt feldolgozás esetén elindulhat egy job-készletet kezelő folyamat, ami job-ok végrehajtását kezdi meg, és job-onként egy újabb folyamatot indít el. Valós idejű rendszer esetén az
operációs rendszer saját felépülése után létrehozza és inicializálja a felhasználói rendszert alkotó folyamatokat. A rendszerfolyamatok tehát újabb, felhasználói folyamatokat hoznak létre, a felhasználói folyamatok pedig – bizonyos típusú rendszerekben – maguk is létrehozhatnak további felhasználói folyamatokat (ilyenek pl. a UNIX-ban a fork, ill. create parancsok) A folyamatok általában saját maguktól fejezik be működésüket, a megfelelő (pl. exit) utasítás végrehajtásával Bizonyos esetekben (pl működési hibák) azonban szükség lehet arra, hogy más folyamat szüntessen meg egy folyamatot (pl. a kill utasítással) Azokat a rendszereket, amelyek működése során – a felépülés és inicializálás kezdeti szakaszától eltekintve – nem jönnek létre és nem szűnnek meg folyamatok, statikus rendszereknek nevezzük, szemben a dinamikus rendszerekkel, amelyekben működés közben bármikor születhetnek és megszűnhetnek
folyamatok. A folyamatok olyan eredetét, amikor az egyik egy másikból származik le, szokás még szülő-gyermek viszonynak is nevezni. A szülő-gyermek viszonyokat egy fa struktúra írja le Erre az információra építi sok operációs A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 41 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 42 ► rendszer az erőforrás-gazdálkodási és jogosultsági filozófiáját. Ennek egyik megközelítése a hierarchikus erőforrás-gazdálkodás, azaz a gyermek folyamatok csak a szülő erőforrásaiból részesülhetnek, és nem létezhetnek önállóan, csak amíg szülőjük is létezik. Másik megközelítés a globális szemlélet, azaz a rendszer valamennyi folyamata, létrejötte után teljesen önálló, és részesülhet a teljes erőforráskészletből. 2.3 Folyamatok együttműködése 2.31 Információcsere folyamatok között Az
együttműködő folyamatok információcsere útján tudják összehangolni tevékenységüket. A cserélt információ esetenként lehet egyetlen bit, csupán jelzés jellegű, máskor akár több megabájtot is kitehet Az információcserének két módja alakult ki: • a közös memórián keresztül történő, illetve • az üzenettovábbítással történő adatcsere. Mindkét megoldást modell szinten mutatjuk be. Valamennyi konkrét megoldás – a legegyszerűbb, processzorok közötti jelzőbittől a nagy adatbázisokon végzett tranzakciókig, vagy a földrészeket átfogó hálózati alkalmazásokig – erre a két alapsémára vezethető vissza. Közös memória szinkronizált olvasás és írás Operációs rendszer memóriakezelő alrendszere olvasás írás C folyamat olvasás írás B folyamat olvasás írás A folyamat 2.4 ábra Folyamatok kommunikációja közös memórián keresztül A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 42
► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 43 ► Közös memórián keresztül történő adatcsere esetén az együttműködő folyamatok mindegyike el tud érni saját címtartományában egy közös memóriát. A folyamatok párhuzamos futása miatt a közös memóriába egyidejűleg több folyamat is írhat, illetve olvashat belőle (24 ábra) Ilyen esetekre a RAM modell nem adja meg a memória működését, ezért a közös memóriát egy új modell, a PRAM (Pipelined vagy Parallel Random Access Memory) modell szerint kell kialakítani. A PRAM modell szerint működő memóriában több processzor írhat és olvashat egyidejűleg. Az olvas és ír műveletekre a RAM modellhez képest az alábbi kiegészítések vonatkoznak, amennyiben ugyanarra a rekeszre (azonos címre) hajtunk végre egyidejűleg műveleteket: • olvasás – olvasás ütközésekor mindkét olvasás ugyanazt az eredményt adja, és ez
megegyezik a rekesz tartalmával, • olvasás – írás ütközésekor a rekesz tartalma felülíródik a beírni szándékozott adattal, az olvasás eredménye vagy a rekesz régi, vagy az új tartalma lesz, más érték nem lehet, • írás – írás ütközésekor valamelyik művelet hatása érvényesül, a két beírni szándékozott érték valamelyike írja felül a rekesz tartalmát, harmadik érték nem alakulhat ki. Ezek a szabályok lényegében azt eredményezik, hogy az egyidejű műveletek nem interferálhatnak, azaz hatásuk olyan lesz, mintha valamilyen előre nem meghatározható sorrendben hajtódnának végre. (Ezt tükrözi a pipelined elnevezés, arra utalva, hogy a memóriához egy sorosítást végző csővezetéken jutnak el a parancsok.) Másként fogalmazva, ezek a műveletek egybe tartoznak, oszthatatlanok (atomiak). A közös memória használatával történő adatcsere helyes lebonyolításához szükség van a folyamatok működésének
összehangolására (pl. az adat fogadója akkor olvassa el az adatot, ha a küldő már elhelyezte azt; összetett adatok átadásakor félig átírt rekordot ne kezdjen olvasni a fogadó stb.) Ez a későbbiekben ismertetett ún szinkronizációs megoldásokkal lehetséges. Ugyancsak szükség van szinkronizációs eszközökre a versengő folyamatokat futtató operációs rendszerekben az erőforrás-kiosztás megszervezéséhez (valamint természetesen a rendszerfolyamatok együttműködésének koordinációjához). Üzenettovábbítással történő adatcsere esetén a folyamatoknak nincs közös memóriája. Van azonban egy kommunikációs közeg (csatorna), amelyen keresztül a folyamatok üzeneteket tudnak küldeni, illetve fogadni Az A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 43 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 44 ► üzenetküldésre, illetve fogadásra a folyamatok
utasításkészletében megfelelő utasítások állnak rendelkezésre. Ezen utasítások megvalósítása az operációs rendszer feladata, vagyis az operációs rendszer biztosítja a kommunikációs közeget, ill annak elérését Például a Küld(<cím>,<folyamat>) művelet végrehajtásakor a műveletet végrehajtó folyamat elküldi a saját memóriájának megadott címén tárolt adatot a megadott folyamatnak, a Fogad(<cím>,<folyamat>) művelet pedig végrehajtásakor a megadott folyamattól érkező üzenetet a saját memória megadott címén tárolja. A cím tartalma függ az aktuálisan használt kommunikációs közeg jellemzőitől Legegyszerűbb esetben a cím a kommunikáló partner folyamat, vagyis az üzenetet küldő, ill azt fogadó folyamat azonosítására szolgáló adat (2.5 ábra) Operációs rendszer kommunikációs alrendszere (csatorna) Küld(üzenet, B) A folyamat Fogad(üzenet, A) B folyamat 2.5 ábra Az üzenetváltás
általános sémája Míg gyakorlatilag valamennyi közös memóriás információcserét alkalmazó megoldás a PRAM modellre alapul, az üzenetközvetítésre nincs egyetlen elfogadott modell. A fenti példával kapcsolatosan is számos kérdés tehető fel: pl. megvárja-e a Küld művelet, amíg a fogadó megkapja az üzenetet, tartalmaz-e átmeneti tárolót az átviteli közeg, lehet-e olyan folyamatnak üzenetet küldeni, amelyiket nem ismerünk stb. A különböző megoldások fontosabb jellemzőit a kommunikációs eszközök között ismertetjük a későbbiekben. 2.32 Vezérlési szálak Az újabb operációs rendszerek lehetőséget adnak ún. vezérlési szálak, vagy csak egyszerűen szálak (thread) létrehozására. A szálak lényegében párhuzamos végrehajtású, közös memóriát használó programrészek az egyes A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 44 ► Operációs rendszerek Folyamatok A dokumentum használata |
Tartalomjegyzék | Irodalom Vissza ◄ 45 ► folyamatokon belül. Az egyazon folyamathoz tartozó szálak ugyanazt a címtartományt használják, mint a folyamat. Ugyanannak a programnak a végrehajtásában vesznek részt, közös erőforrások és adatok felhasználásával. Ezáltal a teljes processz munkájának a szétosztását eredményezik A CPU-ért ugyanúgy versenyeznek, mint a folyamatok, azonban a kódon és a változókon osztoznak. Emiatt az operációs rendszer lényegesen gyorsabban tud végrehajtani egy átkapcsolást a szálak között, mint a különálló folyamatok között. Egy szálat szokás még könnyűsúlyú folyamatnak (lightweight process) is nevezni Nehézsúlyú folyamat (heavyweight process) a task, amelyben csak egyetlen szál létezik. Egy task nem végez semmit, ha nincs benne szál, és egy szál csak pontosan egy task-ban létezhet. 2.33 Szinkronizáció A közös erőforrások használata, valamint a folyamatok közötti információcsere
biztonsága és hibátlansága érdekében az aszinkron folyamatok „szabadon futását” esetenként korlátozni, összehangolni kell. A műveletvégrehajtásra vonatkozó időbeli korlátozásokat, összehangolást nevezzük szinkronizációnak. A korlátozások alapesetei a következők: Kölcsönös kizárás (mutual exclusion) Több folyamatban lehetnek olyan utasítássorozatok – kritikus szakaszok –, amelyek végrehajtása egyidejűleg nincs megengedve. Ez pontosabban azt jelenti, hogy egy folyamat akkor léphet be a kritikus szakaszba, vagyis akkor kezdheti meg a kritikus szakaszként kijelölt utasítássorozat végrehajtását, ha azon belül egyetlen másik folyamat sem tartózkodik. Ellenkező esetben meg kell várnia, amíg a kritikus szakaszban tartózkodó folyamat elhagyja azt. P1 P2 S1 S2 2.6 ábra Kölcsönös kizárás A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 45 ► Operációs rendszerek Folyamatok A dokumentum
használata | Tartalomjegyzék | Irodalom Vissza ◄ 46 ► Legyen például a P1 folyamat egy utasítása S1, a P2 egy utasítása pedig S2. Az S1 és S2 utasításokra tehát igaz a kölcsönös kizárás, ha azok végrehajtása időben nem lapolódik át (2.6 ábra) A kölcsönös kizárás jellegzetes esetei a megosztottan használt erőforrásokon végzett műveletek. Például, ha egy folyamat megkezdett egy nyomtatást, gyakran ki kell zárni, hogy más folyamat közbenyomtathasson egyegy sort Ilyen esetek még a közös memóriában tárolt, összetett adatszerkezeteket kezelő műveletsorozatok, az adatbázisokon végzett tranzakciók Egyidejűség (randevú) Különböző folyamatokban elhelyezett műveletekre előírhatjuk, hogy azok várják be egymást, és „egyidejűleg” hajtódjanak végre. Kellően finom időléptékben természetesen az egyidejűség értelmezése problematikus Az egyidejűség pontosabban úgy értendő, hogy egyik folyamat sem léphet túl a
benne kijelölt utasítássorozaton mindaddig, amíg az összes többi folyamat meg nem kezdte a saját kijelölt utasítássorozatának végrehajtását. Legyen például a P1 folyamat egy utasítása S1, a P2 egy utasítása pedig S2. Tételezzük fel, hogy S1 utasítás előtt P1 folyamat R1 utasítást hajtja végre, S2 utasítás előtt P2 folyamat pedig R2 utasítást. Az S1 és S2 egyidejűségének előírása azt jelenti, hogy S1 végrehajtásának megkezdése előtt be kell fejeződnie R2 utasításnak, és hasonlóan S2 utasítás megkezdése előtt be kell fejeződnie R1-nek (2.7 ábra) P1 R1 S1 P2 R2 S2 2.7 ábra Egyidejűség Ha S1 vagy S2 hamarabb kerülne sorra, mint ahogy R2, ill. R1 befejeződik, akkor várakozniuk kell, míg a feltétel nem teljesül, vagyis addig, amíg a másik folyamat befejezi az R2, ill. R1 utasítást A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 46 ► Operációs rendszerek Folyamatok A dokumentum használata
| Tartalomjegyzék | Irodalom Vissza ◄ 47 ► A randevú speciális esete az ún. meghosszabbított randevú, amikor az egyidejű utasítások „megvárják” az egyidejű párjuk befejeződését Ezt az esetet úgy is kezelhetjük, mintha a randevú az egyidejű utasításokat követő utasításokra is teljesülne (2.8 ábra) P1 P2 R1 U1 R2 U2 vár K1 K2 2.8 ábra Meghosszabbított randevú Az egyidejűség tipikus alkalmazása az átmeneti tárolót nem tartalmazó adatátvitel Küld és Fogad műveleteinek végrehajtása, valamint a távoli eljáráshívás kiadása és elfogadása. Előírt végrehajtási sorrend (precedencia) Különböző folyamatok kijelölt műveletei között végrehajtási sorrendet írhatunk elő. Legyen például a P1 folyamat egy utasítása S1, a P2 egy utasítása pedig S2 Az S1 => S2 precedencia előírása azt jelenti, hogy S1 végrehajtásának be kell fejeződnie, mielőtt S2 végrehajtása megkezdődik Ha az egyébként aszinkron
futású P1 és P2 úgy hajtódna végre, hogy S2 hamarabb kerülne sorra, P2-nek meg kellene várnia, míg P1-ben S1 végrehajtása befejeződik (2.9 ábra) A precedencia előírása jellegzetesen annak garantálására használatos, hogy egy folyamat csak akkor kezdje felhasználni a másik folyamat által előállított adatokat, amikor azok már rendelkezésre állnak. A szinkronizáció helyes megvalósítása meglehetősen bonyolult lehet, ha például csak a PRAM modellre támaszkodhatunk. Illusztrációként valósítsuk meg a kölcsönös kizárást két folyamat egy-egy utasítássorozata között A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 47 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom P1 Vissza ◄ 48 ► P2 S1 S2 2.9 ábra Előidejűség Kézenfekvő megoldásnak tűnik egy foglaltságjelző bit elhelyezése a közös memóriában, kezdetben szabadra állítva. A kritikus szakaszba
belépni szándékozó folyamat teszteli a jelzőt, ha szabad, akkor átállítja foglaltra, és belép a kritikus szakaszba, kilépéskor pedig visszaállítja szabadra. A folyamatok tehát a következőképpen működnek: var közös jelző:{foglalt,szabad}:=szabad Valamennyi folyamat: . teszt: olvas (közös jelző) if foglalt then goto teszt ír (közös jelző,foglalt) <kritikus szakasz> ír (közös jelző,szabad) . A megoldás problémája, hogy mivel a közös jelző a közös memóriában helyezkedik el, kis valószínűséggel bár, de előfordulhat, hogy több folyamat olvassa egyidejűleg, és így többen is szabadnak találják. Ekkor egyidejűleg többen beléphetnek a kritikus szakaszba, ami nyilvánvalóan hibát jelentene. A probléma egy helyes megoldása két folyamatra a következő: Legyen a két folyamat P1 és P2. Legyen mindkét folyamatnak egy-egy jelzője a belépési szándékra, valamint egy változó, amely megmutatja, hogy egyidejű belépési
szándék esetén melyik folyamat léphet be. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 48 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 49 ► var jelző:array[1.2]of{foglal,szabad}:=szabad következő: {1,2} P1 folyamat: . ír (jelző[1],foglal) ír (következő,2) teszt: olvas (jelző[2]) if szabad then goto belép olvas (következő) if 2 then goto teszt belép: <kritikus szakasz> ír (jelző[1],szabad) . P2 folyamat: . ír (jelző[2],foglal) ír (következő,1) teszt: olvas (jelző[1]) if szabad then goto belép olvas (következő) if 1 then goto teszt belép: <kritikus szakasz> ír (jelző[2],szabad) . Figyeljük meg, hogy a belépésre vonatkozó döntésben a következő változónak csak akkor van szerepe, ha a másik folyamat jelzője nem szabadot mutat, azaz egyidejű belépési szándék veszélye áll fenn. Ilyenkor legroszszabb esetben a következő változóra
kiadott írás is egyidejű, de az írási verseny valahogy eldől, a későbbi írás eredménye jelöli ki a másik folyamatot belépőnek, ami akkor is helyes, ha a másik folyamat már korábban is a kritikus szakaszban tartózkodott. A megoldás követése már két folyamatra sem egyszerű, több folyamatra pedig csak a gyakorlatban alig használható bonyolultságú megoldás adható. Kialakultak ezért olyan eszközök, amelyek – esetenként a PRAM modellt is kibővítve – a logikai processzor utasításkészletébe épülve támogatják a folyamatok szinkronizációjának megoldását. A következőkben ezek közül ismertetünk néhányat. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 49 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 50 ► OlvasÉsÍr (TestAndSet) utasítás A kritikus szakaszhoz rendelt foglaltságjelző bit logikailag egyszerű és jó ötlet. A problémát az
okozza, hogy a jelző értékét többen is kiolvashatják, mielőtt az első olvasó szabadról foglaltra állította volna. Megoldódik a probléma, ha a PRAM modellt úgy módosítjuk, hogy a jelzőkre vonatkozóan az olvas és ír utasításokon kívül bevezetjük az OlvasÉsÍr utasítást. Az utasítás kiolvassa egy jelző értékét, majd foglaltra állítja azt A művelet ugyanúgy oszthatatlan, mint az olvas és ír utasítások Ez azt jelenti, hogy egy szabad jelzőre több OlvasÉsÍr utasítást egyidejűleg végrehajtva ezek közül csak egy ad vissza szabad értéket, a jelző végső értéke pedig természetesen foglalt lesz. Az OlvasÉsÍr utasítás segítségével a kölcsönös kizárás megoldása a következő: var közös jelző:{foglalt,szabad}:=szabad Valamennyi folyamat: . teszt: OlvasÉsÍr (közös jelző) if foglalt then goto teszt <kritikus szakasz> ír (közös jelző,szabad) . Az OlvasÉsÍr utasításhoz hasonlóan a Csere (Swap) utasítás
bevezetésével is megoldható a probléma. A Csere utasítás a közös memória egy rekeszének és a folyamat saját memóriája egy rekeszének tartalmát cseréli meg ugyancsak oszthatatlanul. Ezeket az utasításokat általában már a CPU utasításkészlete is tartalmazza. Szemafor Az ún. szemafor a szinkronizációs problémák megoldásának univerzális eszköze Nem más mint egy speciális változó, amelyet csak a hozzá tartozó két, oszthatatlan művelettel lehet kezelni. Ez azt jelenti, hogy ha egy folyamat módosítja a szemafor-értéket, akkor egy másik folyamat már nem módosíthatja egyidejűleg ugyanazt az értéket. Az általános szemafor nem más mint egy egész (integer) típusú változó (s), amely a kezdeti érték beállításától eltekintve csak két műveleten keresztül érhető el. A két művelet elnevezése többféle lehet, pl Belép és Kilép, vagy Vár (Wait) és Jelez (Signal). (A szemafor koncepciót az operációs A dokumentum
használata | Tartalomjegyzék | Irodalom Vissza ◄ 50 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 51 ► rendszerek elméletének kiemelkedő művelője, a holland E. W Dijkstra javasolta 1965-ben. Az eredeti definícióban a jelölések P és V voltak, a holland proberen (tesztelni), illetve verhogen (megnövelni) szavak alapján.) A két művelet definíciója a következő: A Vár(s) művelet definíciós programja: while s<1 do no-op; s:=s-1; (a no-op az üres utasítást jelenti, s pedig a közös memóriában lévő szemafor-változót) A Jelez(s) művelet definíciós programja: s:=s+1; Hangsúlyozni kell, hogy mindkét művelet oszthatatlan, valamint azt is, hogy a szemafor-változó más utasításokkal (írás, olvasás) nem érhető el. Precedencia és kölcsönös kizárás megvalósítására alkalmas a bináris szemafor, amelynek szemafor-változója csak két értéket vesz fel (0 és 1, vagy
foglalt és szabad). Kölcsönös kizárásra 1 kezdőértékű bináris szemafor használható, amelyre a kritikus szakaszba belépni kívánó folyamat Vár (Belép) műveletet, a kritikus szakaszból kilépő pedig Jelez (Kilép) műveletet hajt végre. Precedencia megvalósításához 0 kezdőértékű bináris szemafor használható. Az előbb végrehajtandó műveletet követően a folyamat Jelez műveletet hajt végre a szemaforra, a másik folyamat pedig a később végrehajtandó művelet előtt Vár műveletet. Az általános, egész értékű szemafor annyi Vár műveletet kiadó folyamat továbbhaladását engedélyezi, amennyi a szemafor kezdőértéke. Ezután újabb folyamat csak akkor juthat tovább a Vár műveletről, ha valamelyik folyamat Jelez műveletet hajt végre ugyanerre a szemaforra Alkalmazása akkor előnyös, ha több, azonos képességű erőforrás kiosztását kell megoldani. Erőforrás Az erőforrás mint szinkronizációs eszköz egy olyan objektum,
amelyet egy folyamat lefoglalhat és felszabadíthat. A lefoglalás és a felszabadítás között a folyamat kizárólagosan használhatja az erőforrást, azaz erre a szakaszára és más folyamatok ugyanezen erőforrásra vonatkozó foglalási szakaszaira kölcsönös kizárás valósul meg. A Lefoglal(<erőforrás>) és Felszabadít(<erőforrás>) A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 51 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 52 ► műveletek egyenértékűek egy s bináris szemaforra kiadott Vár(s) és Jelez(s) műveletekkel. Esemény Az esemény egy pillanatszerű történés a rendszerben, amelyre folyamatok várakozhatnak. Az esemény bekövetkezése valamennyi rá várakozó folyamatot továbbindítja Az eseménnyel így egy összetett precedencia valósítható meg, ahol több, különböző folyamatban elhelyezett műveletre ugyanazt az előzményt írjuk
elő. Két folyamat esetén egy esemény jelzése és az arra való várakozás egyenértékű egy szemaforra kiadott Jelez, illetve Vár műveletekkel. Több folyamat esetén azonban lényeges különbség, hogy a szemaforra kiadott Jelez művelet hatására csak egyetlen várakozó folyamat indulhat tovább, míg az esemény bekövetkezése az összes várakozó folyamatot továbbindítja. Vegyük észre, hogy a szinkronizációs műveletek a folyamatok várakozását idézhetik elő. Egy folyamat várakozása közben egy másik folyamat is elkezdhet várakozni ugyanarra a feltételre (pl. ugyanarra a szemaforra ad ki Vár műveletet, ugyanarra az erőforrásra Lefoglal műveletet stb.) Az esemény kivételével nem mondtunk semmit arról, hogy a több várakozó közül melyik haladhat tovább, amikor egyiküknek erre lehetősége nyílik (pl. felszabadul az erőforrás, vagy jelzés érkezik a szemaforra) A továbbhaladó kiválasztását így véletlenszerűnek tekinthetjük
Valójában a rendszerek a szinkronizációs objektumokhoz általában egy várakozási sort rendelnek, és a sorban állók közül egy meghatározott algoritmussal választják ki a továbbhaladó folyamatot. Az algoritmus leggyakrabban az érkezési sorrendet (FIFO elv: First In – First Out: először jött – először megy) érvényesíti, de más szempontok – pl. fontossági sorrend (prioritás) – alapján döntő rendszerek is vannak A várakozási sorokból a továbbinduló folyamat kiválasztását ütemezésnek (scheduling) nevezzük, és ugyancsak használatos a várakozási sor helyett az ütemezési sor elnevezés is A felsorolt szinkronizációs eszközök azok, amelyek a folyamatok operációs rendszer szinten történő kezelése során gyakrabban előfordulnak. A folyamatok azonban legtöbbször magas szintű nyelveken írott programokból keletkeznek. Ezen nyelvek némelyike alkalmas együttműködő folyamatok leírására is. Így a szinkronizációra és
kommunikációra magasabb szintű nyelvi eszközök is kialakultak, amelyek tárgyalása azonban meghaladja e jegyzet kereteit. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 52 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 53 ► 2.34 Kommunikáció A korábbiakban említettük, hogy az üzenettovábbítással együttműködő folyamatok információcseréjére nincs még egyedülállóan elfogadott modell. Ha csak a működés logikájával foglalkozunk, és olyan lényeges kérdéseket nem is érintünk, mint az átviteli sávszélesség, az összeköttetés megbízhatósága, az üzenetszerkezet, az átviteli közeg sajátosságai, a kapcsolatépítés esetleges dinamikája, akkor is számos olyan tulajdonságot találunk, amelyekben az egyes megoldások eltérhetnek, és amelyek ismerete fontos a felhasználók (rendszertervezők, programozók, üzemeltetők) számára. Néhány a
legkézenfekvőbb kérdések közül: • Hogyan nevezhetjük meg a partnert? A partnert látjuk, vagy egy közbülső objektumot (csatornát, postaládát)? Egyetlen partner veheti egyszerre az üzenetünket, vagy több is? Csak egyetlen partnertől várhatunk üzenetet, vagy többektől is? • Amikor a Küld művelet befejeződött, meddig jutott az üzenet? Már ott van a partnernél, vagy csak útjára bocsátottuk (lásd például: levél bedobása a postaládába)? Honnan fogjuk megtudni, hogy rendben megérkezett-e az üzenetünk? • Hogyan működik a Fogad művelet? Mi történik, ha hamarabb akarunk fogadni egy üzenetet, mint azt elküldték? Kell-e visszaigazolást küldenünk, vagy ezt a rendszer automatikusan elintézi? A felmerülő kérdések egy része a partner megnevezésére vonatkozik. Ebben a tekintetben beszélhetünk közvetlen (direkt), közvetett (indirekt) valamint aszimmetrikus kommunikációról, illetve megnevezésről, továbbá csoportkijelölésről
és üzenetszórásról. A közvetlen (direkt) kommunikáció két folyamat között zajlik, mind a Küld, mind a Fogad művelet megnevezi a partner folyamatot. Közvetett (indirekt) kommunikáció esetén a partnerek nem egymást nevezik meg, hanem egy közvetítő objektumot (pl. postaládát vagy csatornát) A postaláda egy általában véges, de modell szinten esetleg korlátlan befogadóképességű, az üzenetek sorrendjét megtartó (FIFO) tároló, amely a Küld – Fogad, (betesz – kivesz) műveletpárral kezelhető. A Küld(<cím>, <postaláda>) művelet a saját címtartományban elhelyezkedő üzenetet a postaláda következő szabad tárolóhelyére másolja. Ha a postaláda tele van, kiürülésig várakozik. A Fogad(<cím>,<postaláda>) művelet a postaládában A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 53 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄
54 ► legrégebben várakozó üzenetet kimásolja a megadott, saját címtartománybeli címre, helyét pedig felszabadítja (2.10 ábra) Postaláda (P) Op. rsz kommunikációs alrendszere Küld(üzenet, P) A folyamat Fogad(üzenet, P) B folyamat 2.10 ábra Üzenetváltás postaládán keresztül A csatorna egy olyan kommunikációs objektum, amely két folyamatot kapcsol össze. A csatorna lehet egyirányú (szimplex), osztottan kétirányú, azaz egyidejűleg egyirányú, de az irány változtatható (félduplex), vagy kétirányú (duplex). Tartalmazhat zérus, véges, vagy végtelen kapacitású átmeneti tárolót. Egy véges tárolókapacitású duplex csatorna egyenértékű két véges befogadóképességű postaládával, amelyeket csak két folyamat használ, egyiket az egyik irányú, másikat az ellenkező irányú adatcserére. A postaláda és a csatorna lazítja a kommunikáló folyamatok közötti csatolást, lehetővé teszi, hogy olyan folyamatok is
információt cseréljenek, amelyek nem ismerik egymást Aszimmetrikus megnevezés esetén az egyik folyamat, az adó vagy vevő, megnevezi, hogy melyik folyamattal akar kommunikálni, a másik partner viszont egy saját be/kimeneti kaput (port-ot) használ, amit nem is kell megneveznie. Ha az üzenet vevője használ bemeneti kaput, akkor a műveletek alakja Küld(<cím>,<folyamat>), Fogad(<cím>). Ez a megoldás azokban az esetekben hasznos, amikor a fogadó folyamat nem ismeri a küldőt, de a küldő ismeri a fogadót. Például egy ügyfél folyamat szolgáltatási kérelmet küld egy szolgáltató folyamatnak (kliens – szerver modell). A fordított irányú aszimmetria alkalmazására pedig egy feladat lebontását és szétosztását végző „menedzser” folyamat és több, munkáért versengő végrehajtó folyamat kapcsolata lehet példa. A küldő a kimeneti portjára küldi az elvégzendő feladatot tartalmazó üzenetet, a fogadó pedig az első
ráérő feldolgozó lesz (farmer – worker modell) (211 ábra) A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 54 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 55 ► Operációs rendszer kommunikációs alrendszere Fogad(üzenet) Küld(B+P, üzenet) bemeneti port (P) A folyamat B folyamat 2.11 ábra Aszimmetrikus kommunikáció, port használatával Csoportkommunikáció esetén az üzenet küldője folyamatok (esetleg kommunikációs objektumok) egy csoportját nevezheti meg vevőként. Ilyenkor egyetlen üzenetküldő művelet végrehajtása azt eredményezi, hogy az üzenetet a csoport mindegyik tagja megkapja. Az üzenetszórás (broadcasting) logikailag a csoportkommunikáció azon esete, amikor az egyetlen művelettel elküldött üzenet a rendszer mindegyik folyamatához eljut. A csoportkommunikáció lehetősége lényegesen egyszerűsíti a küldő műveleteit, ha több
folyamattal akarja ugyanazt az információt közölni. Bizonyos típusú fizikai átviteli közegeken a csoportkommunikáció igen hatékonyan valósítható meg (pl. sín-topológiájú összeköttetések, rádiókommunikáció) A kérdések egy másik része a kommunikációs műveletek szemantikáját igyekszik tisztázni. Nevezetesen azt, hogy mi történik a kommunikációs műveletek végrehajtásakor, milyen hatása van a műveleteknek az egyes folyamatok állapotterére (változókra, kommunikációs objektumokra). Ezzel kapcsolatban fontos megjegyezni, hogy az üzenettovábbításos modell akkor került előtérbe, amikor több számítógépet kapcsoltak össze egy rendszerré adatátviteli vonalon, vagy hálózaton keresztül. Ilyenkor fel kell készülni olyan rendkívüli esetekre is, hogy a partner folyamatot futtató számítógépet esetleg kikapcsolták, vagy a nagyobb távolságot áthidaló átvitel közben az adatok sérülnek, hiszen a hibalehetőség lényegesen
nagyobb, mint az egyetlen dobozban, esetleg egyetlen kártyán elhelyezkedő egységek közötti átvitel esetén. Az üzenettovábbítás műveleteivel szemben ezért elvárás, hogy a műveletet végrehajtó folyamat ne akadjon el sem átviteli hibák, sem a partner folyamatok kiesése esetén, és a kommunikációs műveletek helyes, vagy hibás végrehajtásáról szerezzen tudomást. A műveletek helyességének visszajelzésére az egyik szokásos megoldás egy állapotkód visszaadása, amelynek egyik értéke a helyes végrehajtás, további értékei A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 55 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 56 ► pedig az előforduló hibakódok lehetnek. Egy másik megoldás lehet a hibamegszakítás, ami a folyamat végrehajtását, a hiba felderítéséhez és a folyatáshoz szükséges információk eltárolását követően, egy hibakezelési
pontra (exception handler) irányítja A partner folyamat kiesését szokásosan a műveletekre megszabott időkorlát (time-out) figyelésével észlelik. A kommunikációs művelet az időkorlát elérésekor hibajelzéssel akkor is befejeződik, ha a partner válaszának hiánya, vagy a kommunikációs közeg hibája miatt az adatcsere még nem történt meg. A folyamatok programozásához megfelelő rugalmasságot nyújt, ha lehetőség van a kommunikációs műveletekre vonatkozó időkorlát paraméterként történő megadására A hibajelzéssel és időkorláttal kiegészítve közvetlen kommunikáció esetén a műveletek a következő alakúak: Küld(<cím>,<folyamat>,<időkorlát>,<hibakód>), illetve Fogad(<cím>,<folyamat>,<időkorlát>,<hibakód>). Az időkorlát lehetséges értékei között célszerű a zérus és a <végtelen> értéket is megengedni. A zérus várakozás például akkor hasznos, ha egy fogadó
folyamat működésének egy pontján csak akkor akar üzenetet fogadni, ha azt már elküldték, egyébként van más teendője. A <végtelen> várakozás pedig az olyan folyamatok esetén szükséges, amelyeknek nincs teendőjük addig, amíg valaki egy üzenettel el nem indítja őket. A Küld művelet szemantikáját tekintve elsősorban az a kérdés merül fel, hogy okozhat-e várakozást a művelet, és mi az, ami az adatcseréből a művelet befejeződésekor, azaz a folyamat továbblépésekor már megtörtént. A lehetséges megoldásváltozatok közül az egyik véglet: az adatcsere teljes egészében befejeződött, a küldött üzenet rendben megérkezett és a helyére került. Ez a megoldás általában a Küld művelet várakozását is okozhatja, a végrehajtás során ellenőrzések, esetleg hibajavítások is történhetnek. A másik véglet az lehet, hogy a végrehajtás befejeződésekor az üzenet csupán bekerült a kommunikációs rendszerbe, de további
sorsáról semmit sem tudunk. Ilyenkor a Küld művelet általában sohasem várakozik A két véglet között számos közbülső megoldás létezhet (pl. az üzenet elhagyta azt a processzort, amelyiken a küldő folyamat fut stb) Valamennyi megoldás közös abban, hogy amennyiben nincs hibajelzés, az elküldött üzenetet tartalmazó terület a saját memóriában (a <cím> tartalma) a Küld befejeződése után – akár a következő utasítással – felülírható, vagyis az üzenet innen már mindenképpen továbbításra került. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 56 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 57 ► A Fogad művelet megvalósításai általában várakozást okozhatnak abban az esetben, ha még nem érkezett üzenet. A művelet egyszeri végrehajtása pontosan egy üzenetet helyez el a fogadó folyamat saját memóriájába akkor is, ha esetleg
több várakozó üzenet van a folyamat számára a kommunikációs rendszerben. Az üzenetek érkezési sorrendben fogadhatók, de minden üzenet csak egyszer, azaz a fogadás törli az üzenetet a kommunikációs rendszerből. Postaláda, illetve bemeneti kapu használata esetén kérdés, hogy a fogadó tudomást szerez-e arról, hogy ki az üzenet küldője. Erre általában szükség van, és a kommunikációs rendszerek ezt biztosítják is, hiszen az üzenetre gyakran választ kell küldeni. A folyamatok közötti, üzenettovábbításos információcsere általában valamilyen szinkronizációs mellékhatással jár együtt, amit implicit szinkronizációnak nevezünk. Az egyes műveletekkel járó szinkronizációs mellékhatás elsősorban a kommunikációs rendszer átmeneti tárolójának (puffer) kapacitásától függ. Tárolás nélküli átvitel esetén a kommunikációs rendszer csak közvetít, de a Küld és Fogad műveleteknek be kell várniuk egymást ahhoz, hogy
az információcsere megtörténhessen. A két folyamat ezen utasításaira egyidejűség érvényes (a Küld és a Fogad randevúja). Véges kapacitású tároló alkalmazása bizonyos keretek között kiegyenlíti a küldő és fogadó folyamatok sebességingadozásait. A fogadó folyamat várakozik, ha üres az átmeneti tároló, a küldő folyamat pedig akkor várakozik, ha nincs szabad hely a tárolóban Ugyanazon üzenet elküldésének meg kell előznie az üzenet fogadását, tehát ezen műveletekre sorrendiség (precedencia) áll fenn. Emellett egy rövid távú szinkronizációs hatás is érvényesül: Magának a tárolónak a kezelése általában kölcsönös kizárással valósul meg, azaz két folyamat nem hajthat végre egyidejűleg kommunikációs műveletet ugyanarra a kommunikációs objektumra. Végtelen kapacitású tároló (ez csak modellben létezik) esetén a küldő folyamatnak sohasem kell várakoznia, egyébként a véges kapacitású tárolóra
elmondottak érvényesek. 2.4 Holtpontok (deadlock) 2.41 A holtpont fogalma Amikor egyszerre több folyamat versenyez véges számú erőforrás megszerzéséért, előállhat olyan helyzet, amelyben egy folyamat számára nem áll rendelkezésre a kért erőforrás. Ekkor az adott folyamat várakozási álla- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 57 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 58 ► potba kerül, ami addig tart, amíg az erőforrás fel nem szabadul számára. Megtörténhet azonban, hogy a várakozó folyamat már nem tud kikerülni ebből az állapotból, mivel az általa kért erőforrás le van foglalva egy másik, ugyancsak várakozó folyamat által. A párhuzamosan végbemenő folyamatok erőforrás-használata során kialakulhat egy olyan helyzet, amely minden résztvevő folyamat leállásához (végtelen várakozásához) vezet. Ezt a leállási helyzetet
holtpontnak (deadlock) nevezzük. Mindez abból adódhat, hogy egyes folyamatok olyan erőforrásokat foglalnak le, amelyekre más folyamatok is igényt tartanának, ahol a foglalások és az igények egymáshoz való viszonya vezet a holtponthoz. A legegyszerűbb eset az, amikor két folyamat között alakul ki holtpont. Tegyük fel például, hogy egy rendszerben a P1 és P2 folyamat két erőforrást használ (pl. az NY nyomtatót és az M mágnesszalag egységet) a következő módon: P1 folyamat: . Lefoglal(M) <mágnesszalag használata> Lefoglal(NY) <nyomtató és mágnesszalag együttes használata> Felszabadít(M) <nyomtató használata> Felszabadít(NY) . P2 folyamat: . Lefoglal(NY) <nyomtató használata> Lefoglal(M) <nyomtató és mágnesszalag együttes használata> Felszabadít(NY) <mágnesszalag használata> Felszabadít(M) . Tegyük fel, hogy a két folyamat párhuzamos végrehajtásakor P1 már lefoglalta M-et, de még nem foglalta
le NY-et, P2 pedig lefoglalta NY-et de még nem foglalta le M-et. (Ilyen helyzet kialakulhat, hiszen független folyama- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 58 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom ◄ Vissza 59 ► tok utasításainak végrehajtási sorrendjére nincs korlátozás, de ugyanezért nem biztos, hogy minden együttfutáskor kialakul ilyen helyzet.) A továbbiakban P1 előbb-utóbb le akarja foglalni NY-et is, de nem kaphatja meg, mert az már P2-é. P2 pedig le akarja foglalni M-et is, de az már P1-é Így mindkét folyamat arra fog várni, hogy a másik elengedje az erőforrását, de ahhoz egyik sem tud eljutni, mert előbb erőforráshoz kellene jutnia. A két folyamat között keresztreteszelés alakul ki, s így ebből a helyzetből egyik sem tud továbblépni (2.12 ábra) P1 folyamat Foglalás Mágnesszalag Kérés Nyomtató Kérés Foglalás P2 folyamat 2.12
ábra Két folyamat holtpontban Vegyük észre, hogy ha a folyamatok úgy futnak le, hogy valamelyiknek sikerül mindkét erőforrást megszerezni, akkor már nem alakulhat ki holtpont, hiszen akkor ez a folyamat előbb-utóbb fel is szabadítja azokat és ekkor – ha már közben igényelte, várakozás után – a másik is hozzájuk juthat. A holtpont kialakulásának valószínűsége annál nagyobb, minél hosszabb a folyamatok azon szakasza, amikor még csak egyik erőforrást birtokolják. Nem alakulhatna ki holtpont, ha a folyamatok egyetlen művelettel kérnék el mindkét erőforrást Belátható az is, hogy akkor sem alakulhatna ki holtpont, ha mindkét folyamat azonos sorrendben kérné el a két erőforrást. A fenti, legegyszerűbb esetnél lényegesen bonyolultabban és áttételesebben is összeakadhatnak a folyamatok amiatt, hogy közös erőforrásaik vannak, illetve üzeneteket várnak egymástól. A 213 ábra egy olyan holtpontot illusztrál, amely három folyamat
között alakult ki, három erőforrás használata során. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 59 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 60 ► Foglalás Kérés R3 erőforrás P1 folyamat P3 folyamat Foglalás Kérés R1 erőforrás R2 erőforrás Kérés Foglalás P2 folyamat 2.13 ábra Holtpont három folyamattal A P1 processz az R1 erőforrást foglalja le, és az R3 erőforrást kéri. A P2 az R2-t foglalja le, és az R1-et kéri, míg a P3 az R3-at foglalja le, és az R2-t kéri. Egyik processz sem tud tovább folytatódni, mivel mindegyik egy olyan erőforrásra vár, amelyet egy másik várakozó processz foglal le. Ebből a helyzetből csak akkor van kiút, ha az egyik folyamat képes volna észlelni a szituációt, és vagy visszavonná az erőforrásra vonatkozó kérését, vagy pedig elengedné az általa lekötött erőforrást. Általánosan is
kimondhatjuk, hogy egy rendszerben a folyamatok egy H halmaza holtponton van, ha a H halmazba tartozó összes folyamat olyan erőforrásra várakozik, amelyet egy másik, a H halmazba tartozó folyamat tart lekötve. Ugyancsak holtpont fellépésére adhat módot az erőforrásokat kezelő rendszerkomponens és egy folyamat kapcsolata. Tegyük fel például, hogy egy felhasználói folyamat diszk-hozzáférést kezdeményez, amihez a diszkkezelő program futására is szükség van. Ha a folyamat programja nem hagyott elég helyet a memóriában a diszkkezelő program számára, akkor az nem is tölthető be oda, és így leállási helyzet keletkezik. Láthatjuk tehát, hogy a holtpontba kerülő folyamatok számára a holtpont szituáció valamilyen eseményre – többnyire valamilyen erőforrás felszabadulására vagy rendszerhívás megvalósulására – történő várakozás formájában jelentkezik. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 60
► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 61 ► Megjegyzések: • A rendszerben lehetnek futó, élő folyamatok is a holtponton levők mellett, tehát nem biztos, hogy a leállás teljes körű. • Nem biztos, hogy a holtpont a folyamatok minden együttfutásakor kialakul, sőt az esetek jelentős részében igen kis valószínűséggel alakul ki. Ezért a jelenség nehezen reprodukálható, alattomos hibaforrás • A holtpont egyrészt azon funkciók kiesését okozza, amelyeket az elakadt folyamatok látnak el, másrészt csökkenti a rendszer teljesítőképességét, hiszen az elakadt folyamatok által lekötött erőforrásokhoz a többi folyamat sem tud hozzájutni. A számítógépes rendszerek teljesítményének növelésével egyre több folyamat és erőforrás (CPU-kat is beleértve) működtetése válik szükségessé. Ez a trend egyértelműen növeli a holtpontok kialakulásának
valószínűségét, s emiatt egyre fontosabbá válik a holtpontok automatizált kezelésének megoldása is. Magától értetődik, hogy egy felhasználói programban nem érdemes a holtponttal foglalkozni. Ugyanis ha egy ilyen program holtpontba kerül, a futása leáll, s így semmilyen további intézkedést nem tud tenni. A megoldást tehát mindenképpen az operációs rendszerre kell hárítani A következőkben az erre vonatkozó módszerekkel foglalkozunk 2.42 Működési modell A folyamatok erőforrás használata a következő lépésekre bontható: 1. Kérés: Ha a kérés nem teljesíthető azonnal (pl az erőforrást egy másik processz használja), a kérést kiadó processznek addig kell várnia, amíg hozzá nem jut az erőforráshoz. 2. Használat: A processz működteti az erőforrást, pl egy printeren nyomtatást hajt végre. 3. Elengedés: A processz elengedi, vagyis felszabadítja az erőforrást A kérés és az elengedés rendszerhívással valósul meg. Az
operációs rendszer minden egyes használatot maga szervez és tart nyilván, egy táblázatban rögzítve azt, hogy melyik processz melyik erőforrást működteti. Ha foglalt erőforrásra ad ki kérést egy processz, akkor várakozási sorba fog kerülni. Mint már volt róla szó, a holtpont nem egyetlen folyamat működéséből, hanem folyamatok egy csoportjának együttes működéséből származik. A holtponti állapot csak a csoportba tartozó folyamatokra és erőforrásokra áll fenn. A csoporton kívüli folyamatok továbbra is képesek működni, A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 61 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 62 ► mindaddig, amíg kívül tudnak maradni a csoporton. Ha viszont az összes erőforrás holtpontba kerül, akkor a teljes rendszerműködés fog leállni. Egy holtpont létrejötte csak akkor lehetséges, ha az alábbi négy szükséges
feltétel teljesül egyidejűleg: 1. Kölcsönös kizárás: Egy erőforrást egy időben csak egy folyamat használhat. Ha egy másik folyamat kéri ezt az erőforrást, annak várnia kell, míg az erőforrás fel nem szabadul. 2. Foglalás és várakozás: Léteznie kell legalább egy olyan folyamatnak, amely legalább egy erőforrást leköt, és olyan további erőforrásokra vár, amelyeket más folyamatok kötnek le. 3. Kiszorításmentesség: Lefoglalt erőforrást nem lehetséges elvenni egy folyamattól. Azt csak a feladatának végrehajtása után szabadítja fel, engedi el a folyamat 4. Körkörös várakozás: Léteznie kell egy olyan {P1, P2, , Pn} halmaznak, amelybe tartozó folyamatok közül P1 a P2 által lefoglalt erőforrásra várakozik, P2 a P3 által lefoglalt erőforrásra várakozik stb, Pn−1 a Pn által lefoglaltra, és végül Pn a P1 által lefoglaltra. Az erőforrás-foglalási gráf (EFG) A holtpontok pontosabb leírására és tanulmányozására
szolgál az ún. erőforrás-foglalási gráf (EFG), angolul: resource-allocation graph Az EFG egy irányított gráf, amelyben a csomópontok (csúcsok) a rendszerben éppen működő, aktív folyamatok P = { P1, P2, , Pn } halmazából, valamint a rendszer összes létező erőforrás-típusának R = { R1, R2, , Rm } halmazából tevődnek ki. Irányított él csak egy P-elem és egy R-elem között létezhet Ha Pi kéri az Rk erőforrást, akkor Pi-ből Rk felé mutat az irányított él. Az ilyen élt kérési élnek nevezzük Ha pedig Rk már hozzá van rendelve a Pi processzhez, vagyis Pi már lefoglalta Rk-t, akkor Rk-ból Pi felé mutat egy irányított él. Az ilyen élt foglalási élnek nevezzük Ábrázolásban Pi-t egy kör, Rk-t pedig egy négyszög fogja jelölni. Az Rk egy erőforrást képvisel, amelyből egy rendszerben egynél több példány is létezhet. Ezt úgy ábrázoljuk, hogy az Rk négyszögében annyi pontot tüntetünk fel, ahány példánya van Rk-nak
(Például, három printer esetén három pont fog szerepelni.) Egy kérési él csak az Rk négyszög felé mutat, míg egy A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 62 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 63 ► foglalási él a négyszög egy pontjából indul ki. Tudniillik abból a pontból, amihez tartozó példány le van foglalva. A kettős kapcsolatokat a 214 ábrán szemléltetjük. Rk Kérési él Pi Foglalási él Pi Rk 2.14 ábra Kettős kapcsolatok az erőforrás-foglalási gráfokban Egy rendszer erőforrás-foglalási gráfja mindig egy aktuális állapotot ír le. Ez az állapot és vele a gráf is annak megfelelően változik, hogy milyen új kérések jelentkeznek, ill. milyen foglalások keletkeznek, vagy szűnnek meg Példaként vegyük a 2.15 ábrán látható EFG-t, ami a következő állapotot jeleníti meg: P = { P1, P2, P3 } R = { R1, R2, R3, R4 } Az
erőforrások összetétele: • • • • Egy példány az R1 típusból. Két példány az R2 típusból. Egy példány az R3 típusból. Három példány az R4 típusból. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 63 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom R1 P1 ◄ Vissza 64 ► R3 P2 R2 P3 R4 2.15 ábra Egy erőforrás-foglalási gráf A folyamatok állapotai a következők: • A P1 folyamat az R2 típusú erőforrás egy példányát foglalja le, miközben az R1 erőforrásra várakozik. • A P2 folyamat az R1-et és R2-t foglalja le, miközben az R3-ra várakozik. • A P3 folyamat az R3 erőforrást foglalja le. Az EFG ismeretében kimondható, hogy ha az nem tartalmaz önmagában záródó irányított hurkot (más szóval körutat vagy ciklust), akkor rendszerben üzemelő folyamatok egyike sem lehet holtponton. Nem teljesül ugyanis a 4. szükséges feltétel, vagyis nincs
körkörös várakozás Ha ellenben a gráfban van hurok, akkor megvan a holtpont lehetősége is Kimutatható, hogy ha mindegyik erőforrás csak egy példányban létezik, akkor egy hurok létrejötte mindig holtpontot jelent. Ugyanez áll fenn minden olyan hurokra is, amelyben levő erőforrások csak egy példányban fordulnak elő, egy tetszőleges rendszeren belül. Ilyen esetekben tehát a hurok megléte, vagyis a körkörös várakozás, nemcsak szükséges, hanem elégséges feltétele is a holtpontnak. Többpéldányos erőforrások esetén egy ciklus megléte lehet, hogy holtpontot képvisel, de az is lehet, hogy nem. A következőkben mind a két esetre egy példát mutatunk be. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 64 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom ◄ Vissza 65 ► Először a 2.15 ábra gráfjához térünk vissza Tegyük fel, hogy a P3 folyamat kérést ad az R2
egyik példányára Mivel nincs szabad példány, a gráfhoz egy P3 – R2 kérési él adódik (2.16 ábra) Ebben a helyzetben két ciklus létezik a gráfban: P1 – R1 – P2 – R3 – P3 – R2 – P1, P2 – R3 – P3 – R2 – P2. R1 P1 R3 P2 R2 P3 R4 2.16 ábra Erőforrás-foglalási gráf holtponttal A P1, P2 és P3 folyamatok egyaránt holtpontba kerültek. A P2 folyamat várakozik R3-ra, melyet a P3 tart lefoglalva. Másrészt pedig P3 várakozik arra, hogy vagy P1 vagy P2 engedje el R2-t. Mindezen felül P1 arra vár, hogy a P2 engedje el R1-et. A másik példa gráfja a 2.17 ábrán látható Ebben a gráfban szintén létezik egy ciklus, a P1 – R1 – P3 – R2 – P1 sorrend szerint. Ugyanakkor azonban nem áll fenn holtpont, mivel P4 el fogja engedni az R2 erőforrás egyik példányát, ami azután P3-hoz lesz rendelhető. A hozzárendelés után megszűnik a ciklus is Itt a következő állapot az lehet, hogy vagy P2 vagy P3 engedi el R1-et, amihez így P1
hozzá fog jutni. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 65 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 66 ► R1 P2 P1 P3 R2 P4 2.17 ábra Erőforrás-foglalási gráf hurokkal, de holtpont nélkül Összefoglalva: Ha egy EFG nem tartalmaz hurkot, akkor a rendszer nem lehet holtponti állapotban. Másrészt pedig, ha legalább egy hurkot tartalmaz, akkor a rendszer lehet, hogy holtponti állapotban van, de az is lehet, hogy nincs abban. 2.43 Holtpontok kezelése Elvileg három különböző megoldás lehetséges a holtpontok kezelésére: • Olyan működési elvet vezetünk be, amelyben a rendszer soha nem léphet be holtponti állapotba. Erre vagy a holtpont-megelőzést (deadlock prevention), vagy pedig a holtpont-elkerülést (deadlok avoidance) eredményező módszerek szolgálnak. • Megengedjük a holtpont létrejöttét úgy, hogy ezt az állapotot automatizált módon
detektáljuk és szüntetjük meg. (Angolul: deadlock detection and recovery.) • Nem építünk be semmilyen rendszermegoldást, a holtpontok észlelését és feloldását operátori teendőnek tekintjük. A következőkben részletesebben foglalkozunk a fenti elvek megvalósításával. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 66 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 67 ► 2.44 Holtpont-megelőzés A holtpont megelőzése statikus védekezés, amikor is olyan együttműködési elvek szerint építjük fel a rendszert, amelyek eleve megakadályozzák a holtponthelyzet kialakulását. Mindez olyan módszerek alkalmazásával jár, amelyek a kialakuláshoz szükséges négy feltétel közül legalább egynek a lehetőségét zárják ki. Ezek a módszerek az erőforrásokra vonatkozó kérések kiadásában írnak elő korlátozásokat Az egyes szükséges kritériumok
teljesülésének megakadályozása a következők szerint történhet: 1. Kölcsönös kizárás A kölcsönös kizárás elvét nem lehet megszüntetni az olyan erőforrások esetében, amelyek nem oszthatók meg, mint pl. egy printernél Ezek miatt tehát fennmarad a holtpont lehetősége. Ugyanakkor pedig a megosztható erőforrások nem követelik meg a kizárást, s ezért nem is lehet közük a holtponthoz. Jó példát adnak erre a csak olvasható (read-only) fájlok, amelyekhez egyidejűleg, várakozás nélkül tudnak hozzáférni a folyamatok 2. Foglalás és várakozás Ennek a feltételnek a kizárása úgy érhető el, ha garantáljuk, hogy egy folyamat csak akkor kérhessen egy erőforrást, ha már nem foglal le más erőforrásokat. Egy lehetséges megoldás erre az, hogy minden egyes folyamathoz eleve hozzárendeljük az általa kért összes erőforrást, még mielőtt elkezdődne a végrehajtása Egy alternatív megoldásban csak akkor engedjük meg egy folyamatnak,
hogy új erőforrást kérjen, ha nem tart lekötve egyetlen másikat sem. Ez úgy értendő, hogy egyszerre kérhet több erőforrást is, de csak akkor, ha már felszabadította az összes erőforrást, amit a kérés előtt használt volt, vagy pedig nem kötött volt le egyet sem. Könnyen belátható, hogy mindkét megoldás lassítja a számítógépes rendszer működését, mivel az erőforrások egyidejű kihasználtsága lényegesen le fog csökkeni. 3. Kiszorításmentesség A szükséges feltétel megszüntetésének egyik módja a következő: Ha egy folyamat olyan erőforrást kér, amire várnia kell, akkor az általa már lefoglalt erőforrások mindegyike el lesz tőle véve. A kiszorított erőforrások bekerülnek abba a listába, amely a folyamat által várt erőforrásokat sorolja fel. A folyamat akkor lesz újraindítva, amikor a listában levő összes erőfor- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 67 ► Operációs
rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 68 ► rás elérhetővé válik számára. (Beleértve az újonnan kérteket és a kiszorított, félbehagyott régieket is) Előfordulhat, hogy az újonnan kért erőforrásokat más folyamatok is kérték korábban, és azok várakoznak rájuk. Mindezek a folyamatok ekkor ki lesznek szorítva a várakozásból, és a kérő folyamat kapja meg a jogot a várakozásra. A várakozása alatt elvehetik tőle is némelyik erőforrást, de csak akkor, ha azokat egy másik folyamat kérte. Végül is egy ilyen folyamat csak akkor indítható újra, ha egyszerre hozzá tud jutni az általa újonnan kért, valamint a várakozása alatt tőle elvont összes erőforráshoz. Az olyan megoldást, amelyben egy adott kérő folyamat számára adjuk át az erőforrást, a várakozó folyamat kárára, kiszorító vagy preemptív eljárásnak nevezzük. 4. Körkörös várakozás A körkörös várakozás
(ciklus, hurok) megakadályozásának egy lehetséges módja az, hogy mindegyik erőforráshoz hozzárendelünk egy saját sorszámot, és előírjuk, hogy mindegyik folyamat csak a számozás növekvő sorrendjét követve kérhet erőforrást. az Ri erőforrástípushoz rendelt egyedi sorszám jelölése legyen N(Ri). Például: N(szalagegység) = 1, N(diszkegység) = 5, N(nyomtató) = 12. Ezek után a holtpont megelőzése a következő szabályok betartása révén valósítható meg: • Mindegyik folyamat csak az N(Ri) számok növekvő sorrendjében kérhet erőforrást egyenként, egymás után. Kivételt képez az, amikor egyazon típusból van szüksége több példányra Ezek azonos sorszámúak, és egyszerre kérhetők. Ha egy Ri erőforrás után egy Rk-ra van szüksége, akkor azt csak abban az esetben kérheti, ha N(Rk) > N(Ri). Ha például egy folyamatnak ugyanabban az időben van szüksége egy szalagegységre és egy nyomtatóra, akkor a fenti számozás
alapján először a szalagegységet kell kérnie, és csak utána kérheti a nyomtatót. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 68 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 69 ► • Megköveteljük még azt is, hogy amikor egy folyamat az Rk típus egy példányát kéri, akkor előtte minden olyan erőforrást el kellett engedjen, amelyre N(Ri) ≥ N(Rk). Bizonyítható, hogy a fenti két szabály betartása garantálja, hogy nem jöhet létre körkörös várakozás a rendszerben, így tehát holtpont sem alakulhat ki. Természetesen ez a megoldás is azzal jár, hogy csökken az erőforrások kihasználtsága, és ezen keresztül a rendszerteljesítmény is romlik. Megjegyzendő még, hogy a számozásnál célszerű figyelembe venni az erőforrások normál használati sorrendjét. Például, mivel a szalagegységre rendszerint a nyomtató előtt van szükség, érdemes az
alábbi relációt betartani: N(szalagegység) < N(nyomtató). 2.45 Holtpont-elkerülés Itt olyan megoldások alkalmazására kerül sor, amelyekben a foglalásikérési szekvenciák elemzése alapján dönt a rendszer arról, hogy mely folyamatoknak adjon erőforrást, illetve melyeket késztessen várakozásra. Ez már ún. dinamikus védekezés, amelyben a szinkronizációt és a kommunikációt felügyelő alrendszer a működés közben nem enged kialakulni holtpontveszélyes helyzeteket A különböző algoritmusok abban térnek el, hogy milyen előzetes információt igényelnek a processzek erőforrás-szükségletére vonatkozóan. A legegyszerűbb és egyben leghasznosabb modell azt igényli, hogy mindegyik processz előre adja meg az egyes típusokból azoknak az erőforrásoknak a maximális számát, amelyeket potenciálisan fel fog használni. Ezeknek az adatoknak az előzetes ismerete alapján olyan algoritmus alakítható ki, amely biztosítja, hogy a rendszer
semmikor ne léphessen be holtponti állapotba. A holtpont-elkerülésre szolgáló algoritmusok a mindenkor fennálló erőforrás-foglalási állapotot vizsgálják és avatkoznak be azzal a céllal, hogy soha ne alakulhasson ki egy körkörös várakozási helyzet. Az aktuális erőforrásfoglalási állapotot a rendelkezésre álló erőforrások, a lefoglalt erőforrások, valamint a processzek maximális igénye határozzák meg. A biztonságos állapot (safe state) Egy állapotot akkor nevezünk biztonságosnak, ha abban a rendszer mindegyik folyamathoz hozzá tudja rendelni az erőforrást, maximális igény szerint, egy megfelelő sorrendben úgy, hogy nem jön létre holtpont. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 69 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 70 ► A megfelelő sorrend a következő módon értelmezendő: Az adott állapotban legyen a kéréssel jelentkező
folyamatok sorba rendezett felsorolása P1, P2, P3, , Pn. Ezt a sorrendet biztonságosnak nevezzük, ha mindegyik Pi-nek ki lehet elégíteni a még fennálló erőforrásigényét a szabad erőforrásokkal, plusz olyan erőforrásokkal, amelyeket azon Pk folyamatok tartanak lefoglalva, amikre k < i. Ebben a helyzetben Pi-nek meg kell várnia, amíg az összes Pk elengedi az általa kért erőforrásokat Amikor ez bekövetkezik, Pi végrehajtja az összes előírt feladatát, visszaadja az erőforrásokat, és befejezi működését. Amikor Pi leáll, az i-nél nagyobb indexű folyamatok meg tudják kapni a Pi erőforrásait, és így tovább, a biztonságos sorrendbe rendezett összes folyamatra vonatkozóan. Ha a biztonságos sorrend létezik, akkor a kiindulási állapot biztonságos (safe state). Ha nem létezik, akkor az állapot nem biztonságos (unsafe state) A fenti kritérium alapján olyan vizsgálati algoritmus készíthető, amelynek felhasználásával automatizáltan
és egyértelműen el lehet dönteni egy állapotról, hogy az biztonságos-e vagy sem. Ebben az algoritmusban valójában csak azt kell szisztematikusan megvizsgálni, hogy a processzek egy biztonságos sorrendbe rendezhetőek-e. A biztonságos állapotról kimondható, hogy nem holtponti állapot. Megfordítva: egy holtponti állapot nem biztonságos állapot. Ugyanakkor azonban egy nem biztonságos állapot nem feltétlenül jelent holtpontot. Fennáll viszont a lehetősége annak, hogy holtponthoz vezessen, vagyis az alakuljon ki belőle. Amíg biztonságos állapotban vagyunk, az operációs rendszer képes elkerülni a nem biztonságos, ill. a holtponti állapotot A nem biztonságos állapotban viszont a rendszer már nem tudja megakadályozni, hogy a processzek úgy kérjenek erőforrást, hogy az ne vezessen holtponthoz. Ezt már a processzek viselkedése fogja ilyenkor befolyásolni és meghatározni. A különböző rendszerállapotok halmazait és a köztük fennálló
viszonyt a 2.18 ábrán szemléltetjük A biztonságos állapot koncepciójából kiindulva olyan algoritmus alakítható ki, amely garantálja, hogy a rendszer soha nem kerül holtpontba. Ehhez mindössze azt kell elérni, hogy mindig a biztonságos állapotban maradjon a rendszer. Induláskor, kezdetben mindig a biztonságos állapot áll fenn. Ha egy processz erőforrást kér, ami rendelkezésre áll, akkor a A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 70 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 71 ► Nem biztonságos állapotok Holtponti állapotok Összes lehetséges állapot halmaza Biztonságos állapotok 2.18 ábra Állapothalmazok ábrázolása rendszernek azt kell eldöntenie, hogy az erőforrást azonnal allokálja, vagy pedig a processznek várnia kell rá. A kérést csak akkor teljesíti, ha az allokáció biztonságos állapotban hagyja a rendszert Mint látható,
ebben a mechanizmusban egy folyamat akkor is várakozhat, ha pillanatnyilag rendelkezésre áll az erőforrás. Ezért a holtpontelkerülés fenntartása csökkenti az erőforrás-kihasználást A bankár-algoritmus Az elkerülési stratégiák közül a legismertebb az ún. bankár-algoritmus, amelyet E W Dijkstra dolgozott ki, a bankok működési analógiájára Az elnevezés onnan ered, hogy ezt az elvet a bankvilágban is alkalmazzák annak érdekében, hogy egy bank soha ne kölcsönözhesse ki az összes pénzkészletét, s így folyamatosan tudjon mindegyik ügyfelének új kölcsönt biztosítani, bizonyos észszerű határok között persze. Ezt úgy tudják elérni, hogy a kölcsönt kérők számára külön-külön egy hitelkeretet biztosítanak, amit nem feltétlenül teljesítenek azonnal száz százalékig. Ha egy ügyfél a keretének egy részét kikölcsönözte, és újabb pénzt kér, az első összeget csak akkor kell visszafizetnie, ha már megkapta a további
összeget. Esetünkben a bank kihelyezhető tőkéjének a számítógép erőforrásai, míg az ügyfeleknek az erőforrásért folyamodó processzek felelnek meg. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 71 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 72 ► Amikor a számítógépen egy új processz lép be a rendszerbe, annak meg kell adnia mindegyik erőforrástípusból az általa maximálisan kérhető darabszámot. Ezek összege nem lépheti túl a rendszerben található erőforrások teljes számát Amikor a processz kéri is a konkrét erőforrások egy halmazát, akkor az operációs rendszer meghatározza, hogy a kért erőforrások allokálása biztonságos állapotban hagyja-e a rendszert. Ha igen, akkor a jelentkező processz megkapja az erőforrásokat. Ha viszont nem, akkor várakozni kényszerül addig, amíg a többi processz nem enged el számára elegendő
erőforrást. Mint látható, ebben a modellben egyik folyamat sem szoríthatja ki a másikat, vagyis a bankár-algoritmus nem preemptív. Az algoritmus részletes és pontos ismertetésétől itt eltekintünk 2.46 Holtpont detektálása és megszüntetése Ha egy rendszer nem alkalmaz sem megelőzési, sem pedig elkerülési eljárást a holtpontokra nézve, akkor azok bármikor felléphetnek. Ilyen esetekben ajánlatos, hogy a rendszer az alábbi szolgáltatásokkal rendelkezzék: • Olyan algoritmussal, amely folyamatosan ellenőrzi a rendszer állapotait, és képes eldönteni, hogy holtpont lépett-e fel. Ezt holtpont-detektálásnak (deadlock detection) nevezzük • Olyan algoritmussal, amely képes a holtponti állapot megszüntetésére (recovery from the deadlock). Mindezzel kapcsolatosan megjegyzendő, hogy a detektálási-megszüntetési mechanizmus jelentős többletterhet képez az operációs rendszeren belül. Ez egyrészt a szükséges segédinformáció
karbantartásában nyilvánul meg, másrészt pedig a detektációs algoritmus végrehajtásában. További ráfordítást igényel a holtpontból való kikerülés, vagyis annak megszüntetése, ami egyébként potenciális veszteségeket is hordoz magában. Detektálás A holtpontok felfedésére szolgáló algoritmusok működése arra irányul, hogy ciklusokat keressenek a mindenkori erőforrás-foglalási gráfban. Ha nem létezik ciklus, nincsen holtpont. Ha létezik, további elemzésre van szükség annak eldöntésére, hogy valódi holtpont állapot jött-e létre. Az egzakt döntéshozatalhoz megfelelő algoritmusok állnak rendelkezésre, amelyek a ciklusból adódó lehetséges állapotátmeneteket vizsgálják. Ilyen megoldást tartalmaz a bankár-algoritmus is. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 72 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 73 ► Itt fontos kérdés
az, hogy milyen időpontokban érdemes a detektációs algoritmust elindítani, ugyanis az állandó működtetése nagymértékben lelassítaná a rendszert. Egy holtpont akkor jöhet létre, ha egy processz olyan kérést ad ki, ami nem teljesíthető azonnal. Lehetséges ugyanis, hogy ez a kérés az utolsó lesz egy várakozási hurok (lánc) zárásához. Szélsőséges esetben a detektáló algoritmust elindíthatjuk minden olyan alkalommal, amikor egy allokációs kérés nem teljesül azonnal. Az ilyen indítással azonosítani lehet a holtpontba került folyamatokat is, hiszen azok mindegyike kapcsolódik a hurokhoz A leírt indítási mód várhatóan jelentősen megnöveli a számítási időt, mert gyakran kellene futtatni az algoritmust. Egy kevésbé költséges alternatíva az, amelyikben periodikusan, pl óránként egyszer végeznénk indítást, vagy pedig csak akkor, amikor a CPU-kihasználás egy adott szint alá esik, pl. 40 százalék alá Megszüntetés Amikor
egy algoritmus holtpontot detektál, több intézkedési alternatíva jöhet szóba: Az egyik az, hogy egy vagy több holtponti folyamatot megszüntetünk, abortáljuk őket, azzal a céllal, hogy megszakítsuk a körkörös várakozást. A másik választás az, hogy erőforrásokat veszünk el egy vagy több holtpontba került folyamattól. A következőkben ezt a két alternatívát fogjuk részletezni. 1. Folyamat megszüntetése (abortálása) Két megközelítés lehetséges: • Mindegyik holtponti folyamatot abortáljuk: Ez a módszer garantáltan megtöri a holtponti ciklust, de ennek komoly ára lehet. Ugyanis a törölt processzek esetleg már igen sok számítást végeztek el, aminek eredménye elvész, és később ezért meg kell ismételni a számításokat. • Egy lépésben csak egy folyamatot abortálunk: Az abortálást egymás után végezzük, mindaddig, amíg a holtponti ciklus kiküszöbölődik. Ez a módszer is jelentős többletráfordítást igényel, mivel
minden egyes folyamat törlése után szükség van egy detektálási algoritmus elindítására, ami eldönti, hogy maradt-e még holtpontban levő folyamat. A másik gondot az jelenti, hogy nehéz meghatározni, hogy melyik folyamatot abortáljuk egy következő lépésben úgy, hogy az a legkisebb veszteséggel járjon A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 73 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 74 ► A minimális veszteség pontos meghatározására nincs mód. Egy törlendő folyamat kiválasztásához az alábbi tényezőket érdemes számításba venni: – Mekkora a folyamat prioritása. – Mennyi futási időt használt már fel a folyamat, ill. mennyi a még hátralevő ideje. – Hány erőforrást használt fel, ill. hányat tart lekötve a folyamat Ezek típusa is számít, mivel befolyásolják a megszüntetés bonyolultságát. – Hány további erőforrásra
van még szüksége a folyamatnak. – A folyamat interaktív vagy batch jellegű. – Hány folyamat megszüntetésére lehet még szükség. 2. Erőforrás elvétele Ebben a megoldásban egymás után vesszük el az erőforrást a processzektől és adjuk át őket más processzeknek mindaddig, amíg egy holtponti ciklust meg nem szüntetünk ezzel. A megoldás tehát preemptív jellegű A megvalósítást illetően az alábbi szempontok, ill. lehetőségek veendők számításba: • Kiválasztás: Fontos kérdés az elvételek sorrendjének meghatározása, a költségek minimalizálása érdekében. Az elvételek egy processz megszüntetését is eredményezhetik Itt célszerű költségtényező lehet egy holtponti processz által lekötött erőforrások száma, valamint az általa addig elhasznált futási idő mértéke. • Visszaállítás (rollback): Ha egy folyamattól elveszünk egy erőforrást, akkor a folyamat már nem tudja tovább fenntartani a normál működését,
hiányozni fog hozzá a szükséges erőforrás. Ilyen esetben egy lehetőség az, hogy visszalépünk a folyamat menetében egy korábbi biztonságos állapothoz, és újraindítjuk attól az állapottól Mivel általában nehéz meghatározni, hogy melyik állapot a biztonságos, a legegyszerűbb a teljes újrakezdés. Abortáljuk a folyamatot, majd újraindítjuk Természetesen hatékonyabb csak a szükséges pontig visszalépni a folyamatban, és úgy megtörni a holtpontot. Ez a módszer azonban jóval bonyolultabb szervezést igényel, továbbá nagy mennyiségű adat fenntartását és kezelését az összes folyamat állapotára vonatkozóan. A gyakorlati megvalósítás azzal jár, hogy a processz szabályos időközönként közli az operációs rendszerrel a futás közbeni állapotait. A rendszer ezeket az állapotokat elmenti. Az egyes állapotok ún ellenőrzé- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 74 ► Operációs rendszerek A
dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 75 ► si pontokat (checkpoint) jelentenek. Ha a rendszer a folyamatot holtpontban találja, akkor erőforrás-elvétel után egy alkalmasnak ítélt ellenőrzési ponttól tudja később újraindítani Az ellenőrzési ponton elmentett állapotinformáció szolgál az újraindításhoz. A folyamat visszaállítása (rollback) tehát nem más, mint egy megfelelőnek ítélt ellenőrzési ponthoz való visszatérés és az onnan történő újraindítás. Mindehhez még annyit fűzünk, hogy a visszaállítási mechanizmus változtatás nélkül felhasználható a folyamatok abortálása esetén is. Az éhezés (starvation) problémája A költségtényezők alapján történő kiszorítás azzal járhat, hogy ismétlődően ugyanattól a folyamattól lesz elvéve az erőforrás. Ekkor előállhat az a helyzet, hogy a folyamat huzamosan nem tud erőforráshoz jutni. Az ilyen helyzetet éhezésnek
(starvation) szokás nevezni. Ennek elkerülésére olyan korlátszámot célszerű beépíteni, aminél többször nem lehet egymás után kiszorításban részesíteni egy folyamatot. Ugyancsak jó megoldás az is, hogy egy folyamat ismétlődő visszaállításainak számát korlátozzuk. 2.47 Holtpontkezelés kézi beavatkozással: A használatban levő operációs rendszerek jelentős része nem rendelkezik olyan automatizált mechanizmusokkal, amelyek a holtpontok megakadályozására vagy megszüntetésére szolgálnának. Ilyen operációs rendszer pl a UNIX is. Mindazonáltal a számítási teljesítmény folyamatos növekedése a párhuzamos folyamatok számának növekedését eredményezi, ami növelni fogja a holtpontok kialakulásának valószínűségét. Emiatt egyre nagyobb jelentősége lesz a beépített holtpontkezelő mechanizmusoknak Ha egy rendszer semmilyen automatizmussal nem rendelkezik, akkor egy holtpont kialakulását a felhasználó vagy az operátor
tudja csak észlelni. Ilyenkor az ő feladatuk a holtpont felismerése, és ezt követően a megfelelő intézkedés megtétele, az üzemeltetés zavartalan folytatása érdekében. A lehetséges intézkedések: • Folyamatok egymás utáni megszüntetése (abortálása), mindaddig, amíg a holtponthelyzet meg nem szűnik. Ezt követően az abortált folyamatok egymás utáni újraindítása következhet • A teljes rendszer leállítása (shut-down), majd a megfelelő törlések elvégzése után, megváltoztatott szervezéssel történő teljes újraindítás. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 75 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 76 ► 2.5 Folyamatok kezelése az operációs rendszerekben 2.51 A működés alapjai A folyamat megismert modellje mind multiprogramozott, mind pedig multiprocesszoros rendszerekben használható. A folyamatok kezelésével kapcsolatos
feladatok természetesen különbözőek a két rendszertípus esetén, hiszen a modell megvalósítása a különböző rendszerarchitektúrákon egymástól lényegesen különböző problémákat vet fel. Általában igaz, hogy a multiprocesszoros rendszerekben a folyamatok száma meghaladja a CPU-k számát. Emiatt ilyenkor is megoldandó az egyes processzorok multiprogramozott működtetése, és emellett természetesen a processzorok együttműködésével kapcsolatos feladatok is A folyamatok kezelésének alapvető kérdéseit a következőkben multiprogramozott esetre tárgyaljuk, a multiprocesszoros esetre csak utalunk, illetve egyes kérdéseinek tárgyalására külön fejezetet szánunk (az elosztott rendszerekkel foglakozó részt). Egy multiprogramozott operációs rendszer minden időpillanatban folyamatok egy csoportjának végrehajtásával foglalkozik, amelyeket egyetlen processzoron futtat. A multiprogramozás foka nem más mint a rendszerben egy adott pillanatban
jelen lévő – tehát megkezdett, de még be nem fejezett – folyamatok száma. Az operációs rendszerek egyik alapvető feladata az erőforrás-gazdálkodás, ezen belül az erőforrás-kiosztás. A két alapvető erőforrás a processzor (CPU) és a központi memória. Ezek kiosztása még együttműködő folyamatok esetén is általában a versengés elvén történik, hiszen a folyamatok kódjában rendszerint nem jelenik meg külön utasítás az erőforrások lefoglalására, illetve felszabadítására. Amikor egy folyamat létrejön egy rendszerben, akkor az történik, hogy a folyamat megkapja a központi tár egy részét, ahova a kódja (vagy legalábbis annak egy éppen futtatandó része) és változói a megfelelő kezdőértékekkel betöltődnek. A kijelölt memóriához elvileg a háttértár valamely területe is hozzárendelhető, az éppen futó folyamat végrehajtandó utasításának azonban mindenképpen a memóriában kell lennie (hiszen a háttértárról
való betöltés a CPU-sebességhez képest rendkívül lassú). A proceszszorért emiatt csak azok a folyamatok versenyezhetnek, amelyek soron következő végrehajtandó kódrésze a memóriában van. Egy CPU egyidejűleg csak egyetlen folyamat utasításait tudja végrehajtani. Ha viszont elég gyakran átkapcsol egy folyamat egy részletének vég- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 76 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 77 ► rehajtása után egy másik folyamatra úgy, hogy mindegyik folyamat elég gyakran jusson szóhoz, akkor egy durvább időléptékben a folyamatok futása párhuzamosnak látszik. A dolgot úgy is felfoghatjuk, hogy a rendszer legfontosabb egyedi erőforrása a CPU, amelyet egyidejűleg csak egyetlen folyamat használhat, s amelyhez tartozik egy várakozási sor, ahol a többi, processzorra váró folyamat tartózkodik. A CPU felszabadulásakor az
operációs rendszer választja ki valamilyen algoritmussal a sorban várakozók közül azt a folyamatot, amelyik a következő időszakra megkapja a processzort: ez a rendszeresen ismétlődő kiválasztás jelenti a CPU-ütemezést (CPU scheduling). A CPU-ütemezés sikeres végrehajtása érdekében figyelembe kell venni azt a tényt, hogy a folyamatok két végrehajtási fázis váltakozásából tevődnek ki: az egyik a CPU által végrehajtott utasítások, műveletek egybefüggő sorozata, a másik pedig az ezt követő input-output művelet. Másként fogalmazva, egy processznek két végrehajtási állapota van: a CPU-műveleti, illetve az I/O-műveleti állapot. Az így kezelt CPU-tevékenységet szokás még CPU-löketnek (angolul: CPU burst), az I/O-tevékenységet pedig I/Olöketnek (I/O burst) is nevezni. A folyamatok e két állapot között alternálnak oda és vissza, ciklikus ismétlődéssel. Egy processz végrehajtása mindig egy CPU-lökettel kezdődik Ezt követi
egy I/O-löket, majd ismét egy CPU-löket, ezután egy újabb I/O-löket, és így tovább (2.19 ábra) A processz mindig egy CPUlökettel fejeződik be, amit egy kilépést előidéző rendszerkérés zár be A beviteli-kiviteli művelet végrehajtása a megszakításos, vagy a közvetlen memória-hozzáférés (DMA) jellegű szervezés miatt gyakorlatilag csak a perifériát (és időszakosan az I/O-ban részt vevő vezérlő egységeket és adatutakat) köti le, és nem veszi igénybe a CPU-t. Egy folyamat I/Oműveleteinek végrehajtása közben a CPU így más folyamat futtatásával foglalkozhat. Ekkor természetesen lehetséges, hogy a működő perifériára egy közben futó folyamat újabb beviteli-kiviteli műveletet kezdeményez, és ez többször is ismétlődhet. Tehát a perifériákért is versenyeznek a folyamatok, azokat is egyedi erőforrásoknak kell tekinteni, a rájuk várakozó folyamatokat sorba kell állítani, ütemezni kell stb. Amikor egy I/Oművelet
befejeződött, a műveletet kezdeményező folyamat ismét a CPUért fog versenyezni, hogy a következő processzor-lökete végrehajtódhasson A CPU-ra és az I/O perifériákra várakozó különböző processzek sorban állásának körfolyamatát a 2.20 ábra mutatja be A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 77 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom load store add store read<file> Vissza ◄ 78 ► CPU-löket várakozás I/O-ra I/O-löket store increment index write<file> CPU-löket várakozás I/O-ra I/O-löket load store CPU-löket 2.19 ábra CPU-löketek és I/O-löketek váltakozása egy folyamaton belül Az operációs rendszer az elvégzendő feladatok végrehajtását valamilyen szempontból optimalizálni igyekszik. Ez lehet például kötegelt feldolgozás esetén az áteresztőképesség vagy a processzor-kihasználás maximalizálása, egy job
átlagos átfutási idejének minimalizálása stb. Interaktív rendszerek esetén az átlagos válaszidő minimalizálása, valós idejű rendszerek esetében az időkorlát-túllépések minimalizálása, és még sok más jellemző. A megfogalmazott célokhoz igazítják azokat az algoritmusokat, amelyek döntenek az új folyamatok beengedéséről a rendszerbe (új job indulása, új felhasználó belépése), a multiprogramozás fokának változtatásáról (növelés vagy csökkentés), az egyes folyamatoknak kiosztott memóriaterület méretéről, és amelyek ütemezik az erőforrásokat. Az operációs rendszer folyamatkezelését két modellel szemléltetjük. Az egyik egy tömeg-kiszolgálási modell, az úgynevezett sorban állási modell (grafikus ábrázolása a 2.20 ábra szerinti sorban állási diagram), amely a folyamatok erőforrás-használatára koncentrál, a másik egy állapotmodell (grafikus ábrázolása a 21 ábrán bemutatott állapotdiagram), amely a
folyamatok végrehajtásának menetére koncentrál. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 78 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 79 ► Rövidtávú (CPU) ütemezés Hosszútávú ütemezés Belép Kilép CPU várakozási sor CPU Időszelet lejárt Diszk Diszk várakozási sor Szalag Szalag várakozási sor IT Várakozás egy IT-re . Nyomtató . Nyomtató várakozási sor 2.20 ábra Folyamatok sorban állási diagramja 2.52 Sorban állási modell A sorban állási modell korlátos erőforráskészletért versengő folyamatok rendszerének elemzésére alkalmas. A modell a sorban állási diagramon szemléltethető. A modell addig áttekinthető, amíg a folyamatok erőforráshasználata szekvenciális, azaz elengedik a birtokolt erőforrást, mielőtt újat igényelnének. A 2.20 ábrán bemutatott diagram az operációs rendszerek tipikus sorban állási
diagramja Az ábra a processzor-löket és az I/O-löket ciklikusságát szemlélteti azzal a feltételezéssel (ami normális működés esetén álta- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 79 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 80 ► lában teljesül is), hogy a processzeknek közben folyamatosan elegendő memória áll rendelkezésükre. Az erőforrásokat körök, a várakozási sorokat téglalapok jelölik. A rendszer működését a folyamatok irányított élek mentén történő vándorlása szemlélteti. Az új, induló folyamatok CPU-lökettel kezdődnek, ezért a CPU várakozási sorába lépnek be. Normál befejeződés esetén ugyancsak CPU-löketből lépnek ki. Közben a beviteli-kiviteli műveleteiktől függően kerülnek át a különböző perifériák várakozási soraiba, illetve lesznek a perifériák használói. Egy beviteli-kiviteli löket után ismét
a CPU várakozási sorába kerülnek vissza A modell számításokra is alkalmas változata valószínűségi változókat és eloszlásfüggvényeket használ a terhelés (a folyamatok rendszerbe történő belépésének időbeli gyakorisága) és a kiszolgálás (az erőforrások birtoklásának időszükséglete) jellemzésére. A valószínűségi modell kiértékelése alapján adott struktúrára, adott terhelési és kiszolgálási paraméterek mellett számíthatók a rendszer fontos működési jellemzőinek (pl. átfutási idő, várakozási idő, a sorok hosszúsága) várható értékei, illetve egyéb valószínűségi jellemzői. A diagramon jól azonosíthatók az ütemezési pontok, amelyek tipikusan a várakozási sorok kimenetén helyezkednek el. Kivétel a rendszerbe való bejutást szabályozó ún. hosszú távú ütemező, amely tipikusan a kötegelt feldolgozást végző rendszerekben van jelen, és új job-ok végrehajtásának megkezdéséről (ezzel új
folyamatok indításáról) dönt. Kitüntetett szerepe van a CPU-ütemezőnek, amit általában rövid távú ütemezőnek hívnak, és amelynek algoritmusait külön fejezetben tárgyaljuk. (A rövid, illetve hoszszú távú elnevezés a futási gyakoriságra utal A hosszú távú ütemező általában akkor fut le, amikor egy job végrehajtása befejeződik A rövid távú ütemező pedig biztosan lefut, amikor egy processzor-löket befejeződik. A két gyakoriság között több nagyságrend különbség van). A perifériák ütemezése a leggyakrabban az érkezési sorrendben (FIFO) történik Kivétel pl. a mágneslemez, amelynek hatékony ütemezésével ugyancsak foglalkozunk a későbbiekben Néhány rendszerben működik középtávú ütemező is, amelynek szerepe a multiprogramozás fokának változtatása jellegzetesen azokban a helyzetekben, amikor a memória válik a rendszer szűk keresztmetszetévé, illetve ez a helyzet megszűnik. A középtávú ütemező –
észlelve a memóriaszűkét – egyes folyamatokat felfüggeszt, azaz memóriaterületüket és processzorállapotukat háttértárra menti, ezzel átmenetileg kivonja őket az erőforrásokért A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 80 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 81 ► folytatott versengésből. A felfüggesztett folyamatok memóriaterületét a többi folyamat használhatja. Később, ha a terhelés csökken, a felfüggesztett folyamatok visszahozhatók és folytathatják működésüket A középtávú ütemező helye nem mutatható meg a diagramon, mert a memória használata és a memóriaigény növekedése más erőforrások (CPU) használata közben lép fel, az erőforrás-használat nem szekvenciális, ezért a modell ennek leírására nem alkalmas. 2.53 Állapotkezelés Egy folyamat végrehajtásának dinamikáját a multiprogramozott rendszerekben az
állapot-átmeneti gráffal írhatjuk le. A 21 pontban bemutatott gráf (2.1 ábra) a folyamatok teljes környezetét tükrözte Az állapotok kezelésének részletesebb tárgyalásához tekintsük a 221 ábrát, amely az állapot-átmeneti gráf legfontosabb, lényegi részét tünteti fel CPU-t kap Létrejön Készenlét Befejezõdik Futás CPU-t elveszik, vagy lemond Várt esemény bekövetkezik Várakozásra vezetõ rendszerhívás Várakozás 2.21 ábra Folyamatok állapot-átmeneti gráfja Készenléti (futásra kész) (ready) állapotban vannak azok a folyamatok, amelyeknek következő műveletét a CPU bármikor végrehajthatná. Más szóval a CPU-n kívül minden más erőforrást birtokolnak, amire működésük adott szakaszában szükségük van. Futási (running) állapotban egy multiprogramozott rendszerben egy időben csak egyetlen folyamat lehet, amelynek az aktuális műveletét a CPU éppen végrehajtja. Várakozási (waiting, blocked) állapotban vannak azok
a folyamatok, amelyek nem tudják használni a CPU-t, mert valamilyen feltétel teljesülésére várakoznak. Ilyen feltétel lehet pl egy általuk kezdeményezett beviteli- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 81 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 82 ► kiviteli művelet befejeződése, együttműködő folyamatok esetén valamilyen szinkronizációs vagy kommunikációs művelet végrehajtódása. Állapotátmenetek Amikor a folyamat létrejön, megkapja a fizikai memória egy területét, ahova betöltődik a kódja, létrejönnek a változói, esetleg más erőforrásokat, indítási paramétereket kaphat. Az operációs rendszer nyilvántartásba veszi, és futásra kész, vagyis készenléti állapotba állítja, hogy végrehajtása megkezdőzhessen. Készenlét Æ futás állapotátmenet történik, amikor az operációs rendszer CPU-ütemezője kiválasztja a
folyamatot végrehajtásra. Új futó folyamat kiválasztása mindenképpen szükséges, ha az előző folyamat befejezte működését, vagy várakozó állapotba került, hiszen ilyenkor a CPU felszabadul. Futás Æ készenlét állapotátmenet két ok miatt fordul elő: • Az operációs rendszer elveszi a processzort a folyamattól (preemptív ütemezés). Amikor a CPU-ütemező nem érkezési sorrendben hajtja végre a futásra kész folyamatokat, hanem például prioritás szerinti sorrendben, akkor előfordulhat, hogy egy folyamat futása közben egy nála magasabb prioritású másik folyamat átlép várakozó állapotból futásra kész állapotba. Ha a prioritás azonnali érvényesítése fontosabb szempont, mint egyszerűen a CPU munkában tartása, akkor a futó folyamatot meg kell szakítani, vissza kell léptetni futásra kész állapotba, és a magasabb prioritású folyamatot kell futásra kiválasztani. • A folyamat lemond a processzorról (újraütemezést kér).
Együttműködő folyamatok kooperatív viselkedésének egyik formája, hogy nempreemptív ütemezés esetén egy folyamat hosszú processzor-löketek közben, meghatározott pontokon lehetőséget ad más folyamatok futására. Futás Æ várakozás állapotátmenet akkor következik be, ha a folyamat olyan műveletet indított, amelynek végrehajtása várhatóan hosszabb (más folyamat futtatására kihasználható idejű) CPU-tétlenséget okozna. Ilyenek a beviteli-kiviteli műveletek, az erőforrás-foglalások, ha az erőforrás foglalt, a szemaforra kiadott várakozások, ha a szemafor tilosat jelez, az üzenetfogadások, ha az üzenet még nem érkezett meg stb. Várakozás Æ készenlét állapotátmenet történik, ha a folyamat által várt esemény bekövetkezik (pl. az elindított bevitel-kivitel befejeződik, az erőforrás felszabadul, a szemaforra jelzés érkezik, az üzenet megérkezik stb) A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 82
► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 83 ► A folyamatok akkor fejezik be működésüket, amikor utolsó utasításuk végrehajtódik. Ez normális esetben egy olyan rendszerhívás (pl kilépés, – exit), aminek hatására az operációs rendszer felszabadítja a folyamat erőforrásait, és törli a folyamatot a nyilvántartásából, esetleg információt ad a folyamat szülőjének a futás eredményéről. A bemutatott állapotmodell csak a legalapvetőbb eseteket tartalmazza. A gyakorlatban az operációs rendszerek általában bonyolultabbak. Tartalmazzák például a felfüggesztés lehetőségét, ami a folyamat működésének időleges szüneteltetését jelenti (erőforrásai felszabadulnak), a folyamat abortálásának lehetőségét (végleges eltávolítását, általában rendellenes működés miatt), illetve több várakozó állapotot is bevezetnek. 2.54 Egy megvalósítási séma A
következőkben egy logikai sémát mutatunk be. A legtöbb operációs rendszerben ehhez hasonló megoldásokat találunk, bár a konkrét részletekben jelentős eltérések lehetnek. Mint a 2.1 pontban már láttuk, az operációs rendszer a folyamatok kezeléséhez szükséges információkat egy speciális adatszerkezetben, a processzvezérlési vagy folyamatvezérlési blokkban – PVB – (Process Control Block) tárolja. A folyamatvezérlési blokk tartalma: • • • • • • • • • a folyamat azonosítója, a folyamat állapota, a folyamat szülőjének és gyerekeinek azonosítója, a folyamathoz tartozó összes tárterület leírása, mutatók illetve a virtuális tárkezeléshez szükséges összes adat (címtranszformációs táblák, lemez blokkok leírása stb.), a folyamat által használt egyéb erőforrások leírása (pl. a megnyitott fájlok leírása), a regiszterek tartalma, várakozó folyamatoknál a várt esemény leírása, ütemezéshez
szükséges információk (prioritás, várakozási idő), számlázási információk és egyéb statisztikák. A sorban állási modellt az operációs rendszer tipikusan a folyamatvezérlési blokkok láncolt listákra fűzésével valósítja meg (2.22 ábra) A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 83 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 84 ► PVB 4 Futó folyamat PVB 1 PVB 3 PVB5 PVB 7 Futásra kész sor (CPU várakozási sora) 1. periféria várakozási sora . PVB 6 PVB 2 n. periféria várakozási sora IOVB 2 IOVB 6 2.22 ábra Sorban állási modell megvalósítása folyamatvezérlési blokkok láncolt listájával Az ábrán a 4. folyamat fut, az 1, 3, 5 és 7 folyamat futásra kész, az 1 periféria szabad, az n-edik periféria a 2 folyamat által kezdeményezett I/Oműveletet hajtja végre (a perifériák érkezési sorrendben szolgálják ki a
folyamatokat, ezért nincs külön mutató arra, hogy melyik folyamat műveletét hajtja végre éppen a periféria), de már a 6. folyamat is kiadott rá műveletet A 2 és 6 folyamat várakozik A beviteli-kiviteli műveletek kísérő adatait a beviteli-kiviteli vezérlési blokkok (IOVB) – (IOCB, Input-Output Control Block) tartalmazzák, amelyek a műveletet kiadó folyamat PVB-jére fűződnek fel. A perifériák mellett hasonló várakozási sorok szervezhetők szemaforokra, és más egyéb szinkronizációs, kommunikációs objektumokra Látható, hogy a bemutatott megoldásban a folyamat állapotát a PVBben tárolt állapotjelző mellett az is jellemzi, hogy a hozzá tartozó PVB éppen melyik sorban található. A CPU átkapcsolásakor a futó folyamat teljes állapotterét menteni kell, hogy a végrehajtás folytatható legyen, továbbá az új futó folyamat utoljára elmentett állapotterét kell elővenni, hogy annak végrehajtása folytatódjon. Ezt a műveletet
környezetváltásnak (context switching) nevezik. Tekintve, hogy a memóriát a folyamat tartósan birtokolja, a környezetváltás egyrészt a fizikai processzor regisztereinek, másrészt az operációs rendszer belső A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 84 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 85 ► változóinak (rendszertáblázatok, memóriakezelési információk, perifériahozzárendelések stb.) elmentését, és az új folyamatnak megfelelő beállítását jelenti A mentés a PVB megfelelő területeire történik Mindezt illusztrálta még a 23 ábra is A I/O műveletek végrehajtásának menete a következő: • A folyamat kitölt egy IOVB-t, amiben megadja a művelet paramétereit, • I/O rendszerhívást hajt végre az IOVB paraméterként történő átadásával. • Az operációs rendszer: – hozzáláncolja az IOVB-t a folyamat PVB-jéhez, – a
folyamat PVB-jét befűzi a periféria sorába, – ha a sor üres volt, az IOVB paramétereivel indítási parancsot ad a perifériának, – a folyamatot várakozó állapotba helyezi, – CPU ütemezést hajt végre, azaz kiválasztja a következő futó folyamatot és környezetet vált, – visszatér (a visszatérés a környezetváltás miatt az új folyamatra történik). A CPU és a perifériák párhuzamosan működnek. Az átvitelek végét megszakítások jelzik, amelyeket az operációs rendszer kezel (a megszakítások kiszolgáló programjait hardver-ütemezésű rendszerfolyamatoknak tekinthetjük). Egy I/O megszakítás kezelésekor az operációs rendszer: • az átvitel helyes vagy hibás eredményére utaló jelzést ír a periféria várakozási sorának elején álló PVB-hez láncolt IOVB-be, • a sor elején álló PVB-t kifűzi a sorból, átteszi a készenléti sorba, a PVBben a folyamat állapotjelzőjét készenlétire (futásra kész-re) állítja, • ha
van még várakozó folyamat a periféria sorában, a következő IOVB paramétereivel indítási parancsot ad a perifériának, • ha a CPU-ütemezés preemptív, CPU ütemezést hajt végre, • visszatér. Ezzel a szervezéssel az I/O rendszerhívást kiadó folyamatnak a rendszerhívást követő utasítása akkor hajtódik végre, amikor az átvitel már befejeződött, és a CPU-ütemező őt választotta ki futásra. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 85 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 86 ► A szinkronizációs és kommunikációs műveletek ugyancsak okozhatják a folyamatok várakozását. A szemafor Vár(s) műveletének korábban bemutatott definíciós programja: while s<1 do no-op; s:=s-1; Ez a program az oszthatatlanság mellett még azzal a feltételezéssel is él, hogy minden folyamatot külön processzor hajt végre, amelynek nincs más teendője
mint ciklikusan tesztelni a szemaforváltozót, amíg csak szabadnak nem találja. Multiprogramozott rendszerben ez a megoldás – az ún foglalva várakozás (busy waiting) – használhatatlan (gyakorlatilag még multiprocesszoros esetben is az, ezért nevezzük csupán definíciós programnak), hiszen a ciklikus tesztelés feleslegesen köti le a processzort és a memóriát. A szemaforkezelés ezért az operációs rendszer szolgáltatásai között szerepel Vár és Jelez rendszerhívásokkal, amelyek megvalósítása például a következő lehet: Feltételezzük, hogy az operációs rendszer folyamatkezelő rendszerhívásai között van elalszik művelet, amelyik a hívó folyamatot várakozásba helyezi és CPU-ütemezést indít, valamint felébreszt(p) művelet, amelyikkel egy folyamat futásra kész állapotba tudja tenni a p várakozó folyamatot. Feltételezzük továbbá, hogy a folyamathoz alkalmazott programozási nyelv rendelkezik listakezelő műveletekkel (felfűz,
lefűz). A szemafor megvalósításának pszeudo kódja: type semaphore = record érték:integer:=1; várósor: list of folyamat; end; Vár(s): s.érték := sérték-1; if s.érték<0 then begin felfűz(s.várósor); elalszik; end; Jelez(s): s.érték := sérték+1; if s.érték>-1 then begin lefűz(p,s.várósor); felébreszt(p); end; A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 86 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 87 ► Megjegyzések: • A szemafor s változójának pillanatnyi értéke tárolja a szemaforra várakozó folyamatok számát (negatív előjellel). • A szemafor ütemezési elve (a várakozók közül a továbbinduló kiválasztása) a listakezelő műveletek algoritmusában van elrejtve. 2.6 Processzorütemezés 2.61 Ütemezési alapfogalmak Az ütemezés általánosan a különböző események időbeni végrehajtási sorrendjének meghatározását
jelenti. Az operációs rendszerekben az ütemezés fogalmát leggyakrabban a multiprogramozott rendszerek azon funkciójára alkalmazzák, amikor az operációs rendszer egy adott erőforrásra várakozó folyamatok közül kiválasztja azt a folyamatot, amelyik az erőforrást használni fogja. Az operációs rendszer minden erőforrás esetén kezel egy ún. várakozási sort, mely tartalmazza az adott erőforrás használatára igényt tartó folyamatokat Ez jól látható a folyamatok sorban állási diagramján (2.20 ábra) Az ütemezési algoritmus a várakozó folyamatok közül választja ki azt, amelyik megkapja az erőforrás-használat jogát. A választás során az ütemezőnek gyakran ellentmondó szempontokat kell kielégítenie: Egyrészt úgy kell a folyamatokat kiválasztania, hogy a rendszer teljesítményét optimalizálja, másrészt minden folyamat erőforrásigényét ki kell elégítenie. A különböző szempontoknak való megfelelés érdekében ütemezési
algoritmusok kidolgozására és alkalmazására volt szükség. Ebben a fejezetben a legfontosabb erőforrás, a központi processzor (CPU) ütemezésén keresztül mutatjuk be a legelterjedtebb ütemezési algoritmusokat. Más erőforrások ütemezésével a későbbi fejezetekben találkozunk Mint azt már a 2.52 alpontban láttuk, a rendszer szabályozhatja, hogy a végrehajtásra váró folyamatok közül melyeknek a feldolgozása kezdődjön meg (elsősorban kötegelt feldolgozást végző rendszerekben). Ezt a feladatot az ún. hosszú távú ütemező látja el Az operációs rendszernek a CPU-használatot szabályozó másik komponense az ún. rövid távú ütemező A rövid távú ütemező az operációs rendszer azon komponense, amely eldönti, hogy a processzort melyik futásra kész folyamat kapja meg. A CPU-ütemezés tárgyalásakor nem a hosszú távú ütemezéssel, hanem az ún. rövid távú ütemezéssel foglalkozunk A dokumentum használata | Tartalomjegyzék |
Irodalom Vissza ◄ 87 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 88 ► A rövidtávú ütemezés gyakran fut, ezért gyorsnak kell lennie, különben a rendszer túl sok időt töltene az ütemezéssel, elvéve a processzort a folyamatoktól. A CPU-ütemező mindig a tárban van, része az operációs rendszer belső magjának, az ún. kernelnek Láttuk, hogy a folyamatok CPU-löketeket és I/O-löketeket hajtanak végre ciklikusan egymás után. A folyamatnak az I/O-löket ideje alatt nincs szüksége a processzorra, így azt egy másik folyamat használhatja. A CPU-löketek átlagos időtartama (hossza) folyamatonként nagyban változhat. A löketidők tipikus eloszlását mutatja be a 223 ábra Az eloszlás a folyamatok statisztikai felmérésén, vagyis számítógépes elemzéseken alapul. Az ábrán időlépték szándékosan nem szerepel, mivel a löketidő operációs rendszerenként változik, és a
processzorsebesség függvénye is. A görbe csúcsa ma jellegzetesen a 100 mikroszekundum és 10 milliszekundum közötti tartományba esik. 2.23 ábra CPU-löketidők eloszlása Ütemezés a folyamatok következő állapotátmeneteinél következhet be: 1. a futó folyamat várakozni kényszerül; 2. a futó folyamat vagy lemond a processzorról, vagy elveszik tőle (preemptív akció); 3. egy folyamat felébred, futásra késszé válik; 4. a futó folyamat befejeződik Az 1. és 4 esetben mindig környezetváltásnak kell történnie, hiszen a futó folyamat nem folytathatja a működését, míg a 2. és 3 esetben nem feltét- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 88 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 89 ► lenül következik be környezetváltás, tehát az ütemezőnek sem kell minden esetben egy másik folyamatot kiválasztania. Az ütemező algoritmus • nem
preemptív, ha egy folyamattól, miután egyszer megkapta a proceszszort, azt nem lehet elvenni, azaz a folyamat csak az általa kiadott utasítások (erőforrásra, eseményre várakozás, befejeződés, vagy a CPUról önként való lemondás) hatására válthat állapotot; • preemptív, ha az operációs rendszer elveheti a futás jogát egy folyamattól, azt futásra késszé teszi, és egy másik folyamatot indít el. A 3. és bizonyos, a 2 pontban felsorolt állapot-átmeneteknél bekövetkező ütemezések preemptívek. Az időosztásos és – általában – a valós idejű rendszerek preemptív ütemezőt alkalmaznak. Az ütemezési algoritmusok teljesítményét a következő paraméterek alapján szokták összehasonlítani: • CPU-kihasználtság (CPU utilization): A processzor az idő hány százalékában foglalkozik a folyamatok utasításainak végrehajtásával. A kihasználtságot csökkenti, ha a CPU tétlen (idle), azaz nincs olyan folyamat, amelyik futhat,
illetve a rendszeradminisztrációra, ütemezésre stb. fordított idő (rezsi, overhead) túl nagy A CPU-kihasználtság tipikus értékei 40–90% közöttiek. • Áteresztő képesség (throughput): Az operációs rendszer egy időegység alatt hány job-ot futtat le. • Átfutási (körülfordulási) idő (turnaround time): Egy job a rendszerbe helyezésétől számítva mennyi idő alatt fejeződik be. • Várakozási idő (waiting time): Egy job (vagy folyamat) mennyi időt tölt el várakozással. Ide tartozik a várakozó és futásra kész állapotokban eltöltött időn felül a felfüggesztett állapotok ideje, és job-ok esetén a hosszú távú ütemezés által okozott előzetes várakozás is. Az átfutási idő a várakozási idő, és a folyamat utasításának végrehajtásához szükséges idő összege, ám ez utóbbi idő természetesen nem függ az ütemezési algoritmusoktól. • Válaszidő (response time): Időosztásos rendszerekben a felhasználók
számára nagyon fontos, hogy érezzék, a rendszer reagál a parancsaikra. A válaszidő az az időtartam, amely az operációs rendszer kezelői felületének – esetleg egy felhasználóval kommunikáló folyamatnak – A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 89 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 90 ► adott kezelői parancs után a rendszer első észlelhető reakciójáig telik el, vagyis amennyi idő alatt a rendszer válaszolni kezd. A különböző operációs rendszerekben az ütemezési algoritmusokkal szemben a következő – gyakran egymásnak ellentmondó – követelményeket támasztják: • valamely fenti paraméterekből képzett célfüggvény szerint legyen optimális; • legyen korrekt, vagyis kezeljen minden folyamatot – vagy legalább bizonyos típusú folyamatokat – azonos módon; • biztosítson egyes folyamatoknak prioritásokat; • kerülje
el a folyamatok kiéheztetését; • legyen megjósolható viselkedésű, a terheléstől függetlenül előre meg lehessen becsülni a várható (maximális) körülfordulási időt, illetve a futtatás pénzbeli költségeit; • minimalizálja a rezsi időt (bár gyakran csekély többletadminisztrációval sokkal jobb általános rendszerteljesítmény érhető el); • részesítse előnyben a kihasználatlan erőforrásokat igénylő folyamatokat; • részesítse előnyben a fontos erőforrásokat foglaló folyamatokat – még akkor is, ha egyébként kisebb prioritásúak –, hiszen egy ilyen folyamat sok más folyamatot kényszeríthet várakozni; • növekvő terhelés hatására a rendszer teljesítménye „elegánsan”, fokozatosan romoljon le (graceful degradation), vagyis a rendszer ne omoljon hirtelen össze. 2.62 Ütemezési algoritmusok Egyszerű algoritmusok • Legrégebben várakozó (First Come – First Served, FCFS – először jött, először lesz
kiszolgálva): A futásra kész folyamatok a várakozási sor végére kerülnek, az ütemező mindig a sor elején álló folyamatot kezdi futtatni. Nem preemptív algoritmus Az algoritmus egyszerűen megvalósítható, de hibája, hogy a folyamatok átlagos várakozási ideje meglehetősen nagy lehet, egy-egy hoszszú CPU-löketű folyamat feltartja a mögötte várakozókat (konvojhatás). • Körbeforgó (Round-Robin, RR) algoritmus: Preemptív algoritmus, az időosztásos rendszerek mindegyik ütemező algoritmusának alapja. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 90 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 91 ► Minden folyamat, amikor futni kezd, kap egy időszeletet (time slice). Ha a CPU-lökete nagyobb lenne, mint az időszelet, akkor az időszelet végén a folyamattól az ütemező elveszi a processzort, a folyamat futásra kész állapotú lesz, és beáll a várakozó
sor végére. Ha a CPU-löket rövidebb, a löket végén a rendszer folyamatait újraütemezzük, és a futó folyamat időszelete újraindul. Az időszelet helyes méretének meghatározása nehéz. Az átlagos CPU-lökethez képest túl nagy időszelet esetén az algoritmus az FCFSnek felel meg (hiszen az időszelet nem szakítja meg a folyamatot), túl kicsi választásánál a folyamatok úgy érzékelik, hogy a CPU-t egyenlő arányban használják (minden CPU-löket sokszor megszakad), de a környezetváltás gyakorisága a rendszer hasznos teljesítményét nagyon lerontja. Az időszelet meghatározásához a statisztikai vizsgálatokból származó ökölszabály az, hogy a CPU-löketek kb. 80%-a legyen rövidebb az időszeletnél. Prioritásos algoritmusok A prioritásos algoritmusok közös sajátossága, hogy a futásra kész folyamatok mindegyikéhez egy számot – prioritást (priority) – rendelünk. A soron következő futtatandó folyamat a várakozók közül a
„legnagyobb” prioritású lesz. A prioritás meghatározása lehet • belső, amikor az operációs rendszer rendel a folyamatokhoz prioritást, illetve • külső, amikor a folyamatok prioritását az operációs rendszeren kívüli tényezők – pl. a folyamat saját kérése, vagy operátori beavatkozás – határozza meg. A folyamat prioritása futása során lehet • statikus, azaz végig azonos, vagy • dinamikus, vagyis az operációs rendszer által változtatott. Az összes prioritásos algoritmusnál fellép a kiéheztetés veszélye. Ennek kivédésére általában a régóta várakozó folyamatok prioritását a rendszer fokozatosan növeli, a folyamatokat öregíti (aging). A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 91 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 92 ► A folyamatok prioritását különböző tényezők határozhatják meg. A következő három
algoritmusban a prioritást a várakozó folyamat CPUlöketidő-szükséglete határozza meg. Problémát jelent, hogy az egyes folyamatok következő löketidejének hossza nem ismeretes, ezért azt becsülni kell, vagy • a folyamat – illetve a folyamatot elindító felhasználó – „bevallása” alapján, vagy pedig • a folyamat korábbi viselkedése alapján, a korábbi löketidők – általában exponenciális felejtéssel számított – átlaga alapján. A következő alapvető prioritásos ütemező algoritmusok léteznek: • Legrövidebb (löket)idejű (Shortest Job First, SJF – legrövidebb job jön először) algoritmus: Nem preemptív algoritmus, az algoritmus a futásra kész folyamatok közül a legrövidebb löketidejűt indítja el. Az algoritmus kiküszöböli az FCFS-nél előforduló konvoj-hatást. A folyamatok átlagos várakozási és körülfordulási ideje bizonyíthatóan optimális. • Legrövidebb hátralévő idejű (Shortest Remaining Time
First, SRTF) algoritmus: Az SJF algoritmus preemptív változata: ha egy új folyamat válik futásra késszé, akkor a CPU-ütemező újra megvizsgálja a futásra kész folyamatok, illetve az éppen futó folyamat hátralévő löketidejét, és a legrövidebbet indítja tovább. Mivel egy futó folyamat megszakításához és egy másik elindításához szükséges környezetváltás időt igényel, ezt az időt is figyelembe kell venni, ha úgy döntünk, hogy egy futó folyamatot megszakítunk. • Legjobb válaszarány (Highest Response Ratio, HRR) algoritmus: Az SJF algoritmus változata, ahol a várakozó folyamatok öregednek, és a löketidő helyett a (löketidő + k * várakozási idő) / löketidő hányados játszik szerepet a futtatandó folyamat kiválasztásában, ahol k egy jól megválasztott konstans. Többszintű algoritmusok A többszintű algoritmusok sajátossága, hogy a futásra kész folyamatok nem egy, hanem több külön sorban várakozhatnak. A dokumentum
használata | Tartalomjegyzék | Irodalom Vissza ◄ 92 ► Operációs rendszerek Folyamatok A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 93 ► Az egyes sorokban különböző kiválasztási algoritmusok működ(het)nek. A sorokhoz prioritás van rendelve; egy kisebb prioritású sorból csak akkor indulhat tovább egy folyamat, ha a nagyobb prioritású várakozó sorok mind üresek. • Statikus többszintű sorok (Static Multilevel Queues): Elindulásakor minden folyamatot valamilyen kritérium alapján besorolunk egy várakozó sorba. A folyamat, létezési ideje alatt mindig ugyanabban a sorban várakozik Például egy rendszerben a következő sorok lehetnek: – rendszerfolyamatok, – interaktív folyamatok, – interaktív szövegszerkesztők, – kötegelt feldolgozás, – rendszerstatisztikákat gyűjtő folyamatok. • Visszacsatolt többszintű sorok (Multilevel Feedback Queues): A folyamatok futásuk során dinamikusan
átkerülhetnek másik sorokba. – Kisebb prioritású sorba kerülés: A folyamatok mindig a legnagyobb prioritású sorban indulnak. A sorokhoz – a legkisebb prioritásút kivéve – különböző, a csökkenő prioritással növekvő időszelet tartozik Amennyiben a folyamatnak nem elég az adott időszelet, akkor egy kisebb prioritású sorba kerül Az algoritmus a folyamatokat futásuk alapján különböző maximális CPU-löketidejű osztályokba sorolja, és a rövid löketidejű folyamatokat részesíti előnyben (224 ábra) 8s C P 16 s U FCFS 2.24 ábra Ütemezés visszacsatolt többszintű várakozási sorokkal A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 93 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 94 ► – Nagyobb prioritású sorokba kerülés: ○ Az előbbi algoritmus merev. Ha a folyamat egyszer is túllépte valamelyik sor löketidejét, akkor a prioritása
csökken. Célszerű időről időre – például az átlagos löketidő mérése alapján – a folyamatokat, ha szükséges, nagyobb prioritású sorba visszasorolni. ○ A régóta várakozó folyamatokat öregedésük miatt a rendszer nagyobb prioritású sorba helyezi. 2.63 Többprocesszoros ütemezés Napjaink hardverfejlődésével egyre gyakoribbá válnak a több processzort tartalmazó – ún. szorosan csatolt – rendszerek, ahol felmerül az igény, hogy a futásra kész folyamatok a rendszer bármely szabad processzorán elindulhassanak. Természetesen heterogén (különböző felépítésű processzorokat tartalmazó) rendszerekben egy-egy folyamat, attól függően, hogy melyik processzor gépi utasításait tartalmazza, valamelyik processzorhoz lesz kötve, futni csak azon képes. Homogén rendszerekben a folyamatok több CPU-hoz való rendelésének feltétele, hogy a rendszer a futásra kész folyamatokat közös sor(ok)ban tárolja. • Szimmetrikus
multiprocesszoros rendszerekben mindegyik processzor saját ütemező algoritmust futtat, amely a közös sorokból választ. Természetesen a sorok osztott használatához a kölcsönös kizárást biztosítani kell • Aszimmetrikus multiprocesszoros rendszerben az ütemező algoritmust az egyik, kitüntetett (dedikált) processzor futtatja, ez osztja szét a folyamatokat a szabad processzorok között. 2.64 Az algoritmusok értékelésének módszerei A különböző ütemező algoritmusok teljesítményének vizsgálatára, összehasonlításukra a következő lehetőségek kínálkoznak: Analitikus értékelés • Determinisztikus modellezésnél az algoritmus viselkedését előre elkészített adatokkal – folyamatok száma, egymást követő löketidők hossza – vizsgáljuk. A vizsgálat egyszerű, de az eredmények csak szűk körben érvényesek, általános következtetéseket nem lehet levonni. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 94
► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 95 ► • Valószínűségi modellezés esetén az algoritmusokat matematikailag a sorban állások elméletével (queueing theory) kezeljük. – Szimuláció: Az ütemezési algoritmusokat számítógépes modell segítségével vizsgálhatjuk, a folyamatok viselkedését korábbi tapasztalatok, mérések alapján meghatározott eloszlású véletlen számokkal, illetve konkrét mért számértékekkel jellemezhetjük. A szimulációval nyert eredmények nagyban függnek a modell, illetve az adatok helyességétől – Mérések a megvalósított rendszeren: A legmegbízhatóbb, de legköltségesebb megoldás az algoritmusok implementálása és teljesítményük valós körülmények közötti mérése. Ebben a megoldásban az operációs rendszert olyan programokkal egészítik ki, amelyek a rendszer üzemeltetése közben (on-line) végeznek adatgyűjtési
tevékenységet 2.65 Éhezés (starvation) A holtpont mellett a folyamatok működésének egy másik zavara lehet az ún. éhezés (starvation) Éhezésről akkor van szó, amikor egy folyamat meghatározatlan ideig kénytelen várakozni arra, hogy erőforráshoz jusson Ilyen helyzet leginkább a folyamatok ütemezése során alakulhat ki, amikor a rendszer ütemezési algoritmusa nem garantálja a folyamat számára, hogy véges időn belül erőforráshoz jut, vagyis továbbindulhat. Egy ütemezést tisztességesnek (fair) nevezünk, ha garantálja, hogy egy várakozási sorból minden folyamat véges időn belül továbbindulhat, amenynyiben a rendszerben véges számú folyamat működik, és a rendszerben nincs holtpont vagy hibás folyamat (amelyik pl. nem enged el egy megszerzett erőforrást) Ellenkező esetben az ütemezés tisztességtelen (unfair) Tisztességes ütemezés például az érkezési sorrend szerinti kiszolgálás, tisztességtelen a statikusan rögzített
prioritás szerinti kiszolgálás (ilyenkor nincs garancia arra, hogy egy alacsony prioritású folyamat valaha is hozzájut az erőforráshoz, ha mindig van nála magasabb prioritású igény). Megjegyzések: • Az éhezés nem jelent holtpontot. • Külső eseményre (pl. kezelői beavatkozás) való meghatározatlan idejű várakozás nem jelent sem éhezést, sem holtpontot. • Tisztességtelen ütemezés tudatosan is alkalmazható, csak számolni kell a kevésbé fontos funkciók kiesésével a terhelés (a futtatandó folyamatok száma) növekedésekor. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 95 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Folyamatok Vissza ◄ 96 ► Éhezés léphet fel még a folyamatok szinkronizálása során is, egy szemaforhoz tartozó stack-lista kezelése következtében. Például, ha a folyamatokat LIFO (Last-In-First-Out: utoljára bejött megy ki először) szervezésű
listában várakoztatjuk, akkor a stack „alján” levő folyamatok kényszerülhetnek éhezésre. A másik eshetőség a holtpontkezelő algoritmusok működéséből adódik, amikor egy nagyobb költségű folyamat szorulhat hosszú várakozásra. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 96 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 97 ► 3. Tárkezelés Egy számítógépes rendszerben a tárak hierarchikus rendszert alkotnak. A hierarchia legalsó szintjén a processzor regiszterei helyezkednek el, fölötte sorrendben az operatív tár (memória), a háttértárak, vagy másodlagos tárolók, valamint a külső tárak, vagy harmadlagos tárolók találhatók. Minél magasabb hierarchia-szinten van egy tár, általában annál nagyobb mennyiségű adat befogadására alkalmas, viszont – gyakran a hosszabb keresési idő következtében – annál lassabb működésű, és
annál nagyobb a címezhető, egy művelettel kezelhető adatmennyiség. A több tárolási szint hatékony kezelése a rendszerek működtetésének egyik legfontosabb problémája. Azt az ellentmondást, hogy a műveletvégzésben résztvevő adatoknak a processzor regisztereiben, kell elhelyezkedniük, míg a számítógépes rendszerben kezelt adat és programmennyiség általában még a háttértárakra sem fér el egyidejűleg, csak az adatok tárolószintek közötti folyamatos mozgatásával lehet feloldani. A szintek közötti adatmozgatás hagyományos megoldása, hogy a processzor utasításonként esetleg többször is a memóriához fordul (egyrészt magáért az utasításért, másrészt adatokért), a programokat végrehajtás előtt a háttértárról a memóriába kell tölteni, a háttértáron tárolt adatokat csak fájlműveletekkel (a beviteli-kiviteli rendszeren keresztül) lehet elérni, a harmadlagos, külső tárakból pedig a személyzet
közreműködésével kell kikeresni és a megfelelő perifériába helyezni a megfelelő adathordozókat. A tároló szintek közötti adatmozgatásnak kialakult egy közös alapelve, ami egyben a hagyományos szintek mellett újabbak megjelenéséhez vezetett: a gyorsmemória (cache) alkalmazása. A gyorsmemória két szint közé épül be, vagy az alacsonyabb szintű tárolóban kerül kialakításra, egy magasabb szinten elhelyezkedő adatmennyiség egyes részeinek átmeneti tárolására. Az eredetileg magasabb szinten tárolt adatokra vonatkozó műveletek végrehajtásakor a művelet végrehajtója először megvizsgálja, hogy az adat nincs-e a gyorsmemóriában. Ha ott van (találat), akkor a művelet gyorsan végrehajtható. Ha nincs ott, akkor adatcserét kell végrehajtani, a magasabb szintről be kell hozni az adatot a gyorsmemóriába. Jellegzetes gyorsmemóriák: • a processzorokba épített hardver gyorsmemóriák (utasítás- és adatcache), amelyek a memóriában
tárolt adatok egy feldolgozásban lévő részét teszik gyorsan elérhetővé a processzor számára, A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 97 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 98 ► • a virtuális memória, ami a fizikai memóriánál nagyobb címtartományok kezelését teszi lehetővé azzal, hogy a teljes címtartományt a háttértáron valósítja meg, és a memóriát ennek gyors elérésére használja, • a fájlok egy részének tárolására a memóriában kialakított átmeneti tárterületek (buffer-cache). A felhasználó által manuálisan kezelt gyorsmemóriák: • a memóriában kialakított, több fájl tárolására alkalmas virtuális diszkek (RAM-diszk, elektronikus diszk), • a harmadlagos tárak fájlrendszereit tároló mágneslemez-területek. A gyorsmemóriák és a magasabb szintek közötti adatcsere általában a felhasználó elől
rejtetten, egyidejűleg nagyobb adatmennyiségeket mozgatva történik. A hatékonyságnövekedés oka a feldolgozás lokalitási tulajdonsága, azaz ha egy adatra (beleértve a program utasításait is) a feldolgozás során szükség van, akkor nagy valószínűséggel a környezetében tárolt adatokra is szükség lesz. A gyorsmemória megfelelő méretezésével és hatékony adatcsere-algoritmusokkal 80-99%-os találati arány is elérhető Az operációs rendszerek hatáskörébe a tárhierarchia szintjei közül a memória, valamint a háttértárakon és a harmadlagos tárolók aktuális adathordozóján kialakított fájlrendszerek tartoznak, a felsorolt gyorsmemóriák közül pedig a virtuális memória és a buffer-cache. Ezek közül a fájlrendszerek kezelése – tekintve, hogy perifériákon történő adattárolásról van szó – a beviteli-kiviteli rendszerre épül. A következőkben az alacsonyabb szintektől a magasabbak felé haladva a memória, a virtuális
memória, valamint a fájlkezelés problémáit és alapelveit ismertetjük. 3.1 Memóriakezelés A memória (main storage, memory) szervezése, kezelése az operációs rendszerek tervezését, implementálását és teljesítményét befolyásoló egyik legfontosabb tényező. A memóriakezelés alapproblémája a multiprogramozásos rendszerekben az, hogy hogyan használhatja egyidejűleg több folyamat (program) gazdaságosan a memóriát. Az előzőekben láttuk, hogy minden folyamathoz egy folytonos, ún. logikai címtartományt képzelhetünk, amelyet az operációs rendszernek le kell képeznie a memóriában rendelkezésre álló konkrét fizikai címtartományra. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 98 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 99 ► A memória gazdaságos kihasználására a következő fontosabb elgondolások jöhetnek számításba: Csökkentsük az
egy program által egyidejűleg igényelt tárterületet: A megoldás csak úgy képzelhető el, ha nem tartozik minden pillanatban a program valamennyi logikai címéhez saját használatú fizikai tárcím. A lehetőségek: • a programok egyes eljárásai csak végrehajtáskor töltődnek a tárba, így az aktuális futáskor nem működő programrészeknek nem kell hely (pl. hibakezelő eljárások), • a programok saját hatáskörben megszervezik a címtartomány többszörös kihasználását (átfedéses – overlay – programszerkezet, veremhasználat), • a több program által használt eljárások egy példányban tárolódnak, azaz több folyamat egy-egy logikai címtartománya ugyanarra a fizikai címtartományra képeződik le. A memóriát lehetőleg hézagmentesen töltsük ki: A különböző hosszúságú programok cserélődése, a leképzett címtartományban keletkező lyukak a memória szabad területeinek felaprózódására vezethetnek. Az ebből származó
problémák elkerülésének lehetőségei: • szabad területek összevonása a programok, programrészletek áthelyezésével • a logikai-fizikai címtartomány olyan leképezése, amely a folytonos logikai címtartományhoz nem szükségképpen folytonos fizikai címtartományt rendel. Szükség esetén vonjuk be a működésbe a háttértárat is: Azokban az esetekben, amikor egy program egy tárterületet várhatóan hosszabb ideig nem használ (pl. hosszú ideig várakozik), de később még szüksége lesz rá, gazdaságos lehet a fizikai tárterület tartalmának mentése (háttértárra), és későbbi visszatöltése (esetleg más fizikai címre). Így a hosszú várakozás alatt a felszabaduló területet más folyamat használhatja. A fenti elgondolások alkalmazhatósága szempontjából fontos a címleképzés folyamatának megértése, valamint a programok áthelyezhetőségére, közös eljárások több folyamat által történő használatára vonatkozó
feltételek tisztázása. A következőkben először ezekkel a kérdésekkel, majd az egyes programok tárigényének csökkentésére kialakult megoldásokkal, végül a több folyamat elhelyezésére kialakult módszerekkel foglalkozunk. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 99 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 100 ► Külön alfejezetben (ld. a 32 pontot) tárgyaljuk a tárkezelés legkifinomultabb technikáját, a virtuális tárat 3.11 A program címeinek kötése, áthelyezhető és újrahívható programok A programok forráskódjában az adatokra, utasításokra általában szimbolikusan, névvel hivatkoznak. Kötésnek a szimbolikus hivatkozáshoz tartozó fizikai memóriacím kialakulásának folyamatát nevezzük. Egy programhoz általában lineáris, folytonos címtartományt képzelhetünk, amely 0-tól kezdődően (a program eleje) a program maximális
címéig terjed. A program utasításai és adatai ebben a címtartományban kerülnek elhelyezésre Ezt logikai címtartománynak tekintjük Egy-egy program lefordításakor, szerkesztésekor a fordító és a kapcsolatszerkesztő (linkage editor) programok első menetben általában ebben a tartományban adnak értéket a szimbolikus hivatkozásoknak. A programhoz tartozó memóriakép kialakulásának folyamatát a 31 ábrán mutatjuk be A mai rendszerekben a programok gyakorlatilag soha nem a zérus fizikai címtől kezdve töltődnek a memóriába, azaz nem a logikaival egyező fizikai tartományban hajtódnak végre. A címek kötésének második lépcsője a logikai és a fizikai címtartomány közötti megfeleltetés (leképzés, mapping), aminek megoldására különböző lehetőségek vannak: Fordításkor (compile time): Ha a fordításkor már ismeretes, hogy hol fog a program a memóriában elhelyezkedni, akkor végleges címzésű, ún. abszolút kód (absolute code)
generálható Például, ha előzetesen lehet tudni, hogy egy program a memória AM című helyén kezdődik, akkor a fordítási kód is ezt a kezdőcímet kapja, és ettől számítódik a többi cím is. Ha az AM kezdeti hely megváltozik, akkor a forráskódot újra kell fordítani Ilyenek pl az MS-DOSCOM formátumú programok Ezt a technikát egyébként, merevsége miatt, elsősorban csak a ROM (Read-Only Memory) típusú memóriába kerülő programok esetében használják. Ha viszont nem ismeretes a program kezdőcíme a memóriában, akkor a fordítóprogramnak ún. áthelyezhető kódot (relocatable code) kell előállítania Ebben a kezdőcím értéke nulla, és minden további cím az ehhez képest számított eltolással van képezve. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 100 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 101 ► Szerkesztéskor (link time): Ha a program
több egymástól függetlenül lefordított modulból áll, akkor a teljes program előállítását egy kapcsolatszerkesztő program végzi. A kapcsolatszerkesztő (linker) program feladata, hogy az összes modult – egymás mögé – elhelyezze, számukra egy közös címtartományt hozzon létre, és feloldja a modulok közötti hivatkozásokat (ami fordításkor még nem volt lehetséges). A közös címtartomány lehet rögtön fizikai címtartomány is A m o d u l fo rrá sk ó d ja F o rd ító p ro g ra m T o v á b b i m o d u lo k tá rg y k ó d ja i A m o d u l tá rg y k ó d ja K a p c s o la ts z e rk e s z tő p ro g ram R e n d s z e r k ö n y v tá r B e tö lth e tő tá rg y k ó d B e tö ltő p ro g r a m D in a m ik u s a n b e tö lth e tő re n d s z e rk ö n y v tá r B in á ris m e m ó ria k é p 3.1 ábra A memóriakép kialakulásának menete A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 101 ► Operációs
rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 102 ► Betöltéskor (load time): A fordítás és szerkesztés eredményképpen előállott áthelyezhető kód (relocatable code) címhivatkozásait a betöltő program az aktuális címkiosztás szerint módosítja. Futás közben (run time): A program memóriaképe logikai címeket tartalmaz, a fizikai cím csak az utasítások végrehajtásakor alakul ki a processzor címzési módjainak, esetleg speciális hardver elemek működésének függvényében. A fordítás, szerkesztés, illetve betöltés közbeni címleképzések statikus megoldások, míg a futás közbeni leképzés dinamikus. A legegyszerűbb dinamikus címleképzés, a bázisrelatív címzés, amikor a memóriaképben található címekhez végrehajtáskor hozzáadódik egy regiszter (bázisregiszter) tartalma. Az a program, amelyik csak bázisrelatív címeket tartalmaz, tetszőleges helyre betölthető, a
bázisregisztert a betöltési kezdőcímre állítva a program végrehajtható. Ugyancsak jellegzetes dinamikus leképzés az utasításszámláló-relatív címzés, amit a PDP számítógép-rendszerekben alkalmaztak először. Ha a program csak dinamikus leképzésű címzési módokat használ, pozíciófüggetlen kódot kapunk, a programot (dinamikusan) áthelyezhetőnek nevezzük. A tárgazdálkodás szempontjából ez igen kedvező, hiszen ilyenkor ugyanazt a memóriaképet tetszőleges szabad tárterületre módosítás nélkül betöltve a program futtatható, sőt esetleg futás közben át is helyezhető. A programok mozgathatósága mellett a hatékony memóriagazdálkodást segíti, ha a programok közös eljárásait csak egyetlen példányban kell tárolni, és valamennyi, az eljárást használó program ezt a példányt hajthatja végre. Multiprogramozott rendszerben előfordulhat, hogy egy ilyen eljárás végrehajtása közben történik ütemezés, és az új futó
folyamat is meghívja a közös eljárást, mielőtt annak előző végrehajtása befejeződött volna (újrahívás), sőt ez a helyzet többszörösen ismétlődhet. Természetes követelmény, hogy az eljárás ilyenkor is valamennyi hívó számára hibátlanul működjön. Ha az eljárás ezt a követelményt minden körülmények között teljesíti, akkor újrahívhatónak nevezzük. Az újrahívhatóság feltétele, hogy az eljárásnak ne legyenek saját változói, azaz valamennyi munkaváltozóját a hívó folyamat privát címtartományában (pl. annak veremtárában) tartsa (Ellenkező esetben ugyanis egy újrahívás során felülíródhatnak munkaváltozók, és a megszakított végrehajtás számára az ott tárolt adatok elvesznek.) Általánosítva a problémát, ki- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 102 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 103 ►
mondhatjuk, hogy a folyamatok programkódon és konstansokon osztozhatnak (használhatják ezek egyetlen példányát közösen), azonban változóiknak példányosodniuk kell, azaz ezek folyamatonként külön területen tárolandók (kivéve a kifejezetten információcserére használt közös változókat). 3.12 A programok fizikai tárigényének csökkentése Dinamikus betöltés (dynamic loading) A programhoz tartozó egyes eljárások – áthelyezhető formában – a háttértáron vannak. Ha valamelyikre szükség van, akkor egy speciális programrészlet ezt betölti A program így lényegesen kisebb tárterületet foglal el, a ritkán használt (például hibakezelő) eljárások nem foglalják a tárat. A dinamikus betöltést a programozó szervezi meg, az operációs rendszer ehhez nem nyújt támogatást Dinamikus kapcsolatszerkesztés (dynamic linking) A módszer a dinamikus betöltés módosított, az operációs rendszer által támogatott változata, amelyik a
programok közös részeinek egyszeri tárolását is megoldja. A programban használt rendszerkönyvtárak eljárásai helyett csak egy csonk (stub) kerül a programba, amely tartalmaz valamilyen hivatkozást egy könyvtárra és a könyvtáron belüli eljárásra. A csonk első meghívásakor a rendszer megvizsgálja, hogy a kívánt eljárás már a tárban van-e (esetleg más folyamat használatában). Ha igen, akkor az eljárás fizikai címét rendeli a hívóban szereplő logikai címhez, és a további hívások már az eljárást fogják – időveszteség nélkül – meghívni. Ha a hívott eljárás még nincs a tárban, akkor először betölti egy szabad helyre, és ezt követően történik meg a címleképzés. A betöltött eljárás ezután a többi folyamat számára is rendelkezésre áll A módszer előnye a csökkentett tárfelhasználáson felül az, hogy a könyvtárban lévő hibákat egy helyen kell módosítani, nem kell újrafordítani az összes, a
könyvtárat használó programot. Az operációs rendszer közreműködése azért szükséges, mert más folyamat címtartományára való hivatkozás alakulhat ki, amit csak az operációs rendszer jogosult feloldani. A könyvtári eljárásoknak újrahívhatóknak kell lenniük Átfedő programrészek (overlay) A programot olyan részekre bontjuk, amelyek közül egy időben csak az egyik dolgozik, majd ezeket a részeket – a közösen használt adat- és programrészeteket változatlanul hagyva – egyesével töltjük be. Az így futtatott A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 103 ► Operációs rendszerek Tárkezelés A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 104 ► programszegmensek valójában átfedik egymást a memóriában (átfedés: overlay) (3.2 ábra) Az átfedő programrészek technikájához nincs szükség az operációs rendszer támogatására. Az átfedés számára fenntartott tárterület a
legnagyobb programrészlet hosszával egyezik meg A helyes overlay-szerkezet megvalósításához a program szerkezetének, futás közbeni viselkedésének alapos ismerete szükséges. Operációs rendszer Program közös területe Átlapolódó (overlay) terület Overlay ágak 3.2 ábra Átfedő programrészek használata 3.13 Társzervezési módok Egypartíciós rendszer Az operációs rendszeren – és a speciális tárterületeken, mint például a megszakítás-vektorok, a periféria címtartományok – felüli folytonos címtartományt teljes egészében egy folyamat használhatja. A program az első szabad címre töltődik be. Ha futása közben az operációs rendszernek több tárra van szüksége, akkor azt vagy a program által nem használt területről – a tár másik végéről – „lopja el”, vagy a programot át kell helyezni. Az operációs rendszer területének védelmére elegendő egy regiszter, amely a program legkisebb címét tartalmazza. A
folyamat futása közben – felhasználói módban – a tárkezelő hardver figyeli, hogy minden hivatkozás a tárolt cím felett legyen, ellenkező esetben hibamegszakítás keletkezik. Rendszerhíváskor a processzor átkerül egy olyan működési módba, ahol ez a védelem kikapcsol, és az operációs rendszer a teljes tárat elérheti. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 104 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 105 ► Többpartíciós rendszer A multiprogramozás megkövetelte, hogy egy időben több folyamat tartózkodjon a tárban. Régebbi rendszerekben az operációs rendszeren felüli tárterületet részekre (partíciókra, partition) osztották, ám ezeknek a partícióknak a határa a rendszer futása alatt nem változhatott (rögzített partíciók). Tipikus volt, hogy különböző méretű partíciókat definiáltak, a programokat a méretüknek
megfelelő partícióban futtatták, sőt a partíció esetleg már fordításkor meghatározásra került. Bár ez a tárkezelés nagyon egyszerű volt, de merevsége miatt a tárat rosszul használta ki. A szervezés a tár belső tördelődéséhez (internal fragmentation) vezetett, azaz a folyamatok nem használják ki teljesen a partícióban rendelkezésükre álló tárterületet. Fejlettebb operációs rendszerekben a folyamatok változó – az igényeiknek megfelelő – méretű partíciót kapnak. Egy folyamat lefutásakor az általa használt tárterület felszabadul. Az operációs rendszer nyilvántartja a szabad területeket, az egymás melletti szabad területeket automatikusan összevonja. A változó partíciók használatánál a folyamatok csak a szükséges méretű területet kapják meg, így belső tördelődésről nem beszélhetünk. A tár szabad területe azonban tördelődik, hiszen a folyamatok nem egyszerre indulnak és fejeződnek be (külső
tördelődés, external fragmentation). Ilyenkor könnyen előállhat olyan helyzet, hogy a szabad terület összességében többszörösen is elegendő egy folyamat számára, amely mégsem indítható, mert nincs akkora összefüggő szabad terület, ahova elfér. Amennyiben a folyamatok dinamikusan áthelyezhetők, szükség esetén a szabad területek egy tömörítő program lefuttatásával a tár egyik végére rendezhetők (compaction, garbage collection), ezzel a külső tördelődés felszámolható. Késleltetheti a külső tördelődés zavaró elhatalmasodását, ha az induló folyamatok számára alkalmas szabad területet választunk. A területfoglalásra három algoritmus használatos (megjegyzendő, hogy az algoritmusok a lineáris címtartományok dinamikus felosztására általánosan használatosak, a későbbiekben például a fájlok számára történő mágneslemezterületek lefoglalására is): • legjobban illeszkedő (best fit), amely a legkisebb, még
elegendő méretű területből foglal, feltételezve, hogy a hulladék már nem használható; • első megfelelő (first fit), amely a kereséssel a tár elejéről indulva az első megfelelő méretű területből foglal, vagy kissé módosított változata a A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 105 ► Operációs rendszerek Tárkezelés A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 106 ► következő megfelelő (next fit), amelyik az utoljára lefoglalt tartomány végétől keres; • legkevésbé illeszkedő (worst fit), amely a legnagyobb szabad területből foglal helyet, abban bízva, hogy a nagy darabból szabadon maradó terület más folyamat számára még elegendően nagy lesz. Többpartíciós rendszerekben a védelem két regisztert használ, amelyekbe a folyamat futásakor a hozzá tartozó címtartomány határai töltődnek be, az egyes címzéseknél a hardver a tartományból való kicímzést
figyeli. Tárcsere (swapping) A tárcsere alkalmazásával a fizikai tárat időben osztjuk szét folyamatok között. Amikor egy folyamat hosszabb várakozásra kényszerül, az operációs rendszer a folyamat teljes tárterületét a háttértárra másolja, az így felszabaduló területet pedig más folyamathoz rendeli. Az elmentett tartalom a folyamat továbbfutásakor visszatöltődik (amennyiben a kód dinamikusan áthelyezhető, esetleg más fizikai címre). A tárcsere folyamatát a 33 ábra szemlélteti. A tárcserét a korai multiprogramozott rendszerek közül némelyek a fizikai memória kis mérete miatt a folyamatok közötti átkapcsoláskor hajtották végre (egyidejűleg csak egy folyamat fért el a tárban), a lemezműveletek időigénye miatt azonban ez a megoldás nem bizonyult hatékonynak A fejlettebb rendszerek csak akkor alkalmazzák, ha a folyamat várhatóan valóban hosszabb ideig várakozni fog, vagy más ok (például a feladatok torlódása) miatt
célszerű végrehajtását átmenetileg szüneteltetni. Operációs rendszer 1 Kimentés P1 folyamat Felhasználói terület P2 2 Behozatal Főmemória folyamat Háttértár 3.3 ábra Diszk használata tárcsere esetén A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 106 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 107 ► A következő társzervezési módok jellemzője, hogy a folytonos logikai címtartományt dinamikusan (futás közben) nem folytonos fizikai címtartományra képezhetjük le. Ezzel a külső tördelődés problémája részben megszűnik, továbbá lehetővé válik, hogy szükség szerint ne csak teljes folyamatok memóriaterületeit, hanem kisebb részeket is háttértárra menthessünk, majd egy felszabaduló területre visszatölthessünk. E megoldások erős hardver-támogatást igényelnek. Lapszervezés A logikai és a fizikai címtartomány egyaránt
azonos, rögzített méretű lapokra osztott. Egy lap célszerűen „binárisan kerek”, azaz kettő egész hatványának megfelelő számú rekeszt tartalmaz A logikai címtartományban egy tárolórekeszt egy <llc,d> kettőssel (logikai lapcím, eltolás) címezhetünk meg. A leképzést futás közben egy laptábla biztosítja, amelyik a logikai lapcímek sorrendjében a hozzájuk tartozó fizikai lapok kezdőcímeit tartalmazza. A memóriakép logikai címeket tartalmaz, amelyek lapcím része alapján a laptáblából választódik ki végrehajtáskor a fizikai lapcím (flc), míg a lapon belüli cím (eltolás) mindkét tartományban azonos. A laptáblás címleképzés lehetővé teszi, hogy egy logikai lap bármelyik fizikai lapra betöltődhessen, a rekeszek lapon belüli elhelyezkedése azonban nem változhat. A címképzés sémáját a 34 ábrán vázoltuk fel Ha több folyamat van jelen a rendszerben, valamennyiük logikai címtartománya 0-tól kezdődik. A
folyamatok azonos logikai címeihez nyilvánvalóan különböző fizikai címeknek kell tartozniuk, tehát mindegyik folyamatnak saját laptáblája van Környezetváltáskor tehát laptáblát is kell váltani Szokásos megoldás, hogy a laptáblát egy mutatón (pointeren) keresztül használja a címképző egység, így a váltás csupán a mutató átállítását jelenti. A lapszervezésű memóriahasználat esetén a végleges fizikai lapcím (flc) két komponens a fizikai lapcím és a lapon belüli eltolás (d) összeadásával alakul ki. A futás közben történő címleképzés csak hardvertámogatás esetén lesz elviselhető sebességű A lapszervezésű memória esetén – mint mondtuk – a rendszer fix hosszúságú memória lapokat használ, vagyis az eltolás mindig azonos bitszélességű. Ez megteremti a lehetőségét annak, hogy a rendszer az összeadás műveletét egy – a számítógépeken sokkal gyorsabban végrehajtható – logikai eltolás (shiftelés)
műveletére egyszerűsítse. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 107 ► Operációs rendszerek Tárkezelés A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 108 ► logikai cím llc fizikai tár d flc megcímzett rekesz laptábla 3.4 ábra Címtranszformáció lapszervezésű memória esetén További gyorsítást jelent, hogy a processzorok egy belső regiszterükben megjegyzik a lapcímet (aktuális lap), és egy megfelelő címzési móddal lehetővé teszik, hogy a lapon belüli hivatkozások csak eltolást adjanak meg. Így a lapon belüli címzésnél nem kell a laptáblát használni. A megoldás a védelem szempontjából is kedvező. A program mindig teljes lapokat kap (ezért átlagosan fél lapnyi veszteség – belső tördelődés – jelentkezik), túlcímzés csak a lapcímben fordulhat elő, amit vagy a laptábla méretén túllépő hivatkozások limitregiszteres detektálásával akadályoznak meg,
vagy mindig a lehetséges maximális méretű laptáblát használják, az érvénytelen lapcímeken speciális bejegyzéssel. A memóriacím eltolással történő képzése memóriavédelmi szempontból is kedvező, hiszen mivel az eltolás értéke előre meghatározott a kialakuló memóriacím biztosan nem fog az aktuálisan használt memórialap határain kívül esni. A gyors címtranszformáció, ill a memória lapok védelmének egyszerűsége a lapszervezés fontos előnyei A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 108 ► Operációs rendszerek Tárkezelés A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 109 ► Szegmensszervezés A szegmensszervezés annyiban tér el a lapcímzéstől, hogy szemben a lapok rögzített méretével a szegmensek különböző méretűek lehetnek. A logikai cím ugyancsak két komponensből áll, és a címképzési séma hasonló a lapcímzésnél bemutatotthoz. A megoldás előnye,
hogy az egy darabban kezelt területek a programok logikai szerkezetéhez igazodóan alakíthatók ki. Szegmens lehet például egy eljárás memóriaképe, egy adattömb stb. Egy szegmens cseréje a program közepén egy új változatra (javítás, hatékonyabb algoritmus kidolgozása, vagy más ok miatt) nem érinti a mögötte elhelyezkedő programrészek logikai címeit akkor sem, ha a szegmens hoszsza megváltozik. Hátrány, hogy a változó méretű területfoglalások miatt külső tördelődés lép fel, továbbá a védelmi rendszernek a szegmensen belüli címkomponenst is ellenőriznie kell. Ennek érdekében minden szegmens mellett a szegmens mérete (limit) is tárolandó a szegmenstáblában A címtranszformáció menetét a 3.5 ábrán láthatjuk A tábla kezdőcímét (a) a folyamat környezetét leíró adatszerkezetekben tárolja a rendszer A változó szegmensméret miatt a szegmensen belüli eltolás (d) hossza változó, így a fizikai cím számításakor
ténylegesen összeadás műveletet kell végezni. A szegmensszervezés programok memóriaigényét jobban visszatükröző működésének ára tehát a bonyolultabb címtranszformáció és bonyolultabb memóriavédelem. Szegmens tábla kezdő címe logikai cím a b szegmens szám + a d szegmensen belüli eltolás Szegmens tábla b fizikai cím + b’ (limit) r=b’+d A b-edik szegmens fizikai kezdőcíme (b’) és mérete (limit) 3.5 ábra Címtranszformáció szegmensszervezésű memória esetén A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 109 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 110 ► Mind a lapszervezés, mind a szegmensszervezés lehetőséget ad arra, hogy több folyamat közös tárterületet használjon. Ilyenkor ugyanarra a fizikai területre mutat több folyamat laptáblájának, illetve szegmenstáblájának valamely bejegyzése. A közös területet a
folyamatok információcserére használhatják, a szükséges szinkronizációt saját hatáskörben kell megoldaniuk Közös területet oszthat ki az operációs rendszer a folyamatoknak azok tudta nélkül is, például az újrahívható rendszerkönyvtári eljárások kódterületének leképezésekor az eljárást használó folyamatok címtartományába. Nagyobb rendszerekben a szegmentálást és lapszervezést együtt is alkalmazzák. 3.2 Virtuális memória A lap-, illetve szegmensszervezésre az operációs rendszer közreműködésével olyan memóriakezelés építhető, amely lehetővé teszi, hogy a folyamatok gyakorlatilag korlátlan logikai címtartományt használjanak a megszokott címzési módokkal (csak a háttértár-kapacitás a korlát). A címtartományok a rendszerdiszkre képződnek le, és a memória lényegében gyorsmemóriaként működik. A folyamatok által látott memória tehát virtuális, a valós memóriában ennek mindig csak a futáshoz éppen
szükséges része található meg. A következőkben az általános elvek után a virtuális memória lapszervezésű tárakra épülő megoldását mutatjuk be. 3.21 Általános elvek Az alapgondolat realitását a következő általános tapasztalatok támasztják alá: • A programok általában nem használják ki a teljes címtartományukat, mert • tartalmaznak olyan kódrészeket, amelyek leggyakrabban nem is futnak (pl. hibakezelés), • adatszerkezeteik túlméretezettek (pl. statikus tömbök), • a program különböző részei időben elkülönülten működnek, ezért futnak ugyanazokon a címeken (ld. overlay) • A programok a kihasznált címtartományt is időben egyenetlenül használják, az időben egymáshoz közeli utasítások és operandusok általában a tárban is egymáshoz közel vannak (lokalitás). • Több folyamat működő programrészei férnek el a tárban, ami a hatékony ütemezést és a gyors környezetváltást segíti. A dokumentum
használata | Tartalomjegyzék | Irodalom Vissza ◄ 110 ► Operációs rendszerek Tárkezelés A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 111 ► A megvalósítás elve A címtranszformációt végző hardver (pl. a laptábla-bejegyzés alapján) észleli, ha egy hivatkozáshoz nem tartozik fizikai memóriaterület, és ilyenkor egy laphiba-megszakítást generál. A megszakítást az operációs rendszer kezeli le úgy, hogy behozza a hivatkozott lapot a memóriába. Amikor ez megtörtént, a megszakított művelet megismételhető, és a hivatkozás már rendben lesz. A működés menetét részletesebben a 3.6 ábra mutatja be FOLYAMATOK OPERÁCIÓS RENDSZER Pi fut MÁGNESLEMEZ laphiba-megszakítás laphiba címzési hiba nincs a tárban laphiba oka? szabad vagy cserélendõ lap kiválasztása hibakezelés (pl. Pi abortálása) (mentés) betöltés indítása Pi várakozó állapotba CPU ütemezés Pi vár betöltés folyamatban
Pj fut betöltés vége megszakítás Pi futásra kész állapotba, laptáblájának módosítása Pi futásra kész Pj fut 3.6 ábra A virtuális memóriakezelés menete A futó folyamatnak néhány lapja – amelyek éppen használatban vannak – a memóriában van (és betöltéskori állapotban természetesen a háttértáron A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 111 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 112 ► is), a többi csak háttértáron. A hardver címképző vezérlésére a laptábla minden bejegyzés mellett tárol egy érvényes (valid) bitet is, amelyek értéke azoknál a bejegyzéseknél érvényes, amelyek memóriában tartózkodó fizikai lapokra mutatnak, a többi esetben érvénytelen. Ha a címképzéskor a logikai lapcím érvénytelen bejegyzésre mutat, akkor keletkezik laphiba megszakítás. Az operációs rendszernek a megszakítás
kiszolgálásakor meg kell különböztetnie a címzési hibákat (kicímzés a címtartományból) és a háttértárra irányuló hivatkozásokat, valamint meg kell találnia a hivatkozott lapot a háttértáron. Egy lehetséges logikai megoldás, hogy a laptábla érvényes esetben a fizikai lapcímet, érvénytelen de helyes címek esetén a lap háttértár-címét tartalmazza, érvénytelen, címzési hibás esetekben pedig egyezményes, hihetetlen (pl. 0) értékű bejegyzést tartalmaz (a 0 lemezcím a boot szektor, ott folyamat lapja nem lehet). Ha az operációs rendszernek lapot kell betöltenie, két eldöntendő kérdés van: • csak az igényelt lapot töltse be, vagy többet is, és melyeket, • mely fizikai lapokra töltse be a behozandó lapokat (ha minden lap foglalt, valaminek a helyére lehet betölteni, annak állapotát pedig előtte menteni kell). Ezzel a két problémával külön pontokban foglalkozunk. A lapok mentését és betöltését az operációs
rendszer a mágneslemezre kiadott normál I/O-műveletként indítja el, amelynek végrehajtása közben a laphibázó folyamat várakozik, más folyamat viszont futtatható, s ennek kiválasztására CPU-ütemezést kell indítani. A lapok betöltésének befejeződését követő hardver-megszakítást ismét az operációs rendszer kezeli, aktualizálja a laphibázó folyamat laptábláját, és a folyamatot futásra kész állapotba helyezi. Ha az ütemezési stratégia nem preemptív, akkor ilyenkor nincs CPU-ütemezés, az éppen megszakított folyamat futhat tovább, a laphibázó pedig majd az ütemezés függvényében jut ismét szóhoz. Megjegyzendő, hogy a laphiba-megszakítás kezelésével szemben speciális követelmények vannak a szokásos megszakításokhoz képest. Ezt a megszakítást nem két utasítás végrehajtása között, hanem utasításvégrehajtás közben – az utasítás bármelyik memóriaciklusánál – kell elfogadni. A hibátlan folytatáshoz a
hardvernek lehetővé kell tennie, hogy az utasítás vagy folytatható legyen a megszakított végrehajtási fázistól a hibázó memóriaciklus ismétlésével, vagy visszapörgethető és a kezdő ponttól A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 112 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 113 ► ismételhető legyen (utasítás-roll-back) a már végrehajtódott fázisok hatástalanításával. A legtöbb esetben az utóbbi megoldást alkalmazzák A 3.6 ábrán bemutatott folyamatot elemezve megbecsülhetjük (konkrét adatok ismeretében kiszámíthatjuk), hogy milyen gyakori laphibák mellett marad egyensúlyban a rendszer Túl gyakori laphibák esetén ugyanis a mágneslemez válik szűk keresztmetszetté, a CPU pedig tétlenségre kényszerül (minden folyamat a laphiba lekezelésére, azaz lemezművelet befejeződésére vár). A rendszer egészét tekintve a CPU akkor
nem válik tétlenné, ha átlagosan egy laphiba lekezelése közben nem következik be újabb laphiba. A lemezműveletek időigénye a mai rendszerekben is 10 msec körüli érték, ezalatt a működő CPU l00 nsec-os memóriaciklussal számolva 105 memóriaműveletet hajthat végre. Átlagosan tehát legfeljebb minden százezredik memóriaművelet laphibázhat, ha a CPU-tétlenséget el akarjuk kerülni. A folyamatok futási sebességére való hatást az alábbiak szerint számíthatjuk: effektív hozzáférési idő = (1−p) * valós hozzáférési idő + p laphiba idő, ahol p a laphibák relatív gyakorisága. A továbbiakban a virtuális memória kezelésével kapcsolatosan az operációs rendszerre háruló legfontosabb feladatokat tárgyaljuk. Ezek az alábbiak: • betöltendő lapok kiválasztása, • cserélendő lapok kiválasztása (ha nincs szabad hely), • gazdálkodás a fizikai tárral (melyik folyamat hány lapot kapjon). 3.22 A betöltendő lap kiválasztása
Igény szerinti lapozás (demand paging) Csak a laphibánál hivatkozott lapot hozzuk be. Előnyei: • egyszerű a betöltendő lapot kiválasztani; • a tárba csak a biztosan szükséges lapok kerülnek be. Előretekintő lapozás (anticipatory paging) Az operációs rendszer megpróbálja „kitalálni”, hogy a folyamatnak a jövőben melyik lapokra lesz szüksége és azokat szabad idejében – amikor a lapcseréhez használt háttértár szabad, lehetőleg többet egyszerre – betölti. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 113 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 114 ► Ha a jóslás gyors és pontos, a folyamat futási sebessége nagyban felgyorsul. Ha a döntés hibás, felesleges lapok foglalják a valós tárat. Mivel a központi tár ára drasztikusan csökken, így a mérete egyre nő, a hibás döntés ára, a felesleges tárfoglalás egyre kisebb, így az
előretekintő lapozás algoritmusai egyre népszerűbbé válnak. 3.23 Lapcsere-stratégiák Legrégebbi lap (FIFO) Az algoritmus a legrégebben a tárban lévő lapot cseréli le. Ez általában egy FIFO listával valósítható meg. Hibája, hogy olyan lapot is lecserél, amelyet esetleg több folyamat gyakran használ, csak azért, mert már régóta bent van. Emellett egy érdekes jelenség léphet fel, ha növeljük a folyamathoz tartozó fizikai lapok számát, a várakozással ellentétben a laphiba gyakorisága esetleg nőhet is (Bélády-anomália). Optimális algoritmus A lapcsere algoritmusa akkor lenne optimális, ha azt a lapot választaná ki cserére, amelyikre a legtovább nem lesz szükség. Ezt persze nem lehet előre látni még egy folyamat esetén sem, nem hogy multiprogramozott rendszereknél. Közelítő algoritmusokat azonban lehet konstruálni a lokalitási tulajdonságra alapozva, azaz feltételezve, hogy a közelmúltban használt lapokra lesznek újabb
hivatkozások. Legrégebben nem használt (Least Recently Used, LRU) lap Az a lapot választjuk, amelyre a folyamatok leghosszabb ideje nem hivatkoztak. Az algoritmus a közelmúlt ismerete alapján próbálja a közeljövőt előrelátni, így közelítve az optimális algoritmust. Az algoritmus a szimulációs eredmények alapján jó teljesítményt nyújt, de nehéz implementálni Lehetőségek: • számlálóval: A lapra történő minden hivatkozáskor feljegyezzük annak időpontját (egy számláló állását), kiválasztáskor a tárolt időpontok között keressük a legrégibbet. • láncolt listával: A lapok egy láncolt listába vannak felfűzve, egy újonnan behozott lap a lista végére kerül. Egy címre hivatkozáskor a hozzátartozó lapot kivesszük a listából és a végére illesztjük A lista elején álló lap a legrégebben nem használt. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 114 ► Operációs rendszerek A dokumentum
használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 115 ► Mindkét implementáció csak meglehetősen bonyolult hardvertámogatással lenne hatékonyan megvalósítható. Újabb esély (Second Chance) Az algoritmus a FIFO egy olyan változata, amely a lap használatát is számon tartja. Megvalósításához egyszerű hardver-támogatás elegendő, teljesítménye a tapasztalatok szerint jó, így ez a legnépszerűbb algoritmus Az igényelt hardver-támogatás: fizikai laponként szükséges egy jelzőbit a lapra történő hivatkozás nyilvántartására (használt/nem használt). A címképző hardver minden esetben használtra állítja a hivatkozást, amikor a lap valamelyik rekeszére hivatkoznak. Az operációs rendszer a FIFO algoritmussal keres cserélendő lapot, de megnézi a használt bitet is. Ha a lap használt, nem választja áldozatul, hanem törli a használatjelzőt és továbblép a következő legrégebben betöltött lapra. Az első olyan lap
lesz az áldozat, amelyik nem használt A lapcsere-algoritmusok hatékonyságát nagyban fokozhatja, ha a cserének csak az egyik felét, a betöltést kell végrehajtani, a mentés megspórolható. Ez abban az esetben lehetséges, ha egy lapot betöltése óta nem módosítottak Gyakran alkalmaznak ezért a használatjelző mellett egy módosításjelző bitet is (dirty), amelyet ugyancsak hardver állít be, ha a lap valamelyik rekeszére írás hajtódik végre. Betöltéskor az operációs rendszer törli ezt a jelzőt. A használt és a módosított jelzések alapján az algoritmusok négy prioritási osztályt állíthatnak fel Először a nem használt, nem módosított lapok között keresnek áldozatot, majd ha ilyenek nincsenek, akkor sorrendben a nem használt, módosított, a használt, nem módosított, majd végül a használt, módosított lapok következnek. Az egyenletesebb terhelés érdekében az operációs rendszerek némelyike kihasználja az alacsonyabb
terhelésű időszakokat. Például: Amikor a mágneslemez szabad, menti a módosított lapokat akkor is, ha nincsenek cserére ítélve. Az áldozatválasztást „előrehozva” fenntart egy szabad lapkészletet, így laphiba esetén nem kell lapcsere-algoritmust futtatni. A szabad listára kerülő lapok megmaradnak az illetékes folyamat címtartományában is, ha mégis hivatkoznak rájuk csere előtt, akkor lekerülnek a szabad listáról. 3.24 Gazdálkodás a fizikai memóriával A virtuális tárkezelés eddig vizsgált algoritmusai nem voltak tekintettel arra, hogy a lapok különböző folyamatokhoz tartoznak. A multiprogramozott rendszerben felmerül az a kérdés, hogy az egyes folyamatok laphibái A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 115 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 116 ► más folyamatokra is hatással lehetnek-e, azaz a lapcsere algoritmus a teljes
lapkészletből, így esetleg más folyamat lapjaiból választ (globális memóriagazdálkodás), vagy csak a laphibázó folyamat saját lapjait cserélgetheti (lokális memóriagazdálkodás). Mindkét megoldásnak vannak előnyei és hátrányai. A globális gazdálkodás kiegyenlíti a terhelésingadozásokat, ugyanakkor egy nagy, sokfelé hivatkozó folyamat kiszoríthatja a kicsiket. A lokális gazdálkodás ettől megóv, de statikus formája túl merev, nem tud alkalmazkodni a terhelésingadozásokhoz. Az operációs rendszer egyrészt növelni szeretné a multiprogramozás fokát, mert ezzel javul az erőforrás-kihasználás. Ezzel azonban virtuális memória esetén egyre csökken az egy folyamatnak jutó lapok száma, növekszik a laphiba-gyakoriság, és – mint láttuk – ez CPU-tétlenséget okozhat. A növekedő szakasz után ezért a multiprogramozás fokának további növelésével a CPU-kihasználás értéke meredeken leesik (vergődés, thrashing). A probléma
megoldása a folyamatok lapigényének tanulmányozásával szerzett információkra alapozható. Egy folyamatnak minimum annyi lapra van szüksége, hogy a legbonyolultabb, legtöbb lapra hivatkozó, utasítása is le tudjon futni, különben végrehajthatatlan. Maximum annyira lehet igénye, amekkora a logikai címtartománya A két szélsőség között általában igaz, hogy minél több fizikai lapot használ egy program, annál kevesebb a laphibák száma. Kevés lappal a program vergődik, a laphibák száma és gyakorisága nagy. A korábban megfogalmazott egyensúlyi feltételt az egyes programokra is vonatkoztathatjuk, azaz mondhatjuk, hogy két laphiba közötti átlagos futási idejük haladja meg a laphiba kiszolgálási idejét. Ha ez programonként teljesül, az egész rendszer is egyensúlyban lesz. Megfogalmazhatjuk tehát, hogy célszerű egy folyamatnak legalább annyi lapot adni, amennyivel egyensúlyban van, vagyis amennyire a laphiba kiszolgálási idő alatt
hivatkozik. Ezt az értéket működő lapkészletnek (working set) nevezik Nehezíti a helyzetet, hogy egy programnak különböző futási szakaszaiban különböző működő lapkészlete lehet A memóriagazdálkodás kifinomult megoldásai a globális és a lokális gazdálkodás közötti egyensúlyt egy olyan dinamikus lokális gazdálkodásban találják meg, amely a laphibákat lokálisan kezeli le, de figyeli a folyamat viselkedését, és szükség szerint átcsoportosít lapokat egyik folyamattól a másiknak. A folyamat aktuális lapigényének meghatározására az egyik megoldás a működő lapkészlet mérése. Meg kell számolni, hogy az utolsó T időinter- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 116 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 117 ► vallumban (T célszerűen egyezik a laphiba kiszolgálásának idejével) hány különböző lapra hivatkozott a
folyamat. Ha jelentős eltérés van a folyamat által birtokolt lapok száma és a működő lapkészlet között, célszerű lapokat átcsoportosítani. A működő lapkészlet mérése nehézkes, ezért inkább a folyamatok laphiba-gyakoriságának mérésére alapoznak, ez sokkal könnyebben megoldható, csupán meg kell számolni, hogy egy időegység alatt hány laphiba fordult elő. Ha egy folyamat a futása során túl sok laphibát okoz, akkor kevés lapja van a tárban, ha viszont túl keveset, akkor esetleg – más folyamatok rovására – túl sok lap tartozik hozzá. Az operációs rendszer általában két határértéket használ, amelyekkel a mért laphiba-gyakoriságot összeveti. Ha a laphiba-gyakoriság meghalad egy felső határértéket, a folyamatnak más folyamatok, vagy szabad lapok rovására lapot kell adni. Ha a laphiba-gyakoriság alatta marad egy alsó határértéknek, a folyamattól elvehetők lapok. A két határérték közé eső mérési eredmények
a folyamat egyensúlyát jelzik, ilyenkor azt beavatkozás nélkül kell hagyni. 3.3 Fájlkezelés A felhasználók az operációs rendszerek szolgáltatásai közül leggyakrabban a fájlok kezelésével találkoznak. 3.31 Alapfogalmak Fájl (file) A fájl a létrehozója szempontjából összetartozó információk gyűjteménye. Tartalmazhat programokat, adatokat, szövegeket, ábrákat, vagy más alakban kódolt információt. A fájl magyar változataként leginkább az állomány megnevezés van használatban. Az állományok általában perifériákon tárolódnak (lemez, szalag, CD stb.) Adattartalmukat általában programok állítják elő és használják fel Az adattartalom a programok futása után is megmarad, – ellentétben a memóriában tárolt változókkal. Teljes fájlokon az operátori felület parancskészletével is végezhetünk műveleteket (pl törlés, másolás, áthelyezés stb) Az operációs rendszerek egyidejűleg több ezer állományt tárolnak,
kezelnek; az állományokat egy hozzájuk rendelt egyedi azonosító – név – különbözteti meg egymástól. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 117 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 118 ► Az állomány a felhasználókhoz közel álló fogalom, absztrakció, amely elrejti az állományok tárolásának, kezelésének fizika részleteit: • • • • melyik fizikai eszközön található; a perifériás illesztő vezérlésének sajátosságait; az állományhoz tartozó információknak elhelyezkedését az eszközön; az állományban tárolt információ logikai egységei hogyan töltik ki a fizikai tárolási egységet (szektort, blokkot); • az információ átvitele során alkalmazott blokkosítást, pufferelést. Az állományokra való hivatkozásnál a fizikai eszköz megjelölése helyett logikai eszközneveket használhatunk, illetve pl. a UNIX
operációs rendszerben az egységes állományrendszer a perifériákat is fájlként jeleníti meg Az egy fizikai eszközön található állományok összességét kötetnek (volume) nevezzük. Könyvtár Az állományokat a felhasználók – esetleg az operációs rendszer – a saját szempontjaik szerint könyvtárakba csoportosít(hat)ják. A könyvtár tartalmát a nyilvántartás, katalógus írja le (Megjegyzés: az angol szakirodalomban mind a könyvtárat, mind a nyilvántartást a directory szóval jelölik) Az állománykezelő feladatai: • • • • • információátvitel az állományok és a folyamatok tárterülete között; műveletek állományokon illetve könyvtárakon; az osztott – egyidejűleg több folyamat általi – állománykezelés vezérlése; az állományokhoz való hozzáférés szabályozása; a tárolt információ védelme illetéktelen olvasások ellen (rejtjelezés, encryption); • a tárolt információ védelme sérülések ellen,
mentések. A fájlok kezelését az operációs rendszerekben egymásra épülő programrétegek valósítják meg. A fájlkezelő rendszer ráépül a beviteli-kiviteli rendszer szolgáltatásaira 3.32 A fájlok belső szerkezete Az operációs rendszer számára a fájl tárolás szempontjából egy bit- vagy bájtsorozat, amit a felhasználó a saját szempontjai szerint nagyobb egységekbe csoportosíthat. Ilyenek: A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 118 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 119 ► • mező (field): Egy egyszerű típusú adatot (integer, karakter, string stb.) tároló bájtsorozat. • rekord (record): Mezők összetartozó csoportja. Egy állomány, vagy azonos szerkezetű rekordok gyűjteménye, vagy különböző, de azonosítható típusú rekordokból áll Mind az egyes mezők, mind a rekordok lehetnek kötött vagy változó hoszszúságúak;
ez utóbbi esetben a tárolt információból a hosszuk egyértelműen meghatározható (hossz vagy végjel tárolása). Az operációs rendszer viszonya az állományok belső szerkezetéhez: • nem foglalkozik vele; Az állomány a rendszer szempontjából egy bájt-sorozat, szerkezetét csak az állományt kezelő programok ismerik, értelmezik. Rugalmas, egyszerű megoldás, de az azonos állományt kezelő programoknak meg kell állapodniuk a tárolt információ szerkezetéről, amit az operációs rendszer nem tud ellenőrizni. • ismeri és támogatja bizonyos adattípusok kezelését; Az operációs rendszer tartalmaz különböző típusú mezőnkénti, illetve rekordonkénti hozzáférési lehetőséget. Ezek az eljárások a rendszer méretét nagyban megnövelik, új mező-, illetve rekordtípusok hozzáadása nagyon bonyolult, általában lehetetlen. 3.33 Fájlmodellek (hozzáférési módszerek) Soros (sequential) Az állomány fogalma az operációs rendszerekben a
mágnesszalag analógiájára alakult ki, a szalagon tárolt információt csak a tárolt byte-ok sorrendjében lehetett olvasni vagy írni. Sok információ-feldolgozási feladathoz a soros hozzáférés elegendő A soros elérés modelljéhez tartozik egy ún. fájlpointer, ami az aktuális elérési pozíciót tárolja Közvetlen (direct) A tárolt információ-elemek (bájt, mező, rekord) bármelyikét közvetlenül, sorszáma alapján el lehet érni. Az átviteli eljárásoknak paraméterként meg kell adni az információ-elem állományon belüli címét (sorszámát). Indexelt, index-szekvenciális (index sequential access method, ISAM): A soros elérésen túl az állományt alkotó rekordokat kijelölt mezőjük – az ún. kulcs (key) – értékei alapján rendezzük, és az állományhoz csatolt A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 119 ► Operációs rendszerek Tárkezelés A dokumentum használata | Tartalomjegyzék | Irodalom
Vissza ◄ 120 ► indextáblában a rendezett kulcs-értékek sorrendjében tároljuk az egyes rekordok állományon belüli címét (3.7 ábra) Mivel az index-tábla rendezett, a kívánt kulcshoz tartozó rekord címét gyorsan (pl. bináris kereséssel) megtalálhatjuk, a cím alapján a rekord közvetlenül elérhető Az állományban tárolt információ módosítása során az index-táblát is módosítani kell, hogy a kereséshez szükséges rendezettséget mindig megtartsuk. Ez nagy állományok esetén sok időt vehet igénybe indexfájl kulcs 1 adatfájl kulcs egyéb mezõk kulcs 2 kulcs n 3.7 ábra Indexelt fájlelérés 3.34 Az állományok tárolása a lemezen Az operációs rendszer által egységként kezelt lemezterületet a blokk. A legkisebb mozgatott, lefoglalt, felszabadított lemezterület egy blokk. Egy blokk néhány szektort tartalmaz. Az operációs rendszer lemezkezelésének hatékonyságát befolyásolja, hogy milyen megoldásokkal tartja
nyilván a lemez szabad blokkjait, illetve hogyan helyezi el és tartja nyilván az egyes fájlokhoz tartozó adatblokkokat. A szabad blokkok nyilvántartása Bittérkép: A lemez mindegyik blokkjához egy bitben tárolható, hogy szabad-e. Ezekből a bitekből képzett vektort a lemez kijelölt helyén tároljuk A bitvektoros szervezés esetén egymás melletti szabad blokkok kiválasztá- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 120 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 121 ► sa nagyon egyszerű, de a vektor kezelése csak akkor hatékony, ha a teljes vektort a tárban tudjuk tartani. Láncolt lista: Minden szabad blokk tartalmaz egy hivatkozást a következőre, a rendszer csak az első szabad blokk sorszámát tárolja. Az ábrázolás nem hatékony, a lista bejárása több lemezműveletet igényel Szabad helyek csoportjainak listája: Egy-egy szabad blokk nem egy, hanem n
szabad blokkra hivatkozik, ezekből n−1 ténylegesen szabad, az utolsó egy következő szabad n-esre hivatkozik. Egybefüggő szabad területek nyilvántartása: A szabad blokkok egyesével történő tárolása helyett egy táblázatban az egymás mellett lévő szabad blokkokról az első sorszámát és a terület hosszát tároljuk. A módszer akkor előnyös, ha a szabad területek átlagos hossza (jóval) nagyobb egynél, valamint ha az allokálásnál egymás melletti szabad területeket akarunk kiválasztani. Ha a táblázat elemei a kezdő blokk szerint rendezettek, az egymás melletti szabad területek összevonása egyszerű. A fájl adatainak elhelyezése (allokációs módszerek) A lemezen tárolandó adatok számára a szabad blokkok közül kell választani; az összetartozó blokkokat, azok sorrendjét tárolni kell. Ennek ismert módszerei: Folytonos terület allokációja: Az összetartozó információt egymás melletti szabad blokkokban tároljuk. A rendszernek
csupán az első blokk sorszámát, valamint a blokkok számát kell tárolni. Hátrányai: • A változó méretű partícióknál tárgyalt külső tördelődés problémája itt is fellép, a megoldás algoritmusai is azonosak (első illeszkedő, legjobban illeszkedő, legrosszabbul illeszkedő kiválasztása). A lemez nagy mértékű tördelődése esetén a használt blokkokat tömöríteni kell, általában a teljes információt állományonként kimásolják egy másik háttértárra, majd az üres egységre visszamásolva a lefoglalt lemezterület egybefüggő lesz. • Az esetek nagy többségében nem tudjuk előre, hány blokkra lesz szükségünk, így valamilyen algoritmussal a szükséges blokkok számát becsülni kell. Ha ez nem bizonyul elégnek és a lefoglalt blokkokat követő területet már használják, akkor a program hibaüzenettel leáll, vagy az operációs rendszer megpróbál nagyobb szabad területet keresni, és oda a már felhasznált blokkok
tartalmát átmásolni. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 121 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 122 ► Előnyei: • A tárolt információnak mind soros, mind közvetlen elérése egyszerű. • Bár a módszer rugalmatlan, de például nagyon jól használható a tárcsere által kirakott szegmensek tárolására, hiszen itt előre tudjuk az elmentendő címtartomány pontos méretét, az egymás melletti blokkok egyszerre mozgatása az átvitel sebességét nagyban gyorsíthatja. Láncolt tárolás: A szükséges blokkokat egyesével allokáljuk, minden blokkban fenntartva egy helyet a következő blokk sorszámának. Általában a rendszer állományonként az első és az utolsó blokk sorszámát tárolja. Előnyei: • Nincs külső tördelődés, nem kell tömöríteni; • A tárolt információ szükség szerint tetszőlegesen növekedhet, határt csak a
szabad blokkok száma szab. Hátrányai: • Csak a soros elérést támogatja, a közvetlen eléréshez a listát az elejéről végig kell járni. • Minden állomány mérete a következő blokkok leírásával megnő, ráadásul ezek az értékes információval keverednek, így átvitel közben külön kell gondoskodni a beillesztésükről illetve kihagyásukról. • Egyetlen láncszem hibája a tárolt információ jelentős részének elvesztését jelentheti. Fájl-allokációs tábla: A láncolt tárolás módosított változata az ún. fájlallokációs tábla (file allocation table, FAT), ahol az összes láncelemet az állományoktól elkülönítve, lemezenként egy helyen tároljuk Ennek a táblázatnak minden eleme egy lemez-blokkhoz tartozik, amelyben, ha használt, tárolhatjuk a következő blokk címét. Az egyes állományokhoz csak a lánc első blokkjának címét kell tárolni, a következő blokkok a FAT-ból megtalálhatók. Ezt az allokációs táblát
egyidejűleg a szabad blokkok tárolására is fel lehet használni. Indexelt tárolás: Az indexelt ábrázolás alapötlete, hogy az állományhoz tartozó blokkokat leíró mutatókat külön adatterületre, az indextáblába gyűjtjük. Az állományhoz az értékes információt tartalmazó blokkokkal együtt az indextáblát tartalmazó blokk(ok) címét kell tárolni. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 122 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 123 ► Előnyei: • A közvetlen hozzáférés megvalósítása egyszerű, hiszen az indextábla segítségével minden blokk közvetlenül megtalálható. • Alkalmas „lyukas” állományok tárolására, azaz olyan állományokra, amely nem minden blokkja tartalmaz információt. Ebben az ábrázolási formában a nem használt területekhez nem kell lemez blokkot lefoglalni. Hátrányai: • A blokkok címeinek
tárolásához akkor is legalább egy teljes blokkot kell lefoglalni, ha az állomány csak kevés blokkot tartalmaz. • Az indextábla mérete előre nem ismert, ezért meg kell oldani, hogy a táblázat is növekedhessen. Erre ad lehetőséget a láncolt indexblokkok vagy többszintes indextáblák használata, ahol egy „alsó” szintű tábla indexe nem az állomány blokkjára, hanem egy következő szintű indexblokkra mutat. Lehetséges megoldás, hogy állományokhoz egy-, és többszintű indexblokkokat is rendelünk (ilyen pl. a UNIX fájlrendszere) Kombinált módszerek: • Az állomány hozzáférési módja szerint: soros hozzáférésű állományok esetén láncolt, közvetlen hozzáférésűek esetén folytonos ábrázolást használunk. • Az állomány mérete szerint: kis állományokat folytonosan, nagyokat indexelten tárolunk. 3.35 Könyvtárak A könyvtár-állományok – esetleg más könyvtárak – gyűjteménye, a könyvtár tartalmát a hozzátartozó
nyilvántartás írja le. Nyilvántartás-bejegyzések A nyilvántartás-bejegyzések (directory entry) feladata a könyvtárban tárolt állományok leírása. Az ehhez szükséges információk: • az állomány neve: Az állományt a könyvtárban a neve alapján azonosíthatjuk, a nevek könyvtáranként egyediek. Egyes operációs rendszerek az állomány nevét A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 123 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 124 ► – homogén karaktersorozatnak tekintik, pl. a UNIX-ban, ahol bármilyen „nyomtatható” karakter szerepelhet (kisbetűk, illetve nagybetűk, írásjelek), vagy – önálló jelentéssel bíró részekre bontják, pl. a VMS-ben név, típus (kiterjesztés, extension), verziószám. • az állomány fizikai elhelyezkedését leíró információk: – hossza; – hozzá tartozó háttértár blokkjainak leírása; – a
hozzáférés módja. • az állomány kezeléséhez kapcsolódó logikai információk: – típusa (ha van ilyen); – tulajdonosának (owner), létrehozójának azonosítója; – különböző időpont-adatok, pl.: ○ létrehozása, ○ utolsó módosítása, ○ utolsó hozzáférés, ○ argumentumainak utolsó módosítása, ○ meddig tárolandó, – hozzáférési jogosultságok; – hivatkozás-számláló, amennyiben az állományra több különböző néven és/vagy különböző könyvtárakból hivatkoznak. A nyilvántartás-bejegyzésben tárolt információkat egyes operációs rendszerek (pl. UNIX) kettéválasztják: • a kötet-nyilvántartás (volume directory) tartalmazza a köteten lévő összes állományt leíró fizikai – esetleg logikai – információkat; • az állomány-nyilvántartás(ok) (file directory) tartalmazzák az állományok könyvtárakba szervezésének leírását, valamint az állományokat leíró logikai információkat. A
nyilvántartás-bejegyzésen kívül vannak az állományok kezelésével kapcsolatos egyéb információk, amelyeket az operációs rendszer nem a háttértáron, hanem a központi tárban, saját adatszerkezeteiben tárol: • az átvitel állapota (folyamatonként): – soros hozzáférés pozíciója; – megengedett műveletek: az adott folyamat az állományon milyen műveletet végezhet; ennek felső korlátját az állományhoz rendelt hozzáférési jogosultságok jelentik, de lehetnek ennél szűkebbek is. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 124 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 125 ► • osztott kezeléssel kapcsolatos információk: – hány folyamat használja egyidejűleg; – kölcsönös kizárást milyen módon, mekkora tartományra kell biztosítani; – mely folyamatok várakoznak az állomány felszabadulására. A könyvtárak hierarchiája Az
összes állomány egy könyvtárban tárolása az állományok nagy száma miatt nem célszerű. A könyvtárakat az operációs rendszer – kötetenként külön-külön vagy egyetlen rendszerszintű – hierarchiába szervezi. • kétszintű könyvtárszerkezet: A kétszintű könyvtárszerkezetben ez egyes felhasználók állományai kerülnek egy könyvtárba. Problémát jelent, hogy a felhasználók – más felhasználók állományait is használni akarják, ezeket az állományokat a felhasználó és az állomány neve együtt azonosítja; – az operációs rendszerhez tartozó állományokat, például rendszerprogramokat akarnak használni. A rendszerprogramokat egy speciális „felhasználói” könyvtárban helyezik el Egy program indításánál az operációs rendszer parancsértelmezője a felhasználói könyvtáron felül a rendszerkönyvtár(ak)ban is keres • faszerkezet: Az egyes könyvtárak nemcsak állományokat, hanem más könyvtárakat is
tartalmaznak. Fogalmak: – aktuális könyvtár (current directory) folyamatonként; – gyökér könyvtár (root directory) a hierarchia kiinduló pontja; – elérési út (path) a gyökértől – vagy az aktuális könyvtártól – a kijelölt állományig vezető „útvonal”, azaz a fa ágait reprezentáló könyvtárnevek sorozata. Minden állományhoz a gyökérből kiindulva egyetlen elérési út tartozik, a fa jellegű szerkezetből adódóan. – keresési utak (search path) adják meg, hogy amennyiben az elérési út nélkül megadott állomány nincs az aktuális könyvtárban, akkor azt melyik könyvtárakban kell keresni. Állományok típusa (tartalma) szerint különböző keresési utak lehetnek, leggyakrabban a végrehajtható programoknak van keresési útja. Ilyen utak felhasználónként definiálhatók vagy a rendszer azonos módon definiálja minden felhasználó számára • körmentes irányított gráf: Az előbbi faszerkezet is irányított gráf
volt, hiszen mindig egy könyvtártól lehetett eljutni annak tartalmához, az ál- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 125 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 126 ► lományokhoz vagy más könyvtárakhoz. A körmentes irányított gráfban egy állományra – vagy könyvtárra – a hierarchia több pontjáról, több könyvtárból is hivatkozhatunk, de a hivatkozások irányítását követve a gráfban nincsenek körök (hurkok). Egyes állományokat, könyvtárakat a gyökértől több útvonalon lehet elérni. Az állományokra való hivatkozás (link) lehet: – fizikai: az állományt leíró információkat megismétlik, illetve pl. UNIX-nál ugyanarra a kötetnyilvántartás-bejegyzésre hivatkoznak; – szimbolikus: a nyilvántartás-bejegyzésben az állományt elérő, létező útvonalat tárolunk. Problémát jelent, – hogy az állományokra több
elérési úton lehet hivatkozni, de egyes esetekben – például az állományok mentésénél, hozzáférési statisztikák készítésénél, osztott elérés megvalósításánál – csak egy útvonalat kell figyelembe venni. – annak meghatározása, hogy mikor kell egy állományt törölni: bármelyik útvonalon hivatkozott törlésnél, vagy csak akkor, ha ez az utolsó hivatkozás. Szimbolikus hivatkozásoknál az állományokra hivatkozások számát nehéz meghatározni. • általános gráf: Az általános gráf kört is tartalmazhat, ami csak nehézségekkel jár, mert: – a gráfban való keresésnél el kell kerülni a végtelen ciklusokat; – egy ág törlésével teljes hurkok maradhatnak a „levegőben lógva”, azaz tartalmukat – a hozzájuk tartozó állományokat, könyvtárakat – nem töröltük, de azok a gyökérből kiindulva többé már nem érhetőek el. A kezelés problémái miatt általános gráf szerkezetű könyvtárakat az operációs
rendszerek nem használnak, de körmentes irányított gráfokból „véletlenül” könnyen létrejöhetnek ilyenek, amit pl. a UNIX rendszerek nem ellenőriznek. 3.36 Műveletek Műveletek állományokon • átvitel, írás vagy olvasás: – közvetlen hozzáférésnél a művelethez meg kell adni az információ címét, pozícióját; – soros hozzáférésnél az átvitel során az aktuális pozíciót a rendszer növeli és tárolja. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 126 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom • • • • • Tárkezelés Vissza ◄ 127 ► Eldöntendő, hogy megengedjük-e az átvitel során az állomány szimultán írását és olvasását is. Ha igen, akkor soros elérésnél közös vagy külön-külön pozíciót használunk hozzáírás (append), bővítés: Az állomány végéhez új információt írunk. Az állomány mérete növekszik, esetleg a
háttértáron új blokkot kell allokálni. pozicionálás: A soros hozzáférésnél használt pozíciót a soros átvitel mindig növeli, pozicionálásnál viszont azt az állomány tetszőleges pontjára állíthatjuk. Gyakori eset a pozíció visszaállítása az állomány elejére, a mágnesszalag analógiát sugalló visszacsévélés (rewind). A pozicionálás műveletével lehet a közvetlen hozzáférést megvalósítani állomány megnyitása (open): Az átviteli műveletek hatékonyabbak, ha nem kell mindegyiknél az állományt a neve alapján a nyilvántartásokból megkeresni. A megnyitás műveletének szerepe: – az állomány megkeresése, fizikai elhelyezkedésének meghatározása; – hozzáférési jogosultságok ellenőrzése; – az állományon elvégezhető műveletek (írás, olvasás, hozzáírás) megadása; – osztott állománykezelés szabályozása; – soros hozzáférés pozíciójának kezdeti beállítása; Az állomány sikeres megnyitása után
az operációs rendszer a központi tárban felépít egy a további állománykezeléshez szükséges adatszerkezetet. Az összes további művelet az állomány neve helyett erre az adatszerkezetre hivatkozik állomány lezárása (close): átviteli műveletek befejezése, – pufferelt írásnál a még ki nem írt információ tárolása; – osztott állománykezelésnél az állomány felszabadítása. programállomány végrehajtása (execution): Az operációs rendszer létrehoz egy új folyamatot, a programállományt betölti a folyamat tárterületére és elindítja – futásra késszé – teszi azt. A következő műveletek az állományokon felül az azokat befoglaló könyvtárra is hatással vannak. • állomány létrehozása (create): Az állomány létrehozásakor egy új nyilvántartás bejegyzés is létrejön, a rendszer szükséges esetén az állományhoz szabad blokkokat foglal le. • állomány törlése (delete): A törlés megszünteti a
nyilvántartás-bejegyzést, és felszabadítja az állományhoz tartozó blokkokat. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 127 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 128 ► Műveletek könyvtárakon • állomány attribútumainak módosítása: Az állományhoz tartozó egyes logikai információk az állományban tárolt információk módosítása nélkül is megváltoztathatók. • új könyvtár létrehozása, • könyvtár törlése: Könyvtár törlésekor eldöntendő, hogy mi történjék a tartalmával: – csak akkor törölhető, ha üres, nincsenek benne állományok vagy könyvtárak; – törli az összes benne lévő állományt; – rekurzívan töröl az összes bennefoglalt könyvtárakban is. • keresés: A könyvtárakon végzett leggyakoribb művelet, hogy egy névhez meg kell találni a hozzátartozó állományt. Keresni lehet – egy
nyilvántartásban. A nyilvántartás szerkezete meghatározza a keresés sebességét: – rendezetlen, keresés teljes bejárással, – rendezett, felező keresés, – hash keresés; – a könyvtárszerkezetben: A keresés bejárja a megadott elérési útvonalat. Mivel ez sok lemezműveletet igényel, itt is célszerű gyorsítani, pl hash-táblákkal • új bejegyzés létrehozása: új bejegyzés létrehozásakor a nyilvántartás méretének dinamikusan növekednie kell, szükség esetén új blokkot kell lefoglalni. Rendezett nyilvántartásban az új bejegyzést a rendezettséget megtartva a megfelelő helyre kell beilleszteni. • bejegyzés törlése: – a bejegyzés törölt jelzéssel továbbra is a könyvtárban marad, ez megkönnyíti a véletlenül törölt állományok visszaállítását; – a törölt bejegyzés helyére előrejön egy létező bejegyzés. – Rendezett nyilvántartásban törlés esetén is tartani kell a rendezettséget. 3.37 Osztott
állománykezelés Az állomány lehet olyan erőforrás, amelyet egyidejűleg több folyamat is használni akar. Csak olvasások esetén az állomány tartalma nem módosul, így az állomány osztottan is használható. Ha azonban legalább egy folyamat ír az állományba, akkor azt kölcsönös kizárással védeni kell Kérdés, hogy a kölcsönös kizárást mennyi ideig kell fenntartani. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 128 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Tárkezelés Vissza ◄ 129 ► • Teljes állományra vonatkozó szabályozás (file lock): Az állományt először megnyitó folyamat definiálhatja, hogy a későbbi megnyitási kérelmekből mit engedélyezhetünk: – kizárólagos használat, több megnyitást nem engedélyezünk; – a többi folyamat az állományt csak olvashatja; – egy vagy több folyamat is megnyithatja írási joggal. Ha az állományt legalább egy
folyamat írhatja, definiálni kell, hogy az olvasó folyamatok az állomány változását mikor veszik észre (consistency semantics): – azonnal; – csak azután, hogy az író folyamat lezárta az állományt, addig a régi tartalmat látják. • Állomány részeire vonatkozó kizárás: Az egész állományra vonatkozó kölcsönös kizárás néha túlzottan, megengedhetetlenül óvatos, hiszen egyéb folyamatok az állományhoz csak lezárása után férhetnek hozzá. Amelyik folyamat az állományban összetartozó információt akar elérni – írni vagy olvasni –, akkor ez(eke)t mint önálló erőforrásokat lefoglalja – illetve várakozik, amíg felszabadul(nak) –, majd az átvitel lezajlása után a lefoglalt rekordo(ka)t felszabadítja. Természetesen akár több egyidejűleg írási joggal rendelkező folyamat is létezhet, a kölcsönös kizárás csak egyes kijelölt rekordokra vonatkozik. Az állomány módosítását a többi folyamat a módosított
rekordok felszabadítása után azonnal látja. A kölcsönös kizárás miatt itt is felléphet a holtpont vagy a kiéheztetés veszélye Mivel az operációs rendszer több felhasználó állományait tárolja, kezeli, felvetődik az az igény, hogy jogosulatlan felhasználók ne férhessenek hozzá minden állomány tartalmához, illetve ne végezhessenek rajtuk bizonyos műveleteket. 3.38 A hozzáférés szabályozása A hozzáférési jogokat az állomány létrehozója vagy az állomány felett speciális jogokkal rendelkező felhasználó definiálhatja. Mivel az állományokat folyamatok hozzák létre, a „létrehozó” az a felhasználó, amelyik a folyamatot elindította. Tipikus jogosultságokat mutat be a 38 ábra: A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 129 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Állományokra: írás olvasás végrehajtás hozzáírás törlés Tárkezelés Vissza ◄
130 ► Könyvtárakra: könyvtár módosítása listázás keresés új állomány létrehozása könyvtár törlése 3.8 ábra Állományok hozzáférési jogosultsága A hozzáférési jogosultságok • az állományhoz, vagy pedig • az elérési útvonalhoz tartoznak; ebben az esetben a különböző elérési útvonalakhoz különböző jogosultságok tartozhatnak. A jogosultságokat • felhasználónként definiáljuk (ez esetenként túl sok lehet), vagy • felhasználó-csoportonként adjuk meg; ilyen csoportok például: • operációs rendszer, • tulajdonos, • adott csoport tagjai, • bárki. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 130 ► Operációs rendszerek Bemeneti-kimeneti (I/O) rendszer A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 131 ► 4. Bemeneti-kimeneti (I/O) rendszer A számítógépeken futó alkalmazások jelentős része I/O-intenzív, vagyis a számítógép a feldolgozó
képességét elsősorban a külső eszközökkel (perifériákkal) folytatott szervezett, rendezett adatcserére használja. A bevitelikiviteli eszközök hatékony működtetése ezért az operációs rendszerek egyik legfontosabb feladata. A számítógépek körül egyre több fajta olyan periféria-készüléket találunk, amelyekkel a gép 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ák jellegzetes feladatkörei: • ember-gép kapcsolat tartásában való közreműködés, • gép-gép kapcsolat tartásában való közreműködés, • 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 fizikai adatkapcsolat szintjén is egyre magasabb szintű, a részleteket elfedő modellt láttatnak magukból. A perifériák sebessége és vezérelhetősége is jelentősen eltérhet egymástól. Többségük mechanikus alkatrészeket is tartalmaz, ezért a perifériák működési sebessége (pl feldolgozott bájt/sec 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 eszközöknél ellenben éppen az jelenthet gondot, hogy egy hosszabb adatfolyamot csak saját ritmusukban képesek kezelni (pl a diszkek, a lemez folyamatos forgása miatt) Ha a számítógép felől ehhez nem tudunk igazodni, az adatátvitel csak jelentős időveszteséggel ismételhető meg. Az erőforrás-kihasználás szempontjából így különös jelentősége van annak, hogy a perifériák
egymással és a processzorral is párhuzamosan működhessenek, és az egyedi sajátosságaikhoz igazodó, hatékony módszerekkel kezeljük őket. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 131 ► Operációs rendszerek Bemeneti-kimeneti (I/O) rendszer A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 132 ► A perifériák és hardver-illesztéseik sokszínűségének érzékeltetésére a 4.1 ábra a személyi számítógépek jellegzetes architektúráját mutatja be Egyes vezérlők csak egy-egy eszközt felügyelnek, mások egy külön sínrendszeren több eszközt kezelnek. Lehetnek olyan vezérlők, amelyek önálló processzorral és mikrokóddal, jelentős memóriával rendelkezhetnek (IDE, SCSI, grafikus vezérlő), mások csupán néhány regisztert (adatkimenet/bemenet, parancs, státusz) és sínillesztő áramköröket tartalmaznak (portok). Egyes eszközök csak I/O 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ással jelentkeznek. 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 a közvetlen memória-hozzáférés (DMA: Direct Memory Access) révén. diszk CPU monitor SCSI sín diszk cache memória memória- / sínvezérlõ grafikus vezérlõ SCSI vezérlõ PCI sín IDE vezérlõ diszk diszk bõvítõ sín bõvítõsín vezérlõ soros / párhuzamos portok billentyûzet 4.1 ábra Személyi számítógépek felépítése Az operációs rendszer feladatai az I/O-kezelésben: • Egységes alkalmazói felület (interfész) kialakítása (application interface): Ennek keretében el kell takarni a részleteket, minél inkább egységesíteni a műveleteket, lehetővé tenni a logikai perifériakezelést, a műveletek átirányíthatóságát. • Egységes csatlakozó
felület kialakítása a készülékek számára (device interface): A perifériák fizikai csatlakoztatása a hardver architektúra A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 132 ► Operációs rendszerek Bemeneti-kimeneti (I/O) rendszer A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 133 ► meghatározott helyein, egyszerűbb, vagy bonyolultabb vezérlők csatlakozási pontjaira történhet. Egyszerűbb eszközök és szabványos I/O vezérlő esetén az operációs rendszer eleve tartalmazza a vezérlő egység kezelőprogramját, a működésbe helyezéshez csupán néhány paramétert kell megadni. Bonyolultabb, új eszközök esetén az operációs rendszerhez való illesztés egy speciális kezelőprogram (device driver) beillesztését igényli a rendszerbe, amelyik a periféria minden sajátosságát – beleértve a fizikai csatlakoztatás módját és adatait is – ismeri A kezelőprogram és az operációs rendszer
illesztési felületét ezért egységes, specifikált felületként kell kialakítani. • A készülékek hatékony működtetése: Ennek keretében meg kell oldani a perifériák ütemezését és az átvitelek szimultán lebonyolításában a programozottan végrehajtandó feladatokat (megszakításkezelések, vezérlőegységek felprogramozása, állapotellenőrzések, hibakezelések, pufferelések stb.) Ezek a feladatok az operációs rendszer belső szerkezetét is meghatározzák, és jellegzetesen a 4.2 ábrán bemutatott rendszerstruktúrára vezetnek alkalmazói felület kernel kernel I/O alrendszer SW kezelõprogram 1 kezelõprogram 2 . készülékvezérlõ 1 készülékvezérlõ 21 készülék 1 készülék 21 . . kezelõprogram n . készülékvezérlõ 2p készülékvezérlõ m HW készülék 2p1 . készülék 2pq készülék m 4.2 ábra Operációs rendszerek I/O alrendszerének tipikus felépítése A dokumentum használata | Tartalomjegyzék |
Irodalom Vissza ◄ 133 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 134 ► A rendkívül heterogén perifériakészlet részletkérdéseitől elvonatkoztatva az alkalmazói felület a bevitelre-kivitelre egységes, néhány paraméterrel leírható műveleteket ad. A kernel I/O alrendszere már valamelyest megosztottabb, az ábrán nem jelölt alrétegekre és modulokra osztható, amelyek szükség szerint ütemezéseket, puffereléseket, blokkosításokat végeznek. A rendszerben több azonos típusú eszköz működhet. Ezek illesztési módja, vezérlőegysége eltérő lehet. A legegyszerűbb esetben egy perifériához egy vezérlőegység és ahhoz egy kezelőprogram (készülékmeghajtó: device driver) tartozik. Egy kezelőprogrammal működtethetünk több vezérlőegységet, azon belül több perifériát Ilyen esetekben is mindig vannak azonban a kezelőprogramnak legalább is
olyan adatszerkezetei, amelyek a perifériákra nézve egyediek A perifériák működtetésének részleteit csak a kezelőprogramjuk ismeri. Ezért minden perifériatípushoz külön kezelőprogram (saját driver) tartozik Egy rendszeren belül a kezelőprogramok és a kernel csatlakozási felülete szabványos, rendszerenként azonban jelentősen eltérő lehet. Ha egy új perifériát vásárolunk és csatlakoztatjuk a rendszerünkhöz, egy megfelelő kezelőprogramot is telepítenünk kell hozzá, amit vagy az operációs rendszer szállítója készített és a rendszerkönyvtárban megtalálható, vagy a periféria szállítója mellékelt, a különböző operációs rendszereknek megfelelően több változatban. A továbbiakban először az alkalmazói felülettel, ezt követően a kernel I/O alrendszerrel, majd a I/O egységek kezelését végző rendszerhívások végrehajtásával, végül pedig a legbonyolultabb készülékek egyikének, a mágneslemeznek a kezelésével
foglalkozunk. 4.1 Egységes alkalmazói felület 4.11 Egyszerű adatmozgatás A kernel alkalmazói felületén az I/O-műveletek hagyományosan egy adatblokk mozgatására vonatkoznak a memória és valamely készülék között. Ennek az alacsony szintű I/O-kezelésnek a lebonyolí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 (Input Output Control Block: IOCB – I/Ovezérlési blokk: IOVB). 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 készüléknév A mennyiség a A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 134 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 135 ► mozgatandó bájtok száma. A készüléknév lehet
logikai név, így a hívó kódja készülékfüggetlen lehet. A műveletek argumentumában a készüléknév és az IOVB mutatója szerepel Az IOVB 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 (pl. diszkek esetén blokkcím) A START a logikai készülékné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ó IOVB-t. Ha a periféria nincs működésben, a szabványos kezelőprograminterfészen keresztül elindítja a kezelőprogram Start Device műveletét A WAIT művelet ellenőrzi az IOVB állapotjelzőjét. Ha az I/O-művelet még nem fejeződött be, a hívót ráfűzi a megadott IOVB-re és a folyamatot várakozó állapotba helyezi, majd CPU ütemezést indít Ha befejeződött, visszatér a hívóhoz Egyes rendszerekben
a művelethez időkorlát rendelhető, amely zérus és végtelen értékekre is beállítható. A zérus é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 programhibák, leállások esetén megállítja az elindított, de még be nem fejeződött I/O-műveletet. Ha a készülék még nem kezdte meg a végrehajtást (nem az első az IOVB a sorban), egyszerűen kifűzi az IOVB-t, ha már megkezdte, a szabványos 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, amelyek magasabb szintű I/O-kezelést tesznek lehetővé. Ezen a magasabb szinten megjelenhetnek absztrakt eszközök, amelyek közül jellegzetesek a fájl, a grafikus megjelenítő, a terminál, és a
hálózati csatlakozópont. Az egyszerű I/O-műveletek lehetővé teszik, hogy a magasabb szintű műveleteket akár várakozó (blokkolt), akár továbbfutó (nem blokkolt) változatban alakítsák ki. 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 magas szintű műveletek szívesebben alkalmaznak blokkolt megoldást, mert a vezérlési szál ilyenkor nem ágazik el az I/O-indítás következtében, és a programkód könnyebben érthető és követhető. Ha nem blokkolt megoldás szükséges, inkább szálakat hoznak létre a folyamaton belül, és az egyik szálon az I/Oműveletet akkor is blokkoltan hajtják végre. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 135 ► Operációs rendszerek A dokumentum használata |
Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 136 ► 4.12 Fájlműveletek Egyes operációs rendszerek (ld. UNIX) a fájl fogalmának általánosításával oldják meg gyakorlatilag valamennyi periféria kezelését. 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. Megnyitáskor a rendszer felépíti a fájl kezeléséhez szükséges adatszerkezeteket a memóriában (katalógusadatok, fájlmutató, állapotjelzők), meghatározza a megnyitónak a fájlhoz fűződő jogait, és legalább egy blokknyi puffert foglal az adatoknak. A read és write műveletek csak akkor vezetnek I/O rendszerhívásra, ha a fájl olyan részére vonatkoznak, amelyik nincs a pufferben Ilyenkor
teljes blokkok mozgatása történik. A virtuális tárat használó rendszerek 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 fizikai tár ezek után a diszkes fájl gyorsmemóriájaként működik A további fizikai eszközök (pl. nyomtató, billentyűzet, modem, audioés videoberendezések) read, write műveleteinek egy része ugyancsak blokkonkénti, más része karakterenkénti I/O 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ő. 4.13 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 egy 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. Ugyanez áll a képpontokra (ún. pixel ) is Bizonyos eszközökben a könyvtári eljárások programja és a grafikus memória egy 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 I/O címen, vagy memóriába ágyazottan kezelhető regiszter- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 136 ► Operációs rendszerek Bemeneti-kimeneti (I/O) rendszer A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 137 ► ké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 4.14 Terminálkezelés A terminál egy karakteres beviteli-kiviteli egység, amely 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 hozzá. Az alkalmazások számára a terminál sor-orientá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. 4.15 Hálózati kapcsolatok kezelése A hálózati kapcsolatok kezelésére jellegzetes megoldás a logikai csatlakozók, ún. foglalatok (socket) fogalmának bevezetése (ld UNIX, Windows XP). 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 visszaadja 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, pipeline, stream stb.) 4.2 A kernel I/O alrendszere A kernel I/O alrendszerének jellegzetes feladatai: • • • • perifériák
ütemezése, átmeneti és gyorsmemória működtetés, perifériahasználat koordinálása, hibakezelés. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 137 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 138 ► A perifériák ütemezése annak a végrehajtási sorrendnek a maghatározását jelenti, amelyet a perifériára várakozó átviteli kérelmek végrehajtására alkalmaz a rendszer. Az érkezési sorrendtől való eltérés bizonyos esetekben jelentősen javíthatja a perifériahasználat hatékonyságát. Erre egy példát a következőkben a diszkműveletek ütemezésének bemutatásakor látunk. Átmeneti tárolást (pufferelést) alkalmaz a kernel, ha • két eltérő sebességű adatfolyamot kell összekapcsolni (gyakran kettős puffert alkalmazva), • a periféria számára blokkosítás szükséges és az alkalmazás nem blokkokkal dolgozik, vagy más
blokkméretet használ, • az adatküldő művelet szemantikája csak átmeneti tárolással biztosítható (a művelet visszatérése után az elküldött példány módosítható legyen). Háttértárak esetén gyorsmemória alkalmazása is jelentősen növelheti a hatékonyságot, ha ismétlődő írások/olvasások jellemzik a perifériahasználatot. (Az átmeneti tároló és a gyorsmemória közötti lényeges különbség, hogy a puffer az egyetlen létező kópiát tárolja az adatról, a gyorsmemória pedig a háttértáron lévő adat egy másolatát.) A perifériahasználat koordinálása tekintetében az egyszerű I/O-műveletek sorba állítása csupán ezeknek a műveleteknek az oszthatatlanságát garantálja. Külön megoldást kell találni azoknak a perifériáknak a kezelésére, amelyek hosszabb távú oszthatatlan műveletekkel kezelhetők hatékonyan Ilyen például a nyomtató vagy a mágnesszalag, amelyekre az alkalmazások az összetartozó adatokat
általában nem tudják egyetlen I/O-művelettel elküldeni A probléma egyik megoldása, hogy ezekhez a perifériákhoz egy speciális puffert – spoolt – rendelnek (ehhez ld. még az 121 pontot) Egy folyamat által a perifériára küldött adatokat először egy spool-fájlban gyűjtik öszsze A kész fájlokat aztán egyenként másolják ki a perifériára Így a fájlon belüli sorrendek megőrződnek. Más rendszerek a kizárólagos perifériahasználat kérésére biztosítanak eszközöket (lefoglalás, felszabadítás). Az I/O-műveletek közben előforduló hibákat a kezelőprogramok, vagy az operációs rendszer észleli. Mindkét észlelési szinten megkísérelhető az átmenetinek (tranziensnek) vélt hibák kiküszöbölése, a művelet, vagy részművelet ismétlésével. Más hibatípusok esetén az operációs rendszernek nincs javítási lehetősége A hibát ilyenkor jelezni kell a magasabb szintek (a hívó) felé A hibajelzés, azaz a művelet
sikertelenségének, vagy sike- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 138 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 139 ► rének visszajelzésére a könnyű kiértékelhetőség érdekében általában egy bit szolgál. Hibajelzés esetén ezen kívül további kísérő információk segítik a hiba okának behatárolását. A hibakezelés beépített folyamatában gyakran szerepel a kezelő értesítése is. Az operációs rendszer ezt csak alkalmazásfüggetlen, általános kijelzésekkel tudja megtenni, ilyen információ megjelenése egy alkalmazás kezelőábráján rendkívül zavaró lehet A beépített hibajelzéseket ezért a rendszer saját kezelőszervére célszerű irányítani, a hibát pedig jelezni kell az alkalmazás felé is, hogy az a vele összhangban levő reakciót tudja érvényesíteni. 4.3 I/O kiszolgálás multiprogramozott
rendszerben Az előző fejezetekben láthattuk, hogy az operácios rendszer belsejében hogyan kezeli az I/O egységeket. A perifériakezelés részletei a folyamatok számára láthatatlan, ők az korábban említett egységes felületen rendszerhívásokon keresztül érik el az I/O egységeket. Az I/O kérések kiszolgálása a számítógép belső műveleteivel összehasonlítva hosszú időbe telik, így az operációs rendszer beavatkozása nélkül, a számítógép hosszú ideig tétlenül várakozna egy-egy kérés kiszolgálásakor. Multiprogramozott rendszerekben ennek a problémának a megoldását a folyamatok átütemezése jelenti. A következőkben ennek mechanizmusát láthatjuk egy konkrét példán keresztül A 4.3 ábrán egy I/O kérés kiszolgálásának folyamatát, a rendszerben bekövetkező eseményeket követhetjük nyomon. Az ábrán az események balról jobbra haladva követik egymást. Láthatjuk, hogy a két felhasználói folyamat (A és B) valamint az
operációs rendszer, ill. maga az I/O folyamat milyen sorrendben hajtódnak végre Az ábra bal oldalán azt látjuk, hogy az A folyamat aktív, vagyis birtokolja a CPU-t. Eközben a B folyamat futásra kész állapotban várakozik Ezek után az A folyamat megkezdi az I/O művelet végrehajtását a megfelelő rendszerhívás meghívásával. Legyen ez esetünkben egy adott lemezterület olvasása A rendszerhívás aktivizálja operációs rendszer megfelelő komponenseit, melyek a periféria vezérlőnek továbbítják a rendszerhívásnak megfelelő információkat, és megindítják az I/O folyamatot (I/O start). Ezután az operációs rendszer az A folyamatot várakozó állapotba teszi, és beállítja a folyamathoz tartozó leíró mezőbe, hogy pontosan milyen eseményre (esetünkben a megkezdett lemezolvasására) várakozik. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 139 ► Operációs rendszerek Bemeneti-kimeneti (I/O) rendszer A dokumentum
használata | Tartalomjegyzék | Irodalom I/O start I/O folyamat Vissza ◄ 140 ► I/O start I/O vége IT kiszolgálás Operációs rendszer rendszerhívás Futásra kész, CPU-ra vár IT I/O-ra vár A folyamat B folyamat Futásra kész, CPU-ra vár Megszakítva I/O-ra vár 4.3 ábra I/O kérés kiszolgálása multiprogramozott környezetben A B folyamat mindaddig birtokolja a CPU-t, amíg azt az operációs rendszer CPU ütemezője el nem veszi tőle, vagy le nem mond a futás jogáról. A következő esemény akkor következik be, amikor a korábban megkezdett lemezolvasási folyamat befejeződik (I/O vége). Ekkor a periféria vezérlő megszakítás formájában jelzi ezt az operációs rendszernek melyet az – a megfelelő feltétételek teljesülése esetén – elfogad. A megszakítás kezelő rutin futása alatt a B folyamat futása átmenetileg fel lesz függesztve, azonban az továbbra is birtokolni fogja a futás jogát. A megszakítás-kezelő rutin
feladata egyrészt a perifériavezérlő egységből a megfelelő (az A folyamat által elérhető) memóriaterületre mozgatni a kért lemezterület adatait, másrészt az A folyamatot – a korábban tett bejegyzés alapján – áttenni futásra kész állapotba. Az A folyamat mindaddig ebben az állapotban marad, amíg az operációs rendszer CPU ütemezőjétől meg nem kapja a futás jogát. Az ábra azt az esetet mutatja, amikor a B folyamat – hasonlóan az A folyamathoz – egy rendszerhívást hajt végre, mely hatására a B folyamat lemond a futás jogáról és várakozó állapotba megy át. Az ütemező ekkor az eddig várakozó A folyamatnak adja át a vezérlést, amely elkezd futni. Ezt láthatjuk az ábra jobb oldalán. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 140 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 141 ► 4.4 Háttértár-kezelés A
számítógépes rendszerekben azért alkalmaznak háttértárat, mert: • a központi tár fajlagos, egy bitre jutó ára magas, ezért kapacitása viszonylag kicsi; • a központi tárban az információk a tápfeszültség kikapcsolásával elvesznek; • minél nagyobb a tárolási kapacitás, gyakorlati okokból annál nagyobb kell hogy legyen az egyedileg megcímezhető információ-egység mérete. A hardver fejlődésével a következő típusú háttértárak jelentek meg: • • • • mágnesszalag; mágnesdob; mágneslemez; optikai, ill. mágneses-optikai adatrögzítés: lemez szervezésű; csak olvasható (pl CD-ROM), egyszer írható (WORM: Write Once – Read Many Times, egyszer írható, sokszor olvasható), illetve írható-olvasható lemezek. (A mágneses-optikai (MO) háttértárolók alkalmasak igen nagy tömegű adat megbízható, hosszú távú – több évtizedes – tárolására, ezért erősen terjed az archiválási célokra történő
felhasználásuk. A CD-nél jóval megbízhatóbbak, írható-olvasható változatuk is létezik.) • egyéb (kísérleti jellegű) megoldások: – mágnesbuborék tár; – félvezető tárak, (EPROM, memória kártya); – holografikus tárolás. A jelenlegi rendszerek legelterjedtebb háttértára a mágneslemezes tár (magnetic disk). A továbbiakban ezen tárak szervezési kérdéseivel foglalkozunk 4.41 A lemezegység fizikai szervezése A mágneslemezes egység működésének lényege, hogy a tárcsaszerű, forgó mágneses hordozó felett – oldalanként egy – író-olvasó fej mozog, a fejek mozgatását közös mechanika végzi. Általában a lemezek mindkét oldalát használják, a lemez felett és alatt is található fej (4.4 ábra) A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 141 ► Operációs rendszerek Bemeneti-kimeneti (I/O) rendszer A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 142 ► 4.4 ábra
Lemezegység felépítése • Sáv (track) egy-egy lemezfelület azon területe, amelyet a fej elmozdulás nélkül, a lemez egyetlen körülfordulása alatt elér. • Cilindernek (cylinder) nevezik az összes fej alatti sávokat. • Egy-egy sávot – általában sávonként azonos méretű, gyakorta az öszszes sávon azonos számú, azonos szögtartományt elfoglaló – szektorra (sector) osztják. Az információtárolás a szektoron belül bitsoros A szektor az információátvitel legkisebb egysége, a lemezvezérlő egyszerre egy teljes szektort olvas vagy ír. A modern lemezeken a szektorok elhelyezkedését a vezérlő a sávra felírt speciális mágneses jelekből ismeri fel. A mágneslemez egységek lemezei lehetnek fixek (pl. Winchester-lemez), de cserélhető lemezek (pl. hajlékony lemez, floppy disk) is használatosak A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 142 ► Operációs rendszerek Bemeneti-kimeneti (I/O) rendszer A
dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 143 ► Az átvitel kiszolgálásának ideje a következő összetevőkre osztható: • a fejmozgási idő (seek time) az az idő, amíg a fej a kívánt sávra áll; • az elfordulási idő (latency time) az az idő, amíg a kívánt szektor a fej alá fordul, • az információ átvitelének ideje (transfer time). A felsorolt idők között nagyságrendi különbségek vannak, a fejmozgási idő a leghosszabb. Szektorok címzése A lemez szektorait az operációs rendszer lineárisan címzi, a lemezillesztő viszont többkomponensű – többdimenziós – címet igényel. A kettő között az összefüggés: b = s * (i t + j) + k, ahol s a sávon lévő szektorok száma, t a cilindereken lévő sávok száma, i a kijelölt cilinder, j a fej (lemez felület) száma, k pedig a sávon belüli szektorok száma (i, j és k értékei 0-tól indulnak). A b eredmény a szektor lineáris, 0-tól induló sorszáma. 4.42
A lemezműveletek ütemezése A multiprogramozott rendszerekben egyszerre több folyamat verseng a mágneslemezes perifériákért, egy átvitel lezajlása után több újabb kérés várakozhat kiszolgálásra. Az ütemezési algoritmusok a kérések megfelelő sorrendbe állításával az egyes folyamatok rovására próbálják a rendszer teljesítményét növelni, mégpedig a várakozási idők csökkentésével. Az algoritmusok célja a fejmozgás optimalizálása, vagy az elfordulási várakozás csökkentése. Az algoritmusok értékelésének szempontjai: • átbocsátó képesség, időegység alatt lebonyolított átvitelek száma; • átlagos válaszidő, egy átvitel kérésétől a végrehajtásáig eltelt átlagidő; • válaszidő szórása; elsősorban interaktív rendszerekben fontos szempont, hogy a folyamatok előre látható sebességgel fussanak, a futásuk ne ingadozzék nagyon, rajtuk kívül álló okok miatt. Az algoritmusok értékelésénél az átviteli
kérések címének egyenletes eloszlását tételezzük fel. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 143 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 144 ► A fejmozgás optimalizálása Sok algoritmus képzelhető el, az itt következő felsorolás csak néhány ismertebb alaptípust vizsgál. • Sorrendi kiszolgálás (First Come First Served, FCFS): Az átviteli kéréseket érkezésük sorrendjében szolgáljuk ki. Az algoritmus nem törődik a fej mozgásával, kicsi az átbocsátó képessége, nagy az átlagos válaszideje, de ennek szórása viszonylag kicsi. • Legrövidebb fejmozgási idő (Shortest Seek Time First, SSTF): Az algoritmus következőnek azt a kérést szolgálja ki, amelyik az aktuálishoz legközelebb lévő cilinderre hivatkozik – ennek az eléréséhez szükséges a legkisebb fejmozgási idő. Bár teljesítménye az FCFS-nél jobb,
de a válaszidők szórása nagy, sőt fennáll a kiéheztetés veszélye: egy távoli cilinderre vonatkozó kérést az újra és újra érkező közeli kérések nem meghatározható ideig késleltethetik. • Pásztázó (SCAN): Az algoritmus a következő kérés kiválasztásánál csak azokat a kéréseket veszi figyelembe, amelyekhez szükséges fejmozgás az aktuális mozgási iránynak megfelelő. A mozgási irány akkor fordul meg, ha az aktuális irányban már nincs több kiszolgálatlan kérés. Az algoritmus teljesítménye jobb, mint az SSTF-é, a válaszidő szórása is kisebb A pásztázásból következő sajátossága az, hogy a középső cilindereket gyakrabban keresi fel, mint a szélsőket • N-lépéses pásztázó (N-SCAN): Egy irányba mozogva csak azokat a kéréseket – közülük is csak N-et – szolgálja ki, amelyek a pásztázás elején már megvoltak. A pásztázás közben érkező kérések kiszolgálására csak a következő irányváltás
után kerül sor. Az algoritmus válaszidejének szórása kisebb a SCAN-nél is A válaszidő akkor sem nő meg, ha az aktuális cilinderre sok kérés érkezik. • Egyirányú (körforgó) pásztázó (Circular SCAN, C-SCAN): A kérések kiszolgálása mindig csak az egyik irányú fejmozgásnál történik, a másik irányban a fej közvetlenül a legtávolabbi kérés cilinderére ugrik. Implementálható a pásztázás közben beérkezett kérések mind menet közbeni, mind pedig a következő pásztázásra halasztott kiszolgálásával. Az algoritmus elkerüli a külső sávoknak a belsőkhöz viszonyított alacsonyabb fokú kiszolgálását. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 144 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 145 ► Egyes operációs rendszerekben a lemez terhelésének függvényében különböző módszereket alkalmaznak. Például:
• alacsony terhelésnél SCAN, • közepes terhelésnél C-SCAN, • nagy terhelésnél az elfordulási idő optimalizálásával bővített C-SCAN. Az elfordulási idő optimalizálása Az egy cilinderen belüli kérések a lemezek aktuális pozíciójának, valamint a szektorok sorrendjének – ami nem mindig monoton növekvő (szektor- közbeékelődés, sector interleave) – ismeretében kiszolgálás előtt sorba állíthatók. Egyéb szervezési elvek a teljesítmény növelésére • Lemezterület tömörítése (disk compaction): Itt az a törekvés nyilvánul meg, hogy az egymáshoz tartozó blokkok lefoglaláskor fizikailag is egymás mellé legyenek elhelyezve a lemezen. Ezt az állapotot egy időnként futtatott rendezőprogrammal is megkísérlik elérni. A lemezműveleteknél is megfigyelhető lokalitás következményeként egy folyamat várhatóan az egymáshoz közeli – egymást követő – blokkokat fogja olvasni, így a fejmozgás minimális lesz. A
tömörítés nem mindig vezet teljesítményjavuláshoz, hiszen egy multiprogramozott rendszerben egy időben sok folyamat használja a lemezt. • A gyakran szükséges adatokat SCAN típusú ütemezésnél érdemes a lemez középső sávjain elhelyezni. • A gyakran szükséges adatokat a lemezen több példányban, különböző sávokon helyezzük el, így minden fejállásnál kiválaszthatunk egy viszonylag közel lévő cilindert, ahol a kívánt adat megtalálható. A módszer elsősorban nem – vagy csak nagyon ritkán – változó adatoknál használható, hiszen a módosítások minden másolatba való bevezetése hosszú időt jelentene, másrészt módosítás közben az adatok konzisztenciájának biztosítása kölcsönös kizárási problémák kezelését követeli meg. • Több blokk egyidejű átvitele: Mivel a kérések kiszolgálásának jelentős része a fejmozgásból eredő várakozással telik el, ha már a megfelelő pozíción vagyunk, igyekezzünk
minél több blokkot egyszerre átvinni, és azokat a memóriában tárolni. • Blokkok átmeneti tárolása: A gyakran vagy a közeljövőben várhatóan szükséges blokkokat igyekezzünk a központi, esetleg a perifériaillesztőben lévő tárban tartani (disk cache). A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 145 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Bemeneti-kimeneti (I/O) rendszer Vissza ◄ 146 ► Az átmeneti tárolás közben foglalkozni kell a megváltozott tartalmú szektorokkal: – a tárban való változással egyidejűleg a lemezre is kiírjuk tartalmukat (write through cache), vagy – csak akkor írjuk ki tartalmukat, ha a tárra szükség lesz. Ez utóbbi a nagyobb teljesítményű módszer, hiszen egy gyakran változó szektor a kiírás előtt újra megváltozhat, viszont kevésbé biztonságos, hiszen a rendszer meghibásodása esetén a szükséges módosítások nem kerülnek ki a
lemezre. • Adattömörítési (data compression) eljárások használata: A lemezen az információt tömörített (compressed) formában tároljuk. Normál alakra történő visszaállítása – a programozó számára láthatatlanul – csak a beolvasáskor történik meg, ezáltal csökkenthető a szükséges perifériás átvitelek száma. A tömörítést és visszaállítást a perifériakezelő program vagy egy célhardver végezheti. 4.43 Az adattárolás megbízhatósága Adatok mentése (backup) A lemez teljes vagy az előző mentés óta megváltozott tartalmát (incremental backup) időnként más – általában mágnesszalagos, újabban optikai lemezes – háttértárra kell kimásolni, ahonnan a lemez sérülése, a tárolt adatok véletlen törlése esetén az egész, illetve a szükséges részek visszaállíthatók. Átmeneti tár és a háttértár tartalmának szinkronizálása Az átmeneti tárban lévő „fontosabb” változásokat, esetleg időnként az
összes változást a lemezre kell írni (pl. a sync parancs a UNIX-ban) Lemezegységek többszörözése • Kétszerezés (disk shadowing, mirroring – árnyékképzés, tükrözés): Az írásokat egyszerre mindkét lemezen elvégezzük, így a két lemez pontosan azonos információt tárol, az egyik kiesése esetén a másik még felhasználható. • Többszörözés: Egy nagy kapacitású lemezegység helyett több kisebbet használnak, amelyekre az információt hibajavító kódolással – legegyszerűbb esetben paritásbittel – megtoldva szétterítik. Ezáltal az egység(ek) kiesése esetén a tárolt információ még visszaállítható (Redundant Array of Inexpensive Disks, RAID) A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 146 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 147 ► 5. Elosztott rendszerek 5.1 Elosztott rendszerek definíciója Elosztott rendszernek
nevezzük azt a kommunikációs csatornán keresztül összekötött, autonóm műveletvégző egységekből álló számítógépes rendszert, amely a komponensek összehangolásával képes informatikai feladatok közös megoldására. Egy elosztott rendszer olyan processzorokat foglal magában, amelyeknek nincs közös memóriájuk és órajelük. Az ilyen rendszerekben a felhasználók között megosztott erőforrások növelik a feldolgozási hatékonyságot, és egyben a megbízhatóságot is A több processzort tartalmazó számítógépes rendszereknek két típusa van, melyek között a processzorok együttműködésének természete alapján teszünk különbséget: • szorosan csatolt (vagy multiprocesszoros) rendszerek, illetve • lazán csatolt rendszerek. A szorosan csatolt rendszerek jellemzője a processzorok által közösen használt órajel és a részben vagy egészben osztottan használt memória. A processzorok közötti információcsere általában az
osztottan használt memórián keresztül történik. Ide tartoznak pl a párhuzamos számítógéprendszerek is Lazán csatolt rendszerekben ezzel szemben a processzoroknak független környezetük van, nincs a rendszerben közös órajel és nincsen osztottan, közösen használt memória sem. A processzorok közötti kommunikáció fizikai hálózaton keresztül történik A szorosan, illetve lazán csatolt rendszerek között azért fontos különbséget tenni, mert a bennük előforduló problémák lényegesen különböznek egymástól. A szakirodalom az elosztott rendszer kifejezést kizárólag a lazán csatolt rendszerekre alkalmazza. Ezzel összhangban – bár a műveletvégzés mindkét típusú rendszerben osztottan történhet – a továbbiakban elosztott rendszer alatt mi is lazán csatolt rendszer fogunk érteni. Az elosztott számítógéprendszerek alkalmazási területe igen széles: irodai alkalmazásoktól kezdve, multimédia hálózatokon keresztül a banki
alkalmazásokig terjedően, az élet szinte minden területén megtaláljuk őket. Alkalmazási területükhöz hasonlóan, az elosztott rendszerek mérete is igen széles skálán mozoghat. Az ilyen rendszerek körébe tartoznak a néhány munkaállomásból álló általános célú lokális hálózatok, ugyanakkor az A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 147 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 148 ► Internet is, amely lokális és távoli hálózatok összekapcsolásával a számítógépek milliói között teremt összeköttetést. Az elosztott rendszerek fontos elemei azok a szoftver komponensek, melyek az elosztott hardver elemeket egységes rendszerré fogják össze, és képessé teszik a feladatok hatékony és közös megoldására. Ezt az integráló feladatot általában az elosztott hardveren futó operációs rendszer valósítja meg. Az elosztott
hardver kezelése olyan többletfeladatokat ró az operációs rendszerre, mint pl. az erőforrás-megosztás, vagy távoli gépek közötti kommunikáció, melyek integrált rendszerek esetén nem merülnek fel. A következő alpontokban megismerkedünk az elosztott rendszerek elméletével, és megvizsgáljuk, hogy az elosztott hardver kezelése milyen nehézségeket jelent az operációs rendszer számára. 5.2 Elosztott rendszerek típusai Az elosztott rendszereket a csomópontokat összekötő hálózat mérete alapján osztályozzuk. Két hálózati típust különböztetünk meg: • távoli csomópontok közötti, nagy területű hálózat (wide-area network – WAN), • lokális (helyi) hálózat (local-area network – LAN). A távoli csomópontok közötti hálózatok a hatvanas évek végén jelentek meg távoli (egymástól több száz vagy több ezer kilométerre levő) számítógépek közötti kommunikáció lehetőségének megteremtésére. Az ilyen hálózatok
esetén a számítógépek nem közvetlenül, hanem általában valamilyen további kommunikációs processzorokból (KP) álló távközlő hálózat közbeiktatásával vannak összekötve (5.1 ábra) Az összeköttetés sebessége kisebb, mint LAN-ok esetén, általában 1Mbit/sec alatti Két csomópont között az adatátvitel nem megbízható, előfordulhat adatátvitel során üzenetvesztés, ill. az üzenetek sérülése A lokális hálózat fogalma kisméretű hálózatot takar. Egyazon épületen, esetleg néhány szomszédos épületen belüli számítógépek tartozhatnak egy lokális hálózatba. Az ilyen hálózatok a hetvenes évek elejétől kezdve terjedtek el, felismerve annak lehetőségét, hogy alkalmazásukkal megnövelhető a drága perifériák kihasználtsága, és csökkenthető a rendszerfejlesztés költsége. Általános jellemzői a lokális hálózatoknak a viszonylag megbízható összeköttetések és a nagy (10 Mbit/sec és 1 Gbit/sec közötti)
átviteli sebesség. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 148 ► Operációs rendszerek Elosztott rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Vissza Hálózati állomás Hálózati állomás ◄ 149 ► Hálózati állomás KP KP KP KP KP KP Kommunikációs hálózat KP Hálózati állomás 5.1 ábra Távoli csomópontok közötti hálózat (wide-area network – WAN) Egy lokális hálózatban általában különböző típusú csomópontok (egymástól eltérő típusú számítógépek, perifériák, esetleg hálózati eszközök) vannak összekötve, melyek közvetlenül csatlakoznak az átviteli csatornára. Gyakran kapcsolnak össze szomszédos LAN-okat. Erre a célra speciális hálózati csomópontot (ún. gateway-t) használnak (52 ábra) Munkaállomás PC PC Nyomtató Gateway PC Fájl szerver PC CD olvasó 5.2 ábra Lokális hálózat (local area network – LAN) A két eltérő hálózati
típus között – a hálózatok fizikai paramétereiben lévő eltérések miatt – technikai szempontból is számos különbség van. Különbözik az egyes osztályokba tartozó hálózatok topológiája (csomópontok összeköttetéseinek struktúrája), de a legfontosabb különbség a használt kommunikációs protokollban van. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 149 ► Operációs rendszerek Elosztott rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 150 ► A protokoll a csomópontok egymással történő kommunikációjának egyezményes szabályrendszerét jelenti. Ebben többek között rögzítik, milyen címzést használnak a csomópontok egymás azonosítására, milyen formában küldik az adatokat, milyen redundáns információval egészítik ki a továbbítandó adatokat az esetleges hibák detektálása vagy javítása érdekében. Az is a protokollban van rögzítve, hogy milyen módszert
használnak a csomópontok az átviteli közeg elérésére, és milyen jelszintek milyen logikai értéknek felelnek meg. Más-más protokollok működnek hatékonyan nagy sávszélességű és megbízható átviteli közegben, mint lassú és megbízhatatlan adatátvitel esetén. A teljesség igénye nélkül a következőkben két példát ismertetünk a különböző típusú hálózatokban használt protokollok köréből. Ezek egyben a legelterjedtebb hálózati protokollok LAN-ok esetén a leggyakrabban használt átviteli protokoll az Ethernet, amit a Xerox cég (USA) fejlesztett ki 1973-ban, majd 1985-ben IEEE szabvánnyá vált (IEEE/ISO Standard 802.3) Az Ethernet alacsony szintű protokoll, az adatkapcsolat és a fizikai közeg elérésének módját szabályozza. Az Ethernet esetén a csomópontok ún busz struktúrába vannak szervezve: közvetlenül csatlakoznak egy minden csomópont által elérhető összeköttetéshez (5.3 ábra) PC Munkaállomás Lezárások
Munkaállomás PC PC Hálózati csatolók 5.3 ábra Ethernet hálózat Az átviteli közeg elérési protokollja az ún. CSMA/CD (Carrier Sensing, Multiple Access with Collision Detection: átvitelérzékelés többszörös eléréssel és ütközés-detektálással). A módszer lényege az, hogy minden csomópont folyamatosan figyeli a hálózati forgalmat. Ha egy csomópont küldeni kíván egy üzenetet, ezt adatcsomagok (az Ethernet specifikációjában ezt framenek nevezik) adatbuszra történő küldésével teheti meg. A csomagok hoszsza a szabványban rögzített, 64 és 1518 byte között mozoghat A frame-ek tartalmazzák a küldő, ill. a címzett csomópont címét (54 ábra) A címek A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 150 ► Operációs rendszerek Elosztott rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 151 ► alapján a csomópontok szelektálnak az üzenetek között. A címzett csomópont
a számára érkezett üzenetet feldolgozza, míg a többit figyelmen kívül hagyja. Címzett címe (6 byte) Küldő címe (6 byte) Üzenet típusa (2 byte) Frame ellenőrző adat (4 byte) Küldött adat (46 -1500 byte) 5.4 ábra Egy Ethernet frame felépítése Az üzenet küldő csomópontok természetesen figyelik az adatbusz forgalmát: csak akkor kezdenek adni, amikor azon nincs adatforgalom. Ennek ellenére előfordulhat, hogy két csomópont párhuzamosan kezd adni. Ezt a szituációt ütközésnek (collision) nevezik. A csomópontok képesek detektálni az ütközéseket. Az aktív adó csomópont az adással párhuzamosan figyeli az adatbusz forgalmát. Ha az általa adott és az adatbuszon megjelenő jelek különböznek, azt jelzi, hogy nem csak ő aktív az adatbuszon, vagyis ütközés történt. Ilyenkor az ütközést detektáló csomópont egy ütközés jelet küld szét, hogy a csomópontok az utolsó frame-et hagyják figyelmen kívül, hiszen annak tartalma az
ütközés miatt nem érvényes. A küldeni kívánó csomópontok természetesen továbbra is szeretnék elküldeni az üzenetüket. A további ütközések elkerülése érdekében az érintett (aktív) csomópontok egy előre definiált véletlen ideig várnak az üzenetküldés ismétlése előtt. Mivel minden csomópontnál más és más ez a véletlen idő, a további ütközések elkerülhetők. Az Ethernet hálózatok legsérülékenyebb pontja az átviteli közeg, maga az összekötő kábel. Az alkalmazott adatbusz topológia előnye az, hogy párhuzamosan minden csomópont elérheti a csatornán küldött üzeneteket, viszont hátránya, hogy a csatorna sérülése esetén minden összeköttetés megszűnik a csomópontok között. Ez az oka annak, hogy az Ethernet hálózat csak LAN-ok esetén használható hatékonyan, ott viszont költségtakarékos, optimális megoldást nyújt a hálózatépítésre. A WAN-ok esetén példaként bemutatandó protokollok a TCP/IP
családba tartoznak. Ezek a protokollok nem a fizikai átviteli közeg elérését szabályozzák, mint az Ethernet, hanem a fizikai átvitel fölé épülnek. (Elképzelhető pl az is, hogy a TCP/IP protokoll egy Ethernet hálózatra épül.) Ezek a protokollok a csomópontok címzési módját, ill a hálózaton továbbított adatcsomagok méretét és formátumát rögzítik. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 151 ► Operációs rendszerek Elosztott rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 152 ► A család legalacsonyabb szintű protokollja az IP (Internet Protocol). Az IP protokoll nem biztosít megbízható átvitelt, az adatcsomagok késhetnek, sérülhetnek, duplikálódhatnak, elveszhetnek, de csak abban az esetben, ha az IP által használt hálózat hibázik. (Ez pontosan azt jelenti, hogy az IP használata nem jelent garanciát az ilyen hibák kiküszöbölésére.) Az IP adatcsomagok
formátuma viszonylag bonyolult, méretük maximum 64 kbyte lehet. Mindig egy ún fejrésszel (header) kezdődnek, ami tartalmazza a küldő és a címzett csomópont IP címét. Ez az egyetlen része az üzenetnek, mely redundáns, vagyis védett a sérülések ellen, megteremtve a lehetőségét annak, hogy az IP protokollt megvalósító szoftver felismerje az esetleges hibákat (5.5 ábra) Vezérlő információ Küldő IP címe Címzett IP címe Ellenőrző adat Adat Fejrész (header) 5.5 ábra Egy IP adatcsomag vázlatos felépítése Az IP protokollt megvalósító szoftver feladata ezek után az, hogy az IP címet a helyi hálózatban használatos címmé alakítsa, és az adatcsomagot továbbküldje, elvégezve a használt alacsonyabb szintű protokollnak megfelelő változtatásokat az adatrészben. Az IP protokoll nagyon népszerű a hálózati rendszerekben. Több megvalósítása létezik különböző, alacsony szintű hálózati protokollok fölé, így Ethernet
hálózat fölé is. Az IP protokollra számos más protokoll épül. A TCP (Transport Control Protocol) az IP protokollra épülve megbízható hálózati átvitelt garantál, míg az UDP (User Datagram Protocol) ugyancsak az IP-re épülve csak az üzenetek továbbítását biztosítja. Mindkét protokoll lehetőséget ad a csomópontokon futó folyamatok közvetlen elérésére (címzésére) az ún process port-okon keresztül. Mind a TCP mind az UDP közvetlenül is elérhető különböző alkalmazások számára. A TCP-t használó legismertebb szolgáltatások: fájlok átvitele távoli gépekre (file transfer – FTP), távoli gépekre történő belépés (telnet), továbbá elctronic mail (e-mail) szolgáltatás (SMTP). Az UDP-t használó szolgáltatások: távoli gépeken dolgozó felhasználók azonosítójának lekérdezése (rwho), fájlok hordozása (TFTP). A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 152 ► Operációs rendszerek A
dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 153 ► 5.3 Elosztott rendszerek tulajdonságai Az elosztott rendszerek gyors terjedésének egyik fő oka az, hogy lehetőséget biztosítanak olyan előnyös tulajdonságú számítástechnikai környezet létrehozására, amely az integrált rendszerekkel nehezen, vagy egyáltalán nem valósíthatók meg. Ezek a jellemzők a következők: • • • • • • erőforrás-megosztás (resource sharing), nyílt rendszer (open system), konkurens működés (concurrency), méretezhető rendszer (scalability), hibatűrés, megbízhatóság (fault tolerance, reliability), átlátszóság (transparency). Ki kell emelni, hogy ezeknek a tulajdonságoknak a kialakítására az elosztott struktúra ad lehetőséget. A felsorolt tulajdonságok azonban nem egyenes következményei az elosztott felépítésnek. A rendszer topológiáját és szoftver-komponenseit kell úgy megtervezni, hogy ezek a
tulajdonságok megvalósuljanak. 5.31 Erőforrás-megosztás Az erőforrás mint absztrakt fogalom azon eszközök gyűjtőneve, amelyeket a műveletvégző egység (processzor) működése során használ. Erőforrás lehet akár egy hardver elem, akár egy szoftver elem. Hardver erőforrás pl a háttértár (mágneslemez), vagy a nyomtató, szoftver erőforrás lehet pl. egy fájl vagy egy adatbázis. Az erőforrás-megosztás lehetőséget teremt a rendszer erőforrásainak különböző rendszerkomponensek által történő elérésére. A hardver elemek (pl printer, perifériák, háttértár) osztott elérésének előnye elsősorban a költségtakarékosságban rejlik. A szoftver erőforrások megosztása elsősorban a hatékonyság növelését szolgálják Példaként említhetjük a közös szoftveren dolgozó fejlesztőket, akik osztott elérésű fejlesztőeszközöket és adatállományt használva munkájuk hatékonyságát nagyban megnövelhetik, megtakarítva az
adatok állandó hordozását. Az egyik legfontosabb osztottan kezelt erőforrás a fájlrendszer, melynek osztott kezelésével a későbbiekben részletesen is megismerkedünk majd Fontos még megemlíteni, hogy nem minden erőforrást célszerű osztottan kezelni. Van az erőforrásoknak egy csoportja, amely szorosan egy processzorhoz tartozik, és elosztott (lazán csatolt) rendszerekben nem hatékony osztottan kezelni. Tipikusan ilyen erőforrás pl a memória A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 153 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 154 ► Osztott erőforrás elérés esetén – bár az egyes erőforrásokhoz a rendszer minden csomópontjából hozzáférhetünk – az egyes erőforrások fizikailag egy-egy csomóponthoz kötődnek. Általában ez a csomópont, ill ezen a csomóponton futó folyamat felelős az osztott elérés koordinálásáért. Az
erőforrások elérését biztosító szoftver modult általánosan erőforráskezelőnek, erőforrás-menedzsernek (resource manager) hívják Az erőforrás-kezelő általános feladatai a következők: • Erőforrások megnevezésének, ill. a nevek hálózatban történő értelmezésének biztosítása • Kommunikációs interfész biztosítása, amelynek segítségével távoli csomópontok is elérhetik az erőforrást. • Erőforrások párhuzamos elérésének szabályozása, és az erőforráshasználat konzisztenciájának megőrzése. Az erőforrás-menedzser a fenti általános feladatokon kívül, minden erőforrás-típus esetén ellát további, az erőforrás-elérés szabályai által definiált egyedi kezelési funkciókat. Példaként vegyünk a printer mint erőforrás esetét. A printerkezelő (printer manager) felelős a különböző típusú printerek neveinek regisztrálásáért. Szokásos elnevezés pl, hogy lp logikai néven a felhasználók a
sornyomtatót érhetik el egy rendszerben, míg az lpps néven a PostScript interfésszel ellátott printert. A printerkezelő számon tartja, hogy a nyomtatókat kezelő számítógép melyik portjára melyik printer van csatlakoztatva, és a különböző adatcsomagokat a megfelelő printerre továbbítja. Ha esetleg egy időben több kérés érkezik ugyanarra a printerre, az elérési szabályoktól függően vagy jelezi a foglaltságot a másodiknak érkező kérés küldőjének, vagy az adatcsomagot egy várakozási sorba teszi, melyből a printer az éppen folyó nyomtatás befejeztével azt majd feldolgozza Elosztott rendszerekben történő erőforrás-kezelés kapcsán meg kell említeni az erőforrás-kezelés megvalósítására leggyakrabban alkalmazott modellt, az ún. kliens-szerver modellt, mely az elosztott rendszerek tervezésében a legelterjedtebben alkalmazott struktúra a különböző szolgáltatások megvalósítására. A modell lényege, hogy a rendszerben
létezik egy ún szerver (szolgáltató), mely szolgáltatást nyújt a kliensek (ügyfelek) részére. A kliens úgy éri el az adott szolgáltatást, hogy valamilyen előre definiált protokoll szerint egy kérést küld a szervernek. A szerver a szolgáltatás megvalósulásakor egy válasz üzenetben értesíti a klienst a szolgáltatás megvalósu- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 154 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 155 ► lásáról, ill. az esetleges hibákról Természetesen mind a kérés, mind a válasz üzenetek formátuma előre definiálva van A szolgáltatás általában a rendszer valamilyen funkciójához kötődik, amint említettük, leggyakrabban valamilyen erőforrás kezeléséhez. Egyszerű példaként említhetjük a már ismert nyomtatást mint szolgáltatást, melyet megvalósíthatunk kliens-szerver modell alapján is Ebben az
esetben a printerkezelő funkcióját ellátó szerver egy a rendszer indulásakor indított folyamat, az ún. printer démon lesz, mely várakozik a kinyomtatandó adatokra Ha egy kliens nyomtatni szeretne, küld egy kérést a szervernek, mely – a protokolltól függően – tartalmazhatja a kinyomtatandó adatokat is. A szerver a kért nyomtató típusának megfelelően esetleg konvertálja az adatokat és kinyomtatja a nyomtatón. A nyomtatás végeztével a szerver küld egy nyugtázó üzenetet a kliens folyamatnak a nyomtatás befejeztéről. Kicsit eltérő példa az elosztott fájlrendszer példája, ahol a szolgáltatás távoli számítógépen tárolt fájlok elérése. Ebben az esetben a szerver a lokális gépen levő fájlrendszer elérését teszi lehetővé más gépeken futó folyamatok részére. A kliens program, ha egy távoli fájlt akar olvasni, egy üzenetet küld az adott szervernek, mely tartalmazza a fájlon végzendő művelet kódját (olvasás) és a
fájl nevét. A szerver válaszában a kért fájlt, ill. annak a kért részletét küldi vissza 5.32 Nyílt rendszer Egy rendszert akkor tekintünk nyíltnak, ha fennáll a lehetőség a rendszernek új hardver, ill. szoftver elemekkel, erőforrásokkal történő bővítésére Hardver-bővítés lehet pl. új perifériák vagy további memóriaelemek hozzáadása egy számítógéphez Szoftverbővítés lehet pl az operációs rendszer új funkcióval történő ellátása, vagy – hogy a szűken vett témánknál maradjunk – elosztott rendszerhez egy olyan erőforrás-kezelő program hozzáadása, amely biztosítja valamelyik erőforrás osztott elérését. Meg kell jegyeznünk, hogy elosztott rendszerek nyitottságát elsősorban azzal mérhetjük, hogy milyen nehézségekbe ütközik a rendszerbe új osztott erőforrás-elérési szolgáltatás bevezetése a meglévő szolgáltatások megváltoztatása, ill. tönkretétele nélkül A nyílt rendszerek létrehozásának
legfontosabb eszköze és egyben legfontosabb ismérve a rendszer komponensei közötti interfészek alapos specifikációja és a specifikált interfészek nyilvánossá tétele, publikálása. Tradicionálisan a számítógépes rendszerek általában nem nyitottak. Az első rendszer, mely a nyílt rendszerarchitektúrát támogatta a UNIX operá- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 155 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 156 ► ciós rendszer volt: A UNIX alatt futó alkalmazások a rendszer erőforrásait jól definiált rendszerhívásokon keresztül érhetik el. Az operációs rendszer forráskódja publikus, magas szintű programnyelven, C-ben íródott, így könnyen bővíthetjük a rendszert olyan rendszerhívásokkal, melyek akár új hardver elemeket (pl. új perifériákat) kezelnek, vagy új szolgáltatásokat valósítanak meg. A UNIX rendszer
koncepciója és a rendszer fejlődése nagy hatással volt a nyílt rendszerek elméletére. Az 1980-as évek elején a University of California, Berkeley által fejlesztett UNIX rendszerben, az ún. BSD UNIX-ban, a folyamatok egymás közötti információcseréjének (interprocess communication) lebonyolítására egy egységes módszert vezettek be, amely megoldást más rendszereknél is követtek. A módszer előnye, hogy a kommunikáció menete független a folyamatok fizikai elhelyezkedésétől: hasonlóan zajlik, ha a folyamatok azonos számítógépen futnak, mint ha távoli gépeken futnának. A kommunikáció ilyen módon történő megvalósítása lehetővé tette a rendszer erőforrásainak egyszerűen megvalósítható osztott kezelését a kliens-szerver modell alapján. További részletezés nélkül, a nyílt elosztott rendszerek ismérveit a következőkben foglalhatjuk össze: • Egységes, a folyamatok elhelyezkedésétől független folyamatok közötti
kommunikációs mechanizmus használata, valamint publikus interfész definiálása az osztott elérésű erőforrások kezelésére. • Heterogén rendszer építési lehetőségének biztosítása, akár különböző gyártóktól származó komponensekből is. Az elemek egymás közötti kapcsolata jól definiált interfészeken keresztül történik, mely interfész követelményeit minden elemnek teljesíteni kell. 5.33 Konkurens működés A konkurens működés lehetővé teszi folyamatok párhuzamos futását a rendszerben. Elosztott rendszerről lévén szó N processzor esetén N darab folyamat futhat a rendszerben párhuzamosan. Ha egy adott feladatot lehetséges egynél több, legalább részben független részfeladatra bontani, az elosztott rendszerben lehetőség van a részfeladatok párhuzamos végrehajtására, ami a feladat megoldását jelentősen meggyorsíthatja. Konkurens működés esetén szükség van a folyamatok időbeni végrehajtásának
szabályozására, vagyis szinkronizációra. Ez elsősorban akkor fontos, ha a folyamatok közös erőforrást használnak, vagy kommunikálnak egymással. A szinkronizációt elosztott rendszerekben nagy körültekin- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 156 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 157 ► téssel kell megoldani, mert a konkurens végrehajtás előnyei könnyen elveszhetnek rosszul szervezett szinkronizáció esetén. Osztott erőforrás kezelése esetén ki kell emelni, hogy konkurens végrehajtás vonatkozhat mind a kliens mind a szerver folyamatra. Tehát létezhet nemcsak több párhuzamosan futó kliens, de több párhuzamosan futó szerver folyamat is a rendszerben, melyek hasonló szolgáltatást vesznek igénybe, ill. nyújtanak A párhuzamosan futó szerver folyamatok egy időben képesek kielégíteni párhuzamosan futó kliens folyamatok
kéréseit. Abban az esetben, ha a szolgáltatás valamilyen egyedi erőforráshoz kötődik, a szerver folyamatoknak természetesen szinkronizálódniuk kell egymáshoz. 5.34 Méretezhető rendszer A rendszerek méretezhetőségének igénye a rendszerek fejlesztése során kap nagy jelentőséget. Nyilvánvalóvá vált, hogy a számítógépes rendszereknek használatuk során egyre magasabb felhasználói igényeknek kell eleget tenniük, ami előbb-utóbb kapacitásbővítést tesz szükségessé. A rendszer méretezhetősége azt jelenti, hogy a rendszer kapacitása és mérete megnövelhető anélkül, hogy a rendszer működő részében lényeges változtatást kellene létrehoznunk A méretezhetőség biztosítása komoly feladatot jelent mind a rendszerek hardver-, mind pedig szoftvertervezése során. A rendszernek képesnek kell lennie új hardver komponensek integrálására, ill. új szoftver egységek kezelésére. Vegyünk néhány példát: Aktuális példa a
méretezhetőség hiányára a mobiltelefon rendszerekben használt hívószámok használata. A telefonszámok eredetileg hatjegyűek voltak, azonban a mobiltelefonok száma olyan gyorsan növekedett, hogy már nem elegendő a rendelkezésre álló egymillió telefonszám. Ha a mobiltelefon rendszereket egy elosztott rendszernek tekintjük, akkor azt mondhatjuk, hogy kimerült a csomópontok címzésre használt címtartomány A meglévő rendszert át kell állítani hétjegyű telefonszámok kezelésére, vagyis a meglévő csomópontok címét meg kell változtatni, ami lényeges változtatás az eredeti rendszerben. A példából láthatjuk, hogy a tervezés során igen körültekintően kell eljárni, mert egy-egy tervezési döntés szigorú korlátokat jelenthet a rendszer működésében. Természetesen nehéz az ilyen jellegű feladatokat megnyugtatóan megoldani, hiszen tartalékok tervezése a rendszerbe – esetünkben pl. eleve is hétjegyű vagy esetleg nyolcjegyű
telefonszámok használata – redundáns működést eredményezhet Az ilyen jellegű döntéseknél csak szigorú költségelemzés adhat támpontot. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 157 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 158 ► Példa lehet a méretezhetőre történő tervezésre az osztott elérésű erőforrások, pl. fájlszerverek tervezése Ha a fájlszerverek tervezésekor a skálázhatóságot figyelembe akarjuk venni, fel kell készíteni a megvalósító szoftvert több párhuzamosan futó szerver kezelésére, hiszen ha egy fájlrendszer által kiszolgált kérések számát növelni szeretnénk, egy bizonyos határon túl ezt csak új, párhuzamosan futó fájlszerverek installálásával tehetjük meg. Ez olyan nehézségeket vet fel, mint pl egyazon fájl párhuzamos elérésekor a konzisztencia biztosítása, ami pl párhuzamos írási és
olvasási műveletek esetén igen bonyolult eljárást eredményezhet. 5.35 Hibatűrés, megbízhatóság Egy számítógépes rendszert akkor nevezünk hibatűrőnek, ha képes a benne előforduló hibákat felismerni és kezelni úgy, hogy előírt funkcionalitása ne, vagy csak korlátozott mértékben változzon. Egy rendszer hibatűrővé tételének legalapvetőbb eszköze a redundancia alkalmazása, mind hardverben, mind pedig szoftverben. Egyszerű példa egy homogén (azonos funkcionalitású és felépítésű csomópontokat tartalmazó) számítógép-hálózat esetén egy tartalék (ún. standby) számítógép használata. Ha a rendszer egyik csomópontja meghibásodik a standby számítógép veszi át a hibás számítógép funkcióit, míg a hibás csomópontot ki nem javítják. Hibatűrő rendszerekben gyakran használt struktúra a szavazó rendszer, ahol páratlan számú, de legalább három párhuzamosan működő komponens azonos bemeneteket feldolgozva
ugyanazt a feladatot oldja meg. (Az elvet Neumann János dolgozta ki 1956-ban) A rendszer végső kimenetét egy többségi szavazógép állítja elő. Ha legalább két komponens hibamentesen működik, a többségi elven működő szavazógép hibátlan kimeneti értékeket küld tovább. (Nem feltételezünk egy időben azonos hibát a komponensekben, így nem várjuk, hogy két azonosan hibás működés léphessen fel.) Az elosztott rendszerek a szavazó struktúra megvalósítására ideális lehetőséget kínálnak, hiszen az elosztott hardveren viszonylag egyszerű megvalósítani a komponensek párhuzamos futását A hibatűrés szoftver eszközökkel történő megvalósítására példa az ún. javító blokkok (recovery block) módszere. Ebben a megoldásban a teljes szoftver modulokra van bontva Egy-egy modult több, azonos funkciójú verzióban is elkészítenek Ezek a verziók alkotnak egy blokkot Mindegyik blokkhoz tartozik egy ún. elfogadási teszt, ami egy külön
program az esetleges hibás működés detektálására Ha egy modul hibásnak bizonyul a teszt A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 158 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 159 ► alapján, akkor a soron következő tartalékmodul futtatására kerül sor, a blokkon belül. Ha ez is hibás a teszt szerint, újabb modulra kerül sor stb, mindaddig, amíg csak van futtatható modul. A javítás elve akkor érvényesül egy blokkban, ha egy hibás modult egy jó modul futása követ Egy új blokk futtatása előtt mindig el kell menteni az addig előállt öszszes adatot egy független tárba. Ha hibát talál az ellenőrzés, az új modul futtatása ebből az elmentett állapotból kell hogy történjék. A javító blokkok elve elosztott rendszerekben úgy is megvalósítható, hogy a folyamat megkísérelheti a kérdéses modul más csomóponton történő
végrehajtását. 5.36 Átlátszóság Az átlátszóság annyit jelent, hogy a rendszer elfedi a felhasználó elöl, az egyes szolgáltatások, ill. erőforrások fizikai elhelyezkedését, azoknak a határvonala lesz átlátszó. Átlátszó rendszer esetén a szolgáltatások igénybevételekor, ill az erőforrások használatakor azok elérési módja független a szolgáltatás vagy erőforrás konkrét fizikai helyétől. Az elosztott rendszerek átlátszóságának több formáját különböztethetjük meg: • Hozzáférés átlátszósága: lokális és távoli adatobjektumok azonos eljárásokkal történő kezelése. • Elhelyezkedés átlátszósága: adatobjektumok kezelése anélkül, hogy elhelyezkedésüket ismernünk kellene. • Konkurens működés átlátszósága: párhuzamosan futó folyamatok osztottan használhatnak adatokat anélkül, hogy egymás futását befolyásolnák. • Duplikált objektumok átlátszósága: a megbízhatóság, ill. a
teljesítmény növelése érdekében az adatobjektumok megtöbbszörözhetők a rendszerben anélkül, hogy a felhasználók, ill. alkalmazások ezt észrevennék • Hibák átlátszósága: szoftver és hardver hibák kezelése úgy, hogy a felhasználók, ill. alkalmazások képesek legyenek befejezni tevékenységüket • Vándorlás átlátszósága: adatobjektumok hordozásának lehetősége anélkül, hogy a felhasználók, ill. programok ezt észrevennék • Teljesítmény átlátszósága: a terhelés változásával lehetőség van a rendszer átkonfigurálására. • Méretezés átlátszósága: a rendszer, ill. a benne futó alkalmazások mérete változhat anélkül, hogy a rendszer struktúráját vagy az alkalmazás által végrehajtott algoritmust meg kellene változtatni. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 159 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄
160 ► Jó példa az elhelyezkedés és a hozzáférés átlátszóságára néhány intézmény által használt e-mail cím. Például, a RangaVemuri@ucedu cím az e-maileket továbbító hálózat, ill az aktuális mail-szerver elhelyezkedésétől függetlenül mindig Ranga Vemuri professzor e-mail címe a University of Cincinnati-n, az Egyesült Államokban 5.4 Elosztott rendszerek operációs rendszerei Az elosztott rendszereken futó operációs rendszereket két fő osztályba sorolhatjuk: • hálózati operációs rendszer, • elosztott operációs rendszer. A hálózati operációs rendszerek nem biztosítják a csomópontok elhelyezkedésének és hozzáférésének átlátszóságát. Olyan környezetet nyújtanak a felhasználó számára, amelyben az tisztában van vele, hogy elosztott hardveren futó rendszert használ. Ugyanakkor viszont a hálózati operációs rendszerek lehetővé teszik a felhasználó számára a távoli csomópontok elérését: programok
futtatásának lehetőségét távoli csomópontokon, ill. adatok mozgatását a lokális és a távoli csomópontok között. Az elosztott operációs rendszerek az előzőekkel ellentétben biztosítják a csomópontok elhelyezkedésének és hozzáférésének átlátszóságát. Olyan környezetet nyújtanak a felhasználó számára, amelyben az a távoli erőforrásokat és szolgáltatásokat a lokális csomópontokon található szolgáltatásokkal és erőforrásokkal azonos módon érheti el. Az elosztott operációs rendszer felhasználója tehát nincs feltétlenül tudatában annak, hogy elosztott hardveren futó rendszert használ. Az elosztott hardverben rejlő lehetőségek új igényeket és követelményeket teremtettek az operációs rendszerekkel szemben. A hálózati operációs rendszerek a konvencionális egygépes rendszerekből fejlődtek ki Az elosztott operációs rendszerek esetében viszont az a merőben új törekvés érvényesül, hogy a számítógépek
határvonalai átjárhatóak, átlátszóak legyenek a felhasználók számára. Hálózati operációs rendszerek Egy hálózati operációs rendszer általában olyan egygépes rendszer, amelyet hálózati környezetben való felhasználásra adaptáltak. A végrehajtott módosítások rendszertechnikai szempontból nem számottevőek: pl. a A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 160 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 161 ► nagysebességű kommunikáció megteremtése a fájl-átvitellel, vagy a terminál-összekötetés biztosítása a távoli bejelentkezés (remote log-in) céljából. Egy ilyen rendszer korlátai architekturális jellegűek, ami abból ered, hogy egyprocesszoros környezetre lettek tervezve, és mégis többproceszszoros, hálózati környezetben kerül sor a használatukra. Tipikus példája ennek a UNIX, amely időosztásos rendszerként
indult, ezután munkaállomások rendszere lett, majd ezt követően terjesztették ki hálózati célokra. Ilyen a 4.3 BSD hálózati operációs rendszer, amelyet a UNIX tiszta időosztásos 6-os verziójából hoztak létre. Az alapvető változás, amely a belső magot érintette, az volt, hogy létrehozták az ún. foglalati interfészt (socket interface). A foglalatok egyik fő sajátossága az a mechanizmus, amelylyel egy folyamat a saját címtartományán kívül eső hálózati címekre is tud hivatkozni. Mindehhez névhasználati lehetőség is járul Ugyancsak a foglalatok teszik lehetővé a hálózaton keresztül történő üzenetküldést és üzenetfogadást Elosztott operációs rendszerek Az operációs rendszerek világában a jelenlegi kutatási erőfeszítések és eredmények az elosztott operációs rendszerek tervezését és fejlesztését segítik elő. Mindazonáltal az eddig kialakított rendszerek egyike sem ért még el átütő kereskedelmi sikert. A
témakör neves művelője, Andrew S Tanenbaum szerint a következő öt részterületen lehet különbséget tenni az elosztott operációs rendszerek, valamint a hálózati operációs rendszerek között: Kommunikációs eszközök: Megoldandó az olyan szinkronizációs eszközök alternatívájának meghatározása (ilyen pl. a szemafor), amelyek a megosztott memória szinkronizálására szolgálnak. Névhasználat és védelem: Mindez egy adott gépen futó folyamatra vonatkozó probléma: ez hogyan azonosítson egy távoli gépen futó folyamatot, és hogyan kommunikáljon vele. Hálózati szintű erőforrás-kezelés: Az ide tartozó kérdéskörök: ütemezés, a terhelés kiegyensúlyozása, valamint az elosztottan jelentkező holtpontok detektálása. Hibatűrés: Ez a részterület a rendszer működőképességének hibafellépés esetén történő fenntartásával függ össze. Az ellátandó szolgáltatások: Ezek a fájlszerverek, nyomtatószerverek, távoli
végrehajtó eszközök, és egyéb más eszközök tervezésére és használatára vonatkoznak. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 161 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 162 ► Egy elosztott operációs rendszer valójában úgy kezeli a hálózatban levő számítógépeket, hogy egy-egy alkalmazási folyamat a számítási környezetét egységes, átlátszó rendszerként fogja észlelni, nem pedig olyan különálló számítógépek csoportjaként, amelyek hálózati összeköttetésben vannak egymással. A szakmai közfelfogás elosztott operációs rendszerként fogadja el a Mach, a LOCUS (mindkettőt az USA-ban fejlesztették ki), valamint a CHORUS (Franciaország) elnevezésű rendszereket. Ezek a mindennapi kereskedelemben még nem terjedtek el. 5.41 Hálózati operációs rendszerek tipikus szolgáltatásai Bejelentkezés távoli gépekre (remote
log-in) Az operációs rendszer biztosítja a lehetőséget, hogy távoli számítógépre belépjünk. A legelterjedtebb módja ennek a telnet program használata A telnet kuka.mmtbmehu parancs sikeres végrehajtása esetén a felhasználó virtuálisan a Budapesti Műszaki Egyetem Méréstechnika és Információs Rendszerek Tanszék kuka nevű gépének terminálja előtt találja magát. Az operációs rendszer a telnet programmal együttműködve továbbítja a felhasználó parancsait a kérdéses gépre, ill. annak válaszait a felhasználónak Adattovábbítás távoli gépre (file transfer protocol – ftp) Az operációs rendszer biztosítja a lehetőséget, hogy a lokális és egy távoli számítógép között adatokat hordozzunk. Távoli fájlok elérésére számos protokollt dolgoztak ki, ilyen pl. a Unix to Unix Copy vagy a File Transfer Protocol (FTP protokoll). A legelterjedtebb, fájlok hordozására szolgáló szoftver az FTP protokollt megvalósító ftp program.
Ha például végrehajtjuk az ftp ftp.mmtbmehu parancsot, akkor hozzákapcsolódhatunk a Budapesti Műszaki Egyetem Méréstechnika és Információs Rendszerek Tanszéke ftp szerveréhez (fájlszerveréhez). Az ftp program megkérdezi, milyen felhasználói néven szeretnénk csatlakozni (gyakran van lehetőség anonim vagy vendég felhasználóként történő csatlakozásra), majd a kötelező azonosítás után egy egyszerű karakteres felületet biztosít, amelynek segítségével fájlokat tudunk másolni a lokális gépünkről a fájl-szerverre, ill a lokális gépre az említett fájlszerverről A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 162 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 163 ► 5.42 Elosztott operációs rendszerek tipikus szolgáltatásai Adatvándorlás (data migration) Ha egy elosztott rendszer valamelyik csomópontjában szükség van egy másik
csomópontban elhelyezkedő adatra (pl. fájlra) az operációs rendszer az adott adathalmazt átmásolja a kérdéses csomópontra. Ha az adatok már nem kellenek tovább az adott csomóponton és változtatás történt bennük, a rendszer automatikusan visszamásolja az adatokat az eredeti helyükre. (A különböző alkalmazások eltérnek abban, hogy a fájlok elérésekor az egész fájlt vagy annak csak egy részletét másolják-e át a távoli csomópontra.) Számítás vándorlása (computation migration) Az előzőekben leírt szituációban az adatok hordozásánál hatékonyabb lehet, ha nem az adatokat, hanem a tevékenység végrehajtását telepítjük át a távoli csomópontra. Erre akkor lehet szükség, ha nagy tömegű adaton viszonylag egyszerű műveletet kell végrehajtani. Folyamatok vándorlása (process migration) A számítás vándorlásának kiterjesztéseként elképzelhető, hogy az egész folyamatot érdemes egy másik csomópontra telepíteni. Ennek
számos indoka lehet: • a terhelés arányos elosztása, • a számítás meggyorsítása, abban az esetben, ha független részfolyamatokra tudjuk bontani az eredeti folyamat tevékenységét, • a folyamat hatékonyabban tud futni egy adott csomóponton, valamilyen speciális hardver vagy szoftver adottság miatt, • az adatok gyorsabb elérése egy adott csomóponton. 5.5 Elosztott fájlrendszerek Elosztott fájlrendszernek azt az – általában – szoftver modult nevezzük, mely az operációs rendszerrel együttműködve biztosítja távoli fájlrendszerek elérését, a lokális fájlok elérésével azonos módon. Az ilyen transzparens fájlelérést támogató rendszerek – ill. a működésüket szabályozó protokollok (Network File System, Remote File System, Andrew File System) – a nyolcvanas évek elején jelentek meg. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 163 ► Operációs rendszerek A dokumentum használata |
Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 164 ► 5.51 Elosztott fájlrendszerekkel szemben támasztott igények Elosztott fájlrendszerekkel szemben számos igényt támasztanak a felhasználók, melyeket nem minden megvalósítás képes maradék nélkül teljesíteni. Az általános elvárások a következők: • Hozzáférés átlátszósága: lokális és távoli fájlok azonos eljárásokkal történő kezelése. • Elhelyezkedés átlátszósága: a fájlok neve nem hivatkozik fizikai elhelyezkedésükre. • Vándorlás átlátszósága: a fájlok a rendszerben mozgathatók anélkül, hogy megváltozna az elnevezésük. • Méretezés átlátszósága: a fájlrendszer méretezhető, vagyis a terhelés növekedésével lehetséges új komponensekkel történő növelése. • Hibatűrő: a fájlrendszer egyes komponensek hibája esetén képes tovább működni, esetleg csökkentett funkcionalitással. (Pl a fájlrendszer egy része időlegesen nem
elérhető.) • Felhasználók mobilitása: az összes fájl a rendszer minden pontjáról elérhető. • Fájlok mobilitása: a fájlok áthelyezhetők az egyik helyről a másikra a rendszer futása közben is. 5.52 Elosztott fájlrendszerek megvalósítása Kliens-szerver modell használata A fájlszerver szolgáltatásként nyújtja a távoli gépeken futó klienseknek a lokális fájlrendszer elérésének lehetőségét. A kliens program extrém esetben akár a lokális gépen is futhat Fájlnevek állapottere A fájlnevek állapottere a megvalósítástól függően lehet: • egységes (uniform), • nem egységes (nem uniform). Egységes névtér esetén az azonos fájlok azonos névvel érhetők el a különböző csomópontokon, míg nem egységes névtér esetén egyazon fájlnak különböző csomópontokon eltérő neve lehet. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 164 ► Operációs rendszerek A dokumentum használata |
Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 165 ► Állapotmentes vagy állapottárolós működés Állapottárolós működés esetén a fájlszerver tárol információt a kliensek aktuális állapotáról, míg állapotmentes megvalósítás esetén ezt nem teszi. Az állapottárolós működés leegyszerűsítheti a szerver működését, csökkentheti a kliens és a szerver közötti kommunikációt, hiszen pl. ugyanazon fájl többszöri olvasáskor a kliensnek elegendő csak a fájl korábban használt azonosítóját ill. az aktuális pozíciót továbbítani, a fájl teljes nevét, ill más argumentumait a szerver már a saját adatbázisából kikeresheti. Az állapottárolós működés veszélye azonban, hogy a szerver esetleges hibája vagy leállása esetén a helyes működés csak nehezen állítható vissza, hiszen a szerver hibamentes állapotának visszaállításához ismerni kellene az öszszes aktív kliens állapotát. Fájlok párhuzamos
elérésének megvalósítása Egy fájlszerver engedélyezheti, ill. tilthatja különböző felhasználók egyazon fájlon azonos időben történő műveletvégzését A párhuzamos elérés támogatása esetén a különböző NFS rendszerek eltérő megoldást alkalmazhatnak a konzisztencia biztosítására. Gyakori megoldás, hogy minden felhasználó a fájl egy, csak általa használt másolatán dolgozik, és a fájlt utoljára bezáró felhasználó módosításai érvényesülnek. Az NFS rendszerek általában támogatják a fájlok (vagy azok részeinek) kizárólagos birtoklását, az ún lock-olás műveletét 5.6 SUN Network File System (SUN NFS) A SUN Network File System-et 1985-ben publikálták. Fontos, hogy a szabadon elérhető protokollt és referencia-implementációkat is közzétettek, melyek nagyban elősegítették a rendszer elterjedését. Elmondhatjuk, hogy bár voltak konkurens rendszerek, a SUN Network File System azóta az elosztott fájlrendszerek „de
facto” szabványa lett. 5.61 SUN NFS jellemző tulajdonságai A SUN NFS a kliens-szerver modellre épül. A kliens és a szerver egymástól független, szétválasztható, azonos vagy távoli gépeken is futhatnak A szolgáltatás az ún. távoli eljáráshívásra (Remote Procedure Call – RPC) épül, mely módszert a későbbiekben részletesen is ismertetjük. A SUN NFS az RPC szinkron megvalósítását használja, vagyis a kliens folyamatok mindig várakoznak a kérésük teljesítésére. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 165 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 166 ► A SUN NFS felhasználói felületének lehetőségei a következők: • Egy vagy több fájlrendszer teljes vagy részleges (rész fa) exportálása (láthatóvá tétele a rendszer többi csomópontja számára) lehetséges egy adott csomópontról. • Konfigurációs fájl létezik
az exportált fájlrendszert elérő kliensek definiálására, amelynek segítségével pl. a felhasználói azonosítók alapján szabályozhatjuk az egyes fájlrendszerek elérését. • Távoli fájlrendszer mount-olásának (vagyis a lokális fájlrendszerhez csatlakoztatásának) lehetősége az elérési jogosultságok definiálásával. • Szoros (hard), ill. laza (soft) mount-olás: Szoros mount-olás esetén a rendszer addig próbálkozik a kívánt fájl elérésével, míg az sikerrel nem jár Laza mount-olás esetén néhány sikertelen próbálkozás után a rendszer hibaüzenetet küld. • A SUN NFS a lokális fájlokkal azonos módon történő elérését biztosítja a távoli fájloknak. • A szerver csak a saját, lokális fájlrendszerét exportálhatja a rekurzió elkerülése érdekében. A SUN NFS tervezői a következő célokat tűzték a rendszer elé: • Minden operációs rendszer alatt lehetséges legyen megvalósítani a protokollt. • A protokoll
hardver-független legyen. • Létezzen egyszerű újraindítási lehetőség a kliens, ill. a szerver számára • A kliens kezelje az operációsrendszer-függő fájlelérési metodikát. • Az NFS teljesítménye a helyi fájlrendszer teljesítményével összemérhető legyen. • A hálózati összeköttetéstől független, ill. a forgalomnövekedéssel bővíthető kapacitású implementációt tegyen lehetővé Az NFS specifikáció következménye az állapotmentes megvalósítás. Ennek előnye, hogy a kliensek kérései függetlenek egymástól, így önállóan is értelmezhetők. A kliens állapota a szerverben nem tárolt, az csak statisztikai információt gyűjthet a szerver, ami biztosítja a szerver egyszerű újraindíthatóságát Hátránya az állapotmentes megvalósításnak, hogy a szerver csak stabil állapotában válaszolhat a kliens kéréseire, ami időkésleltetést okozhat a rendszer működésében. Egy egyszerű példával illusztrálható ez a
szituáció: a szerver, ha cache memóriát használ a fájlok elérésére, fájl írás esetén csak A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 166 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 167 ► a cache kiírása után válaszolhat a kliens kérésére. Ellenkező esetben esetleges rendszerhiba esetén a cache tartalma elveszhet, ami a kliens kérésének meghiúsulását jelentené Ebben az esetben tehát az RPC protokoll nem biztosítaná a szolgáltatás biztonságos megvalósítását. 5.62 A SUN NFS részei A SUN NFS működését nem egyetlen protokoll, hanem egymásra épülő protokollok halmaza biztosítja. A protokollok önmagukban is értelmesek, számos az NFS-től független alkalmazás használja őket. Ezek a protokollok a következők: • NFS protokoll: a fájlelérés magas szintű protokollja. • RPC (Remote Procedure Call) protokoll: a távoli
eljáráshívás protokollja. • XDR (EXtended Data Representation) protokoll: a rendszer-független adatábrázolást rögzítő protokoll. • Mount protokoll: távoli fájlrendszerek összekapcsolását leíró protokoll. A protokollokat megvalósító, egy működő SUN NFS rendszerben megtalálható szoftver komponensek: • NFS kliens műveleteket megvalósító rutinok, • Démon folyamatok (NFS démon, mount démon, biod – blokkos átvitelért felelős démon), melyek az NFS szerver funkcióit valósítják meg, • Network Lock Manager, Network Status Manager: opcionális szoftver komponensek fájlok kizárólagos elérésének, ill. az elérhetőség lekérdezésének biztosítására XDR (EXtended Data Representation) protokoll Az XDR protokoll rögzíti különböző típusú adatok hardver-független ábrázolásának, ill. a hálózaton történő továbbításának módját Definiálja az adatelemek méretét, azok sorrendjét átvitel esetén, valamint az adatelemek
formátumát. Pl az egész számokat (integer típus) négy bájton ábrázolja, hálózati transzfer esetén elsőként a legfelső bájtot küldi át A negatív egészeket kettes komplemens kódolásban ábrázolja Tömbök átvitele esetén a tömb elé beszúrja a tömb hosszát (5.6 ábra) Az XDR által definiált alap-adattípusok halmazát a felhasználó bővítheti. A protokoll az új adattípusok ábrázolására egy szabályrendszert (adattípus-leíró formális nyelvet) ad, melynek segítségével akár kombinált típusok is definiálhatók A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 167 ► Operációs rendszerek Elosztott rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 168 Típus Adat Egész szám 0x123456 0x00 0x12 0x34 0x56 [tömb hossza] 0x00 0x00 0x00 0x03 4 0x00 0x00 0x00 0x04 2 0x00 0x00 0x00 0x02 -1 0xFF 0xFF 0xFF 0xFF Háromelemű egészekből álló tömb ► XDR
ábrázolás 5.6 ábra Példa az XDR adatábrázolásra RPC (Remote Procedure Call) protokoll Az RPC protokoll a kliens és a szerver kommunikációjának formai definiálására szolgál. Az RPC protokoll az NFS azon része, amelyet a legtöbb, NFS-től független szolgáltatás megvalósításánál használnak. Ennek megfelelően az RPC-nek több változata is létezik Az RPC protokollok rögzítik üzenetváltás esetén: • az üzenetek formátumát (mit tartalmazhatnak az üzenetek), • az üzenetközvetítés módját (mely üzenetek milyen sorrendben küldhetők), és • a partnerazonosítás (címzés) módját. A különböző NFS rendszerek az üzenetek formátumának definiálására leggyakrabban az XDR protokollt használják. Az üzenetközvetítés módjának definíciójánál fontos kérdés, hogy az üzenetek megbízható továbbítását biztosítja-e a protokoll. A megbízható üzenettovábbítás leggyakoribb megoldása az, hogy a protokollt megvalósító
szoftver addig ismétli a küldendő üzenetet, míg annak vételéről nyugtázás nem érkezik. Másik fontos kérdés az RPC üzenetküldési módjának definiálásakor, hogy a kliens folyamat várakozik-e az általa kért szolgáltatás végrehajtására, vagyis a szerver válaszának megérkezéséig, avagy nem várakozik. Az első esetben szinkron, míg a második esetben aszinkron RPC protokollról beszélünk. A fenti tulajdonságokkal nem minden RPC protokoll rendelkezik. A SUN NFS által használt ún. SUN RPC azonban szinkron műveletvégzést és megbízható üzenettovábbítást biztosít. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 168 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 169 ► 5.7 Az X Window rendszer Az X Window egy olyan rendszer, amely grafikus kimenettel rendelkező alkalmazások felhasználói felületének kialakítására ad lehetőséget. A
rendszer fejlesztése 1983–84-ben kezdődött a Massachusetts Institute of Technology-n (MIT, USA). A fejlesztés célja olyan kommunikációs felület készítése volt, amely hálózattal összekötött különböző operációs rendszereket futtató számítógépeken azonos kezelői felületet biztosít. Az X Window segítségével lehetőség van az alkalmazás és a kezelői felület szétválasztására Míg a kezelői felületet a helyi gépen futó X szerver jeleníti meg, addig az alkalmazás akár távoli gépeken is futhat. A rendszer gyors elterjedését számos előnyös tulajdonságán túl segítette, hogy az X Window forráskódja publikus. Elsősorban UNIX rendszerek támogatják Az X Window működésének jellemzője a kliens-szerver modell használata. A szerver egy grafikus terminálon futó folyamat, mely grafikus kiés bemeneti lehetőséget biztosít a kliens folyamat számára A szerver kezeli az ún grafikus munkahelyet, melynek részei: • a képernyő
(ill. képernyők), • a billentyűzet (alfanumerikus bemeneti eszköz) és egy • grafikus bemeneti eszköz. A kliens egy grafikus kimenetű (általában interaktív) folyamat. 5.71 Az X protokoll A rendszer magja az X protokoll, mely definiálja a kliens és a szerver együttműködésének módját. Leírja a lehetséges grafikus funkciókat, megengedett akciókat A protokoll kétirányú aszinkron kommunikációt tesz lehetővé, vagyis mind a kliens, mind a szerver küldhet üzeneteket. Az üzenetek küldése után egyik fél sem várakozik visszajelzésre, hanem folytatja működését. Üzenetek típusai: • • • • Kérés (kliens küldi a szervernek). Válasz (szerver küldi a kliensnek). Esemény (szerver küldi a kliensnek). Hiba (szerver küldi a kliensnek). A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 169 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 170 ► A
protokoll legfontosabb jellemzője, hogy a hálózati kommunikáció csökkentésére törekszik. Ennek módjai: • A kliens nem egyes üzeneteket, hanem üzenetek összegyűjtött csomagját küldi át a hálózaton. • A szerver helyben kezel bizonyos egyszerű eseményeket, mint pl. az egérmozgatást. • A szerver szoftver erőforrásokat (grafikus környezetet, betűtípushoz tartozó leírást stb.) hoz létre a kliens kérésére, amiket később a kliens folyamat egyszerű hivatkozással érhet el. 5.72 Az X Window rendszer koncepciója Az X környezet alapvető eleme a grafikus, ún. X munkahely, mely egy X display-ből (X megjelenítőből) és az azon levő (egy vagy több) X screenből (X képernyőből), valamint bemeneti eszközökből áll. Az X munkahely egy karakteres bemeneti eszközt (billentyűzet) és egy pozicionálásra alkalmas grafikus bemeneti eszközt kezel. A grafikus bemeneti eszköz leggyakrabban egér, de lehet fényceruza vagy touch-screen (érintős
képernyő) is Ablakkezelés A grafikus képernyő kezelése ablakok létrehozásával történik. Az ablak egy téglalap alakú képernyőrészlet, melyben a felhasználó újabb ablakokat nyithat, vagy az egyes ablakok területére rajzolhat. Az ablakok rendszere hierarchikus. A kliens a működése elején nyit egy ún. gyökér ablakot Az összes többi ablaka ennek az ablaknak lesz leszármazottja. Az ablakok mozgathatók a képernyőn A leszármazott ablakok területe csak az ősük ablakfelületén látszanak. A kilógó vagy esetleg átlapolódó, egymást fedő ablakoknál a rendszer automatikus vágást alkalmaz. Egy ablakfelület kitakaráskor (láthatóvá válásakor) a szerver ún kitakarás eseményt küld a kliens folyamatnak, lehetőséget adva annak tartalmának frissítésére. A kliens külön kérésére a szerver támogathatja az ablak automatikus, szerver által megvalósított frissítését. Bemeneti eszközök kezelése A bemeneti eszközöket az X szerver
figyeli. Az eszközök állapotváltozásakor (pl egy billentyű vagy egér gombjának leütésekor) a szerver esemény üzenettel értesíti a klienst. A bemeneti információ elosztására az X Window rendszer bevezette az ún. input focus fogalmát Az input focus birtokosa az a kitüntetett kliens A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 170 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 171 ► folyamat, amelyik a bemeneti eszközök állapotváltozásakor a szerver által értesítendő. Az input focus-t mindig egy folyamat birtokolja, és a szerver által definiált módon adható át, ill. kérhető el a kliensek között Pozicionáló eszköz mozgásáról a kliens az aktív ablak bal felső sarkától számított relatív koordinátákban mért információt kap a szervertől. Karakteres input esetén a billentyűkhöz történő karakter-hozzárendelést a szerver végzi,
azonban a kliens kérésére a szerver megváltoztathatja az aktuális karakter-hozzárendelést. Megjelenítő eszköz kezelése Az X ún. raszteres (képpontokból, pixelekből álló) grafikus terminált tud kezelni. Az ablakok helyét a képernyő bal felső sarkától számolt derékszögű koordináta rendszerben tartja számon Az ablakok és egyéb rajzelemek elhelyezkedését képpontokban méri. Az ablakon belüli rajzelemek elhelyezkedését az ablak bal felső sarkától mért relatív koordinátákként tárolja Rajzoláskor az X egyszerű, előre definiált rajzelemek használatát engedi meg. A rajzelemek halmaza azonban bővíthető a felhasználó által Rajzolni mind a képernyőre, mind pedig (virtuálisan) a memóriába lehetséges Virtuális rajzolással a kliens karban tarthatja az esetlegesen letakart képernyőjének tartalmát, melyet majd a kitakarás esemény után frissíthet. Az X a színek használatát palettázással támogatja. A kliens egy 128elemű
paletta színeit definiálhatja a szerver által biztosított színtartományban, mely általában igen széles A palettahasználat előnye, hogy egy palettaszín definiálása után a kliens egy nyolc-bites azonosítóval hivatkozhat egy színre, mely szín ábrázolására a szerver 16, 24, vagy akár 32 bitet is használhat. A paletta színein az azonos képernyőn futó alkalmazások osztoznak Ha egy alkalmazásnak nem elegendő a palettában megmaradt színek száma, kérheti a szervert, hogy biztosítson számára egy külön palettát Ez a felhasználó számára is szembetűnő, mert ebben az esetben a képernyő színei megváltoznak, attól függően, hogy az önálló palettát használó vagy valamelyik másik, közös palettát használó folyamat birtokolja az input focus-t. A kezelői felület elemei Egy működő X rendszernek három fő eleme van: • Windowing system: A rendszernek ez az eleme felelős az X protokollt megvalósításáért, vagyis ez a rendszer magja.
Lebonyolítja a kliensekkel történő kommunikációt, elvégzi a megjelenítési funkciókat. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 171 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Elosztott rendszerek Vissza ◄ 172 ► • Window manager: A Window manager egy kitűntetett kliens folyamat, ami az ablakok felhasználó által történő manipulálását intézi. Minden Windowing system-hez csak egy Window manager kapcsolódhat. A Window manager által támogatott műveletek az ablakokkal: – mozgatás – méretezés – zárás – ikonizálás – menü biztosítása A Window manager minden ablakot ellát az ablakok kezelését (mozgatását, ikonizálását stb.) megkönnyítő tartozékokkal A tartozékok kinézete, ill a biztosított funkciók az adott X megvalósítástól függően különbözhetnek • Session manager: A Session manager egy állandóan futó X szerver esetén a felhasználó
beléptetését intézi a grafikus képernyőn. Opcionális része a rendszernek A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 172 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 173 ► 6. Védelem és biztonság Multiprogramozott rendszerekben a folyamatok párhuzamosan hajtódnak végre, osztozva a rendszer erőforrásain. Az operációs rendszernek gondoskodni kell arról, hogy az egyes folyamatok működése ne zavarjon egy másik folyamatot, a különböző erőforrásokat csak azok a folyamatok használhassák, amelyek erre az operációs rendszertől engedélyt kaptak. Védelemnek nevezzük eljárásoknak és módszereknek azon rendszerét, mely lehetőséget teremt a számítógép erőforrásainak programok, folyamatok, ill. felhasználók által történő elérésének szabályozására A védelem fogalmát fontos megkülönböztetnünk a rendszer biztonságának (vagy
biztonságosságának) fogalmától. A rendszer biztonsága annak a mértéke, hogy mennyire lehetünk bizonyosak a számítógépes rendszer, ill. a rendszerben tárolt adatok sérthetetlenségében Míg a védelem szigorúan a rendszer belső problémája, kizárólagosan csak a rendszeren belüli objektumokkal foglakozik, addig a rendszer biztonságának megteremtésekor figyelembe kell venni a rendszer működési környezetét, amelyből rendszerünket potenciális támadások érhetik. Természetesen a két témakör szervesen összefügg, hiszen minden biztonsági rendszer feltételez egy megfelelően működő védelmi mechanizmust, amire támaszkodhat 6.1 Számítógépes rendszerek védelme A védelemi mechanizmusok kifejlesztésének eredeti célja az volt, hogy az idők folyamán egyre összetettebbé váló multiprogramozott rendszerekben meg lehessen akadályozni az osztottan használt erőforrások illetéktelen használatát. A modern védelmi módszerek azonban nemcsak
az osztott erőforrás-elérés szabályozását oldják meg, de lehetőséget teremtenek a rendszer megbízhatóságának növelésére is. Mint látni fogjuk, a védelmi mechanizmusok segítségével biztosítani lehet, hogy minden program komponens csak az előre definiált módon használja számára engedélyezett erőforrásokat. A védelemről beszélve fontos megkülönböztetni a védelem módszerét és a védelem szabály rendszerét. A védelem szabály rendszere meghatározza, hogy mit kell tenni a rendszer zökkenőmentes biztonságos használatához, míg a védelem módszere (vagy mechanizmusa) lehetőséget teremt a szabályozás megvalósítására, vagyis a rendszerobjektumok kezelésének mikéntjét határozza meg. Vegyünk erre egy példát: A UNIX esetén az erőforrások A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 173 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza
◄ 174 ► elérésének szabályrendszere a következő: A jogosítványok a felhasználókhoz kötődnek. Léteznek a rendszerben egyszerű felhasználók különböző elérési jogosítványokkal, és létezik a rendszergazda, aki rendelkezik minden nemű jogosítvánnyal. A felhasználók az általuk birtokolt objektumok elérésére engedélyt adhatnak más felhasználóknak is. A felhasználók által indított programok (folyamatok) a legegyszerűbb esetben a felhasználó jogosítványaival rendelkeznek. Amennyiben egy program tulajdonosa ezt engedélyezi, lehetőség van a programot annak tulajdonosának jogosítványaival végrehajtani. Ezt az engedélyt úgy adhatja meg a fájl tulajdonosa, hogy egy speciális, erre a célra fenntartott jelzőbitet (flag-et) beállít a fájl leírójában. Ebben az esetben védelmi módszer az az eljárás, ahogy a UNIX az objektumok tulajdonosaihoz kötődő jogosítványokat kezeli, ill. az egyes folyamatok más felhasználó
jogosítványaival történő ellátását biztosítja. A védelem szabályrendszere és a védelem módszere között természetesen szoros a kötődés, azonban fontos, hogy meghúzzuk a határt a két fogalom között. A rendszertervezés szempontjából az az előnyös, ha a védelem módszere egy rendszeren belül állandó marad abban az esetben is, ha esetleg a védelem szabályrendszere megváltozik. 6.11 Védelmi tartományok Védelmi szempontból a számítógépes rendszereket tekinthetjük úgy, mint objektumok, ill. az objektumokat használó folyamatok halmazát Az objektumok ebben a modellben lehetnek mind szoftver komponensek (pl fájlok, programok, szemaforok stb.), mind pedig hardver komponensek (pl. CPU, memória, nyomtató stb) Az objektumok egyedi névvel érhetők el a rendszerben, és mindegyiken az objektumra jellemző műveletek végezhetők. Pl egy fájlt a nevével és az elérési útjával azonosítunk A fájlon végezhető tipikus műveletek: pl.
olvasás, írás, végrehajtás A rendszermodellt általánosan tekinthetjük úgy, hogy az objektumok absztrakt adattípusok, amin végezhető műveletek függenek az adott objektum típusától A folyamatok működése a fenti modellben gondolkodva nem más, mint a fent definiált absztrakt adattípusok példányain végzett műveletek sorozata. A rendszert biztonságossá tehetjük, ha az objektumokon végzett műveletek végrehajtását jogosítványokhoz kötjük. Természetesen egy folyamat végrehajtásához szükségünk van a folyamat által használni kívánt objektum elérését lehetővé tevő jogosítványra, amely az objektumon végzendő műveletet engedélyezi. A rendszer abszolút biztonságosan műkö- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 174 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 175 ► dik, ha minden pillanatban minden folyamat pontosan csak
azokkal a jogosítványokkal rendelkezik, amik feltétlenül szükségesek az aktuálisan végzett művelet végrehajtásához; hiszen ha más objektumot próbálna elérni a folyamat, vagy az adott objektumot nem megengedett módon, a számítógép védelmi rendszere azonnal jelezne. (A szabályozásnak ezt a formáját need-to-know szabályozásnak, vagyis „tudnia kell” szabályozásnak nevezik.) Ez az ideális szabályozás a valóságban nem valósítható meg, elsősorban az elkerülhetetlen tetemes rendszeradminisztráció miatt. Az objektumok elérésének szabályozására az ún. védelmi tartományok szolgálnak. A védelmi tartomány nem más mint jogosítványok gyűjteménye objektumokon végezhető műveletek végrehajtására Egy védelmi tartomány tartalmazhat jogosítványt egyazon objektum többféle művelettel történő elérésére, ill. egy objektum-művelet páros akár több különböző tartományban is szerepelhet. A védelmi tartományokat
legegyszerűbben táblázatos formában, az ún. elérési mátrix segítségével ábrázolhatjuk A 61 ábra táblázata egy statikus elérési mátrixot mutat. A táblázatból kiolvashatjuk például, hogy csak a B tartományban tartózkodó folyamat jogosult nyomtatni a nyomtatón, vagy azt, hogy az A tartományban tartózkodó folyamat két fájlt olvashat: az adat.txt-t és a helpbat-ot objektumok adat.txt tartományok A doc.doc olvasás help.bat olvasás B nyomtatás C D nyomtató olvasás olvasás, írás végrehajtás olvasás, írás 6.1 ábra Elérési mátrix statikus védelmi tartományokkal Egy rendszerben használhatunk • dinamikus, illetve • statikus védelmi tartományokat, attól függően, hogy egy folyamathoz tartozó védelmi tartomány változik-e a folyamat végrehajtása során. Ha nem változhat, statikus, míg az ellenkező esetben dinamikus védelmi tartományról beszélünk. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄
175 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 176 ► Dinamikus védelmi tartományok használatakor szabályozni kell a védelmi tartomány váltásának, ill. megváltoztatásának módját Több módszer létezik ennek megvalósítására, amiket a következőkben veszünk sorra Védelmi tartomány váltása (switch) A legegyszerűbb módszer az, hogy definiálják, mely védelmi tartományból mely védelmi tartományba léphet át egy folyamat. Ennek ábrázolása lehetséges az előbb megismert elérési mátrixban is A 62 ábra táblázatának első sorában pl. láthatjuk, hogy az A jelű tartományból csak a B jelű tartományba léphetünk át, a B jelű tartományból a C és a D jelű tartományokba léphet a folyamat, míg a C jelű tartományból nem lehetséges a védelmi tartomány megváltoztatása. objektumok adat.txt docdoc helpbat Tartományok A olvasás printer A olvasás
C olvasás olvasás írás B C D váltás váltás váltás nyomtatás B D tartományok végrehajtás olvasás írás váltás 6.2 ábra Elérési mátrix dinamikus védelmi tartományokkal Elérési jogosítványok másolása (copy) Lehetséges, hogy a rendszer engedélyezi egy bizonyos objektumon történő művelet végrehajtására vonatkozó jogosítvány másolását egy adott védelmi tartományban. Ez azt jelenti, hogy az adott védelmi tartományban futó folyamat jogosult az általa birtokolt, egy adott művelet elvégzésére szóló jogosítványt odaadni más védelmi tartományoknak. Objektumok tulajdonlása (owner) Az előző másolási jogot általánosíthatjuk. Kijelölhetünk egyes védelmi tartományokat, melyek ún. tulajdonosi joggal rendelkeznek egy adott objektum felett, ami azt jelenti, hogy az általuk birtokolt objektumon végezhető bármelyik műveletre adhatnak jogosítványt egy másik tartománynak A dokumentum használata |
Tartalomjegyzék | Irodalom Vissza ◄ 176 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 177 ► 6.12 Elérési mátrix ábrázolása és kezelése Egy valós rendszerben igen sok objektum és nagyon sok védelmi tartomány létezhet, azonban egy-egy tartomány általában csak néhány objektum elérésére tartalmaz jogosítványokat. Az elérési mátrix ennek megfelelően egy igen nagy méretű, de ritka kitöltésű mátrix lesz, melynek optimális tárolására és kezelésére számos módszert használnak Ezekből néhányat az alábbiakban vázolunk. Globális tábla A globális tábla a legegyszerűbb tárolási mód. A rendszer tárolja a <tartomány, objektum, műveletvégzési jog> hármasokat, vagyis egyszerűen egy listába gyűjti az elérési mátrix kitöltött elemeit. (A 62 ábra első sora alapján pl a következő két elemet tárolná a rendszer: <A, adattxt,
olvasás>, <A, help.bat, olvasás>) A módszer hibája, hogy az adódó lista igen hoszszú egy valóságos rendszerben, ami hosszadalmassá teszi a táblázaton végzett műveleteket (keresés, beszúrás, változtatás) A műveletek elvégzését gyakran a háttértár elérése is meghosszabbítja, hiszen egy nagy táblázat nem mindig fér be teljesen a memóriába. Objektum-elérési lista Ennél a módszernél az elérési mátrixot lényegében az oszlopai mentén feldaraboljuk, és az oszlopok tartalmát tároljuk. Van egy listánk a rendszerben létező összes objektumokról, és minden objektumhoz tároljuk a hozzá tartozó <tartomány, műveletvégzési jog> párokat. Tartományok jogosítványainak listája Ennél a módszernél az elérési mátrixot a sorai mentén daraboljuk fel, és a sorok tartalmát tároljuk. A rendszerben létezik egy lista a védelmi tartományokról, és minden tartományhoz tároljuk a hozzá tartozó <objektum,
műveletvégzési jog> párokat. Zár-kulcs (lock-key) módszer A zár-kulcs módszer átmenet az előző két módszer között. Minden objektumhoz tartoznak egyéni bitminták Ezek töltik be a zár szerepét Hasonlóan, minden védelmi tartomány rendelkezik egy vagy néhány bitmintával Ezek töltik be a kulcs szerepét. Ha egy tartomány bitmintája egyezik az objektum bitmintájával, vagyis a tartomány egyik kulcsa illeszkedik az objektum zárjába, akkor ez azt jelenti, hogy a tartományt birtokló folyamat elvégezheti a kulcshoz tartozó műveletet. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 177 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 178 ► Mint említettük, a globális tábla módszer nehézkes, így a gyakorlatban ritkán használják. A objektum-elérési lista használata gyorsítja a jogosultság ellenőrzését és annak elérését az objektum
alapján A tartományok jogosítványainak tárolása viszont a tartományok szerinti elérést támogatja, ami hasznos lehet egy folyamat jogosítványainak meghatározásakor. Látható, hogy más-más szituációkban használható ki a két módszer előnyös tulajdonsága, emiatt ez utóbbi módszereket gyakran kombinálják. Vegyünk egy példát. Tételezzük fel, hogy a védelmi tartományok egyszerűen folyamatokhoz kötődnek, minden folyamatnak van egy védelmi tartománya. Ha egy folyamat először kezdeményezi egy objektum elérését, ellenőrzi a rendszer az objektum-elérési listájában, hogy a folyamat végezheti-e az adott műveletet. Ezek után a rendszer ad egy elérési jogosítványt a folyamatnak, aminek segítségével az objektumon történő további műveletvégzéskor már igazolni tudja a jogosultságát. Ezt a módszert használja pl. a UNIX rendszer fájlok elérésekor A fájlok használatát minden esetben a fájl megnyitásának kell megelőznie,
mikor is a folyamat köteles megadni a fájl adatain kívül a fájlon végzendő művelet típusát is A megnyitás során az operációs rendszer ellenőrzi a folyamat fájlra vonatkozó jogosultságait. Ha a folyamat számára engedélyezett műveletet kíván végezni, az operációs rendszertől kap egy fájlleírót, melynek használatával további ellenőrzés nélkül érheti el a kívánt fájlt. Természetesen a fájlleíró csak a kért művelettípus végrehajtására alkalmas, a rendszer minden alkalommal ellenőrzi ezt. Az elérésimátrix-ábrázolási módszerek közül a zár-kulcs mechanizmus a leghatékonyabb módszer. Ennek használata rugalmas, a kulcsok egyszerűen adhatók át a tartományok között, a zár egyszerű megváltoztatásával megvonhatók jogosultságok, ill. a jogosultság ellenőrzése is gyors, hiszen nem szükséges nagy tömegű adatot mozgatni. Ez a módszer, előnyei miatt gyorsan terjed a modern rendszerekben. 6.2 Számítógépes
rendszerek biztonsága Egy számítógépes rendszer biztonsága, mint korábban már meghatároztuk, annak a bizonyosságnak mértéke, hogy a rendszer, ill. a rendszerben tárolt információ nem sérülhet meg, vagy illetéktelenül nem kerülhet a ki a rendszerből. A védelemmel ellentétben, aminek biztosítása szigorúan a rendszer belső problémája, a rendszer biztonságának meghatározásakor szükség van a rendszer környezetének a vizsgálatára is. Míg a védelem esetén programhibák, ill. programok nem kívánt mellékhatásai, vagyis vé- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 178 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 179 ► letlen események ellen kell a folyamatokat megvédeni, addig a biztonság garantálásához fel kell tételezni illetéktelen, szándékos behatolásokat a rendszerbe, és rosszindulatú támadásokat is a rendszer ellen.
A számítógépes rendszerek biztonságáról beszélve nemcsak technikai, hanem rendszerszervezési, rendszeradminisztrációs kérdésekkel is foglalkoznunk szükséges. Technikailag tökéletes biztonságú rendszerben tárolt adatok is könnyűszerrel elérhetővé válnak egy támadó számára, ha nem biztosítunk megfelelő fizikai védelmet a rendszernek. Ha pl egy rendszer adattárolói a megfelelő védelem hiányában egyszerűen kivehetők, és egy másik, védelem nélküli helyen lemásolhatók, a rendszer biztonsága elégtelen, holott maga a rendszer technikailag akár tökéletes is lehet. A rendszer biztonságát ért sérülések oka lehet szándékos és véletlen. A szándékos behatolásoknak három fajtáját különböztetjük meg: • adatok illetéktelen olvasása, • adatok illetéktelen módosítása, • adatok tönkretétele. A biztonsági rendszer feladata, hogy a szándékos támadások, ill. véletlen sérülések ellen védelmet nyújtson. Mivel
abszolút biztonságos rendszert igen nehéz létrehozni, ezért a gyakorlatban alkalmazott védelmi rendszerek célkitűzése az, hogy támadó dolgát annyira nehezítse meg, hogy a támadás „költsége” nagyobb legyen, mint a sikeres támadás eredményeként remélt haszon. 6.21 A felhasználók azonosítása A számítógépes rendszerhez történő jogosulatlan hozzáférés megakadályozásának első lépése a felhasználók azonosítása. A felhasználók azonosítására több módszer létezik: • Felhasználó azonosítása személyes tulajdonságai, pl. ujjlenyomata, aláírása, kezének erezete stb. alapján • Felhasználó azonosítása annak birtokában lévő tárgyak, pl. kulcs, azonosító kártya stb alapján • Felhasználó azonosítása csak általa ismert információ, pl. név, jelszó, esetleg algoritmus alapján. A személyes tulajdonság és a tárgyak alapján történő azonosítás esetén a számítógépes rendszer valamilyen speciális
periféria (aláírás-szkenner, ujj- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 179 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 180 ► lenyomat digitalizáló, kártyaolvasó stb.) segítségével végzi a felhasználó azonosítását. A számítógépes rendszerekben a jelszóval történő azonosítás a legelterjedtebb, elsősorban azért, mert ez a módszer valósítható meg a legegyszerűbben. A jelszóval történő azonosítás tipikusan két problémát vet fel: Ne lehessen a jelszót egyszerűen kitalálni, ill. annak megadásakor azt “kihallgatni” Gyakori, hogy a felhasználók mások által egyszerűen kitalálható jelszót használnak: pl. saját login nevük, házastársuk nevét, születésük dátumát stb. A jelszó kihallgatása történhet egyszerűen annak begépelésekor, de gyakori támadási forma volt a korai hálózati rendszerekben a
hálózaton kódolatlanul továbbított jelszók begyűjtése is A jelszó kitalálása ellen a következőképen védekeznek a rendszerek: • „Nehezen kitalálható” jelszó választására kényszerítik a felhasználót. • Jelszó gyakori cseréjére kötelezik a felhasználót. A jelszó érvényessége időben korlátozott a rendszerben, az érvényesség lejártával a rendszer kéri a felhasználót jelszavának megváltoztatására. Általában a rendszerek tárolják a korábban már használt jelszavakat, és ezeket nem engedik megint használni Ha nehezen kitalálható jelszót szeretnénk választani, akkor érdemes figyelembe venni, milyen tipikus támadási stratégiák léteznek egy felhasználó jelszavának megfejtésére. Az egyik ilyen támadási stratégia, hogy a támadó a felhasználók által gyakran használt jelszavakkal, ill. a felhasználó nevéből, esetleg más személyes adataiból generált kulcsszavakkal próbálkozik. Ennek a támadásnak
kiküszöbölésére szolgálnak az ún. jelszóellenőrző programok. A rendszer új jelszó megadásakor, vagy valamilyen gyakorisággal rendszeresen lefuttatja ezt a programot A program mechanikusan végigpróbálja a felhasználó nevéből, ismert adataiból kikövetkeztethető legkézenfekvőbb, ill. a rendszerben mások által gyakran használt jelszavakat Ha ilyet talál, felszólítja a felhasználót jelszavának megváltoztatására A másik gyakori támadási forma, az ún. szisztematikus támadás, amikor a támadó egy szótárból módszeresen végigpróbálgatja az összes benne szereplő szót. Ezt a támadást nagyban segítheti, ha valamilyen módon ismertté válik a jelszó hossza, és ez a hossz rövid. Az ilyen támadások meghiúsítása érdekében a rendszerek általában megszabják a legrövidebb elfogadható jelszó méretét, és megkövetelik legalább néhány nem alfanumerikus karakter (szám vagy jel), ill. nagybetű használatát. A dokumentum
használata | Tartalomjegyzék | Irodalom Vissza ◄ 180 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 181 ► Az előbbieken túl fontos figyelembe veendő szempont az, amikor a rendszer nehezen megfejthető jelszavak választására készteti a felhasználókat, hogy a jelszó ne legyen nehezen memorizálható, azért, hogy a felhasználó azt fejben meg tudja jegyezni. A nehezen megjegyezhető jelszó ugyanis arra ösztönözné őt, hogy a jelszavát valamilyen formában külön tárolja. Ez igen veszélyes lehet, hiszen ebben az esetben a védtelen helyen tárolt jelszó könnyen illetéktelen kezekbe kerülhet. A jelszó kihallgatásának megakadályozása a következőképen történhet: • A legegyszerűbb alapvető védekezés, hogy a jelszó megadásakor az nem jelenik meg a képernyőn. • A felhasználók jelszavait a rendszer csak a rendszergazda által elérhető védett állományban,
vagy kódoltan tárolja. Gyakran alkalmazott megoldás az, hogy a rendszer a jelszavakat olyan, nem invertálható kóddal kódolja, melynél az eredeti jelszavak a kódolt állomány alapján nem állíthatók vissza. A rendszer egy felhasználó belépésekor a megadott jelszót ugyanazzal az eljárással kódolja, és a kódolt jelszót hasonlítja öszsze az általa tárolt változattal Ebben az esetben a kódolt jelszavakat tartalmazó fájl lehet akár mindenki számára elérhető, hiszen abból az eredeti jelszó nem fejthető meg. Ilyen módszert alkalmaz a UNIX rendszerek többsége a felhasználók jelszavainak tárolására. Annak oka, hogy az utóbbi időkben fejlesztett UNIX rendszerek esetén a jelszavakat tartalmazó fájl mégsem publikus az, hogy az ilyen tárolás megkönynyíti a korábban már említett szótárt használó szisztematikus támadást, ha a használt kódolás algoritmusa a támadó számára ismert. A jelszavak lehallgatásának megakadályozása
érdekében fejlesztették ki a felhasználó által ismert algoritmussal történő azonosítást. Ebben az esetben létezik egy a felhasználó és a rendszer által ismert algoritmus, ami általában két, terminálon begépelhető betűsorozatot rendel egymáshoz. A rendszer belépéskor egy véletlen betűsorozatot ad a felhasználónak. A felhasználónak az algoritmust alkalmaznia kell a megadott sorozaton, és annak eredményével kell válaszolnia. Ebben az esetben az esetleges behatoló akár tudhatja is a két karaktersorozatot, de azt nem tudja többet használni, mert a rendszer mindig más és más betűsorozatot használ egy felhasználó beléptetéskor. Ez az azonosítási eljárás természetesen akkor fog jól működni, ha mindegyik felhasználó esetén különbözik a használt algoritmus. Ezt úgy oldja meg a rendszer, hogy az algoritmusnak két bemeneti paramétere van Az egyik paramétert a rendszer az első belépéskor A dokumentum használata |
Tartalomjegyzék | Irodalom Vissza ◄ 181 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 182 ► közli a felhasználóval, és ezután minden alkalommal ezt a paramétert használja a felhasználó azonosításakor, a rendszer által minden belépéskor külön generált változó paraméterrel együtt. 6.22 A rendszer biztonságát növelő általános módszerek A rendszer elleni támadások megakadályozásának általános módszere a veszélyeztetett pontok figyelése (threat monitoring). Ilyenkor folyamatosan vizsgálja a rendszer a felhasználók tevékenységét, és a gyanús aktivitást jelzi a gép rendszergazdájának vagy a felhasználónak. Gyakori pl, hogy a felhasználót belépésekor tájékoztatják arról, hogy mikor használta utoljára a rendszert, illetve az azóta eltelt időben hány sikertelen – hibás jelszavú – belépési kísérlet történt. Gyakori megoldás, hogy
a hibás jelszó megadásakor a rendszer mesterségesen lelassul, és egyre hosszabb ideig váratja a felhasználót a jelszó begépelése után, így nehezítve meg a szisztematikus támadást. Még szigorúbb, de gyakori megoldás, hogy a rendszer néhány sikertelen belépési próbálkozás után a felhasználó belépési lehetőségét meghatározott ideig letiltja. Az esetleges betörések feltárására szolgál az ún. aktivitás-naplózás (audit logging), amelyben a rendszer feljegyzi az egyes erőforrásokhoz történő hozzáférés időpontját, a műveletet végző felhasználót, valamint az erőforráson végzett műveletet. Ez a módszer ugyan nem véd az illetéktelen hozzáférésektől, de az elkövető utólagos azonosítását megkönnyíti A rendszer publikus, vagyis több felhasználó által is elérhető csatornán továbbított üzeneteinek lehallgatását megakadályozó módszer a kódolás vagy rejtjelezés (encryption). Ennek az a célja, hogy az
üzenetet olyan módon alakítsa át, kódolja, hogy az értelmezhetetlen legyen a csatornát figyelő behatoló számára Az üzenet valódi címzettje valamilyen többletinformáció (ún kulcs) segítségével képes az üzenet eredeti tartalmát visszaállítani A rejtjelezés elsődleges felhasználói a katonai alkalmazások, azonban napjainkban a civil szférában is rohamosan terjed a használata. A rejtjelezéssel rokon terület az üzenet, ill. a partner hitelesítése, ami a kommunikációs partnerre, ill. az általa küldött üzenetre vonatkozik Egy publikus csatornán érkező üzenet alapján a címzett nem lehet biztos az üzenet küldőjének személyében, ill. abban sem, hogy az elküldött üzenetet nem változtatta-e meg valaki. Az Interneten pl nagyon egyszerű olyan emailt küldeni, amelyben nem a tényleges írója van küldőként megnevezve Az ilyen támadások kivédése érdekében az üzeneteket többletinformációval látják el. Ez lehet a küldőt
azonosító ún elektronikus aláírás (electronic A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 182 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 183 ► signature), vagy más, a tényleges üzenetből és a küldőt azonosító információból generált kódolt üzenetrész. 6.3 Rosszindulatú programok Az ún. rosszindulatú programokat a szoftverfejlesztők azzal a céllal hozzák létre, hogy azok különféle ártalmas tevékenységet végezzenek a számítógépes rendszerekben. Példák az ilyen tevékenységekre: • • • • fájlok törlése vagy átírása, adatok módosítása, az operációs rendszer működésének „felborítása”, hálózati kapcsolatok tönkretétele. A rosszindulatú szoftver-működést előidéző programoknak három fajtáját szokás megkülönböztetni: 1. vírus (virus), 2. féreg (worm), valamint 3. trójai faló (Trojan horse)
A különbség abban nyilvánul meg, hogy ezek a programok miként fejtik ki hatásukat. Az elnevezések a biológiai, ill a történelmi hasonlóságra utalnak 6.31 Vírusok Legnagyobb mértékben a vírusprogramok fordulnak elő. Számuk több tízezerre tehető, s tömegesen jelennek meg újabbak A vírus olyan kódszegmens, amely meglevő programokhoz csatolódik és valamely előre meghatározott akciót hajt végre akkor, amikor a befogadó program futására kerül sor. Tipikus akció az operációs rendszer módosítása, fájlok átalakítása vagy törlése. Mindehhez járul még az is, hogy a vírus újabb programokhoz kötheti magát, vagyis tovább tud terjedni. A vírus nem önálló program, hanem egy programrészlet, amely megpróbál más programokat megfertőzni, vagyis kódjukba saját utasításait beiktatni. A megfertőzött program elindításával a vírus is futni kezd, ami egyrészt további szaporodását, vagyis újabb programok megfertőzését, másrészt
valamilyen káros tevékenység végzését jelenti. Ez a tevékenység általában fájlok módosítása, törlése, de előfordult már, hogy vírusok megkísérelték a rendszer fizikai eszközeit is károsítani, pl. a rendszerparaméterek megváltoztatásával Gyakori támadás az operációs rendszer kritikus A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 183 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 184 ► fájljainak tönkretétele. A vírus káros tevékenysége általában csak ritkán, valamilyen külső körülmény (pl. jelentős dátum) hatására aktivizálódik, hiszen különben nagyon hamar fény derülne a fertőzésre. A vírus programok elsődleges célpontjai azok a rendszerek, amelyekben nincs vagy nagyon kezdetleges a védelmi rendszer, hiszen a fertőzés alapja egy futtatható fájl módosítása, ami minden jól védett rendszerben tiltva van. Ennek
megfelelően szinte ismeretlenek a UNIX alatt futó vírusok, viszont több ezer olyan vírust ismerünk, amelyek PC-n terjednek Mint a működése mutatja, a vírus csak végrehajtható programokat fertőz meg. Eszerint adatfájlokhoz nem kapcsolja magát, azokat nem fertőzi Fontos gyakorlati példa erre a Microsoft Word szövegszerkesztő, amelynél a DOC kiterjesztésű fájlok futási kódot is tartalmaznak, ezért vírusérzékenyek. Ezzel szemben az RTF-be (Rich Text Format) konvertált Wordfájlok már nem kaphatnak vírust, mivel az RTF mindig csak tiszta adatfájlt képvisel. Nem tartalmaz futó kódot az E-mailen küldött üzenet, levél sem. Ezek csak olvasásra szánt szövegek, melyek önmagukban nem hordozhatnak vírust. Más a helyzet viszont az E-mailhez csatolt fájlokkal Ha egy ilyen fájl futtatható kódot foglal magában, akkor fennáll a lehetősége annak, hogy vírusakció fog bekövetkezni, a fájl megnyitását követően. A tapasztalatok szerint ez egy
bevett módja a személyek által történő szándékos terjesztésnek Egy számítógépre cserélhető lemezen vagy Interneten keresztül kerülhet vírushordozó program. A Microsoft Word, ill Excel fájlok (DOC, ill XLS kiterjesztéssel) komoly mértékben járulnak hozzá a vírusterjedéshez, a bennük levő futó kódok miatt. 6.32 Férgek A féreg annyiban hasonlít a vírushoz, hogy képes magát reprodukálni, másrészt szintén az operációs rendszerben, ill. az alkalmazásokban okoz javíthatatlan károkat Ami a lényeges eltérést jelenti, az abban áll, hogy a féreg egy teljesen önálló program, amely kizárólag hálózati kapcsolatokon keresztül terjed. Tevékenysége nemcsak fájlok módosítására és törlésére terjed ki, hanem a hálózati működés befolyásolására is Lehetővé teszi, hogy a féreg program szerzője a hálózaton keresztül, védett információt kapjon vissza, vagy olyan akciót hajtson végre, amely a rendszer tulajdonosának okoz
közvetlen kárt. Az információlopás a felhasználói jelszavak (passwordök), vagy fontos üzleti, kutatási adatok megszerzésére is irányulhat A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 184 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 185 ► A féreg gyakori célja a rendszerbe való belépése után önmagának minél több példányban történő futtatása. A féreg programnak sok esetben nincs is a rendszert, ill. annak erőforrásait közvetlenül romboló hatása, azonban a több példányban történő futással leterheli a rendszer központi erőforrásait, és ezzel kritikusan lerontja annak teljesítményét. Mindennek a következménye a rendszer leállása is lehet. A témakörben igen híressé vált az az ún. Internet féreg, amelyet Robert Tappan Morris, az amerikai Cornell Egyetem hallgatója készített 1988ban. Ez a féreg, kihasználva a UNIX
rendszerekben akkor meglevő biztonsági lyukakat, az Interneten terjedt Támadása során felhasznált több jelszó-feltörő algoritmust, és sikerrel fertőzött meg tucatnyi, az Egyesült Államokban működő szervert. A rendszergazdáknak viszonylag hamar sikerült visszafejteni az Internet féreg működését, és egy nap alatt elkészítették a támadását kivédő programot. Ennek ellenére az így okozott kárt 100.000 dollár körülire becsülték A féreg szerzőjét bíróság elé állították, majd felfüggesztett szabadságvesztésre és pénzbüntetésre ítélték. Morris az „innovatív fejlesztésével” egyébként a szakmai körökben is nevet szerzett. Módszere számos szakkönyvben és tankönyvben szerepel Megjegyzendő, hogy egy féreg létrehozása igen komoly szakmai felkészültséget igényel. A szerzőnek jól kell ismernie a hálózati működést, a kommunikációs protokollokat, valamint az operációs rendszerek fejlesztési részleteit.
Emiatt van az, hogy a férgek előfordulási aránya jóval kisebb, mint a vírusoké. Ugyanakkor azonban az általuk okozható kár általában súlyosabb, mint a vírusok esetében. Egy célzottan kifejlesztett féregprogram egész intézmények, vállalatok internetes Web-helyét képes károsítani A napjainkban észlelt károkat az USA-ban néha már dollár-milliárdokban is lehetett mérni. 6.33 Trójai faló Az elnevezés a görög mitológia híres megtévesztési akciójára utal. A trójai faló programok nem azt, vagy nem csak azt a funkciót teljesítik, amelyre hivatalosan deklarálva vannak. A bennük levő rejtett funkció valamilyen káros tevékenység kifejtésére irányul: felhasználói password-ök ellopása, diszkek letörlése stb. A legtöbb esetben a meghirdetett feladat helyes végrehajtása történik meg, míg a károkozás a háttérben nyilvánul meg A trójai faló sok mindenben hasonlít a vírushoz: mindkettő valamelyik program működése mögé
rejtőzik, és káros hatásuk is hasonló módon jelentkezik. Mindazonáltal a két megoldás között lényeges különbségek A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 185 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 186 ► vannak: A trójai faló nyilvánosan árusított programban van elrejtve, másrészt pedig önmagát nem reprodukálja. A vírusok viszont a meglevő programokhoz csatolják magukat, a fertőzés továbbterjedésével egybekötve A működési módból adódóan egy trójai faló program hatása csak akkor jelentkezik egy rendszerben, ha ott olyan szoftver installálása és végrehajtása történik meg, amely ezt a fajta rosszindulatú programot tartalmazza. A lehetséges források: nyilvános elérésű fájl-szerverek, Internet-helyek, egyetemi-főiskolai számítógépes laboratóriumok, szabad elérésű és ingyen letölthető (ún. public
domain) szoftverek A legtöbb rendszer engedélyezi felhasználóknak saját alkalmazások fejlesztését, ill. saját vagy mások által írt alkalmazások futtatását Az alkalmazások általában az azokat elindító felhasználó jogosultságait birtokolva futnak A trójai faló programok ezt használják ki. A rosszindulatú programozó az alkalmazás amúgy hasznos és dokumentált működésén túl beépít valamilyen, csak az általa ismert, a felhasználó által láthatatlan funkciót, pl. átmásolja a felhasználó titkos fájljait az alkalmazás írója által elérhető helyre A trójai faló programok gyakran kihasználják azt, hogy az operációs rendszer a keresési utat (search path) bejárva keres egy adott parancsot végrehajtó programot. Ha a rosszindulatú behatoló a keresési úton előbb megtalálható helyen képes egy trójai faló programot elhelyezni, ami pl. egy rendszerparancsot „utánoz”, minden felhasználó az ő általa írt trójai programot
fogja használni, mivel az operációs rendszer a kívánt igazi program előtt találja meg azonos néven a kártevő programot. Közkedvelt trójai faló típusú behatolás többfelhasználós rendszerekben az, hogy egy ún. ál-login programot írnak, mely ugyanolyan beléptető képernyőt biztosít a felhasználónak, mint az eredeti társa. A felhasználó beléptetésekor a trójai faló login program elmenti a támadó számára a felhasználó nevét és jelszavát, így férve hozzá annak jogosultságaihoz. Ilyen támadások megelőzése érdekében használja a Windows XP azt a módszert, hogy belépés előtt a felhasználónak újra kell indítania a rendszer felhasználói felületét, a CTRL+ALT+DEL leütésével. Rejtekajtó (trap door) használata Az ún. rejtekajtó használata hasonló jellegű támadás, mint a trójai faló programoké, ezért azt is ebbe a kategóriába soroljuk A támadó által készített normál programban olyan részek vannak elrejtve,
amelyek speciális módon aktivizálódnak a rejtekajtót megvalósító átbocsátó helyen keresztül, és jogosulatlan tevékenységet végeznek. Különösen veszélyes az, ha támadó- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 186 ► Operációs rendszerek Védelem és biztonság A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 187 ► nak a fordítóprogramokba, illetve programkönyvtárakba sikerül rejtekajtót építenie, hiszen ekkor a lefordított kódba kerül a rejtett tevékenység kódja, s így szinte lehetetlen azt felderíteni. 6.34 Védekezési módok A vírusok elleni védekezésben a számítógépes rendszerek használata során betartandó óvintézkedések és rendszabályok a legfontosabbak. Mindehhez járulnak még azok a szoftver-termékek, amelyek képesek lehetnek a vírusok felfedésére és eltávolítására. Ezek az ún vírusirtó programok Néhány javasolható rendszabály: • Csak
megbízható cégtől vásárolt, „gyári csomagolású” szoftvert használjunk. Erről biztonsági másolatot is készítsünk • Rendszeresen működtessünk vírusokat kereső és eltávolító programokat, és gondoskodjunk ezek állandó frissítéséről. (Ilyen pl a Norton Anti-Virus nevű termék.) • Installálás előtt mindig ellenőrizzük vírusra az új szoftvereket. • Szigorúan kerülendő az illegálisan másolt szoftverek használata. A féreg programok elleni védekezés lényegében megegyezik az illegális behatolás ellen alkalmazott megoldásokkal. Az elsődleges különbség itt az, hogy egy féreg az egy előre meghatározott működésű programot foglal magában. Emiatt jobban kiszámítható és kezelhető egy támadás, mint egy egyéni behatoló (hacker) esetében. A szokásos védelmi megoldások, mint a tűzfal, ill. a hozzáférés ellenőrzése lényegesen csökkenthetik a féreg bejutásának esélyét Mindemellett még három biztonsági
intézkedés javasolható a rendszeradminisztrátor számára: 1. A rendszer periodikus biztonsági átvizsgálása 2. A felhasználói password-ök periodikus felülvizsgálata 3. Az olyan rendszerfájlok használatának letiltása, amelyekhez megfelelő jogosultság nélkül nem lehet kívülről hozzáférni. A trójai faló kategóriába eső programok felhasználói telepítéssel kerülnek be egy rendszerbe, nem reprodukálják magukat, és nem is terjednek tovább. Mindebből adódik, hogy a megelőzés és a detektálás a felhasználók képzettségén és tevékenységén múlik. ehhez szigorú installációs, működésellenőrzési és megfigyelési szabályok betartására van szükség A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 187 ► Operációs rendszerek A UNIX operációs rendszer A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 188 ► 7. A UNIX operációs rendszer Ebben a fejezetben a UNIX operációs
rendszer főbb tulajdonságait tekintjük át, azzal a céllal, hogy szemléltető példákat mutassunk be az operációs rendszerek gyakorlati megvalósítására. 7.1 A UNIX fejlesztésének története A UNIX legelső változatát Ken Thompson fejlesztette ki a Bell Laboratories-nál, 1969-ben, DEC PDP-7-es gépre. A fejlesztés során csatlakozott hozzá Dennis Ritchie, aki korábban már részt vett a Bell Laboratories-nál folyó többfelhasználós operációs rendszer (a MULTICS) fejlesztésében. A UNIX rendszernek a fejlesztés évei alatt számos változatát dolgozták ki. Az első, már forgalomba is hozott verzió a 6-os volt, amit 1976-ban bocsátottak ki. Mivel a rendszer forráskódját is nyilvánosságra hozták, a UNIX operációs rendszernek számos változata készült az ezt követő években. A ma is párhuzamosan létező UNIX változatok rendszerfelépítése és alapvető funkciói hasonlóak, azonban egymástól lényeges pontokon különbözhetnek A UNIX
rendszerek egységesítésére több kísérlet is történt, így jött létre a POSIX szabvány, ami definiálja operációs rendszerek különböző szintű szolgáltatásait, elsősorban a UNIX rendszerek funkcionalitása alapján. A POSIX szabványhoz ma már az operációs rendszert gyártók döntő többsége igazodik. A UNIX operációs rendszerről beszélve feltétlenül meg kell említeni a C programozási nyelvet, melyet ugyancsak a Bell-nél alakítottak ki, éppen a UNIX fejlesztésének támogatására (Kernighan és Ritchie). A C egy olyan magas szintű programozási nyelv, amelynek fejlesztésénél a kényelmes programozási környezet biztosítása mellet figyelembe vették, hogy hatékony futtatható kódot lehessen a forráskódból előállítani. A C nyelv ezen tulajdonsága tette lehetővé, hogy a UNIX operációs rendszer kódját nagyrészt ezen a nyelven írták. Ez a tény azért fontos, mert így lehetőség nyílt arra is, hogy a UNIX-ot viszonylag
egyszerűen vihessék át különböző hardver platformokra. A hatékony felhasználói és jól definiált programozói interfészen túl ez a tulajdonsága alapozta meg a UNIX népszerűségét A UNIX rendszer használata viszonylag gyorsan elterjedt. A Bell Laboratories-on kívül eleinte elsősorban a kutatóintézetekben és egyetemeken kezdték használni. A UNIX fejlődésében döntő lépés volt a kaliforniai Berkeley Egyetemen DEC-VAX gépre kidolgozott új rendszerváltozat (Bill A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 188 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom A UNIX operációs rendszer Vissza ◄ 189 ► Joy és Ozalp Babaoglu, 1978). Ennek legsikeresebb része a memóriakezelő egység lett. Az ebben alkalmazott megoldások lehetővé tették nagyméretű programok futatását is. Erre már az USA központi kormányzata is felfigyelt, s így a Védelmi Minisztérium finanszírozásával
egy szabványos UNIX rendszert hoztak létre Berkeleyben. A projekt kiterjedt a katonai célra kialakított számítógép-hálózati rendszer, az ARPANET kiszolgálására is. Ekkor alapozódott meg a később a polgári szférában is óriási teret hódító Internet, a TCP/IP hálózati protokollal együtt A Berkeley UNIX-ba beépítették a TCP/IP protokollt, és azzal együtt forgalmazták. Mindez nagymértékben előmozdította az Internet hálózati architektúra elterjedését, amely jelenleg már domináns szerepet tölt be a világban. A jelenleg beszerezhető UNIX rendszerek nemcsak a Bell-től vagy Berkeleyből származnak. A nagyobb számítógépgyártó cégek szinte mindegyike rendelkezik olyan saját fejlesztésű és tulajdonú UNIX-változattal, amelyet világszerte forgalmaz. A DEC cég VAX gépein és Alpha munkaállomásain Ultrix néven működik ilyen rendszer A Microsoft újraírta a UNIX-ot, a PC-kben használt Intel 8088-as családra: ez a XENIX. Az IBM-nek
is van saját UNIX-a, amely PC-kre, munkaállomásokra (pl. RSX6000), nagygépekre egyaránt rendelkezésre áll, AIX néven A széles körű elterjedtségnek köszönhetően a UNIX-ot minden területen alkalmazzák: oktatási, kutatási, katonai, vállalati, közigazgatási szférától a gyártásirányításig, illetve folyamatszabályozásig terjedően. Az egymástól független kibocsátások és az eltérő hardverek miatt a jelenlegi UNIX rendszerek még nem teszik lehetővé, hogy egy A platformon fejlesztett alkalmazói program gond nélkül tudjon működni egy B platform UNIX-a alatt. Az A és B közti különbséget jelenleg speciális interfészprogramokkal hidalják át. Ma már igen erős piaci, felhasználói igény mutatkozik arra, hogy bármelyik UNIX-os alkalmazói rendszer működni tudjon bármelyik UNIXos gépen. Ez a cél egyrészt további interfészek kialakításával, másrész pedig az újabb UNIX rendszerek egymás felé közelítésével érhető el
Jelenleg több egységesítési, szabványosítási projekt is folyamatban van az Egyesült Államokban. Ezeket ipari, illetve szabványügyi testületek (IEEE, ANSI, ISO) kezdeményezték és finanszírozzák. A folyamatok biztató konvergenciájának vagyunk tanúi, amihez a C nyelv megtörtént szabványosítása (ANSI C szabvány) is hozzájárul. Az igazi mozgatóerő azonban az, hogy a kibocsátó cégeknek is érdekük az egységes UNIX rendszer létrehozása. A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 189 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom A UNIX operációs rendszer Vissza ◄ 190 ► 7.2 A UNIX működésének alapjai Mint a legtöbb operációs rendszer, a UNIX is két elválasztható részből áll: a belső magból és a rendszerprogramokból. A belső mag szolgáltatásai rendszerhívásokon keresztül érhetők el. A rendszerhívások definiálják a UNIX programozói interfészét,
melyet a különböző alkalmazások elérhetnek. A belső mag fő részei a fájlkezelő rendszer, a CPU-ütemező, memóriakezelő egység. A rendszerprogramok a belső mag rendszerhívásaira támaszkodva olyan funkciókat látnak el, mint a programfordítás, programfuttatás, fájlkezelés stb. A rendszerprogramok állnak közvetlen kapcsolatban a felhasználóval és biztosítják a rendszer felhasználói interfészét A UNIX rendszerhívásai három kategóriába sorolhatók: fájlkezelés, folyamatok vezérlése, és információ manipulálása. Az I/O-eszközöket a UNIX speciális fájlokként kezeli, így az I/O alrendszer a fájl-rendszerbe épül. Ezért a UNIX-ban nem beszélünk külön I/O-kezelésről A fájlok fa struktúrájú könyvtárakba vannak szervezve. A könyvtárleírók maguk is fájlok, amelyek az adott könyvtárban levő alkönyvtárak és fájlok listáját, a fájlokhoz tartozó adatmezőkre vonatkozó adatokat, valamint az aktuális könyvtár
szülőkönyvtárára mutató hivatkozást tartalmazzák. Mint említettük, az I/O rendszer úgy van megszervezve, hogy a felhasználó számára a perifériák is tisztán fájlokon keresztül jelennek meg a rendszerben, vagyis a fájlokkal azonos rendszerhívásokon keresztül érhetők el az I/O egységek. A különböző I/O-eszközökhöz a rendszer külön meghajtót (driver) használ, amelyben rendelkezésre áll az eszköz kezeléséhez szükséges információ. Az I/O-eszközt reprezentáló fájl elérésekor a kernel detektálja, hogy speciális fájlról van szó, és a standard fájlkezelő rutin helyett az eszközhöz tartozó rutint futtatja le. Az UNIX multiprogramozott, időosztásos operációs rendszer. A processzek létrehozhatnak újabb processzeket a fork nevű rendszerhívással. A létrejövő új folyamatot gyermek folyamatnak, míg a létrehozó folyamatot szülő folyamatnak nevezzük a köztük lévő leszármazási viszony miatt. A gyermek folyamat
örökli a szülő folyamat erőforrásait, és (kezdetben) a szülővel azonos kódot hajt végre A fork rendszerhívás lehetőséget nyújt a két processz megkülönböztetésére eltérő visszatérési értéken keresztül, így a két folyamat további működése eltérő lehet. A szülő folyamat általában megvárja a gyermek folyamatainak befejeződését A közös erőforrásokon osztozó, egymással „rokonsági” viszonyban lévő processzek között viszonylag könnyen megszervezhető az együttműködés A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 190 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom A UNIX operációs rendszer Vissza ◄ 191 ► közös feladatok megoldására. A folyamatok kezelését megkönnyítendő, több processz egy összefüggő csoportba is szervezhető. Az operációs rendszerben lehetőség van egy processz-csoport minden tagján azonos műveletet végrehajtani, pl.
jelzést küldeni a csoport tagjainak Ezek a sajátosságok lényeges különbséget jelentenek a UNIX és a többi operációs rendszer között. A CPU-ütemezés igyekszik biztosítani az interaktív processzek számára a viszonylag kis válaszidőt, a batch programoknak a megfelelő átfutási időt, és elkerülni a folyamatok kiéheztetését. Ezek a szempontok gyakran ellentmondásba kerülnek a rendszer működése során, így egy adott pillanatban nem feltétlenül teljesül maradéktalanul mindegyik szempont. A felhasználói módú processzek ütemezése prioritásos. A processz prioritási száma futása során változhat. Függ a processz futással, ill várakozással eltöltött idejétől, de hatással lehet rá a processzt indító felhasználó is, a processz egy paraméterének (nice szám) megadásával. Minél nagyobb CPU-időt halmozott fel egy processz, annál kisebb lesz a prioritása, és viszont, vagyis a CPU-ütemezésben negatív visszacsatolás
érvényesül. Ez a mechanizmus szolgál az éheztetés elkerülésére. Az ütemezés ún preemptív időszeletes ütemezés, vagyis megadott időintervallumonként (ún. időszeletenként) a futó folyamat futása megszakad, és a rendszer ellenőrzi, nincs-e a futó folyamatnál magasabb prioritású futásra kész processz. Ha talál ilyet, akkor a futó folyamat futása megszakítható akkor is, ha az önként nem mond le a futás jogáról. A UNIX memóriakezelése tárcserét (swapping) alkalmaz, ha nem áll rendelkezésre a folyamatok futásához elegendő memória. A tárcsere alkalmával egy várakozó folyamat teljes memóriatartalma a háttértárra mentődik, felszabadítva az általa foglalt memóriát Az arra vonatkozó döntést, hogy melyik folyamat kerüljön ki vagy be, az ütemező processz (más nevén: swapper) hozza. Az ütemező rendszeres időközönként (pl 4 másodpercenként) akcióba lép, hogy megvizsgálja a memória kihasználtságát, ill a
cserélendő folyamatokat Kevés szabad memória esetén egy folyamat nagy valószínűséggel kikerül a háttértárra, ha valamilyen perifériás művelet befejezésére várakozik, vagyis tétlen, továbbá ha nagy memóriát foglal, vagy pedig már régen bent van a memóriában. A perifériás művelet befejezése után azonban annál nagyobb valószínűséggel kerül vissza a memóriába, minél régebben került ki onnan, ill. minél kisebb a helyigénye A tárcsere viszonylag időigényes művelet, ezért a UNIX igyekszik a tárcserék számat minimalizálni, mégpedig virtuális memóriakezelés segít- A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 191 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom A UNIX operációs rendszer Vissza ◄ 192 ► ségével. A virtuális memóriakezelés a lapigénylés (demand paging) módszerén alapszik. Amikor egy folyamat egy memórialapot igényel és az nem áll
rendelkezésre az aktív memóriában, a belső magban laphiba esemény keletkezik. A futó folyamat futása megszakad, a rendszer kijelöl egy memórialapot, ahová a hivatkozott, eddig a diszken tárolt memórialapot beolvassa A lapcserék számának minimalizálása érdekében a rendszer a cserélendő memórialap kiválasztására speciális becslési eljárást használ A különböző UNIX változatok egymástól eltérő algoritmust alkalmaznak a továbbiakban nagy valószínűséggel nem használandó, vagyis a háttértárra kiírható lap kiválasztására. A UNIX lehetőséget biztosít a processzek egymás közötti kommunikációjára az ún. csővezeték (pipe) segítségével A csővezeték egy FIFO tároló, amely két (vagy több) processz közötti bájtfolyam átvitelére ad lehetőséget. Az adatforgalom mindig egyirányú, azonban több folyamat is írhat és olvashat ugyanazon csővezetékből. A csővezeték megvalósítása fix hoszszúságú fájl formájában
történik Ennek elérése viszonylag egyszerű a folyamatok számára, mert a kommunikáló folyamatok tipikusan szülőgyermek viszonyban vannak, így osztoznak az erőforrásokon A FIFO tárolós kommunikációt a UNIX-ban kiterjesztették a hálózati kommunikációra is, az ún. foglalat (socket) bevezetésével A foglalat a csővezetékkel ellentétben egymástól független folyamatok kommunikációjára szolgál. A foglalat valójában egy kommunikációs végpont, melynek van egy hozzárendelt neve. A név segítségével egy processz által nyitott foglalatra hivatkozhatnak akár független processzek is, vagyis kommunikációs kapcsolat alakítható ki két független folyamat között. A foglalatokon történő kommunikáció a csővezetékkel ellentétben kétirányú lehet Az információcsere a megfelelő hálózati protokollok felhasználásával megy végbe: például az Interneten történő kommunikáció a TCP/IP protokollt használja. A felhasználói folyamatok a
hálózati protokollokkal a foglalatokon keresztül tudnak kommunikálni A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 192 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Irodalom Vissza ◄ 193 ► Irodalom Általános operációsrendszer-ismeretek Abraham Silberschatz – Peter B. Galvin – Greg Gagne: Applied Operating System Concepts, First Edition. USA, 2000, John Wiley & Sons, Inc, p 840, ISBN 0-471-36508-4 Abraham Silberschatz – Peter B. Galvin: Operating System Concepts, Fifth Edition. USA, 1998, Addison-Wesley Publishing Company, p 888, ISBN 0-201-54262-5 Andrew S. Tanenbaum – Albert S Wooddull: Operációs rendszerek Budapest, 1999, Panem Könyvkiadó Kft – Prentice Hall International, Inc, 980 oldal, ISBN 963-545-198-0 Andrew S. Tanenbaum: Modern Operating Systems USA, 1992, Prentice-Hall International, Inc., p 728, ISBN 0-13-595752-4 Bakos Tamás – Zsadányi Pál: Operációs rendszerek I–II.
Budapest, 1992, Számalk-Kelenföld Kiadó, 247 oldal, ISBN 963-553-314-4 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: Operációs rendszerek mérnöki megközelítésben. Budapest, 2000, Panem Könyvkiadó Kft., 490 oldal, ISBN 963-545-250-0 Gary J. Nutt: Operating Systems: A Modern Perspective USA, 1997, AddisonWesley Publishing Company, p 630, ISBN 0-8053-12951 Kiss István – Kondorosi Károly: Operációs rendszerek. Budapest, 1992, Műegyetemi Kiadó, 130 oldal, J-55011 Unix operációs rendszer Benyó Balázs – Sziray József: A UNIX és a Windows NT operációs rendszer, SZIF-jegyzet. Győr, 1999, Universitas Kft, 200 oldal Maurice J. Bach: The Design of the Unix Operating System USA, 1986, Prentice-Hall International, Inc, p 471, ISBN 0-13-201757-1-025 Paul K. Andersen: Just Enough UNIX United Kingdom, 1997, McGrawHill Companies Inc, p 360, ISBN
0-256-21276-7 Samuel J. Leffler – Marshall Kirk McKusick – Michael JKarels – John S.Quarterman: The Design and Implementation of the 43BSD UNIX Operating System. USA, 1989, Addison-Wesley Publishing Company, p. 471, ISBN 0-201-06196-1 Uresh Vahalia: Unix Internals: The New Frontiers. USA, 1996, Prentice-Hall International, Inc., p 601, ISBN 0-13-101908-2 A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 193 ► Operációs rendszerek A dokumentum használata | Tartalomjegyzék | Irodalom Irodalom Vissza ◄ 194 ► Hálózatok és elosztott rendszerek Andrew S. Tanenbaum: Számítógép-hálózatok Budapest, 1999, Panem Könyvkiadó – Prentice-Hall International, Inc, 885 oldal, ISBN 963-545-213-6 Eric A. Fisch – Gregory B White: Secure Computers and Networks: Analysis, Design and Implementation. USA, 2000, CRC Press LLC, p 370, ISBN 0-8493-1868-8 George Coulouris – Jean Dollimore – Tim Kindberg: Distributed Systems: Concept and Design. USA,
1994, Addison-Wesley Publishing Company, p. 644, ISBN 0-201-62433-8 James Martin – Kathleen K. Chapman: Lokális hálózatok Budapest, 1992, NOVOTRADE Kiadó – Prentice-Hall International, Inc., 367 oldal, ISBN 963-585-163-4 Larry L. Peterson – Bruce S Davie: Computer Networks: A Systems Approach USA, 2000, Morgan Kaufmann Publishers, p. 748, ISBN 1-55860-577-0 A dokumentum használata | Tartalomjegyzék | Irodalom Vissza ◄ 194 ►