Vad är skillnaden mellan sidstorlek och sidstorlekens inmatningsstorlek?

Bästa svaret

Nåväl, sidstorleken är det utrymme som 1 sida behöver. (Det är ganska enkelt )

För att ha lite bakgrund här är en sidtabell en tabell över konverteringar från virtuella till fysiska adresser som operativsystemet använder för att artificiellt öka den totala mängden tillgängligt huvudminne i ett system. Fysiskt minne är de faktiska bitarna som finns på adresserna i minnet (DRAM), virtuellt minne är där operativsystemet ligger till processer för att berätta var det är för att göra saker som tillåter 2 ^ 64 bitar adressutrymme trots att 2 ^ 34 bitar är det mest RAM som normalt används. (2 ^ 32 bitar är 4 gigabyte, så 2 ^ 34 är 16 GB.)

Nu är de flesta standard sidtabellstorlekar 4096 kb för varje process, men antalet sidtabellposter kan öka om processen behöver mer processutrymme. Sidtabellstorlekar kan initialt också tilldelas mindre eller större mängder eller minne, det är bara att 4 kb vanligtvis är den bästa storleken för de flesta processer. Så sidstorlekens poststorlek skulle exakt rätt utrymme för att hålla en adress i ett 32-bitars adressutrymme.

Låt oss överväga ett exempel här: Tänk på ett system med ett 32-bitars logiskt adressutrymme. Om sidan storleken i ett sådant system är 4 kB (212), då kan en sidtabell bestå av upp till 1 miljon poster (232/212). Förutsatt att varje post består av 4 byte , varje process kan behöva upp till 4 MB fysiskt adressutrymme för enbart sidtabellen.

Hur förstår man det fullständigt?

Svar: 4 byte (32 bitar) ) är exakt rätt mängd utrymme för att hålla en adress i ett 32-bitars adressutrymme. Eftersom 1 miljon poster med 4 byte vardera gör 4 MB kan en process ”behöva” upp till 4 MB fysiskt adressutrymme.

Svar

A sida ta ble underhålls av operativsystemet per process. Varje process har sin egen sidtabell , och det är därför vi inte behöver lagra någon processidentifierare i sidtabellen. Sidtabellen mappar ett givet logiskt / virtuellt sidnummer till faktisk fysisk ram / sidadress.

Den logiska adressen för en minnesreferens har formen:

Logisk adress:

Sidnummer (virtuellt sidnummer) används för att utföra uppslag i sidtabellen och få basadressen till den fysiska ram som den mappas till. Ramens basadress (f) kombineras sedan med förskjutning till sidan (d) för att få den fysiska minnesramadressen som:

f = sidtabell [p]

Fysisk adress:

Tänk nu på ett system med:

1. logiskt adressutrymme: 32-bitars 2. sidstorlek: 4KB (2 ^ 12) 3. sidstorlekens poststorlek: 4 byte 4. fysiskt minne: 2GB

Observera att 4 byte i en sidtabellpost lagrar effektivt flera typer av information förutom basadressen för den fysiska ramen. Denna information kan vara för minneskydd (giltig / ogiltig bit), typ av åtkomst (läs / skriv), bokföring etc. Så när Jag hänvisar till den fysiska ramadressen (f), jag hänvisar faktiskt till denna speciella del av posten med 4 byte.

Låt oss beräkna storleken på en sidtabell:

Storlek på sidtabellen = (Antal poster * storlek på varje post).

Med tanke på ovanstående parametrar kommer en 32-bitars logisk adress att delas upp i:

eller

.

Vi kan nu beräkna att antalet poster i sidtabellen (totalt antal virtuella sidor) kan vara så stora som 2 ^ 20. Följaktligen skulle sidtabellens storlek vara:

(2 ^ 20) * 4bytes = 4 MB utrymme (per process).

Så mycket utrymme krävs i fysiskt minne för sidtabellen för varje process. Glöm inte att vi bara har 2 GB huvudminne, och att ha 4 MB av det utrymmet för sidtabell för varje process är kanske inte en bra idé. Många av de virtuella adresserna kanske inte har någon fysisk sidadress mappad till dem. Men , fortfarande är sidtabellstorleken stor. Även om den ”giltiga” biten inte är inställd för ett virtuellt sidnummer måste en plats för den finnas i sidtabellen.

Vid delad minne, att ha en sidtabell per process kommer att kräva inmatning av samma fysiska sida i sidtabellen för varje process som har delad åtkomst till den sidan. Således kommer systemet att sluta behålla flera poster för samma fysiska ramadress. Inte ett särskilt bra utnyttjande av fysiskt minne.

Vi kan också förstå att en sidtabell för varje process kommer att innehålla en post per virtuell adress. Storleken på tabellen är således proportionell mot storleken på logisk / virtuell adressutrymme som faktiskt kan visa sig vara enormt.

Vårt mål är att minska / optimera mängden fysiskt minne som krävs för att lagra sidtabellerna. Inverterad sidtabell är en sådan lösning.

Inverterad sidtabell är en global sidtabell som underhålls av operativsystemet för alla processer. Det finns bara en sidtabell i hela systemet, vilket innebär att ytterligare information måste lagras i sidtabellen för att identifiera sidtabellposter som motsvarar varje process.

Den lagrar en post per fysisk ram och är en linjär matris där innehållet på varje plats är och indexet för varje plats är den fysiska ramadressen. Formeln ändras nu:

= sidtabell [f]

Detta innebär genast att uppslag inte längre kan ske på det virtuella sidnumret. Hela tabellen måste sökas in post-för-post för att hitta en matchande post med pid lika med ”id” och virtuellt sidnummer lika med ”p”. Indexplatsen som motsvarar matchningen är den fysiska ramadressen (f), som sedan i kombination med förskjutningen (d) ger den fysiska adressen.

Vi kan enkelt dra slutsatsen att uppslagstiden på en inverterad sida tabellen kan vara betydligt högre jämfört med en enkel sidtabell .

Eftersom tabellen lagrar en post per fysisk ramadress och det finns en enstaka sidtabell i hela systemet har mängden minne som används av den inverterade sidtabellen minskat avsevärt. Hur?

Tänk igenom samma parametrar igen:

1. logiskt adressutrymme: 32-bitars 2. sidstorlek: 4KB (2 ^ 12) 3. sidstorlekens inmatningsstorlek: 4 byte. 4. fysiskt minne: 2 GB (2 ^ 31)

Antal poster i sidtabellen = Antal fysiska sidor =

(2 ^ 31) / (2 ^ 12) = 2 ^ 19 fysiska sidor eller ramar.

Låt oss säga att vi använder 1 byte-processidentifierare. Storleken på varje sidtabellpost skulle vara:

8 bitar (PID) + 20 bitar ( virtuellt sidnummer) + 4 bitar (åtkomstinformation) = 32 bitar = 4 byte.

Sidans tabellstorlek = (2 ^ 19) * 4 = 2MB för hela systemet.

Prestanda för inverterade sidtabeller adresseras vanligtvis via hashade sidtabeller. Men det finns en nackdel med att använda inverterade sidtabeller förutom prestanda. Det är delat minne.

Eftersom det finns en och en enda post i sidtabellen per fysisk ram, och som innehåller exakt ett virtuellt sidnummer, kan vi inte längre mappa samma fysiska ram till flera virtuella sidnummer i olika processer. Det finns vägar runt detta, men inte medvetna om detaljerna att skriva här .

Källa – Operativsystembegrepp (Silberschatz et al)

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *