Is a "memory page" always related only to a data chunk of virtual memory?
In un certo senso. Il kernel ha pagine utilizzate internamente per DMA, buffer di I / O, cache di blocchi e inode, ecc. Queste sono tutte pagine di memoria fisica, ma non sono visibili come tali a nessun processo utente a meno che non siano stampate.
Are physical RAM addresses also split into pages?
Sì, i due devono essere equivalenti per il paging per funzionare in modo sano
[paraphrase] is a page really the smallest unit if you can allocate a char
Una pagina è l'unità più piccola del sistema kernel VM . I processi utente richiedono memoria dal kernel in pagine intere.
Il tuo processo userspace avrà quindi un meccanismo interno per la gestione degli oggetti allocati all'interno di queste pagine.
Nota che anche se pensi di aver assegnato un char
, non lo hai fatto - l'allocatore aggiungerà un sovraccarico per tenere traccia del blocco assegnato.
Si noti inoltre che questa discussione sugli allocatori di pagine secondarie si applica anche all'interno del kernel (nelle parti che stanno utilizzando, piuttosto che gestire, la memoria).
I motivi per cui il kernel non tratta in unità più piccole sono:
- sono inefficienti per gli scopi del file di paging (qualsiasi cosa più piccola di un blocco del disco sarà praticamente inutile), e
-
ogni allocazione comporta un overhead di gestione fisso: più piccolo è il blocco, maggiore è la quantità di memoria che è necessario prenotare per il monitoraggio di molti piccoli oggetti.
Il tuo esempio di allocazione 1-char probabilmente ha 4-8 byte di overhead di gestione; se stai allocando molti di questi, forse solo 1/9 della tua memoria è effettivamente utile (in modo equivalente, l'utilizzo della memoria è appena aumentato di un fattore 9 per una data quantità di dati). Gli stessi 8 byte per una pagina 4Kb rappresentano un overhead piuttosto basso.