Domanda

I compiti a casa finito per un corso di laurea in sistemi operativi. Ho ottenuto un ottimo punteggio e ho solo perso una piccolo punto di domanda. Ha chiesto che erano istruzioni privilegiate e quali no. Ho risposto tutto correttamente tranne uno: L'aggiunta di un valore del registro a un altro

ho risposto che era privilegiato, ma a quanto pare non lo è! Come può essere?

ho pensato che l'utente interagisce con i registri / memoria utilizzando sistemi di chiamate, che in un certo senso il cambiamento da chiamate di sistema in modalità utente al kernel mode routine. Quindi l'aggiunta di un valore registro all'altro potrebbe essere definito da un utente non privilegiato, ma alla fine il kernel sta facendo il lavoro ed è in kernel, modalità privilegiata. Quindi è privilegiato? Un utente non può farlo da soli. Ho sbagliato? Perché?!

  • Grazie!
È stato utile?

Soluzione

Non so il motivo per cui si potrebbe pensare che la modifica di un registro richiederebbe l'intervento del kernel. Alcuni registri speciali possono essere privilegiati (quelli che controllano le cose come le tabelle dei descrittori o livelli di protezione, con la quale il codice in modalità utente potrebbe sistema in modalità bypass protezioni), ma i registri di uso generale può essere modificato liberamente senza un kernel farsi coinvolgere.

Quando il codice viene eseguito, il stragrande maggior parte delle istruzioni sarebbe cose come:

inc  %eax
movl $7,%ebx
addl %eax,%ebx

Per inciso, sto solo immaginando come rallentare il mio codice verrebbe eseguito se richiesto una chiamata di sistema al kernel ogni volta che ho incrementato un contatore o chiama una funzione: -)

L'unica cosa che mi viene in mente sarebbe se pensavate che il vostro thread di esecuzione non è stato permesso ai registri di modifica arbitrariamente dal momento che possono influenzare tali registri per altri thread. Ma il kernel sarebbe preso cura di che quando si passa le discussioni -. Tutti i registri sarebbero stati confezionati da qualche parte per più tardi e quelli per il thread successivo sarebbe caricati in


In base alle vostre osservazioni, lei sembra pensare che il tempo di aggiungere è quando il meccanismo di protezione CPU dovrebbe intervenire. In realtà, non può a quel punto perché non ha idea di che cosa avete intenzione di utilizzare il registrati per. Si può solo essere utilizzato come un contatore.

Tuttavia, se si non usarlo come un indirizzo di memoria ad accesso, e che la memoria non è valido in qualche modo (al di fuori del proprio spazio di indirizzamento, o scambiati su disco), il kernel farà un passo in quel punto per rettificare la situazione (lanciare l'applicazione sul suo orecchio, o portare nella memoria swap-out).

Tuttavia, anche che non è un'istruzione privilegiata, è solo la gestione di errori di pagina CPU.

un'istruzione privilegiata è qualcosa che non ti è permesso di fare a tutti, come il cambiamento l'interrupt tabella descrittore di localizzazione registri o gli interrupt Disattiva.

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