Domanda

Se un eseguibile di Windows utilizza SYSENTER e viene eseguito su un processore che implementa AMD64 ISA, cosa succede? Sono nuovo e principiante in questo argomento (sistemi operativi, interazione hardware / software) ma da quello che ho letto ho capito che SYSCALL è l'equivalente AMD64 di SYSENTER di Intel. Spero che questa domanda abbia un senso.

È stato utile?

Soluzione

Se provi a usare SYSENTER dove non è supportato, probabilmente otterrai un "codice operativo non valido" eccezione. Si noti che questa situazione è insolita, in genere gli eseguibili di Windows non contengono direttamente istruzioni per accedere alla modalità kernel.

Altri suggerimenti

Per quanto ne so i processori AM64 utilizzano diversi tipi di modalità per gestire tali problemi.

SYSENTER funziona bene ma non è così veloce.

Un sito molto utile per iniziare sulle diverse modalità: Wikipedia

Si sono sbarazzati di un sacco di funzionalità inutilizzate quando hanno sviluppato le estensioni AMD64. Uno dei principali è l'eliminazione dei registri dei segmenti cs, ds, es e ss. Normalmente il caricamento dei registri di segmento è un'operazione estremamente costosa (la CPU deve eseguire controlli di autorizzazione, che potrebbero comportare accessi multipli alla memoria). Per entrare in modalità kernel è necessario caricare nuovi valori di registro di segmenti.

L'istruzione SYSENTER accelera questo avendo un set di "registri ombra" che può essere copiato direttamente nei descrittori di segmento (interni, nascosti) senza eseguire controlli di autorizzazione. La stragrande maggioranza del vantaggio viene persa con solo un paio di registri di segmento, quindi molto probabilmente il ragionamento per rimuovere il supporto per le istruzioni è che l'uso di istruzioni regolari per il cambio di modalità è più veloce.

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