Hva er forskjellen mellom sidestørrelse og sidetabellinngangsstørrelse?

Beste svaret

Vel, sidestørrelse er den plassen som trengs av 1 side. (Det er ganske enkelt )

For å ha litt bakgrunn her, er en sidetabell en tabell over konverteringer fra virtuelle til fysiske adresser som operativsystemet bruker til kunstig øke den totale mengden hovedminne som er tilgjengelig i et system. Fysisk minne er de faktiske bitene som ligger på adresser i minnet (DRAM), virtuelt minne er der operativsystemet ligger til prosesser for å fortelle dem hvor det er for å gjøre ting som tillater 2 ^ 64 bits adresseplass til tross for at 2 ^ 34 bits er det mest RAM som vanligvis brukes. (2 ^ 32 bits er 4 gigabyte, så 2 ^ 34 er 16 GB.)

Nå er de fleste standard sidetabellstørrelser 4096 kb for hver prosess, men antall sidetabelloppføringer kan øke hvis prosessen trenger mer prosessplass. Sidetabellstørrelser kan i utgangspunktet også tildeles mindre eller større mengder eller minne, det er bare at 4 kb vanligvis er den beste størrelsen for de fleste prosesser. Så sidetabelloppføringsstørrelse ville akkurat den rette mengden plass til å holde en hvilken som helst adresse i et 32-biters adresserom.

La oss se på et eksempel her: Vurder et system med et 32-biters logisk adresseområde. størrelse i et slikt system er 4 KB (212), så kan en sidetabell bestå av opptil 1 million oppføringer (232/212). Forutsatt at hver oppføring består av 4 byte , hver prosess kan trenge opptil 4 MB fysisk adresseplass bare for sidetabellen.

Hvordan forstå den fullt ut?

Svar: 4 byte (32 bits) ) er nøyaktig riktig mengde plass til å ha en hvilken som helst adresse i et 32-biters adresserom. Fordi 1 million oppføringer på 4 byte hver gir 4 MB, kan en prosess «trenge» opptil 4 MB fysisk adresseplass.

Svar

A side ta ble vedlikeholdes av operativsystemet på prosessbasis. Hver prosess har sin egen sidetabell , og det er derfor vi ikke trenger å lagre noen prosessidentifikator (er) i sidetabellen. Sidetabell kartlegger et gitt logisk / virtuelt sidetall til faktisk fysisk ramme / sideadresse.

Den logiske adressen for en minnereferanse er av formen:

Logisk adresse:

Sidenummer (virtuelt sidetall) brukes til å utføre oppslag i sidetabellen og få basisadressen til den fysiske rammen den er kartlagt til. Rammens baseadresse (f) blir så kombinert med forskyvning inn på siden (d) for å få den fysiske minnerammeadressen som:

f = sidetabell [p]

Fysisk adresse:

Vurder nå et system med:

1. logisk adresseplass: 32-bit 2. sidestørrelse: 4KB (2 ^ 12) 3. sidetabelloppføringsstørrelse: 4 byte 4. fysisk minne: 2 GB

Vær oppmerksom på at 4 byte i en sidetabelloppføring lagrer effektivt flere typer informasjon bortsett fra basisadressen til den fysiske rammen. Denne informasjonen kan være for minnebeskyttelse (gyldig / ugyldig bit), type tilgang (lese / skrive), bokføring osv. Så når Jeg refererer til fysisk rammeadresse (f), jeg refererer faktisk til denne spesielle delen av oppføringen med 4 byte.

La oss beregne størrelsen på en sidetabell:

Størrelse på sidetabellen = (Antall oppføringer * størrelse på hver oppføring).

Gitt parametrene ovenfor vil en 32-biters logisk adresse bli delt inn i:

eller

.

Vi kan nå beregne at antall oppføringer i sidetabellen (totalt virtuelle sidetall) kan være så store som 2 ^ 20. Derfor vil størrelsen på sidetabellen være:

(2 ^ 20) * 4bytes = 4 MB plass (per prosess).

Så mye plass vil det være nødvendig i fysisk minne for sidetabellen for hver prosess. Ikke glem at vi bare har 2 GB hovedminne, og å ha 4 MB av denne plassen til sidetabell for hver prosess er kanskje ikke en god ide. Dessuten kan det hende at mange av de virtuelle adressene ikke har noen fysisk sideadresse tilordnet dem. Men , fremdeles vil sidetabellstørrelsen være stor. Selv om den «gyldige» biten ikke er angitt for et virtuelt sidetall, må det finnes et spor for sidetabellen.

I tilfelle delt minne, å ha en sidetabell per prosess vil kreve en oppføring av den samme fysiske siden i sidetabellen for hver prosess som har delt tilgang til den siden. Dermed vil systemet ende opp med å beholde flere oppføringer for den samme fysiske rammeadressen. Ikke veldig god bruk av fysisk minne.

Vi kan også forstå at en sidetabell for hver prosess vil inneholde en oppføring per virtuell adresse. Størrelsen på tabellen er dermed proporsjonal med størrelsen på logisk / virtuell adresseplass som faktisk kan vise seg å være enorm.

Målet vårt er å redusere / optimalisere mengden fysisk minne som kreves for å lagre sidetabellene. Invertert sidetabell er en slik løsning.

Invertert sidetabell er en global sidetabell som vedlikeholdes av operativsystemet for alle prosesser. Det er bare en sidetabell i hele systemet, noe som betyr at ytterligere informasjon må lagres i sidetabellen for å identifisere sidetabelloppføringer som tilsvarer hver prosess.

Den lagrer en oppføring per fysisk ramme, og er en lineær matrise der innholdet på hvert sted er og indeksen til hvert sted er den fysiske rammeadressen. Formelen endres nå:

= sidetabell [f]

Dette medfører straks at oppslag ikke lenger kan skje på det virtuelle sidenummeret. Hele tabellen må søkes opp for oppføring for å finne en samsvarende oppføring som har pid lik «id» og virtuelt sidetall lik «p». Indeksplasseringen som tilsvarer samsvaret er den fysiske rammeadressen (f), som deretter kombinert med forskyvningen (d) gir den fysiske adressen.

Vi kan enkelt utlede den oppslagstiden på en omvendt side. tabellen kan være betydelig høyere sammenlignet med en enkel sidetabell .

Men fordi tabellen lagrer en oppføring per fysisk rammeadresse og det er en enkelt sidetabell i hele systemet, har mengden minne som brukes av den inverterte sidetabellen redusert betydelig. Hvordan?

Vurder de samme parameterne igjen:

1. logisk adresseplass: 32-biters 2. sidestørrelse: 4KB (2 ^ 12) 3. sidetabelloppføringsstørrelse: 4 byte. 4. fysisk minne: 2 GB (2 ^ 31)

Antall oppføringer i sidetabellen = Antall fysiske sider =

(2 ^ 31) / (2 ^ 12) = 2 ^ 19 fysiske sider eller rammer.

La oss si at vi bruker 1 byte-prosessidentifikatorer. Størrelsen på hver sidetabelloppføring vil være:

8 bits (PID) + 20bits ( virtuelt sidenummer) + 4bits (tilgangsinformasjon) = 32 bits = 4 byte.

Sidetabellens størrelse = (2 ^ 19) * 4 = 2MB for hele systemet.

Ytelse av inverterte sidetabeller adresseres vanligvis gjennom hashede sidetabeller. Men det er en ulempe ved å bruke inverterte sidetabeller bortsett fra ytelse. Det er delt minne.

Fordi det er en og bare en oppføring i sidetabellen per fysisk ramme, og som inneholder nøyaktig ett virtuelt sidetall, kan vi ikke lenger kartlegge den samme fysiske rammen til flere virtuelle sidetall i forskjellige prosesser. Det er måter rundt dette, men ikke klar over detaljene å skrive her .

Kilde – Operativsystemkonsepter (Silberschatz et al)

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *