Het berekenen van een pagingadres omvat het vertalen van een logisch adres (het adres dat door het programma wordt gebruikt) naar een fysiek adres (het adres in het hoofdgeheugen). Deze vertaling wordt afgehandeld door de Memory Management Unit (MMU). Het proces is afhankelijk van de specifieke kenmerken van het oproepsysteem, maar de algemene stappen zijn:
1. Verdeel het logische adres in delen:
Het logische adres is verdeeld in twee delen:
* Paginanummer (PN): Dit geeft aan naar welke pagina van de logische adresruimte het programma verwijst. Het aantal bits dat voor het paginanummer wordt gebruikt, is afhankelijk van de paginagrootte en de grootte van de logische adresruimte.
* Pagina-offset (PO): Dit geeft de offset aan binnen de pagina waarnaar wordt verwezen. Het aantal bits dat wordt gebruikt voor de pagina-offset wordt bepaald door de paginagrootte (een paginagrootte van 4 KB gebruikt bijvoorbeeld 12 bits voor de offset omdat 2
12
=4096).
Voorbeeld: Laten we zeggen dat we een 32-bits logisch adres hebben en een paginagrootte van 4 KB (2
12
bytes).
* Pagina-offset (PO): 12 bits (2
12
=4096 bytes)
* Paginanummer (PN): 20 bits (32 - 12 =20 bits)
2. Raadpleeg de paginatabel:
Het paginanummer (PN) wordt gebruikt als index in de paginatabel. De paginatabel is een gegevensstructuur die wordt onderhouden door het besturingssysteem en die logische pagina's aan fysieke frames toewijst. Elke vermelding in de paginatabel bevat:
* Framenummer (FN): Het nummer van het fysieke frame in het hoofdgeheugen waar de corresponderende pagina zich bevindt.
* Geldig/ongeldig bit: Geeft aan of de pagina zich momenteel in het hoofdgeheugen bevindt (geldig) of niet (ongeldig – waarschijnlijk op secundaire opslag). Er kunnen ook andere vlaggen aanwezig zijn (bijvoorbeeld vuil bit, beschermingsbits).
3. Construeer het fysieke adres:
Als de paginatabelinvoer voor de gegeven PN geldig is, wordt het fysieke adres opgebouwd door het framenummer (FN) en de pagina-offset (PO) aan elkaar te koppelen.
* Fysiek adres =Framenummer (FN) || Pagina-offset (PO)
Voorbeeld (vervolg):
Laten we zeggen dat het logische adres `0x0000FFFF` is.
* PO: `0xFFFF` (12 bits)
* PN: `0x0000` (20 bits)
De MMU gebruikt PN (`0x0000`) om het corresponderende item in de paginatabel op te zoeken. Laten we aannemen dat de paginatabelinvoer voor PN `0x0000` het volgende bevat:
* FN: `0x1000` (Dit is het framenummer in het fysieke geheugen)
* Geldige bit: 1 (geldig)
Daarom is het fysieke adres:
* Fysiek adres =`0x1000FFFF`
Paging op meerdere niveaus:
In systemen met grote adresruimten wordt paging op meerdere niveaus gebruikt. Hierbij zijn meerdere paginatabellen betrokken (bijvoorbeeld een paginamap die naar paginatabellen verwijst, die vervolgens naar fysieke frames verwijzen). Het proces is vergelijkbaar, maar vereist meerdere tabelopzoekingen om het uiteindelijke framenummer te bepalen.
Segmentatie:
Segmentatie is een ander geheugenbeheerschema dat het geheugen verdeelt in segmenten van variabele grootte. Paging en segmentatie kunnen ook worden gecombineerd. De adresberekening in deze schema's is complexer.
Samenvattend omvat de berekening van het pagingadres het gebruik van het logische adres om het corresponderende fysieke adres te vinden via een reeks tabelzoekopdrachten. De exacte details zijn afhankelijk van de specifieke architectuur en de implementatie van het geheugenbeheer van het besturingssysteem. |