Il sistema operativo (kernel) ha accesso alla memoria fisica

-1

So che c'è un hardware nella CPU, il MMU che si occupa di mappare un determinato indirizzo all'indirizzo fisico. Ad esempio:

int *ptr = 0x12345

Crea un puntatore al mio indirizzo di processo di 0x12345 che viene tradotto dalla CPU in un indirizzo reale. Ora la mia domanda è se scrivo personalmente un piccolo kernel ed eseguo il codice sopra, è 0x12345 è ancora considerato un indirizzo virtuale o posso accedere all'indirizzo fisico direttamente a livello di sistema operativo?

    
posta Josh t 30.09.2018 - 15:58
fonte

2 risposte

0

Dipende dal tuo sistema operativo, le cui scelte progettuali sono vincolate dalla CPU. E naturalmente se stai correndo sul bare metal o sotto un hypervisor / in un vm.

Se hai la possibilità di usare il paging in modalità kernel e abbastanza spazio di indirizzamento, ci sono buone ragioni per mappare tutto ciò che è rilevante: rende le cose più semplici e più performanti.

L'utilizzo della mappatura dell'identità rende effettivamente il codice più difficile quando si interagisce con la modalità utente.

  1. Spazio utente, che indica il processo corrente.
  2. Il kernel.
  3. Tutta la memoria fisica.
  4. Tutto lo spazio del dispositivo.

Potrebbe essere necessario scendere a compromessi nel mappare la memoria fisica a causa dei vincoli di spazio. In tal caso, devi solo mappare il page-table e dedicare uno spazio per le mappature del lavoro effimero privato di ogni CPU.

    
risposta data 30.09.2018 - 16:11
fonte
0

Vorrei rispondere alla mia stessa domanda. Sì a livello di sistema operativo si ha accesso alla memoria fisica. un boot loader (come GRUB) di solito ti porta in un ambiente in modalità protetta in cui il paging è disattivato, il che significa che non c'è ancora l'installazione della memoria virtuale, il che significa che stai usando direttamente la memoria fisica.

    
risposta data 30.09.2018 - 19:47
fonte

Leggi altre domande sui tag