Scambia la gestione dello spazio durante il paging della domanda pura


12

Quella che segue è un dubbio che mi sono imbattuto mentre svolgevo un compito a casa del SO - tuttavia, sembra più basato sui concetti di una semplice domanda di codifica, quindi IMHO non penso che il tag dei compiti a casa sia appropriato per questo.

In uno schema di paging della domanda pura per più processi in esecuzione contemporaneamente, data una quantità fissa di RAM e memoria di scambio, ciò che accade nei seguenti 2 casi scrive lo spazio di scambio, quando

  1. Un processo riscontra un errore di pagina e non ci sono frame liberi disponibili nella RAM, quindi è necessario scrivere una delle pagine del blocco di Kernel Frames del processo da scambiare (per semplicità, non sto prendendo in considerazione la copia caso di scrittura). In modo esplicito, dove nello spazio di swap dovrebbe essere scritto questo frame e quali strutture di dati devono essere aggiornate per questo?

  2. Quando un processo ha bisogno di effettuare il page-in di una determinata pagina, dove appare nella memoria di Swap e come può sapere se quella particolare pagina è presente in Swap?

Come puoi ben immaginare, ho difficoltà a capire in che modo gestire lo spazio Swap durante lo schema di gestione della domanda pura e quali strutture di dati sarebbero essenziali. Sarebbe bello se potessi fare riferimento a qualsiasi link nella tua risposta (ho cercato in "Concetti relativi al sistema operativo - Ottava edizione di Silberschatz, non sono riuscito a trovare una risposta esplicita alla mia domanda).


3
Una bella domanda CS hard-core!
Dave Clarke,

Risposte:


8

Per rispondere a questa domanda, visiterò alcune informazioni preliminari. Il paging della domanda pura non può essere realizzato senza il supporto hardware. Tutte le architetture informatiche moderne supportano il paging, tuttavia molti hanno dettagli di implementazione diversi.

I processori x86 usano quella che viene chiamata tabella delle pagine per tenere traccia degli spazi degli indirizzi virtuali e delle mappature delle pagine, nonché dei bit sui privilegi di accesso e, più rilevante, indipendentemente dal fatto che quella pagina sia presente o meno nella memoria fisica. Le violazioni attivano errori di pagina intrappolati dal sistema operativo.

Per ulteriori informazioni a riguardo, consulta questo articolo .

Per rispondere alla domanda di scambio di pagine, dobbiamo prima visitare la domanda su come il sistema operativo tiene traccia di quali pagine vengono utilizzate da quale processo e come vengono allocate. Esistono molte diverse strutture dati che possono essere utilizzate per questo. Un array di bit piatti che indica se un frame è allocato o meno è unidirezionale. Elenchi collegati o pile è un altro. Con il paging della domanda pura, le pagine allocate non vengono effettivamente contrassegnate come presenti quando vengono allocate. Ciò ha l'effetto che nessun ariete fisico viene accantonato per un processo fino a quando non lo scrive. Una volta fatto, l'hardware genera un errore intercettato dal sistema operativo, quindi il sistema operativo utilizza un algoritmo di scambio se non ci sono pagine fisiche disponibili da assegnare alla pagina virtuale già allocata.

Per ulteriori informazioni sull'assegnazione dei frame di pagina, vedere qui . Lì vedrai una panoramica generale di alcune strutture dati adeguate.

Una volta implementato un algoritmo adatto per l'allocazione della pagina, è necessario sceglierne un altro per allocare spazio su disco per lo scambio. Windows, ad esempio, ha storicamente utilizzato un file flat nel filesystem per lo scambio di pagine. Immagino che per ogni nodo nella struttura dati che tenga traccia delle pagine allocate sia presente un puntatore associato a un offset nel file, indicando la posizione della pagina nel disco. I sistemi operativi simili a Unix hanno tradizionalmente utilizzato partizioni separate per lo scambio di pagine, che è probabilmente più veloce poiché non esiste un livello di filesystem.

È anche possibile separare le strutture di dati dell'algoritmo di scambio da quelle dell'algoritmo di allocazione, tuttavia i due sono correlati, quindi probabilmente ciò non avviene spesso.

Spero che risponda alla tua domanda nonostante la relativa brevità con cui l'ho trattata. Ho scoperto che il modo migliore per conoscere i sistemi operativi è quello di immergersi nei dettagli specifici dell'architettura a volte sgradevoli che possono essere trovati in siti come wiki.osdev.org e www.osdever.net che si occupano specificamente della creazione di sistemi operativi per hobby e offrono eccellenti tutorial su tali dettagli.


Sì, ora capisco come i dettagli delle strutture dati ecc. Possano variare in modo selvaggio tra i sistemi operativi - +1 per i collegamenti a osdev.org!
TCSGrad
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.