3
TARTALOMJEGYZÉK
Bevezetés ...................................................................................................................... 7 Alapfogalmak ............................................................................................................. 10 Az operációs rendszer határai .................................................................................. 10 Az operációs rendszerek feladatai ........................................................................... 12 Az OR felületei .................................................................................................... 13 Memóriakezelés ................................................................................................... 13 Folyamatok szervezése ........................................................................................ 14 Perifériakezelés .................................................................................................... 14 Állománykezelés .................................................................................................. 15 Hibakezelés, megbízhatóság, védelem ............................................................... 15 Rendszerkezelés, rendszerkönyvelés .................................................................. 15 Az operációs rendszerek története ....................................................................... 17 A kezdetek ................................................................................................................ 19 A felügyelõ programok megjelenése ........................................................................ 19 Szalagos és lemezes operációs rendszerek .............................................................. 20 A batch programozás megjelenése ........................................................................... 21 Idõosztásos rendszerek ............................................................................................ 23 A UNIX operációs rendszer ..................................................................................... 24 Absztrakt és virtuális gépek ..................................................................................... 25 OR-ek kis számítógépekre ....................................................................................... 26 Hálózatok és osztott rendszerek ............................................................................. 28 Összefoglalás ............................................................................................................ 29 Az operációs rendszerek szerkezete .................................................................... 31 Forráskódok szervezése ............................................................................................ 31 Társzervezés ............................................................................................................. 33 Végrehajtási struktúrák ............................................................................................ 37 Klasszikus szervezés ............................................................................................ 37 Rendszereljárások alkalmazása ............................................................................ 38 Nyitott környezetek ............................................................................................ 38 Komponensek interakciója ....................................................................................... 39 Adaptálhatóság ......................................................................................................... 40 Az operációs rendszerek felületei ......................................................................... 42 Válasznyelvek ....................................................................................................... 47 Parancsállományok ............................................................................................... 48 Szûrõk ................................................................................................................... 49 A program interface .................................................................................................. 50
oprendszerek.pmd
3
4/29/2003, 11:00 AM
TARTALOM
4
A programok betöltése......................................................................................... 50 Rendszerszolgáltatások ........................................................................................ 51 Memóriaszervezés .................................................................................................... 52 Memória-allokáció .................................................................................................... 53 Allokáció egyfelhasználós rendszereknél ............................................................ 53 Allokáció többfelhasználós, többfeladatos rendszerekben ................................ 54 Adatstrukturák dinamikus allokációhoz ............................................................. 56 Allokációs stratégiák dinamikus allokáláshoz ..................................................... 58 Átrendezés, tömörítés ......................................................................................... 60 Áthelyezési módszerek ............................................................................................ 60 Áthelyezés szoftver úton ..................................................................................... 60 Áthelyezés báziscímekkel.................................................................................... 61 Áthelyezés relatív címzéssel ............................................................................... 61 Áthelyezési regiszterek alkalmazása ................................................................... 62 Egyéb technikák ....................................................................................................... 62 Overlay struktúra ................................................................................................. 62 Memóriavédelem ...................................................................................................... 63 Egyfelhasználós rendszerek................................................................................. 63 Többfelhasználós rendszerek .............................................................................. 63 Virtuálismemória-kezelés ....................................................................................... 65 Memóriaáthelyezési technikák ................................................................................ 66 Áthelyezési táblázat ............................................................................................. 66 Leképezési regiszterek ....................................................................................... 67 Lapra bontás ........................................................................................................ 68 Virtuálismemória-kezelés ......................................................................................... 70 Memóriaáthelyezés .............................................................................................. 70 Laphiba ................................................................................................................ 72 A virtuális memóriakezelés technikái ................................................................. 72 Háttértár kezelése .................................................................................................... 75 Szegmentált virtuális memória ................................................................................ 75 Folyamatok szervezése ........................................................................................... 77 A folyamat leírása ..................................................................................................... 78 A folyamatok és az erõforrások kapcsolata .............................................................. 79 A folyamatok állapotai .............................................................................................. 81 Környezetváltás ........................................................................................................ 84 Folyamatvezérlõ mûveletek ..................................................................................... 85 Folyamatok elõállítása .......................................................................................... 85 Folyamatok megszüntetése ................................................................................. 88 Attribútumok olvasása és megváltoztatása ......................................................... 88 Felfüggesztés és újraindítás ................................................................................. 89 Az ütemezés .............................................................................................................. 90 Ütemezési célok és eszközök .................................................................................. 91 Néhány fontos jellemzõ ........................................................................................... 92 Prioritások ............................................................................................................ 92
oprendszerek.pmd
4
4/29/2003, 11:00 AM
TARTALOM
5
Az önköltség ......................................................................................................... 93 Megszakíthatóság ................................................................................................ 93 Batch folyamatok ütemezése ................................................................................... 94 Hosszú távú ütemezés ......................................................................................... 94 Középtávú ütemezés ........................................................................................... 94 Rövid távú ütemezés ........................................................................................... 95 Interaktív folyamatok ütemezése ............................................................................ 95 Középtávú ütemezés ........................................................................................... 96 Rövid távú ütemezés ........................................................................................... 96 Hardver támogatás ................................................................................................... 98 Folyamatok interakciói ............................................................................................ 99 A holtpont ................................................................................................................. 99 Holtpontmegelõzés ........................................................................................... 100 Holtpontelkerülés .............................................................................................. 101 Holtpontérzékelés ............................................................................................. 102 Holtpont megszüntetése .................................................................................. 102 A kölcsönös kizárás (Mutual exlusion) .................................................................. 103 Folyamatok közötti kommunikáció ....................................................................... 105 Szinkronizálás .................................................................................................... 106 Közvetlen kommunikáció üzenetek küldésével és fogadásával ...................... 106 Közvetlen kommunikáció csatornahasználattal ............................................... 107 Közvetett kommunikáció .................................................................................. 107 Megszakítások, I/O-kezelés .................................................................................. 108 A megszakítások típusai ......................................................................................... 108 Megszakítások rendezése, maszkolás .................................................................... 110 Input és output készülékek kezelése ................................................................... 110 Órák és idõzítõk ..................................................................................................... 112 A készülékek kezelése ........................................................................................... 115 Az I/O készülékek jellemzõi .................................................................................. 115 Tároló típusú készülékek .................................................................................. 116 Billentyûzet ........................................................................................................ 119 Az egér ................................................................................................................ 120 Terminálok ......................................................................................................... 120 Nyomtatók ......................................................................................................... 121 Készülékmeghajtók ................................................................................................ 122 Interface-ek és jellemzõik ..................................................................................... 123 Programozási technikák ......................................................................................... 124 Adatstruktúrák ................................................................................................... 124 A polling technika .............................................................................................. 124 Megszakítási technika ....................................................................................... 125 Pufferek alkalmazása ......................................................................................... 125 Cache alkalmazása ............................................................................................. 126 A meghajtók részfeladatai ...................................................................................... 127 Elõkészület az I/O-mûveletre ........................................................................... 127
oprendszerek.pmd
5
4/29/2003, 11:00 AM
TARTALOM
6
Az I/O-mûvelet megindítása ............................................................................. 128 Megszakítás szolgáltatások ................................................................................ 128 Hibaérzékelés és -elhárítás ............................................................................... 128 I/O-mûvelet lezárása ......................................................................................... 129 I/O-mûvelet megszakítása ................................................................................. 129 I/O-ütemezés ......................................................................................................... 129 Az állományok kezelése ........................................................................................ 131 A kötet fogalma és szerkezete ............................................................................... 131 Állományok szervezése .......................................................................................... 133 Egyszerû, folytonos tárolás ................................................................................ 133 Folytonos elhelyezés, kiterjesztésekkel ............................................................ 134 Blokkolt szervezés ............................................................................................. 134 Könyvtárak szervezése ........................................................................................... 136 Az állományok neve ........................................................................................... 136 Az állományok szerkezete ................................................................................. 137 Mûveletek állományokon ....................................................................................... 139 Hibakezelés, megbízhatóság, védelem ............................................................... 142 Hibakezelés ............................................................................................................ 142 Készülékhibák kezelése ..................................................................................... 143 Programhibák kezelése ...................................................................................... 144 A fájl-rendszer hibáinak kezelése ...................................................................... 145 Megbízhatóság ........................................................................................................ 146 Hardver megoldások .......................................................................................... 147 Szoftver megoldások .......................................................................................... 148 Védelem .................................................................................................................. 148 Belsõ védelem .................................................................................................... 149 Kommunikációs adatvédelem ........................................................................... 150 Külsõ védelem .................................................................................................... 151 Jogi védelem....................................................................................................... 152 Rendszerkezelés, rendszerkönyvelés ................................................................. 153 Rendszergenerálás .................................................................................................. 153 A telepítés típusai .............................................................................................. 153 A telepítés módszerei ........................................................................................ 154 Rendszerbetöltés .................................................................................................... 155 Rendszerleállítás .................................................................................................... 156 Szabályos leállítás .............................................................................................. 157 Nem szabályos leállítás ...................................................................................... 157 Rendszertuningulás ................................................................................................ 157 Rendszerkönyvelés ................................................................................................. 158 Osztott operációs rendszerek ............................................................................... 160 OR-ek többprocesszoros környezetben ................................................................ 162 OR-ek hálózatokon ................................................................................................. 162 Osztott OR-ek szervezése ..................................................................................... 164 Irodalomjegyzék ..................................................................................................... 166 Tárgymutató ............................................................................................................ 169
oprendszerek.pmd
6
4/29/2003, 11:00 AM
31
AZ OPERÁCIÓS RENDSZEREK SZERKEZETE
Amint azt láttuk, az OR sem más, mint programok gyûjteménye (rendszere). Amiért meg kell különböztetnünk más (felhasználói) programrendszerektõl, az abból fakad, hogy az OR speciális szerepet játszik a számítógép irányításában. Azért, hogy az OR-t a leghatékonyabbá tegyük, már a rendszer szervezésekor számos szempontot kell figyelembe vennünk. Az eltérõ hardver környezet mellett a felhasználók tervezett száma, a csatlakoztatható I/O készülékek típusai is olyan összetevõk, amelyek egy OR-rel szemben teljesen egyedi követelményeket támasztanak. Ennek az a következménye, hogy nem nevezhetünk meg olyan struktúrát, amely egyértelmûen jobb a többinél. Ebben a fejezetben néhány olyan jellegzetes szempontot mutatunk be, amelyet a legtöbb jól szervezett OR tervezésekor figyelembe kell venni.
FORRÁSKÓDOK SZERVEZÉSE Amikor egy OR-t a forráskódú elemekbõl összeállítunk, akkor az alkalmazott eljárás teljesen azonos azokkal a módszerekkel, amelyeket egyéb nagyméretû szoftver rendszerekben használunk: elsõ lépésként forrásnyelvû modulokat készítünk, ezekbõl egy fordító program segítségével ún. gépi kódú (object) modulokat állítunk elõ. (Elõfordulhat, hogy a fordítási eljárás során programkönyvtárakban tárolt további forrásnyelvû modulokat is felhasználunk.) Ezután – második lépésként az object modulok halmazából elemeket szerkesztünk össze olyan módon, hogy azok futtatható (load) modulokká álljanak össze. (Hasonlóan az elsõ lépéshez, itt is felhasználhatunk forrássszintû modulokat egy erre kijelölt könyvtárból.) Egy OR számos futtatható modult tartalmaz. Ezek a modulok valamilyen másodlagos tárolón helyezkednek el. Ezeket vagy akkor töltjük be, amikor „inicializáljuk” a rendszert, vagy akkor, amikor olyan mûveletet hajtunk végre, amely elvégzéséhez az adott modulra szükségünk van. A következõkben felsorolunk néhány olyan szempontot, amelyet mindenképpen érdemes figyelembe vennünk akkor, amikor OR-t tervezünk. ! Egy eljárás, vagy adatoknak egy halmaza lehetõleg ne legyen két listázott oldalnál
hosszabb, mert ellenkezõ esetben elveszítjük az áttekinthetõséget.
! Minden olyan forráskódot és adatot, amely egy egységbe tartozik, kezeljük együtt.
Egy modul csak azokat az információkat igényelje, amelyekre valóban szüksége van.
! Egy modul a lehetõ legkevesebb más modullal kerüljön kapcsolatba (a függetlenség
elve.)
! A modulok közötti kapcsolat tartásához egyszerû, áttekinthetõ interface-ket hasz-
náljunk.
42
AZ OPERÁCIÓS RENDSZEREK FELÜLETEI
Egy számítógépes rendszer hatékonyságát nagymértékben meghatározza, hogy milyen módon képes kapcsolatot tartani a felhasználókkal. A kommunikáció két irányban valósul meg: egyrészt a felhasználó jelez a rendszernek, ha valamilyen szolgáltatást igényel, másrészt a rendszer küld információt a kért szolgáltatások teljesítésérõl. A kapcsolattartásnak is két módja ismert: ! közvetlen kapcsolattartás során egy interaktív terminálon gépeljük be a parancsot, ! közvetett igény során a programokból adjuk ki a szolgáltatást igénylõ utasítást.
Az OR-nek azt a komponensét, amely a felhasználóval történõ kommunikáció kezeléséért felelõs felhasználói interface-nek nevezzük, és ez két fõ részre osztható: ! A parancs interface azáltal, hogy magas szintû kommunikációt tesz lehetõvé a fel-
használó és az OR között, irányítja a programok futását. (A név onnan ered, hogy a felhasználó parancsok sorozatával mondja meg az OR-nek, milyen rendszer„cselekvést” vár el.) ! A program interface kezeli a futó programokat. Az OR ezen a részrendszeren át tartja a kapcsolatot a programok meg a rendszer által ellenõrzött erõforrások és szolgáltatások között.
A felhasználói interface két komponense kapcsolatban áll egymással. Így például magát a parancs interface-t is egy rendszerprogram segítségével implementáljuk. Számos olyan OR is létezik, amelyben a program interface-nek megvan az a lehetõsége, hogy segítségül hívja a parancs interface-t. Ez módot nyújt a programoknak arra, hogy elõállítsanak egy parancsot, és azt átadják a parancs interface-nek további feldolgozásra.
A PARANCS INTERFACE Bármilyen formában jelenjék is meg egy parancs interface, a gép-ember kapcsolat megvalósításához mindig szükség van egy nyelvre. A felhasználói parancsokat a gép irányába egy parancsnyelv (Command Language) közvetíti. Az OR által visszaadott információt a válasznyelv (Response Language) segítségével fordítjuk le a felhasználó számára elfogadható formában. (Gyakran elõfordul, hogy ezt a két komponenst összevonják egyetlen nyelvvé.)
52
MEMÓRIASZERVEZÉS
A memóriakezelés szükségessége már a számítógépek fejlõdésének kezdeti idõszakában is élesen vetõdött fel: a memóriák ára rendkívül magas, a CPU sebessége viszonylag alacsony volt, és a memóriaelemek csak korlátozott mennyiségben voltak felhasználhatók. Újabb lökést a fejlõdésnek a többfelhasználós rendszerek megjelenése adott: a drága erõforrást meg kellett osztani a konkurens folyamatok között. Ezért a modern számítógépes rendszerek memória típusú erõforrásainak a kezelésére az OR-en belül külön modult fejlesztettek ki: ez a memóriaszervezõ (Memory Management Unit = MMU) részrendszer. Ebben a fejezetben a számítógépek központi memóriájának szervezésérõl, kezelésérõl lesz szó. A központi memória szervezése – az igénybevétel idõrendi sorrendjében – alapvetõen három részprobléma kezelését rejti magában: ! A memória-allokáció nem más, mint egy memóriaterület adott programhoz tör-
ténõ hozzárendelése. Allokációt kell végrehajtanunk minden olyan esetben, amikor egy háttértáron elhelyezkedõ programot aktivizálni akarunk, hiszen ekkor a program – a végrehajtás megkezdése elõtt – bemásolódik a központi tárba. A hatékony memória-allokáció azt jelenti, hogy ! az igényelt memóriát a lehetõ legrövidebb idõn belül bocsátjuk a folyamat rendelkezésére, ! csak akkor allokálunk memóriát, ha az szükséges, ! felszabadítjuk a lekötött memóriát, ha a hozzá tartozó folyamatnak már nincs rá szüksége. ! Az allokált területhez való programillesztést áthelyezésnek nevezzük. Ennek során elõfordulhat, hogy a végrehajtható állapotban eltárolt programban mind a gépi kódú utasítások címrészein, mind az adatok elhelyezési címein módosításokat kell végrehajtani. ! A memóriavédelem a többfelhasználós és a többfeladatos (multitasking) rendszerek egyik alapproblémája: egy felhasználói program csak azt a területet érheti el, amelyet a rendszer a számára allokált. Mivel az OR és a különbözõ alkalmazói programok rendkívül intenzíven használják a memóriát, ezért a hatékonyság növelésének érdekében – a szoftver eszközök mellett – egyre inkább kihasználják a hardver adta lehetõségeket is. Ebben a fejezetben azokat a klasszikus eljárásokat mutatjuk be, amelyek a modern hardver által nyújtható segítséget kevésbé veszik igénybe. Annak ellenére, hogy ezeknek a rendszereknek a széles körû felhasználása az elmúlt évtizedekben virágzott, ezeket a kisebb OR-ek ma is kiterjedten alkalmazzák.
65
VIRTUÁLISMEMÓRIA-KEZELÉS
Az elõzõ fejezetben a memóriakezelés legfontosabb problémáit tekintettük át. A vizsgálat során kiderült, hogy a problémák egy része csak akkor oldható meg hatékonyan, ha a megoldást valamilyen hardver-technika támogatja. Ebben a fejezetben egy ilyen hardver-technikát vizsgálunk meg. A megoldandó probléma a következõ: A gépi kódra történõ fordítás során a fordító (compiler) program olyan címeket generál az utasításoknak és az adatoknak, amelyeket a rendelkezésre álló hardver segítségével elvileg el tud érni. (Ha pl. a CPU címregisztere 1 byte hosszú, akkor az elérhetõ legmagasabb cím 255.) Ha egy adott konfigurációban fizikailag elég sok memória áll rendelkezésünkre a fõtárban, akkor nincs szükség a programok darabolására. A futtatás során mindössze az áthelyezést kell megoldanunk, ha a rendszer többfelhasználós. Ilyenkor az OR gondoskodik arról, hogy a rendelkezésre álló fizikai memóriát a legjobban ki tudjuk használni. Ha azonban a fizikailag megcímezhetõ terület kisebb, mint a fordításkor elvileg rendelkezésre álló legmagasabb cím (azaz a virtuálisan rendelkezésünkre álló terület), akkor a programok futása során gondoskodni kell a fordítás során kialakított virtuális címek átalakításáról olyan fizikai címekké, amelyek ténylegesen rendelkezésre állnak a fõtárban. A megvalósítás során a program egy része van csak a fõtárban (ti. az, amelyikre éppen valamelyik címmel hivatkozunk), a többi rész pedig valamilyen háttértárolón helyezkedik el. Az OR feladata az, hogy megoldja a programrészek cseréjét a kellõ idõpillanatban. A programrészek cseréjének automatikussá tételével a virtuális memóriakezelés elve azt az illúziót nyújtja a felhasználónak, mintha a virtuálisan címezhetõ terület mindig a rendelkezésére állna fizikailag is. A megoldás az, hogy a programokban specifikált virtuális címeket a hivatkozás pillanatában a program át tudja alakítani olyan fizikai címekké, amelyek a fõtárban rendelkezésre állnak. Így a virtuális címeket a programozás – vagy a fordítás – során úgy választhatjuk meg, ahogy az a fordítónak kényelmes, míg a fizikai címek mindig az OR-hez illeszkednek. Fontos, hogy az áthelyezés automatikusan történik, nincs tehát szükség arra, hogy a program speciális parancsokat tartalmazzon a végrehajtáshoz. A módszer nagy elõnye az, hogy a virtuális és a fizikai címek egymástól függetlenek, ezáltal az áthelyezés egyszerûbbé válik: akárhogyan is változnak meg a fizikai címezhetõség határai, a virtuális címek nem változnak, az OR oldaláról tehát jól követhetõk maradnak. Ebbõl fakad a módszer másik elõnye: a memória védelem könnyebben megszervezhetõ, az illegális hivatkozások egyszerûbben érzékelhetõk és kiküszöbölhetõk. Mivel a technikát támogató hardver évtizedekig nagyon drága volt, ezért csak a nagyobb rendszereknél volt használható. Az utóbbi években azonban – elsõsorban a hardver árának rohamos csökkenése miatt – egyre kiterjedtebben alkalmazzák kisebb gépeken is.
77
FOLYAMATOK SZERVEZÉSE
Egy számítógépes rendszer legfõbb feladata az, hogy hatékony munkát tegyen lehetõvé a rendszer használói számára. Ezt azáltal érheti el, hogy végrehajtja a felhasználói programokat. Azokat a tevékenységeket, amelyeket egy program végrehajt, folyamatoknak (processzeknek) nevezzük. Ha egy program rendszerhívásait a program részének képzeljük el, akkor egy folyamat nem más, mint egy végrehajtás alatt lévõ program. (Megjegyezzük, hogy a folyamat aktív fogalom; attól, hogy egy programot betöltünk a memóriába, az még nem válik folyamattá.) A program elindításával keletkezõ folyamat azonban nincs állandóan végrehajtás alatt, gyakran várakoznia kell, mert a számítógép egy másik tevékenységet hajt végre. Amikor a számítógépnek egy CPU-ja van, akkor a folyamatok váltakozva hajtódnak végre. (Nagyon fontos megérteni, hogy egyetlen CPU esetén egy idõpillanatban csak egyetlen folyamat használhatja a CPU-t. Bármennyire úgy tûnik is, hogy több folyamat egyidejûleg fut a rendszerben, a tény mégiscsak az, hogy ezek a folyamatok csak egyegy idõszeletet kapnak meg a CPU használatából [kb. 20 millisecundumot], és váltakozva használják azt.) Ilyenkor szekvenciálisan szervezett folyamatokról beszélünk. Ez a technika legjobban az egyfelhasználós rendszerekben figyelhetõ meg: a folyamat úgy kezelhetõ, mint tevékenységeknek egy olyan sorozata, amelyek egyesével kerülnek végrehajtásra. Multiprogramozás esetén azonban a számítógép erõforrásai egyidejûleg több folyamat között is felosztásra kerülhetnek, így elõfordulhat, hogy egy meghatározott idõpontban több folyamat is végrehajtás alatt van. Ilyenkor a folyamatokat közbeékeltnek nevezzük. Ahhoz, hogy egy tevékenységet végrehajtsunk, mindig el kell indítani egy programot. Az azonban már nem igaz, hogy egy programnak egyértelmûen mindig egy tevékenység feleltethetõ meg. Néhány OR esetén (pl. VMS) egy folyamat egy egész sor programot indíthat el, míg más esetekben (pl. UNIX) teljesen általános, hogy egyetlen program azonos idõben futó különbözõ feladatok végrehajtására alkalmas több folyamatot is mûködtet. Ahhoz, hogy a tevékenységek jól szervezhetõk legyenek, azokat formálisan definiálni, és az OR-ben valamilyen módon reprezentálni kell. Bár a tevékenység fogalma nem adat jellegû, az OR-ben mégis egy adatstruktúrát rendelünk a tevékenységhez. Ezáltal könnyebben nyomon tudjuk követni a tevékenység státusát, és jobban tudjuk szervezni egyes résztevékenységeit. A folyamathoz rendelt adatstruktúrát folyamatellenõrzõ blokknak (process control block [PCB]-nek) nevezzük. Miközben végrehajtunk egy tevékenységet, az mindig felhasznál valamilyen erõforrást. Ezek egy része olyan, hogy mindig szükség van rájuk (CPU, operatív memória), mások felhasználása idõben dinamikusan változik. Az erõforrások nagy része olyan, hogy egyidõben csak egy folyamat tudja ezeket használni. Ezért, ha egy használatban levõ erõforrásra egy másik tevékenységnek is szüksége van, akkor annak várakoznia kell.
90
AZ ÜTEMEZÉS
A számítógépnek meg kell osztania a korlátozottan rendelkezésre álló erõforrásait a folyamatok között. Ezt a munkát is az OR végzi: egyik legfontosabb feladata az, hogy korrekt és hatékony módon gondoskodjék az erõforrások kiosztásáról az erõforrások igénybevételéért jelentkezõ folyamatok között. Azt a mûveletet, amely meghatározza a sorrendet az újrafelhasználható erõforrások igénybevételére, és kiválasztja ezekbõl az aktuális folyamatot, ütemezésnek nevezzük. A rendelkezésre álló erõforrások között is kiemelkedõ helyet foglal el a CPU és az operatív memória. Tekintettel arra, hogy a memória mérete erõsen korlátozott, és általában csak egyetlen CPU áll rendelkezésünkre, az értük folyatott verseny rendkívül kiélezett. Megszerzésüket nehezíti az is, hogy futó folyamatok sohasem folyamodnak ismételten ezekért az erõforrásokért; mûködésük alatt azt feltételezik, hogy ezek mindvégig a rendelkezésükre állnak. Ebben a fejezetben azokkal a módszerekkel foglalkozunk, amelyek e két kitüntetett erõforrás elosztását végzik. A fejezet során mindvégig azt feltételezzük, hogy egyetlen CPU áll rendelkezésünkre. Az operációs rendszer ütemezési stratégiája nagymértékben függ attól, hogy mikor szerez tudomást a folyamat várható erõforrás-igényeirõl, és attól is, hogyan kell azokat kiszolgálni. Ebbõl a szempontból a folyamatokat kategóriákra fogjuk osztani: ! A batch-folyamatok alkotják az elsõ osztályt. Ezek egy job-ban foglalnak helyet,
amelyet mind a felhasználó, mind az OR egységes egészként kezel. Jellemzõjük, hogy a végrehajtásuk általában hosszú idõt vesz igénybe, és ez idõ alatt a felhasználó egyszer sem lép kapcsolatba a futó folyamatokkal. ! Interaktívnak nevezzük azokat a folyamatokat, amelyek interaktív terminálról elküldött felhasználói igényeket elégítenek ki. Ezek általában rövid lefutású folyamatok, amelyeknek erõforrás-igényét befolyásolhatja a végrehajtás ideje alatt küldött felhasználói parancs. ! Real-time folyamatokról beszélünk abban az esetben, ha a folyamat a rendszeren kívül lezajló mûveleteket figyel, ellenõriz és irányít. Ezekre a folyamatokra az a jellemzõ, hogy erõsen behatárolt idõ áll rendelkezésükre a válaszadáshoz, és többnyire szoros kapcsolatban állnak valamelyik I/O készülékkel. Ebben a fejezetben csak az elsõ két típusú folyamatokkal foglalkozunk. Az egyes kategóriákra vonatkozó ütemezési stratégiákat tovább csoportosítjuk: ! A hosszútávú ütemezési stratégiák helyezkednek a legmagasabb szinten. Az ilyen
típusú ütemezésnek az a célja, hogy ellenõrizze azt a sorrendet, amelyben a folyamatok a rendszerbe jutnak. Erre azért van szükség, mert amikor egy programot a rendszerhez csatolunk, akkor egy folyamatot is létrehozunk, és az ehhez tartozó
99
FOLYAMATOK INTERAKCIÓI
A CPU és az operatív memória csak két kitüntetett erõforrás. Az ütemezés során a többi rendelkezésre álló forrás felhasználhatósága is limitálva van. (Gondoljunk a nyomtatókra, a kommunikációs vonalakra vagy a különbözõ háttétárolókra!) Emellett a folyamatok egymástól sem függetlenek: valahányszor két tevékenység ugyanazt az állományt akarja használni, vagy jelzést kíván adni más folyamatoknak saját elõrehaladásáról, a két tevékenység interakcióba lép egymással. Ha tehát az interakció jelenségét általánosan vizsgáljuk, két típust különböztetünk meg: ! Erõforrások osztott használata esetén az interakcióban levõ folyamatok a kor-
látozott mennyiségben rendelkezésre álló erõforrások birtoklásáért versenyeznek, azaz konkurensek. Az ilyenfajta interakció akaratlan, és az interakcióból nem okvetlenül profitálnak a benne részt vevõ tevékenységek. ! A kommunikációból eredõ interakció esetén a folyamatok információt osztanak meg egymással, azaz kooperatívak. Ez az interakció akaratlagos, és az interakcióból a résztvevõk többnyire hasznot húznak. A különbözõ típusú interakciók különbözõ problémákhoz vezethetnek. Mindkét esetben a legnagyobb probléma a holtpont elõfordulása, illetve a kölcsönös kizárás. A következõkben ezekkel a jelenségekkel foglalkozunk.
A HOLTPONT Holtpont egyrészt akkor fordulhat elõ az ütemezés során, ha a folyamatok egy adott halmazában minden egyes elem leköt néhány erõforrást, és egyúttal várakozik is lekötött erõforrás(ok)ra. Ha ilyen esetben a folyamatok egy része olyan erõforrásra várakozik, amelyet mások lefoglaltak, akkor a tevékenységek „megmerevedhetnek”. Holtpont keletkezhet kommunikáció esetén is, ha folyamatok egymás információira várnak, miközben nem tudnak elõrehaladni a saját közlendõik feldolgozásában. Annak ellenére, hogy a holtpont problémáját nagyon széles körben vizsgálták, a feladat korántsem tekinthetõ megoldottnak. Különösen nehéz felfedezni a holtpontot osztott környezetben. Nagyon kevés az az operációs rendszer, amely garantálja, hogy az ütemezés során holtpont nem fordulhat elõ. A megbízható megoldás ugyanis rendkívül drága. Elõször azt vizsgáljuk meg, hogy milyen feltételeknek kell egyidejûleg fennállni ahhoz, hogy holtpont következhessen be. Erre a kérdésre Coffman19 (1971) adott kimerítõ választ, megmutatva, hogy a szükséges feltételek a következõk: 19
Coffman, E.G. et al.: System Deadlocks. CSURV, Vol. 2, No. 3. pp. 67–78. 1971
108
MEGSZAKÍTÁSOK, I/O-KEZELÉS
A különbözõ készülékek kezelése is az OR-ek feladata. Ennek megértése érdekében nagyon fontos, hogy megértsük a megszakításokat mind a hardver, mind a szoftver szemszögébõl. A számítógép-architektúrák egyik legáltalánosabb tulajdonsága a hardvermegszakítás alkalmazása. Ez lehetõvé teszi, hogy ha egy speciális esemény bekövetkezett, akkor felfüggesszünk egy éppen futó programot, és ezzel egyidõben esetleg egy másik folyamatot indítsunk el. Megszakításokkal segíthetjük a készülékek kezelését, ha pl. megengedjük, hogy egy I/O készülék átviteli parancsot fogadjon el a CPUtól anélkül, hogy a készülék állandó CPU-felügyeletet igényelne. Tételezzük fel, hogy egy folyamat elfoglalja a CPU-t, miközben a nyomtató befejez egy nyomtatást. Ha most egy megszakítás érkezik az OR-hez, jelezve a nyomtatás befejezését, akkor az OR megszakítja az éppen futó folyamatot, munkát oszt ki valamilyen módon a nyomtatónak, és visszaadja a vezérlést az imént megszakított folyamatnak. (A végsõ eredmény az, hogy a nyomtatót jobban ki tudjuk használni.) Ahhoz, hogy vissza tudjunk térni a felfüggesztett folyamathoz, szükséges az, hogy a felfüggesztés pillanatában a környezetet megjegyezzük, és azt a megfelelõ pillanatban vissza tudjuk állítani. Világos, hogy ha több megszakítás van folyamatban, akkor a helyzet bonyolódik, de még mindig kezelhetõ marad. Bárhogy is következzék be a megszakítás, az alapkoncepció változatlan marad: ! Mentsük le a végrehajtási címet. ! Mentsük le a státuszinformációkat. (Ezeket általában egy státuszszóban tároljuk.) ! Adjuk át a vezérlést a megszakításkezelõnek.
A MEGSZAKÍTÁSOK TÍPUSAI Természetesen nem minden megszakítás I/O mûvelet következménye. A következõ fejezetben felsorolunk néhányat a leggyakrabban elõforduló megszakításokból. A számítógépek nem mindig rendelkeznek az összes ilyen megszakítástípussal, de az I/O befejezés, a timer- és a rendszer-megszakítások minden rendszer szerves részét képezik. Megszakítás I/O mûvelet befejezése miatt. Ez a fajta megszakítás akkor következik be, ha valamely I/O készülék szolgáltatást kér a készülékhez tartozó megszakítás kezelõ (interrupt handler) rendszerprogramtól. A szolgáltatás különbözõ lehet: ha a szolgáltató készülék ún. karakter-karakter típusú, akkor új karakter továbbítását igényelhetjük, ha blokk típusú készülékrõl van szó, akkor kérhetjük a következõ adatcsoport írását vagy olvasását, és hiba fellépése esetén a hiba kezelése lehet a megkívánt mûvelet.
115
A KÉSZÜLÉKEK KEZELÉSE
Az OR szolgáltatásai közül az egyik legjelentõsebb az a támogatás, amelyet a rendszer az I/O készülékek kezelése során végez. A korai rendszerekben ez nem volt számottevõ. Még a lemezes OR-ek idõszakában is kimerült abban, hogy a speciális készülékek kezeléséhez könyvtári szubrutinokat írtak, és ezeket akkor töltötték a memóriába, ha azokra éppen szükség volt. A mai többfelhasználós OR-ek esetében az I/O ilyenfajta közvetlen ellenõrzése nem megoldható. Ezért a szolgáltatások olyan irányba fejlõdtek, hogy minden készülék teljes ellenõrzése (az I/O parancsok kiadása, a megszakítások feldolgozása, a hibák érzékelése és megszüntetése stb.) a rendszeren belül történik. A felsoroltak mellett az OR-nek kell figyelnie az I/O készülékekre várakozó folyamatokat, az egyes befejezéseket, ütemeznie kell a soron következõ I/O mûveletet, és végre kell hajtania a különbözõ olyan változtatásokat, amelyeket az I/O események okoznak. Ezt a – rendkívül összetett – feladatot minden egyes I/O készülékre egy elem végzi az OR-n belül: a készülékmeghajtó program (device driver). Mivel az egyes számítógépes architektúrákhoz csatlakoztatható perifériák száma rendkívül magas, ezért a speciális meghajtó programokra az installációk során nagyon nagy szükség van. Ebben a fejezetben elõször a fizikai I/O készülékek típusait mutatjuk be, majd az I/O készülékeket a számítógépes rendszerekkel összekapcsoló interface-ek jellemzõit ismertetjük. Ezután a meghajtókkal szemben támasztott általános követelményeket tárgyaljuk. A fejezetet a különbözõ I/O készülékekre alkalmazható programozási technikákkal zárjuk.
AZ I/O KÉSZÜLÉKEK JELLEMZÕI Ahhoz, hogy elkészíthessünk egy meghajtót egy megadott I/O készülékhez, ismernünk kell az adott perifériát. Mivel azt eddig is feltételeztük, hogy az olvasó az alapvetõ számítógépes ismereteknek birtokában van, most csak röviden összefoglaljuk az egyes I/O-készüléktípusok fõbb jellemzõit. Az érdeklõdõ olvasó kimerítõ ismertetést talál A. S. Tannenbaum23 magyarul is megjelent könyvében24. Az I/O készülékeket három csoportba oszthatjuk: ! tároló típusú készülékek, ! terminálok, ! nyomtatók.
23 24
Tannenbaum, A.S.: Stuctured Computer Organization. Prentice Hall, 1976. Tannenbaum, A.S.: Számítógéparchitektúrák. Panem Könyvkiadó Kft. 2001.
131
AZ ÁLLOMÁNYOK KEZELÉSE
A modern OR-ek egyik legfontosabb feladata a felhasználók által összegyûjtött információk megbízható tárolása. Azokat az összegyûjtött információkat, amelyeket hosszú ideig tárolunk, és több felhasználó számára is hozzáférhetõvé teszünk, fájlrendszereknek (file system) nevezzük. A fájlrendszerek egymástól elkülönülõ információs egységeit állományoknak (file) fogjuk nevezni. Az állományok többnyire azonos tulajdonságú kisebb logikai egységekbõl – ún. rekordokból – állnak, amelyek mezõkbõl épülnek fel. Az OR-en belül az állományok kezelésével az állománykezelõ (file-manager) foglalkozik. Ennek az a fõ feladata, hogy megfelelõ mûveleteket szolgáltasson a programoknak és a felhasználóknak ahhoz, hogy az állományokban tárolt információkat kényelmesen tudják feldolgozni. Ezek a mûveletek nagyon kézenfekvõk: információk kiolvasását teszik lehetõvé, lehetõséget nyújtanak ahhoz, hogy módosítani tudjuk a mezõk tartalmát, vagy hogy új rekordokkal bõvíthessük az állományt, és a feleslegeseket kitörölhessük. Az sem mellékes, hogy az állományokban levõ információkat milyen gyorsan tudjuk elérni, összegyûjteni. Ezért számos OR speciális lehetõségeket teremt ahhoz, hogy az állományok rekordjait meghatározott sorrendben el tudjuk érni. Ezt indexelésnek nevezzük. A fájlrendszerek fizikailag a háttértárolókon helyezkednek el. Ezek az esetek legnagyobb részében vagy mágneslemezek, vagy mágnesszalagok. A tipikus az, hogy az egy információs rendszerhez tartozó állományok fizikailag több egységen helyezkednek el úgy, hogy néha még az sem biztos, hogy az egy állományhoz tartozó összes rekord ugyanazon az egységen található. A fejezet elsõ részében azt vizsgáljuk, miként helyezhetõk el az állományok egy tárolón. Ezután azt elemezzük, hogy milyen szerkezete lehet egy állománynak. Egy információs rendszerhez hozzátartozik, hogy a benne elhelyezett állományokról ún. „leíró” információkat (pl. név, rekord hossz, blokkolási méret, tulajdonos, hozzáférési lehetõségek, a tartalom típusa, verzió, history stb.) tartalmaz. Ezeket állományleíróknak (file descriptor) nevezzük. A descriptorokat a modern OR-ek speciális állományokba, könyvtárakba (directory) gyûjtik. A következõ alfejezet a könyvtárak felépítését tárgyalja. Az állományok kezelését tárgyaló fejezetet az állományokon végezhetõ alapmûveletek bemutatásával folytatjuk, majd megvizsgáljuk, hogy milyen összefüggés található a készülékek kezelése és az állományok kezelése között.
A KÖTET FOGALMA ÉS SZERKEZETE Miként azt a bevezetõben már említettük, az állományokat háttértárolókon helyezzük el. Ezeknek a készülékeknek egy része olyan, hogy állandóan a rendszerhez van kapcsolva, mások pedig fizikailag átmenetileg lekapcsolhatók rendszerrõl, és helyükre új készülékek csatlakoztathatók. (A mágnesszalagok és -lemezek az utóbbi kategóriába
142
HIBAKEZELÉS, MEGBÍZHATÓSÁG, VÉDELEM
Mindezideig az OR-ek olyan feladataival – és a feladatokhoz tartozó megoldásokkal – foglalkoztunk, amelyek egyrészt az üzemszerû használathoz tartoznak, másrészt azt feltételezték, hogy a rendszer használata során minden hibátlanul mûködik és nincs szükség illetéktelenek elleni védelemre sem. Annak ellenére, hogy – reményeink szerint – jól követhetõ volt az, miként vált egyre bonyolultabbá az OR annak következtében, hogy mind összetettebb feladatokat kellett megoldania, mégis azt mondhatjuk, hogy ha egy OR tervezésénél és elkészítésénél nem kellene ezekre a feladatokra is figyelemmel lenni, akkor az egész rendszer sokkal egyszerûbb lenne, mint a végsõ megoldás. (Ha valaki készített már bonyolultabb felhasználói rendszert, akkor az jól tudja, hogy ez a megállapítás érvényes azokra a rendszerekre is.) Ebben a fejezetben három olyan feladattal foglalkozunk, amelyek az OR-ek mindennapos vizsgálatánál – méltánytalanul – a háttérbe szorulnak. Ha ezeket a feladatokat nem oldja meg jól egy OR, akkor a rendszer szolgáltatásai bizonytalanok lesznek, nem tudjuk biztosítani a hatékony és gyors kiszolgálást. Ennek az lesz a következménye, hogy elveszik a bizalom az OR iránt, és a felhasználók elfordulnak a rendszertõl.
HIBAKEZELÉS Amikor egy hiba keletkezik a rendszerben, akkor errõl tudomást kell szereznie egyrészt az operátornak (vagy a felhasználónak) másrészt a futó tevékenységnek (programnak, processznek) is. A hibák elsõdleges jelzése a visszatérési (return) kóddal történik. Emellett egy OR filozófiája megkövetelheti azt, hogy hibaüzenetet is küldjünk az operátori konzolra vagy a felhasználói terminálra. Ebben az esetben a hibaüzenetek formája és idõzítése nagyon fontos a hiba elhárítása szempontjából. Mivel ilyenkor a hibaüzenet csak idõszakosan jelenik meg a képernyõn, ezért szükség lehet további adminisztrációra is. Tételezzük fel ugyanis, hogy egy I/O mûvelet végrehajtása során a hardver valamilyen hibát jelez. Ilyenkor a készülék megpróbálja kiküszöbölni a hibát. Ha a hiba megmarad, akkor hibakódot generál a tevékenység. Ezt a hibát a felhasználó érzékeli és valahogyan reagál rá, majd a hibakódot kitörli és így az nem biztos, hogy az üzemeltetõ, a rendszergazda tudomására jut. Ezt a jobb OR-ek úgy biztosítják, hogy adminisztrálják a hibát: egy ún. hiba (error) log állományba bejegyzik a hiba idõpontját, kódját, üzenetét és annak a processnak a sorszámát, amelynek futása alatt a hiba keletkezett. Innen aztán bármely késõbbi idõpontban a keletkezett hibák kigyûjthetõk, feldolgozhatók és a hardver ill. szoftver problémák megoldhatók. Mivel nem kizárható, hogy több hiba lép fel egy idõben, ezért a hibákat a rendszer egy hibaüzenet sorban helyezi el, és a megjelenítést valamint az adminisztrálást innen
153
RENDSZERKEZELÉS, RENDSZERKÖNYVELÉS
Rendszer kezelésérõl és adminisztrációról mind egy-, mind pedig többfelhasználós környezetben beszélhetünk. Ez magában foglalja az OR generálását egy rendelkezésre álló hardver konfigurációra, az OR betölthetõ formában történõ installálását egy tetszõleges adathordozón, az OR betöltését egy tetszõleges típusú adathordozóról az elsõdleges tárterületre, az OR leállítását (shut down), az OR „tuningolását” egy adott környezethez a nagyobb hatékonyság elérésének érdekében, ! az OR erõforrásai felhasználásának feldolgozását, adminisztrálását. ! ! ! ! !
E feladatok egy részét esetlegesen kell végrehajtani, másokat pedig rendszeresen ismétlünk. Ebben a fejezetben ezekkel a feladatokkal fogunk foglalkozni részletesebben.
RENDSZERGENERÁLÁS Az OR egyik fontos feladata az, hogy támogassa a rendszer elõállítást. Ennek során az adott OR egy olyan változatát készítjük el, amely a rendelkezésre álló hardver lehetõségeit a legjobban kihasználja. A rendszer elõállítás mindig attól függ, hogy az OR-nek mely részei változtathatók. Ennek megfelelõen az elsõ feladat egy rendszer generálása során annak a megvizsgálása, hogy mely képességeket, tulajdonságokat és támogatási módokat lehet változtatni az installálandó OR-en belül. Néhány ilyen szempontot felsorolunk: CPU-k száma, típusa; felhasználók maximális száma; memória mérete; készülékek maximális száma; standard készülékek típusai, logikai, nevei, címei, paraméterei; alkalmazni kívánt karakter kód típusa; rendszer kontrol blokk mérete; a swap/paging készülék azonosítója.
A telepítés típusai Amikor rendszert generálunk, akkor az elkészült OR vagy forrásnyelvi- vagy már lefordított formában áll rendelkezésünkre. Ettõl függõen a rendszer telepítésére különbözõ módszerek állnak rendelkezésünkre: ! Ha a rendszer forrásnyelven áll rendelkezésre, akkor szükségünk van egy fordító-
programra. (Ez az esetek többségében egy assembler vagy fordító.) Ennek a fordí-
160
OSZTOTT OPERÁCIÓS RENDSZEREK
Az eddigiek során azt feltételeztük, hogy a klasszikus felépítésû számítógépes architektura áll a rendelkezésünkre. Egy ilyen környezetben az OR-ek kapacitása elsõsorban úgy növelhetõ, hogy az egyes hardver komponensek kapacitását növeljük meg. (Új perifériát adunk a rendszerhez, megnöveljük a központi tárat, gyorsabb központi vezérlõ egységet alkalmazunk stb.)
Klasszikus számítógép architektúra
Az elemzések során láttuk, hogy a számítógépek kapacitásának talán legszûkebb keresztmetszete a központi vezérlõ egység. Így eléggé kézenfekvõ az a gondolat, hogy használjunk több processzort annak érdekében, hogy a rendszer hatékonyságát megnöveljük. Kezdetben csak két processzort használtak, és – a jelentkezõ számos új típusú probléma ellenére – a hatékonyság növekedés olyan mértékû volt, hogy a többprocesszoros rendszerek igen gyorsan terjedni kezdtek. Ma – amikor egyetlen nagy bonyolultságú VLSI chipbe elhelyezhetõ egy processzor – számos olyan többprocesszoros rendszert ismerünk, amelyben CPU-k tucatjai dolgoznak együtt. Az új architektúrában felmerülõ problémák egy részét az okozza, hogy egyrészt ezek a processzorok a legkülönbözõbb módon kapcsolhatók össze, másrészt pedig – a hatékonyság növelése érdekében – a processzorok által elvégezhetõ mûveletek számát sok esetben erõsen korlátozzák. (Azt már csak zárójelben jegyezzük meg, hogy sokszor speciális algoritmusokra van szükség ahhoz, hogy a többprocessoros rendszereket hatékonyan tudjuk mûködtetni.)