Een systeemaanroep is een manier waarop een gebruikersprogramma kan communiceren met het besturingssysteem. Het programma vraagt om verschillende services en het besturingssysteem reageert door een reeks systeemaanroepen uit te voeren om aan het verzoek te voldoen. Een systeemaanroep kan in assembleertaal of een taal op hoog niveau worden geschreven C of Pascal . Systeemaanroepen zijn vooraf gedefinieerde functies die het besturingssysteem rechtstreeks kan aanroepen als een taal op hoog niveau wordt gebruikt.
In dit artikel leert u over de systeemaanroepen in het besturingssysteem, bespreekt u de typen ervan en nog veel meer.
Wat is een systeemoproep?
Een systeemaanroep is een methode waarmee een computerprogramma een service kan aanvragen bij de kernel van het besturingssysteem waarop het draait. Een systeemaanroep is een methode voor interactie met het besturingssysteem via programma's. Een systeemaanroep is een verzoek van computersoftware aan de kernel van een besturingssysteem.
De Applicatieprogramma-interface (API) verbindt de functies van het besturingssysteem met gebruikersprogramma's. Het fungeert als een link tussen het besturingssysteem en een proces, waardoor programma's op gebruikersniveau besturingssysteemservices kunnen aanvragen. Het kernelsysteem is alleen toegankelijk via systeemaanroepen. Systeemaanroepen zijn vereist voor alle programma's die bronnen gebruiken.
Hoe worden systeemoproepen gedaan?
Wanneer computersoftware toegang moet krijgen tot de kernel van het besturingssysteem, doet het een systeemoproep. De systeemaanroep maakt gebruik van een API om de services van het besturingssysteem beschikbaar te maken voor gebruikersprogramma's. Het is de enige methode om toegang te krijgen tot het kernelsysteem. Alle programma's of processen die middelen nodig hebben voor de uitvoering moeten systeemaanroepen gebruiken, omdat deze dienen als interface tussen het besturingssysteem en gebruikersprogramma's.
Hieronder vindt u enkele voorbeelden van hoe een systeemoproep verschilt van een gebruikersfunctie.
nginx
- Een systeemaanroepfunctie kan kernelprocessen creëren en gebruiken om de asynchrone verwerking uit te voeren.
- Een systeemoproep heeft meer autoriteit dan een standaard subroutine. Een systeemaanroep met privileges in de kernelmodus wordt uitgevoerd in het kernelbeschermingsdomein.
- Het is systeemaanroepen niet toegestaan gedeelde bibliotheken of symbolen te gebruiken die niet aanwezig zijn in het kernelbeschermingsdomein.
- De code en gegevens voor systeemaanroepen worden opgeslagen in het globale kernelgeheugen.
Waarom heb je systeemaanroepen nodig in het besturingssysteem?
Er zijn verschillende situaties waarin u systeemaanroepen in het besturingssysteem nodig heeft. De volgende situaties zijn als volgt:
- Het is verplicht wanneer een bestandssysteem een bestand wil maken of verwijderen.
- Voor netwerkverbindingen zijn systeemaanroepen nodig voor het verzenden en ontvangen van datapakketten.
- Als u een bestand wilt lezen of schrijven, moet u systeemaanroepen uitvoeren.
- Als u toegang wilt krijgen tot hardwareapparaten, waaronder een printer of scanner, heeft u een systeemoproep nodig.
- Systeemaanroepen worden gebruikt om nieuwe processen te creëren en te beheren.
Hoe systeemoproepen werken
De applicaties worden uitgevoerd in een geheugengebied dat bekend staat als gebruikersruimte. Een systeemaanroep maakt verbinding met de kernel van het besturingssysteem, die wordt uitgevoerd in de kernelruimte. Wanneer een applicatie een systeemaanroep creëert, moet deze eerst toestemming verkrijgen van de kernel. Het bereikt dit met behulp van een interruptverzoek, dat het huidige proces pauzeert en de controle overdraagt aan de kernel.
Als het verzoek wordt toegestaan, voert de kernel de gevraagde actie uit, zoals het maken of verwijderen van een bestand. Als invoer ontvangt de applicatie de uitvoer van de kernel. De applicatie hervat de procedure nadat de invoer is ontvangen. Wanneer de bewerking is voltooid, stuurt de kernel de resultaten terug naar de applicatie en verplaatst vervolgens de gegevens van de kernelruimte naar de gebruikersruimte in het geheugen.
Het kan enkele nanoseconden duren voordat een eenvoudige systeemoproep het resultaat oplevert, zoals het ophalen van de systeemdatum en -tijd. Een ingewikkelder systeemoproep, zoals verbinding maken met een netwerkapparaat, kan enkele seconden duren. De meeste besturingssystemen lanceren voor elke systeemaanroep een aparte kernelthread om knelpunten te voorkomen. Moderne besturingssystemen zijn multi-threaded, wat betekent dat ze verschillende systeemoproepen tegelijkertijd kunnen afhandelen.
bash while-lus
Soorten systeemoproepen
Er zijn gewoonlijk vijf soorten systeemaanroepen. Deze zijn als volgt:
Nu leert u één voor één alle verschillende soorten systeemoproepen kennen.
Procesbeheersing
Procesbeheersing is de systeemaanroep die wordt gebruikt om de processen te sturen. Enkele voorbeelden van procesbeheersing zijn het maken, laden, afbreken, beëindigen, uitvoeren, verwerken, beëindigen van het proces, enz.
Bestandsbeheer
Bestandsbeheer is een systeemaanroep die wordt gebruikt om de bestanden af te handelen. Enkele voorbeelden van bestandsbeheer zijn het maken van bestanden, het verwijderen van bestanden, het openen, sluiten, lezen, schrijven, enz.
Apparaatbeheer
Apparaatbeheer is een systeemaanroep die wordt gebruikt om met apparaten om te gaan. Enkele voorbeelden van apparaatbeheer zijn lezen, apparaat, schrijven, apparaatkenmerken ophalen, apparaat vrijgeven, enz.
Informatie Onderhoud
Informatieonderhoud is een systeemoproep die wordt gebruikt om informatie te onderhouden. Er zijn enkele voorbeelden van informatie-onderhoud, waaronder het ophalen van systeemgegevens, het instellen van de tijd of datum, het ophalen van de tijd of datum, het instellen van systeemgegevens, enz.
Communicatie
Communicatie is een systeemoproep die wordt gebruikt voor communicatie. Er zijn enkele voorbeelden van communicatie, waaronder het maken, verwijderen van communicatieverbindingen, het verzenden, ontvangen van berichten, enz.
Voorbeelden van Windows- en Unix-systeemaanroepen
Er zijn verschillende voorbeelden van Windows- en Unix-systeemaanroepen. Deze zijn zoals hieronder vermeld in de tabel:
itererende kaart-Java
Proces | ramen | Unix |
---|---|---|
Procesbeheersing | CreateProces() ExitProces() WaitForSingleObject() | Vork() Uitgang() Wachten() |
Bestandsmanipulatie | Bestand maken() LeesBestand() SchrijfBestand() SluitHandle() | Open() Lezen() Schrijven() Dichtbij() |
Apparaatbeheer | SetConsoleMode() LeesConsole() SchrijfConsole() | Ioctl() Lezen() Schrijven() |
Informatie Onderhoud | GetCurrentProcessID() SetTimer() Slaap() | Getpid() Alarm() Slaap() |
Communicatie | CreatePipe() CreateFileMapping() MapViewOfFile() | Pijp() Shmget() Mmap() |
Bescherming | SetFileSecurity() InitializeSecurityDescriptor() SetSecurityDescriptorgroep() | Chmod() umask() Chown() |
Hier leert u kort enkele methoden kennen:
open()
De open() Met systeemaanroep krijgt u toegang tot een bestand op een bestandssysteem. Het wijst bronnen toe aan het bestand en biedt een handvat waarnaar het proces kan verwijzen. Veel processen kunnen een bestand in één keer of slechts via één proces openen. Het is allemaal gebaseerd op het bestandssysteem en de structuur.
lezen()
Het wordt gebruikt om gegevens te verkrijgen uit een bestand op het bestandssysteem. Het aanvaardt in het algemeen drie argumenten:
- Een bestandsbeschrijving.
- Een buffer om leesgegevens op te slaan.
- Het aantal bytes dat uit het bestand moet worden gelezen.
De bestandsdescriptor van het te lezen bestand kan worden gebruikt om het te identificeren en te openen met behulp van open() voor het lezen.
wachten()
In sommige systemen moet een proces mogelijk wachten tot een ander proces de uitvoering ervan heeft voltooid voordat het verder kan gaan. Wanneer een ouderproces een onderliggend proces maakt, wordt de uitvoering van het bovenliggende proces opgeschort totdat het onderliggende proces is voltooid. De wachten() systeemaanroep wordt gebruikt om het bovenliggende proces te onderbreken. Zodra het onderliggende proces zijn uitvoering heeft voltooid, wordt de controle teruggegeven aan het ouderproces.
schrijven()
Het wordt gebruikt om gegevens uit een gebruikersbuffer naar een apparaat zoals een bestand te schrijven. Deze systeemaanroep is één manier waarop een programma gegevens kan genereren. Er zijn in het algemeen drie argumenten nodig:
centos versus rhel
- Een bestandsbeschrijving.
- Een verwijzing naar de buffer waarin gegevens worden opgeslagen.
- Het aantal bytes dat vanuit de buffer moet worden geschreven.
vork()
Processen genereren klonen van zichzelf met behulp van de vork() systeem oproep. Het is een van de meest gebruikelijke manieren om processen in besturingssystemen te creëren. Wanneer een ouderproces een onderliggend proces voortbrengt, wordt de uitvoering van het bovenliggende proces onderbroken totdat het onderliggend proces is voltooid. Zodra het onderliggende proces zijn uitvoering heeft voltooid, wordt de controle teruggegeven aan het ouderproces.
dichtbij()
Het wordt gebruikt om de toegang tot het bestandssysteem te beëindigen. Wanneer deze systeemaanroep wordt uitgevoerd, betekent dit dat het programma het bestand niet langer nodig heeft en dat de buffers worden leeggemaakt, de bestandsinformatie wordt gewijzigd en als gevolg daarvan de toewijzing van de bestandsbronnen ongedaan wordt gemaakt.
exec()
Wanneer een uitvoerbaar bestand een eerder uitvoerbaar bestand vervangt in een reeds uitgevoerd proces, wordt deze systeemfunctie aangeroepen. Omdat er geen nieuw proces wordt gebouwd, blijft de oude procesidentificatie behouden, maar vervangt het nieuwe proces data, stack, data, head, etc.
Uitgang()
De Uitgang() is een systeemaanroep die wordt gebruikt om de uitvoering van een programma te beëindigen. Deze aanroep geeft aan dat de uitvoering van de thread is voltooid, wat vooral handig is in omgevingen met meerdere threads. Het besturingssysteem claimt de bronnen die door het proces zijn uitgegeven na het gebruik van de Uitgang() systeem functie.