OKJ: 166/2.1/1168-06
Hálózati operációs rendszerek elmélete
Összeállította: Miklay György 2008
Barhács Oktatóközpont
Hálózati operációs rendszerek elmélete
1. fejezet
1. fejezet Az operációs rendszerek alapfogalmai Az operációs rendszerek meghatározása Az operációs rendszer fogalmát nehéz meghatározni. Röviden a számítógépen állandóan futó program, mely közvetlenül vezérli a gép működését, biztosítja a gép és a felhasználó közötti kommunikációt, elosztja az erőforrásokat. Közvetítő szerepet tölt be a számítógép hardvere és a felhasználó között. Az operációs rendszerek célja: · A felhasználók kényelme · A számítógép egyszerű, kényelmes, biztonságos használata · Hatékony gépkihasználás · A gép azonos idő alatt minél több programot hajtson végre
Operációs rendszerek osztályozási szempontjai: 1. Felhasználók száma (egyfelhasználós, többfelhasználós) 2. A multiprogramozás foka (nem multiprogramozott / multiprogramozott) 3. Az elérés módja (kötegelt, interaktív (idõosztásos), valós idejű) 4. A hardver mérete (nagygépes, kisgépes, mikrogépes) 5. A rendszer struktúrája (centralizált, elosztott, hálózati) 6. A felhasználás jellege (ügyviteli, adatfeldolgozó, tranzakciós és lekérdezõ rendszerek, folyamatvezérlõ, ipari és tervezõi munkaállomások, programfejlesztõi környezet, személyi számítógépes rendszerek stb.).
1
Hálózati operációs rendszerek elmélete
1. fejezet
Az operációs rendszerek feladatai Erőforrás-szervezés Az operációs rendszer elsődleges feladata szervezni az erőforrásokat. Az erőforrások szervezése alapvetően két fő céllal történik: az első cél az, hogy támogassuk a kényelmes használatot. A kezdeti időkben minden felhasználó önmaga írta meg azokat a programokat, amelyek képesek voltak kezelni az I/O készülékeket és egyéb közösen használt erőforrásokat. Ma a felhasználók legnagyobb többsége nem programozó. Õk úgy tekintik a számítógépet, mint egy olyan eszközt, amely a saját értékes idejük egy részét megtakarítja és így méltán várnak el kényelmes használatot. Mivel nem akarnak gondoskodni semmilyen részletről, ezért a mai operációs rendszerek által nyújtott szolgáltatásoknak könnyen kezelhetőnek kell lenni. Emellett persze a hatékonyság és az alakíthatóság is természetes felhasználói igény. Az erőforrások szervezésének másik fő célja az, hogy támogassa és elősegítse az ellenőrzött kiosztást. Abban az esetben, ha egy számítógépet több felhasználó vesz igénybe egyidejűleg, akkor azok programjai a legkülönbözőbb módokon érintkezhetnek egymással. Egy általános célú számítógépen bármilyen program futhat. Ezek a programok tartalmazhatnak hibákat, vagy nem megengedett dolgokat akarnak végrehajtani. Ha megengednénk egy programnak, hogy közvetlenül kezelje a közös erőforrásokat az operációs rendszer felügyelete nélkül, akkor átírhatna más programokat, leblokkolhatna erőforrásokat. Az erőforrások ellenőrzött kiosztása nagyon összetett feladat. Amellett, hogy ténylegesen ellenőrzöttnek kell lennie, a kiosztástól elvárjuk, hogy hatékony és igazságos legyen. Ez azt jelenti, hogy egy erőforrás csak ritkán várakozhat akkor, ha valamelyik programnak igénye van rá. Másrészről, ha egy erőforrásra egyidejűleg több program vár, akkor ezek valamelyikét igazságosan kell kiválasztani következőként.
Felhasználói felület biztosítása Egy operációs rendszernek alkalmasnak kell lenni arra, hogy kommunikálni tudjon a felhasználókkal és azok programjaival, Az ezt megvalósító felhasználói felület két részből áll: · Parancs interface, amely biztosítja a felhasználónak, hogy parancsokat adjon közvetlenül a számítógépnek. · Program interface, amely biztosítja azokat a szolgáltatásokat, amelyekre az éppen futó programoknak szükségük van.
Programok szervezése A (futó) programok szervezése az operációs rendszer egyik legfontosabb feladata. Ha az operációs rendszer részére csak egy CPU áll rendelkezésre, akkor két lehetőség közül választhat: vagy egy program fut egy adott időben, a memóriában a befejezésig, vagy ha több program futásáról kell gondoskodni, akkor ezek sorban kapnak lehetőséget egy-egy rövid időre a CPU használatára.
2
Hálózati operációs rendszerek elmélete
1. fejezet
Készülék-kezelés A számítógépek az I/O készülékek széles választékával rendelkeznek. Nyomtatók, terminálok, plotterek, mágneslemezek, mágnesszalagok és egyéb kommunikációs készülékek találhatók az ilyen rendszerekben. Fontos a készülékek kezelését, ellenőrzését egy jól szervezett rendszerre bízni. A készülékek kezeléséhez szorosan hozzátartoznak a megszakítások. Sok esetben ugyanis az adatátvitel a készülékek között akkor is folytatódik, ha a CPU mással van elfoglalva. Ha egy I/O egység készen áll adatok továbbítására vagy fogadására, akkor egy megszakítás jellel ezt közli az operációs rendszerrel.
Memória-kezelés A központi tár egy számítógép legkritikusabb erőforrása. A korai operációs rendszerek esetében a memóriakezelés viszonylag egyszerű volt: Az operációs rendszer elfoglalta a memória egy részét, és az éppen futó program rendelkezett a memória megmaradt részével. A többprogramos rendszereknél azonban a memória egyidejűleg több program között kerül felosztásra és ezek védelme egymás ellen már sokkal összetettebb feladat.
Állomány-kezelés Egy számítógépes rendszeren az információk tárolását többnyire állományokba (fájlokba) szervezéssel oldjuk meg. Az állományok kezelésén értjük azok olvasását, írását, szervezését és a tárolt információk elérésének ellenőrzését is.
Munkamenet- és csomag-kezelés Néha előfordul, hogy egy feladat teljes körű végrehajtásához programok sorozatát kell végrehajtani. A sorozat egy tagját elemnek (job) nevezzük. Az elemek összekapcsolt sorozata a csomag (session). Néha kívánatos, hogy az elemeket, ill. a csoportokat egy komplett egységként kezeljük.
Hiba-kezelés Az operációs rendszernek kell foglalkozni minden olyan hibával, amely a számítógépes rendszerben előfordulhat. A hibák lehetnek hardware hibák (készülékekben, memóriában, átviteli vonalakban) és software hibák (rendszerprogramokban vagy felhasználói programokban). A hiba kezelésének az a feladata, hogy érzékelje és felfedje ezeket a hibákat. A hibák megoldása azonban (extrém eseteket kivéve) a felhasználó feladata.
Megbízhatóság és védelem Az operációs rendszer kiemelt feladatai közé tartozik az, hogy biztosítsa a számítógépes rendszer korrekt működését, továbbá az, hogy védje mind az adatokat, mind a programokat a sérüléstől és az illetéktelen hozzáféréstől.
Felügyelet és elszámolás A legjobban felkészített operációs rendszerek rendelkeznek egy olyan lehetőséggel, amelynek segítségével a felhasználók által igénybe vett 3
Hálózati operációs rendszerek elmélete
1. fejezet
erőforrások felhasználása mérhető. Erre azért van szükség, mert a rendszer egyes részei olyan költségekkel rendelkezhetnek, amelyeket a felhasználókra kívánunk terhelni.
Az operációs rendszerek története Élet operációs rendszer nélkül Ebben a számítógépes környezetben először egy induló címet adtunk be az adatoknak, majd egy sor kapcsoló beállítása után egy gomb lenyomásával bejuttattuk az adatokat a gépbe. Ezt a műveletsort ismételtük aztán mindaddig, amíg az összes programlépést és az adatokat is a számítógép memóriájába juttattuk. Az ilyen programrögzítéshez és hibakereséshez arra volt szükség, hogy a gépen dolgozó programozó teljesen az ellenõrzése alatt tarthassa a gépet. A számítógépes igények beosztása is ennek megfelelően történt: a programozó igényelte a gépet egy időszakra, és azt egyedül használta ezen idő alatt. (Open Shop). Senki más nem használhatta a gépet ebben az időben. A helyzeten először az segített, amikor egyszerű I/O készüléket csatlakoztathattunk a géphez. Írógépek és lyukszalagos készülékek könnyítették meg az adat-és programbevitelt. A programozás fejlődött: az assembly szintű programnyelvekkel már olvasható formában írhattuk a programjainkat. Szükség volt egy fordítóprogramra, amely az assembly nyelven megírt programokat lefordította gépi kódú utasítások sorozatára. Összeszerkeszteni a kész modulokat: szerkesztő (linker) programmal lehetett. Az assembler fordítókkal és a szerkesztőkkel megszülettek az első rendszer programok. Jelentős javulást eredményezett a hatékonyságban a mágnesszalagos tárolók megjelenése. Ennek eredménye az lett, hogy a kártyáról az adatokat mágnesszalagra rögzítették, a szalagról történő feldolgozás pedig már lényegesen gyorsabb volt. Ennek az lett a következménye, hogy programok egész sora várakozott mágnesszalagon a feldolgozásra. Szükség volt egy olyan szakemberre, aki a szükséges előkészületeket nagy hozzáértéssel, gyorsan el tudta végezni. Ő lett az operátor. Az ő jelenléte megjavította a számítógépek hatásfokát. Ekkor kezdtek el gondolkodni azon, hogy hogyan lehetne automatizálni az operátor munkáját. Egy ilyen felügyelő (supervisor vagy monitor) program az elképzelések szerint a memória "egy félreeső sarkában" foglalt helyet. A supervisor programok alkalmazásával megteremtődött a lehetőség az első operációs rendszerek elkészítéséhez.
Supervisor programok és I/O rendszerek A supervisorok első telepítésének gondolata egy felhasználói csoporttól származott, ők fejlesztették ki az Input/Output System supervisor programot, amely egy IBM 701-es számítógépen működött. Az itt keletkezett tapasztalatokat használta fel egy SHARE nevű felhasználói csoport, amelynek specifikációi alapján az IBM implementált (számítógépre fejlesztett) egy új operációs rendszert, amelynek a SHARE Operaing System (SOS) nevet adta.
4
Hálózati operációs rendszerek elmélete
1. fejezet
Ez az operációs rendszer ellátta a supervisori feladatokat, elvégezte az I/O kezelést, és támogatta az assemblerben írt programozást is. Egy másik csoport is fejlesztésbe kezdett, a program neve FORTRAN Monitor System (FMS) lett. Ez volt az első olyan operációs rendszer, amely magas szintű programnyelven megírt programok feldolgozását támogatta. A supervisor programok nem, vagy csak igen korlátozott számban voltak alkalmasak a hibák felfedezésére, azok elhárítására.
Szalagos és lemezes operációs rendszerek A mágnesszalagok megjelenése azt eredményezte, hogy egyre sűrűbben használták ezeket a háttértárolókat adatok tárolására. Kialakult a "fontos", és a "kevésbé fontos" szalagok fogalma. A fontos szalagok állandóan a számítógéphez lettek kötve, míg a kevésbé fontosak csak akkor, amikor szükség volt rájuk. Ez a stratégia vezetett el a szalagos operációs rendszerek családjának kialakulásához (Tape Operating System = TOS). Ilyen operációs rendszer volt pl. a TOS/360 az első IBM-360-hoz. A szalagos operációs rendszerek viszonylag rövid ideig uralkodtak. Hanyatlásukat egy új típusú adathordozó eszköz, a mágneslemez megjelenése idézte elő, amely a mágnesszalaggal szemben két nagy előnyt tudott felmutatni: lényegesen több adatot lehetett rajta tárolni, amelyek ráadásul sokkal gyorsabban voltak elérhetőek. Így a szalagos operációs rendszereket hamarosan felváltották lemezes operációs rendszerek (Disk Operating System = DOS). Mind a mai napig ők uralják az operációs rendszerek világát (Pl. Windows, Unix, Linux). A lemezes operációs rendszerek első eleme egy rezidens (folyamatosan a tárban tartózkodó) betöltő program (loader), amelynek be kell tölteni az operációs rendszert és a felhasználói programokat a memóriába, elő kellett készíteni azokat a futásra. E feladatok ellátása után át kellett adnia a vezérlést az operációs rendszer egy másik részének, hogy azok folytassák tovább a munkát. Az új programoknak (job) szükségük volt olyan utasításokra, amelyek megmondták az operációs rendszernek, hogy a végrehajtás során milyen erőforrásokra lesz szüksége a programnak. Ezeket a parancsokat egy speciális nyelv segítségével írták le. Ez volt a Munka Vezérlő Nyelv (Job Control Language = JCL). Egy ilyen DOS operációs rendszerben az Input/Output Ellenőrző Rendszert (Input/Output Control System = IOCS) is jelentősen megjavították. A különböző erőforrások, készülékek kezelésével, támogatásával a szubrutinok egy egész csoportja foglalkozott. A működés szempontjából kritikusnak ítélt készülékeket támogató rutinok állandó jelleggel a memóriában maradtak, míg más készülékek kezeléséhez a rutinokat csak akkor szerkesztették a felhasználói programokhoz a rendszer szerkesztője (linker) segítségével, ha annak szüksége volt rá. Kialakult az operációs rendszer két speciális része: a rezidens, amely állandóan a központi memóriában van, és a tranziens, amely csak a felhasználása idején kerül a tárba. Ezeket az operációs rendszereket már a hardvert gyártó cégek készítették, és a géppel együtt szállították. 5
Hálózati operációs rendszerek elmélete
1. fejezet
Operációs rendszerek típusai Kötegelt rendszerek Szakképzett operátorokat alkalmaztak. Gyakorlottabb, gyorsabb lett a gépkezelés, de nem volt közvetlen hibakeresés, hiba esetén tártartalom kiírása történt. A programozó utasításokat, valamint a futtatáshoz szükséges adatokat mellékelte a programhoz. Az előkészítési idő csökkent, így az operátor csoportosíthatta a munkákat, illetve annak egyes fázisait (például egyszerre fordított minden programot). Ez jelenti a kötegelt (batch) feldolgozást. Az operátor későn vette észre, hogy a futó program befejeződött, vagy hiba miatt leállt, reakcióideje, kézi beavatkozásai a számítógép sebességéhez képest lassúak voltak.
Korszerű kötegelt rendszerek A gyors, véletlen hozzáférésű mágneslemezek elterjedésével megszűnt a kötegelt rendszerek eredeti elvének, a hasonló munkafázisok csoportosításának szükségszerűsége, de a régi név megmaradt. A jelenlegi rendszerek megkülönböztető tulajdonsága, hogy a programok futásába nem lehet interaktívan beavatkozni csak előre összeállított, vezérlő információkkal ellátott munkák futnak. Egy munkának a rendszerbe adása és az eredmények között eltelt idő (átfutási idő) hosszú. A programok csak statikusan, az eredmények illetve elszállás esetén a memóriakép, nyom-követési információk alapján fejleszthetők, illetve használhatók. A hosszú átfutási idő nagyon megnehezíti a programokkal való kísérletezést. Manapság csak igen nagy számítógépeken használnak tiszta kötegelt rendszert, de időosztásos rendszereknél is megtalálható lehetőség.
Elosztott rendszerek A számításokat több központi egység között osztják meg. Ezek lehetnek szorosan csatolt (tightly coupled) rendszerben, ahol a tár egy részét közösen használják. Ezeket a hardvereket kiszolgáló operációs rendszerek (multiprocessing) igyekeznek a felvetődő számítási igényeket a processzorok között egyenletesen elosztani. Fontosabb szervezési elvek: · homogén (azonos típusú processzorok) vagy inhomogén rendszer · szimmetrikus rendszer.
(nincs
kitüntetett
processzor)
vagy
aszimmetrikus
Elosztott operációs rendszerekből (distributed operating system) inkább lazán csatolt (loosely coupled) hardver esetén beszélünk, ahol a processzorokat valamilyen kommunikációs csatorna kapcsolja össze. Az elosztott operációs rendszer feladata, hogy az egyes gépek mellett ülő felhasználók elől elrejtse azt, hogy a programja végrehajtásában több processzor működik közre. Ennek előnyei a következők:
6
Hálózati operációs rendszerek elmélete
1. fejezet
· Erőforrás megosztás (resource sharing): a felhasználó a másik géphez tartozó speciális erőforrásokat is tudja használni. Ilyen erőforrások lehetnek speciális hardverek, perifériák, állományok, adatbázisok, stb. · Terhelés megosztás (load sharing): ha egy programrészt párhuzamosan végrehajtható részekre lehet osztani, akkor ezeket szét lehet osztani a szabad processzorok között. · Megbízhatóság (reliability) növekedése: az elosztott rendszer egyes elemeinek kiesése esetén a többi elem esetleg átviheti a kiesett feladatait. Homogén rendszerekben ez könnyebb, inhomogénnél jóval nehezebben megvalósítható. A rendszerben hardver- és szoftver redundancia szükséges, sőt a felhasználói információkat is redundánsan kell tárolni. · Kommunikáció (communication): Programok illetve felhasználók közötti adatcsere. (elektronikus levelezés, e-mail).
Időosztásos, többfelhasználós rendszerek Az időosztásos rendszerek (timesharing, multitasking system) közvetlen, interaktív kommunikációt biztosítanak a felhasználó és programja, illetve az operációs rendszer között. Minden felhasználó egy-egy kijelölt beviteli eszközön (terminál, konzol) adhatja a rendszer működtetéséhez szükséges parancsokat. Ez a terminál, mint be- és kiviteli periféria a programok rendelkezésére áll. A több felhasználó egyidejű kiszolgálásának következményei: · A felhasználók programjainak és adatainak tárolása közvetlen (on-line) állományrendszerre van szükség. Az állományok csoportosításához könyvtárakra van szükség, ezeket írja le a nyilvántartás (directory). · A felhasználók interakciója a gép sebességéhez képest nagyon lassú, közben az operációs rendszernek más tevékenységet kell végrehajtania · A felhasználók elvárják, hogy a rendszer viszonylag gyorsan reagáljon a parancsaikra, azaz a válaszidő (response time) kicsi legyen. Az operációs rendszernek sűrűn kell a programok között kapcsolgatnia, nem várhatja meg, amíg egy program várakozni kényszerül. · A felhasználók egymástól függetlenül akarják használni a gépet, mintha mindegyikük egy saját gépen dolgozna.
Prioritásos (Real- time) rendszerek A valós idejű rendszerek általában folyamatirányítási feladatokban kapnak szerepet, ahol a rendszernek a környezettel azonos időléptékben kell működnie, a környezeti változásokra – amit általában megszakítások (interrupt) jeleznek – adott idő alatt válaszolnia kell. Valósidejű rendszerek leggyakrabban célrendszerek, gyakran célhardveren, ROM-ba égetve futnak.
A T.H.E. architektúra Európában egy új többfelhasználós rendszert dolgoztak ki. A T.H.E.-nek nevezett rendszer olyan új elvek alapján épült fel, amelyek hatással voltak az operációs rendszerek későbbi fejlesztésére. A T.H.E. újdonsága elsősorban az 7
Hálózati operációs rendszerek elmélete
1. fejezet
interaktív folyamatok kezelésében, és a rendszer hierarchikus felépítésében rejlett. A rendszer komponenseit különböző szintekre sorolták be. Ezek a szintek csak a közvetlen szomszédjaikkal álltak kapcsolatban. Így az első szinten helyezkedtek el az időzítők (timerek), a megszakítások és a virtuális memóriakezelés. Az alsó két szint egy ún. absztrakt gépet szolgáltatott, amelyet mindenki szabadon használt fel. A rendszer hierarchikus felépítése a fejlesztése során is kamatozott: az alsó szintek a teljes kifejlesztés után megbízhatóan támogatták a további szintek fejlesztését. A T.H.E. rendszert számos hierarchikus struktúrájú operációs rendszer követte. A TENEX a PDP10, PDP-11 gépeken lett felépítve. Ez a rendszer egy olyan absztrakt gépet szolgáltatott, amely magába foglalta a fájlrendszert, minden felhasználónak megengedte egy időben több folyamat futását, virtuális memóriát lehetett használni. Így egy fajta „virtuális gépet” szolgáltatott. Ehhez alakították ki a virtuális gép koncepcióját. Ez a virtuális memória illúziójához hasonlóan minden felhasználó számára azt a képzetet keltette, hogy saját CPU-val és saját erőforrásokkal rendelkezik.
Az operációs rendszerek szerkezete Rétegszerkezet
Az operációs rendszerek nagy, komplex programok, amelyek belső szerkezetét megpróbáljuk logikusan részekre bontani. Nem követi minden operációs rendszer belső szerkezete a most következő csoportosítást, vannak olyan rendszerek, amelyek programját vizsgálva nehéz jól elkülöníthető részeket megállapítani. Az első strukturálási lehetőség a rétegekre (layer) bontás. Az egyes rétegek az alattuk elhelyezkedő réteggel jól definiált felületen érintkeznek, az egyes rétegek szolgáltatásait, a felsőbb rétegek számára elemi műveleteket nyújtanak. Minden rendszerben legalább 3 réteget lehet elkülöníteni, a hardver, az operációs rendszer szintjét esetenként tovább lehet bontani, például Unix operációs rendszer esetén. 8
Hálózati operációs rendszerek elmélete
1. fejezet
Tiszta rétegszerkezetű rendszerekben egy réteg csak a közvetlenül alatta lévő réteg szolgáltatásait használhatja, sem mélyebben, sem felette lévő rétegét nem. Ez a rétegek feladatának, egymásra épülésének meghatározását nagyon megnehezíti. Tendencia, hogy viszonylag kevés réteget különítenek el. Megjegyzendő, hogy a rétegszerkezet felfelé tovább bővülhet, léteznek olyan megoldások, amelyek támogatják, hogy azonos kommunikációs eljárásokat használó programokból tovább építkezzünk. Az azonos rétegen belüli további strukturálásra modulokat lehet elkülöníteni, amelyek egy-egy jól körülhatárolt feladatcsoportot oldanak meg. A rétegen belüli modulok használhatják egymás szolgáltatásait. Legtisztább esetben az összes modul egységes mechanizmus segítségével kommunikál a többivel.
Fontosabb rendszermodulok A folyamatok kezelése A folyamat egy végrehajtás alatt álló program-dinamikus entitás, szemben a programmal, amely statikus (egy program egyszerre több folyamatként végrehajtásának különböző pontján is létezhet). Léteznek felhasználói folyamatok, illetve olyan rendszerfolyamatok, amelyek az operációs rendszer valamelyik tevékenységét hajtják végre. A rendszerfolyamatok általában a rendszer indulásakor, míg felhasználói folyamatok egy munkafázis (task) elindulásakor jönnek létre. Egyes rendszerek megengedik, hogy egy folyamat más folyamatokat hozzon létre. A folyamatoknak erőforrásokra van szükségük, amit az operációs rendszer biztosít. Az erőforrásokat vagy a folyamat létrejöttekor allokálják, vagy akkor, amikor a programnak szüksége van rá. Az operációs rendszernek foglalkoznia kell(ene) az olyan holtpont (deadlock) helyzetekkel, amikor a folyamatok nem tudnak tovább működni, mert erőforrásigényük mások által már használt erőforrások miatt kölcsönösen nem elégíthetők ki. A központi egység, mint erőforrás folyamatok közötti felosztása (CPU ütemezés) is ide tartozik. A központi tár kezelése Egy folyamat elindulásakor a rendszernek a programot be kell tölteni a memóriába, adatai és verme részére memóriát kell biztosítani. A folyamatokhoz futásuk során esetleg további tárterületeket kell allokálni. Virtuális tárkezelés estén meg kell oldani a folyamatokban található virtuális címek közvetlen fizikai memóriacímekhez rendelését. A központi tárban egy időben több folyamathoz tartozó utasítások találhatók. A rendszernek meg kell oldania, hogy a folyamat futtatásához szükséges részek az operatív tárba bekerüljenek, esetleg éppen nem fontos programrészeket kiszorítva. Perifériakezelés Általános periféria meghajtók segítségével el kell rejteni a programok elől a különböző perifériák kezelésének sajátosságait. 9
Hálózati operációs rendszerek elmélete
1. fejezet
A processzor sebességének jobb kihasználása miatt az átvitelt pufferelni kell. A mágneslemez perifériáknál az eszköz jobb kihasználása érdekében szükség lehet a több egyidejű átvitel igény ütemezésére, sorrendjének meghatározására. Az állományok kezelése Az állomány (file) egymáshoz tartozó adatok gyűjteménye. Olyan fogalom, amely a felhasználó elől elrejti az adattárolás részleteit. A rendszer a háttértárakon állományokban tárolja a felhasználói programokat és adatokat. Az állományok csoportosításához könyvtárakat hoz létre. A könyvtárakat gyakran szervezik hierarchikus struktúrába. A rendszer támogatja állományok létrehozását, megszűnését, tartalmuk olvasását, írását, módosítását. Ehhez az állományokat a háttértár konkrét területeihez kell rendelni. Szükség van a szabad területek nyilvántartására. Szükség van a mágneslemezen tárolt állományok megbízható elmentésére (backup). Védelmi mechanizmusok (Protection system) Az operációs rendszer részeit, erőforrásait védeni kell a hibás, illetve illetéktelen beavatkozásoktól. A hardver segítségével, illetve az operációs rendszerben megvalósított védelmi mechanizmusok korlátozzák a véletlen hardver és programhibák hatását, szándékos rongálás lehetőségét. A hálózatok kezelése A korszerű operációs rendszerek biztosítják, hogy felhasználók a különböző kommunikációs csatornák segítségével távoli felhasználókkal, illetve gépekkel kommunikáljanak, távoli erőforrásokat használjanak. Kezelői felületek Minden operációs rendszer tartalmaz a felhasználóval kommunikálásra szolgáló mechanizmusokat. Ennek feladata programok elindítása, interaktív információcsere az egyes programokkal, illetve a programok eredményeinek megjelenítése. A felhasználó által megadott, speciális (kényelmes?) szintaxisú parancsokat a rendszer parancsértelmezője (command interpreter) értelmezi és hajtja végre. A parancsnyelv lehet bonyolult, a magas szintű programozási nyelvek képességeihez hasonló nyelv. A klasszikus karakteres kommunikációt napjainkban egyre inkább felváltják a korszerűbb - képek, speciális beviteli eszközök, emberi hang- módszerek. A korszerű rendszerek nem csak az operációs rendszerrel való kapcsolattartásra adnak egységes eszközöket, de rendszerhívásokkal, programkönyvtárakkal és ezek használatát szabályozó ajánlásokkal próbálják a felhasználói programok kommunikációját egységesíteni.
10
Hálózati operációs rendszerek elmélete
1. fejezet
Rendszerhívások A programok és az operációs rendszer közötti felület – minden „ tisztességes” rendszernél – szigorúan rögzített, a programok ezen a felületen kívül mást a rendszerből nem látnak. Ezen a felületen keresztül a kapcsolattartás, a rendszer szolgáltatásainak igénybevételének eszközei a rendszerhívások. A rendszerhívások általában speciális gépi utasítás (csapda, trap) segítségével történnek, amely a vezérlést az operációs rendszer programjának jól meghatározott pontjára adja. A rendszerhívások gépi nyelvű (assembly) programból közvetlenül kiadhatók, magas szintű nyelvek használata esetén könyvtári eljárásokat hívunk. A rendszerhívás végrehajtásának lépései a következők: 1. Paraméterátadás: A paramétereket az operációs rendszer által elérhető helyen kell átadni: általános célú regiszterben, vagy olyan tárterületen, aminek a címét adjuk át. 2. Módváltás: A program végrehajtása az operációs rendszerhez tartozó utasításokkal folytatódik. Mivel az operációs rendszert a felhasználói programok ellen védeni kell, így a programok általában olyan hardver üzemmódban (felhasználói mód, user mode) futnak, amely lehetetlenné teszi bizonyos utasítások végrehajtását. Ebből a módból át kell kapcsolni a rendszermódra (rendszer mód, system mode), amelyben az operációs rendszer fut. Az átkapcsolást maga a rendszerhívó gépi utasítás szokta elvégezni. 3. Paraméterek másolása: Szükség esetén a rendszernek saját területére kell a hívó által átadott paramétereket másolni. 4. Végrehajtás: Elágazás a hívott szolgáltatáshoz 5. Eredmény másolása: A rendszerhívás végrehajtása által szolgáltatott eredmény, vagy sikertelen végrehajtás esetén a hiba okának visszaadása a hívó programnak. 6. Módváltás: Visszatérés futtatásának folytatása.
a
felhasználói
módba,
a
hívóprogram
Az operációs rendszerek fontosabb, tipikus, a rendszerhívások által kiváltható szolgáltatásai a következők: · A folyamatok vezérlése: o Program betöltése, végrehajtása o Folyamatok létrehozása, megszüntetése, attribútumainak beállítása o Központi tár igénylése, felszabadítása o Folyamatok közötti kommunikáció, folyamatok egymáshoz illetve külső eseményekhez – vagy órához – szinkronizálása o Nyomkövetés hibakereséshez. · Az állományok kezelése: o Állományok létrehozása, törlése, attribútumainak beállítása o Könyvtárak létrehozása, módosítása 11
Hálózati operációs rendszerek elmélete
1. fejezet
o Állományok megnyitása, lezárása, szekvenciális és véletlen elérésű átvitel · A perifériás eszközök kezelése: o Perifériás eszköz igénylése, lefoglalása, felszabadítása o Adatátvitel a program és a periféria között · A rendszerinformációk kezelése: o Különböző rendszerkomponensek (folyamatok, állományok, perifériák, felhasználók, rendszeridő, stb.) állapotának, lekérdezése, módosítása o Rendszerstatisztikák, számlázási adatok lekérdezése (accounting) · Kommunikáció: o Kommunikációs csatornák létrehozása, megszüntetése o Üzenetek, állapotinformációk küldése és fogadása o Műveletek távoli erőforrásokon
Rendszerprogramok A rendszerprogram (system program) fogalmát nehezen lehet pontosan definiálni. Rendszerprogramnak nevezhetünk minden, az operációs rendszerrel szállított, a rendszer általános célú felhasználását támogató programot. Például: · Parancsértelmező · Állományrendszer kezelő · Szövegszerkesztők (editor) egyszerű szöveges állományok tartalmának változtatására · Fordítóprogram (compiler), program-értelmező (interpreter), kapcsolatszerkesztő (linker), betöltő (loader), programkönyvtár kezelő (librarian) · Kommunikációs programok (üzenetek böngészés, elektronikus levelezés)
12
küldése,
faliújság,
Internet
Hálózati operációs rendszerek elmélete
1. fejezet
Ellenőrző kérdések 1. I. Válassza ki a helyes megoldást! 1. Melyik nem tartozik az operációs rendszer céljai közé? a. A felhasználók kényelme b. A hálózati kommunikáció c. A hatékony gépkihasználás 2. Melyik nem illik a többi közé? a. Nagygépes b. Mikrogépes c. Kötegelt 3. Mi az Open Shop? a. Számítógép használati mód b. Egy operációs rendszer neve c. Programszervező algoritmus 4. Minek a rövidítése a JCL? a. Egy a 60-as években létrehozott operációs rendszeré b. Java Command Layer c. Job Control Language 5. Mi a rendszerhívás? a. Vezérlésátadási folyamat b. Rendszer programcsomag c. Az operációs rendszer indítási folyamata 6. Mi takar a T.H.E rövidítés? a. Egy operációs rendszer neve b. Egy ütemező algoritmus c. Egy számítógép gyártó cég neve 7. Melyik nem rendszerszolgáltatás? a. A folyamatvezérlés b. Az állománykezelés c. A nyomtatás 8. Melyik nem rendszerprogram? a. Az állományrendszer-kezelő b. A táblázatkezelő c. A parancsértelmező 13
Hálózati operációs rendszerek elmélete
1. fejezet
II. Döntse el, hogy igaz, vagy hamis-e az állítás! 1. Az operációs rendszer elsődleges feladata szervezni az erőforrásokat. Igaz
Hamis
2. Az operációs rendszernek nem kell foglalkozni a hibákkal. Igaz
Hamis
3. Az első operációs rendszer neve FORTRAN Monitor System volt. Igaz
Hamis
4. Az időosztásos rendszerek interaktívak. Igaz
Hamis
5. A T.H.E.-nek nevezett rendszer olyan új elvek alapján épült fel, amelyek hatással voltak az operációs rendszerek későbbi fejlesztésére. Igaz
Hamis
6. Minden rendszerben legalább 3 réteget lehet elkülöníteni. Igaz
Hamis
7. Minden operációs rendszer tartalmaz a kommunikálásra szolgáló mechanizmusokat. Igaz
felhasználóval
interaktív
Hamis
8. Rendszerprogramnak nevezhetünk minden, a rendszer általános célú felhasználását támogató programot. Igaz
Hamis
III. Válaszoljon a feltett kérdésekre 1. Adja meg az operációs rendszerek meghatározását! 2. Melyek az operációs rendszerek osztályozási szempontjai? 3. Mit jelent a készülék-kezelés? 4. Mik voltak a supervisor programok? 5. Milyen jellemzői vannak az időosztásos rendszernek? 6. Mi a T.H.E. architektúra lényege? 7. Határozza meg a rendszerhívás fogalmát? 8. Mit nevezünk rendszerprogramnak?
14
Hálózati operációs rendszerek elmélete
2. fejezet
2. fejezet Folyamat és megszakításkezelés Folyamatkezelés A folyamat fogalma A folyamat (process) a multiprogramozott operációs rendszerek alapfogalma. Legtömörebb megfogalmazása: végrehajtás alatt álló („életre kelt”) program. Valójában a folyamat, a legtöbb esetben, több mint a program, mivel a folyamat fogalma nem csak a programot, hanem a futás közben lefoglalt erőforrásokat is takarja. Természetesen vannak olyan programok-programrendszerek, melyek több folyamatból állnak, ilyen esetben a folyamat nem fedi le a program fogalmát. A különböző típusú (kötegelt, időosztásos, stb.) rendszerek multiprogramozott illetve multiprocesszáló megvalósításának közös jellegzetessége, 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 jellegzetes egységeinek megnevezése a különböző rendszerekben más és más – például munka (job), feladat (task) –, ennek megfelelően beszélhetünk több megkezdett munkáról (kötegelt feldolgozás esetén), több végrehajtás alatt álló feladatról (valós idejű rendszerekben), egyidejűleg több felhasználó kiszolgálásáról (időosztásos rendszerekben). A szakirodalomban azonban a job, task, process kifejezések gyakran egymás szinonimájaként fordulnak elő. Az operációs rendszer felügyelete alatti minden tevékenység folyamat, ezek egy része felhasználói folyamat, de lehetnek az operációs rendszer tevékenységét végző, támogató rendszerfolyamatok is.
Folyamatkezelés multiprogramozott rendszerekben Multiprogramozott rendszerekben több folyamat végrehajtása folyik látszólag párhuzamosan egyetlen CPU-t tartalmazó konfiguráción. Az ilyen rendszereken a CPU kitüntetett erőforrás. Valójában egy adott pillanatban egyetlen folyamat végrehajtása folyik, amelyik utasításait a CPU éppen végrehajtja. A folyamat – az életre kelt program – végrehajtásának dinamikáját egy hozzárendelt állapotjelzővel és az állapot-átmeneti gráffal írhatjuk le. Folyamatállapotok ·
Fut (running): A központi egység a folyamathoz tartozó utasításokat hajtja végre. CPU-nként egyetlen ilyen folyamat lehet.
·
Várakozik, blokkolt (blocked): A folyamat várakozni kényszerül, működését csak valamilyen külső vagy belső esemény bekövetkezésekor tudja folytatni. Például a folyamat elindított egy perifériás átvitelt és be kell várnia annak lezajlását. A rendszerben több várakozó folyamat is lehet. 15
Hálózati operációs rendszerek elmélete ·
2. fejezet
Futásra kész (ready): A folyamat futásához minden feltétel adott, de a multiprogramozott rendszer központi egysége éppen foglalt, egy másik folyamat utasítását hajtja végre. A rendszerben több futásra kész folyamat is lehet.
Állapotátmeneti gráf
Állapotátmenetek · Folyamat létrehozása: Egy futó folyamat újabb folyamatokat hozhat létre, A létrehozó folyamatot szülő (parent), a létrejötteket gyerek (child) folyamatoknak nevezzük. A folyamatok közötti leszármazási reláció hierarchikus struktúrát definiál. A létrejött folyamatnak futásához erőforrásokra van szüksége, amelyeket vagy az operációs rendszertől kap, vagy a gyerek folyamatok a szülő erőforrásain osztoznak. A létrejött folyamat a szülőtől a futását befolyásoló paramétereket kaphat. A gyerekfolyamat létrehozása után a szülő a gyerekkel párhuzamosan fut vagy bevárja a gyerekének, gyerekeinek befejeződését. Ehhez a szülőnek azonosítani kell a gyerekeit. · Folyamat befejeződése: A folyamat akkor fejeződik be önszántából, ha végrehajtotta utolsó utasítását. A folyamatot leállíthatják egyéb okok miatt: az operációs rendszer vagy egy másik – általában rokon, leggyakrabban a szülő – folyamat, mert a folyamat hibásan működik, túllépte a számára engedélyezhető erőforrás-használatot, vagy működésére már nincs többé szükség. A befejezett folyamat erőforrásai felszabadulnak, azokkal újra vagy az operációs rendszer, vagy a szülő rendelkezik, attól függően, hogy az erőforrásokat kitől kapta. A befejeződő folyamat a szülő folyamatnak információt adhat át a befejeződés tényéről, esetleg okáról. · Fut à várakozik: A folyamat olyan tevékenységet kezdeményezett, amelynek a végrehajtását be kell várnia, vagy más folyamattól érkező jelzést kell várnia, vagy olyan erőforrásra van szüksége, amely pillanatnyilag nem szabad. Az operációs rendszer a folyamathoz feljegyzi, hogy milyen okból, milyen eseményre várakozik. Ugyanarra az eseményre több folyamat is várakozhat. · Várakozik à futásra kész: Bekövetkezett az esemény, amelyre a folyamat várt. Az operációs rendszer ennek hatására megváltoztatja a várakozó folyamat állapotát. 16
Hálózati operációs rendszerek elmélete
2. fejezet
· Futásra kész à fut: Az éppen futó folyamat várakozni kényszerül, a processzor felszabadul, az operációs rendszer a futásra kész folyamatok közül kiválaszt egyet és annak a futtatását folytatja. A továbbítandó folyamat kiválasztása különböző kritériumok, például a folyamat prioritása, várakozási ideje alapján történik (CPU ütemezés). · Fut à futásra kész: Egyes operációs rendszerekben (elsősorban időosztásosnál) a rendszer egy futó folyamattól elveheti a processzort akkor is, ha az nem kényszerül várakozásra, de már „túl hosszú ideje” fut. Ezt az eseményt egy programozható óra megszakítása jelezheti. Egy folyamat önként is lemondhat a futás jogáról, más futásra kész folyamatot a processzorhoz engedhet. Ilyenek például a rendszerekben gyakran meglévő statisztikákat gyűjtő folyamatok. Az állapotátmenetek közül a folyamat tudtával, kezdeményezésére a futóból várakozó állapotba illetve egyes esetekben a futóból futásra kész állapotba kerülése, valamint a folyamat megszűnése történik, a többi átmenetet a folyamatokon kívül álló okok váltják ki. Folyamatok felfüggesztése Az operációs rendszer felfüggeszthet (suspend) bizonyos folyamatokat, azaz időlegesen kiveheti azokat a fenti három állapot körforgásából. Ennek okai a következők lehetnek: · A rendszer túlterheltté vált, túl sok folyamat vetélkedik a futás jogáért, a rendszer fontosabb erőforrásai túlzottan foglaltak. · A rendszer „gyanúsan” működik, következik be (áramszünet)
vagy
valamilyen
vészhelyzet
· A felhasználó fel akarja függeszteni valamelyik folyamatot, mert annak futására pillanatnyilag nincs szükség. A felfüggesztett folyamatok nem versengenek a rendszer erőforrásaiért, de az operációs rendszer számon tartja őket, elmentett állapotukból bármikor újra aktiválhatók. A folyamatok állapotait kiegészíthetjük két új állapottal: · Felfüggesztve várakozik: A folyamat felfüggesztett állapotban van, ráadásul még valamilyen esemény bekövetkezésére is várakozik. · Felfüggesztve futásra kész: A folyamat felfüggesztett állapotban van, ám esetleges futtatásához semmiféle esemény bekövetkezése nem szükséges. Elképzelhető lenne, hogy csak egyetlen felfüggesztett állapotot tartsunk fel a futásra kész folyamatoknak, a várakozó folyamatokat csak azután függesszük fel, ha az esemény, amire vártak, már bekövetkezett. A probléma ezzel a megoldással, hogy az esemény nem biztos, hogy belátható időn belül bekövetkezik. A folyamatok felfüggesztéséhez kapcsolódó állapotátmenetek a következők: · Felfüggeszt: Az operációs rendszer egy folyamatot a futásra kész vagy a várakozik állapotból függeszthet fel. A felfüggesztett folyamattól az operációs rendszer a fontosabb erőforrásokat (központi tár) elveszi, 17
Hálózati operációs rendszerek elmélete
2. fejezet
bizonyos erőforrásokat, pl. nyomtatót viszont továbbra is lefoglalva tarthat. · Aktivál: A felfüggesztett folyamat visszakapja erőforrásait. Elméletileg elképzelhető lenne a felfüggesztve vár-várakozik átmenet, azonban sok értelme nincs, hiszen a folyamat továbbra is várakozni kényszerül, de újra leköti a rendszer erőforrásait. A rendszer feleslegesen dolgozik, ha egy felfüggesztett, futásra kész folyamatot aktivál, majd az nem kapja meg a processzort, hanem újra felfüggesztődik. Célszerű ezt az odavissza állapotmenetet elkerülni, azaz olyan folyamatot kell aktiválni, amelyiknek nagy esélye van, hogy hamarosan futni is kezd. A kiegészített állapotátmeneti gráf
Környezetváltás A folyamatok végrehajtása közötti váltogatás megvalósításakor minden olyan adatot meg kell őrizni, ami az egyes folyamatok zökkenőmentes folytatásához szükséges. Ez egyrészt a folyamat saját, másrészt az őt végrehajtó gép állapotjellemzőinek megőrzését jelenti. A folyamat saját állapotjellemzői: · A folyamathoz tartozó programkód · A folyamat folytatásához szükséges adatokat tartalmazó programváltozók aktuális értéke, beleértve a verem tartalmát is · A programlépés a sorszáma, amelynek végrehajtásánál a folyamat éppen tart (programszámláló) A végrehajtó gép állapota: A folyamat és a végrehajtó gép határvonala a rendszer rétegszerkezetéből következően több szinten képzelhető el. Legegyszerűbb esetben – amikor a folyamat kódja gyakorlatilag csak gépi utasításokat tartalmaz – ez a hardver
18
Hálózati operációs rendszerek elmélete
2. fejezet
– szoftver határfelület, legtöbbször azonban az operációs rendszer alapszolgáltatásait is tartalmazó virtuális gép határfelülete. Ennek megfelelően a végrehajtó gép állapotának megőrzése minimálisan a CPU regisztereinek, de általában az operációs rendszer állapotának (rendszertáblázatok, memóriakezelési információk, periféria hozzárendelések, stb.) megőrzését is jelenti. Egy multiprogramozott operációs rendszer akkor hatékony, ha az átkapcsolást igen gyorsan lehet végrehajtani. Ennek egyik feltétele, hogy a tárban több folyamat számára legyen hely. Így a saját állapotjelzők a tártartalom megőrzésével megmaradnak, átkapcsoláskor csak a végrehajtó gép állapotát kell menteni és visszaállítani. A végrehajtó gép állapotjelzőinek összességét szokásos kontextusnak, az állapotváltást pedig kontextus kapcsolásnak (context switching, környezetváltás) nevezni. A környezetváltás akkor következik be, amikor egy folyamat elhagyja a futó állapotot, egy másik futásra kész folyamat pedig elindul. Két, egymással valamilyen határfelülettel érintkező objektumra igaz, hogy kölcsönösen egymás környezetét alkothatják. Így az átkapcsolás értelmezhető úgy, hogy a végrehajtó gép (operációs rendszer) környezet kapcsolódik át az egyik folyamatról a másikra, valamint úgy is, hogy a folyamatok környezetét jelentő végrehajtó gépet kapcsoltuk át egyik állapotról egy másikra.
Folyamatok közötti kommunikáció Amennyiben egy folyamatban azt tervezzük, hogy kooperálni akarunk más folyamatokkal, akkor létre kell hozni egy közös területet, hogy az információcserét megkönnyítsük. Mivel az operációs rendszerek világában a tevékenységek közötti kommunikáció egyre nagyobb szerepet kap, ezért az Interprocess Communication (IPC) egyre fontosabb lesz. Bárhogyan is választjuk meg az IPC algoritmust, az alábbi modellek közül valamelyiket be kell építeni: · Többszörös hozzáférésű memória kezelés esetében megosztott típusú változókat és adatstruktúrákat helyezünk el olyan területen, amely közvetlenül elérhetõ több folyamat számára is. · Az üzenetátadás technikája azt jelenti, hogy egy folyamat közvetlenül küld adatokat, és egy másik pedig fogadja azt. Az adatok egységét – üzenetnek nevezzük. Szinkronizálás A kommunikációnak a legegyszerűbb formája az, amikor egyetlen bit adatot cserél két folyamat. Ez olyankor következik be, amikor egy folyamat valamilyen esemény bekövetkeztérõl kívánja tájékoztatni a többi folyamatot, vagy egyszerűen csak azt akarja tudatni, hogy a végrehajtás során egy bizonyos pontig eljutott. Ezt az egyszerű folyamatot szinkronizációnak nevezzük. Előfordulhat, hogy egy folyamat a várakozás vagy a felfüggesztés állapotában van, mert egy jelre (signal) várakozik. Ha ez a jel nem érkezik meg, akkor a felfüggesztett, illetve várakozó folyamat sohasem fog folytatódni. 19
Hálózati operációs rendszerek elmélete
2. fejezet
Közvetlen kommunikáció üzenetek küldésével és fogadásával A folyamatok közötti közvetlen adatcserének leggyakrabban alkalmazott módja az, hogy a folyamatok üzenetküldő (send) és üzenetfogadó (receive) rendszerhívásokat használnak. Üzenetek továbbításakor fizikailag nem mindig az üzenetet küldjük el. Ha az üzenet nagy, akkor az üzenetet tartalmazó puffer kezdőcímének átadásával a „mozgó” adatok mennyisége lecsökkenthető. Az információcsere úgy zajlik le, hogy a fogadó folyamat egy receive rendszerhívás segítségével jelzi, hogy kész fogadni üzenetet. Ha az üzenetátadás szimmetrikus, akkor a fogadónak meg kell neveznie azt a folyamatot, amelytől az üzenetet várja, és csak a megnevezett folyamattól fogad el üzenetet. Aszimmetrikus üzenetváltás esetében a send rendszerhívás név nélküli, és a legközelebb érkező üzenetet le is fogja függetlenül attól, hogy kitől érkezett. Közvetlen kommunikáció csatorna használattal A kommunikációs csatornát úgy kell elképzelni, mint egy speciális tulajdonságú állományt. Az üzeneteket egy írási (write) rendszerhívással küldjük el ebbe az állományba, és egy olvasási (read) művelettel fogadjuk őket. Ez a fajta megközelítés a csatorna (pipe) alkalmazásával először a UNIX-ban jelent meg. Itt az eljárás úgy működik, hogy két folyamat között – átmenetileg – egy információs csatornát hozunk létre, amelybe az egyik folyamat beleír és a másik a beírt információt kiolvassa. Közvetett kommunikáció. Abban az esetben, ha sem az üzenetküldő folyamatot sem pedig a fogadót nem akarjuk megnevezni, akkor a közvetlen adatcsere mellett (vagy helyett) más módszereket is használhatunk. Ha az üzeneteket közös elérésű pufferben tároljuk, akkor ez tekinthető egy hétköznapi értelemben vett levelesládának (mailbox). Ekkor az üzenetküldő folyamat egy send műveletet használ, de kommunikációs partnerként a levelesládát jelöli meg. Ez a név vagy állandó és minden folyamat által ismert, vagy dinamikusan deklarálódik.
Folyamatok precedenciája A folyamatokban lehetnek olyan utasítások, melyek végrehajtása meg kell, hogy előzze más utasítások végrehajtását. A lehetséges párhuzamosítások, ill. sorrendi kötöttségek szemléletes ábrázolására szolgál a precedenciagráf, mely egy irányított ciklusmentes gráf. A gráf csomópontjai utasítások, míg, ha egy csomópontból él vezet egy másik csomópontba, akkor ez jelenti azt, hogy az első csomópont utasításának végrehajtása meg kell, hogy előzze a második 20
Hálózati operációs rendszerek elmélete
2. fejezet
csomópontét. Ha egy csomópontból egynél több él indul ki, akkor ez azt jelenti, hogy az élek mentén lévő csomópontok utasításai párhuzamosíthatók. Míg, ha egy csomópontba egynél több él fut be, akkor ez azt jelenti, hogy az eddig párhuzamosan futó tevékenységeket szinkronizálni kell, azaz a csomópontban szereplő utasítást csak azután lehet végrehajtani, ha minden bevezető ág tevékenysége véget ért. A precedenciagráfok szemléletesek, de közvetlenül programozásra nem használhatók fel.
A párhuzamosítható utasítások végrehajtására dolgozták ki a folyamatok több részre bontásának technikáit: a Fork/Join ill. Parbegin/Parend utasításpárt. Fork/Join A Fork/Join utasítás működése: a Fork címke utasítás kiadása után a végrehajtás két párhuzamos ágra szakad, az egyik ág következő utasítása a Fork utasítást követő utasítás, míg a másik ágé a címkénél található. A Join számláló utasítás kiadása esetén a számláló által mutatott darabszámú ág egyesítése válik lehetővé. Működése: minden ág befejeződése eggyel csökkenti a számláló értékét, és a Join után következő utasítás végrehajtása csak akkor kezdődhet el, ha a számláló eléri a nulla értéket (minden ág befejeződik).
21
Hálózati operációs rendszerek elmélete
2. fejezet
A Fork/Join utasításokkal tetszés szerinti precedenciagráf leírható, mivel nem szükséges, hogy minden szétbomlott folyamat újraegyesüljön, de a program strukturálatlan, a címkék és a Goto utasítások miatt áttekinthetetlen lesz. Parbegin/Parend A strukturált programozás magával hozta a Parbegin/Parend utasítások bevezetését. A Parbegin/Parend utasítások között egymással párhuzamosan végrehajtható utasításokat sorolhatunk fel. A Parbegin/Parend utasításokkal készült program strukturált, áttekinthető, Goto utasítás mentes lesz, de csak önmagukban ezekkel az utasításokkal nem írható le minden precedenciagráf, mivel az utasításpár csak együtt használható, ennek az eredménye, hogy csak olyan szülő-gyerek kapcsolatok írhatók le ezekkel, melyeknél a gyerekfolyamat a műveletei végrehajtása után visszatér a szülőhöz.
Folyamatleírók Az operációs rendszer a folyamatok kezeléséhez szükséges adatokat egy speciális adatszerkezetben, a folyamatleíróban (process control block) tárolja. Ez a következőket tartalmazza: · 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, lemezblokkok leírása, stb.) · A folyamat által használt egyéb erőforrások leírása (pl. a nyitott állományok leírása) · A regiszterek tartalma · Várakozó folyamatok esetében a várt esemény leírása · Az ütemezéshez szükséges adatok (prioritás, várakozási idő) 22
Hálózati operációs rendszerek elmélete
2. fejezet
· Számlázási információk és egyéb statisztikák
Szálak A szál (thread) a folyamtokhoz hasonló aktív entitás, a folyamatoktól az különbözteti meg, hogy az operációs rendszernek a szálak kezeléséhez kevesebb adatot kell nyilvántartania, általában csak saját regiszterei, és verme van, a kód- és az adatterületén és egyéb erőforrásokon más szálakkal osztozik. A szálak futási környezete a tradicionális folyamat, amely a szálak által közösen használt erőforrások tulajdonosa. A szálak előnye, hogy a váltás közöttük nagyon gyors és a közösen használt tárterület megkönnyíti a szálak közötti információcserét. Amikor „megbízunk” a szálak működésében nem szükséges minden aktív tevékenységnek független környezet. Újabb operációs rendszerek (WinXp, Linux) a folyamatok kezeléséhez hasonló rendszer-szolgáltatásokkal támogatják a szálak használatát, máshol felhasználói szintű könyvtárak használatával (UNIX, ANSI C) lehet szálakat kezelni.
Megszakításkezelés A megszakításokról általában A megszakítási rendszerre azért van szükség, mert a számítógépes rendszerek olyan alkatrészeket is tartalmaznak, amelyek párhuzamosan is működtethetők. Megszakításnak nevezünk a számítógép részéről kezdeményezett minden olyan “akciót”, amely az éppen feldolgozás alatt álló folyamatot – külsőleg vagy belsőleg – megszakítva, (annak állapotát esetlegesen a folytatáshoz szükséges állapotban megőrizve) egy másik folyamatnak – az ún. megszakítási rutinnak – adja át a vezérlést. A megszakítási rutin ezután dönthet újabb akció(k) végrehajtásáról és/vagy a vezérlés visszaadásáról a megszakított folyamatnak. A kiváltó mechanizmus alapján kétféle megszakítást különböztetünk meg: · Hardver-megszakítások: Mindig valamilyen, a számítógéphez csatlakoztatott külső (tehát nem a végrehajtó egységen belüli) egység váltja ki (pl. bővítőkártya, DMA vezérlő) ezáltal jelezve valamilyen tevékenység befejezését (pl. adat küldése) vagy éppen megkezdésének szükségességét (pl. adat fogadása). · Szoftver-megszakítások: Egy speciális utasítás segítségével maga az éppen aktív folyamat váltja, voltaképpen egy másik folyamatnak (a megszakítási rutinnak) átadva a vezérlést. A fejlettebb architektúrákban azonban a megszakítások prioritási hierarchiában vannak elrendezve. Ez azt jelenti, hogy a megszakítások között valamilyen „fontossági sorrendet” állapítanak meg, időkritikusság (pl. valós idejű alkalmazások) ill. a rendszer működőképességének fenntartását befolyásoló jellemzőik (pl. hibakezelő megszakítások) alapján. Így az azonos időben beérkezett megszakítási kérelmek közül mindig egyértelműen meghatározható, hogy melyik kerüljön előbb végrehajtásra. E mellett általában a nagyobb 23
Hálózati operációs rendszerek elmélete
2. fejezet
prioritású megszakításkérelmek megszakíthatják az alacsonyabb prioritású megszakítások kiszolgálását, míg ez fordítva nem lehetséges. Általában az ilyen rendszerekben megkülönböztetnek két típusú megszakítást: · Maszkolható megszakítások: Kiszolgálásuk letiltható · Nem maszkolható megszakítások: Kiszolgálásuk nem tiltható le. Ezen megszakítások általában valamilyen, a rendszer működőképességét biztosan veszélyeztető hibát jeleznek (pl. memória-paritás hiba). A megszakítási rendszer lehetővé teszi: · a központi egységen belül előálló speciális feltételekre való reagálást, · a kívülről érkező jelzések (megszakításkérelmek) kezelését, · a párhuzamosan üzemeltethető egységek közötti koordinációt.
Megszakításosztályok A megszakításokat a következő osztályokba soroljuk: · Perifériák megszakításai, amelyek perifériás berendezések állapotának változását, adatátvitel befejeztét jelzik. · Belső hardver megszakítások, pl. programozható óra. · Utasítás-végrehajtási hibák, amelyeket például nullával való osztás, vagy pl. a (virtuális) tárkezelés védelmi mechanizmusai válthatnak ki, · Hiba megszakítások, amelyeket a hardver meghibásodásai, vagy a tápfeszültség kimaradás váltanak ki. · Szoftver megszakítások, amelyek speciális gépi utasítások (csapda), például a rendszerhívások.
Megszakítási kérelmek kiszolgálása Az operációs rendszerek a megszakítások kiszolgálásánál kétféle módon járhatnak el: 1. A megszakítások hatására az operációs rendszer megfelelő kiszolgáló rutinja indul el, egy rövid időre felfüggesztve az éppen futó folyamatot, a megszakítás kiszolgálása után – általában – a felfüggesztett folyamat tovább fut. A megszakítás bekövetkeztekor, illetve kiszolgálása végeztével nem történik környezetváltás, csak a kiszolgáló rutin által használt regisztereket mentjük el és állítjuk vissza. 2. Ritkábban a megszakítást kiszolgáló rutin környezetváltást okoz, azonnal elindítva egy a megszakításra váró folyamatot. Ez a folyamat így elkerüli a futásra kész állapotot, várakozóból rögtön futóvá válik. A megszakítás menete a következő: 1. Megszakítási kérelem érkezik a CPU-hoz. 2. A CPU a kérelmet várakoztatja, amíg egy utasításciklus be nem fejeződik, vagy amíg az adott osztályú megszakítás tiltott.
24
Hálózati operációs rendszerek elmélete
2. fejezet
3. Amikor a CPU elfogadja a megszakítást, segít félretenni a megszakított program állapotát jelző állapotvektort a megfelelő verembe. 4. Automatikusan privilegizált állapot jön létre, és többnyire legalább az adott osztály megszakítása tiltott. 5. A megszakítási osztálynak megfelelő megszakítási vektorból a CPU előveszi a megszakító rutin induló állapotvektorát, és a megszakító rutin első utasítására adja a vezérlést. 6. A megszakító rutin befejezi az előző program állapotvektorának mentését, ha ezt a hardver nem végzi el tökéletesen, majd elkezdi a megszakítás kérelem okának felderítését és a szükséges teendők elvégzését. 7. Amint a megszakítás feldolgozása túl van a kritikus szakaszon, visszaállítja az adott osztály megszakíthatóságát. 8. A megszakítás feldolgozása rendszerint azzal ér véget, hogy a vezérlést átadja valamilyen más programnak, ami többnyire az operációs rendszer valamelyik ütemező rutinja. 9. Az ütemező dönt a folytatásról, és előveszi a folytatni szándékozott program állapotvektorát a veremből, majd a vezérlést a program megszakítását követő utasításra adja.
A PC-k megszakítási rendszere A PC-k megszakítási rendszere is két különböző – de szorosan összefüggő – részre osztható a fenti besorolásnak megfelelően. Az eredeti IBM PC-ben a hardver megszakítások kezelését egy i8259A jelű megszakítás-vezérlő végezte. Ez az egység 8 szintű hardver-megszakítási rendszert biztosított. Az AT kategóriájú gépekbe azonban már két darab i8259A vagy kompatibilis áramkört építenek be, a hardver megszakítások számát ezáltal 16-ra növelve. A bővítő egységek a buszra kivezetett nyolc ill. tizenhat darab megszakítás-vonal egyike logikai szintjének megváltoztatásával tudják megszakításkérelmeiket jelezni. A megszakítás száma egyben - a többi megszakításhoz képesti prioritást is jelent, így a 0. számú a legnagyobb, míg a 15. a legkisebb prioritású hardver-megszakítás. A hardver megszakításokhoz a megszakítás-vezérlő különböző szoftver-megszakításokat rendel, így a hardver-megszakítás
25
Hálózati operációs rendszerek elmélete
2. fejezet
bekövetkeztekor - ha a megszakítás a kiszolgálási feltételeknek megfelel - a meghatározott megszakítási rutin kapja meg a vezérlést. A PC-k 256 szintű szoftver-megszakítási rendszerrel rendelkeznek. Ez azt jelenti, hogy 256 különböző, egymástól független megszakítási rutin használatát teszik lehetővé. A megszakítások számozása nulla-bázisú, tehát az első megszakítás a 0., míg az utolsó a 255. számú. A szoftver megszakítások nem alkotnak prioritási hierarchiát, így egy megszakítási rutinból szabadon aktiválhatók más megszakítási rutinok is. Azt, hogy adott számú megszakítás aktiválásakor melyik folyamat kapja meg a vezérlést az ún. megszakítás-vektor táblázat határozza meg. A táblázat elemei az ún. megszakítás-vektorok, melyek – mint nevük is mutatja – arra a 16 bites memóriacímre mutatnak, ahol az adott megszakítási rutin belépési pontja helyezkedik el. A hardver-megszakítások kiszolgálásakor a processzor a jelzőbiteket és a végrehajtandó utasítás címét az éppen aktuális verembe menti el, letiltja a megszakításokat, majd a vezérlést a hozzárendelt szoftver-megszakítási rutinnak adja át a megszakítás-vektor táblázat adott elemében tárolt értékekkel való feltöltésével. A megszakítási rutin a vezérlést a megszakított folyamatnak egy speciális utasítás az IRET (Interrupt RETurn = visszatérés a megszakításból) segítségével adja vissza, ami visszatölti a veremből az elmentett értékeket (köztük a következő végrehajtandó utasítás címét, ezáltal visszaadva a vezérlést a megszakított folyamatnak) és engedélyezi a megszakításokat. A megszakítás kiszolgálása során a megszakítás-kezelő rutinnak kell gondoskodnia a megőrizni kívánt regiszterek értékének mentéséről, majd visszatöltéséről. Ez a mechanizmus biztosítja, hogy bármikor is következik be egy megszakítás a megszakított folyamat számára észrevétlenül, és zavartalanul zajlódjon le kiszolgálása. A szoftver-megszakítások kiszolgálása ennél jóval egyszerűbb, hiszen itt az éppen aktív folyamat tudatosan, előre meghatározott időben kvázi meghívja a megszakítási rutint, így fel van készülve a megszakítási rutin által esetlegesen a processzor belső regisztereiben történő változtatásokra és megteheti a szükséget „óvintézkedéseket”. A szoftver-megszakítás kiváltásakor a processzor ezért csak az éppen végrehajtandó utasítás címét menti el a verembe. Ebben az esetben is a megszakítási rutinnak magának kell gondoskodnia a módosított, de esetlegesen megőrizni kívánt regiszterek értékének megőrzéséről és visszaállításáról. Ez (ti. hogy nem feltétlenül áll vissza minden regiszter értéke a híváskorira) lehetőséget nyújt a megszakítási rutinnak a megszakítást kérő folyamat felé esetlegesen hibakód, vagy más eredmény közlésére a regisztereken keresztül. A szoftver-megszakítási rutin a RETF (Far RETurn = távoli (16-bites) visszatérés) utasítás végrehajtásával tudja a vezérlést visszaadni a hívó folyamatnak. Mint látható a hardver- ill. szoftver-megszakítások kiszolgálása mind a processzor, mind a megszakítási rutin részéről más lépések megtételét követeli meg, ezért a különböző célú megszakításrutinok hívásai (programból) nem egyeznek meg egymással (igaz, általában nincs is szükség keverésükre, pl. miért hívna meg az ember egy hardver megszakítást?). 26
Hálózati operációs rendszerek elmélete
2. fejezet
Az hardver-megszakításokat IRQ0 és IRQ15 közötti értékekkel (IRQ = Interrupt ReQuest = megszakítási kérelem), míg a szoftvereket INT0h és INTFFh közötti értékekkel (INT = INTerrupt = megszakítás) jelölik az egyértelműség kedvéért.
27
Hálózati operációs rendszerek elmélete
Ellenőrző kérdések 2. I. Válassza ki a helyes megoldást! 1. Mi a folyamat? a. Életre kelt program b. Egy éppen futó programrész c. Az algoritmus operációs rendszerbeli neve 2. Melyik nem folyamatállapot? a. Futó b. Alvó c. Várakozó 3. Mikor függesztünk fel egy folyamatot? a. Ha leáll az operációs rendszer b. Soha c. Ha a rendszerben kevés az erőforrás 4. Mi a környezetváltás? a. Átkapcsolás egyik operációs rendszerről a másikra b. Ha több operációs rendszert indíthatunk egy gépen c. Átkapcsolás egyik folyamatról a másikra 5. Melyik nem utasítás párhuzamosítási módszer? a. Fork/Join b. Sleep/Walk c. Parbegin/Parend 6. Hány hardveres megszakítás található a PC-kben? a. 8 b. 15 c. 16
28
2. fejezet
Hálózati operációs rendszerek elmélete
2. fejezet
II. Döntse el, hogy igaz, vagy hamis-e az állítás! 1. A folyamat fogalma nem csak a programot, hanem a futás közben lefoglalt erőforrásokat is takarja. Igaz
Hamis
2. Multiprogramozott rendszerekben több folyamat végrehajtása párhuzamosan egyetlen CPU-t tartalmazó konfiguráción. Igaz
folyik
Hamis
3. A felfüggesztett folyamatok nem versengenek a rendszer erőforrásaiért. Igaz
Hamis
4. Az folyamatok közötti átkapcsolások zökkenőmentes megvalósításához elég a folyamatok állapotát menteni. Igaz
Hamis
5. A lehetséges folyamat párhuzamosítások, ill. szemléletes ábrázolására szolgál a precedenciagráf. Igaz
sorrendi
kötöttségek
Hamis
6. A Parbegin/Parend utasításokkal tetszés szerinti precedenciagráf leírható. Igaz
Hamis
7. A maszkolható megszakítások kiszolgálását nem lehet letiltani. Igaz
Hamis
III. Válaszoljon a feltett kérdésekre 1. Definiálja a folyamat fogalmát! 2. Milyen a folyamatkezelés multiprogramozott rendszerekben? 3. Milyen állapotátmeneteket ismer? 4. Mikor függeszthet fel a rendszer folyamatokat? 5. Mi a környezetváltás? 6. Miért fontos a folyamatok közötti kommunikáció? 7. Hogyan működik a Parbegin/Parend utasításpár? 8. Határozza meg, hogy mit értünk a szálak fogalma alatt! 9. Mi a megszakítás? 10. Milyen megszakításosztályokat ismer?
29
Hálózati operációs rendszerek elmélete
3. fejezet
3. fejezet Programok szinkronizációja A perifériás műveletek gyorsítása Probléma a perifériák sebességének a processzorhoz viszonyított lassúsága. Egy program tipikus szerkezete: olvas, feldolgoz, ír.
Pufferelés A CPU és az autonóm perifériavezérlők egyidejűleg működnek. A beolvasás egy pufferbe történik, a következő adat beolvasása rögtön megkezdődhet, ha a CPU elvette innen az adatot. Egy munkán belül az adat feldolgozása és a következő I/O művelet egymással átlapoltan történik (átlapolt feldolgozás). A további hardver fejlődés megnövelte a pufferek méretét. (blokkos átvitel, megszakítások stb.). Megjelenik a közvetlen memória átvitel (Direct Memory Access = DMA): a memória és a periféria közötti átvitel a processzortól függetlenül, önálló vezérlő segítségével történik. A pufferelés valamelyest kiegyenlíti a feldolgozás és a perifériás műveletek egymáshoz viszonyított sebességének ingadozását. Csak akkor jelent hosszú távú sebességnövekedést, ha a perifériás műveletek és a CPU működés összideje közel azonos. ez azonban ritka eset.
Spooling (Simultaneous Peripheral Operations On-Line) Az egyfelhasználós rendszereknél bevezették a spooling technikát, amely egy lassú perifériára (nyomtató) való kivitelnél úgy küszöböli ki a központi egység állandó tétlenségét, hogy a kivitel először egy gyorsabb háttértárra történik viszonylag rövid idő alatt, majd a főprogram tovább fut, és maga a nyomtatás más feladatokkal párhuzamosan, a központi egység hulladék idejében hajtódik végre. Mivel a lassú perifériák adatait a feldolgozási puffer helyett a mágneslemezen tárolják különböző munkák perifériás, és feldolgozási műveletei lapolódhatnak át. Így az I/O és a feldolgozás idejének kiegyenlítődésére nagyobb az esély. A diszk véletlen hozzáférése lehetővé teszi a munkák futtatási sorrendjének a pillanatnyi teljesítményviszonyokhoz igazítását.
31
Hálózati operációs rendszerek elmélete
3. fejezet
Konkurens folyamatok Egy rendszer több folyamatból állhat, folyamatok keletkezhetnek, megszűnhetnek. A folyamatok függetlenek, ha egymás működését semmilyen módon nem befolyásolják. Független folyamatok végrehajtása általában 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. A folyamatok között csatolás (függőség) jöhet létre a következő esetekben: · Logikailag független folyamatok megosztottan használnak erőforrásokat (pl. egymást nem ismerő felhasználók folyamatainak végrehajtása ugyanazon a számítógép-konfiguráción, multiprogramozott operációs rendszer felügyelete alatt). · A folyamatok logikailag is függenek egymástól, együttműködnek valamely feladat megoldásán, közös változóik vannak, kommunikálnak egymással (pl. irányító rendszerek különböző funkcióit ellátó programok). A csatolás miatt a folyamatok tiszta aszinkron futását a működés helyessége érdekében korlátozni kell. Az együttműködő folyamatok használatainak indokai: · Erőforrások (fizikai és logikai) megosztása: Az erőforrásokat átlapoltan ("egyszerre") többen használhatják, így azok kihasználtsága növekszik. · Számítások felgyorsulása (több processzor esetén): a feladatokat egymással párhuzamosan futtatható részekre bontva és ezeket egy időben, különböző processzorokon futtatva a program végrehajtási sebessége nő. · Felhasználók kényelme: A felhasználók a számítógépet egy időben több feladat megoldására használhatják. · Modularitás: Egy adott feladat kisebb, áttekinthetőbb részekre bontásának lehetséges módja az együttműködő folyamatokra bontás. Bizonyos feladatokhoz, ahol a környezet párhuzamos tevékenységből áll (vezérlés, folyamatirányítás) ez a kényelmes, kézenfekvő modell.
Szinkronizáció A szinkronizáció a folyamat végrehajtásának olyan időbeli korlátozása, ahol az egy másik folyamat futásától, esetleg egy külső esemény bekövetkezésétől függ. Alapesetei a következők: · Precedencia: Két vagy több folyamat bizonyos utasításainak meghatározott végrehajtási sorrendjét jelenti. Egy Pi folyamat Si és egy Pj folyamat Sj utasításainál a precedencia akkor áll fenn, ha Sj végrehajtása csak akkor kezdődhet el, ha Si már befejeződött. Természetesen itt és a későbbi definíciókban az "utasítás" nem egy gépi utasítást, hanem a programozó által összekapcsolt utasítássorozatot jelent. · Egyidejűség: Két vagy több folyamat bizonyos utasításai végrehajtásának egy időben való elkezdését jelenti. Ebben az esetben Si-t és Sj-t - egy időben kell elkezdeni. Az ilyen szinkronizáció két folyamatnak egy találkozási 32
Hálózati operációs rendszerek elmélete
3. fejezet
pontját, randevúját valósítja meg, a két folyamat bevárja egymást, mielőtt a meghatározott utasítást megkezdené. · Kölcsönös kizárás: A résztvevő folyamatok bizonyos utasításainak végrehajtási sorrendje nincs megszabva, de biztosítani kell, hogy a folyamatokban kijelölt utasítások (Si , Sj , ...) közül egy időben csak az egyik futhat, vagyis egyik végrehajtásának be kell fejeződni, mielőtt a másik végrehajtása megkezdődne. A szinkronizációhoz kapcsolódó egyéb fogalmak: · Holtpont (deadlock): A holtpont több folyamatra, esetleg az egész rendszerre vonatkozó fogalom. Holtpont akkor következik be, ha a folyamatok egy csoportja olyan feltételre, olyan esemény bekövetkezésére vár, amelyet csak a csoport egy másik várakozó folyamata képes előállítani. Nem beszélünk holtpontról, ha valamelyik folyamat egy külső eseményre várakozik, hiszen ez az esemény - legalábbis az operációs rendszer szemszögéből, a környezetet nem vizsgálva - még bekövetkezhet. · Éhezés (starvation, indefinite postponement): Az éhezés egyes folyamatokra vonatkozó fogalom. Egy folyamat akkor éhezik, ha a továbbfutásához szükséges erőforrásokhoz véges időn belül nem jut hozzá, mert más folyamatok mindig megelőzik. (Rögzített folyamatprioritások, „tisztességtelen” ütemezés.)
Kölcsönös kizárás Mivel az operációs rendszerek legfontosabb feladata az erőforrások kezelése, azok osztott használatának biztosítása, ezért az operációs rendszerek belsejében a különböző szinkronizálási esetekből leggyakrabban a kölcsönös kizárás fordul elő. Ekkor egy erőforrás használatát valamelyik folyamatnak be kell fejeznie, mielőtt egy másik folyamat elkezdené, különben az erőforrást a második folyamat nem definiált, inkonzisztens állapotban találja.
A kritikus szakasz Azon programrészletet, amelynek működése közben a folyamat az erőforrásra vonatkozó tevékenységét nem lehet megszakítani, pontosabban, amíg a felhasznált erőforráshoz más folyamat nem férhet hozzá, kritikus szakasznak nevezzük. A kritikus szakasz megvalósításának kritériumai a következők: 1. Biztosítsa a kölcsönös kizárást: Egy időben csak egyetlen folyamat hajthatja végre a kritikus szakaszban lévő utasításokat. 2. Ha nincs folyamat a kritikus szakaszban, de van több olyan folyamat, amely be akar lépni, akkor az algoritmus ezek és csak ezek közül véges idő alatt kiválaszt egyet és azt a kritikus szakaszba beengedi. 3. A folyamatok várakozása korlátozott: Ha egy folyamat a kritikus szakaszba belépésre vár, akkor ezt a folyamatot véges számban előzhetik meg más folyamatok. (nem minden operációs rendszerben van erre szükség)
33
Hálózati operációs rendszerek elmélete
3. fejezet
A kritikus szakasz védelmét a kritikus szakasz elején elhelyezkedő belépő (entry) és a végén található kilépő (exit) utasítással valósíthatjuk meg. Ezek megvalósításának elemi módszerei: · Tisztán programozott megoldások: Ezek közösen használt változókon alapulnak, több processzoron párhuzamosan futó folyamatokat tételeznek fel, a mindhárom kritériumot teljesítő eljárások bonyolultak. A megoldásokban az erőforrásokon végzett műveletekről csak azt tételezzük fel, hogy azok nem interferálnak, hatásuk egyértelmű. · Hardvertámogatás: Speciális megszakíthatatlan gépi utasítások, amelyek egy utasítás alatt összevontan több műveletet is elvégeznek. · Szemafor (semaphore): A szemafor egy speciális adattípus, amely 0-t illetve pozitív egész számokat tartalmazhat és két művelet, a P (proberen – vizsgál vagy wait), illetve a V (verhogen – növel vagy signal) van értelmezve rajta. Mindkét művelet elemi, megszakíthatatlan. Ez a szemafor általános definíciója, s kezdőértékétől függő számú folyamat áthaladását teszi lehetővé. Az 1 kezdőértékkel rendelkező szemafort szokás bináris szemafornak nevezni. Bináris szemaforokkal mind a precedencia, mind a kölcsönös kizárás egyszerűen megvalósítható. · Fordító program általi támogatás: Léteznek magas szintű programozási nyelven olyan programszerkezetek, amelyek a kritikus szakasz automatikus, megbízható megvalósulását támogatják. Magas szintű programozási nyelvet használva a fordítóprogram ellenőrzi a programot, kiszűrheti a szinkronizációs hibák jelentős részét. · Feltételes kritikus szakasz: Ha valamelyik folyamat az s utasítást hajtja végre, más folyamat közben nem férhet hozzá a v változóhoz – nem hajthat végre más, v-hez tartozó kritikus szakaszt. A kritikus szakaszhoz hozzárendelünk egy b logikai feltételt. Ha egy folyamat beléphet a kritikus szakaszba, akkor kiértékelődik a b feltétel és a folyamat csak akkor haladhat tovább, hajthatja végre az s utasítást, ha a feltétel igaz. Ha hamis, a folyamat felszabadítja a kritikus szakaszt, és addig várakozik, amíg a feltétel igazzá nem válik. · Monitor: A monitor egy olyan programszerkezet, amelybe a programozó programrészleteket, eljárásokat zárhat. A monitor biztosítja, hogy egy időben csak egy folyamat lehet aktív a monitorban, csak egy folyamat hajthat végre valamelyik monitorbéli programrészletet. Ha már van aktív folyamat a monitorban, a többi folyamatnak a monitorba lépésnél várakozniuk kell. A folyamat úgy várakozik, hogy egy ciklusban teszteli a belépés feltételét. Az aktív várakozás állandóan használja a processzort, azaz a folyamat állandóan futó állapotban van. A multiprogramozott operációs rendszerek helyes működéséhez viszont ilyenkor a várakozni kényszerülő folyamattól el kell venni a processzort. Üres utasítás esetén az operációs rendszer a folyamatot várakozó állapotúvá teszi, feljegyzi a szemaforhoz tartozó valamilyen adatszerkezetbe (láncolt listába), hogy ez a folyamat rá várakozik, majd a processzort egy futásra kész folyamatnak adja át.
34
Hálózati operációs rendszerek elmélete
3. fejezet
Holtpont Holtpontról akkor beszélünk, ha több folyamat olyan eseményre, erőforrás felszabadulására vár, amelyet csak egy másik, ugyancsak várakozó folyamat tud előidézni. Napjaink operációs rendszerei már foglalkoznak a holtpontok kezelésével, mivel ez a probléma egyre fontosabbá válik: az operációs rendszereknek egyre növekvő számú folyamatot, erőforrást kell kezelniük, az időosztásos és valós idejű rendszerek jelentősége tovább növekszik.
Holtponti helyzet kialakulása Holtpontok kialakulásának feltételei: 1. A rendszerben véges számú erőforrást kell felosztani az ezekért versengő folyamatok között. 2. Az erőforrások osztályokba csoportosíthatók, az azonos osztályba tartozó erőforrások közül egy igénylő folyamat bármelyiket igénybe veheti. 3. Az erőforrásokat használati módjuk szerint csoportosíthatjuk osztottan vagy kizárólagosan használható erőforrásokra. A kizárólagosan használható csoportba tartoznak az elvehető (preemtable) és nem elvehető (non-preemtable), ez utóbbiakat helyes működéséhez a folyamatnak mindaddig birtokolnia kell, amíg le nem mond róla. 4. A folyamatok az erőforrások használatánál a következő lépéseket hajtják végre: a. Igénylés. Ha az igény nem teljesíthető, az erőforrás foglalt, akkor a folyamat várakozni kényszerül. b. Felhasználás. A folyamat az erőforrást kizárólagosan használja. c. Felszabadítás. A folyamat elengedi az erőforrást. Amennyiben az erőforrásra várakoztak más folyamatok, ezek közül valamelyik továbbléphet. A holtpont kialakulásának szükséges feltételei a következők: · Kölcsönös kizárás: A folyamatok az erőforrásokat (legalább egyet) kizárólagosan használnak. · Foglalva várakozás: Van olyan folyamat, amelyik lefoglalva tart erőforrásokat, miközben más erőforrásokra várakozik. · Nem elvehető erőforrások: Találhatók a rendszerben olyan erőforrások, amelyek nem vehetők el az azt éppen használó folyamattól..
35
Hálózati operációs rendszerek elmélete
3. fejezet
· Körkörös várakozás: Két, vagy több folyamat kölcsönösen váakozik a többi folyamat által lefoglalva tartott erőforrásra, és csak akkor tudja a többiek számára szükségeseket felszabadítani, ha már tőlük a számára szükségeset megkapta. A rendszerben lévő folyamatok közül létezik egy olyan (P0, P1, ... Pn) sorozat, amelyben P0 egy P1 által lefoglalva tartott erőforrásra vár, Pi egy Pi+1-re végül Pn pedig P0-ra vár. A rendszer pillanatnyi állapotát az erőforrás-használati gráf (resource allocation graph) írja le. Pi:
Folyamatok
Ri:
Erőforrásosztályok
Pi à Ri:
Erőforrás igénylése
Ri à Pi:
Erőforrás használatba vétele
Ha az igény kielégíthető, az erőforrás igénylés ág azonnal átvált erőforrás használat ággá. Az erőforrás-használati gráfban levő ciklus:
Holtpont kezelése · Az erőforrások használatánál bevezetett szabályokkal biztosítjuk, hogy holtpont ne alakulhasson ki. Erre két lehetőség kínálkozik: o Holtpont megelőzése 36
Hálózati operációs rendszerek elmélete
3. fejezet
o Holtpont elkerülése · Hagyjuk, hogy esetleg kialakuljon a holtpont és csak ekkor avatkozunk be. A beavatkozás két lépésben történik: 1. Holtpont felismerése 2. Holtpont megszüntetése A holtpont megelőzése (deadlock prevention) A holtpont megelőzésének módszere a holtpont kialakulása valamelyik feltételének kizárásával eleve lehetetlenné teszi, hogy a rendszerben holtpont jöjjön létre. 1. A kölcsönös kizárás feltétele általában nem kerülhető meg, hiszen a rendszerben vannak kizárólagosan használandó erőforrások. 2. Foglalva várakozás kizárásánál két stratégia alkalmazható: · A folyamat elindulásakor egyszerre igényli a futáshoz szükséges összes erőforrást, és csak akkor mehet tovább, ha mindegyiket megkapta. · A folyamat csak akkor igényelhet erőforrásokat, ha más erőforrást nem használ. Problémák: · Rossz az erőforrások kihasználtsága, a folyamatok a szükségesnél tovább birtokolják azokat. · Fennáll a kiéhezés veszélye. Ha egy folyamat több „népszerű” erőforrást is akar használni, akkor nagy az esélye, hogy egyszerre az összest soha nem kaphatja meg. 3. Erőforrások elvétele esetén két stratégia lehetséges: · Ha egy folyamatnak valamelyik erőforrásigénye nem elégíthető ki, akkor az operációs rendszer elveszi tőle az összes lefoglalva tartott erőforrását. · Ha egy folyamatnak olyan erőforrásra van szüksége, amelyik foglalt, akkor megnézzük, hogy valamelyik várakozó folyamat foglalja-e. Ha igen, ettől a várakozótól elvesszük, és az igénylő továbbmehet. Ha nincs ilyen várakozó folyamat, az igénylő is várakozni kezd. Problémák: · Az erőforrások jelentős része csak úgy vehető el egy folyamattól, ha az futásának addigi eredményeit is elveszti. · Bár az előzőnél jobb erőforrás-kihasználást biztosít, de itt is fennáll a kiéheztetés veszélye. 4. Körkörös várakozás elkerülése érdekében rendeljünk a rendszer összes erőforrásához egy növekvő számsorozat egy-egy elemét. A két lehetőség: · A folyamatok csak növekvő sorrendben igényelhetnek erőforrásokat. 37
Hálózati operációs rendszerek elmélete
3. fejezet
· A folyamat csak akkor igényelhet egy erőforrást, ha nem használ ez igényeltnél magasabb sorszámút. Probléma: · Nehéz az erőforrásokat olyan módon beszámozni, hogy az tükrözze az erőforrás használat szokásos sorrendjét. Gyakorlatilag csak logikailag függő folyamatokból álló rendszerekben használható, interaktív rendszerekben megjósolhatatlan, hogy a folyamatok milyen sorrendben akarják az erőforrásokat használni. A holtpont elkerülése (deadlock avoidance) A holtpont kialakulásának feltételeit nem akadályozzuk meg, de a folyamatok erőforrásigényéről való ismereteink alapján a kért erőforrásokat "óvatosan" allokáljuk, hogy holtpont ne alakulhasson ki. A stratégiák feltétele: · ismerjük a folyamatok erőforrás típusonkénti maximális igényét, azaz egy időben mennyi a legtöbb lefoglalva tartott, a típushoz tartozó erőforrás, · feltételezzük, hogy ha a folyamat igényét kielégítettük, akkor az véges idő alatt lefut és visszaadja a felhasznált erőforrásokat. A Bankár algoritmus A Bankár algoritmus úgy kerüli el a holtpont kialakulásának lehetőségét, hogy a rendszert mindig ún. „biztonságos” állapotban tartja. Egy állapotot akkor tekintünk biztonságosnak, ha létezik legalább egy olyan sorozat, amely szerint az összes folyamat erőforrásigénye kielégíthető. Az erőforrás-kezelő tevékenysége hasonlít a bankáréhoz, aki a lehető legtöbb kölcsönt szeretné nyújtani (meglévő pénzét olyan ügyfélnek adva, akitől – ha kamatostul törlesztik - annyi pénzt kap vissza, hogy abból fedezni tudja egy másik ügyfél kölcsönigényét) a csődbe jutás veszélye nélkül. Az algoritmus csak akkor működik, ha a folyamatok induláskor tudják, hogy a különböző erőforrásokból egyszerre maximálisan hányat fognak felhasználni. Az algoritmus úgy működik, hogy egy beérkezett erőforrásigény teljesítése előtt azt kell eldönteni, hogy az igény kielégítése még biztonságos állapotban hagyná-e a rendszert. Ha igen az erőforrást megkapja az igénylő folyamat, különben vár, amíg a nem biztonságos helyzet megváltoztatásához elegendő erőforrás szabadul fel. Az algoritmus biztosítja a holtpontmentességet, ugyanis az erőforrás-kezelő mindaddig nem elégíti ki a várakozó folyamatok erőforrásigényét, amíg nem biztosítható, hogy az újabb erőforrások lefoglalása által előálló új állapot biztonságos, azaz a futó folyamatok erőforrásigényét valamilyen sorrendben ki tudjuk elégíteni, és ezáltal azok le tudnak futni. Nézzünk egy egyszerű példát! Tegyük fel, hogy egy rendszerben, amelyben összesen 12 erőforrás található, két folyamat fut (A és B). Az erőforrás kezelő nyilvántartása alapján az A folyamat legfeljebb 6, a B folyamat legfeljebb 11 erőforrást igényelhet. Mindkét folyamat 4-4 erőforrást már lefoglalt, tehát a szabadon maradt erőforrások száma szintén 4. 38
Hálózati operációs rendszerek elmélete
3. fejezet
Mi történik, ha a B folyamat előáll azzal az igényével, hogy azonnal kéri mind a 7 fennmaradó, előre bejelentett erőforrását? A szabad erőforrásokból a kérés nem elégíthető ki, tehát a B folyamat várólistára kerül. Az A folyamat azonban maximális igényének felhasználása esetén is futhat, miután lefutott az erőforrásait (4 + 4 = 8) visszaadja, ezáltal a B is lefuthat (8 > 7). A folyamatok tehát az (A, B) sorrendben biztonságosan befejeződhetnek.
Érkezzen az előzőleg leírt biztonságos állapotba egy C folyamat, amely bejelenti, hogy legfeljebb 8 erőforrást kér, de abból 2-re rögtön. Van elegendő szabad erőforrásunk, azonban az algoritmus előírja, hogy csak akkor szabad kielégíteni az igényeket, ha a változás eredményeképp születendő új állapot biztonságos marad.
Ha a C folyamatot beengedjük a fenti erőforrás foglalási táblázatot kapjuk. Kérdés, van-e olyan sorrend, melyben a folyamatok zavartalanul lefuthatnak? A táblázatból látható, hogy az A folyamat 2 erőforrást igényelhet még, és pont ennyi szabad erőforrás van is. Odaadva ezt a 2 erőforrást A-nak, az lefutva visszaadja ezt a 2-t és a már lefoglalt 4-et, összesen 6-ot. A táblázatból kitűnik, hogy ez pont elegendő a C folyamat maximális igényének kielégítésére. A C lefutása után visszakapjuk a C által lefoglalt erőforrásokat (8), amely pedig elegendő lesz a B folyamat teljes erőforrásigénylésének kielégítésére. Létezik tehát egy optimális futtatási sorrend (A, C, B), az állapot tehát biztonságos. Az algoritmus problémái a következők: · Időigényes. · Működésének alapfeltételei (ismert folyamatszám, maximális igények, a folyamat biztos befejeződése) az operációs rendszerekben valós körülmények között nem biztosíthatók. · Néha túlzott óvatosságból várakoztat folyamatokat, az erőforrások kihasználtsága rosszabb, mint a holtpont elkerülése nélkül.
39
Hálózati operációs rendszerek elmélete
3. fejezet
A holtpont felismerése (deadlock recognition) A holtpont az erőforrás-foglalási gráf vizsgálatával ismerhető fel, a gráfban feloldhatatlan hurkokat keresünk. Ha valamely folyamat igényei a vizsgált állapotban kielégíthetők, akkor a folyamathoz tartozó összes igény- és foglaltság ágat töröljük a gráfból. Ez optimista szemléletet tükröz. Reméljük, hogy a folyamat előbb-utóbb visszaadja a lefoglalt erőforrásokat. Ha nem, a holtpontot egy későbbi időpontban fedezzük fel. Ha nincs több ilyen folyamat és maradtak még kielégítetlen igények, akkor a rendszer egyes folyamatai holtpontban vannak. A holtpontban azok a folyamatok vesznek részt, amelyeknek igényei megmaradtak a gráfban. Az algoritmus időigényes, hiszen a rendszerben nagyon sok erőforrás lehet. Ha adott időközönként futtatjuk, nehéz eldönteni, milyen sűrűn kell ezt megtenni. Figyelembe kell venni, hogy a túl gyakori futtatás időigénye rontja a rendszer hatékonyságát, átbocsátó képességét, ha viszont túl ritkán futtatjuk, a holtpontban túl sokáig várnak a folyamatok. A holtpont akkor alakulhat ki, amikor egy folyamat erőforrás-igényét kielégítjük. Ha minden ilyen esetben lefuttatjuk az algoritmust, akkor a központi egysége túl sok időt tölt a holtpont felismerésével, viszont azonnal megtudjuk, hogy melyik folyamat zárta be a holtpontba rekedt folyamatok körét. Ezt az információt a holtpont felszámolásánál jól fel lehet használni. A holtpont felszámolása (deadlock recovery) A holtpont felismerése után azt fel kell számolni. Felszámolásnál két különböző lehetőség közül választhatunk: 1. Folyamatok terminálása (megszűntetése) · Minden a holtpontban résztvevő folyamatot megszüntetünk. Ez biztos, de költséges megoldás, hiszen a megszüntetett folyamatok addigi eredményei elvesz(het)nek. · Egyesével szüntetünk meg folyamatok, amíg a holtpont meg nem szűnik. A folyamat kiválasztásnál a következő paramétereket lehet figyelembe venni: · hány holtpont körben szerepel · mekkora a prioritása · mennyi ideje futott már, mennyit futna még · mennyi erőforrást tart lefoglalva · mennyi további erőforrásra lenne még szüksége · interaktív vagy batch program. 2. Erőforrások elvétele · A holtpontba került folyamatoktól egyesével elvesszük az erőforrásokat. A megválaszolandó kérdések: 40
Hálózati operációs rendszerek elmélete
3. fejezet
· Kitől vegyük el és melyik erőforrást? · A kiszemelt folyamatot vissza kell léptetni egy olyan állapotba, ahonnan a futást folytatni tudja. A folyamatnak leggyakrabban újra kell a futását kezdeni. Egyes operációs rendszerek a folyamatokhoz olyan ellenőrzési pontokat rendelnek, ahol a folyamat és eredményeinek teljes állapotát elmentik. A folyamat futását elég a legutóbbi ellenőrzési ponttól újraindítani. · El kell kerülni a folyamatok kiéhezését, biztosítani kell, hogy ne mindig ugyanattól a folyamattól vegyünk el erőforrásokat. Kombinált stratégiák A fenti algoritmusok mindegyike a rendszer teljesítményét jelentős mértékben csökkentheti. A kombinált stratégiák alkalmazásának alapötlete, hogy az erőforrásokat csoportokba osztjuk és az egyes csoportokban különböző stratégiát alkalmazunk. Példák a különböző osztályokra és a felhasznált stratégiákra: 1. Belső erőforrások (pl. rendszertáblák) A folyamatok létrejöttükkor azonos sorrendben igénylik ezeket az erőforrásukat, tehát a rendezett erőforrás-foglalás könnyen megvalósítható. 2. Operatív tár Mivel az operatív tár tartalma háttértárra másolható, alkalmazhatjuk az erőforrás elvételének módszerét.
ezért
3. Egy munkához (job) tartozó erőforrások (állományok, eszközök) Kötegelt rendszerekben, ahol a munka leírásából ismerhetjük a szükséges erőforrásokat, használhatunk holtpont elkerülő algoritmust. 4. Tárcsere (swap) terület Előzetes lefoglalás használható, hiszen a folyamatok tárigénye általában előre ismert.
41
Hálózati operációs rendszerek elmélete
3. fejezet
Ellenőrző kérdések 3. I. Válassza ki a helyes megoldást! 1. Melyik megoldás nem alkalmazható a perifériás műveletek gyorsítására? a. Szinkronizáció b. Pufferelés c. Spooling 2. Melyik nem a szinkronizáció alapesete? a. Kölcsönös kizárás b. Szignálküldés c. Precedencia 3. Mi a szemafor? a. Speciális adatszerkezet, a kölcsönös kizárás megvalósítására b. Folyamatok egyesítéséhez használt adatszerkezet c. Hardveres jelzőbit-kezelő 4. Melyik feltétel szükséges a holtpont kialakulásához? a. Éhezés b. Kölcsönös kizárás c. Vergődés 5. Melyik csoportba sorolná a Bankár algoritmust? a. Holtpontot megelőző algoritmusok b. Holtpontot felismerő algoritmusok c. Holtpontot elkerülő algoritmusok
42
Hálózati operációs rendszerek elmélete
3. fejezet
II. Döntse el, hogy igaz, vagy hamis-e az állítás! 1. A spooling esetén egy munkán belül az adat feldolgozása és a következő I/O művelet egymással átlapoltan történik. Igaz
Hamis
2. Független folyamatok végrehajtása általában aszinkron. Igaz
Hamis
3. A szinkronizáció a folyamat végrehajtásának időbeli korlátozása. Igaz
Hamis
4. Holtpontról akkor beszélünk, ha a folyamat továbbfutásához szükséges erőforrásokhoz véges időn belül nem jut hozzá. Igaz
Hamis
5. A szemafor egy speciális adattípus, amely 0-t illetve pozitív egész számokat tartalmazhat, s kezdőértékétől függő számú folyamat áthaladását teszi lehetővé. Igaz
Hamis
6. A Bankár algoritmus úgy kerüli el a holtpont kialakulásának lehetőségét, hogy a rendszert mindig ún. "biztonságos" állapotban tartja. Igaz
Hamis
7. A holtpont a precedencigráf vizsgálatával ismerhető fel. Igaz
Hamis
III. Válaszoljon a feltett kérdésekre! 1. Mi a pufferelés lényege? 2. Jellemezze a spooling technikát? 3. Mit nevezünk konkurens folyamati helyzetnek? 4. Mi a kölcsönös kizárás lényege? 5. Definiálja a kritikus szakaszt! 6. Mi a szemafor? 7. Mi a holtpont? 8. Mi a Bankár algoritmus lényege? 9. Hogyan ismerhető fel a holtponti helyzet? 10. Adjon megoldást a holtpont felszámolására!
43
Hálózati operációs rendszerek elmélete
4. fejezet
4. fejezet Processzor- és tárkezelés Az általános célú főprocesszor felépítése és működése
A:
Aritmetikai és logikai egység (Arithmetical and Logical Unit = ALU)
B:
Központi vezérlő logika (Central Processing Logic = CPL)
C:
Regiszterek (Registers)
D:
Lebegőpontos számítási egység (Floating Point Unit = FPU)
E:
Adatsín v. -busz vezérlő
F:
Címsín v. -busz vezérlő
G:
Belső sín v. busz
A regiszterek és az általuk végzett feladatok A regiszterek a 80x86 típusú mikroprocesszorok belső tároló helyei. (Számuk 80286 CPU-ban 15 db). A CPU működését jelentős mértékben gyorsítja, hogyha a gyakran használt adatokat nem az operatív tárban, hanem magában a processzorban tároljuk, megspórolva ezzel a processzor és a memória közötti út „lassú” megtételének idejét. Többek között a processzor által végzett műveletek operandusait, ill. végeredményeit is itt tárolja. A megszakítások is (részint) a regiszterekben, tárolják eredményeiket. A regiszterek csoportosítása Általános célú regiszterek Négy darab 16 bit méretű regiszter tartozik ide, amelyek fő feladata a következő:
45
Hálózati operációs rendszerek elmélete
4. fejezet
· AX: Akkumulátor regiszter (Accumulator Register) Aritmetikai műveleteknél gyakran használt. · BX: Bázisregiszter (Base Register) A szegmentált memória-címzésnél a cím offszet részét tartalmazza. · CX: Számlálóregiszter (Counter register) Az assembly nyelvben írt programok ciklusutasítás-számlálója. · DX: Adatregiszter (Data Register) Műveletek (pl.: aritmetikai) végzése közben adatok tárolására használatos. Ezen alapvető feladatuk mellett azonban ezek a regiszterek logikailag ketté is oszthatók, amelynek során az egyik „fél” regiszter az eredeti 16 bites regiszter magas (high), míg a másik annak alacsony (low) helyi értékű 8 bitjén található adatot fogja tartalmazni. Ezt tükrözi az így „keletkező” regiszterek megnevezése is. Például, az AX regiszterből lesz egy AH és egy AL regiszter. Amennyiben tehát AX tartalma FFEEh, akkor AH tartalma FFh, AL tartalma pedig EEh (az alsó indexbe tett h betű a szám hexadecimális voltát jelzi). A többi általános célú regiszter esetében ugyanez a helyzet. A 8 bites regiszterekkel éppen úgy végezhetők műveletek, mint az eredeti 16 bites regiszterekkel (természetesen kisebb terjedelmű adatokkal). Szegmensregiszterek Négy darab 16 bites regiszter tartozik ide, amelyek szegmentált memóriacímzésnél a cím szegmens részét tartalmazzák. · CS: Kódszegmens regiszter (Code Segment Register) · DS: Adatszegmens regiszter (Data Segment Register) · SS: Veremszegmens regiszter (Stack Segment Register) · ES: Extraszegmens regiszter (Extra Segment Register) Mutató-, és Indexregiszterek Öt darab 16 bites regiszter tartozik ide, amelyeket leggyakrabban más regiszterekkel együtt használnak. (Adott memóriacímet leggyakrabban az, ES:DI és DS:SI, regiszterpárokkal címzünk.) · IP:
Utasításszámláló regiszter (Instruction Pointer Register) Másik elterjedt neve Program Counter Register = PC
· SP: Veremmutató regiszter (Stack Pointer Register). · BP: Bázismutató regiszter (Base Pointer Register). · SI:
Forrásindex regiszter (Source Pointer Register).
· DI:
Célindex regiszter (Destination Pointer Register).
Flagregiszterek 46
Hálózati operációs rendszerek elmélete
4. fejezet
Ezek a következő jelzőbiteket tárolják: · Carry, · Parity, · Auxiliary Carry, · Zero, · Signum, · Trap, · Interrupt, · Direction, · Overflow.
A Neumann-ciklus A Neumann-elv alapján működő számítógépek működése a következő ciklus szerint törtnik: 1. Program indítása 2. Utasításszámláló 1-re állítása 3. Utasítás-elővétel (fetch) 4. Utasítás-dekódolás (decode) 5. Utasítás-végrehajtás (execute) 6. Utasításszámláló növelése (increment) 7. Program vége vizsgálat 8. Ha vége kilép, ha nem visszalépés a 3. pontra. A számítógép műveletvégző egysége a Neumann-elvnek megfelelően az operatív tárban található utasításokat hívja le és hajtja végre az ugyancsak az operatív tárban található adatokon. Mivel az utasítások és az adatok ugyanúgy (egyesek és nullák sorozataként) tároltak a memóriában, így a lehívott adathalmazt értelmeznie kell a műveletvégző egységnek, ez a dekódolás. Az utasításszámláló teszi lehetővé, hogy a számítógép a műveletek közben tárolja, hogy éppen melyik utasítás végrehajtásánál tart. Az utasításszámláló értéke minden befejezett utasításvégrehajtás után növekszik, így a következő utasításra fog mutatni. A Neumann-ciklus a program befejezéséig tart.
47
Hálózati operációs rendszerek elmélete
4. fejezet
A CPU ütemezése Az ütemezés célja és szerepe Az operációs rendszer egyik legfontosabb feladata, hogy a rendszer erőforrásait kezelje, azaz meghatározott gazdálkodási, védelmi, stb. szempontok betartásával ellássa a folyamatokat futásukhoz szükséges erőforrásokkal. Az ütemezés (scheduling) az a tevékenység, amelynek eredményeként eldől, hogy egy adott erőforrást vagy erőforráscsoportot a következő pillanatban mely folyamat használhat. A jelen fejezetben a legfontosabb rendszererőforrás, a központi egység ütemezésével foglalkozunk.
A CPU ütemezésének szintjei Az ütemezés három különböző szintjét különböztetjük meg: 1. Hosszútávú (long-term) vagy munka ütemezés A hosszú távú ütemezés határozza meg, hogy a véletlen elérésű háttértáron várakozó, még meg nem kezdett munkák közül melyek kezdjenek el futni. Az ütemező algoritmusnak viszonylag ritkán kell futnia, ha közel azonos terhelést akarunk biztosítani, akkor egy futó munka befejeződésekor választunk ki egy új elindítandót. Mivel ritkán fut, ezért a következő munka kiválasztása viszonylag hosszú ideig tarthat, az algoritmusnak nem kell gyorsnak lennie. Az algoritmusnak olyan munka-halmazt (job-mix) kell összeállítania, ami a rendszer erőforrásait kiegyensúlyozottan használja, nem indít el olyan munkát, amely egy már úgyis túlterhelt erőforrásra tart igényt. A CPU kihasználtságát szem előtt tartva biztosítja, hogy CPU-korlátozott és periféria-korlátozott munkák egyenletesen forduljanak elő. 2. Középtávú (medium-term) ütemezés A középtávú ütemezés a rendszer időszakos terhelésingadozásait egyes folyamatok felfüggesztésével illetve újraaktiválásával próbálja kiegyenlíteni. Egy folyamat felfüggesztésekor a folyamat környezetét háttértáron tárolják és megfosztják az elvehető erőforrásaitól (pl. memóriától). A felfüggesztett folyamatok nem versengenek tovább az erőforrásokért, csak aktiválásuk után válhatnak futásra késszé. 3. Rövidtávú (short-term) ütemezés A rövidtávú ütemezés dönti el, hogy a processzort melyik futásra kész folyamat kapja meg. 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. Az ütemező mindig a tárban van, része az operációs rendszer magjának.
Az ütemező algoritmusok alapjai Az ütemezés alapját az képezi, hogy egy folyamat futása során két különböző jellegű tevékenységet hajt végre: 48
Hálózati operációs rendszerek elmélete
4. fejezet
· CPU löket (CPU burst): Ennek során a folyamatnak csak a processzorra (és az operatív tárra) van szüksége, · Periféria löket (I/O burst): Ennek során a folyamat egy perifériás átvitelt hajt végre, annak lezajlására várakozik. A folyamatnak a periféria löket alatt nincs szüksége a központi egységre, így azt egy másik folyamat használhatja. Ütemezés a folyamatok következő állapotátmeneteinél következhet be: · A futó folyamat várakozni kényszerül. · A futó folyamat vagy lemond a processzorról vagy elveszik tőle. · Egy folyamat aktiválódik, futásra késszé válik. · A futó folyamat befejeződik. Az ütemezési algoritmusok teljesítményét a következő paraméterek alapján szokták összehasonlítani: · CPU kihasználtság: A központi egység 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 henyél (idle), azaz nincs olyan folyamat, amelyik futhat, illetve a rendszeradminisztrációra, ütemezésre, stb. fordított idő (rezsi, overhead). Tipikus értékei 40-90 % közöttiek. · Átbocsátó képesség (throughput): időegység alatt hány munkát futtat le.
Az
operációs
rendszer
egy
· Körülfordulási idő (turnaround time): Egy munka a rendszerbe helyezésétől számítva mennyi idő alatt fejeződik be. · Várakozási idő (waiting time): Egy munka vagy folyamat mennyi időt tölt 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 munkák esetén a hosszútávú ütemezés által okozott előzetes várakozás is. A körülfordulá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 parancsaikra. A válaszidő az az idő, amely az operációs rendszer kezelői felületének – esetleg egy felhasználóval kommunikáló folyamatnak – adott kezelői parancs után a rendszer első látható reakciójáig telik el, amennyi idő alatt a rendszer válaszolni kezd.
Az ütemező algoritmusok típusai: A CPU ütemezési algoritmusit többféle képen csoportosíthatjuk. Annak alapján, hogy az operációs rendszer „beleszólhat”-e egy már elindult folyamat végrehajtásába, megkülönböztetünk preemptív és nem preemptív algoritmusokat: · Preemptív algoritmusok: 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. 49
Hálózati operációs rendszerek elmélete
4. fejezet
· Nem preemptív algoritmusok: Egy folyamattól, miután egyszer megkapta a központi egységet, azt nem lehet elvenni, azaz a folyamat csak általa kiadott utasítások (erőforrásra, eseményre várakozás, befejeződés vagy a CPU-ról önként lemondás) hatására válthat állapotot. Annak alapján, hogy az egyes folyamatok között az ütemező algoritmus tesz-e valamilyen fontosságbeli különbséget, vagy minden folyamatot „egyenlőként” kezel, megkülönböztetünk egyszerű és prioritásos algoritmusokat. · Egyszerű algoritmusok: Az egyes futásra kész folyamatok között nem tesznek különbséget fontosságuk alapján, vagyis nincsenek előnyben részesített folyamatok. Ilyen algoritmusok a következők: o Legrégebben várakozó (First Come First Served = FCFS): 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. Az algoritmus egyszerűen megvalósítható, de a folyamatok átlagos várakozási ideje meglehetősen nagy lehet, egy-egy hosszú CPU löketű folyamat feltartja a mögötte várakozókat (konvojhatás). Nem preemptív algoritmus. o Körbeforgó (Round-Robin = RR): Az időosztásos rendszerek valamennyi ütemező algoritmusának alapja. 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, a futó folyamat időszelete újraindul. Az időszelet helyes méretének meghatározása igen nehéz. Az átlagos CPU lökethez képest túl nagy időszelet esetén az algoritmus az FCFS-nek felel meg (hiszen az időszelet nem szakítja meg a folyamatot), túl kicsi választásánál a folyamatok úgy érzik, 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. Alapszabály, hogy a CPU löketek 80 %-a legyen rövidebb az időszeletnél. Preemptív algoritmus. · Prioritásos algoritmusok: Közös sajátosságuk, hogy a futásra kész folyamatok között egyfajta fontossági sorrendet állítanak fel. Minden folyamathoz egy prioritást (elsőbbséget jelentő) számot rendelnek, és a soron következő futtatandó folyamat a várakozók közül mindig a legmagasabb prioritású lesz. A prioritás lehet külső, vagy belső: · Belső prioritás: folyamatokhoz.
Az
operációs
rendszer
rendel
prioritást
a
· Külső prioritás: 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 ezen felül lehet statikus, vagy dinamikus. · Statikus prioritás: A folyamat prioritása a futás teljes ideje alatt azonos, nem változik. 50
Hálózati operációs rendszerek elmélete
4. fejezet
· Dinamikus prioritás: A folyamat prioritását a futás ideje alatt az operációs rendszer változtathatja. 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 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 CPU löketidő-szükséglete határozza meg. Mivel azonban az egyes folyamatok következő löketidejének hossza nem ismert, ezért azt becsülni kell. Erre két módszer kínálkozik: · A becslést a folyamat illetve a folyamatot elindító felhasználó „bevallása” alapján végezzük. Ennek hátránya, hogy a felhasználók az általuk indított folyamatok fontosságáról hajlamosak „hazudni”. · A becslést a folyamat előző viselkedése alapján, vagyis a korábbi löketidők általában exponenciális átlaga alapján végezzük. Pontosabb módszer, mivel tényeken alapul. A prioritásos algoritmusok közé tartoznak a következők: o Legrövidebb löketidejű (Shortest Job First = SJF): Az algoritmus a futásra kész folyamatok közül a legrövidebb CPU 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. Nem preemptív algoritmus. o Legrövidebb hátralevő idejű (Shortest Remaining Time First = SRTF): Az SJF algoritmus preemptív változata: ha egy új folyamat válik futásra késszé, akkor az ütemező újra megvizsgálja a futásra kész folyamatok, illetve az éppen futó folyamat hátralevő 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áshoz idő szükséges, ezt az időt is figyelembe kell venni, ha úgy döntünk, hogy egy futó folyamatot megszakítunk. Preemptív algoritmus. o Legjobb válaszarány (Highest Response Ratio = HRR): Az SJF algoritmus változata, ahol a várakozó folyamatok öregednek, a löketidő helyett a folyamatok prioritását a következő képlet segítségével határozzuk meg: (löketidő + k * várakozási idő) / löketidő A képletben szereplő k egy jól megválasztott konstans. Nem preemptív algoritmus
Tárkezelés A tár feladata és felépítése A központi tár (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 multiprogramozás igénye és a programméretek 51
Hálózati operációs rendszerek elmélete
4. fejezet
növekedése a valós tár (real storage) kezelésén túl kikényszeríttette a virtuális tár (virtual storage) kezelésének hardver és szoftvertechnikáit. Egy korszerű számítógépben a tár hardver megvalósításában a következő szinteket különböztetjük meg:
A gyorsító tár (cache) nagyon gyors, de viszonylag kis kapacitású tár, amely a központi tár hozzáférési idejét csökkenti. Az átmeneti tár és a központi tár közötti információcserét teljes mértékben a hardver vezérli, az operációs rendszernek ebbe beleszólása nincsen. A processzorok működése megköveteli, hogy az aktuálisan végrehajtandó utasítás és annak operandusai az operatív (vagy a gyorsító) tárban helyezkedjenek el. A rendelkezésre álló címzési módok és a tárkezelést támogató egyéb hardver megoldások határozzák meg elsősorban, hogy az adott processzoron egy operációs rendszer milyen tárkezelési sémát tud hatékonyan megvalósítani.
Címkötési módszerek Egy folyamat futásához mindenképpen memóriaterületre van szükség, egyrészt a programkód, másrészt a folyamat által használt adatok tárolására. Egy folyamat (program) számára a memóriaterületek (címek) kiosztását címkötésnek nevezzük. A címkötés különböző időpontokban történhet meg: · Fordítás közben (compile time): A fordítóprogram a program és adatterület elemeihez abszolút címet rendel. Ezt a technikát merevsége miatt elsősorban csak a ROM memóriába kerülő programok esetén használják. · Szerkesztés közben (link time): A program több egymástól függetlenül lefordított modulból áll, amelyek más-más modulban definiált logikai címekre is hivatkoznak. A kapcsolatszerkesztő (linker) program feladata, hogy az összes modult egymás mögé elhelyezze a fizikai tárban, valamint feloldja a modulok közötti hivatkozást, konkrét fizikai címeket helyettesítve. · Betöltés közben (load time): A fordítás eredményeképpen előállott áthelyezhető kód 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, speciális hardverelemek a konkrét fizikai címet csak az utasítás végrehajtásakor határozzák meg.
52
Hálózati operációs rendszerek elmélete
4. fejezet
A fordítás, szerkesztés illetve betöltés közbeni címleképezések statikus megoldások, míg a futás közbeni leképezés dinamikus. A tárgazdálkodás szempontjából kedvező, ha a címleképezés dinamikus, 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ó. A legegyszerűbb dinamikus címleképezés, ha a program csak bázisrelatív címzést tartalmaz. Ilyenkor a program tetszőleges helyre betölthető, a bázisregisztert a betöltési kezdőcímre állítva a program végrehajtható. Ugyancsak jellegzetes dinamikusnak tekinthető leképezés az először a PDP rendszerekben alkalmazott utasításszámláló relatív címzés. Ha a program csak ilyen címzési módot tartalmaz, pozíciófüggetlen kódot kapunk, amelyet ugyancsak tetszőleges címre töltve végrehajthatunk. Ismertek olyan eljárások, amikor a program indításakor nem a teljes programot, hanem csak egyes részeit töltjük a tárba, más részek csak a futás közbe, szükség esetén töltődnek be. Ilyen módszerek a következők:: · 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 (pl. 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. · Dinamikusan betöltött könyvtárak (dynamic linking): A módszer a dinamikus betöltés módosított, az operációs rendszer által támogatott változata. 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 a kívánt eljárást betölti a tárba és a következő hívások már az eljárást fogják időveszteség nélkül meghívni. A módszer 53
Hálózati operációs rendszerek elmélete
4. fejezet
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, könyvtárat használó programot. · Á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észleteket változatlanul hagyva egyesével töltjük be. Az átfedő programrészletek 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. Az egyes ágak a háttértáron tartalmazhatnak abszolút címeket, hiszen mindig ugyanoda töltődnek be. 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.
Tárolt programok A tárolt vagy más néven tárrezidens programok (Terminate, but Stay Resident = TSR), olyan kódok, melyek lefutásuk után is a memóriában maradnak, mivel gyakran van szükség a futtatásukra, és a lemezről való betöltés, minden egyes meghíváskor, nagyon lelassítaná a rendszer működését. Legjobb példa erre a DOS parancsértelmezője, mely rendelkezik tárrezidens résszel. A parancsértelmező a DOS azon része, melyen keresztül a felhasználó magával az operációs rendszerrel kommunikálhat. Feladata parancsok billentyűzetről való bekérése, azok értelmezése, majd azok kernel funkcióhívások általi végrehajtása. A parancsértelmező a CONFIG.SYS végrehajtása után töltődik be. A CONFIG.SYS-ben elhelyezett SHELL= parancs használatával lehetőség van az eredetitől (COMMAND.COM) eltérő parancsértelmezők betöltésére is (pl. NDOS.COM). Az eredeti terminológia az értelmezőt három részre osztja: rezidens (resident portion), inicializációs (initizalization portion) és tranziens részre. A rezidens rész közvetlenül a kernel és az adatterület után (fizikailag) töltődik be a memóriába. Amennyiben egy program futása közben felülírná a 54
Hálózati operációs rendszerek elmélete
4. fejezet
parancsértelmező rezidens részét (amit a DOS egy ellenőrzőösszeg generálásával állapít meg), a DOS azt újra betölti a memóriába. Ha a COMSPEC= környezeti változó által meghatározott parancsértelmezőt nem találja meg, a rendszer lefagy. A rezidens rész magára irányítja a DOS hibakezelő megszakításait, s azok bekövetkezése esetén hibajelzést, vagy esetlegesen az „Abort, Retry, Ignore, Fail?” üzenetet jeleníti meg. A parancsértelmező tranziens része meglehetősen hosszú és mivel alkalmazások futtatása közben nincs rá szükség, ezért azt bármelyik alkalmazás felülírhatja. Az alkalmazás lefutása után a rezidens rész visszatölti a tranziens részt a memóriába, hogy megjelenítse a promptot. Amennyiben nem találja meg a COMSPEC= környezeti változó által megadott parancsértelmezőt, abban az esetben az „Insert disk containing COMMAND.COM” üzenetet jeleníti meg. A tranziens rész a memória felső végébe töltődik be és ez a tényleges parancsértelmező. A felhasználó által begépelt parancsokat értelmezi és hajtja végre. A promptot a PROMPT környezeti változó által meghatározott alakban állítja elő, majd bevitelre vár. A bevitel végét az ENTER gomb lenyomása jelzi. A bevitt parancsot először megvizsgálja, hogy az belső parancs-e (pl. DIR, COPY, DEL, stb.). Ha igen, akkor végrehajtja az annak megfelelő DOS funkcióhívások sorozatát, majd visszatér a prompthoz. Egyéb esetben megvizsgálja, hogy a parancsnak megfelelő nevű fájl megtalálható-e az aktuális meghajtó aktuális könyvtárában. Ha itt nem találja, végignézi a PATH környezeti változó által definiált ún. keresési útvonalakat. Amennyiben itt sem találja meg a megadott programot a „Bad command or file name” üzenetet jeleníti meg és visszatér a prompthoz. Ha a fájl specifikálásakor a felhasználó csak nevet ad meg és kiterjesztést nem, akkor a parancsértelmező az azonos nevű .COM, .EXE és .BAT fájlokat próbálja meg végrehajtani (ebben a sorrendben). Batch (.BAT) fájlok végrehajtása esetén a parancssorhoz hasonlóan értelmezi a fájl egyes sorait, míg .EXE és .COM fájlok esetén a DOS programbetöltő és futtató megszakítását hívja meg. Az inicializációs rész a rezidens rész betöltését követően töltődik be a memóriába és kapja meg a vezérlést. Feladat az AUTOEXEC.BAT fájl végrehajtása. Az inicializációs rész határozza meg a felhasználói programok helyét is azok futtatásakor. Mivel erre a részre csak rendszerindításkor van szükség, ezért az első betöltött program felülírja.
55
Hálózati operációs rendszerek elmélete
4. fejezet
Ellenőrző kérdések 4. I. Válassza ki a helyes megoldást! 1. Melyik nem része a processzornak? a. ALU b. FPU c. VGA 2. Melyik regiszternév nem valós? a. AX b. DX c. EX 3. Hányféle CPU ütemezési szint létezik? a. 2 b. 3 c. 4 4. Hogy nevezzük azt az ütemező algoritmust, amely alapján a rendszer elveheti a futás jogát egy folyamattól? a. Nem preemptív b. Preemptív c. Prioritásos 5. Melyik nem illik a többi közé? a. FCFS b. RR c. SJF 6. Melyik nem címkötési módszer? a. Futás közben b. Fordítás közben c. Parancsvégrehajtás után 7. Mit jelent a TSR rövidítés? a. Tárolt program b. Megszakítás-kezelő rutin c. Rendszerfolyamat
56
Hálózati operációs rendszerek elmélete
4. fejezet
II. Döntse el, hogy igaz, vagy hamis-e az állítás! 1. A regiszterek a 80x86 típusú mikroprocesszorok belső tároló helyei. Igaz
Hamis
2. Az CPU ütemezés négy különböző szintjét különböztetjük meg. Igaz
Hamis
3. Az ütemező algoritmus nem preemptív, ha az operációs rendszer elveheti a futás jogát egy folyamattól. Igaz
Hamis
4. Az összes prioritásos ütemezési algoritmusnál fellép a kiéheztetés veszélye. Igaz
Hamis
5. A fordítás, szerkesztés illetve betöltés közbeni címleképezések dinamikus megoldások. Igaz
Hamis
6. Dinamikus betöltés esetén 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észleteket változatlanul hagyva – egyesével töltjük be. Igaz
Hamis
7. A tárolt vagy más néven tárrezidens programok, olyan kódok, melyek lefutásuk után is a memóriában maradnak, Igaz
Hamis
III. Válaszoljon a feltett kérdésekre! 1. Határozza meg a regiszterek szerepét? 2. Mit nevezünk Neumann-ciklusnak? 3. Definiálja az ütemezést! 4. Milyen szintjei vannak a CPU ütemezésnek? 5. Milyen fő típusai vannak a CPU ütemező algoritmusoknak? 6. Jellemezze a prioritásos CPU ütemezést! 7. Milyen címkötési módszereket ismer? 8. Mi az overlay? 9. Határozza meg a TSR programok fogalmát?
57
Hálózati operációs rendszerek elmélete
5. fejezet
5. fejezet Memóriakezelés Az i8086-os processzor memóriakezelése Az i8086 mikroprocesszor (a továbbiakban processzor) 20 bites fizikai címeket alkalmaz a memória elérésére, tehát max. 1 MB (220=1024*1024 bájt). Ezt az ún. fizikai címet a processzor két darab 16 bites értékből, a szegmens- ill. offszet címből generálja. Ez a két 16 bites érték alkotja együtt a logikai címet, amelyet szegmens:offszet alakban ábrázolunk. A processzor a logikai címből úgy generálja a fizikai címet, hogy a szegmens-címet 4 bittel jobbra tolja, majd a képzett értékhez adja hozzá az offszetcímet. Vegyük észre, hogy a 4 bites eltolás pont egy helyiértéknyi eltolásnak felel meg a 16-os számrendszerben, azaz 16-tal való szorzást jelent. A szegmens tehát a memória egy 64 Kbájtos területét jelöli ki, míg az offszet egy relatív eltolást határoz meg ehhez a fizikai címhez képest.
A szegmensek tehát minden tizenhatodik (pontosabban minden 16-tal osztva 0 maradékot adó) fizikai címen kezdődnek és 64 Kbyte (65536 bájt) hosszúak (hiszen azonos szegmenscím mellett csak az offszetcím változtatásával ennyi különböző memóriacella érhető el). A memória két szegmens kezdete között elhelyezkedő, 16 bájtos területét szokás paragrafusnak nevezni. Ez a logikai címzési mód rendkívül előnyös abban az esetben amennyiben egy program 64 kilobájtnál rövidebb. Ekkor ugyanis azt bármelyik szegmensbe betölthetve – anélkül hogy tudna arról, hogy ténylegesen fizikailag hol is helyezkedik el a memóriában – csak az offszet-cím megadásával teljes kód- és adatterületét elérheti. A dolognak azonban van két „hátulütője” is.
59
Hálózati operációs rendszerek elmélete
5. fejezet
Az egyik könnyen belátható dolog, hogy több különböző logikai cím is jelentheti ugyanazt a fizikai címet (pl. $F000:$FFFF és $FF00:$0FFF is a $FFFFF fizikai címet adja). A másik, hogy a $FFFF:$000F „feletti” logikai címekhez „nem tartozik” fizikai cím, hiszen azok túlnyúlnak a 20 bites ábrázolási hosszon. A valóságban az történik, hogy a számítási túlcsordulás elvész és fizikai címként az eredmény alsó 20 bitje adódik, tehát a fenti cím „felett” a memória első, 16 bájt híján 64 kilobájtját érhetjük el. Ez a két dolog programozáskor potenciális hibalehetőséget rejt magában, hiszen látszólag különböző címekre történő írással-olvasással is elérhetjük és módosíthatjuk ugyanazt a memóriarekeszt (bájtot). Itt kell megemlítenünk, hogy a 80286 processzor már 24 címvonallal rendelkezik, tehát itt a fenti címek esetén a „túlcsordulás” nem veszik el, hanem a memória 1MB feletti első 65520 bájtját címezi meg a processzor. Egyébként ezt a memóriaterületet szokás HMA-nak (High Memory Area – felső memória-terület) nevezni. Ez a címzési módosulás azonban sérti a kompatibilitást a 8086-ossal, ezért az A20 címvonal (a címvonalakat A0..A23 jelöli) a gép bekapcsolása után „le van tiltva”, tehát a 286-os processzor a fentieknek megfelelően kezeli a kérdéses címeket is. A HIMEM.SYS betöltésekor ezt a vonalat engedélyezi, ezáltal válik lehetővé, pl. a COMMAND.COM vagy más, 65520 bájtnál nem hosszabb program(ok) ill. adatok tárolása ezen a területen. A processzor alapvetően 4 szegmens adatainak egymástól független 16-bites elérését támogatja. Ezek a következők: · CS: Kódszergmens (Code Segment) · DS: Adatszegmens (Data Segment) · SS: Veremszegmens (Stack Segment) · ES: Extraszegmens (Extra Szegment) Ez azt jelenti, hogy az ún. szegmensregiszterek által meghatározott szegmensekben elhelyezkedő adatok eléréséhez elegendő mindössze egy prefixum ill. egy 16 bites offszet-cím megadása. Ez a lehetőség tisztább, rövidebb és gyorsabb címzést tesz lehetővé. A CS regiszter a következő végrehajtandó utasítás szegmens-, míg az IP (nem szegmens!) regiszter az offszet-címét tartalmazza. A program adatainak (változóinak) elérését a DS ill. ES regiszterek könnyítik meg. A program veremterületének helyét az SS regiszter definiálja. A fenti regiszterek tartalma bármikor megváltoztatható (bár az CS felülírása általában nem megengedett, hiszen az utasítás végrehajtása után a vezérlés a memória <új CS>:
címére adódik) így például egy programnak – elvileg – 64 kilobájtnál nagyobb adatterülete is lehet.
Társzervezési elvek Egy partíciós rendszer Az operációs rendszeren felüli folytonos címtartományt teljes egészében egy folyamat használhatja. A betöltő program indításakor azt az első szabad címre hozza be. Ha a program futása során az operációs rendszernek több tárra van
60
Hálózati operációs rendszerek elmélete
5. fejezet
szüksége, akkor azt vagy a program által nem használt területről lopja el, vagy a programot át kell helyezni, ami hardvertámogatás nélkül nehézkes. 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. Rendszerhíváskor a processzor átkerül olyan működési módba, ahol ez a védelem kikapcsol, az operációs rendszer a teljes tárat elérheti.
Több partíciós rendszer A multiprogramozás megkövetelte, hogy egy időben több folyamat tartózkodjon a tárban. Korai rendszerekben az operációs rendszeren felüli tárterületet részekre (partíciókra) 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, egy programot a neki megfelelő méretű partícióban futtatták, sőt esetleg már eleve ebbe a partícióba fordították le. 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) vezet, 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. Szabad terület tördelődése Egy folyamat lefutásakor az általa használt tárterület felszabadul. Az operációs rendszer nyilvántartja a szabad területeket, egymás melletti szabad területeket automatikusan összevon. 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, azonban a lefutott folyamatok által felszabadított területek, ha nem egymással határosak, a teljes tárterületet szabdalják kisebb, összefüggő részekre (külső tördelés, external fragmentation). Szabad terület tömörítése (compaction, garbage collection) A külső tördelődés, ha meghalad egy bizonyos fokot, lehetetlenné teheti újabb folyamatok elindítását, hiszen bár összességében elég szabad terület lenne, de ezek nem alkotnak egy folytonos címtartományt. Ezen segíthet a szabad helyek tömörítése, azaz a tár egyik végére rendezése. 61
Hálózati operációs rendszerek elmélete
5. fejezet
A tömörítő algoritmusokkal kapcsolatban a következő nehézségek merülnek fel: · Időigényesek, nem biztos, hogy megéri futtatni, lehet, hogy jobban járunk, ha megvárjuk, míg más futó folyamatok is befejeződnek. · Váratlanul van szükség a futtatásukra, így pl. egy interaktív rendszer válaszideje hirtelen megnövekedhet. · A tárterületek mozgatásához a betöltéskor is felhasznált áthelyezési információkat meg kell őrizni. Terület lefoglalási stratégiák Az operációs rendszer a betöltendő program számára a szabad területek közül a következő kritériumok szerint választhat: ·
A legjobban megfelelő (best fit): a legkisebb, még elegendő méretű területet foglaljuk le.
·
Az első megfelelő (first fit): a kereséssel a tár elejéről indulva az első megfelelő méretű területet foglaljuk le.
·
A következő megfelelő (next fit): a kereséssel az utoljára lefoglalt tartomány végétől indulunk, az első megfelelő méretű területet foglaljuk le
·
A legrosszabbul illeszkedő (worst fit): a legnagyobb szabad területből foglalunk le, abban bízva, hogy a nagy darabból szabadon maradó terület más folyamat számára még elegendően nagy lesz.
A legrosszabban illeszkedő algoritmus a leggyengébb tárkihasználás szempontjából, a többi nagyjából azonos hatékonyságú. Védelem A multiprogramozásnál nem csak az operációs rendszer, hanem más folyamatok tárterületét is védeni kell egy folyamat hibás működésének következményeitől. A védelem 2 regisztert használ, amelyekbe a folyamat futásakor a hozzá tartozó címtartomány határait tölthetjük, az egyes címzéseknél a hardver a tartományból kicímzést figyeli.
Tárcsere (swap) A tárcsere (swap) során az operációs rendszer egy folyamat teljes tárterületét a háttértárra másolja, így szabadítva fel területet egyéb folyamatok számára. Persze az operációs rendszernek pontosan ismernie kell a folyamat aktuális 62
Hálózati operációs rendszerek elmélete
5. fejezet
tárigényét. A tárcsere a perifériás átvitel miatt időigényes – egyszerre nagy tárterületeket kell mozgatni –, jóval hosszabb időt vesz igénybe, mint egy környezetváltás. Ezért az ütemezőnek célszerű a tárban lévő futásra kész folyamatok közül – ha van ilyen – választani. A tárterület elmentésénél (ha a hardver támogatja) figyelhetünk arra, hogy egy változatlan, a háttértáron is meglévő tartományt nem kell újra kiírni.
Felmerülő problémák: · Ha szükség van területre, melyik folyamat(ok)at tegyük ki? Figyelembe vehetjük a folyamat állapotát, prioritását, futási- illetve várakozási idejét vagy a lefoglalt partíciók nagyságát. · A háttértáron levők közül mikor és kit hozzunk be? Itt is a fenti szempontok jöhetnek számításba. A folyamat kiválasztásánál ügyelni kell a kiéheztetés veszélyére. · Kerülendő a folyamatok felesleges pakolgatása.
Memóriacímzési módszerek Rögzített címzés Amíg egy számítógépen csak egy felhasználó dolgozhatott és ő is csak egyetlen programot futtathatott, a memóriakezelés különösebb gondot nem okozott. Az operációs rendszer állandó területen, például a memória legelső, legkisebb című rekeszein helyezkedett el, a felhasználói program használhatta az operációs rendszer végétől egészen a legnagyobb címig az egész memóriát. A program változóinak, ill. vezérlésátadásainak címe így már fordítás közben meghatározható volt. Áthelyezhető címzés Az első korlát, amibe a rögzített címzésű rendszerek beleütköztek, hogy az operációs rendszer mérete nem bizonyult állandónak, mivel megjelentek olyan operációs rendszerek, melyek tranziens részekkel rendelkeztek, vagyis bizonyos részeik csak akkor töltődtek be a memóriába, amikor arra szükség volt. A megoldás viszonylag egyszerű: a programok fordításánál a fordító már nem fizikai vagyis abszolút, hanem a program elejéhez képest relatív címeket használ. Ezeket a címeket logikai címeknek nevezzük. Most már csak azt kell tudni, hogy a program hol kezdődik a memóriában. Erre találták ki a bázisregisztert, mely a program báziscímét tartalmazza. A 63
Hálózati operációs rendszerek elmélete
5. fejezet
legegyszerűbb megoldásoknál a báziscím és a logikai cím összeadásából megkapjuk a fizikai címet.
Szegmensszervezés A logikai címtartományban a program memóriája nem egyetlen egybefüggő területnek képzelik, hanem olyan önmagukban folytonos blokkok halmazának, amely a blokkok tárbeli elhelyezkedése közömbös (pl. program kódja, veremterülete, nagyobb tömbjei). A szegmens-szervezésnél a címtranszformáció ezt a szemléletet tükrözi. A folyamat memóriája különböző méretű blokkokból (szegmens) áll, a blokkok önmagukban folytonos címtartományt foglalnak le. Védelem Minden szegmensre biztosítani kell, hogy a folyamat ne címezhessen ki belőle, azaz a szegmensen belüli cím (eltolás) ne lehessen nagyobb, mint a szegmens mérete. A szegmenstábla szegmensenként tartalmazza annak hosszát. A szegmens területén túlcímzést a hardver minden tár referenciánál figyeli, a hiba megszakítás-t (segment overflow fault) okoz. Hozzáférés ellenőrzés (protection control) A folyamatoknak az egyes szegmensekhez különböző hozzáférési módokat engedélyezhetünk. Ez egyfajta védelmi mechanizmus, a folyamat tárterületét védhetjük saját működésének hibáitól. Szokásos hozzáférési jogok: · Olvasási jog (read access): A folyamat a szegmens területét olvashatja. · Írási jog (write access): A folyamat a szegmens területére írhat, az ott levő értékeket módosíthatja. · Végrehajtási jog (execute access): A szegmensben gépi utasítások vannak, amelyeket a folyamat végrehajt (utasítás elővétel, fetch). A háromféle jogosultság minden kombinációban előfordulhat, bár nem mindegyik értelmes. A jogosultságok megsértését a hardver minden tár referenciánál figyeli, és ha hiba történik, hiba megszakítás-t (segment protection fault = szegmens védelmi hiba) okoz. Osztott szegmenshasználat (segment sharing) Több folyamat közös, fizikailag azonos tárterület használatának értelme:
64
Hálózati operációs rendszerek elmélete
5. fejezet
· Közös utasítások használata: két folyamat azonos programot futtat, így a folyamatok futtatásához kevesebb fizikai tárra van szükség. Osztottan kezelhetők teljes programok, de rendszerkönyvtárak is. · Közös adatterület használata teszi lehetővé a folyamatok közötti kommunikációt, ha ez nem az operációs rendszer területén keresztül történik. Leszármazott folyamat használhatja a szülő adatait, eddigi eredményeit. Közös szegmenshasználatnál két vagy több folyamat szegmenstáblájában valamelyik szegmens fizikai címénél azonos valós memóriacím szerepel. A folyamatok ugyanazt a tárterületet természetesen különböző jogosultságokkal kezelhetik. A módosítható adatterületek helyes osztott használatához a kölcsönös kizárás biztosítása a folyamatok feladata, ehhez hardvertámogatás nincs. Címtranszformáció háttértáron levő szegmens esetén Multiprogramozott rendszereknél előfordulhat, hogy egy futó folyamat nem minden szegmense van ténylegesen a memóriában, egyes teljes szegmenseket az operációs rendszer ideiglenesen a háttértárra menthet. A szegmenstábla minden szegmens mellett tartalmaz egy bitet, amely jelzi, hogy a szegmens a központi tárban van-e (residency bit), illetve információt arról, hogy a háttértáron hol található. Ha a folyamat egy háttértáron levő szegmensre hivatkozik, a benntartózkodási bit hamis, a tárkezelő hardver hiányzó szegmens hibá-t (missing segment fault) jelez, amit az operációs rendszernek kell kezelnie. Futtatható állományok szegmentálása A DOS alapvetően két fajta futtatható állományt ismer: a .COM és az .EXE fájlokat. Bár a memóriába kerülve már mindkét fájl azonos módon jelenik meg, jelentős eltérés mutatkozik fizikai szerkezetükben és lehetőségeikben. A .COM fájlok alapvetően egyszegmensű (max. 64KB-os) állományok, melyek belső rutinjaikat tekintve kizárólagosan 16-bites (szegmensen belüli) címzést alkalmaznak. Esetükben a kód-, valamint verem- és adatszegmens – ha csak nem foglalnak plusz memóriát a DOS rutinjai segítségével – ugyanabban a fizikai szegmensben helyezkedik el. Ennek köszönhetően meglehetősen rugalmasak, hiszen bármelyik fizikai szegmensbe betöltve közvetlenül futtathatóak. Ugyanakkor ez a címzési megszorítás okozza hátrányukat: a maximum 64Kbájtos méretbeli megszorítást is. Gondoljunk csak bele, ha 32-bites címeket is alkalmaz(hat)nának, akkor pontosan tudniuk kellene melyik szegmensben is vannak (ha csak nem lineárisan, azaz az első utasítástól az utolsóig fizikailag egymást szorosan követő címeken futnak; ilyen program gyakorlatilag nincs) pl. egy másik (nem az éppen aktuális) kódszegmensben lévő rutin meghívásához. Ezt a szegmenscímet azonban már fordítási időben tudni kellene, ami a program csak egyetlen – a fordításkor meghatározott – szegmensbe való betölthetőségét tenné lehetővé. A fenti probléma áthidalására nyújtanak megoldást az .EXE fájlok, melyek tetszőleges számú szegmensből állhatnak. Ezek olyan speciális fájlok, melyek elején egy ún. relokációs (azaz áthelyezési) táblázat található. A 65
Hálózati operációs rendszerek elmélete
5. fejezet
táblázat minden elem egy 32-bites cím, ami a tényleges (a relokációs táblát követő) futtaható fájlban határoz meg egy offszet-címet. Ezeket a címeket a futtatható állományt létrehozó fordító program generálja, mégpedig úgy, hogy azok mindegyike a programban található egy-egy belső szegmenshivatkozásra (adatelérés v. távoli ugrások) mutasson. A fordító az .EXE fájlba nem a valódi szegmenscímeket fordítja bele (hiszen azok fordítási időben még nem meghatározhatóak, mert a program a memóriában bárhová kerülhet), hanem csak egy relatív (0-bázisú) álszegmens-címet amely valójában csak azt határozza meg, hogy a hivatkozás a program hányadik (!) szegmensére történik. A program betöltésekor a DOS a relokációs tábla elemeit egyenként kiolvasva a szegmens-hivatkozásokat a programnak a memóriában kijelölt hely első szegmensének fizikai címével megnöveli, így generálva a valódi, a futtatás pillanatában érvényes fizikai szegmenscímeket. Így, amikor a program a betöltése után megkapja a vezérlést a memóriában már a tényleges fizikai elhelyezkedéséhez igazított szegmenscímek találhatóak.
Lapszervezés A különböző méretű blokkok használatánál óhatatlanul fellép a külső tördelődés jelensége. Ezen úgy segíthetünk, ha mindig azonos méretű blokkokat (lap, page) használunk, a folyamatoknak szükséges tárat ilyen egységekben allokáljuk. Az elkerülhetetlen belső tördelődés okozta veszteséget a lap megfelelően kis méretűre választásával csökkenthetjük. A lap mérete gyakorlati szempontok miatt mindig 2 hatványa.
Címtranszformáció A címtranszformáció mechanizmusában a legnagyobb különbség, hogy a 2 egész hatványainak megfelelő, azonos méretű lapok használata miatt a fizikai lapcímhez nem kell hozzáadni a lapon belüli címet, hanem ennél kevésbé költséges módon a lapon belüli cím a fizikai cím kisebb helyi értékű bitjeit alkotja. A címtranszformáció a laptérkép tábla szerkezete szerint lehet: · Közvetlen leképezés: A folyamathoz tartozó minden lap fizikai címe egy laptérkép táblában van, a transzformáció mindig innen veszi elő a fizikai lapcímet. Mivel a lapok mérete viszonylag kicsi, így a laptábla meglehetősen nagy lehet, nehéz speciális, elkülönített, gyors hozzáférésű tárban tartani. · Asszociatív leképezés: A címtranszformációt egy speciális szervezésű, gyors asszociatív tár segíti, ahol a folyamat lapjainak 66
Hálózati operációs rendszerek elmélete
5. fejezet
logikai és fizikai címei találhatók. Az asszociatív tár egy művelettel kiadja a bemenetére juttatott logikai címhez tartozó fizikai címet. Problémát jelent, hogy az asszociatív tár nagyon drága, ezért mérete általában meglehetősen kicsi. · Kombinált technika: A fizikai lapcím keresése először az asszociatív tárban történik, a címtranszformációs hardver csak akkor fordul a direkt laptáblához, ha a lapról szóló bejegyzés az asszociatív tárban nem található. A programok általában futásuk egyes időszakaiban a teljes címtartományuk csak kis részét használják, így kis méretű asszociatív tárral is magas találati arányt lehet elérni, ha a hardver a laptáblából elővett címeket az asszociatív tárba is beírja
Védelem A szegmensszervezéssel ellentétben itt a túlcímzés ellen nem kell a memóriát védeni, hiszen minden lapon belül kiadható cím megfelelő. Hozzáférés ellenőrzés A lapokhoz hozzáférését a túl nagy extra tárigény – laponként legalább 3 bit – miatt általában nem ellenőrzik. Osztott laphasználat Az osztott szegmenshasználathoz hasonlóan több folyamat laptérkép táblája azonos fizikai lapokra hivatkozhat. Általában a közösen használt lapokat folyamatok azonos logikai címen látják, de ez nem szükségszerű. Mivel a lap mérete nem tükrözi a folyamatok logikai tárfelosztását, így az osztottan használt lapokon egyéb, nem osztottan használandó területek is lehetnek, bár ez a hibás programműködések miatt kerülendő. Címtranszformáció háttértáron levő lap esetén A szegmensszervezéshez hasonlóan laponként egy bitet (érvényes, valid) valamint a háttértáron elhelyezkedés információját kell tárolni.
Virtuális tárkezelés A virtuális tárkezelés olyan szervezési elvek, operációs rendszer algoritmusok összessége, amely biztosítja, hogy a rendszer folyamatai logikai címtartományának csak egy – a folyamat futásához szükséges – része legyen a központi tárban, de ennek ellenére bármelyik folyamat a virtuális tartománybeli tetszőleges címre hivatkozik. 67
Hálózati operációs rendszerek elmélete
5. fejezet
Általános elvek A virtuális tárkezelés motivációi a következők: · A programok nem használják ki a teljes címtartományukat. Ennek okai a következők: o Tartalmaznak ritkán használt kódrészleteket (pl. hibakezelés), o A statikus adatszerkezetek általában nincsenek teljesen kihasználva, o A program futásához egy időben nem kell minden részlet (ld. overlay). · Előnyökkel jár, ha nem tartjuk a tárban a teljes programot. Ezek a következők: o A program nagyobb lehet, mint a számítógépben ténylegesen meglevő tárterület. o Több folyamat fér el a tárban, a multiprogramozás növelhető. o A programok betöltéséhez, a folyamatok háttértárra mentéséhez kevesebb I/O művelet kell, a betöltés gyorsabb lesz. Megvalósítás elve Amikor a folyamat egy érvénytelen, a valós memóriában nem létező címre hivatkozik, a hardver megszakítást okoz, amelyet az operációs rendszer kezel, behozva a háttértárról a szükséges blokkot. Ennek lépései a következők: 1. Az operációs rendszer megszakítást kiszolgáló programrészlete kapja meg a vezérlést: · Elmenti a folyamat környezetét. · Elágazik a megfelelő kiszolgáló rutinra. · Eldönti, hogy a megszakítás nem programhibát jelent-e. 2. Behozza a kívánt blokkot a központi tárba: · A blokknak helyet keres a tárban, ha nincs szabad terület, fel kell szabadítania egy megfelelő méretűt. · Beolvassa a kívánt blokkot
Az egy vagy esetleg két perifériás művelet sok időt vesz igénybe, hiszen a rendszernek 68
Hálózati operációs rendszerek elmélete
5. fejezet
· meg kell várnia, amíg a perifériás eszköz felszabadul, · ki kell várnia az átvitelt előkészítő műveleteket (pl. fejmozgás), · át kell vinnie egy blokkot a periféria és a tár között. A központi egység jobb kihasználása érdekében az operációs rendszer a megszakított folyamatot várakozó állapotba helyezi és a várakozások alatt folyamatokat indít el. Amikor a kívánt tartomány bekerül a tárba, az igénylő folyamat futásra kész állapotú lesz, amíg az ütemező elindítja. A hardver a lapcsere algoritmusait támogathatja egyéb, a blokkokhoz tartozó, minden tárhoz fordulás esetén kezelt jelzőbitekkel. A korszerű hardverek vagy lap-, vagy kombinált szervezésűek, ezért a virtuális tár kezelése csaknem mindig lapok mozgatásán alapul, így mi is csak a lapszervezésű rendszerekkel foglalkozunk.
Hatása a folyamatok futásának sebességére A folyamatok futásának sebességét döntően a tárhoz férés ideje határozza meg a következő képlet alapján: effektív hozzáférési idő = (1-p) * valós hozzáférési idő + p*laphiba idő
A képletben p a laphiba gyakorisága. Mivel a laphiba kiszolgálási ideje 5 nagyságrenddel is nagyobb lehet (100 ns valós hozzáférési idővel szemben lehet 50-100 ms is), így p-nek nagyon kicsinek (107 – 108) kell lennie, hogy a folyamatok futása ne lassuljon túlságosan. Alapvető kérdések Virtuális tárkezelés esetén a következő problémákra kell megoldást találni: · Melyik blokkot töltsük be (fetch strategy). · A behozott blokk a valós tárban hova kerüljön (placement strategy): ez lapszervezés esetén triviális, azonban szegmensek mozgatása esetén a multipartíciós valós tárkezelésnél megismert stratégiák közül kell választani. · Ha nincs szabad hely a tárban, melyik blokkot cseréljük le (replacement strategy). · Hogyan gazdálkodjunk a fizikai tárral, melyik folyamat számára hány blokkot biztosítsunk? 69
Hálózati operációs rendszerek elmélete
5. fejezet
A betöltendő lap kiválasztása A virtuális tárkezelés egyik leglényegesebb kérdésem hogy laphiba esetén melyik blokkot (lapot hozzuk be a virtuális tárból a valós tárba. Lássunk két megoldást: · Igény szerinti lapozás (demand paging) Csak a laphibánál hivatkozott lapot hozzuk be. Ennek előnyei a következők: o Egyszerű a betöltendő lapot kiválasztani. o 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. Előnye: o Ha a jóslás gyors és pontos, a folyamat futási sebessége nagyban felgyorsul. Hátránya: o Ha a döntés hibás, felesleges lapok foglalják a valós tárat. Mivel a központi tár ára 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. Lapcsere stratégiák A lapcsere algoritmusa akkor lenne optimális, ha azt a lapot választaná ki, 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. Az algoritmusok ezt az optimumot próbálják megközelíteni. · Véletlen kiválasztás: Szükség esetén a használt lapok közül véletlenül választunk. Egyszerű, buta algoritmus, csak elvi jelentőségű, nem használják. · Legrégebbi lap (FIFO): Az algoritmus a legrégebben a tárban levő lapot cseréli ki. Ez általában egy FIFO listával valósítható meg. Hibái a következők: o Olyan lapot is kitesz, amelyet esetleg több folyamat gyakran használ, csak azért, mert már régóta bent van. o Bizonyos esetekben, ha növeljük az egyes folyamatokhoz tartozó lapok számát, a várakozással ellentétben a laphibák száma nem csökken, hanem nőhet (FIFO anomália). · Legrégebben nem használt (Least Recently Used, LRU) lap: Azt a lapot választjuk, amelyre a folyamatok a 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 70
Hálózati operációs rendszerek elmélete
5. fejezet
algoritmus a szimulációs eredmények alapján jó teljesítményt nyújt, de nehéz implementálni. A legrégebben használt lapok beazonosítása a következő módokon történhet: o 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égebbit, o 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. Mindkét implementáció csak meglehetősen támogatásával lenne elképzelhető.
bonyolult
hardver
A következő három algoritmus a tárkezelő hardvertől megköveteli, hogy minden lap mellett legalább egy biten jelezze, hogy a lap valamelyik címére hivatkoztak-e (reference bit). · Újabb esély (Second Chance): Az algoritmus a FIFO változata, azonban a sor elején levő lapot csak akkor cseréli le, ha nem hivatkoztak rá. Ha viszont hivatkoztak a lapra, akkor a hivatkozás bitet töröljük, és a lapot visszatesszük a FIFO végére – a lap kap egy újabb esélyt. Ez a megoldás kiküszöböli a FIFO algoritmus hibáját, a gyakran használt lapokat nem cseréli le. · Legkevésbé használt (Least Frequently Used, LFU): Az algoritmus a leggyakrabban használt lapokat tartja bent a memóriában. Implementálása a hivatkozás bit figyelésén alapul, ezt időnként minden lapnál vizsgálva egy számlálót növelhet, ha a lapra az eltelt időintervallumban hivatkoztak. Hibái a következők: o A valamikor sokat használt lapok sokáig a memóriában maradnak, a többi lap hivatkozásainak száma csak lassan éri utol. o A frissen betöltött lapot könnyen kiteheti. A lapcsere algoritmusokat nagyban segítheti, ha a hardver minden lap mellett nyilvántartja, hogy a tartalmát a betöltés óta módosították-e (modified vagy dirty). Lapcserénél ugyanis egy változatlan lapot nem kell kiírni a háttértárra, így a csere sokkal gyorsabb lehet. · Mostanában nem használt (Not Used Recently): A hivatkozott és módosított biteket használó algoritmus. Mivel egy idő után minden lapra hivatkoznak, így a hivatkozott bit elveszti jelentőségét, ezért az algoritmus ezt minden lapnál időnként törli. A két bitet figyelembe véve a lapokat a következő – növekvő – prioritású osztályokba soroljuk: o nem hivatkozott, nem módosult o nem hivatkozott, módosult o hivatkozott, nem módosult o hivatkozott, módosult Az algoritmus a lehető legkisebb prioritású csoportból választ ki – véletlenszerűen – egy lapot. 71
Hálózati operációs rendszerek elmélete
5. fejezet
A folyamatok lapigénye Az egyes folyamatok szempontjából az a jó, ha minél több lapja van a tárban, hiszen annál kevesebb laphibát okoz. Az eddigi algoritmusok nem foglalkoztak azzal, hogy a tárban levő folyamatokhoz hány lapot allokálunk, az éppen futó folyamat minden igényét kielégítettük, ha kellett, más folyamatok rovására. Globális tárgazdálkodásra van tehát szükség, de az egyszerű, minden folyamat számára fix keret biztosítása túlságosan merev. Egy folyamat minimális lapigénye – egy gépi utasítás végrehajtásához hány lapra lehet szükség – az utasításrendszer ismerete alapján meghatározható. A maximális, vagy ami fontosabb, az „optimális” lapigény nehezebben határozható meg. A lapigény bizonyos tényezők egymásra hatásából következően jól megállapítható. Ezek a következők: · Vergődés (Trashing): Ha valamelyik folyamat következő utasításának végrehajtásához nincs(enek) a tárban szükséges lap(ok), akkor az(oka)t be kell tölteni. Akkor beszélünk vergődésről, ha egy folyamat vagy egy egész rendszer több időt tölt a laphibák kiszolgálásával, mint hasznos futással. Oka: o Folyamatnál: kevés lapja van a tárban, gyakran hivatkozik a háttértáron lévőre. o Rendszernél: túlzottan megnöveljük a multiprogramozás fokát, így a túl sok folyamat egymás elől lopkodja el a lapokat, mindegyik folyamat vergődni kezd. A vergődés elkerüléséhez az aktív, tárban levő folyamatoknak biztosítani kell a futásukhoz szükséges – optimális – számú lapot. Nem lehet több folyamat, mint amennyinek ezt biztosítani tudjuk. · Lokalitás: A folyamatok statisztikailag megfigyelhető tulajdonsága, hogy egy időintervallumban a címtartományuk csak egy szűk részét használják. A lokalitás lehet: o Időbeli: a hivatkozott címet a közeljövőben nagy valószínűséggel újra használni fogják (ciklusok, eljárások, verem, globális változók). o Térbeli: a hivatkozások tipikusan egymás melletti címekre történnek (sorosan végrehajtott kódrészletek, tömbkezelés). · Munkahalmaz: A munkahalmaz a folyamatok lokalitásán alapuló fogalom. Egy folyamat munkahalmaza az elmúlt w időintervallumban (munkahalmaz-ablak) a folyamat által hivatkozott lapokból áll. A lokalitás tulajdonsága miatt a folyamatnak valószínűleg erre a laphalmazra lesz a közeljövőben szüksége. A munkahalmaz definíciója időben folyamatosan mozgó ablakot tartalmaz, amely nyilvántartása csak bonyolult hardverrel lenne lehetséges, ezért ezt fix időintervallumban mintavételezéssel közelítik. A munkahalmaz mérete folyamatonként, sőt a folyamat futás közben is változik. Az operációs rendszer célja, hogy minden aktív folyamat munkahalmaza beférjen a valós tárba. Ez biztosíthatja a vergődés elkerülése mellett a legmagasabb fokú multiprogramozást. 72
Hálózati operációs rendszerek elmélete
5. fejezet
· Laphiba gyakoriság (page fault frequency) figyelése: Ha egy folyamat 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á. A rendszer akkor van egyensúlyban, ha általában a lapcsere lebonyolításához szükséges idő alatt nem következik be újabb laphiba, azaz két laphiba közötti idő átlaga nagyobb, mint a lebonyolításhoz szükséges idő. Az operációs rendszer a folyamatok laphiba-gyakoriságát, illetve a laphibák között eltelt időt (interfault time) vizsgálja: o Ha a laphibák között eltelt idő kisebb egy alsó határnál (nagy a laphiba gyakoriság), akkor a folyamathoz újabb lapot rendelünk. Ha viszont a rendszerben nincs több szabad lap, akkor célszerű a folyamatot felfüggeszteni, összes lapját felszabadítani. o Ha a laphibák közötti idő nagyobb, mint egy alsó határ, akkor a folyamattól elveszünk egy lapot. o Csak akkor indítunk el újra egy folyamatot, ha „elegendő” szabad lap van. Az alsó- és felső határ helyes megválasztása döntő a CPU kihasználtsága, a vergődés elkerülése szempontjából. · Előrelapozás (prepaging): A folyamat elindításakor vagy felfüggesztése utáni újraindulásakor az összes lapja a háttértáron van így a munkahalmazának összegyűjtéséig gyakran okoz laphibát. Ezt elkerülendő egyszerre több lapját hozunk be. Legegyszerűbben a felfüggesztett folyamatoknál valósítható meg. Felfüggesztéskor megjegyezzük a munkahalmazához tartozó lapokat, újraindításakor ezeket megpróbáljuk egyszerre behozni. · Lapméret: A lapméretet általában a hardver megköti, az operációs rendszer implementálásakor ezt figyelembe kell venni (van olyan processzor, pl. a M68030-as, ahol a lapméret állítható). A lapméret napjainkban tipikusan 512 Byte és 16 kByte közötti. A lap méretének növelése felé ható tényezők: o A laptáblák mérete csökkenthető. o A perifériás átvitel ideje csökken, hiszen nagy blokkot egyszerre gyorsabban lehet átvinni, mivel az átvitel idejének nagy részét az előkészítési idő teszi ki. A lap méretének csökkentése felé ható tényezők: o A lokalitás jobban érvényre jut. o Kisebb belső tördelődés. · Lapok tárba fagyasztása (page locking): Bizonyos lapokat ideiglenesen a tárba kell „fagyasztani”, azaz meg kell akadályozni, hogy ezeket a lapcsere algoritmusa cserére kijelölje: o Elindított perifériás műveletnél a kijelölt címtartományt az átvitel befejeződéséig a tárban kell tartani (vagy minden átvitelt rendszerpuffereken keresztül kell lebonyolítani). 73
Hálózati operációs rendszerek elmélete
5. fejezet
o Érdemes az éppen bejött lapokat addig befagyasztani, amíg legalább egyszer nem hivatkoztak rá, különben egy futásra kész folyamat elől a területet egy nagyobb prioritású ellophatja. Programozási trükkök virtuális tárkezelés esetén A virtuális tárkezelés a programozó előtt ugyan láthatatlan, ám gondos programozással, a lokalitás elősegítésével a program futása jelentősen gyorsítható – ha ismerjük a fordítóprogram és a tárkezelő működését. Ilyen trükkök: · Több dimenziós megfelelően.
tömbök
bejárása
a
tárbeli
elhelyezkedésének
· Egyszerre használt változók egymás mellé helyezése. · Egymást hívó eljárások egymás mellé helyezése. · Lokalitást mutató adatszerkezetek előnyben részesítése. · Eljárások egymás mellé helyezése. · Kód és adatterületek szétválasztása – a kódterület nem változik, lapcserénél nem kell kiírni.
74
Hálózati operációs rendszerek elmélete
5. fejezet
Ellenőrző kérdések 5. I. Válassza ki a helyes megoldást! 1. Melyik fogalom nem illik a többi közé? a. Szegmens b. Offszet c. Regiszter 2. Mi a HMA? a. Az 1 MB feletti első 64K-nyi rész b. Az alsó 640 KB c. Az alsó 640 KB és az 1Mb határ közé eső memóriarész 3. Melyik nem memóriacímzési módszer? a. Rögzített címzés b. Utasításregiszteres címzés c. Szegmentált címzés 4. Mi a különbség a .COM és az .EXE állományok között? a. A .COM állományok egyszegmensűek, az .EXE kiterjesztésűek nem b. Csak a kiterjesztésük c. Másképp futtatja a rendszer a különböző állománytípusokat 5. Hogyan védekezünk a túlcímzés ellen lapszervezés esetén? a. Sehogy, minden lapon belül kiadható cím megfelelő b. Címregiszterekkel c. Speciális gépi utasításokkal 6. Milyen memóriaszervezéssel valósítják meg leggyakrabban a virtuális tárkezelést? a. Szegmentálással b. 20 bites címzéssel c. Lapszervezéssel 7. Melyik lapcsere stratégia: a. Legújabb lap b. Véletlen kiválasztás c. Legjobb válaszarány
75
Hálózati operációs rendszerek elmélete
5. fejezet
II. Döntse el, hogy igaz, vagy hamis-e az állítás! 1. Az i8086 mikroprocesszor 24 bites fizikai címeket alkalmaz a memória elérésére. Igaz
Hamis
2. A szegmensek minden tizenhatodik fizikai címen kezdődnek és 64 Kbyte (65536 bájt) hosszúak. Igaz
Hamis
3. Az egypartíciós rendszerben az operációs rendszer területének védelmére elegendő egy regiszter. Igaz
Hamis
4. A multiprogramozásnál csak az operációs rendszer tárterületét kell védeni egy folyamat hibás működésének következményeitől. Igaz
Hamis
5. A tárcsere (swap) során az operációs rendszer egy folyamat teljes tárterületét a háttértárra másolja. Igaz
Hamis
6. Az .EXE fájlok alapvetően egyszegmensű (maximum 64 KB-s) állományok. Igaz
Hamis
7. Az operációs rendszer szempontjából az a jó, ha a folyamatnak minél több lapja van a tárban. Igaz
Hamis
III. Válaszoljon a feltett kérdésekre! 1. Milyen az i8086 processzor memóriakezelése? 2. Definiálja az egypartíciós rendszert! 3. Mit takar a "szabad terület tördelődése" kifejezés? 4. Milyen memória területfoglalási stratégiákat ismer? 5. Mi a tárcsere? 6. Milyen memóriacímzési módszereket ismer? 7. Jellemezze a szegmensszervezést! 8. Milyen előnyökkel jár a lapszervezés? 9. Mi a virtuális tárkezelés? 10. Mit jelent az előrelapozás?
76
Hálózati operációs rendszerek elmélete
6. fejezet
6. fejezet Háttértárkezelés A háttértárkezelés alapjai A számítógéprendszerekben a háttértárak kezelésének több oka is van. Ezek a következők: · A központi tár fajlagos, egy bitre jutó ára magas, ezért kapacitása viszonylag kicsi. · A központi tárban az adatok és programok 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 legyen az egyedileg megcímezhető adategysé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 adattárak (CD, DVD) csak olvasható, egyszer írható és újraírható kivitelben · Pen-drive-ok, mp3 lejátszók. · Memóriakártyák (pl. digitális fényképezőgépekhez) A jelenlegi rendszerek legelterjedtebb háttértára a mágneslemezes tár (magnetic disk), ezen tárak szervezési kérdéseivel foglalkozunk a továbbiakban.
A számítógéprendszerek tárhierarchiája Egy számítógéprendszerben a következő tároló elemek fordulhatnak elő: · Regiszterek · Hardver gyorsító tár (cache) · Központi tár · Lemez gyorsító tár (disk cache) · Mágneslemez · Szalag, optikai tárak A felsorolás a hozzáférési idő és a fajlagos – egy bitre eső – költség szerint csökken, a tárolási kapacitás szerint növekszik. A tárolási hierarchia minden szintjén fontos szervezési elv az átmeneti tárolás (caching), ahol egy gyorsabb tárban igyekszünk tartani a lassabb tárban levő adatok szükséges részét. 77
Hálózati operációs rendszerek elmélete
6. fejezet
Megfelelő stratégia esetén az átmeneti tárak találati aránya 80-99% lehet, így a rendszer egészének működése nagymértékben felgyorsul. Az átmeneti tárolást · a központi tár és a lemezegység között az operációs rendszer vezérli, · a hardver gyorsító tár és a központi tár között célhardver vezérli, · a regiszterek és a központi tár között a fordítóprogramok támogathatják a rendelkezésre álló regiszterek allokációjával.
Háttértárak 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. A 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 összes sávon azonos számú, azonos szövegtartomá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 (szektorjelölők, mark) ismeri fel. A mágneslemez egységek lemezei lehetnek fixek, de cserélhető lemezek (pl. hajlékony lemez, floppy disk) is használatosak.
Háttértárak címzése Az eszközmeghajtók (device drivers) feladata a DOS és a hardveregységek közötti kommunikáció biztosítása szabványos csatornákon keresztül. A DOS a hardveregységek kezelésére egy absztrakt, viszonylag egységes funkciócsoportot definiál. Az eszközmeghajtó-programok feladata ezen interfész eszközfüggetlen utasításainak átalakítása hardverspecifikus funkcióhívásokká 78
Hálózati operációs rendszerek elmélete
6. fejezet
és utasításokká. Így funkcionalitásukban legjobban a ROM-BIOS rutinjaihoz hasonlíthatók bár felépítésük és használatuk eltérő. A felhasználó számára ugyan észrevétlenül (hiszen nem kell a CONFIG.SYSben külön meghajtót betölteni hozzájuk), de a DOS minden általa „látott” egységet – ide értve a lemezes meghajtókat, a soros és párhuzamos portokat, valamint a képernyőt is – eszközmeghajtók útján kezel. A standard egységekhez kapcsolódó eszközmeghajtók az IO.SYS fájlban kaptak helyet és a DOS kernel indulásakor automatikusan betöltődnek. A mágneslemezek felületén az információ koncentrikus körökön van felírva, angolul ezt track-nek, magyarul sávnak nevezik. Ezen belül találhatóak meg a már említett szektorok. Minden szektor elején egy ún. cím jel (address mark) jelzi az aktuális sáv és szektor számát. A konkrét adat kezdetét a szektorban az ún. adat jel (data mark) jelzi. A cím és adat jelek, valamint a szinkronizációhoz szükséges mintázatok épp úgy helyet foglalnak a lemezen, mint a közönséges adatok. A szinkronizációt egy a szektorok közé ékelődő 2*80 bájtos (szektor elején és végén) rész teszi lehetővé, ez az ún. befutó ill. kifutó szakasz, melynek feladata, hogy a felette elhaladó fej felkészüljön az adott szektorhoz kapcsolódó olvasási-írási műveletre. A lemezek formázására azért van szükség, hogy az előbb említett jelek, mágneses mintázatok felkerüljenek a lemez felületére. Ezen adatok rögzítését alacsony szintű formázásnak (low level format) nevezzük. A fizikai szektorok címzésével és a lemez fizikai szintű kezelésével a BIOS és az operációs rendszer hardverközeli része foglalkozik. A fizikai címzés a fej, a sáv és a szektor címének megadásából áll, melyet a fejmozgató elektronikának átadva, a mágneslemez meghatározott helyére „szállítja” az író-olvasó fejet. Szektorok címzése A lemez szektorait az operációs rendszer lineárisan címzi, a lemezillesztő viszont több komponensű – több dimenziós – címet igényel. A kettő között az összefüggés: b = s * (i * t + j) + k Az összefüggésben a betűk jelentése a következő: b: az aktuális szektor sorszáma (0-tól indul) s: a sávon levő szektorok száma i:
az aktuális cilinder sorszáma (0-tól indul)
t: a lemezfelületek száma j: az aktuális lemezfelület sorszáma (0-tól indul) k: az aktuális sávon belül az aktuális szektor sorszáma (0-tól indul) Szektorcsoportok kialakítása A legtöbb operációs rendszer a merevlemezt nem szektor szinten kezeli, hisz akkor a legnagyobb kezelhető egység 512 byte lenne. Így rengeteg helyet kellene arra áldozni, hogy beazonosítsuk, hogy az adott fájl melyik szektorban található. Így a DOS és minden hasonló OP rendszer több szektort nevez ki egy alapegységnek, amelyet cluster-nek nevezünk. Egy 79
Hálózati operációs rendszerek elmélete
6. fejezet
cluster állhat egy szektorból (pl. a floppy-k esetében) de 2, 4, 8, 16, 32, vagy esetleg 64 szektorból is (64-nél több szektorból nem állhat egy cluster MS-DOS alatt). Ha egy adatra hivatkozunk, akkor az operációs rendszer alatti legkisebb írható-olvasható egységre a cluster-re hivatkozunk.
Háttértárak kezelése Particionálás A partíciós tábla Merevlemezes egységeken maximálisan négy, akár különböző méretű logikai köteg, partíció kialakítására van lehetőség. Minden egyes partíció külön logikai egységet képez és általában külön logikai meghajtóként is jelenik meg. Ez kettős előnyt hordoz magában. Egyrészt a DOS 3.3 vagy korábbi változata alatt is van lehetőség a 32 Mbájtnál nagyobb kapacitású merevlemezes meghajtók teljes kapacitásának kihasználására, másrészt a különböző partíciókra különböző operációs rendszerek telepíthetők. A rendszerben mindig egy és csak egy partíció aktív, aminek mindig az első fizikai merevlemezes egységen kell lennie. Az aktív partíción elhelyezkedő operációs rendszer kerül betöltésre a rendszerindítás során. A rendszer indításkor a ROM-BIOS a partíciós táblát tartalmazó szektort betölti és átadja neki a vezérlést. A rutin megvizsgálja a partíciós táblát, majd az aktív partíció boot rekordjának betöltése után átadja annak a vezérlést, ezáltal az operációs rendszert elindítva. Ha az aktív partíció boot-szektora nem operációs rendszert betöltő kódot tartalmaz, hanem például a jól ismert “Non system disk or disk error” üzenetet megjelenítő programot, akkor a rendszerindítás csak külső egységről (értsd floppy) lehetséges. A partíciós táblában elhelyezett speciális program segítségével lehetőség nyílik ún. multi-bootos rendszer létrehozására, melyben az aktív partíciótól függetlenül lehetőség nyílik bármely partíción elhelyezkedő operációs rendszer indítására. Ezen programok a partíciós táblában az aktív jelölést figyelmen kívül hagyják és a felhasználó által megadott (vagy kiválasztott) partíció boot-szektorát töltik be. Míg a partíciós tábla kezelése minden operációs rendszer alatt egységes módon történik, addig a partíción belüli logikai lemezfelépítés és kezelés az operációs rendszertől függ. A betöltő szektor A betöltő szektor (amit boot-szektornak is szokás hívni) minden logikai lemez első szektorában (0. oldal, 0. sáv 1. szektor) helyezkedik el, ahova azt az operációs rendszer FORMAT parancsa írja fel. Ez a pozíció lemezeken a fizikailag első szektor, míg merevlemezes egységeken a partíció első szektora. Amennyiben a lemez rendszerlemez, abban az esetben ez a szektor az operációs rendszert betöltő rutint, míg egyéb esetekben általában egy üzenetet (pl. Non system disk or disk error) kiíró rutint tartalmaz, ami tájékoztatja a felhasználót, hogy a lemezről operációs rendszer nem indítható. Merevlemezek esetében a betöltő szektor a DOS partíció első szektorában helyezkedik el. Minden a DOS által támogatott és közvetlenül – azaz nem külső eszközmeghajtón keresztül – kezelt lemezes 80
Hálózati operációs rendszerek elmélete
6. fejezet
eszköz az első szektort a betöltő-rekord számára tartja fenn. Erre azért van szükség, mert a DOS itt tárolja el a lemezes egységre vonatkozó logikai jellemzőket és néhány fizikai paramétert is. A rendszerindítás során a boot-szektor betöltésre kerül és megkapja a vezérlést. A szektorleíró elején található utasítás – a logikai táblázatot áthidalva – a boot-szektor valódi belépési pontjára ugrik. A boot-szektorban elhelyezkedő program feladata az operációs rendszer fájljainak megkeresése és betöltése. A DOS 5.0 előtti verziókban ezeknek a fájloknak kötött helyen, közvetlenül a gyökérkönyvtár után kell elhelyezkedniük, e verzió felett azonban már nincs ez a megkötés.
Formázás Floppy lemezek esetében a formázás alacsony és magas (logikai) szintű formázást egyaránt jelent. A művelet végrehajtása létrehozza a sávokat és szektorokat, ha még nem volt megformázva a lemez (ilyenkor a parancs feltölti a szektorokat 0-s bitekkel), ha viszont újraformázás történik, a szektorjelölők csak megerősítésre kerülnek, a szektorok tartalma nem íródik felül. A formázás minden esetben újra létrehozza a lemez logikai struktúráját (szektorcsoportok kialakítása, allokációs és katalógustáblázatok létrehozása stb.). A merevlemezeken ma már nem lehet alacsonyszintű (fizikai) formázást végrehajtani, így ezeken a lemezeken csak a logikai szerkezet létrehozása ill. ellenőrzése történik meg.
Háttértárak teljesítményét meghatározó tényezők Az átvitel kiszolgálásának ideje a következő összetevőkre osztható: · Fejmozgási idő (seek time): Az az idő, amíg a fej a kívánt sávra áll. · Elfordulási idő (latency time): Az az idő, amíg a kívánt szektor a fej alá fordul. · Átviteli idő (transfer time): Az az idő ami alatt az adatok átvitelre kerülnek.
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 várakozási idők csökkentésével a rendszer teljesítményét növelni. 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ő.
81
Hálózati operációs rendszerek elmélete
6. fejezet
· 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 ingadozzon 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 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őként azt a kérést szolgálja ki, amelyik az aktuálishoz legközelebb levő 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, hogy a középső cilindereket gyakrabban látogatja, 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álunk ki, amelyek a pásztázás elején már megvoltak. A pásztázás közben érkező kérésekre 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ése mind menet közbeni, mind 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.
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 növekvő (szektor közbeékelődés, sector interleave) – ismeretében kiszolgálás előtt sorba állíthatók.
82
Hálózati operációs rendszerek elmélete
6. fejezet
Egyéb szervezési elvek a teljesítmény növelésére Az ütemezés mellett egyéb lehetőségek is kínálkoznak a lemezműveletek tevékenységének optimalizálására: · Lemezterület tömörítése (disk compaction): Az egymáshoz tartozó blokkokat lefoglaláskor a lemezen fizikailag is egymás mellé igyekszünk elhelyezni, illetve ezt az állapotot egy időnként futtatott rendezőprogrammal 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. · Lemezadatok elhelyezése: A gyakran szükséges adatokat SCAN típusú üzemeltetésnél érdemes a lemez középső sávjain elhelyezni. · Redundáns tárolás: 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 bevezetése hosszú időt jelentene és 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 jelenti. · 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, 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özpont-, esetleg a perifériaillesztőben levő tárban tartani (disk cache). Az átmeneti tárolás közben foglalkozni kell a megváltozott tartalmú szektorokkal: o A tárban változással egyidejűleg a lemezre is felírjuk (write through cache). o Csak akkor írjuk ki, ha a tárra szükség lesz. Ez utóbbi a nagyobb teljesítményű módszer, hiszen egy gyakran változó szektor 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 a lemezre. · Adattömörítési (data compression) eljárások használata: A lemezen az adatokat tömörített (compressed) formában tároljuk, visszaállítása – a programozó számára láthatatlanul – csak a beolvasásakor történik meg. Ily módon 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 célhardver végezheti.
83
Hálózati operációs rendszerek elmélete
6. fejezet
Az adattárolás megbízhatósága A tárolt adatok véletlen elvesztése nagy károkat okozhat. Az adattárolás biztonságának növelésére több módszer is létezik: · 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, 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 levő „fontosabb” változásokat, esetleg időnként az összes változást a lemezre kell írni. · Lemezegységek többszörözése: Az adatokat több példányban tároljuk, így egy példány sérülése esetén az adatok a többi segítségével még visszaállíthatók. Ennek módjai lehetnek: o Tükrözés (disk shadowing, mirroring): 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 használható. o Csíkkészlet (stripe set, Redundant Array of Independent Disk, RAID,) készítése: Egy nagy kapacitású lemezegység helyett több kicsit használnak, amelyekre az adatokat hibajavító kódolással (pl. paritásbittel) megtoldva szétterítik. Így egység(ek) kiesése esetén a tárolt adatok még visszaállíthatók.
84
Hálózati operációs rendszerek elmélete
6. fejezet
Ellenőrző kérdések 6. I. Válaszoljon a feltett kérdésekre! 1. Miért alkalmazunk a számítógépes rendszerekben háttértárat? 2. Mi a mágneslemezes háttértárolás működés elve? 3. Milyen a szektorok címzési mechanizmusa? 4. Írja le a partíciós tábla jellemzőit! 5. Melyek a háttértárak teljesítményét meghatározó tényezők? 6. Milyen fejmozgás optimalizáló algoritmusokat ismer?
85
Hálózati operációs rendszerek elmélete
7. fejezet
7. fejezet Lemezterület allokáció és állománykezelés Lemezterület allokáció nyilvántartása 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á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 lemez blokkjainak allokációja 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 87
Hálózati operációs rendszerek elmélete
7. fejezet
illeszkedő, legrosszabbul illeszkedő kiválasztása). A lemez nagymé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. 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. 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. Előnyei: · Nincs külső tördelé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. 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. 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. A tárolási mód pazarló. 88
Hálózati operációs rendszerek elmélete
7. fejezet
· Az index tábla mérete előre nem ismert, ezért meg kell oldani, hogy a táblázat is növekedhessen. Erre több lehetőség is kínálkozik: o Láncolt indexblokkok használatával. o Többszintes indextáblák segítségével, ahol egy "alsó" szintű tábla indexe nem az állomány blokkját, hanem egy következő szintű indexblokkra mutat. o Kombinált módon, ahol a kis állományokhoz közvetlen indexeket tárolunk, nagyobb állományokhoz egy-, majd többszintű indexblokkokat rendelünk (UNIX). 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. 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 alkalmazunk. · Az állomány mérete szerint: kis állományokat folytonosan, nagyokat indexelten tárolunk.
A FAT táblázat A láncolt tárolás módosított változata az ún. állomány alloká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á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. Minden fájlhoz a FAT-ben egy bejegyzés-láncolat tartozik, melynek első elemét a katalógus-bejegyzés egyik mezője tartalmazza. A FAT egy önindexelt tömb, melynek minden mezője a lánc következő elemének megfelelő indexet tartalmazza, azaz megmutatja, hogy melyik logikai szektorban helyezkedik el a fájl következő része, honnan lehet megtudni a rá következő szektor sorszámát. A FAT kulcsfontosságú eleme a DOS-nak, hiszen sérülésekor a lemezen található fájlok elérhetetlenné válhatnak. Fontossága miatt a lemezeken több (általában kettő) példány is található. Ezt részint a lemez fizikai sérülésének lehetősége, másrészt a logikai hibák létrejöttének lehetősége (pl. áramszünet a FAT módosítása alatt) indokolja. Normális esetben a második FAT példányba mindig csak ír a DOS, de az első FAT példány sérülése esetén a második példányból próbálja meg kinyerni az információkat, ami alapján korrigálhatja az első példányt is. 89
Hálózati operációs rendszerek elmélete
7. fejezet
A FAT elemei a 12 ill. 16-bites sorszámok. A 4086-nál kevesebb clustert tartalmazó lemezeken 12-bites, míg ennél nagyobb meghajtókon 16-bites FAT táblát alkalmaznak. A FAT-ban az adatok bitfolytonosan vannak tárolva, tehát 12-bites bejegyzések esetén 3 bájton tárol két elemet. A FAT táblában az első néhány bejegyzés helyén speciális adatok találhatók. A táblázat nulladik bájtja egy, a lemez formátumát azonosító, ún. média-leíró (media descriptor) bájt, míg a következő - a bejegyzések bit-számától függően - 5 ill. 7 bájton mindig FFh érték található. A FAT bejegyzések értékük szerint négy csoportba oszthatók: Bejegyzés
Jelentés
(0)000h
A bejegyzés (cluster) nem használt
(0)002h - (F)FEFh
A file-hoz tartozó következő cluster sorszáma
(F)FF0h - (F)FF7h
Fenntartott bejegyzés fizikailag hibás terület jelölésére ((F)FF7h)
(F)FF8h - (F)FFFh
A cluster a lánc utolsó eleme (a file vége)
Az operációs rendszer a könyvtárbejegyzésekben tárolja, hogy az adott állomány mely clusteren kezdődik. Innen egyszerű felépíteni az állománydarabokat tartalmazó cluster-láncot. A FAT tábla által megvalósított fájlkezelést szokás indexelt (hiszen a fájlrészek címét egy indextáblába gyűjtjük) szekvenciális (hiszen ahhoz, hogy beolvassuk az állományt, először fel kell építeni az allokációs láncot) adatelérésnek is nevezni.
90
Hálózati operációs rendszerek elmélete
7. fejezet
Az i-node alapú allokáció nyilvántartás Rugalmas elhelyezési lehetőséghez jutunk, ha egy táblázat helyett sok kicsit használunk, minden állományhoz külön. A könyvtárbejegyzés tárolja a fájlhoz tartozó kicsi táblázat címét, az i-node táblázat pedig a fájl blokkjainak a címét. A módszer előnye, hogy az elhelyezési információ gyorsan elérhető, kevésbé sérülékeny a tárolás is, hátránya, hogy valamiféle becslésre van szükség az állományok méretét illetően. A kérdés ugyanis az, hogy mekkora indextáblát kell fenntartani? Ha túl nagy a tábla, pazarló, ha túl kicsi, akkor ez határozná meg a maximális fájlméretet. A megoldás a már említett többszörös indexelés. A könyvtárbejegyzés csak egy címet, egy indextábla címét tartalmazza, amely 15 rekeszből áll. Az első 12, a fájl első 12 blokkjának címe. Amennyiben ez nem elegendő, a 13. rekesz egy újabb indexre mutat, mely további 12 blokk nyilvántartását teszi lehetővé, valamint tartalmazhat mutatót egy következő indextáblára. Ha fájlunk még ennél is nagyobb az első indextábla 14. rekesze egy indirekt indextáblát címez, amelynek tartalma további 15 indextábla címe, és így tovább…
91
Hálózati operációs rendszerek elmélete
7. fejezet
A módszer hátránya, hogy míg a FAT alkalmas foglaltsági táblának is, itt erről külön kell gondoskodnunk (UNIX – superblock). A fájl törlése ilyetén adminisztráció esetén végleges: a letörölt i-node táblázat adatait nem tudjuk visszanyerni, így – bár az adatok megtalálhatóak még a merevlemezen – a fájlokat beolvasni sem tudjuk. A legnagyobb előnye ennek a módszernek azonban, hogy lehetővé teszi a közvetlen elérést, mely egy többfelhasználós rendszerben alapvető követelmény.
Állománykezelés Az állományok belső szerkezete A programozásban az állományok felhasználó szempontjait tükröző belső szerkezetével foglalkozunk, nem a háttértáron lévő fizikai szerkezettel. Az állomány tárolása szerint egy bitsorozat, amit a felhasználó a saját szempontjai szerint nagyobb egységekbe csoportosíthat. Ilyenek a következők: · Mező (field): több bit, amelyek együttesen valamilyen típusú adatot írnak le (gyakori, hogy a fizikai szerkezet bájtos szervezése „meglátszik” a mezőkön is, a mezők teljes bájtokat tartalmaznak). · Rekord (record): mezők 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ó hosszú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 bytesorozat, 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. · A rendszer eljárásokkal támogatja: 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
92
Hálózati operációs rendszerek elmélete
7. fejezet
mező- illetve rekordtípusok hozzáadása nagyon bonyolult, általában lehetetlen.
Hozzáférési módok Az egyes fájlokhoz különböző módokon férhetünk hozzá: · Soros (sequential): Az állomány fogalma az operációs rendszerekben a mágnesszalag analógiájára alakult ki, a szalagon tárolt adatokat csak a tárolt bájtok sorrendjében lehetett olvasni vagy írni. Sok adatfeldolgozási feladathoz a soros hozzáférés elegendő. A soros hozzáférés közvetlen elérési módú háttértáron történő implementálásához az operációs rendszer átvitel közben tárolja, kezeli az állományon belüli pozíciót. · Közvetlen (direct): A tárolt adatelemek (bájt, mező, rekord) bármelyikét közvetlenül 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. Mivel az indextá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 indextá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.
· Partícionált (partitioned): Az állományt soros részállományok alkotják, az állomány tartalmaz egy nyilvántartást arról, hogy az egyes partíciók az állományon belül hol kezdődnek.
Műveletek állományokon Á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ége esetén az állományhoz szabad blokkokat foglal le. 93
Hálózati operációs rendszerek elmélete
7. fejezet
Á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áfűzé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. Pozícionálás A soros hozzáférésnél használt pozíciót a soros átvitel mindig növeli, pozícioná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 pozícionálás műveletével lehet megvalósítani a közvetlen hozzáférést. Á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. · 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önkü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. Állomány lezárása (close) Az átviteli műveletek befejezését jelenti, vagyis a következők végrehajtását: · Pufferelt írásnál a még ki nem írt adatok tárolása. · Osztott állománykezelésnél az állomány felszabadítása. Állomány törlése (delete) A törlés megszünteti a nyilvántartás bejegyzést, felszabadítja az állományhoz tartozó blokkokat.
94
Hálózati operációs rendszerek elmélete
7. fejezet
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.
95
Hálózati operációs rendszerek elmélete
Ellenőrző kérdések 7. I. Válaszoljon a feltett kérdésekre! 1. Mi a bittérképes szabadhely nyilvántartás? 2. Mi az indexelt tárolás lényege? 3. Mik a FAT alapvető jellemzői? 4. Hasonlítsa össze az i-node és a FAT alapú állománytárolást! 5. Milyen állomány hozzáférési módokat ismer? 6. Milyen jellemzői vannak az állomány megnyitási műveletnek?
96
7. fejezet
Hálózati operációs rendszerek elmélete
8. fejezet
8. fejezet Könyvtárkezelés Alapfogalmak A könyvtár állományok vagy más könyvtárak gyűjteménye, a könyvtár tartalmát a hozzátartozó nyilvántartás írja le. Valójában a könyvtár nem más, mint egy speciális állománytípus, amely rekordokat - könyvtárbejegyzéseket tartalmaz. A könyvtárt (directory) szokás katalógusnak is fordítani, amely talán jobban kifejezi a szerepét. A könyvtárnyilvántartás egy logikai adminisztrálási forma, a valós tárolást a FAT írja le.
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 hierarchiába szervezi.
Kétszintű könyvtárszerkezet A kétszintű könyvtárszerkezetben az egyes felhasználók állományai kerülnek egy könyvtárba. Problémát jelentenek a következők: · 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. · A felhasználók 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árban is keres.
Faszerkezet Az egyes könyvtárak nem csak állományokat, hanem más könyvtárakat is tartalmaznak.
97
Hálózati operációs rendszerek elmélete
8. fejezet
A faszerkezethez kapcsolódó fogalmak: · Aktuális könyvtár (current directory): folyamatonként eltérő, az a könyvtár, amelyet a folyamat épp megnyitva tart. · Gyökérkönyvtár (root directory): a hierarchia kiinduló pontja, csak egy van belőle. 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. · 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árban 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 állomá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.
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 (hard): az állományt leíró információkat megismétlik, illetve pl. UNIX-nál ugyanarra a kötet nyilvántartás bejegyzésre hivatkoznak. · Szimbolikus (szoft): a nyilvántartás bejegyzésben az állományt elérő, létező útvonalat tárolunk.
98
Hálózati operációs rendszerek elmélete
8. fejezet
Problémát jelentenek a következők: · 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. · Nehéz 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 bajjal jár a következők miatt: · A gráfban keresésnél el kell kerülni a végtelen ciklusokat. · Egy ág törlésével teljes hurkok a „levegőben lógva” maradhatnak, azaz tartalmukat (állományokat, könyvtárakat) nem töröltük, de azok a gyökérből indulva többé nem érhetők 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, amit pl. a UNIX rendszerek nem ellenőriznek.
Könyvtárak kezelése A főkatalógus (gyökér-könyvtár) A főkatalógus – vagy más néven gyökér-könyvtár – minden meghajtó legfelső könyvtára. E könyvtárnak nincs tulajdonos könyvtára és nem is lehet törölni. Azonban míg más könyvtárak mérete dinamikusan változik és a bennük tárolható fájlok és könyvtárak (azaz katalógus bejegyzések) számának csak a lemez kapacitása szab határt, addig a főkatalógus mérete már a formattáláskor determinált (ez a méret a boot-szektorból kiolvasható) és utólag – a lemezen lévő adatok mozgatása nélkül – nem változtatható. Ezen kívül a gyökérkönyvtár nem tartalmaz két speciális – más könyvtárakban azonban megtalálható – az aktuális könyvtárat jelentő „.” ill. a tulajdonos-könyvtárat jelentő „..” bejegyzést. Emellett a főkatalógus szigorúan egymás után következő szektorokon (a FAT-ok után) foglal helyet, míg más könyvtárak – a fájlokhoz 99
Hálózati operációs rendszerek elmélete
8. fejezet
hasonlóan – akár széttöredezve (nem egymást követő szektorokon) is elhelyezkedhetnek.
Könyvtárnyilvántartás bejegyzések Minden könyvtár elemei 32 bájtos katalógus-bejegyzések. Ezen bejegyzések fájlokat vagy újabb – a könyvtáron belüli – (al)könyvtárakat definiálhatnak. A katalógus bejegyzések rekordképe a következő: Offset
Méret (byte)
Leírás
00h
8
A file/könyvtár neve
08h
3
A file/könyvtár kiterjesztése
0Bh
1
A bejegyzés attribútumai
0Ch
10
Fenntartott
16h
2
A fájl utolsó módosításának ideje
18h
2
A fájl utolsó módosításának dátuma
1Ah
2
A fájl/könyvtár első cluster-ének sorszáma
1Ch
4
A fájl hossza bájtban (könyvtárak esetén mindig 0)
A fájl nevének első karaktere speciális jelentéssel bír, ugyanis ez határozza meg a fájl-bejegyzés érvényességét. Értékei és értelmezésük a következő: Érték
Jelentés
00h
A bejegyzés még sosem lett használva
2Eh
A bejegyzés az említett két speciális bejegyzés (’.’ , ’..’) egyike (a kérdést a második karakter vizsgálata dönti el)
E5h
A bejegyzésnek megfelelő fájl/könyvtár törlésre került, így az már nem valós
05h
A fájl nevének első karaktere E5h (a 32 alatti ASCII kódú karakterek ugyanis nem jeleníthetőek meg, míg az E5h igen) egyéb a bejegyzés érvényes, valós fájlt/könyvtárat definiál és ez a nevének első karaktere
A főkatalógusok kivételével minden könyvtár legalább két bejegyzést tartalmaz: az aktuális könyvtárat reprezentáló ’..’ és a tulajdonos-könyvtárat meghatározó ’..’ nevű könyvtárakat. A bejegyzés nevének, ill. kiterjesztésének fel nem használt karakterei 32-es ASCII kódú (szóköz) karaktereket tartalmaznak. A bejegyzés-attribútumok bitjeinek jelentése a következő: Érték
100
Jelentés
0.
A fájl csak olvasható (read-only) (nem módosítható/törölhető)
1.
A fájl rejtett (hidden)
2.
A fájl rendszer-file (system)
3.
A bejegyzés kötet-név (volume label)
Hálózati operációs rendszerek elmélete
8. fejezet
Érték
Jelentés
4.
A bejegyzés könyvtár (directory)
5.
A fájl még nem került archíválásra (archive)
6.-7.
Fenntartott
Az könyvtár-bejegyzéseket a fájloktól az attribútum 4. bitje különbözteti meg. Az alkönyvtárak gyakorlatilag katalógusbejegyezések sokaságából álló fájloknak tekinthetők. Elhelyezkedésük – csakúgy mint a fájloké – a FAT alapján határozható meg. A 3. bitet bekapcsolva tartalmazó bejegyzésből általában az egész lemezen csak egyetlen egy található, mégpedig a gyökérkönyvtárban. Ez a bejegyzés a lemez kötet-azonosítóját definiálja, melynek lekérdezése és állítása a DOS LABEL parancsa segítségével lehetséges. A fájl utolsó módosításának ideje a következő bitkiosztás szerinti formátumban található: Bit
Jelentés
15.-11.
Óra
10.-05.
Perc
04.-00.
Másodperc / 2
A fájl utolsó módosításának dátuma a következő bitkiosztás szerinti formátumban található: Bit
Jelentés
15.-09.
Év (1980-hoz képest relatív)
08.-05.
Hónap
04.-00.
Nap
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 (al)könyvtár létrehozása Új alkönyvtár létrehozásakor lefoglaljuk a könyvtárbejegyzéseknek megfelelő méretű lemezterületet, és a szülőkönyvtárban elhelyezünk egy alkönyvtár bejegyzést. 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 bennfoglalt könyvtárakban is. 101
Hálózati operációs rendszerek elmélete
8. fejezet
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 és típusát: · Rendezetlen keresés teljes bejárással · Rendezett, felező keresés · Hash keresés 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, vagy cache-eléssel. Ú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 estén új blokkot kell foglalni. 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, vagy a törölt bejegyzés helyére előrejön egy létező. Rendezett nyilvántartásban törlés estén is tartani kell a rendezettséget.
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ányok tartalma nem módosul, így az állomány osztottan is használható. Ha azonban legalább egy folyamat írja az állományt, 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.
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. Ezek lehetnek: · 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 tartalmát látják.
102
Hálózati operációs rendszerek elmélete
8. fejezet
Á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 is felléphet a holtpont vagy a kiéheztetés veszélye.
A hozzáférés szabályozása Mivel az operációs rendszer több felhasználó állományait tárolja, kezeli, felvetődik 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. A hozzáférési jogokat az állomány létrehozója vagy az állomány felett speciális jogokkal rendelkező felhasználó definiálja. Tipikus jogosultságok:
A hozzáférési jogosultságok az állományhoz, vagy 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 megadhatjuk: · Felhasználónként (túl sok lehet!) · Felhasználó-csoportonként, ilyen csoportok lehetnek például: o Operációs rendszer o Tulajdonos (minden könyvtár és állománybejegyzésnek van tulajdonosa, rendszerint az, aki létrehozta) o Adott csoport tagjai o Bárki
103
Hálózati operációs rendszerek elmélete
8. fejezet
Ellenőrző kérdések 8. I. Válaszoljon a feltett kérdésekre! 1. Milyen fogalmakat kapcsolna a faszerkezetű könyvtárstruktúrához? 2. Jellemezze a körmentes irányított gráfot, mint könyvtárstruktúra szervező elvet! 3. Adja meg a link fogalmának magyarázatát! 4. Definiálja a főkatalógust! 5. Milyen a felépítése a könyvtárnyilvántartás bejegyzéseknek? 6. Mi az osztott állománykezelés szerepe?
104
Hálózati operációs rendszerek elmélete
9. fejezet
9. fejezet Operációs rendszerek biztonsága Az operációs rendszerek integritását két irányból fenyegetik, a rendszer felügyelete alatt álló folyamatok, illetve rendszertől független elemek. Az operációs rendszer biztonságának problematikájához tartozhat a hardver meghibásodások elleni védelem is, amivel itt viszont nem foglalkozunk.
Belső biztonság A belső biztonsági rendszer (internal security), a védelem (protection) feladata, hogy az operációs rendszert használó aktív komponensek a rendszer erőforrásait helyesen használják. A védelem feladata programhibák elleni védelem, az erőforrások jogosulatlan felhasználásának megakadályozása. A rendszerben aktív (folyamatok) és passzív komponensek (erőforrások, objektumok) találhatók. A védelmi tartomány (protection domain) megadja, hogy valamelyik folyamat az adott állapotban milyen erőforrásokhoz férhet hozzá és ezeken milyen műveleteket végezhet. A védelmi tartományt lehetőség szerint minél szűkebbre kell definiálni, azaz a tartomány csak azokat az erőforrásokat tartalmazhatja, amelyekre a folyamatnak valóban szükség van (need-to-know), így elkerülhető, hogy egy folyamat programhiba miatt egy hozzá nem tartozó erőforrást használjon. Természetesen a különböző folyamatokhoz tartozó védelmi tartományok nem diszjunktak (közöttük átfedések lehetnek), hiszen több folyamat is használhatja ugyanazokat az erőforrásokat. A védelmi tartomány lehet statikus, egy folyamathoz létrejöttekor hozzárendelt, amely a folyamat működése során nem változik meg, illetve dinamikus, folyamat állapotával változó.
Statikus védelmi tartomány A védelmi tartományokat legáltalánosabban a hozzáférési mátrixszal adhatjuk meg, amelynek sorai egy-egy különböző tartomány jelentenek, oszlopai az erőforrásokhoz tartoznak. A mátrix egy konkrét cellájában lévő érték azt adja meg, hogy az adott – a sor által kijelölt tartományban a megfelelő – oszlop szerinti erőforrásokon milyen műveleteket lehet végezni. A hozzáférési mátrix hiányos mátrix, nagyon sok eleme nincs kitöltve. Az operációs rendszerekben ezt nem hézagos (többszörös láncolt listákat használó) adatszerkezettel ábrázolják, hanem más módszerekkel. Globális tábla (global table) A globális tábla a hozzáférési mátrix kitöltött elemeit leíró hármasokat tartalmazza. Minden erőforrásokon végzett művelet esetén ezt a táblát végig kell nézni és a művelet csak akkor hajtható végre, ha a megfelelő hármas megtalálható. Az ilyen implementáció problémája, hogy a táblázat túlságosan nagy, a keresés lassú, az egész táblázat nem is tartható a központi tárban, virtuális 105
Hálózati operációs rendszerek elmélete
9. fejezet
tárkezelés szükséges. A táblázat méreteit tovább növeli az, hogy sem a tartományok, sem az erőforrások szerint nem tudunk speciális csoportokat képezni. Például egy mindenki számára olvasható erőforrást az összes lehetséges tartománnyal együtt fel kell venni a táblába. Hozzáférési listák (access list) A hozzáférési listákat a hozzáférési mátrix oszlopainak kitöltött elemeiből képezzük, egy-egy oszlopot a megfelelő erőforráshoz rendelve. A hozzáférési listát ki szokták egészíteni az erőforráshoz tartozó alapértelmezésben (default) minden tartományban, mindenki számára engedélyezett műveletekkel. Amennyiben egy adott tartományban kiadott művelet nem található a hozzáférési listában, a védelem a műveletet csak akkor utasítja vissza, ha az nincs mindenkinek engedélyezve. (Hatékonyabb, ha először ezt a kiegészítő listát ellenőrizzük, mielőtt a hozzáférési listában keresni kezdünk.) Jogosítványok listája (capability list) A hozzáférési mátrixot sorok szerint is felszabdalhatjuk, minden tartományhoz hozzárendeljük az <erőforrás, művelet> párok listáját. A jogosítványt általában a megfelelő <erőforrás, művelet> párra vonatkozó egy referencia, mutató jelöli. A jogosítványok egy tartományhoz tartoznak ugyan, de a tartományban futó folyamat számára közvetlenül nem érhetők el, nem módosíthatja azokat. Ez megvalósítható úgy, hogy · Minden a központi tárban levő objektum mellett a hardver által kezelt kiegészítő típus-biteket tárolnak, vagy · A folyamat tárterületét két részre osztjuk, a folyamat kódjára és adatterületére, illetve csak az operációs rendszer által módosítható területre, ahol a jogosítványok tárolhatók. Zár-kulcs (lock-key) párok A megoldás a hozzáférési és a jogosultsági lista közötti kompromisszum: mind az erőforrásokhoz, mind a tartományokhoz tartozik egy-egy bitminta sorozat (zárak és kulcsok). Egy folyamat csak akkor férhet egy objektumhoz, ha valamelyik kulcsa megegyezik valamelyik objektum zárjával. Természetesen a tartományokhoz rendelt kulcsokat a jogosultság-listához hasonlóan védeni kell. A módszerek összehasonlítása: 1. A hozzáférési listák a felhasználók igényeihez igazodnak: egy új erőforrás létrehozásakor lehet definiálni a védelmi tartományokban kiadható műveleteket. Hátránya a megoldásnak, hogy minden művelet elvégzését ellenőrizni kell, ami időigényes. 2. A jogosítványok listája nem az objektumokhoz, hanem az egyes tartományokhoz tartozik, így kevésbé szemléletes. Az egyes objektumok használatakor a folyamat csak bemutatja a jogosítványát, az operációs rendszernek – hosszú listákban keresés helyett – elegendő ellenőrizni, hogy a jogosítvány érvényes-e. 106
Hálózati operációs rendszerek elmélete
9. fejezet
3. A zár-kulcs módszer kompromisszum, általában elég hatékony, de ugyanakkor flexibilis is, például a kulcsokat tartományok között szabadon átadhatjuk. 4. Gyakori a hozzáférési és jogosítvány listák együttes használata, a UNIX rendszerben egy állomány megnyitásnál egy folyamatnak meg kell adnia a rajta végezni kívánt műveleteket. Ezt a megnyitáskor az állományhoz tartozó hozzáférési lista alapján ellenőrzik, majd a folyamat egy jogosítványt – amelyet az állományleíró tárol – kap vissza, a későbbi műveleteknél ezt használja. Természetesen az állományleírót a folyamat nem módosíthatja.
Dinamikus védelmi tartomány Ha a folyamatok statikus védelmi tartományt használnak, akkor a tartományba túl sok erőforrást kell felvenni, mindent, amelyikre a folyamatnak az élete során szüksége lehet. Biztonságosabb, ha a védelmi tartományba csak az éppen szükséges erőforrások szerepelnek, a folyamat viszont időnként átlép másik tartományba, vagy – ami ezzel egyenrangú – a tartománya módosulhat. Dinamikus esetben a védelmi tartományok is olyan erőforrások, amelyekhez a hozzáférést, műveleteket korlátozni kell. A védelem a statikus állománynál megismert hozzáférési mátrixszal biztosítható úgy, hogy az oszlopok közé felvesszük a tartományokat is. Új bejegyzések (műveletek) a hozzáférési mátrixban: · Kapcsolás (switch): Az adott tartományból a folyamat átkapcsolhat az oszlopban kijelölt tartományra. · Másolás (copy): Az adott tartományban tartózkodó folyamat az erőforráshoz tartozó saját hozzáférési jogait átmásolhatja egy másik tartományba. Az egyszerű másoláson kívül szokásos az o Átadás (transfer): A hozzáférési jog a tartományból törlődik o Korlátozott jogú másolás: Az új tartományból a jogosultságot már nem lehet továbbadni. · Tulajdonos (owner): Ha egy tartomány tulajdonosa egy erőforrásnak, akkor más tartományokba elhelyezhet, illetve törölhet az erőforráshoz tartozó tetszőleges műveletet. · Vezérlő (control): A másolás és a tulajdonos bejegyzések a hozzáférési mátrixnak az oszlopok mentén, míg a vezérlősorok mentén történő módosításra ad lehetőséget. A vezérlő jog csak a tartományokhoz tartozó oszlopokban szerepelhet. Ha egy tartomány vezérli a másikat, akkor annak sorában – bármelyik oszlopban – elhelyezhet, illetve törölhet jogosultságokat. A hozzáférési jogok visszavonása Dinamikus védelmi tartományok esetén felmerülhet a hozzáférési jogok visszavonásának igénye. Az ehhez kapcsolódó, implementációnál eldöntendő kérdésekként merül fel, hogy milyen legyen a visszavonás: · Azonnali vagy késleltetett 107
Hálózati operációs rendszerek elmélete
9. fejezet
· Szelektív vagy általános · Minden erőforrást használó folyamatot érint vagy csak bizonyosakat · Teljes vagy részleges · Az erőforráshoz rendelt minden műveletet vissza kell vonni, vagy lehet azoknak csak egy részhalmazát · Időleges vagy végleges A hozzáférési listát használó implementációknál a visszavonás nagyon egyszerűen megvalósíthat, hiszen a jogosultságokat az erőforrás mellett tároljuk. Ha a visszavonás azonnali, a többi kérdésben mindkét választási lehetőség implementálható. Jogosítványok esetén a visszavonás megvalósítása jóval bonyolultabb, mivel a bejegyzéseket „szétszórtan" tárolják. Lehetséges megoldási módok: · Újra megszervezés (reacquisition): A jogosítványokat periodikusan töröljük az összes tartományból. Ha a folyamatnak újból szüksége lesz az erőforrásra, újra meg kell próbálnia jogosítványt szerezni, amit lehet, hogy megtagadhatnak. · Mutatók a jogosítványokra: Az erőforrások mellett tároljuk az összes kiadott jogosítvány helyét. · Indirekt jogosítványok: A jogosítvány nem közvetlenül az erőforrásra hivatkozik, hanem egy globális tábla valamelyik elemére, ahol a megfelelő objektuma vonatkozó referencia van tárolva. Visszavonáskor a globális táblában keresve kitöröljük a kívánt erőforrást, a jogosítvány következő használatakor a táblában érvénytelen erőforrás hivatkozás található. · Kulcsok: Minden objektumhoz tartozik egy speciális bitminta az ún. főkulcs (master key). A jogosítvány kiadásakor melléadjuk a főkulcs egy másolatát, a jogosítvány használatakor ellenőrizzük, hogy a tárolt kulcs megegyezik-e a főkulccsal. A hozzáférési jogok visszavonásához elég az objektumhoz tartozó főkulcsot kicserélni.
Külső biztonság A külső biztonság (external security) az operációs rendszer felügyeletén felül álló felhasználók jogtalan hozzáféréseinek megakadályozásával foglalkozik. Ez legtöbbször nem az operációs rendszerben, hanem szervezéssel megoldható feladatokat jelent.
A felhasználók azonosítása A jogtalan hozzáférések megakadályozására a rendszernek a felhasználókat egyértelműen, megbízhatóan azonosítani kell tudnia. Ez történhet a következők alapján: · A felhasználó attribútumai (tulajdonságai), pl. ujjlenyomat, retinalenyomat, aláírás · A felhasználó birtokában lévő tárgyak, pl. kulcs, azonosító kártya 108
Hálózati operációs rendszerek elmélete
9. fejezet
· A felhasználó által tudott ismeretek, pl. név és a jelszó alapján A jelenlegi rendszerek leggyakrabban a jelszóval azonosítás módszerét alkalmazzák. Tipikus problémák: · A jelszó kitalálásának megakadályozása: „jó” jelszóválasztás, megjegyezhető, de nem túl rövid, szokatlan – szótárakban nem előforduló – karaktersorozatok Némelyik rendszer megszabja a legrövidebb elfogadható jelszó méretét. Ha a kis és nagybetű a jelszóban eltérő jelentésűek, „váratlanul" elhelyezett nagybetűkkel a jelszót egyedivé lehet tenni. Van olyan rendszer, amely felajánl jó jelszavakat. · A jelszó gyakori cseréje, egyes rendszerek megkövetelik, hogy a felhasználók bizonyos időnként, extrém esetben belépésként megváltoztassa a jelszavát. · A jelszó kihallgatásának megakadályozása: o A jelszó megadásakor nem jelenik meg a terminálon. o A felhasználók jelszavait a rendszer vagy nagyon szigorúan védett állományban tárolja, vagy olyan módon rejtjelezi, hogy a rejtjelezett szövegből az eredeti jelszavakat ne lehessen visszaállítani. o A jelszó helyett algoritmus azonosítja a felhasználókat. A rendszer olyan kérdés(eke)t tesz fel, amelyikre csak a felhasználó tud helyesen válaszolni, de az esetleg lehallgatott válasza nem leplezi le, hogy azt milyen módon állította elő.
A veszélyeztetett pontok figyelése A rendszer folyamatosan figyeli a veszélyeztetett pontjait (threat monitoring), vizsgálja a felhasználók tevékenységét, és gyanús tevékenységeket jelzi a gép felügyeletének vagy a felhasználónak. Például a felhasználót belépéskor tájékoztatják arról, hogy mikor használta utoljára a rendszert, illetve az eltelt időben hány sikertelen - hibás jelszavú - belépési kísérlet történt.
Aktivitás naplózása Az aktivitás naplózása (audit logging) során a rendszer feljegyzi az egyes erőforrásokhoz hozzáférés időpontját, felhasználót és az erőforráson végzett műveletet. Ez a módszer ugyan nem véd a jogtalan hozzáférésektől, de az elkövető utólagos azonosítását megkönnyíti.
Rejtjelezés A rejtjelezés (encryption) feladata, hogy a máshogy nem védhető információs csatornán átadott adatokat az illetéktelen hallgatózók számára érthetetlenné tegye. Ismertebb alkalmazott rejtjelezési mód a DES (Data Encryption Standard) kódolás, ahol egyetlen kulcs szolgál mind az üzenet rejtjelezésére, mind a rejtjelezett üzenet (ciphertext) visszaállítására. A módszer problémája, hogy a kódot egy különálló, biztos csatornán kell továbbítani. Terjed a nyilvános kulcsú rejtjelezés (public key cryptography), ahol az üzenet rejtjelezésére és dekódolására különböző kulcsot használnak, az egyik 109
Hálózati operációs rendszerek elmélete
9. fejezet
kulcs és rejtjelezett üzenetek ismerete alapján a másik kulcs nem határozható meg. Így a felhasználók az egyik kulcsukat egy nyilvános, nem védett csatornán is elküldhetik, illetve központi adatbázisban tárolhatják, az ezzel a kulccsal rejtjelezett üzenet viszont csak a saját titkos kulcsa segítségével állítható vissza.
A rosszindulatú programok elleni védekezés A számítógépvírus olyan (rendszerint kisméretű) számítógépprogram, amely más programokhoz valami módon hozzáépülve megsokszorozza önmagát. A vírus önmagában életképtelen, működését csak a megfelelő hardver- és szoftverkörnyezetben, más programokba vagy az operációs rendszerbe beépülve képes biztosítani. Az eredményesebb terjedés érdekében a vírust programozója úgy készíti el, hogy lehetőleg ne vegyék észre jelenlétét, amíg kellően el nem terjedt, hogy aztán képes legyen fertőzni. A vírusok nagy időzített bombaként valamely rejtett vagy kevésbé rejtett feltétel teljesülésére vár, s egy adott jelre rombolni kezd. A vírus rombolása ezerféle lehet, ám legfőbb funkciói mégis négy pontban összefoglalhatók: · Saját kódját másolja (azonnal vagy adott feltételek teljesülése esetén). · Rejtőzik, hogy a felfedezése előtt legyen módja a terjedésre. · Beleprogramozott jelre vagy adott feltételek teljesülésére vár. · Valamely mellékhatást produkál. Az elterjedtebb vírusok közül a legtöbb tartalmaz valamilyen aktivizáló (trigger) mechanizmust, amely adott feltételek megléte esetén indítja el a víruskód további részének végrehajtását. Közismert a Péntek 13 vírus és a Michelangelo víruscsalád dátumfigyelése, más vírusok adott számú programindítás után kezdenek csak fertőzni vagy pusztítani. A nagyobb vírusgyűjteményekben olyan díszpéldányok is előfordulnak, amelyek egy adott szó, név beírásakor robbantanak. A szaporodáshoz, s hogy bármiféle beleprogramozott funkcióját elláthassa, a vírusnak valamilyen módon meg kell kapnia a vezérlést az operációs rendszertől. Így egy fájl-vírus csak akkor fertőz, ha a gazdaprogramot elindítják, s a vírusnak sikerül megkaparintania a vezérlést. A vírusok, mint minden számítógépes program, csak megadott környezetben működőképesek, így például a PC-re fejlesztett vírusok is csak PC-ken terjednek, fertőznek. A vírusok csoportosítása történhet fertőzési módjuk szerint. Eszerint beszélhetünk: file-vírusokról, boot-vírusokról, új típusú vírusokról, mutáló vírusokról, vírusgyártó automatákról. Vírusszerű hatásaik ellenére, mivel önálló szaporító rutinjuk nincs, nem tekinthetjük vírusoknak a trójai programokat, a programférgeket időzített bombákat és még sorolhatnánk. Fájl-vírusok A vírusok első nemzedékének tagjai voltak. A fájl-vírusok akkor fertőznek, ha fertőzött programot indítunk el. Kártevésük rendszerint két fázisból áll. Az első fázisban mindössze szaporodnak, azaz bemásolják önmagukat más programba. Ilyenkor még többnyire megállítható és visszafordítható a 110
Hálózati operációs rendszerek elmélete
9. fejezet
folyamat, megfelelő víruskereső/írtó programok segítségével. A második fázist valami figyelt esemény, egy dátum elérése, fertőzési szám stb. váltja ki. Ekkor azonban már többnyire súlyosan károsította a programkártevő a floppy vagy a merevlemez állományait. Boot-vírusok A vírusok másik csoportja nem a fájlokba írja be a kódját, hanem a floppyvagy a merevlemez boot területeinek egyikére. A bootvírusok akkor fertőznek, ha fertőzött lemezről indul a gép. Gyakran adatlemezeinken is megtelepednek, ahonnan rendszerint nem tudnak fertőzni, hiszen nem indítjuk róluk a gépet, de egy véletlen újraindítás vagy áramszünet itt is sok gondot okozhat. Makró- vagy szkript-vírusok A makró-vírusok az Office programcsalád és a Visual Basic Script elterjedésével jelentek meg. A Visual Basic magas szintű lehetőségei és közvetlen rendszerkomponens elérési megoldásai, igen jó felületet biztosítottak rosszindulatú kódok elhelyezésére és automatikus indítására. Legismertebb, nagy port felvert képviselőjük az ILoveYou, mely levélmellékletként érkező szkriptként, mind vírusszerű, mind féregszerű működést mutatva fertőzött. Új típusú vírusok Egyes vírusok már nem is a rendszerterületekre írják kódjukat, de nem is a fertőzött állományokba, hanem elrejtik valahol egy kevéssé használt lemezterületen. Mutáló, öntitkosító, polimorf vírusok Megjelentek már a saját kódjukat módosítani képes vírusok. Ezek minden fertőzéskor változtatnak a víruskódon. Az e csoportba tartozó vírusok egy része egyszerűen átkódolja saját programkódját minden fertőzéskor, valamilyen titkosító algoritmust alkalmazva, s az egymás után megfertőzött programokban csak a kibontást indító 1-3 bájt marad azonos. Dropperek A paraziták egy olyan csoportját nevezzük így, amelyek maguk működő programok, csak mellékesen vírusok, illetve egyéb kár- és kórokozókat eresztenek ki magukból. Vírusgyártó automaták Olyan programok, programcsomagok, amelyekkel több-kevesebb programozói tudással ezerszámra lehet új vírusokat létrehozni. Vírusrokon és vírusszerű programok: Trójai programok (trojan horse) A közönséges vírusoktól abban különböznek, hogy nem tartalmaznak önreprodukáló rutinokat. Az operációs rendszer kezelői felülete segítségével a felhasználók elindíthatnak saját maguk vagy mások által írt programokat, pl. rendszerprogramokat. A trójai faló olyan program, amelyet a felhasználó gyanútlanul, egy másik program helyett indít el. A trójai faló programok a keresési utakat (search path) kihasználva indulnak el, a rendszer a kívánt program előtt találja meg azonos néven a falovat (pl.: Back Orifice). 111
Hálózati operációs rendszerek elmélete
9. fejezet
Férgek (worm) Azzal okoz kárt, hogy addig másolja be magát a fertőzött állományokba, amíg azok végül futtathatatlanul hosszúak lesznek, illetve amíg csurig nem telik a lemez. A féreg olyan folyamat, amely önmagát indítja el több példányban, így leterheli a rendszer központi erőforrásait, lerontja a rendszer teljesítményét. Ismertek számítógép hálózatokon terjedő férgek is, mint pl. a hírhedt 1988-as Internet féreg vagy a híres Code Red. Időzített bombák Előfordulhat, hogy valamelyik futtatandó programban rejtőzködik valamiféle időzített bomba. Ezek a rutinok például azt figyelték, hogy a programozó szerepel-e a fizetési listán, s ha nem, akkor kíméletlenül romboltak. Rejtekajtó (trap door) Egy program írója a programjában elrejtve benne hagyhat olyan részeket, amelyeket speciális módon lehet aktiválni, amelyek nem dokumentáltak és jogosulatlan tevékenységet végezhetnek. Különösen veszélyes a fordítóprogramokba épített rejtekajtó, amely a lefordított kódba is belerakhat rejtett tevékenységeket (pl. Cheatek).
112
Hálózati operációs rendszerek elmélete
9. fejezet
Ellenőrző kérdések 9. I. Válaszoljon a feltett kérdésekre! 1. Mi a belső biztonsági rendszer feladata? 2. Definiálja a statikus védelmi tartományt! 3. Definiálja a dinamikus védelmi tartományt! 4. Ismertesse a hozzáférési listák szerepét és megvalósítási lehetőségeiket! 5. Mi a külső biztonsági rendszer feladata? 6. Milyen rosszindulatú programtípusokat ismer?
113
Hálózati operációs rendszerek elmélete
Megoldások
Megoldások 1. fejezet I. 1. a. 2. c. 3. a. 4. c. 5. a. 6. a. 7. c. 8. b. II. 1. Igaz 2. Hamis 3. Hamis 4. Igaz 5. Igaz 6. Igaz 7. Hamis 8. Igaz III. 1. 1. oldal 2. 1. oldal 3. 3. oldal 4. 4. oldal 5. 7. oldal 6. 7. oldal 7. 11. oldal 8. 12. oldal
2. fejezet I. 1. a. 115
Hálózati operációs rendszerek elmélete 2. b. 3. c. 4. c. 5. b. 6. c. II. 1. Igaz 2. Hamis 3. Igaz 4. Hamis 5. Igaz 6. Hamis 7. Hamis III. 1.
15. oldal
2.
15. oldal
3.
16. oldal
4.
17. oldal
5.
18. oldal
6.
19. oldal
7.
22. oldal
8.
23. oldal
9.
23. oldal
10.
24. oldal
3. fejezet I. 1. a. 2. b. 3. a. 4. b. 5. c. II. 1. Hamis 2. Igaz 116
Megoldások
Hálózati operációs rendszerek elmélete
Megoldások
3. Igaz 4. Hamis 5. Igaz 6. Igaz 7. Hamis III. 1.
31. oldal
2.
31. oldal
3.
32. oldal
4.
33. oldal
5.
33. oldal
6.
34. oldal
7.
35. oldal
8.
38. oldal
9.
40. oldal
10.
40. oldal
4. fejezet I. 1. c. 2. c. 3. b. 4. b. 5. c 6. c. 7. a. II. 1. Igaz 2. Hamis 3. Hamis 4. Igaz 5. Hamis 6. Hamis 7. Igaz
117
Hálózati operációs rendszerek elmélete III. 1. 45. oldal 2. 47. oldal 3. 48. oldal 4. 48. oldal 5. 49. oldal 6. 50. oldal 7. 52. oldal 8. 54. oldal 9. 54. oldal
5. fejezet I. 1. c. 2. a. 3. b. 4. a. 5. a. 6. c. 7. b. II. 1. Hamis 2. Igaz 3. Igaz 4. Hamis 5. Igaz 6. Hamis 7. Hamis III.
118
1.
59. oldal
2.
60. oldal
3.
61. oldal
4.
62. oldal
5.
62. oldal
6.
63. oldal
Megoldások
Hálózati operációs rendszerek elmélete 7.
64. oldal
8.
66. oldal
9.
67. oldal
10.
73. oldal
Megoldások
6. fejezet I. 1. 77. oldal 2. 78. oldal 3. 78. oldal 4. 80. oldal 5. 81. oldal 6. 82. oldal
7. fejezet I. 1. 87. oldal 2. 88. oldal 3. 89. oldal 4. 91. oldal 5. 93. oldal 6. 94. oldal
8. fejezet I. 1. 97. oldal 2. 98. oldal 3. 98. oldal 4. 99. oldal 5. 100. oldal 6. 102. oldal
9. fejezet I. 1. 105. oldal 2. 105. oldal 119
Hálózati operációs rendszerek elmélete 3. 107. oldal 4. 106. oldal 5. 108. oldal 6. 110. oldal
120
Megoldások
Hálózati operációs rendszerek elmélete
Tartalomjegyzék
Tartalomjegyzék 1. fejezet Az operációs rendszerek alapfogalmai ................................ 1 Az operációs rendszerek meghatározása .......................................................... 1 Az operációs rendszerek feladatai ..................................................................... 2 Erőforrás-szervezés................................................................................... 2 Felhasználói felület biztosítása .................................................................. 2 Programok szervezése .............................................................................. 2 Készülék-kezelés ....................................................................................... 3 Memória-kezelés ....................................................................................... 3 Állomány-kezelés....................................................................................... 3 Munkamenet- és csomag-kezelés ............................................................. 3 Hiba-kezelés .............................................................................................. 3 Megbízhatóság és védelem ....................................................................... 3 Felügyelet és elszámolás........................................................................... 3 Az operációs rendszerek története..................................................................... 4 Élet operációs rendszer nélkül ................................................................... 4 Supervisor programok és I/O rendszerek .................................................. 4 Szalagos és lemezes operációs rendszerek .............................................. 5 Operációs rendszerek típusai............................................................................. 6 Kötegelt rendszerek ................................................................................... 6 Korszerű kötegelt rendszerek .................................................................... 6 Elosztott rendszerek .................................................................................. 6 Időosztásos, többfelhasználós rendszerek ................................................ 7 Prioritásos (Real- time) rendszerek ........................................................... 7 A T.H.E. architektúra ................................................................................. 7 Az operációs rendszerek szerkezete ................................................................. 8 Rétegszerkezet .......................................................................................... 8 Fontosabb rendszermodulok ..................................................................... 9 Rendszerhívások ..................................................................................... 11 Rendszerprogramok ................................................................................ 12 Ellenőrző kérdések 1........................................................................................ 13
2. fejezet Folyamat és megszakításkezelés ........................................ 15 Folyamatkezelés .............................................................................................. 15 121
Hálózati operációs rendszerek elmélete
Tartalomjegyzék
A folyamat fogalma .................................................................................. 15 Folyamatkezelés multiprogramozott rendszerekben................................ 15 Környezetváltás ....................................................................................... 18 Folyamatok közötti kommunikáció ........................................................... 19 Folyamatok precedenciája ....................................................................... 20 Folyamatleírók ......................................................................................... 22 Szálak ...................................................................................................... 23 Megszakításkezelés ......................................................................................... 23 A megszakításokról általában .................................................................. 23 Megszakításosztályok.............................................................................. 24 Megszakítási kérelmek kiszolgálása ........................................................ 24 A PC-k megszakítási rendszere............................................................... 25 Ellenőrző kérdések 2........................................................................................ 28
3. fejezet Programok szinkronizációja ................................................ 31 A perifériás műveletek gyorsítása .................................................................... 31 Pufferelés................................................................................................. 31 Spooling (Simultaneous Peripheral Operations On-Line) ........................ 31 Konkurens folyamatok ...................................................................................... 32 Szinkronizáció .................................................................................................. 32 Kölcsönös kizárás ............................................................................................ 33 A kritikus szakasz............................................................................................. 33 Holtpont ............................................................................................................ 35 Holtponti helyzet kialakulása.................................................................... 35 Holtpont kezelése .................................................................................... 36 Ellenőrző kérdések 3........................................................................................ 42
4. fejezet Processzor- és tárkezelés .................................................... 45 Az általános célú főprocesszor felépítése és működése .................................. 45 A regiszterek és az általuk végzett feladatok ........................................... 45 A Neumann-ciklus ............................................................................................ 47 A CPU ütemezése ............................................................................................ 48 Az ütemezés célja és szerepe ................................................................. 48 A CPU ütemezésének szintjei.................................................................. 48 Az ütemező algoritmusok alapjai ............................................................. 48 Az ütemező algoritmusok típusai: ............................................................ 49 122
Hálózati operációs rendszerek elmélete
Tartalomjegyzék
Tárkezelés........................................................................................................ 51 A tár feladata és felépítése ...................................................................... 51 Címkötési módszerek .............................................................................. 52 Tárolt programok ..................................................................................... 54 Ellenőrző kérdések 4........................................................................................ 56
5. fejezet Memóriakezelés ..................................................................... 59 Az i8086-os processzor memóriakezelése ....................................................... 59 Társzervezési elvek ......................................................................................... 60 Egy partíciós rendszer ............................................................................. 60 Több partíciós rendszer ........................................................................... 61 Tárcsere (swap) ....................................................................................... 62 Memóriacímzési módszerek .................................................................... 63 Szegmensszervezés................................................................................ 64 Lapszervezés........................................................................................... 66 Virtuális tárkezelés................................................................................... 67 Ellenőrző kérdések 5........................................................................................ 75
6. fejezet Háttértárkezelés..................................................................... 77 A háttértárkezelés alapjai ................................................................................. 77 A számítógéprendszerek tárhierarchiája .......................................................... 77 Háttértárak fizikai szervezése .......................................................................... 78 Háttértárak címzése ................................................................................. 78 Háttértárak kezelése ........................................................................................ 80 Particionálás ............................................................................................ 80 Formázás ................................................................................................. 81 Háttértárak teljesítményét meghatározó tényezők ................................... 81 Lemezműveletek ütemezése............................................................................ 81 A fejmozgás optimalizálása ..................................................................... 82 Az elfordulási idő optimalizálása .............................................................. 82 Egyéb szervezési elvek a teljesítmény növelésére .......................................... 83 Az adattárolás megbízhatósága ....................................................................... 84 Ellenőrző kérdések 6........................................................................................ 85
7. fejezet Lemezterület allokáció és állománykezelés ....................... 87 Lemezterület allokáció nyilvántartása .............................................................. 87 A szabad blokkok nyilvántartása.............................................................. 87 123
Hálózati operációs rendszerek elmélete
Tartalomjegyzék
A lemez blokkjainak allokációja ............................................................... 87 A FAT táblázat ......................................................................................... 89 Az i-node alapú allokáció nyilvántartás .................................................... 91 Állománykezelés .............................................................................................. 92 Az állományok belső szerkezete.............................................................. 92 Hozzáférési módok .................................................................................. 93 Műveletek állományokon ......................................................................... 93 Ellenőrző kérdések 7........................................................................................ 96
8. fejezet Könyvtárkezelés .................................................................... 97 Alapfogalmak ................................................................................................... 97 A könyvtárak hierarchiája ................................................................................. 97 Kétszintű könyvtárszerkezet .................................................................... 97 Faszerkezet ............................................................................................. 97 Körmentes irányított gráf.......................................................................... 98 Általános gráf ........................................................................................... 99 Könyvtárak kezelése ........................................................................................ 99 A főkatalógus (gyökér-könyvtár) .............................................................. 99 Könyvtárnyilvántartás bejegyzések.........................................................100 Műveletek könyvtárakon .........................................................................101 Osztott állománykezelés .................................................................................102 Teljes állományra vonatkozó szabályozás (file lock) ..............................102 Állomány részeire vonatkozó kizárás......................................................103 A hozzáférés szabályozása ....................................................................103 Ellenőrző kérdések 8.......................................................................................104
9. fejezet Operációs rendszerek biztonsága..................................... 105 Belső biztonság ...............................................................................................105 Statikus védelmi tartomány .....................................................................105 Dinamikus védelmi tartomány .................................................................107 Külső biztonság ...............................................................................................108 A felhasználók azonosítása ....................................................................108 A veszélyeztetett pontok figyelése ..........................................................109 Aktivitás naplózása .................................................................................109 Rejtjelezés ..............................................................................................109 A rosszindulatú programok elleni védekezés ..........................................110 124
Hálózati operációs rendszerek elmélete
Tartalomjegyzék
Ellenőrző kérdések 9.......................................................................................113
Megoldások .......................................................................................... 115 1. fejezet..........................................................................................................115 2. fejezet..........................................................................................................115 3. fejezet..........................................................................................................116 4. fejezet..........................................................................................................117 5. fejezet..........................................................................................................118 6. fejezet..........................................................................................................119 7. fejezet..........................................................................................................119 8. fejezet..........................................................................................................119 9. fejezet..........................................................................................................119
125