Što je sistemski poziv u Linuxu i kako funkcionira s primjerima

What Is System Call Linux

Sistemski poziv funkcija je koja omogućuje procesu da komunicira s jezgrom Linuxa. To je samo programski način da računalni program naruči objekt iz jezgre operacijskog sustava. Sistemski pozivi izlažu resurse operacijskog sustava korisničkim programima putem API -ja (Application Programming Interface). Sistemski pozivi mogu pristupiti samo jezgri. Sistemski pozivi potrebni su za sve usluge kojima su potrebni resursi.

Linux kernel vlasnički je softver koji se učitava i radi na uređaju u najmanjoj mogućoj fazi. Njegov je posao organizirati sve što se događa na stroju, od tipkovnice, pogona diska i mrežnih događaja do pružanja vremenskih odsječaka za istodobno izvršavanje različitih programa. Odvajanje softvera i hardvera stvara siguran mjehurić koji poboljšava zaštitu i pouzdanost. Neprivilegirane aplikacije ne mogu doseći pohranu drugih programa, a ako jedna ne uspije, kernel obustavlja proces tako da ne ošteti cijeli sustav.



Tanki omot za pločice:

Sistemski pozivi Linuxa u nekim se programima ne prenose eksplicitno jezgri. Gotovo svi programi koriste osnovnu C knjižnicu i nude lagani, ali bitni omot nad pozivima sustava Linux. Spremište tada pruža popratni poziv stroja za Linux nakon što osigura da se parametri značajki prevedu u desne registre procesora. Kad god omotnica primi podatke iz sistemskog poziva, analizira ih i jasno doprinosi programu. Bilo koja strojno-interaktivna operacija u programu na kraju se pretvara u sistemski poziv. Dakle, pogledajmo neke od njih. Dug je popis Linux sustavskih poziva koje možemo koristiti u svom Linux sustavu. Ovdje je popis nekih uobičajenih i najčešće korištenih Linux sustavskih poziva.



  • Otvorena
  • Zatvoriti
  • Izv
  • Pisati
  • Čitati
  • Lseek
  • Odaberi

Razgovarajmo o nekim od Linuxovih sistemskih poziva koji koriste jezik C u našem članku kako bismo se upoznali s tim.



Poziv otvorenog sustava:

Možemo upotrijebiti sistemski poziv Open u našoj distribuciji Linuxa za brzo otvaranje dokumenta koji ćemo navesti u kodu jezika C. Prvo pokrenite komandni terminal. Možete koristiti prečac Ctrl+Alt+T. Pretpostavimo da u početnom direktoriju imate tekstualnu datoteku test.txt, a ona u sebi sadrži određeni sadržaj. Dakle, na početku morate stvoriti novi naziv datoteke C tipa new.c u terminalu putem nano uređivača. Stoga isprobajte jednostavne nano upute u nastavku.

$nanonovo.c

Sada je pokrenut uređivač Nano. Upišite dolje prikazani kôd. U kodu imamo dva deskriptora datoteka. Obje se datoteke mogu otvoriti pomoću otvorenog sistemskog poziva. Prvi deskriptor sadrži poziv za čitanje, a drugi sadrži funkciju pisanja. Prvi otvoreni poziv je otvaranje tekstualne datoteke test.txt i spremanje njezinog sadržaja u deskriptor datoteke fd. Drugi otvoreni sistemski poziv je stvaranje datoteke s imenom target. Cilj dokumenta vraćen je u deskriptor datoteke fd1. Uputa za pisanje koristi se za prepisivanje bajtova podataka u međuspremniku. Dodirnite Ctrl+S za spremanje koda i pritisnite tipku prečaca Ctrl+X za napuštanje datoteke.



Pokrenite naredbu gcc compile za sastavljanje ovog C koda.

$gccnovo.c

Izvršimo kôd pomoću jednostavnog a.out upita u ljusci na sljedeći način:

$./a.out

Izlazni podaci su preneseni na cilj datoteke. Provjerimo ciljnu datoteku pomoću upita cat. Izlazni zaslon prikazuje podatke od 20 znakova u ciljnoj datoteci.

$mačkacilj

Exec sistemski poziv:

Sistemski poziv exec odbacuje se radi pokretanja datoteke koja se trenutno obrađuje. Bivša izvršna datoteka se zamjenjuje, a trenutna datoteka radi kad god se pozove exec. Korištenjem exec sistemskog poziva možemo pretpostaviti da će to prebrisati stari dokument ili aplikaciju u petlji sa svježim. Novi softver koristi se za poništavanje materijala cijelog procesa. Dokument čiji je naslov naveden u izrazu kad god se pozove exec () zamjenjuje se s odjeljkom informacija o korisniku koji pokreće exec () sistemski poziv (). Otvorite naredbeni terminal i pomoću nano uređivača izradite novu datoteku tipa C na sljedeći način:

$nanoexp.c

Urednik je sada otvoren. Napišite cijeli kôd jezika C ispod. U nju su uključene tri glavne knjižnice. Nakon toga je glavna funkcija instalirana. Iskaz ispisa prikazuje podatke o nizu i ID procesa datoteke exp.c. U tu je svrhu korištena funkcija getpid (). Zatim imamo niz znakovnih vrsta s nekim vrijednostima u njemu. Sistemski poziv exec korišten je za uzimanje naziva datoteke i jednorednog iznad niza kao argumenta. Sada će se datoteka hello.c obraditi. Nakon toga dolazi još jedna izjava za ispis, ali ona se nikada neće izvršiti. Pritisnite Ctrl+S da biste spremili ovu datoteku. Pritisnite Ctrl+X za izlaz.

Sada je vrijeme za stvaranje nove c datoteke, hello.c pomoću nano uređivača. Za to upotrijebite donji upit u ljusci.

$nanopozdrav.c

Upišite donji kod u njega. Ovaj kôd sadrži dvije ispisne izjave u glavnoj funkciji. Prvi samo ispisuje niz koji je u njemu dat, a drugi ispisuje niz dok dohvaća ID procesa trenutno korištene datoteke, a to je hello.c.

Sastavimo obje datoteke jednu za drugom pomoću gcc -a.

$gcc–O exp exp.c

$gcc–O zdravo zdravo.c

Kad izvršimo datoteku exp.c, ona će ispisati prvi ispis ispisa iz datoteke exp.c, a obje linije ispisa iz datoteke hello.c.

$./eksp

Zaključak:

Razradili smo cijeli koncept Linux sustavskih poziva i kako se oni mogu koristiti u vašem Linux sustavu. Prilikom implementacije ovog koncepta koristili smo Ubuntu 20.04.