Hoe Unix System -oproepen werken
Systeemoproepen zijn de fundamentele interface tussen een gebruikersprogramma en de kernel van het besturingssysteem. Ze stellen programma's in staat om diensten van de kernel aan te vragen, zoals toegang tot hardware, het beheren van processen en interactie met bestanden. Hier is een uitsplitsing van hoe ze werken:
1. Gebruikersprogramma Verzoek:
* Een gebruikersprogramma, dat wordt uitgevoerd in gebruikersruimte, heeft een specifieke service nodig, zoals het lezen van een bestand, het maken van een nieuw proces of toegang tot een apparaat.
* Het programma gebruikt een bibliotheekfunctie (bijv. `Open ()`, `vork ()`, `lees ()`) om het verzoek te doen.
2. Bibliotheekfunctieaanroep:
* De bibliotheekfunctie is verantwoordelijk voor het bouwen van een specifieke systeemoproepstructuur. Deze structuur bevat informatie over de gewenste systeemoproep (bijv. Functienummer, argumenten).
* Deze structuur wordt vervolgens aan de kernel doorgegeven met behulp van een speciale instructie die bekend staat als een System Call Interrupt (Vaak `int 0x80` of` syscall`).
3. Kernelbehandeling:
* De interrupt veroorzaakt een contextschakelaar, waarbij de controle van het gebruikersprogramma naar de kernel wordt overgedragen.
* De kernel identificeert de gevraagde systeemoproep op basis van zijn nummer.
* De kernel valideert de systeemoproepargumenten en controles op machtigingen.
* De kernel voert de gevraagde service uit, die mogelijk interacties met de hardware, bestandssysteem of andere processen omvatten.
4. Retourwaarde:
* Zodra de kernel de gevraagde service heeft voltooid, retourneert deze een statuscode en mogelijk gegevens naar het gebruikersprogramma.
* De bibliotheekfunctie interpreteert de statuscode en retourneert een resultaat naar het gebruikersprogramma.
5. Gebruikersprogramma Reactie:
* Het gebruikersprogramma ontvangt het resultaat, verwerkt het en zet de uitvoering ervan voort.
Sleutelpunten:
* Systeemoproepen zijn de fundamentele bouwstenen voor elk UNIX-achtig besturingssysteem.
* Ze bieden een gestandaardiseerde, veilige en gecontroleerde interface tussen gebruikersprogramma's en de kernel.
* De kernel beschermt de systeembronnen en zorgt ervoor dat programma's geen toegang tot componenten op systeemniveau zonder toestemming niet toegang hebben of wijzigen.
* De systeemoproepinterface is over het algemeen consistent in verschillende UNIX-achtige systemen, waardoor de draagbaarheid van applicaties wordt gewaarborgd.
Voorbeeld:
Laten we eens kijken naar de 'lees ()' systeemoproep. Een programma kan de bibliotheekfunctie `lees ()` gebruiken om gegevens uit een bestand te lezen. Deze functie:
1. Bouwt een systeemoproepstructuur met het functie `lees ()` functienummer, bestandsdescriptor, bufferadres en aantal bytes om te lezen.
2. Voert de System Call Interrupt uit om controle over te dragen naar de kernel.
3. De kernel valideert de argumenten, haalt de gegevens uit het bestand op en kopieert deze naar de door de gebruiker geleverde buffer.
4. De kernel retourneert het aantal gelezen bytes naar het gebruikersprogramma.
5. Het gebruikersprogramma ontvangt het resultaat en gebruikt de gegevens indien nodig.
Inzicht in hoe systeemoproepen werken is essentieel voor het begrijpen van de innerlijke werking van UNIX-achtige besturingssystemen en schrijfprogramma's die effectief interageren met de kernel. |