A rendszerhívás egy módja annak, hogy a felhasználói program kapcsolódjon az operációs rendszerhez. A program több szolgáltatást kér, és az operációs rendszer egy sor rendszerhívás meghívásával válaszol a kérés teljesítésére. A rendszerhívás megírható assembly nyelven vagy magas szintű nyelven, mint pl C vagy Pascal . A rendszerhívások előre meghatározott funkciók, amelyeket az operációs rendszer közvetlenül hívhat meg, ha magas szintű nyelvet használ.
Ebben a cikkben megismerheti az operációs rendszer rendszerhívásait, és megvitatja azok típusait és sok más dolgot.
Mi az a rendszerhívás?
A rendszerhívás olyan módszer, amellyel egy számítógépes program szolgáltatást kér annak az operációs rendszernek a kernelétől, amelyen fut. A rendszerhívás az operációs rendszerrel való programokon keresztüli interakció módja. A rendszerhívás egy kérés a számítógépes szoftvertől az operációs rendszer kerneléhez.
A Application Program Interface (API) összekapcsolja az operációs rendszer funkcióit a felhasználói programokkal. Kapcsolatként működik az operációs rendszer és egy folyamat között, lehetővé téve a felhasználói szintű programok számára, hogy operációs rendszer-szolgáltatásokat kérjenek. A kernelrendszer csak rendszerhívásokkal érhető el. Rendszerhívások szükségesek minden erőforrást használó programhoz.
Hogyan történik a rendszerhívás?
Amikor egy számítógépes szoftvernek hozzá kell férnie az operációs rendszer kerneléhez, rendszerhívást indít. A rendszerhívás API-t használ, hogy az operációs rendszer szolgáltatásait a felhasználói programok elé tárja. Ez az egyetlen módszer a kernelrendszer elérésére. Minden olyan programnak vagy folyamatnak, amelynek végrehajtásához erőforrásokra van szükség, rendszerhívásokat kell használnia, mivel ezek interfészként szolgálnak az operációs rendszer és a felhasználói programok között.
Az alábbiakban bemutatunk néhány példát arra, hogy miként tér el a rendszerhívás a felhasználói függvénytől.
10 ml unciában
- A rendszerhívási függvény kernelfolyamatokat hozhat létre és használhat az aszinkron feldolgozás végrehajtására.
- A rendszerhívás nagyobb jogosultsággal rendelkezik, mint egy szabványos szubrutin. A kernel módú jogosultsággal rendelkező rendszerhívás a kernelvédelmi tartományban fut le.
- A rendszerhívások nem használhatnak megosztott könyvtárakat vagy olyan szimbólumokat, amelyek nincsenek jelen a kernelvédelmi tartományban.
- A rendszerhívások kódja és adatai a globális kernelmemóriában vannak tárolva.
Miért van szüksége rendszerhívásokra az operációs rendszerben?
Különféle helyzetekben rendszerhívásokra van szükség az operációs rendszerben. A következő helyzetek a következők:
- Szükséges, ha egy fájlrendszer fájlt szeretne létrehozni vagy törölni.
- A hálózati kapcsolatokhoz rendszerhívások szükségesek az adatcsomagok küldéséhez és fogadásához.
- Ha fájlt szeretne olvasni vagy írni, rendszerhívásokat kell indítania.
- Ha hardvereszközöket szeretne elérni, beleértve a nyomtatót, szkennert, rendszerhívásra van szüksége.
- A rendszerhívások új folyamatok létrehozására és kezelésére szolgálnak.
Hogyan működnek a rendszerhívások
Az alkalmazások a memória felhasználói térnek nevezett területen futnak. Egy rendszerhívás csatlakozik az operációs rendszer kerneléhez, amely a kerneltérben fut le. Amikor egy alkalmazás rendszerhívást hoz létre, először engedélyt kell szereznie a kerneltől. Ezt egy megszakítási kéréssel éri el, amely szünetelteti az aktuális folyamatot, és átadja a vezérlést a kernelnek.
Ha a kérés engedélyezett, a kernel végrehajtja a kért műveletet, például létrehoz vagy töröl egy fájlt. Bemenetként az alkalmazás megkapja a kernel kimenetét. Az alkalmazás a bevitel beérkezése után folytatja az eljárást. Amikor a művelet befejeződött, a kernel visszaküldi az eredményeket az alkalmazásnak, majd áthelyezi az adatokat a kernelterületről a memória felhasználói területére.
élő krikett.is
Egy egyszerű rendszerhívás néhány nanomásodpercbe is telhet az eredmény eléréséhez, például a rendszerdátum és -idő lekéréséhez. Egy bonyolultabb rendszerhívás, például egy hálózati eszközhöz való csatlakozás, eltarthat néhány másodpercig. A legtöbb operációs rendszer külön kernelszálat indít minden rendszerhíváshoz a szűk keresztmetszetek elkerülése érdekében. A modern operációs rendszerek többszálúak, ami azt jelenti, hogy egyszerre több rendszerhívást is képesek kezelni.
A rendszerhívások típusai
Általában ötféle rendszerhívás létezik. Ezek a következők:
Most egyenként megismerheti a különböző típusú rendszerhívásokat.
Folyamatirányítás
A folyamatvezérlés a folyamatok irányítására szolgáló rendszerhívás. Egyes folyamatvezérlési példák közé tartozik a létrehozás, a betöltés, a megszakítás, a befejezés, a végrehajtás, a feldolgozás, a folyamat leállítása stb.
Fájlkezelés
A fájlkezelés egy rendszerhívás, amely a fájlok kezelésére szolgál. Néhány fájlkezelési példa: fájlok létrehozása, fájlok törlése, megnyitása, bezárása, olvasása, írása stb.
Eszköz kezelés
Az eszközkezelés egy rendszerhívás, amelyet az eszközök kezelésére használnak. Néhány példa az eszközkezelésre: olvasás, eszköz, írás, eszközattribútumok lekérése, eszköz kiadása stb.
Információk karbantartása
Az információkarbantartás egy rendszerhívás, amelyet az információk karbantartására használnak. Van néhány példa az információ karbantartására, beleértve a rendszeradatok lekérését, az idő vagy dátum beállítását, az idő vagy dátum lekérését, a rendszeradatok beállítását stb.
Kommunikáció
A kommunikáció egy rendszerhívás, amelyet kommunikációra használnak. Van néhány példa a kommunikációra, beleértve a kommunikációs kapcsolatok létrehozását, törlését, üzenetek küldését, fogadását stb.
Példák Windows és Unix rendszerhívásokra
Számos példa van Windows és Unix rendszerhívásokra. Ezeket az alábbi táblázat tartalmazza:
Folyamat | ablakok | Unix |
---|---|---|
Folyamatirányítás | CreateProcess() Kilépési folyamat() WaitForSingleObject() | Villa() Kijárat() Várjon() |
Fájlkezelés | CreateFile() Fájl olvasása() WriteFile() CloseHandle() | Nyisd ki() Olvas() Ír() Bezárás() |
Eszköz kezelés | SetConsoleMode() ReadConsole() WriteConsole() | Ioctl() Olvas() Ír() |
Információk karbantartása | Get CurrentProcessID() SetTimer() Alvás() | Getpid() Riasztás() Alvás() |
Kommunikáció | CreatePipe() CreateFileMapping() MapViewOfFile() | Cső() Shmget() Mmap() |
Védelem | SetFileSecurity() InitializeSecurityDescriptor() SetSecurityDescriptorgroup() | Chmod() umask() Chown() |
Itt röviden megismerhet néhány módszert:
nyisd ki()
A nyisd ki() rendszerhívás lehetővé teszi a fájlrendszeren lévő fájl elérését. Erőforrásokat foglal le a fájlhoz, és biztosít egy kezelőt, amelyre a folyamat hivatkozhat. Számos folyamat képes megnyitni egy fájlt egyszerre vagy csak egyetlen folyamattal. Mindez a fájlrendszeren és a struktúrán alapul.
olvas()
A fájlrendszerben lévő fájlból adatok kinyerésére szolgál. Általában három érvet fogad el:
shell fajta
- Egy fájlleíró.
- Puffer az olvasott adatok tárolására.
- A fájlból olvasandó bájtok száma.
Az olvasandó fájl fájlleírója segítségével azonosítani és megnyitni lehet nyisd ki() olvasás előtt.
várjon()
Egyes rendszerekben előfordulhat, hogy egy folyamatnak várnia kell egy másik folyamatra, hogy befejezze a végrehajtását, mielőtt folytatná. Amikor egy szülőfolyamat utódfolyamatot hoz létre, a szülőfolyamat végrehajtása felfüggesztésre kerül, amíg az alárendelt folyamat be nem fejeződik. A várjon() rendszerhívás a szülőfolyamat felfüggesztésére szolgál. Miután az utódfolyamat befejezte a végrehajtást, az irányítás visszakerül a szülőfolyamathoz.
ír()
Arra használják, hogy adatokat írjanak egy felhasználói pufferből egy eszközre, például egy fájlba. Ez a rendszerhívás az egyik módja annak, hogy a program adatokat generáljon. Általában három érvre van szükség:
- Egy fájlleíró.
- Egy mutató arra a pufferre, amelybe az adatokat menti.
- A pufferből írandó bájtok száma.
Villa()
A folyamatok klónokat állítanak elő magukról a Villa() rendszerhívás. Ez az egyik leggyakoribb módja a folyamatok létrehozásának az operációs rendszerekben. Amikor egy szülőfolyamat utódfolyamatot hoz létre, a szülőfolyamat végrehajtása megszakad, amíg az alárendelt folyamat be nem fejeződik. Miután az utódfolyamat befejezte a végrehajtást, az irányítás visszakerül a szülőfolyamathoz.
Bezárás()
A fájlrendszerhez való hozzáférés leállítására szolgál. A rendszerhívás meghívása azt jelenti, hogy a programnak már nincs szüksége a fájlra, és a pufferek kiürülnek, a fájlinformációk módosulnak, és ennek eredményeként a fájlerőforrások lefoglalásra kerülnek.
végrehajt()
Amikor egy végrehajtható fájl lecserél egy korábbi végrehajtható fájlt egy már futó folyamatban, akkor ez a rendszerfunkció meghívásra kerül. Mivel új folyamat nem épül fel, a régi folyamatazonosító megmarad, de az új folyamat felváltja az adatokat, veremeket, adatokat, fejet stb.
tavaszi csizma
kijárat()
A kijárat() egy rendszerhívás, amely a programvégrehajtás leállítására szolgál. Ez a hívás azt jelzi, hogy a szál végrehajtása befejeződött, ami különösen hasznos többszálú környezetekben. Az operációs rendszer visszanyeri a folyamat által elköltött erőforrásokat a használatot követően kijárat() rendszer funkció.