In che modo la modalità protetta nella CPU è realmente implementata?

1

So qual è la modalità reale e protetta di esecuzione della CPU. Ma come la CPU implementa la modalità protetta? La CPU AFAIK fa tutto ciò che il programma dice di fare. Dove viene implementato il comportamento in modalità protetta? Il sistema operativo ha un ruolo in questo?

    
posta humble_wolf 21.08.2018 - 20:54
fonte

2 risposte

4

C'è un po 'in un registro che indica se la CPU è attualmente in modalità kernel o user mode. Il codice del programma non può modificare direttamente questo bit: deve usare istruzioni speciali che fanno molto più che modificare questo bit. Alcune istruzioni possono essere utilizzate solo in modalità kernel; il tentativo di utilizzarli in modalità utente attiva invece una trappola .

Mentre il processore è in esecuzione in modalità kernel, può passare alla modalità utente in qualsiasi momento. Ma mentre il processore è in esecuzione in modalità utente, ci sono solo alcuni modi per passare alla modalità kernel: con la chiamata di sistema istruzione, a causa di un'interruzione o di una trappola. In tutti i casi, il processore non passa semplicemente alla modalità kernel, ma salta anche a un indirizzo in memoria che può essere configurato solo dal codice del kernel. Ciò garantisce che il codice della modalità utente non possa eseguire ciò che vuole in modalità kernel. La modalità utente può solo chiamare alcuni punti di ingresso specifici nel codice del kernel, e il codice del kernel in questi punti di ingresso può configurare attentamente il suo ambiente di elaborazione e convalidare i suoi input.

Tutto ciò sarebbe inutile se il codice utente potesse modificare il contenuto della memoria che contiene codice o dati del kernel. Non è possibile a causa della unità di gestione della memoria (MMU) . Una delle funzioni della MMU è limitare la memoria accessibile in un dato momento. La memoria può essere contrassegnata come accessibile solo al kernel e il passaggio tra la modalità kernel e la modalità utente può modificare la tabella dei permessi di accesso. La configurazione della MMU può essere modificata solo durante l'esecuzione in modalità kernel. In questo modo il kernel può configurare la memoria in modo che possa accedere al proprio codice e ai propri dati, ma il codice utente non può.

Il kernel mantiene in realtà una configurazione MMU per processo utente. Prima di passare alla modalità utente, il kernel modifica la configurazione della MMU in modo che corrisponda a quella del processo che verrà eseguito dopo il passaggio alla modalità utente.

Praticamente qualsiasi processore sufficientemente avanzato segue questo modello di base: non solo qualsiasi PC prodotto negli ultimi 30 anni, ma anche qualsiasi smartphone e persino molti dispositivi incorporati.

Ho semplificato molte cose. Nel mondo reale, ci possono essere più di due livelli di privilegi, più modalità di processore, più aspetti della configurazione della MMU, ecc. Hai il succo di come funziona. Se vuoi capire il codice del kernel o scrivere il tuo, devi leggere su una specifica architettura del processore in modo più dettagliato.

La "modalità reale" è un aspetto storico dei processori x86. Non è stato rilevante nel mondo reale negli ultimi due decenni, tranne che in alcuni rari sistemi x86 incorporati e in alcune persone che scrivono bootloader o eseguono software legacy molto vecchi.

    
risposta data 23.08.2018 - 00:44
fonte
2

La modalità protetta e la modalità reale sono due sottomodelli della modalità legacy dell'architettura x86-64. Una delle differenze tra loro è nel modo in cui vengono calcolati gli indirizzi fisici. Un'altra importante differenza è che la modalità protetta introduce il concetto di livelli di privilegio e attributi di protezione in lettura / scrittura / esecuzione per isolare e proteggere programmi diversi l'uno dall'altro. La CPU utilizza il valore di CR0 [PE] (CR0 è solo un registro) su ciascun accesso di memoria (letture dei dati di memoria, scritture di dati di memoria e recuperi di codice) per determinare se è in modalità reale o protetta. Se CR0 [PE] è 0, la CPU è in modalità reale. Altrimenti, se CR0 [PE] è 1, la CPU è in modalità protetta. Il sistema operativo può cambiare la modalità usando l'istruzione MOV CRO . Tutte le istruzioni successive a MOV CRO verranno eseguite nella nuova modalità. Per ulteriori informazioni, puoi fare riferimento a Intel SDM Volume 3 .

    
risposta data 22.08.2018 - 23:59
fonte

Leggi altre domande sui tag