Beräkning av en personsökningsadress innebär att översätta en logisk adress (adressen som används av programmet) till en fysisk adress (adressen i huvudminnet). Denna översättning hanteras av Memory Management Unit (MMU). Processen beror på specifikationerna i sökningssystemet, men de allmänna stegen är:
1. Dela den logiska adressen i delar:
Den logiska adressen är uppdelad i två delar:
* Sidnummer (PN): Detta indikerar vilken sida i det logiska adressutrymmet programmet refererar till. Antalet bitar som används för sidnumret beror på sidstorleken och storleken på det logiska adressutrymmet.
* Page Offset (PO): Detta indikerar förskjutningen på sidan som hänvisas till. Antalet bitar som används för sidförskjutningen bestäms av sidstorleken (t.ex. en 4KB sidstorlek använder 12 bitar för offset eftersom 2
12
=4096).
Exempel: Låt oss säga att vi har en 32-bitars logisk adress och en sidstorlek på 4KB (2
12
byte).
* Page Offset (PO): 12 bitar (2
12
=4096 byte)
* Sidnummer (PN): 20 bitar (32 - 12 =20 bitar)
2. Se sidtabellen:
Sidnumret (PN) används som ett index i sidtabellen. Sidtabellen är en datastruktur som upprätthålls av operativsystemet som kartlägger logiska sidor till fysiska ramar. Varje post i sidtabellen innehåller:
* ramnummer (FN): Antalet fysiska ram i huvudminnet där motsvarande sida finns.
* giltig/ogiltig bit: Anger om sidan för närvarande är i huvudminnet (giltigt) eller inte (ogiltig - troligen vid sekundär lagring). Andra flaggor kan också vara närvarande (t.ex. smutsiga bitar, skyddsbitar).
3. Konstruera den fysiska adressen:
Om sidtabellposten för den givna PN är giltig konstrueras den fysiska adressen genom att sammanlätta ramnummer (FN) och sidförskjutningen (PO).
* Fysisk adress =ramnummer (FN) || Sidförskjutning (PO)
Exempel (Fortsättning):
Låt oss säga att den logiska adressen är `0x0000ffff`.
* po: `0xffff` (12 bitar)
* pn: `0x0000` (20 bitar)
MMU använder PN (`0x0000`) för att leta upp motsvarande post i sidtabellen. Låt oss anta sidtabellposten för PN `0x0000` innehåller:
* fn: `0x1000 '(detta är ramnummer i fysiskt minne)
* giltig bit: 1 (giltig)
Därför är den fysiska adressen:
* Fysisk adress =`0x1000ffff`
Sökning på flera nivåer:
I system med stora adressutrymmen används flera nivåer. Detta involverar flera sidtabeller (t.ex. en sidkatalog som pekar på sidtabeller, som sedan pekar på fysiska ramar). Processen är liknande men kräver flera tabelluppslag för att bestämma det slutliga ramnummer.
Segmentering:
Segmentering är ett annat minneshanteringsschema som delar upp minnet i segment med variabel storlek. Sökning och segmentering kan också kombineras. Adressberäkningen i dessa scheman är mer komplex.
Sammanfattningsvis involverar personsökadressberäkning att använda den logiska adressen för att hitta motsvarande fysiska adress genom en serie tabelluppslag. De exakta detaljerna beror på den specifika arkitekturen och operativsystemets implementering av minneshantering.