hvordan Unix System kalder arbejde
Systemopkald er den grundlæggende grænseflade mellem et brugerprogram og operativsystemets kerne. De tillader programmer at anmode om tjenester fra kernen, såsom at få adgang til hardware, styre processer og interagere med filer. Her er en sammenbrud af, hvordan de fungerer:
1. Anmodning om brugerprogram:
* Et brugerprogram, der kører i brugerrum, har brug for en bestemt service, som at læse en fil, oprette en ny proces eller få adgang til en enhed.
* Programmet bruger en biblioteksfunktion (f.eks. `Open ()`, `Fork ()`, `læst ()`) til at anmode om anmodningen.
2. Bibliotekets funktionsopkald:
* Bibliotekets funktion er ansvarlig for at opbygge en bestemt systemopkaldsstruktur. Denne struktur indeholder oplysninger om det ønskede systemopkald (f.eks. Funktionsnummer, argumenter).
* Denne struktur overføres derefter til kernen ved hjælp af en speciel instruktion kendt som et systemopkaldsafbrydelse (Ofte `int 0x80` eller` syscall`).
3. Kernelhåndtering:
* Afbrydelsen forårsager en kontekstafbryder, der overfører kontrol fra brugerprogrammet til kernen.
* Kernen identificerer det ønskede systemopkald baseret på dets nummer.
* Kernen validerer systemopkaldsargumenterne og kontrollerer for tilladelser.
* Kernen udfører den ønskede service, der potentielt involverer interaktioner med hardware, filsystem eller andre processer.
4. Returneringsværdi:
* Når kernen har afsluttet den anmodede service, returnerer den en statuskode og potentielt data til brugerprogrammet.
* Bibliotekets funktion fortolker statuskoden og returnerer et resultat til brugerprogrammet.
5. Brugerprogramrespons:
* Brugerprogrammet modtager resultatet, behandler det og fortsætter sin udførelse.
Nøglepunkter:
* Systemopkald er de grundlæggende byggesten til ethvert UNIX-lignende operativsystem.
* De giver en standardiseret, sikker og kontrolleret grænseflade mellem brugerprogrammer og kernen.
* Kernen beskytter systemressourcerne og sikrer, at programmer ikke kan få adgang til eller ændre komponenter på systemniveau uden tilladelse.
* Systemopkaldsgrænsefladen er generelt konsistent på tværs af forskellige UNIX-lignende systemer, hvilket sikrer bærbarhed af applikationer.
Eksempel:
Lad os overveje 'læst ()' systemopkald. Et program kan muligvis bruge bibliotekets funktion `læst ()` til at læse data fra en fil. Denne funktion:
1. bygger en systemopkaldsstruktur med `læst () -funktionsnummeret, filbeskrivelsen, bufferadresse og antal byte, der skal læses.
2. Udfører systemopkaldsafbrydelsen for at overføre kontrol til kernen.
3. Kernen validerer argumenterne, henter dataene fra filen og kopierer dem til den bruger-leverede buffer.
4. Kernen returnerer antallet af bytes, der læses til brugerprogrammet.
5. Brugerprogrammet modtager resultatet og bruger dataene efter behov.
At forstå, hvordan systemopkaldsarbejde er vigtigt for at forstå den indre funktion af UNIX-lignende operativsystemer og skriveprogrammer, der effektivt interagerer med kernen.