2013-10-27 12 views
5

Conosco la differenza tra una modalità reale e una modalità protetta dal punto di vista del sistema operativo e dell'hardware.Qual è la vera differenza tra un programma in modalità reale e un programma in modalità protetta?

Ma sto cercando di capire che cosa un programma "sa" della modalità reale o della modalità protetta? come puoi dire guardando un codice sorgente/codice oggetto che è un vero programma in modalità o no?

Alla ricerca di una risposta, tutto ciò che ho potuto inventare è che un programma in "modalità reale" utilizza subroutine BIOS insieme a subroutine OS mentre un programma in modalità protetta utilizza solo subroutine OS. il codice di istruzione differisce da quando gli opcode per i registri sono diversi e gli indirizzi di offset hanno una lunghezza diversa. C'è qualche altra caratteristica che distingue un programma in modalità reale e protetto?

+0

Date un'occhiata qui [Modalità Reale VS Protected Mode] [1] [1]: http://www.geek.com/chips/difference-between-real-mode-and-protected-mode- 574665/ –

risposta

5

un programma di 'modalità reale' usa subroutine BIOS con subroutine OS mentre un programma di 'modalità protetta' utilizza solo subroutine OS.

codice istruzione differisce dal codici operativi per i registri sono diversi e compensati indirizzi sono di lunghezza diversa.

4

La differenza principale è il modo la CPU è in. In modalità protetta il sistema operativo può utilizzare funzioni come il paging e la memoria virtuale. Anche il codice della modalità reale non è mai a 32 bit, mentre il codice in modalità protetta può essere a 16 bit oa 32 bit. Ogni CPU x86 si avvia in modalità reale e il sistema operativo deve passare alla modalità protetta.

4

Come puoi dire mentre guardando un codice di codice sorgente/oggetto che si tratta di un programma in modalità reale o no?

Se c'è una corrispondenza diretta (uno-a-uno) tra la memoria fisica e virtuale, il programma è in esecuzione in modalità reale. Per essere più precisi, dal momento che la memoria virtuale non è attivata in modalità reale, il programma viene eseguito in modalità a 16 bit, in cui ogni indirizzo "visualizzato" dal codice sorgente/codice oggetto, è l'effettivo indirizzo fisico sulla RAM.

La modalità protetta, d'altra parte, ha abilitato la funzione di memoria virtuale. Quindi la mappatura tra l'indirizzo a cui si accede dal codice sorgente/codice oggetto è diversa dalla posizione di memoria effettiva a cui si accede nella RAM.

Per rilevare questo, si può solo verificare se la bandiera di paging viene attivata o disattivata nella CPU quando il codice sorgente/oggetto è in esecuzione.

Per CPU basata su x86, è possibile controllare il valore in Registro CR0. se il registro CR0 è vuoto, il programma è in esecuzione in modalità reale.

+1

Dubito che un codice oggetto in modalità reale possa contenere gli indirizzi fisici effettivi. contiene solo gli offset che vengono aggiunti al valore CS una volta spostati di 4 bit a sinistra. – KawaiKx

Problemi correlati