Indirizzi Virtuali e Kernel

hamming_burst
Salve, vorrei avere qualche chirimento su un argomento che mi crea qualche dubbio.

premessa: il kernel del post è il kernel Linux e processore PC Intel

Allora il problema risiede nell'indirizzamento del kernel, metto alcune domande/risposte e vorrei che mi diceste se sono corrette, e corregete se le affermazioni sono fuori dal mondo.

1. Il kernel risiede in memoria fisica ZONE_NORMAL 16-896 MB, non ha indirizzi virtuali perciò non c'è paginazione.

2. Il kernel e' segmentato (ma non utilizza le potenzialità della segmentazione) perchè la segmentazione non può essere disattavata per via del modo protetto e del bit 0 del registro CR0 che viene attivato nel boot.

3. Partendo da questo punto: kmalloc restituisce puntatori ad indirizzi fisici (vera o falsa).

vera: il kernel lavora solo con indirizzi fisici, senza passare per trasformazioni della MMU, ogni struttura avrò una trasformazione da inidirizzo fisico a virtuale se deve essere modificato da qualche routine software.

falsa: il kernel lavora con indirizzi virtuali, perciò utilizza la paginazione, ma con bit precence sempre posto ad 1. Avrà indirizzi lineari e risiederà nella tabella GDT (quella puntata da CR3)


Un pizzico di confusione c'è, ma è solo che devo unire tutti i concetti.

Ringrazio davvero chi aiuta. :)

Risposte
hamming_burst
Cercando un po' in rete, ho trovato il sito dell'autore del libro da cui sto studiando, è a dir poco fantastico delle informazioni riportate. Ad una domanda dello studente, simile alla mia, risponde:

Nel processore Intel x86, tutti gli indirizzi sono virtuali, nel senso che tutti gli
indirizzi passano dalla MMU prima di arrivare alla memoria fisica, è una scelta
di progetto.


Perciò anche il kernel utilizza indirizzi virtuali, utilizza la paginazione, ma risiede sempre in memoria fisica, ma è non-preemptive.

A voi dirmi se è tutto corretto.

Rggb1
Linux in x86 non fa un grande uso delle caratteristiche del processore. Tutto ciò che dici mi torna, dovrei magari controllare cosa viene fatto a livello di paging su quell'architettura (siamo a livello kernel), ma comunque il kernel è segmentato, indipendentemente dall'architettura sottostante afair.

Ovviamente stiamo parlando di x86 32 bit, non IA64 et similia che è tutto un altro universo.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.