Et systemkald er en måde, hvorpå et brugerprogram kan interagere med operativsystemet. Programmet anmoder om flere tjenester, og operativsystemet reagerer ved at påkalde en række systemkald for at imødekomme anmodningen. Et systemkald kan skrives i assemblersprog eller et højt niveau sprog som C eller Pascal . Systemkald er foruddefinerede funktioner, som operativsystemet kan aktivere direkte, hvis der bruges et sprog på højt niveau.
I denne artikel vil du lære om systemopkaldene i operativsystemet og diskutere deres typer og mange andre ting.
Hvad er et systemopkald?
Et systemkald er en metode for et computerprogram til at anmode om en tjeneste fra kernen af det operativsystem, det kører på. Et systemkald er en metode til at interagere med operativsystemet via programmer. Et systemkald er en anmodning fra computersoftware til et operativsystems kerne.
Det Application Program Interface (API) forbinder styresystemets funktioner til brugerprogrammer. Det fungerer som et bindeled mellem operativsystemet og en proces, hvilket gør det muligt for programmer på brugerniveau at anmode om operativsystemtjenester. Kernesystemet kan kun tilgås ved hjælp af systemkald. Systemkald er påkrævet for alle programmer, der bruger ressourcer.
Hvordan foretages systemopkald?
Når en computersoftware skal have adgang til operativsystemets kerne, foretager den et systemkald. Systemkaldet bruger en API til at eksponere operativsystemets tjenester for brugerprogrammer. Det er den eneste metode til at få adgang til kernesystemet. Alle programmer eller processer, der kræver ressourcer til udførelse, skal bruge systemkald, da de fungerer som en grænseflade mellem operativsystemet og brugerprogrammer.
Nedenfor er nogle eksempler på, hvordan et systemkald varierer fra en brugerfunktion.
string.substring java
- En systemopkaldsfunktion kan oprette og bruge kerneprocesser til at udføre den asynkrone behandling.
- Et systemopkald har større autoritet end en standardunderrutine. Et systemkald med kernetilstandsrettigheder udføres i kernebeskyttelsesdomænet.
- Systemkald er ikke tilladt at bruge delte biblioteker eller symboler, der ikke er til stede i kernebeskyttelsesdomænet.
- Koden og dataene for systemopkald gemmes i den globale kernehukommelse.
Hvorfor har du brug for systemopkald i operativsystemet?
Der er forskellige situationer, hvor du skal kræve systemkald i operativsystemet. Følgende af situationerne er som følger:
- Det er et must, når et filsystem ønsker at oprette eller slette en fil.
- Netværksforbindelser kræver, at systemet kalder til afsendelse og modtagelse af datapakker.
- Hvis du vil læse eller skrive en fil, skal du foretage systemopkald.
- Hvis du vil have adgang til hardwareenheder, inklusive en printer, scanner, skal du have et systemopkald.
- Systemkald bruges til at oprette og administrere nye processer.
Sådan fungerer systemopkald
Applikationerne kører i et hukommelsesområde kendt som brugerrum. Et systemkald forbinder til operativsystemets kerne, som udføres i kernerummet. Når et program opretter et systemkald, skal det først indhente tilladelse fra kernen. Den opnår dette ved hjælp af en afbrydelsesanmodning, som sætter den aktuelle proces på pause og overfører kontrol til kernen.
Hvis anmodningen er tilladt, udfører kernen den anmodede handling, som at oprette eller slette en fil. Som input modtager applikationen kernens output. Ansøgningen genoptager proceduren, efter at input er modtaget. Når operationen er færdig, returnerer kernen resultaterne til applikationen og flytter derefter data fra kerneplads til brugerplads i hukommelsen.
Et simpelt systemkald kan tage få nanosekunder at give resultatet, som f.eks. at hente systemets dato og klokkeslæt. Et mere kompliceret systemopkald, såsom at oprette forbindelse til en netværksenhed, kan tage et par sekunder. De fleste operativsystemer starter en særskilt kernetråd for hvert systemkald for at undgå flaskehalse. Moderne styresystemer er multi-threaded, hvilket betyder, at de kan håndtere forskellige systemopkald på samme tid.
Typer af systemopkald
Der er almindeligvis fem typer systemopkald. Disse er som følger:
Nu vil du lære om alle de forskellige typer systemopkald én for én.
skifte java-programmering
Proces kontrol
Proceskontrol er det systemkald, der bruges til at styre processerne. Nogle eksempler på processtyring omfatter oprettelse, indlæsning, afbrydelse, afslutning, eksekvering, behandling, afslutning af processen osv.
Filhåndtering
Filhåndtering er et systemkald, der bruges til at håndtere filerne. Nogle filhåndteringseksempler inkluderer oprettelse af filer, sletning af filer, åbne, lukke, læse, skrive osv.
Enhedshåndtering
Enhedshåndtering er et systemkald, der bruges til at håndtere enheder. Nogle eksempler på enhedsadministration omfatter læsning, enhed, skrivning, hent enhedsattributter, frigiv enhed osv.
Informationsvedligeholdelse
Informationsvedligeholdelse er et systemopkald, der bruges til at vedligeholde information. Der er nogle eksempler på informationsvedligeholdelse, herunder at få systemdata, indstille tid eller dato, få tid eller dato, indstille systemdata osv.
Meddelelse
Kommunikation er et systemkald, der bruges til kommunikation. Der er nogle eksempler på kommunikation, herunder oprette, slette kommunikationsforbindelser, sende, modtage beskeder osv.
Eksempler på Windows- og Unix-systemkald
Der er forskellige eksempler på Windows- og Unix-systemkald. Disse er som angivet nedenfor i tabellen:
Behandle | Windows | Unix |
---|---|---|
Proces kontrol | CreateProcess() ExitProcess() WaitForSingleObject() | Gaffel() Afslut() Vente() |
Fil manipulation | CreateFile() ReadFile() WriteFile() Luk Håndtag() | Åben() Læs() Skrive() Tæt() |
Enhedshåndtering | SetConsoleMode() ReadConsole() WriteConsole() | Ioctl() Læs() Skrive() |
Informationsvedligeholdelse | GetCurrentProcessID() SetTimer() Søvn() | Getpid() Alarm() Søvn() |
Meddelelse | CreatePipe() CreateFileMapping() MapViewOfFile() | Rør() Shmget() Mmap() |
Beskyttelse | SetFileSecurity() InitializeSecurityDescriptor() SetSecurityDescriptorgroup() | Chmod() umask() Chown() |
Her vil du kort lære om nogle metoder:
panda smelter
åben()
Det åben() systemopkald giver dig adgang til en fil på et filsystem. Det allokerer ressourcer til filen og giver et håndtag, som processen kan referere til. Mange processer kan åbne en fil på én gang eller kun ved en enkelt proces. Det hele er baseret på filsystemet og strukturen.
Læs()
Det bruges til at hente data fra en fil på filsystemet. Den accepterer generelt tre argumenter:
- En filbeskrivelse.
- En buffer til at gemme læste data.
- Antallet af bytes, der skal læses fra filen.
Filbeskrivelsen for den fil, der skal læses, kunne bruges til at identificere den og åbne den ved hjælp af åben() før læsning.
vente()
I nogle systemer skal en proces muligvis vente på, at en anden proces fuldfører sin udførelse, før den fortsætter. Når en overordnet proces laver en underordnet proces, suspenderes den overordnede proces, indtil den underordnede proces er afsluttet. Det vente() systemkald bruges til at suspendere den overordnede proces. Når den underordnede proces har afsluttet sin udførelse, returneres kontrollen til den overordnede proces.
skrive()
Det bruges til at skrive data fra en brugerbuffer til en enhed som en fil. Dette systemkald er en måde for et program at generere data på. Det kræver tre argumenter generelt:
- En filbeskrivelse.
- En pegepind til bufferen, hvori data gemmes.
- Antallet af bytes, der skal skrives fra bufferen.
gaffel()
Processer genererer kloner af sig selv ved hjælp af gaffel() systemopkald. Det er en af de mest almindelige måder at skabe processer på i operativsystemer. Når en overordnet proces afføder en underordnet proces, afbrydes udførelsen af den overordnede proces, indtil den underordnede proces er fuldført. Når den underordnede proces har afsluttet sin udførelse, returneres kontrollen til den overordnede proces.
formater dato til streng
tæt()
Det bruges til at afslutte filsystemadgang. Når dette systemkald påkaldes, betyder det, at programmet ikke længere kræver filen, og bufferne tømmes, filoplysningerne ændres, og filressourcerne de-allokeres som et resultat.
exec()
Når en eksekverbar fil erstatter en tidligere eksekverbar fil i en allerede kørende proces, aktiveres denne systemfunktion. Da en ny proces ikke bygges, forbliver den gamle procesidentifikation, men den nye proces erstatter data, stak, data, hoved osv.
Afslut()
Det Afslut() er et systemkald, der bruges til at afslutte programkørsel. Dette kald indikerer, at trådudførelsen er fuldført, hvilket især er nyttigt i multi-threaded miljøer. Operativsystemet genvinder ressourcer brugt af processen efter brugen af Afslut() system funktion.