Informatika szigorlat 21-es tétel: Operációs rendszerek Operációs rendszerek feladatai Egy operációs rendszer két, alapjaiban különböző feladatot hajt végre. Először is az operációs rendszer egy kiterjesztett gép, másodszor pedig egy erőforráskezelő. 1. Op.rendszer, mint kiterjesztett gép A legtöbb számítógép architektúrája (utasításkészlet, memóriaszervezés, I/O rendszer, sínstruktúra) a gépi nyelv szintjén primitív és programozása, főleg a I/O, kényelmetlen. Egy átlagos programozó nem akar túl mélyen belemerülni a pl.: hajlékonylemez programozásába. Ehelyett egy egyszerű , magas szintű absztrakcióval akar dolgozni. Például szokásos absztrakció lehet az, hogy a lemez névvel ellátott állományok gyű jteményét tárolja. Minden állomány megnyitható olvasásra vagy írásra, ezután olvasható ill. írható, majd le kell zárnia. Az a program, amelyik a programozó elől eltakarja a valódi hardware-t, és egy egyszerű bb képet ad a névvel ellátott, írható és olvasható állományokról az maga az operációs rendszer. Mindezek esetében az az absztrakció, amelyet az op.rendszer nyújt, egyszerű bb és könnyebben használható, mint a mögötte lévő hardware. Tehát az op.rendszer feladata ebben az esetben, hogy a felhasználó felé egy az eredetivel ekvivalens kiterjesztett (vagy virtuális) gépet, amelyet egyszerű bb programozni, mint a mögöttes hardware-t. 2. Az operációs rendszer erőforráskezelő Az operációs rendszer az a hely, ahol az összetett rendszer minden egyes részét kezelik. A számítógépek processzorokból, memóriából, lemezekből, nyomtatókból, és egyéb eszközök bő választékából állnak. Az op.rendszer feladata az, hogy a különböző erőforrásokért versenyző programok számára szabályos és felügyelt módon biztosítsa ezeket. Ha a számítógépen (vagy a hálózaton) több felhasználó van, még inkább szükség van a memória, az I/O eszközök és más erőforrások kezelésére és védésére, mert enélkül a felhasználók zavarhatnák egymást (természetesen ilyen esetben információkon, pl.:állományok, adatbázisok is osztoznak a felhasználók). Az operációs rendszer feladata, hogy nyilvántartsa, ki melyik erőforrást használja, hogy teljesítse az erőforráskéréseket, mérje a használatot és hogy a különböző programok és felhasználók ellentmondásos kéréseit egyeztesse. Operációs rendszerek szerkezete Most az operációs rendszereket belülről vizsgáljuk A legtöbb esetben egy operációs rendszer felépítése az alábbi négy típus valamelyike: monolitikus rendszer, rétegelt rendszer, virtuális gép és a kliens-szerver modell. 1. Monolitikus rendszer Ez az egyik legelterjedtebb szervezés. Struktúrája a strukturálatlanság. Az operációs rendszer eljárások gyű jteménye, és bármelyik meghívhatja a másikat bárminemű korátozás nélkül. Ennél a módszernél a paraméterek és a visszaadott értékek alapján
minden eljárásnak jól definiált felülete van, és, ha a programozó úgy gondolja, hogy az egyik eljárásban egy másik hasznosat nyújthat, akkor azt szabadon meghívhatja.Az információtakarás fogalma teljesen ismeretlen, minden eljárás látja a többit.
Egy kicsit ezeket is lehet struktúrálni. Az op.rendszer szolgáltatásait (a rendszerhívásokat) úgy kérjük, hogy először elhelyezzük a paramétereket az egyezményes helyeken, pl.: regiszterekben, ezután pedig egy speciális, csapdázott ún. kernel hívást vagy felügyelt hívást hajtunk végre. Egy felhasználói utasítás felhasználói módról kernel módra kapcsolja a gépet és a vezérlést átadja az operációs rendszernek. Ezutána paraméterek alapján az operációs rendszer eldönti, hogy melyik rendszerhívás a végrehajtandó. A k-adik rendszerhívás végrehajtásához az op.rendszer kiveszi az eljáráok táblázatának k-adik eleméből az eljárás címét. Ezzel azonosította a kiszolgáló eljárást, amit meghív. Ha az eljárás végzett a tevékenységével és a rendszerhívás befejeződött, a felhasználói program visszakapja a vezérlést és a rendszerhívást követő utasítással folytatja a végrehajtását. Ez a szervezés utal a rendszer felépítésére: 1. Főprogram, ez hívja a kívánt szolgáltató eljárásokat. 2. Szolgáltató eljárások készlete, ezek hajtják végre a rendszerhívásokat 3. Segédeljárások a szolgáltató eljárások támogatására Ebben a modellben minden rendszerhíváshoz egy ezt kezelő szolgáltatás tartozik. A segédprogramok a több szolgáltató eljárás által is igényelt feladatokat hajtják végre, ilyen például adatok átvétele a felhasználói programoktól. 2. Rétegelt rendszerek Az operációs rendszer rétegekből álló hierarchia is lehet, minden réteget az alatta lévőre építünk. (Az első ilyen rendszert (THE) Dijkstra tervezte 1968-ban.) A rendszernek 6 rétege volt. A 0. réteg végezte a processzor-hozzárendelést, a folyamatok közötti átkapcsolást megszakítások jelentkezése vagy időintervallumok
lejárta esetében. A 0. réteg fölött a rendszer olyan szekvenciális folyamatokból állt, melyet már úgy lehetett programozni, hogy figyelmen kívül hagyhattuk, hogy egy processzoron több folyamat fut, vagyis a 0. réteg biztosította a CPU multiprogramozhatóságát. Az 1. réteg a memóriakezelést végezte. Lefoglalta a folyamatok számára a belső memóriát és az 512K szavas dobon a területeket. Ezen tárolták a folyamatok olyan részeit, amelyek nem fértek be a belső memóriába. A 2. réteg kezelte a folyamatok közötti kommunikációt és a gépkezelő konzolját. A 3. réteg felügyelte a I/O eszközöket és a ki- ill bemenő adatfolyamok átmeneti tárolását. A 4. réteg a felhasználói programoké volt. Az 5. rétegre került a rendszer kezelőjének processzusa. A MULTICS rendszer ezt tovább általánosította és koncentrikus gyű rű kbe szervezték, ahol a belsők több, a külsők kevesebb privilégiumot kaptak. A THE rendszer rétegelt volta valójában még csak tervezési segítség volt, hiszen a rendszer összes elemét végül is egyetlen végrehajtható programmá szerkesztették össze, addig a MULTICS gyű rű s szerkezete inkább futás közben alakult ki, nagyrészt hardware támogatással. A gyű rű s szerkezet előnye, hogy könnyen megvalósítható felhasználói rendszerekben is. 3. Virtuális gépek Az eredetileg CP/CMS nevű , majd VM/370-re keresztelt rendszer két jó ötletre épült: az időosztásos rendszerek egyrészt a multiprogramozást, másrészt a nyers hardwarenél sokkal kényelmesebb kapcsolatot adó kiterjesztett gépet biztosítanak. A VM/370 különlegessége, hogy ezt a funkciót teljesen szétválasztja. A virtuális gépmonitor a lelke a rendszernek, amely a nyers hardware-n fut, kezeli a multiprogramozást és nem egy, hanem több virtuális gépet is szolgáltat. Ellentétben minden más operációs rendszerrel, ezek a virtuális gépek nem kiterjesztett gépek, a szokásos file-okkal és jó tulajdonságokkal, hanem a hardware pontos másolatai, beleértve a felügyelt felhasználói módokat, I/O-t, megszakításokat, tehát a hardware-t mindenestől. Annak következtében, hogy mindegyik virtuális gép azonos hardware géppel, bármelyiken futtatható az az op.rendszer, amelyik harware-n fut. A különböző virtuális gépeken különböző operációs rendszerek futtathatóak és futnak is. Az egyiken az OS/360 fut kötegelt vagy adatfelhasználós feladatkörrel, miközben a másikon CMS egyfelhasználós interaktív rendszer szolgálja az időosztásos felhasználókat. Ha egy CMS-en futó program rendszerhívást hajt végre, akkor ezt a saját virtuális gépén futó operációs rendszer fogja kezelni és nem a VM/370, mégpedig pontosan úgy, mintha valódi és nem virtuális gépen futna. A CMS hardware I/O utasításokat hajt végre lemez írásra, olvasásra, vagy mást, ami a hívás teljesítéséhez szükséges. A VM/370 ezeket az I/O utasításokat csapdázza és a valódi hardware szimulációjaként végrehajtja. A multi-programozás és a kiterjesztett gépfunkciók teljes szétválasztása a rendszer egyes részeit egy-szerű bbé, flexibilissé ls könnyebben karbantarthatóvá tette. A VM/370-en minden processzus megkapja a tényleges gép egy pontos másolatát. 4. Kliens-szerver modell A VM/370 jelentősen egyszerű södött azzal, hogy a hagyományos operációs
rendszerek kódjának többségét áthelyezte magasabb rétegre (CMS). A VM/370 bonyolult program maradt, hiszen nem olyan egyszerű több virtuális VM/370-et szimulálni. A korszerű operációs rendszerek ennek az ötletnek a továbbfejlesztését mutatják, azaz egyre több és több programot tolnak magasabb rétegekbe, ezek kikerülnek az operációs rendszerből és végül egy minimális kernel marad. A módszer általában az, hogy az operációs rendszer több funkcióját felhasználói folyamatokra bízzák. Ha egy szolgáltatást kérünk, például egy fileblokk olvasását, akkor a felhasználói processzus (a kliensprocesszus) egy kérést küld a szerverprocesszusnak, amelyik elvégzi a munkát és visszaküldi a választ. Ebben a modellben a kernelnek csak a kliens és a szerver közötti kommunikációt kell kezelnie. A szerverek felhasználói és nem kernel módban futnak, így a hardware-hez nincs közvetlen hozzáférésük. Emiatt, ha egy fileszerver hibásan mű ködik, megszüntethető anélkül, hogy az egész rendszer leállna. Az elv, hogy a kezelőkészlet és annak használatát szétválasztjuk, fontos elv, amelyet az operációs rendszerekben változatos célokra gyakran használnak. Az operációs rendszerek osztályozása Több szempont szerint is osztályozhatjuk az operációs rendszereket. A legfontosabb osztályozási szempontok: • Az operációs rendszer alatti hardver "mérete" szerint: - mikroszámítógépek operációs rendszerei - kisszámítógépek, esetleg munkaállomások operációs rendszerei - nagygépek (Main Frame Computers, Super Computers) operációs rendszerei • A kapcsolattartás típusa szerint: - kötegelt feldolgozású operációs rendszerek vezérlőkártyás kapcsolattartással - interaktív operációs rendszerek • Cél szerint • a folyamatkezelés, a felhasználók száma és a CPU-idő kiosztása szerint • A memóriakezelés megoldása szerint • az I/O koncepciók, a file rendszer kialakítása szerint Cél szerint megkülönböztetünk általános és speciális célú operációs rendszereket. Az általános célú op.rendszerek többcélúak, egyidejű leg használjuk azokat programfejlesztésre, alkalmazások futtatására, kommunikációra, stb. Ezzel szemben a speciális célúak egyetlen célt szolgálnak. Ez igen gazdag osztályt eredményez. Lehet például: folyamatvezérlésre vagy tranzakciók feldolgozására használt rendszerek. Folyamat kezelés, időkiosztás, felhasználószám szerinti osztályok A több, változó feladatszétosztású CPU-val rendelkező gépeket az op. rendszerükkel együtt multi-processing rendszereknek szokás nevezni. Az egy processzoros gépek mű ködtető rendszere lehet single-tasking (egy időben egy processz fut), vagy multi-tasking rendszer (kvázi párhuzamosságban több processzus fut). Az egyidejű felhasználók száma szerint beszélhetünk egyfelhasználós (single-user)
rendszerekről és többfelhasználós (multi-user) rendszerekről. Ez utóbbinak mindenképpen multi-tasking rendszernek kell lennie. A CPU időkiosztása lehet szekvenciális (egy folyamat teljes feldolgozása után kapcsol másikra), kooperatív event-polling rendszerű , megszakítás vezérelt (interrupt driven), vagy beavatkozó-megszakításvezérelt (preemptive-interrupt driven). Az event-polling rendszer már lehet többfelhasználós/többfeladatos rendszer. A folyamatok között előre-beállított, körkörös sorrend van (Round Robin ütemezés). Az a processz lesz aktív, amelyik eseményt kap, és addig aktív, amíg új esemény aktívvá nem tesz egy másik folyamatot. A kooperatív rendszerekben a folyamatok lemondhat a CPU-ról, és átadhatja a vezérlést. Ilyenkor egy lefagyott processz a teljes rendszert mű ködésképtelenné teheti. A megszakítás vezérelt rendszerekben minden I/O megszakítás bekövetkezésekor újraértékelik a folyamatok prioritási állapotait, és a legmagasabb prioritású használhatja a CPU-t, és az nem mond le önszántából a processzorról. A beavatkozó rendszerű időkiosztásnál nemcsak az I/O megszakítás bekövetkezésekor értékelik újra a prioritási állapotokat, hanem bizonyos órajel-megszakításoknál is. Elveszik a CPU-t a folyamattól akkor is, ha az továbbra is, ha az továbbra is futásra kész állapotban van, de van nála nagyobb prioritású. Az időkiosztási algoritmus szerint e rendszeren belül megkülönböztetünk klasszikus időosztásos (time sharing) és valós idejű (real-time) rendszereket. MS-DOS: általános célú, egyfelhasználós, egyfeladatos op.rendszer szekvenciális időosztással. OS/2: az IBM általános célú, egyfelhasználós, többfeladatos rendszere, beavatkozómegszakításvezérelt időkiosztással, hangolható és használható valós idejű rendszernek. Windows NT: általános célú, egyfelhasználós (de van többfelhasználós változata is), többfeladatos rendszer és preemptive-interrupt driven az időkiosztása VMS: általános célú, de speciálisra is hangolható, többfelhasználós, multi-processing rendszer. Időkiosztása is hangolható. UNIX rendszerek: általános célú, többfelhasználós, többfeladatos rendszerek. A modern UNIX-ok multi-processing jellegű ek. A klasszikus UNIX-ok preemptive time sharing időosztásúak. Memóriakezelés szerinti osztályozás Alapvetően megkülönböztetjük a valós címzésű és a virtuális címzésű rendszereket. A valós címzésű rendszereken belül a fix, vagy változó partíciokra osztott memóriakezelés lehetséges. A virtuális címzésű rendszerek alosztályai a klasszikus ki/be söprő (swapping in/out) rendszerek, a klasszikus igény szerinti ki/be lapozó (demand paging) rendszerek és a ki/be söprő és lapozó (swapping and paging) rendszerek. MS-DOS: valós címzésű , változó partíciókra osztó rendszer.
VMS: virtuális címzésű , lapozó és söprő rendszer. UNIX: virtuális címzésű rendszer. Mostanában swapping and paging a memóriakezelés. Az I/O koncepciók, a filerendszer megvalósítása szerinti osztályozás Ekkor a fájlrendszer implementációjában igen fontos két megoldandó feladat koncepciója szerint osztályozunk: 1. Hogyan rendelik az op.rendszerek a filenévhez a file blokkjait? Már nem használt megoldás a folyamatos allokáció. Helyette az indextáblás hozzárendelés a szokásos. A UNIX-ok jellegzetes módszere az i-node-os hozzárendelés. 2. Hogyan kezelik a szabad blokkokat? Használatos megoldás a bit-térképek vagy foglaltsági térképek alkalmazása. Másik szintén gyakori megvalósítás a láncolt listán tárolt szabad blokkok. MS-DOS: Jellegzetes a DOS FAT(File Allocation Table) táblás megoldása, ami a fenti két feladatot egyben megoldja. A FAT egyszerre foglaltsági térkép és indextábla. VMS: A file blokkok allokációja indextábla segítségével, a foglaltság bit-térképpel megoldott. UNIX: A fájl blokkok hozzárendelés az i-node segítségével történik, a szabad blokkok kezelése a superblock-ból kiinduló szabad blokkok láncolt listája segítségével mű ködik.