Syscall

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

I x86-arkitekturen är ett systemanrop (`syscall`) en mekanism som tillåter ett program att begära en tjänst från operativsystemets kärna. Systemanrop är väsentliga för att utföra olika lågnivåoperationer som inte är direkt tillgängliga från användarutrymmet, såsom filhantering, processkontroll och nätverkskommunikation.

Så här fungerar det generellt i x86-arkitekturen:

Inställning av Parametrar

Innan ett `syscall` görs, placerar det anropande programmet argumenten för systemanropet i specifika register. De exakta registren som används kan bero på operativsystemet och anropskonventionen. Typiskt används EAX-registret för att hålla systemanropsnumret, som unikt identifierar systemanropet, och andra register som EBX, ECX, EDX, ESI, EDI och EBP används för systemanropsargumenten.

Utlösning av Systemanropet

`syscall` utlöses med hjälp av en instruktion. I x86-arkitekturen användes tidigare instruktionen `int 0x80`. Men med införandet av modernare x86-processorer introducerades en snabbare instruktion som kallas `SYSENTER`. På samma sätt, i x86-64 (64-bitars utvidgningen av x86), används instruktionen `syscall`.

Kärnlägeutförande

När systemanropsinstruktionen utförs, byter CPU från användarläge till kärnläge (ett mer privilegierat läge), och kontrollen överförs till en fördefinierad plats i kärnan. Detta är där systemanropshanteraren finns, som sedan läser systemanropsnumret och parametrarna från registren.

Systemanropsfördelning

Kärnan använder systemanropsnumret för att bestämma vilken specifik systemanropsfunktion som ska utföras. Detta implementeras ofta som en tabell med funktionspekare (systemanropstabellen).

Återgång från Systemanropet

Efter att systemanropet har behandlats, returneras kontrollen till det anropande programmet, vanligtvis tillsammans med ett returvärde som indikerar utfallet av systemanropet. Detta returvärde placeras ofta i EAX-registret.

Tillbaka till Användarläge

CPU växlar sedan tillbaka till användarläge, och programmet fortsätter utförandet.

Det är viktigt att notera att specifikationerna för hur systemanrop implementeras kan variera mycket mellan olika operativsystem, även om de använder samma arkitektur. Ovanstående beskrivning är en allmän översikt och kan skilja sig i detaljer för system som Linux, Windows eller andra.