La funzione di paging / memoria virtuale consente a un kernel di "virtualizzare" la memoria ai processi dello spazio utente. Il kernel può prendere le pagine dalla memoria fisica e disporle attraverso il paging in modo che appaiano contigui a un processo di spazio utente.
È possibile impostare un limite nella memoria di un processo spazio utente e se il processo va oltre si verifica un "errore di pagina", che provoca un'eccezione della CPU che rimbalza sul kernel. Questo impedisce al programma userspace di fare confusione con la memoria allocata al kernel o ad altri programmi, senza il permesso del kernel.
In genere i programmi di spazio utente chiedono al kernel di estendere questo limite tramite interfacce ben definite (chiamate dalle funzioni C malloc()
e free()
per esempio.). Il kernel è responsabile di tenere traccia della quantità e della memoria allocata da un programma.
Questo meccanismo di "errore di pagina" può anche consentire al kernel di scambiare la pagina a cui il processo stava tentando di accedere con uno dal disco, se il kernel è in grado di eseguire l'overprovisioning della memoria (e sia Windows che Linux supportano questo), quindi perché si chiama swapping. Se l'accesso alla memoria non era effettivamente valido (ovvero il processo sta tentando di accedere alla memoria non prima richiesto), in genere il processo verrà interrotto con un SIGSEGV.
Pertanto, lo "scambio" è una funzione aggiuntiva (in Linux è possibile disabilitarla completamente se si desidera) che dipende dalla memoria virtuale / dal paging, ma non è necessario solo perché una CPU ha memoria virtuale / paging. I concetti non sono gli stessi ma lo scambio dipende dall'esistenza di paging / memoria virtuale.
Inoltre, dopo aver letto più da vicino la tua domanda, "paging" è talvolta usato come sinonimo di "scambio" - ma non ho mai sentito parlare di "scambio", il che significa che l'intera memoria del processo viene scambiata contro "paging" che significa solo una parte di viene scambiato.
Ma allora perché Linux ha bisogno di una partizione di swap? Se la memoria fisica è piena, alcuni processi verranno esternalizzati sul disco rigido e un nuovo processo verrà mappato dalla memoria virtuale alla memoria fisica.
La "memoria virtuale" è la memoria fisica, semplicemente "rimappata". L'hardware MMU non può essere mappato direttamente su alcun dispositivo di archiviazione. La MMU può generare un errore che dice al kernel che un processo ha tentato di accedere alla memoria che non avrebbe dovuto - e il kernel può usare questo meccanismo per vedere che un processo vuole qualcosa dal disco che pensava fosse in memoria e quindi fare il " scambiare". Il punto è che è il sistema operativo che decide di salvare le pagine su disco in modo che possa usare quelle pagine per altri processi, non l'hardware.