2011-11-18 16 views
5

Sto facendo qualche ricerca con l'architettura MIPS e mi chiedevo come sono implementati i sistemi operativi con le istruzioni limitate e la protezione della memoria che offre mips. Mi sto chiedendo in particolare come un sistema operativo possa impedire l'esecuzione di determinati intervalli di indirizzi. Ad esempio, in che modo un sistema operativo può limitare il funzionamento del PC in un determinato intervallo? In altre parole, prevenire qualcosa come l'esecuzione dalla memoria allocata dinamicamente?Prevenzione esecuzione memoria MIPS

La prima cosa che mi viene in mente è con i TLB, ma i TLB offrono solo protezione da scrittura (e non da esecuzione).

Non vedo nemmeno come possa essere gestito dal sistema operativo, perché ciò implicherebbe che ogni istruzione provocherebbe un'eccezione e quindi MOLTI cicli verrebbero bruciati solo controllando per vedere se il PC era in un indirizzo corretto gamma.

Se qualcuno lo sa, come si fa in genere? Viene gestito in qualche modo dall'hardware durante l'inizializzazione (ad esempio viene assegnato un intervallo di indirizzi e viene rilevata un'eccezione se è fuori intervallo?)

risposta

2

La maggior parte dei controlli di protezione viene eseguita in hardware, dalla CPU stessa e non è necessaria molto coinvolgimento dal lato del sistema operativo.

Il sistema operativo imposta alcune tabelle speciali (tabelle di pagina o descrittori di segmenti o alcune di esse) in cui gli intervalli di memoria hanno associato autorizzazioni di lettura, scrittura, esecuzione e utente/kernel che la CPU quindi memorizza internamente.

La CPU quindi su ogni istruzione verifica se gli accessi alla memoria sono conformi alle autorizzazioni stabilite dal sistema operativo e se tutto è a posto, continua. Se c'è un tentativo di violare tali permessi, la CPU solleva un'eccezione (una forma di interruzione simile a quella dei dispositivi di I/O della CPU esterni) gestita dal sistema operativo. Nella maggior parte dei casi, il sistema operativo termina semplicemente l'applicazione incriminata quando ottiene tale eccezione.

In alcuni altri casi, tenta di gestirli e far funzionare il codice apparentemente danneggiato. Uno di questi casi è il supporto per la memoria virtuale su disco. Il sistema operativo contrassegna una regione come non rappresentabile/inaccessibile quando non è supportata dalla memoria fisica e i suoi dati sono da qualche parte sul disco. Quando l'app tenta di utilizzare quella regione, il sistema operativo recupera un'eccezione dall'istruzione che tenta di accedere a questa area di memoria, esegue il backup dell'area con memoria fisica, lo riempie con i dati dal disco, lo contrassegna come presente/accessibile e riavvia il sistema. istruzione che ha causato l'eccezione. Ogni volta che il sistema operativo ha poca memoria, può scaricare i dati da determinati intervalli sul disco, contrassegnare tali intervalli come non rappresentativi/inaccessibili e recuperare la memoria da quelle regioni per altri scopi.

Ci possono essere anche hard-coded specifici dalle gamme di memoria della CPU inaccessibili al software in esecuzione al di fuori del kernel del sistema operativo e la CPU può facilmente fare un controllo anche qui.

questo sembra essere il caso per MIPS (from "Application Note 235 - Migrating from MIPS to ARM"):

3.4.2 Protezione della memoria MIPS offre la protezione della memoria solo nella misura descritti in precedenza ovvero indirizzi nella 2GB superiore dello spazio di indirizzamento non sono consentiti quando è in modalità utente. Nessun regime di protezione a grana fine è possibile.

enter image description here

This document liste "MEM - guasto pagina su data fetch; di accesso alla memoria non allineati; violazione della memoria-protezione" tra le altre eccezioni MIPS.

Se una particolare versione della CPU MIPS non dispone di ulteriori controlli di protezione a grana fine, possono essere emulati solo dal sistema operativo e a un costo significativo. Il sistema operativo dovrebbe eseguire istruzioni di codice con istruzioni o tradurle in un codice quasi equivalente con indirizzo inserito e verifiche di accesso ed eseguire quello invece del codice originale.

2

Questo è effettivamente fatto con TLB. No Execute Bits (NX bits) è diventato popolare solo pochi anni fa, quindi i processori MIPS meno recenti non lo supportano. L'ultima versione di MIPS architecture (versione 3) e SmartMIPS Application-Specific Extension la supportano come funzionalità opzionale con il nome di XI (Execute Inhibit).

Se si dispone di un chip senza questa funzione, si è sfortunati. Come già detto Alex, non esiste un modo semplice per emulare questa funzionalità.