V oblasti výpočtovej techniky a systémové volanie je programový spôsob, ktorým počítačový program požaduje službu od jadra operačného systému, na ktorom je vykonávaný. Systémové volanie je spôsob, ako to môžu programy uskutočniť interagovať s operačným systémom . Počítačový program zavolá systémové volanie, keď zadá požiadavku do jadra operačného systému. Systémové volanie poskytuje služby operačného systému užívateľským programom prostredníctvom aplikačného programového rozhrania (API). Poskytuje rozhranie medzi procesom a operačným systémom, ktoré umožňuje procesom na úrovni používateľa požadovať služby operačného systému. Systémové volania sú jedinými vstupnými bodmi do jadro systém. Všetky programy vyžadujúce prostriedky musia používať systémové volania.
Používateľský program môže interagovať s operačným systémom pomocou systémového volania. Program vyžaduje množstvo služieb a OS odpovedá spustením niekoľkých systémových volaní na splnenie požiadavky. Systémové volanie môže byť napísané v jazykoch vysokej úrovne, ako je C alebo Pascal, alebo v jazyku symbolických inštrukcií. Ak sa použije jazyk vysokej úrovne, operačný systém môže priamo vyvolať systémové volania, čo sú preddefinované funkcie.
Systémové volanie je mechanizmus, ktorý používajú programy na vyžiadanie služieb od servera operačný systém (OS). Zjednodušene povedané, je to spôsob interakcie programu so základným systémom, ako je napríklad prístup k hardvérovým prostriedkom alebo vykonávanie privilegovaných operácií.
Systémové volanie je iniciované programom vykonaním špecifickej inštrukcie, ktorá spustí prepnutie na jadro režim, ktorý umožňuje programu vyžiadať si službu z operačného systému. OS potom spracuje požiadavku, vykoná potrebné operácie a vráti výsledok späť programu.
Systémové volania sú nevyhnutné pre správne fungovanie operačného systému, pretože poskytujú programom štandardizovaný spôsob prístupu k systémovým zdrojom. Bez systémových volaní by každý program musel implementovať svoje vlastné metódy prístupu k hardvéru a systémovým službám, čo by viedlo k nekonzistentnému správaniu náchylnému na chyby.
Služby poskytované systémovými volaniami
- Tvorba a riadenie procesov
- Správa hlavnej pamäte
- Správa prístupu k súborom, adresárov a súborového systému
- Manipulácia so zariadením (I/O)
- Ochrana
- Vytváranie sietí atď.
- Kontrola procesu: ukončiť, zrušiť, vytvoriť, ukončiť, prideliť a uvoľniť pamäť.
- Správa súborov: vytvárať, otvárať, zatvárať, mazať, čítať súbory atď.
- Správa zariadenia
- Údržba informácií
- Komunikácia
Vlastnosti systémových volaní
- Rozhranie: Systémové volania poskytujú dobre definované rozhranie medzi používateľskými programami a operačným systémom. Programy zadávajú požiadavky volaním špecifických funkcií a operačný systém odpovedá vykonaním požadovanej služby a vrátením výsledku.
- Ochrana: Systémové volania sa používajú na prístup k privilegovaným operáciám, ktoré nie sú dostupné bežným užívateľským programom. Operačný systém používa toto privilégium na ochranu systému pred škodlivým alebo neoprávneným prístupom.
- Režim jadra: Keď sa uskutoční systémové volanie, program sa dočasne prepne z používateľského režimu do režimu jadra. V režime jadra má program prístup ku všetkým systémovým prostriedkom vrátane hardvéru, pamäte a ďalších procesov.
- Prepínanie kontextu: Systémové volanie vyžaduje prepnutie kontextu, ktoré zahŕňa uloženie stavu aktuálneho procesu a prepnutie do režimu jadra na vykonanie požadovanej služby. To môže spôsobiť réžiu, ktorá môže ovplyvniť výkon systému.
- Spracovanie chýb: Systémové volania môžu vrátiť chybové kódy indikujúce problémy s požadovanou službou. Programy musia tieto chyby kontrolovať a primerane s nimi zaobchádzať.
- synchronizácia: Systémové volania možno použiť na synchronizáciu prístupu k zdieľaným zdrojom, ako sú súbory alebo sieťové pripojenia. Operačný systém poskytuje synchronizačné mechanizmy, ako sú zámky alebo semafory, aby sa zabezpečil bezpečný prístup viacerých programov k týmto zdrojom.
Výhody systémových volaní
- Prístup k hardvérovým zdrojom: Systémové volania umožňujú programom pristupovať k hardvérovým prostriedkom, ako sú diskové jednotky, tlačiarne a sieťové zariadenia.
- Správa pamäte: Systémové volania poskytujú programom spôsob alokácie a uvoľnenia pamäte, ako aj prístupu k hardvérovým zariadeniam s mapovaním pamäte.
- Riadenie procesov: Systémové volania umožňujú programom vytvárať a ukončovať procesy, ako aj riadiť medziprocesovú komunikáciu.
- Zabezpečenie: Systémové volania poskytujú programom spôsob, ako pristupovať k privilegovaným zdrojom, ako je napríklad možnosť upravovať systémové nastavenia alebo vykonávať operácie, ktoré vyžadujú oprávnenia správcu.
- štandardizácia: Systémové volania poskytujú štandardizované rozhranie pre programy na interakciu s operačným systémom a zabezpečujú konzistenciu a kompatibilitu naprieč rôznymi hardvérovými platformami a verziami operačného systému.
Ako funguje systémové volanie?
Tu je podrobné vysvetlenie krok za krokom, ako funguje systémové volanie:
- Používateľ potrebuje špeciálne zdroje: Niekedy programy potrebujú robiť nejaké špeciálne veci, ktoré nie je možné vykonať bez povolenia operačného systému, ako je čítanie zo súboru, zapisovanie do súboru, získavanie akýchkoľvek informácií z hardvéru alebo vyžiadanie miesta v pamäti.
- Program odošle požiadavku na systémové volanie: Existujú špeciálne preddefinované pokyny na zadanie požiadavky operačnému systému. Tieto inštrukcie nie sú nič iné ako systémové volanie. Program v prípade potreby používa tieto systémové volania vo svojom kóde.
- Operačný systém vidí systémové volanie: Keď OS zaznamená systémové volanie, uzná, že program v tejto chvíli potrebuje pomoc, takže dočasne zastaví vykonávanie programu a dá všetku kontrolu nad jeho špeciálnou časťou s názvom „Kernel“. Teraz „kernel“ rieši potrebu programu.
- Operačný systém vykonáva tieto operácie: Teraz operačný systém vykoná operáciu, ktorú požaduje program. Príklad: čítanie obsahu zo súboru atď.
- Operačný systém vráti kontrolu programu: Po vykonaní špeciálnej operácie OS vráti kontrolu programu na ďalšie vykonávanie programu.
Príklady systémového volania vo Windows a Unix
Systémové volania pre Windows a Unix prichádzajú v mnohých rôznych formách. Tieto sú uvedené v tabuľke nižšie:
Proces | Windows | Unix |
---|---|---|
Riadenie procesov | CreateProcess() ExitProcess() WaitForSingleObject() | Vidlička() VÝCHOD() počkaj() |
Manipulácia so súbormi | CreateFile() ReadFile() WriteFile() | OTVORENÉ() Čítať() kde sú nastavenia prehliadača Napíšte () Zavrieť() |
Správa zariadenia | SetConsoleMode() ReadConsole() WriteConsole() | Ioctl() Čítať() Napíšte () |
Údržba informácií | GetCurrentProcessID() SetTimer() spánok () | Getpid() alarm() spánok () |
Komunikácia | CreatePipe() CreateFileMapping() MapViewOfFile() | Rúra() Shmget() Mmap() |
Ochrana | SetFileSecurity() InitializeSecurityDescriptor() SetSecurityDescriptorgroup() | Chmod() odmaskovať () Chown() |
OTVORENÉ(): Prístup k súboru v súborovom systéme je možný pomocou systémového volania open(). Poskytuje súborové prostriedky, ktoré potrebuje, a rukoväť, ktorú môže proces použiť. Súbor môže byť otvorený viacerými procesmi súčasne alebo iba jedným procesom. Všetko je založené na štruktúre a súborovom systéme.
vôl vs býk
čítať(): Pomocou neho sa získavajú údaje zo súboru v súborovom systéme. Vo všeobecnosti akceptuje tri argumenty:
- Popis súboru.
- Vyrovnávacia pamäť na ukladanie prečítaných údajov.
- Koľko bajtov sa má prečítať zo súboru
Pred čítaním je možné súbor, ktorý sa má čítať, identifikovať podľa jeho deskriptora súboru a otvoriť ho pomocou funkcie open().
počkaj(): V niektorých systémoch môže byť potrebné, aby sa proces pred pokračovaním pozastavil, kým iný proces neskončí. Keď nadradený proces vytvorí podriadený proces, vykonávanie nadradeného procesu sa zastaví, kým sa podriadený proces nedokončí. Rodičovský proces sa zastaví pomocou systémového volania wait(). Rodičovský proces znova získa kontrolu, keď je spustený podriadený proces.
napíš(): Údaje z vyrovnávacej pamäte používateľa sa pomocou nej zapisujú do zariadenia, ako je súbor. Pomocou toho môže program produkovať dáta jedným spôsobom systémové volanie . vo všeobecnosti existujú tri argumenty:
- Popis súboru.
- Odkaz na vyrovnávaciu pamäť, kde sú uložené údaje.
- Množstvo údajov, ktoré sa zapíšu z vyrovnávacej pamäte v bajtoch.
vidlička(): Systémové volanie fork() používajú procesy na vytváranie svojich kópií. Je to jedna z najčastejšie používaných metód v operačných systémoch na vytváranie procesov. Keď nadradený proces vytvorí podriadený proces, vykonávanie nadradeného procesu sa pozastaví, kým sa podriadený proces nedokončí. Rodičovský proces znova získa kontrolu, keď je spustený podriadený proces.
VÝCHOD(): Na ukončenie programu sa používa systémové volanie s názvom exit(). V prostrediach s viacerými vláknami toto volanie označuje, že vykonávanie vlákna je dokončené. Po použití systémovej funkcie exit() operačný systém obnoví zdroje použité procesom.
Metódy odovzdávania parametrov OS
Ak dôjde k systémovému volaniu, musíme odovzdať parameter jadrovej časti operačného systému.
Pozrite sa napríklad na dané OTVORENÉ() systémové volanie:
C
//function call example> #include> int> open(> const> char> *pathname,> int> flags, mode_t mode);> |
>
>
Tu názov cesty , vlajky a mode_t sú parametre.
Takže je potrebné poznamenať, že:
- Parametre nemôžeme odovzdať priamo ako pri bežnom volaní funkcie.
- V režime Kernal existuje iný spôsob, ako vykonať volanie funkcie.
Nemôžeme ho teda spustiť v normálnom adresnom priestore, ktorý už proces vytvoril, a preto nemôžeme umiestniť parametre na vrch zásobníka, pretože nie je dostupný pre jadro operačného systému na spracovanie. takže musíme prijať akékoľvek iné metódy na odovzdanie parametrov jadru OS.
Dokážeme to cez,
- Odovzdávanie parametrov v registroch
- Adresa bloku je odovzdaná ako parameter v registri.
- Parametre sa vložia do zásobníka.
Poďme diskutovať o každom bode podrobne:
1. Odovzdávanie parametrov v registroch.
- Je to najjednoduchšia metóda spomedzi troch
- Tu priamo odovzdávame parametre do registrov.
- Bude to však obmedzené, keď je počet parametrov väčší ako počet registrov.
- Tu je kód programu C:
C
// Passing parameters in registers.> #include> #include> int> main()> {> > const> char> * pathname => 'example.txt'> ;> > int> flags = O_RDONLY;> > mode_t mode = 0644;> > int> fd = open(pathname, flags, mode);> > // in function call open(), we passed the parameters pathanme,flags,mode to the kernal directly> > if> (fd == -1) {> > perror> (> 'Error opening file'> );> > return> 1;> > }> > // File operations here...> > close(fd);> > return> 0;> }> |
>
>
2.Adresa bloku sa odovzdá ako parametre
- Môže sa použiť, keď je počet parametrov väčší ako počet registrov.
- Parametre sú uložené v blokoch alebo tabuľke.
- Adresa bloku je odovzdaná do registra ako parameter.
- Najčastejšie sa používa v Linuxe a Solarise.
- Tu je kód programu C:
C
//Address of the block is passed as parameters> #include> #include> int> main() {> > const> char> *pathname => 'example.txt'> ;> > int> flags = O_RDONLY;> > mode_t mode = 0644;> > int> params[3];> > // Block of data(parameters) in array> > params[0] = (> int> )pathname;> > params[1] = flags;> > params[2] = mode;> > int> fd = syscall(SYS_open, params);> > // system call> > if> (fd == -1) {> > perror> (> 'Error opening file'> );> > return> 1;> > }> > // File operations here...> > close(fd);> > return> 0;> }> |
>
>
3.Parametre sa tlačia do zásobníka
- Pri tejto metóde môžu byť parametre vložené pomocou programu a vysunuté pomocou operačného systému
- Takže Kernal môže ľahko pristupovať k údajom získavaním informácií z vrchu zásobníka.
- Tu je kód programu C
C
css zmena veľkosti obrázka
//parameters are pushed into the stack> #include> #include> #include> int> main() {> > const> char> *pathname => 'example.txt'> ;> > int> flags = O_RDONLY;> > mode_t mode = 0644;> > int> fd;> > asm> volatile> (> > 'mov %1, %%rdi
'> > 'mov %2, %%rsi
'> > 'mov %3, %%rdx
'> > 'mov , %%rax
'> > 'syscall'> > :> '=a'> (fd)> > :> 'r'> (pathname),> 'r'> (flags),> 'r'> (mode)> > :> '%rdi'> ,> '%rsi'> ,> '%rdx'> > );> > if> (fd == -1) {> > perror> (> 'Error opening file'> );> > return> 1;> > }> > // File operations here...> > close(fd);> > return> 0;> }> |
>
>
Často kladené otázky
Otázka 1: Ako funguje systémové volanie?
odpoveď:
Keď program vykoná systémové volanie, prejde z užívateľského režimu do režimu jadra, čo je vyšší privilegovaný režim. Prechod sa zvyčajne iniciuje vyvolaním špecifickej funkcie alebo prerušením inštrukcie poskytnutej programovacím jazykom alebo operačným systémom.
V režime jadra je systémové volanie spracované operačným systémom. Jadro vykoná požadovanú operáciu v mene programu a vráti výsledok. Potom sa riadenie vráti programu na užívateľskej úrovni, ktorý pokračuje vo svojom vykonávaní.
Otázka 2: Prečo sú potrebné systémové volania?
odpoveď:
Systémové volania sú potrebné z niekoľkých dôvodov:
Prístup k privilegovaným operáciám: Mnohé operácie, ako napríklad správa hardvérových zariadení alebo úprava systémových konfigurácií, si vyžadujú vyššie privilégiá, ktoré sú dostupné len prostredníctvom systémových volaní.
Riadenie zdrojov: Systémové volania poskytujú štandardizované rozhranie na prideľovanie a správu systémových prostriedkov, ako je pamäť, súbory a zariadenia, čím sa zabezpečuje spravodlivý a kontrolovaný prístup rôznych procesov.
Abstrakcia: Systémové volania abstrahujú základné zložitosti operačného systému, čo umožňuje vývojárom aplikácií interagovať so systémom na vyššej úrovni a nezávisle od platformy.
Bezpečnosť a ochrana: Systémové volania presadzujú politiku riadenia prístupu a zabezpečenia, zabraňujú neoprávnenému prístupu k citlivým zdrojom a chránia integritu systému.