next up previous contents
Next: Folyamatokat kezelo rendszerhívások Up: No Title Previous: Kérdésekfeladatok

Rendszerhívások

Az operációs rendszerek a felhasználói programok elol eltakarják a géphez kapcsolt "nyers" hardver részleteket, és a programozónak így kényelmes programfejlesztési környezetet biztosítának. Sot a legtöbb komoly rendszerben az operációs rendszer nem is engedi meg, hogy az "átlagos" felhasználók beleturkáljanak a rendszer lelkivilágába (például a UNIX rendszerben sincs mindenkinek megengedve az, hogy a floppy-diszkhez tartozó speciális fájlt megnyissa és használja). Ehelyett az operációs rendszer ún. szolgáltatásokat nyújt a programoknak. Ilyen szolgáltatás például egy adott nevu fájl megnyitása, egy adott fájlból karakterek olvasása, illetve fájlba karakterek írása, stb ...

Ezeket a szolgáltatásokat a programok (a szolgáltatások (ki)használói) ún. rendszerhívásokon keresztül érhetik el. Ezt úgy kell érteni, hogy minden felhasználói program a processzor felhasználói üzemmódjában fut, számol, ciklust szervez, stb ... Ha valami olyan muveletet akar végrehajtani, amely esetleg más futó programokat megzavarna (például ilyenek a fájlmuveletek), akkor meg kell kérnie az operációs rendszert, hogy hajtsa végre neki a kért muveletet. Az operációs rendszer ellenorizheti, hogy a felhasználónak van-e joga ahhoz, amit kért, és ha nincs, akkor a rendszerhívást visszautasíthatja. Ha pedig a felhasználónak jogosultsága van az adott muvelet végrehajtására (például egy winchester formattálására), akkor az operációs rendszer a kért szolgáltatást elvégzi. Ilyen módon tudja az operációs rendszer az elso fejezetben említett feladatát, a hardver eroforrások védelmét és elosztását helyesen ellátni.

A következokben egy muködo operációs rendszer (a UNIX) rendszerhívásain keresztül lesz bemutatva az, hogy milyen eszközök állnak a programozó rendelkezésére. A UNIX rendszerhívásainak csak egy nagyon szuk részhalmaza lesz bemutatva - foleg azok, amelyek "közösek" minden UNIX-ban (a 7-es változattól kezdve). A rendszerhívások itt is a már korábban említett szempontok szerint lesznek csoportosítva.

A rendszerhívásokról még annyit érdemes megjegyezni, hogy egy egész típusú érték a visszatérési értékük, és a negatív visszatérési érték legtöbbször a rendszerhívás végrehajtása alatt fellépo hibát jelzi, vagy azt, hogy a rendszerhívás hiba nélkül lefutott. Hiba esetén az errno egész típusú globális változó tárolja a hiba okát: minden egyes hibafajtát egy-egy egész szám azonosít, és az errno változóban az éppen végrehajtott rendszerhívás sikertelenségét okozó hiba kódja van. Ezt a hibakódot kiírni (a hozzá tartozó szokásos angol nyelvu szövegekkel) a perror könyvtári rutinnal lehet (ez nem rendszerhívás!). (Az errno-beli hibakódok egy errno.h include fájlban vannak "olvasható" formában: ugyanis ott vannak C nyelvu makródefiníciókkal a hibakódoknak megfelelo "standard" konstansok megadva. Ez egyébként is jellemzo a UNIX-ra és más rendszerekre is, hogy bizonyos konstansoknak szimbolikus megfeleloit belerakják a C könyvtárba vagy header-fájlokba. Ez azért jó, mert a programkód ezek használatával olvashatóbb lesz, és ha esetleg a konstanst megváltoztatják (vagyis azt, amit az operációs rendszer vár), akkor minden programban megkeresni és átírni ... az nagyon nagy munka lenne). Ilyen konstansokat (ún. manifest-konstansokat) ebben a leírásban is külön említés nélkül fogok használni. Az egyes rendszerhívásokhoz tartozó referencia kézikönyv lapok (amit a UNIX man parancs kiír) tartalmazzák azokat a header-fájlokat, amelyek az ott használható manifest-konstansokat (... makrókat) definiálják.





next up previous contents
Next: Folyamatokat kezelo rendszerhívások Up: No Title Previous: Kérdésekfeladatok



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996