logo

Predstavitev sistemskega klica

V računalništvu, a sistemski klic je programski način, pri katerem računalniški program zahteva storitev od jedra operacijskega sistema, v katerem se izvaja. Sistemski klic je način za programe interakcijo z operacijskim sistemom . Računalniški program opravi sistemski klic, ko pošlje zahtevo jedru operacijskega sistema. Sistemski klic prispeva storitve operacijskega sistema uporabniškim programom prek aplikacijskega programskega vmesnika (API). Zagotavlja vmesnik med procesom in operacijskim sistemom, ki omogoča procesom na ravni uporabnika, da zahtevajo storitve operacijskega sistema. Sistemski klici so edine vstopne točke v jedro sistem. Vsi programi, ki potrebujejo vire, morajo uporabljati sistemske klice.

Uporabniški program lahko komunicira z operacijskim sistemom s sistemskim klicem. Program zahteva številne storitve, operacijski sistem pa se odzove z zagonom številnih sistemskih klicev, da izpolni zahtevo. Sistemski klic je mogoče napisati v jezikih na visoki ravni, kot sta C ali Pascal, ali v zbirnem jeziku. Če je uporabljen jezik na visoki ravni, lahko operacijski sistem neposredno prikliče sistemske klice, ki so vnaprej določene funkcije.



Sistemski klic je mehanizem, s katerim programi zahtevajo storitve od operacijski sistem (OS). Preprosteje rečeno, to je način interakcije programa z osnovnim sistemom, kot je dostop do virov strojne opreme ali izvajanje privilegiranih operacij.

Sistemski klic sproži program, ki izvede določeno navodilo, ki sproži preklop na jedro načinu, ki omogoča programu, da zahteva storitev od OS. OS nato obravnava zahtevo, izvede potrebne operacije in vrne rezultat nazaj v program.

Sistemski klici so bistveni za pravilno delovanje operacijskega sistema, saj zagotavljajo standardiziran način za dostop programov do sistemskih virov. Brez sistemskih klicev bi moral vsak program izvajati svoje lastne metode za dostop do strojne opreme in sistemskih storitev, kar bi vodilo v nedosledno in k napakam nagnjeno vedenje.



Storitve, ki jih zagotavljajo sistemski klici

  • Ustvarjanje in upravljanje procesov
  • Upravljanje glavnega pomnilnika
  • Dostop do datotek, imenik in upravljanje datotečnega sistema
  • Ravnanje z napravami (I/O)
  • Zaščita
  • Mreženje itd.
    • Nadzor procesa: končati, prekiniti, ustvariti, prekiniti, dodeliti in sprostiti pomnilnik.
    • Upravljanje datotek: ustvarjanje, odpiranje, zapiranje, brisanje, branje datotek itd.
    • Upravljanje naprave
    • Vzdrževanje informacij
    • Komunikacija

Funkcije sistemskih klicev

  • Vmesnik: Sistemski klici zagotavljajo dobro definiran vmesnik med uporabniškimi programi in operacijskim sistemom. Programi postavljajo zahteve tako, da kličejo določene funkcije, operacijski sistem pa se odzove tako, da izvede zahtevano storitev in vrne rezultat.
  • Zaščita: Sistemski klici se uporabljajo za dostop do privilegiranih operacij, ki običajnim uporabniškim programom niso na voljo. Operacijski sistem uporablja ta privilegij za zaščito sistema pred zlonamernim ali nepooblaščenim dostopom.
  • Način jedra: Ko se izvede sistemski klic, se program začasno preklopi iz uporabniškega načina v način jedra. V načinu jedra ima program dostop do vseh sistemskih virov, vključno s strojno opremo, pomnilnikom in drugimi procesi.
  • Preklop konteksta: Sistemski klic zahteva preklop konteksta, ki vključuje shranjevanje stanja trenutnega procesa in preklop v način jedra za izvedbo zahtevane storitve. To lahko povzroči dodatne stroške, ki lahko vplivajo na delovanje sistema.
  • Obravnava napak: Sistemski klici lahko vrnejo kode napak, ki kažejo na težave z zahtevano storitvijo. Programi morajo preveriti te napake in jih ustrezno obravnavati.
  • Sinhronizacija: Sistemske klice je mogoče uporabiti za sinhronizacijo dostopa do skupnih virov, kot so datoteke ali omrežne povezave. Operacijski sistem ponuja sinhronizacijske mehanizme, kot so ključavnice ali semaforji, ki zagotavljajo, da lahko več programov varno dostopa do teh virov.

Prednosti sistemskih klicev

  • Dostop do virov strojne opreme: Sistemski klici omogočajo programom dostop do virov strojne opreme, kot so diskovni pogoni, tiskalniki in omrežne naprave.
  • Upravljanje pomnilnika: Sistemski klici programom omogočajo dodeljevanje in sprostitev pomnilnika ter dostop do strojne opreme, preslikane v pomnilnik.
  • Upravljanje procesa: Sistemski klici omogočajo programom ustvarjanje in zaključevanje procesov ter upravljanje medprocesne komunikacije.
  • Varnost: Sistemski klici omogočajo programom dostop do privilegiranih virov, kot je možnost spreminjanja sistemskih nastavitev ali izvajanja operacij, ki zahtevajo skrbniška dovoljenja.
  • Standardizacija: Sistemski klici zagotavljajo standardiziran vmesnik za interakcijo programov z operacijskim sistemom, kar zagotavlja doslednost in združljivost med različnimi platformami strojne opreme in različicami operacijskega sistema.

Kako deluje sistemski klic?

Tukaj je podrobna razlaga korak za korakom, kako deluje sistemski klic:

  • Uporabnik potrebuje posebne vire: Včasih morajo programi narediti nekaj posebnih stvari, ki jih ni mogoče storiti brez dovoljenja operacijskega sistema, kot je branje iz datoteke, pisanje v datoteko, pridobivanje kakršnih koli informacij iz strojne opreme ali zahtevanje prostora v pomnilniku.
  • Program naredi zahtevo za sistemski klic: Obstajajo posebna vnaprej določena navodila za zahtevo operacijskemu sistemu. Ta navodila niso nič drugega kot samo sistemski klic. Program uporablja te sistemske klice v svoji kodi, kadar je to potrebno.
  • Operacijski sistem vidi sistemski klic: Ko operacijski sistem vidi sistemski klic, ugotovi, da program trenutno potrebuje pomoč, zato začasno ustavi izvajanje programa in prepusti ves nadzor posebnemu delu sebe, imenovanemu 'jedro'. Zdaj 'Jedro' rešuje potrebo po programu.
  • Operacijski sistem izvaja naslednje operacije: Zdaj operacijski sistem izvede operacijo, ki jo zahteva program. Primer: branje vsebine iz datoteke itd.
  • Operacijski sistem vrne nadzor programu: Po izvedbi posebne operacije OS vrne nadzor programu za nadaljnje izvajanje programa.

Primeri sistemskega klica v sistemih Windows in Unix

Sistemski klici za Windows in Unix so v različnih oblikah. Ti so navedeni v spodnji tabeli, kot sledi:

Proces Windows Unix
Nadzor procesa

CreateProcess()



ExitProcess()

WaitForSingleObject()

Vilice()

Izhod()

Počakaj()

Manipulacija datotek

CreateFile()

ReadFile()

WriteFile()

Odprto()

Preberi ()

Napiši()

Zapri()

Upravljanje naprav

SetConsoleMode()

ReadConsole()

WriteConsole()

Ioctl()

Preberi ()

Napiši()

Vzdrževanje informacij

GetCurrentProcessID()

SetTimer()

spanje ()

Getpid()

Alarm()

spanje ()

Komunikacija

CreatePipe()

CreateFileMapping()

MapViewOfFile()

cev ()

Shmget()

Mmap()

Zaščita

SetFileSecurity()

InitializeSecurityDescriptor()

SetSecurityDescriptorgroup()

Chmod()

razkriti()

Chown ()

odprto(): Dostop do datoteke v datotečnem sistemu je možen s sistemskim klicem open(). Zagotavlja vire datotek, ki jih potrebuje, in ročaj, ki ga lahko uporablja postopek. Datoteko lahko odpre več procesov hkrati ali samo en proces. Vse temelji na strukturi in datotečnem sistemu.

preberi(): Z njim se pridobijo podatki iz datoteke v datotečnem sistemu. Na splošno sprejema tri argumente:

  1. Opis datoteke.
  2. Medpomnilnik za shranjevanje prebranih podatkov.
  3. Koliko bajtov je treba prebrati iz datoteke
    Pred branjem lahko datoteko, ki jo želite prebrati, identificirate z deskriptorjem datoteke in jo odprete s funkcijo open().

počakaj(): V nekaterih sistemih bo morda treba postopek zadržati, dokler drug proces ne konča z izvajanjem, preden nadaljuje. Ko nadrejeni proces ustvari podrejenega procesa, se izvajanje nadrejenega procesa ustavi, dokler ni podrejeni proces dokončan. Nadrejeni proces se ustavi s sistemskim klicem wait(). Nadrejeni proces ponovno prevzame nadzor, ko se podrejeni proces konča z izvajanjem.

napiši(): Podatki iz uporabniškega medpomnilnika se z njegovo uporabo zapišejo v napravo kot datoteka. Program lahko z uporabo tega ustvari podatke na en način sistemski klic . na splošno obstajajo trije argumenti:

  1. Opis datoteke.
  2. Sklic na medpomnilnik, kjer so shranjeni podatki.
  3. Količina podatkov, ki bodo zapisane iz medpomnilnika v bajtih.

vilice(): Sistemski klic fork() uporabljajo procesi za ustvarjanje lastnih kopij. Je ena izmed najpogosteje uporabljenih metod v operacijskih sistemih za ustvarjanje procesov. Ko nadrejeni proces ustvari podrejenega procesa, je izvajanje nadrejenega procesa začasno ustavljeno, dokler se podrejeni proces ne konča. Nadrejeni proces ponovno prevzame nadzor, ko se podrejeni proces konča z izvajanjem.

izhod(): Sistemski klic, imenovan exit(), se uporablja za prekinitev programa. V okoljih z več nitmi ta klic nakazuje, da je izvajanje niti končano. Po uporabi sistemske funkcije exit() operacijski sistem obnovi vire, ki jih uporablja proces.

Metode za posredovanje parametrov OS

Če pride do sistemskega klica, moramo parameter posredovati jedrnemu delu operacijskega sistema.

Poglejte na primer dano odprto() sistemski klic:

C




//function call example> #include> int> open(>const> char> *pathname,>int> flags, mode_t mode);>

>

>

Tukaj ime poti , zastave in način_t so parametri.

Torej je treba opozoriti, da:

  • Parametrov ne moremo posredovati neposredno kot pri običajnem klicu funkcije.
  • V načinu Kernal obstaja drugačen način za izvedbo klica funkcije.

Zato ga ne moremo zagnati v običajnem naslovnem prostoru, ki ga je že ustvaril proces, in zato parametrov ne moremo postaviti na vrh sklada, ker ni na voljo jedru operacijskega sistema za obdelavo. zato moramo sprejeti vse druge metode za posredovanje parametrov v jedro OS.

To lahko storimo skozi,

  1. Posredovanje parametrov v registrih
  2. Naslov bloka se posreduje kot parameter v registru.
  3. Parametri so potisnjeni v sklad.

O vsaki točki se podrobneje pogovorimo:

1. Posredovanje parametrov v registrih.

  • To je najpreprostejša metoda med tremi
  • Tukaj neposredno posredujemo parametre v registre.
  • Vendar bo omejeno, ko je število parametrov večje od števila registrov.
  • Tukaj je programska koda 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. Naslov bloka se posreduje kot parameter

  • Lahko se uporabi, ko je število parametrov večje od števila registrov.
  • Parametri so shranjeni v blokih ali tabeli.
  • Naslov bloka se posreduje registru kot parameter.
  • Najpogosteje se uporablja v sistemih Linux in Solaris.
  • Tukaj je programska koda 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;> }>

>

program v java

>

3. Parametri so potisnjeni v sklad

  • Pri tej metodi je mogoče parametre vnesti s programom in jih odpreti z operacijskim sistemom
  • Tako lahko Kernal zlahka dostopa do podatkov s pridobivanjem informacij z vrha sklada.
  • Tukaj je programska koda C

C




//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;> }>

>

>

Pogosto zastavljeno vprašanje

V.1: Kako deluje sistemski klic?

odgovor:

Ko program izvede sistemski klic, preide iz uporabniškega načina v način jedra, ki je način z višjimi privilegiji. Prehod se običajno sproži s klicem določene funkcije ali prekinitvijo navodil, ki jih zagotavlja programski jezik ali operacijski sistem.

Ko je v načinu jedra, sistemski klic obravnava operacijski sistem. Jedro izvede zahtevano operacijo v imenu programa in vrne rezultat. Nato se nadzor vrne programu na ravni uporabnika, ki nadaljuje z izvajanjem.

V.2: Zakaj so potrebni sistemski klici?

odgovor:

Sistemski klici so potrebni iz več razlogov:

Dostop do privilegiranih operacij: Številne operacije, kot je upravljanje naprav strojne opreme ali spreminjanje sistemskih konfiguracij, zahtevajo višje privilegije, ki so dostopni samo prek sistemskih klicev.

Upravljanje virov: Sistemski klici zagotavljajo standardiziran vmesnik za dodeljevanje in upravljanje sistemskih virov, kot so pomnilnik, datoteke in naprave, kar zagotavlja pravičen in nadzorovan dostop različnih procesov.

Abstrakcija: Sistemski klici abstrahirajo osnovno zapletenost operacijskega sistema, kar razvijalcem aplikacij omogoča interakcijo s sistemom na višji ravni, od platforme neodvisen način.

Varnost in zaščita: Sistemski klici uveljavljajo nadzor dostopa in varnostne politike, preprečujejo nepooblaščen dostop do občutljivih virov in ščitijo celovitost sistema.