Domanda

Come funziona Windows passare alla modalità supervisore durante una chiamata di sistema? Ho sentito qualcosa su una "trappola 0", ma che non sembra nemmeno come una di istruzioni x86. Ho fatto un passo attraverso alcune chiamate di sistema, ma non riesco a trovare alcuna. Fare un sacco di sistema di Windows chiama eseguito in modalità utente? Che vengono eseguiti in modalità supervisore?

È stato utile?

Soluzione

chiamata di sistema è anche conosciuto come interrupt software . L'istruzione x86 che chiama un interrupt software ha la mnemonico INT . Come i dati vengono passati al sistema operativo è definito dal sistema operativo ABI. Per quanto ne so, Windows utilizza il 0x80 immediato per tutti i suoi routine e invia i dati aggiuntivi tramite i registri, ma non sono sicuro. 0x20 è il primo immediato disposizione, dato che la gamma da 0 a 31 sono utilizzati e utilizzato eccezioni generali come divisione intera per zero e errori di memoria.

Cosa in fondo che succede è che la CPU passa modalità privilegiata e legge il IDTR (Interupt Descriptor Table Register). Ci si trova l'indirizzo di memoria fisica per l'IDT (Interupt Descriptor Table) ed esegue una ricerca nella IDT, sulla base 8 bit immediatamente cotto in istruzioni software interrupt. L'IDT possono essere memorizzati ovunque nella memoria. L'IDTR può essere letta / scritta dalle istruzioni lidt e SIDT. L'IDT in grado di memorizzare una serie di informazioni, ma per gli interrupt memorizza l'indirizzo alla routine di servizio associato con l'INT immediato.

Gli esempi di Win32 funzioni che spara un interrupt software .. hm. printf e amici sicuro lo fa, così come EnterCriticalSection . In Windows Vista e Windows 7, alcuni OpenGL e DirectX chiamate API ora richiedono un andata e ritorno in terra kernel a causa della nuova composite manager. Per OpenGL, che vale per tutte le funzioni che legge il backbuffer corrente, come glReadPixels, glCopy (Sub) TexImage2D, ecc.

P.S: Prendete questo post con un pizzico di sale. E 'stato un po' che ho pasticciato con Windows in questo modo, e non ho eseguire un sacco di controllo fatto. Modifiche e commenti sono benvenuti.

E qui è un link al Intel 386 manuale (che ho citato in ogni caso)

Altri suggerimenti

CPU x86 forniscono le istruzioni SYSENTER e SYSEXIT. Queste istruzioni eseguono un interruttore molto veloce dalla modalità utente modalità e di nuovo al kernel, e sistemi operativi moderni in esecuzione su CPU moderne molto probabilmente utilizzare questi invece di interrupt molto costosi o chiamate lontano.

È possibile visualizzare ulteriori dettagli a Manuali di Intel Software Developer , in particolare Volume 2B

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top