Cercapersone solo per codice utente. E il codice del kernel?

Aug 28 2020

Perché il paging viene eseguito solo per il codice utente (spazio utente)? So che l'intuizione di base dietro il paging è per la gestione di uno spazio di indirizzi logici più ampio in uno spazio di memoria principale fisica più piccolo. Anche la dimensione del kernel non sarà grande? Se il codice del kernel è abbastanza grande e la dimensione della RAM è piccola, come viene gestita? Si prega di precisare.

Risposte

2 Acsor Aug 28 2020 at 16:25

A parte il fatto che i kernel tendono ad essere piccoli, come sottolinea Yuval, dovresti anche considerare che spesso non sono codice riposizionabile (infatti, il binding degli indirizzi per i kernel viene eseguito in fase di compilazione) e quindi la memoria a cui sono allocati potrebbe non essere in nessun caso spostato o scambiato, non solo per il paging. Ovviamente ci sono anche problemi relativi alle prestazioni e si dovrebbe considerare la gestione anche di casi eccezionali, come il codice responsabile del paging che viene scambiato.

Di solito, le limitazioni di memoria nei sistemi operativi vengono gestite in modi diversi dal paging. Per i kernel monolitici, questo significa offrire un sistema di moduli caricabili , mentre per i microkernel il problema potrebbe non applicarsi, poiché il loro footprint sulla memoria principale è solitamente molto inferiore rispetto ai kernel monolitici (i servizi di sistema nei microkernel sono implementati come processi a livello di utente).


Ultimo ma non meno importante, abilitare il paging sulla memoria del kernel sfiderebbe una delle sue definizioni principali, essendo "[quella] parte del sistema operativo che è sempre residente in memoria" 1 ;-).