Et systemanrop er en måte for et brukerprogram å kommunisere med operativsystemet. Programmet ber om flere tjenester, og operativsystemet svarer ved å påkalle en rekke systemanrop for å tilfredsstille forespørselen. Et systemanrop kan skrives i assembly-språk eller et høynivåspråk som C eller Pascal . Systemanrop er forhåndsdefinerte funksjoner som operativsystemet kan aktivere direkte hvis et språk på høyt nivå brukes.
I denne artikkelen vil du lære om systemanropene i operativsystemet og diskutere typene deres og mange andre ting.
Hva er et systemanrop?
Et systemkall er en metode for et dataprogram for å be om en tjeneste fra kjernen til operativsystemet det kjører på. Et systemanrop er en metode for å samhandle med operativsystemet via programmer. Et systemkall er en forespørsel fra dataprogramvare til et operativsystems kjerne.
De Application Program Interface (API) kobler operativsystemets funksjoner til brukerprogrammer. Den fungerer som en kobling mellom operativsystemet og en prosess, og lar programmer på brukernivå be om operativsystemtjenester. Kjernesystemet kan bare nås ved å bruke systemanrop. Systemanrop kreves for alle programmer som bruker ressurser.
Hvordan foretas systemanrop?
Når en dataprogramvare trenger å få tilgang til operativsystemets kjerne, foretar den et systemanrop. Systemkallet bruker en API for å eksponere operativsystemets tjenester for brukerprogrammer. Det er den eneste metoden for å få tilgang til kjernesystemet. Alle programmer eller prosesser som krever ressurser for utførelse må bruke systemkall, da de fungerer som et grensesnitt mellom operativsystemet og brukerprogrammene.
Nedenfor er noen eksempler på hvordan et systemanrop varierer fra en brukerfunksjon.
string.substring java
- En systemanropsfunksjon kan opprette og bruke kjerneprosesser for å utføre den asynkrone behandlingen.
- Et systemanrop har større autoritet enn en standard subrutine. Et systemanrop med kjernemodusrettigheter kjøres i kjernebeskyttelsesdomenet.
- Systemanrop har ikke tillatelse til å bruke delte biblioteker eller symboler som ikke finnes i kjernebeskyttelsesdomenet.
- Koden og dataene for systemanrop lagres i globalt kjerneminne.
Hvorfor trenger du systemanrop i operativsystemet?
Det er ulike situasjoner der du må kreve systemanrop i operativsystemet. Følgende av situasjonene er som følger:
- Det er nødvendig når et filsystem ønsker å opprette eller slette en fil.
- Nettverkstilkoblinger krever systemanrop til å sende og motta datapakker.
- Hvis du vil lese eller skrive en fil, må du gjøre systemanrop.
- Hvis du vil ha tilgang til maskinvareenheter, inkludert en skriver, skanner, trenger du et systemanrop.
- Systemanrop brukes til å opprette og administrere nye prosesser.
Hvordan systemanrop fungerer
Applikasjonene kjører i et minneområde kjent som brukerplass. Et systemanrop kobles til operativsystemets kjerne, som kjøres i kjerneplass. Når en applikasjon oppretter et systemkall, må den først få tillatelse fra kjernen. Den oppnår dette ved å bruke en avbruddsforespørsel, som setter den gjeldende prosessen på pause og overfører kontrollen til kjernen.
Hvis forespørselen er tillatt, utfører kjernen den forespurte handlingen, som å opprette eller slette en fil. Som input mottar applikasjonen kjernens utdata. Søknaden gjenopptar prosedyren etter at innspill er mottatt. Når operasjonen er fullført, returnerer kjernen resultatene til applikasjonen og flytter deretter data fra kjerneplass til brukerplass i minnet.
Et enkelt systemanrop kan ta noen nanosekunder å gi resultatet, for eksempel å hente systemets dato og klokkeslett. Et mer komplisert systemanrop, for eksempel å koble til en nettverksenhet, kan ta noen sekunder. De fleste operativsystemer starter en egen kjernetråd for hvert systemkall for å unngå flaskehalser. Moderne operativsystemer er flertrådede, noe som betyr at de kan håndtere ulike systemanrop samtidig.
Typer systemanrop
Det er vanligvis fem typer systemanrop. Disse er som følger:
Nå vil du lære om alle de forskjellige typene systemanrop én etter én.
bytte java-programmering
Prosesskontroll
Prosesskontroll er systemkallet som brukes til å styre prosessene. Noen prosesskontrolleksempler inkluderer å opprette, laste inn, avbryte, avslutte, utføre, behandle, avslutte prosessen, etc.
Filbehandling
Filbehandling er et systemanrop som brukes til å håndtere filene. Noen eksempler på filbehandling inkluderer å lage filer, slette filer, åpne, lukke, lese, skrive osv.
Enhetsadministrasjon
Enhetsadministrasjon er et systemanrop som brukes til å håndtere enheter. Noen eksempler på enhetsadministrasjon inkluderer les, enhet, skriv, hent enhetsattributter, frigjør enhet osv.
Informasjonsvedlikehold
Informasjonsvedlikehold er et systemanrop som brukes til å vedlikeholde informasjon. Det er noen eksempler på informasjonsvedlikehold, inkludert å få systemdata, angi klokkeslett eller dato, få tid eller dato, angi systemdata, etc.
Kommunikasjon
Kommunikasjon er et systemanrop som brukes til kommunikasjon. Det er noen eksempler på kommunikasjon, inkludert opprette, slette kommunikasjonsforbindelser, sende, motta meldinger osv.
Eksempler på Windows- og Unix-systemanrop
Det er forskjellige eksempler på Windows- og Unix-systemanrop. Disse er som oppført nedenfor i tabellen:
Prosess | Windows | Unix |
---|---|---|
Prosesskontroll | CreateProcess() ExitProcess() WaitForSingleObject() | Gaffel() Exit() Vente() |
Filmanipulering | CreateFile() ReadFile() WriteFile() Lukk Håndtak() | Åpen() Lese() Skrive() Lukk() |
Enhetsadministrasjon | SetConsoleMode() ReadConsole() WriteConsole() | Ioctl() Lese() Skrive() |
Informasjonsvedlikehold | GetCurrentProcessID() SetTimer() Sove() | Blir () Alarm() Sove() |
Kommunikasjon | CreatePipe() CreateFileMapping() MapViewOfFile() | Rør() Shmget() Mmap() |
Beskyttelse | SetFileSecurity() InitializeSecurityDescriptor() SetSecurityDescriptorgroup() | Chmod() umask() Chown() |
Her vil du kort lære om noen metoder:
panda smelter
åpen()
De åpen() systemanrop lar deg få tilgang til en fil på et filsystem. Den tildeler ressurser til filen og gir et håndtak som prosessen kan referere til. Mange prosesser kan åpne en fil på en gang eller kun ved en enkelt prosess. Alt er basert på filsystemet og strukturen.
lese()
Den brukes til å hente data fra en fil på filsystemet. Den aksepterer tre argumenter generelt:
- En filbeskrivelse.
- En buffer for å lagre lesedata.
- Antall byte som skal leses fra filen.
Filbeskrivelsen til filen som skal leses kan brukes til å identifisere den og åpne den ved hjelp av åpen() før du leser.
vente()
I noen systemer kan det hende at en prosess må vente på at en annen prosess fullfører sin kjøring før den fortsetter. Når en overordnet prosess lager en underordnet prosess, blir kjøringen av den overordnede prosessen suspendert til den underordnede prosessen er fullført. De vente() systemanrop brukes til å suspendere den overordnede prosessen. Når den underordnede prosessen har fullført utførelsen, returneres kontrollen til den overordnede prosessen.
skrive()
Den brukes til å skrive data fra en brukerbuffer til en enhet som en fil. Dette systemkallet er en måte for et program å generere data. Det krever tre argumenter generelt:
- En filbeskrivelse.
- En peker til bufferen der data lagres.
- Antall byte som skal skrives fra bufferen.
gaffel()
Prosesser genererer kloner av seg selv ved hjelp av gaffel() systemanrop. Det er en av de vanligste måtene å lage prosesser i operativsystemer på. Når en overordnet prosess skaper en underordnet prosess, blir kjøringen av den overordnede prosessen avbrutt inntil den underordnede prosessen er fullført. Når den underordnede prosessen har fullført utførelsen, returneres kontrollen til den overordnede prosessen.
sql ddl-kommandoer
Lukk()
Den brukes til å avslutte filsystemtilgang. Når dette systemkallet påkalles, betyr det at programmet ikke lenger krever filen, og bufferne tømmes, filinformasjonen endres, og filressursene blir deallokert som et resultat.
exec()
Når en kjørbar fil erstatter en tidligere kjørbar fil i en allerede kjørende prosess, påkalles denne systemfunksjonen. Ettersom en ny prosess ikke bygges, forblir den gamle prosessidentifikasjonen, men den nye prosessen erstatter data, stack, data, hode osv.
exit()
De exit() er et systemkall som brukes til å avslutte programkjøringen. Dette kallet indikerer at trådkjøringen er fullført, noe som er spesielt nyttig i flertrådede miljøer. Operativsystemet tar tilbake ressurser brukt av prosessen etter bruk av exit() systemfunksjon.