logo

Introduksjon av System Call

I databehandling, a systemanrop er en programmatisk måte et dataprogram ber om en tjeneste fra kjernen til operativsystemet det kjøres på. Et systemanrop er en måte for programmer å gjøre det på samhandle med operativsystemet . Et dataprogram foretar et systemanrop når det sender en forespørsel til operativsystemets kjerne. Systemanrop gir tjenestene til operativsystemet til brukerprogrammene via Application Program Interface (API). Det gir et grensesnitt mellom en prosess og et operativsystem for å tillate prosesser på brukernivå å be om tjenester fra operativsystemet. Systemanrop er de eneste inngangspunktene til kjerne system. Alle programmer som trenger ressurser må bruke systemanrop.

Et brukerprogram kan samhandle med operativsystemet ved hjelp av et systemanrop. En rekke tjenester etterspørres av programmet, og operativsystemet svarer ved å starte en rekke systemanrop for å oppfylle forespørselen. Et systemanrop kan skrives på høynivåspråk som C eller Pascal eller på assemblerspråk. Hvis et språk på høyt nivå brukes, kan operativsystemet direkte starte systemanrop, som er forhåndsdefinerte funksjoner.



pyspark veiledning

Et systemanrop er en mekanisme som brukes av programmer for å be om tjenester fra operativsystem (OS). I enklere termer er det en måte for et program å samhandle med det underliggende systemet, for eksempel å få tilgang til maskinvareressurser eller utføre privilegerte operasjoner.

Et systemanrop initieres ved at programmet utfører en spesifikk instruksjon, som utløser en svitsj til kjerne modus, slik at programmet kan be om en tjeneste fra operativsystemet. OS håndterer deretter forespørselen, utfører de nødvendige operasjonene og returnerer resultatet tilbake til programmet.

Systemanrop er avgjørende for at et operativsystem skal fungere riktig, siden de gir en standardisert måte for programmer å få tilgang til systemressurser. Uten systemanrop vil hvert program måtte implementere sine egne metoder for å få tilgang til maskinvare og systemtjenester, noe som fører til inkonsekvent og feilutsatt oppførsel.



Tjenester levert av systemanrop

  • Prosessoppretting og ledelse
  • Hovedminnehåndtering
  • Filtilgang, katalog og filsystemadministrasjon
  • Enhetshåndtering (I/O)
  • Beskyttelse
  • Nettverk osv.
    • Prosesskontroll: avslutte, avbryte, opprette, avslutte, allokere og frigjøre minne.
    • Filbehandling: opprette, åpne, lukke, slette, lese filer, osv.
    • Enhetsadministrasjon
    • Informasjonsvedlikehold
    • Kommunikasjon

Funksjoner ved systemanrop

  • Grensesnitt: Systemanrop gir et veldefinert grensesnitt mellom brukerprogrammer og operativsystemet. Programmer gjør forespørsler ved å kalle opp spesifikke funksjoner, og operativsystemet svarer ved å utføre den forespurte tjenesten og returnere et resultat.
  • Beskyttelse: Systemanrop brukes til å få tilgang til privilegerte operasjoner som ikke er tilgjengelige for vanlige brukerprogrammer. Operativsystemet bruker dette privilegiet for å beskytte systemet mot ondsinnet eller uautorisert tilgang.
  • Kjernemodus: Når et systemanrop foretas, byttes programmet midlertidig fra brukermodus til kjernemodus. I kjernemodus har programmet tilgang til alle systemressurser, inkludert maskinvare, minne og andre prosesser.
  • Kontekstbytte: Et systemanrop krever en kontekstsvitsj, som innebærer å lagre tilstanden til den gjeldende prosessen og bytte til kjernemodus for å utføre den forespurte tjenesten. Dette kan introdusere overhead, noe som kan påvirke systemytelsen.
  • Feilhåndtering: Systemanrop kan returnere feilkoder for å indikere problemer med den forespurte tjenesten. Programmer må se etter disse feilene og håndtere dem på riktig måte.
  • Synkronisering: Systemanrop kan brukes til å synkronisere tilgang til delte ressurser, for eksempel filer eller nettverkstilkoblinger. Operativsystemet gir synkroniseringsmekanismer, for eksempel låser eller semaforer, for å sikre at flere programmer kan trygt få tilgang til disse ressursene.

Fordeler med systemsamtaler

  • Tilgang til maskinvareressurser: Systemanrop lar programmer få tilgang til maskinvareressurser som diskstasjoner, skrivere og nettverksenheter.
  • Minnehåndtering: Systemanrop gir programmer en måte å tildele og deallokere minne, samt få tilgang til minnetilordnede maskinvareenheter.
  • Prosessledelse: Systemanrop lar programmer opprette og avslutte prosesser, samt administrere kommunikasjon mellom prosesser.
  • Sikkerhet: Systemanrop gir programmer en måte å få tilgang til privilegerte ressurser, for eksempel muligheten til å endre systeminnstillinger eller utføre operasjoner som krever administrative tillatelser.
  • Standardisering: Systemanrop gir et standardisert grensesnitt for programmer for å samhandle med operativsystemet, og sikrer konsistens og kompatibilitet på tvers av forskjellige maskinvareplattformer og operativsystemversjoner.

Hvordan fungerer systemanrop?

Her er den detaljerte forklaringen trinn for trinn hvordan systemanrop fungerer:

  • Brukeren trenger spesielle ressurser: Noen ganger må programmer gjøre noen spesielle ting som ikke kan gjøres uten tillatelse fra OS, som å lese fra en fil, skrive til en fil, hente informasjon fra maskinvaren eller be om plass i minnet.
  • Programmet foretar en systemanropsforespørsel: Det er spesielle forhåndsdefinerte instruksjoner for å sende en forespørsel til operativsystemet. Disse instruksjonene er ikke annet enn et systemanrop. Programmet bruker disse systemanropene i koden når det er nødvendig.
  • Operativsystemet ser systemanropet: Når operativsystemet ser systemanropet, gjenkjenner det at programmet trenger hjelp på dette tidspunktet, så det stopper programkjøringen midlertidig og gir all kontroll til en spesiell del av seg selv kalt 'Kernel'. Nå løser 'Kernel' behovet for program.
  • Operativsystemet utfører operasjonene: Nå utfører operativsystemet operasjonen som er forespurt av programmet. Eksempel: lesing av innhold fra en fil osv.
  • Operativsystem gir kontroll tilbake til programmet: Etter å ha utført den spesielle operasjonen, gir OS kontroll tilbake til programmet for videre utførelse av programmet.

Eksempler på et systemanrop i Windows og Unix

Systemanrop for Windows og Unix kommer i mange forskjellige former. Disse er oppført i tabellen nedenfor som følger:

Prosess Windows Unix
Prosesskontroll

CreateProcess()



ExitProcess()

WaitForSingleObject()

Gaffel()

Exit()

Vente()

Filmanipulering

CreateFile()

ReadFile()

WriteFile()

Å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()

sql rekkefølge etter dato

Mmap()

Beskyttelse

SetFileSecurity()

InitializeSecurityDescriptor()

SetSecurityDescriptorgroup()

Chmod()

avmaske()

Chown()

åpen(): Tilgang til en fil på et filsystem er mulig med open() systemkallet. Det gir filressursene den trenger og et håndtak prosessen kan bruke. En fil kan åpnes av flere prosesser samtidig eller bare én prosess. Alt er basert på struktur og filsystem.

lese(): Data fra en fil på filsystemet hentes ved hjelp av den. Generelt godtar den tre argumenter:

char + int i java
  1. En beskrivelse av en fil.
  2. En buffer for lagring av lesedata.
  3. Hvor mange byte skal leses fra filen
    Før lesing kunne filen som skal leses identifiseres av filbeskrivelsen og åpnes ved hjelp av open()-funksjonen.

vente(): I noen systemer kan det hende at en prosess må vente til en annen prosess er ferdig kjørt før den fortsetter. Når en overordnet prosess oppretter en underordnet prosess, stanses utførelsen av den overordnede prosessen inntil den underordnede prosessen er fullført. Den overordnede prosessen stoppes ved å bruke wait()-systemkallet. Den overordnede prosessen gjenvinner kontrollen når den underordnede prosessen er ferdig kjørt.

skrive(): Data fra en brukerbuffer skrives ved hjelp av den til en enhet som en fil. Et program kan produsere data på én måte ved å bruke dette systemanrop . generelt er det tre argumenter:

  1. En beskrivelse av en fil.
  2. En referanse til bufferen der data lagres.
  3. Mengden data som vil bli skrevet fra bufferen i byte.

gaffel(): Fork()-systemkallet brukes av prosesser for å lage kopier av seg selv. Det er en av metodene som brukes oftest i operativsystemer for å lage prosesser. Når en overordnet prosess oppretter en underordnet prosess, blir kjøringen av den overordnede prosessen suspendert til den underordnede prosessen er fullført. Den overordnede prosessen gjenvinner kontrollen når den underordnede prosessen er ferdig kjørt.

exit(): Et systemkall kalt exit() brukes til å avslutte et program. I miljøer med flere tråder indikerer dette kallet at trådkjøringen er fullført. Etter å ha brukt exit() systemfunksjonen, gjenoppretter operativsystemet ressursene som brukes av prosessen.

Metoder for å sende parametere til OS

Hvis et systemanrop oppstår, må vi sende parameteren til Kernal-delen av operativsystemet.

Se for eksempel på det gitte åpen() systemanrop:

C




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

>

>

Her banenavn , flagg og mode_t er parametrene.

Så det er å merke seg at:

  • Vi kan ikke sende parametrene direkte som i et vanlig funksjonskall.
  • I Kernal-modus er det en annen måte å utføre et funksjonskall på.

Så vi kan ikke kjøre det i det normale adresserommet som prosessen allerede hadde opprettet, og derfor kan vi ikke plassere parameterne øverst i stabelen fordi det ikke er tilgjengelig for Kernal til operativsystemet for behandling. så vi må ta i bruk andre metoder for å overføre parameterne til OS-kernelen.

shloka mehta utdanning

Vi klarer det gjennom,

  1. Sende parametere i registre
  2. Adressen til blokken sendes som en parameter i et register.
  3. Parametre skyves inn i en stabel.

La oss diskutere hvert punkt i detalj:

1. Sende parametere i registre.

  • Det er den enkleste metoden blant de tre
  • Her sender vi parametrene direkte til registre.
  • Men det vil være begrenset når antall parametere er større enn antall registre.
  • Her er C-programkoden:

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. Adressen til blokken sendes som parametere

  • Den kan brukes når antall parametere er større enn antall registre.
  • Parametre lagres i blokker eller tabeller.
  • Adressen til blokken sendes til et register som en parameter.
  • Mest brukt i Linux og Solaris.
  • Her er C-programkoden:

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 skyves i en stabel

  • I denne metoden kan parametere skyves inn ved hjelp av programmet og sprettes ut ved hjelp av operativsystemet
  • Så Kernal kan enkelt få tilgang til dataene ved å hente informasjon fra toppen av stabelen.
  • Her er C-programkoden

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

>

>

sammenligne i java

Ofte stilte spørsmål

Q.1: Hvordan fungerer et systemanrop?

Svar:

Når et program utfører et systemanrop, går det over fra brukermodus til kjernemodus, som er en høyere privilegert modus. Overgangen initieres vanligvis ved å påkalle en spesifikk funksjon eller avbryte instruksjon levert av programmeringsspråket eller operativsystemet.

Når den er i kjernemodus, håndteres systemanropet av operativsystemet. Kjernen utfører den forespurte operasjonen på vegne av programmet og returnerer resultatet. Etterpå returneres kontrollen til programmet på brukernivå, som fortsetter kjøringen.

Q.2: Hvorfor er systemanrop nødvendig?

Svar:

Systemanrop er nødvendig av flere grunner:

Tilgang til privilegerte operasjoner: Mange operasjoner, som å administrere maskinvareenheter eller endre systemkonfigurasjoner, krever høyere privilegier som bare er tilgjengelige gjennom systemanrop.

Ressursforvaltning: Systemanrop gir et standardisert grensesnitt for tildeling og administrasjon av systemressurser som minne, filer og enheter, og sikrer rettferdig og kontrollert tilgang ved forskjellige prosesser.

Abstraksjon: Systemanrop abstraherer den underliggende kompleksiteten til operativsystemet, slik at applikasjonsutviklere kan samhandle med systemet på et høyere nivå, plattformuavhengig måte.

Sikkerhet og beskyttelse: Systemanrop håndhever tilgangskontroll og sikkerhetspolicyer, forhindrer uautorisert tilgang til sensitive ressurser og beskytter systemets integritet.