Hvordan UNIX -systemet kaller fungerer
Systemanrop er det grunnleggende grensesnittet mellom et brukerprogram og operativsystemkjernen. De lar programmer be om tjenester fra kjernen, for eksempel å få tilgang til maskinvare, administrere prosesser og samhandle med filer. Her er en oversikt over hvordan de fungerer:
1. Forespørsel om brukerprogram:
* Et brukerprogram, som kjører i brukerområdet, trenger en spesifikk tjeneste, som å lese en fil, lage en ny prosess eller få tilgang til en enhet.
* Programmet bruker en bibliotekfunksjon (f.eks. `Open ()`, `gaffel ()`, `lest ()`) for å komme med forespørselen.
2. Bibliotekfunksjonsanrop:
* Bibliotekfunksjonen er ansvarlig for å bygge en spesifikk systemanropsstruktur. Denne strukturen inneholder informasjon om ønsket systemanrop (f.eks. Funksjonsnummer, argumenter).
* Denne strukturen blir deretter sendt til kjernen ved å bruke en spesiell instruksjon kjent som et systemanropavbrudd (ofte `int 0x80` eller` syscall`).
3. Kjernehåndtering:
* Avbruddet forårsaker en kontekstbryter, og overfører kontroll fra brukerprogrammet til kjernen.
* Kjernen identifiserer det forespurte systemanropet basert på nummeret.
* Kjernen validerer systemanrop argumenter og sjekker for tillatelser.
* Kjernen utfører den forespurte tjenesten, og potensielt involverer interaksjoner med maskinvare, filsystem eller andre prosesser.
4. Returverdi:
* Når kjernen har fullført den forespurte tjenesten, returnerer den en statuskode og potensielt data til brukerprogrammet.
* Bibliotekfunksjonen tolker statuskoden og returnerer et resultat til brukerprogrammet.
5. Response for brukerprogram:
* Brukerprogrammet mottar resultatet, behandler det og fortsetter utførelsen.
Nøkkelpunkter:
* Systemanrop er de grunnleggende byggesteinene for ethvert UNIX-lignende operativsystem.
* De gir et standardisert, sikkert og kontrollert grensesnitt mellom brukerprogrammer og kjernen.
* Kjernen beskytter systemressursene og sikrer at programmer ikke kan få tilgang til eller endre komponenter på systemnivå uten autorisasjon.
* Systemanropsgrensesnittet er generelt konsistent på tvers av forskjellige Unix-lignende systemer, noe som sikrer portabilitet av applikasjoner.
Eksempel:
La oss vurdere `leste ()` systemanrop. Et program kan bruke bibliotekfunksjonen `lest ()` for å lese data fra en fil. Denne funksjonen:
1. Bygger en systemanropsstruktur med `lest ()` funksjonsnummer, filbeskrivelse, bufferadresse og antall byte å lese.
2. Utfører systemanropavbruddet for å overføre kontroll til kjernen.
3. Kjernen validerer argumentene, henter dataene fra filen og kopierer dem til den bruker-leverte bufferen.
4. Kjernen returnerer antall byte som er lest til brukerprogrammet.
5. Brukerprogrammet mottar resultatet og bruker dataene etter behov.
Å forstå hvordan systemkaller arbeid er avgjørende for å forstå den indre virkningen av UNIX-lignende operativsystemer og skrive programmer som effektivt samhandler med kjernen.