Paginering en virtueel geheugen

Leer hoe een besturingssysteem geheugen in pagina's verdeelt en paginatabellen gebruikt om elk adres te vertalen dat een programma gebruikt. Volg adresvertalingen via de TLB, de kleine hardwarecache die ze versnelt, en via paginatabellen met meerdere niveaus, die ook bij 64-bitsadresruimten de tabellen klein houden. Bekijk vervolgens hoe programma's door wisselen meer geheugen kunnen gebruiken dan de computer heeft: handel paginafouten af, vergelijk beleid voor paginavervanging zoals FIFO, LRU en het klokalgoritme aan de hand van uitgewerkte paginaverwijzingsreeksen, en herken overmatig wisselen van pagina's en de oplossingen daarvoor.

GemiddeldLes 4 van 9 in Cursus Besturingssystemen: processen, geheugen, threads en bestandssystemen

Wat je leert

  1. Verdeel geheugen in pagina's en paginaframes van vaste grootte en gebruik een paginatabel per proces om elk virtueel adres in een fysiek adres om te zetten.
    • Verdeel een adresruimte in pagina's en koppel die aan paginaframes
      Leg uit waarom paginering segmenten van variabele grootte vervangt en splits een virtueel adres in een paginanummer en een offset.
    • Vertaal een adres met een lineaire paginatabel
      Lees paginatabelvermeldingen, volg de stappen van een virtueel naar een fysiek adres en bereken hoeveel geheugen een paginatabel inneemt.
  2. Leg uit hoe een adresvertaalbuffer recente vertalingen cachet, voorspel aan de hand van het toegangspatroon van een programma hoe vaak die een treffer oplevert en zorg voor correcte vertalingen bij missers en contextwisselingen.
    • Volg het verloop van een TLB-treffer en een TLB-misser
      Volg de stappen van de hardware met een adresvertaalbuffer en gebruik lokaliteit om te voorspellen hoe vaak een zoekopdracht een treffer oplevert.
    • Handel TLB-missers en contextwisselingen af
      Vergelijk door hardware en door software beheerde TLB's, houd vertalingen correct bij contextwisselingen en bereken het TLB-bereik.
  3. Bereken waarom lineaire paginatabellen geheugen verspillen, vergelijk structuren die ze verkleinen en vertaal adressen via paginatabellen met meerdere niveaus, waarbij je geheugenbesparing afweegt tegen tragere afhandeling van missers.
    • Vergelijk manieren om een paginatabel te verkleinen
      Weeg grotere pagina's, een combinatie van segmentatie en paginering en omgekeerde paginatabellen af tegen het geheugengebruik van een lineaire tabel.
    • Vertaal adressen met een paginatabel met twee niveaus
      Splits een virtueel adres in directory-index, tabelindex en offset en doorloop de paginadirectory en paginatabel tot een fysiek adres.
    • Schaal paginatabellen op voor 64-bitsadressen
      Bereken hoeveel niveaus een paginatabel nodig heeft en leg uit hoe x86-64-tabellen met vier en vijf niveaus en grote pagina's in de praktijk werken.
  4. Bewaar pagina's die niet in het geheugen passen op een schijf of SSD, volg een paginafout stap voor stap, schat de kosten en gebruik paginafouten doelbewust voor uitgestelde toewijzing en kopiëren bij schrijven.
    • Wissel pagina's uit en handel een paginafout af
      Leg wisselruimte en het aanwezigheidsbit uit en volg de hardware en het besturingssysteem tijdens een paginafout.
    • Schat de kosten van paginafouten en houd paginaframes vrij
      Bereken de effectieve toegangstijd met paginafouten en leg uit hoe het besturingssysteem vooraf paginaframes vrijmaakt en gewijzigde pagina's terugschrijft.
    • Gebruik paginafouten voor uitgestelde toewijzing, kopiëren bij schrijven en gedeeld geheugengebruik
      Leg uit hoe besturingssystemen het geldigheidsbit, aanwezigheidsbit en de beschermingsbits gebruiken om werk uit te stellen en geheugen veilig te delen.
  5. Simuleer en vergelijk vervangingsbeleid op paginaverwijzingsreeksen, leg uit hoe bestaande systemen LRU benaderen en herken en verhelp overmatig wisselen van pagina's.
    • Vergelijk de prestaties van vervangingsbeleid met die van het optimale beleid
      Tel treffers en missers in een paginaverwijzingsreeks, deel missers in en gebruik het optimale beleid als maatstaf.
    • Vergelijk FIFO, willekeurige paginavervanging en LRU
      Simuleer de klassieke beleidsvormen op dezelfde paginaverwijzingsreeks, leg de anomalie van Belady uit en kies beleid voor een gegeven toegangspatroon.
    • Benader LRU met gebruiksbits en het klokalgoritme
      Voer het klokalgoritme uit met gebruiks- en wijzigingsbits en leg uit waarom bestaande systemen LRU benaderen in plaats van exact te implementeren.
    • Herken overmatig wisselen van pagina's en wijs paginaframes toe
      Leg overmatig wisselen van pagina's uit met het werkverzamelingsmodel en kies oplossingen zoals toelatingsregeling, regeling op basis van de paginafoutfrequentie en de OOM-killer.

Paginering en virtueel geheugen: uitleg

5 hoofdstukken

1

Vertaal virtuele adressen met paginering

Elke instructie die wordt opgehaald en elke lees- en schrijfbewerking begint met een adres in de virtuele ruimte van een proces. Met paginering kan het besturingssysteem de inhoud in afzonderlijke fysieke paginaframes plaatsen, terwijl het programma aaneengesloten adressen blijft zien. Je splitst adressen, volgt een opzoeking in een lineaire paginatabel en onderscheidt het adres van een koppelingsvermelding van het adres van de gevraagde gegevens. Dezelfde berekeningen laten ook zien hoeveel ruimte paginering kost.

1.1 Pagina's, paginaframes en adresvelden

Een programma gebruikt virtuele adressen. Het fysieke geheugen bevat de bytes in paginaframes. Paginering verdeelt de virtuele adresruimte in even grote pagina's en het fysieke geheugen in paginaframes van dezelfde grootte. Het besturingssysteem kan elke pagina in elk vrij paginaframe plaatsen. Pagina 0 kan in paginaframe 12 staan en pagina 1 in paginaframe 3; het programma ziet nog steeds aaneengesloten virtuele adressen.

Dit neemt externe fragmentatie bij afzonderlijke paginatoewijzingen weg. Bij segmenten van variabele grootte kan een aanvraag mislukken doordat de vrije ruimte is verdeeld in gaten die te klein zijn. Bij paginering past een vrij paginaframe altijd bij één pagina. Een dunbezette adresruimte kan een groot gat tussen heap en stack laten zonder daarvoor fysieke paginaframes te reserveren.

Meet ongebruikte ruimte binnen pagina's

Paginering kent nog steeds interne fragmentatie. Een gebied moet hele pagina's innemen, ook als de laatste pagina gedeeltelijk leeg is. Een gebied van 9.000 bytes heeft drie pagina's van 4 KiB nodig: twee pagina's bevatten 8.192 bytes, zodat 808 bytes voor de derde overblijven. De toewijzing beslaat 12.288 bytes, waarvan 3.288 bytes ongebruikt zijn. KiB betekent 1.024 bytes; MiB betekent 1.048.576 bytes. Sommige boeken gebruiken KB en MB voor deze binaire hoeveelheden.

Splits het adres in velden

Een adres duidt zowel een pagina als een byte daarbinnen aan. Bij een paginagrootte van 2k bytes vormen de lage k bits de offset. De overige hoge bits vormen het virtuele paginanummer, of VPN. Een adres van 32 bits heeft bij pagina's van 4 KiB 12 offsetbits en 20 VPN-bits. In die adresruimte zijn 220 virtuele pagina's mogelijk.

Bij 0x00403A7C geven de laatste drie hexadecimale cijfers offset 0xA7C, omdat elk hexadecimaal cijfer vier bits vertegenwoordigt. De eerste vijf cijfers geven VPN 0x00403. Deze verkorte werkwijze werkt hier omdat de veldgrens tussen hexadecimale cijfers valt. Tel bij een andere paginagrootte eerst de bits voordat je de geschreven hexadecimale waarde splitst.

Decimaal rekenen geeft hetzelfde resultaat:

VPN=⌊VA/P⌋,offset=VA mod P

Hier is P de paginagrootte in bytes. Bij pagina's van 1.024 bytes heeft virtueel adres 5.000 VPN 4 en offset 904. Vier volledige pagina's zijn samen goed voor 4.096 bytes; de resterende 904 bytes bepalen de plaats van het adres binnen pagina 4. Offsets beginnen bij nul, dus lopen de offsets van deze pagina van 0 tot en met 1.023.

De vertaling vervangt het VPN door een fysiek paginaframenummer. De offset wordt ongewijzigd overgenomen: byte 904 van een virtuele pagina is byte 904 van het bijbehorende paginaframe. Het paginanummer alleen is geen byteadres. Vermenigvuldig een paginaframenummer met de paginagrootte om het beginadres van het paginaframe te vinden en tel vervolgens de offset erbij op.

Kies een paginagrootte

Grotere pagina's verminderen het aantal geheugenkoppelingen en laten elke gecachete vertaling meer bytes bestrijken. Ze verspillen ook meer ruimte in gedeeltelijk gebruikte pagina's en verplaatsen meer gegevens wanneer een pagina wordt geladen. Een veelgebruikte basispaginagrootte is 4 KiB; andere systemen gebruiken 16 KiB of 64 KiB. x86-64 ondersteunt ook grote geheugenkoppelingen, zoals pagina's van 2 MiB.

Belangrijkste punten

  • Een virtuele pagina en een fysiek paginaframe zijn even groot.
  • Elke pagina past in elk vrij paginaframe; aangrenzende virtuele pagina's hoeven niet in aangrenzende paginaframes te staan.
  • De lage adresbits geven de offset, die bij vertaling behouden blijft.
  • Rond toewijzingen naar boven af op hele pagina's wanneer je interne fragmentatie berekent.
  • Grotere pagina's verminderen de overhead van geheugenkoppelingen, maar vergroten mogelijke verspilling.

1.2 Een lineaire paginatabel lezen

Een paginatabel legt de geheugenkoppelingen van een proces vast. In een lineaire paginatabel is het VPN de index van een array: vermelding 4 beschrijft virtuele pagina 4. Elk proces heeft een eigen tabel, zodat hetzelfde virtuele adres in verschillende processen naar verschillende fysieke bytes kan verwijzen. Bij een contextwisseling selecteert het besturingssysteem de tabel van het nieuwe proces via een paginatabelbasisregister.

Lees de toestand en rechten van een vermelding

Een paginatabelvermelding, of PTE, bevat een fysiek paginaframenummer (PFN) en besturingsinformatie. In het onderwijsmodel geeft een geldigheidsbit aan dat de pagina tot de adresruimte behoort; een aanwezigheidsbit geeft aan dat de inhoud in het fysieke geheugen aanwezig is. Beschermingsbits regelen lezen, schrijven, uitvoeren en gebruikerstoegang. Een wijzigingsbit legt schrijfbewerkingen vast sinds het voor het laatst is gewist. Een gebruiksbit legt gebruik vast sinds het voor het laatst is gewist; het heet ook een referentiebit.

Dit zijn begripsmatige rollen, geen garantie dat hardware overal hetzelfde is ingedeeld. x86 heeft geen afzonderlijk geldigheidsbit in een PTE. Als het aanwezigheidsbit is gewist, raadpleegt het besturingssysteem zijn eigen administratie om een ongebruikt adres te onderscheiden van een geldige pagina die elders is opgeslagen. Op x86 stelt de hardware het gebruiks- en wijzigingsbit in; het besturingssysteem beheert en wist ze.

Zoek de vermelding en de byte

Om een adres met een lineaire tabel te vertalen:

  1. Splits het virtuele adres in VPN en offset.
  2. Zoek de vermelding op tabelbasis+VPN×PTE-grootte.
  3. Controleer of de geheugenkoppeling bestaat, aanwezig is en deze toegang toestaat.
  4. Vorm het fysieke adres met PFN×paginagrootte+offset.
  5. Lees of schrijf de byte op dat fysieke adres.

Bij pagina's van 1.024 bytes geeft virtueel adres 5.000 VPN 4 en offset 904. Stel dat PTE 4 aanwezig is en de gevraagde leesbewerking toestaat, met PFN 9. Paginaframe 9 begint op 9.216, dus is het fysieke byteadres 10.120. Het adres van de tabel zelf vereist een afzonderlijke berekening: als vermeldingen 4 bytes innemen, ligt PTE 4 16 bytes na de tabelbasis.

Een hexadecimaal voorbeeld: pagina's van 4 KiB splitsen 0x00403A7C in VPN 0x403 en offset 0xA7C. Als de toegestane geheugenkoppeling PFN 0x1F2B5 bevat, is het fysieke adres 0x1F2B5A7C. De PTE staat op basis + 0x403 × 4 = basis + 0x100C. De offset toevoegen vormt een gegevensadres; het VPN met de vermeldingsgrootte vermenigvuldigen bepaalt de locatie van de PTE. Deze twee adressen hebben verschillende doelen.

Een mislukte controle veroorzaakt een exceptie. Het besturingssysteem kan een geldige, niet aanwezige pagina binnenhalen, met nullen gevuld geheugen leveren of een andere geldige geheugenkoppeling herstellen. Een ongeldig adres of verboden toegang veroorzaakt meestal een segmentatiefout. Een aanwezige pagina kan een schrijfbewerking nog steeds afwijzen als de bescherming schrijven verbiedt.

Tel tabelruimte en leesbewerkingen uit het geheugen

Lineaire tabellen zijn zelfs voor kleine processen kostbaar. Bij virtuele adressen van 32 bits en pagina's van 4 KiB heeft elke tabel 1.048.576 vermeldingen nodig. Bij 4 bytes per vermelding is dat 4 MiB per proces, inclusief vermeldingen voor ongebruikte virtuele pagina's. Honderd processen hebben alleen al voor deze tabellen 400 MiB nodig.

Ze voegen ook een opzoeking toe aan elke geheugenverwijzing. In een eenvoudig model zonder vertaalcache leest de processor één PTE en vervolgens de gevraagde gegevens: twee geheugentoegangen. Delen blijft mogelijk: twee processen kunnen hun afzonderlijke virtuele pagina's bewust aan hetzelfde PFN koppelen, zoals bij alleen-lezen-programmacode.

Belangrijkste punten

  • Een lineaire tabel is een array met het VPN als index.
  • PTE-locatie = tabelbasis+VPN×vermeldingsgrootte.
  • Fysiek adres = PFN×paginagrootte+offset.
  • Aanwezigheid en toegangsrecht beantwoorden verschillende vragen.
  • De tabelgrootte hangt af van de hele virtuele adresruimte, inclusief ongebruikte pagina's.
  • Afzonderlijke procestabellen kunnen bewust een fysiek paginaframe delen.
2

Versnel de adresvertaling met de TLB

Elke verwijzing via het geheugen vertalen zou vóór elke nuttige toegang een opzoeking toevoegen. Een TLB houdt recente vertalingen dicht bij de processor. Het succes hangt zowel af van de toegangsvolgorde als van de capaciteit, en de inhoud moet correct blijven wanneer processen wisselen of geheugenkoppelingen veranderen. Je volgt treffers en missers, schat de gemiddelde toegangstijd en brengt gecachete vertalingen in verband met het werk van het besturingssysteem.

2.1 TLB-treffers, missers en lokaliteit

Een adresvertaalbuffer, of TLB, is een kleine hardwarecache voor adresvertalingen in de geheugenbeheereenheid (MMU). De buffer bevat recente koppelingen van VPN naar PFN en toegangsinformatie. De buffer cachet vertalingen, terwijl een gegevenscache programmabytes bevat. Een programma kan in de ene cache een misser en in de andere een treffer hebben.

Volg treffers en missers

Bij een TLB-treffer haalt de MMU het PFN uit de gecachete vermelding, controleert de toegangsrechten en combineert het PFN met de ongewijzigde offset. De MMU hoeft de paginatabel niet te lezen. Ook bij een treffer moet de bescherming altijd worden afgedwongen. Het geldigheidsbit van de TLB geeft aan dat een gecachete vermelding bruikbaar is; het zegt niet of een virtuele pagina tot de adresruimte van het proces behoort.

Bij een TLB-misser moet het systeem de vertaling opzoeken in de paginatabel. Als de pagina aanwezig is en de toegang is toegestaan, plaatst het systeem de vertaling in de TLB en voltooit of herhaalt het de verwijzing. Er hoeft niets van de opslag te worden gelezen. Als de tabel daarentegen een ontbrekende geheugenkoppeling of verboden toegang aangeeft, moet het besturingssysteem een paginafout afhandelen. Een TLB-misser op zichzelf is geen paginafout.

Voorspel hergebruik met lokaliteit

TLB's kunnen veel minder vermeldingen bevatten dan er virtuele pagina's zijn, maar werken toch goed doordat programma's lokaliteit vertonen. Ruimtelijke lokaliteit betekent dat nabije adressen kort na elkaar worden gebruikt. Zodra één vertaling is gecachet, kunnen veel adressen binnen die pagina die gebruiken. Temporele lokaliteit betekent dat onlangs gebruikte adressen waarschijnlijk opnieuw worden gebruikt, zoals de instructies in een lus.

Neem 16.384 gehele getallen van elk vier bytes die achtereenvolgens in een array staan die op een paginagrens begint. Bij pagina's van 4 KiB bevat elke pagina 1.024 gehele getallen, zodat de array 16 pagina's beslaat. Als de TLB aanvankelijk leeg is en er geen storende vertalingen zijn, veroorzaakt het eerste gehele getal op elke pagina een misser. De volgende 1.023 op die pagina zijn treffers. In totaal zijn er 16 missers en 16.368 treffers, met een trefferpercentage van ongeveer 99,9%.

De toegangsvolgorde verandert dat resultaat. In C slaat int a[1024][1024] rijen achtereenvolgens op. Ga uit van gehele getallen van vier bytes, uitlijning op een paginagrens, pagina's van 4 KiB en een LRU-TLB met 64 vermeldingen. Elke rij neemt één pagina in. Doorlopen per rij levert één misser per rij op, oftewel 1.024 missers. Doorlopen per kolom bezoekt 1.024 verschillende pagina's voordat de eerste opnieuw aan bod komt. De vertaling daarvan is al verwijderd, dus zijn alle 1.048.576 arrayverwijzingen missers. De grootte van de array is onveranderd; de hergebruiksafstand verandert.

Bereken de gemiddelde kosten van treffers en missers

Het tijdmodel moet aangeven wat een treffer en een misser kosten. Stel dat een geheugentoegang 100 ns duurt, de TLB-opzoeking geen tijd toevoegt en een misser in een lineaire tabel één leesbewerking uit het geheugen toevoegt. Een treffer kost 100 ns en een met succes afgehandelde misser kost 200 ns. Bij een trefferpercentage van 98%:

EAT=0,98(100)+0,02(200)=102 ns

Dit gemiddelde omvat in beide gevallen de uiteindelijke gegevenstoegang. Als je alleen de extra PTE-leesbewerking als de volledige kosten van een misser telt, onderschat je het totaal. Bij tabellen met meerdere niveaus kan een misser meerdere leesbewerkingen uit tabellen vereisen, zodat lokaliteit nog belangrijker is.

Belangrijkste punten

  • De TLB slaat vertalingen en toegangsrechten op, geen programmagegevens.
  • Ook bij een treffer worden toegangsrechten afgedwongen.
  • Een TLB-misser kan zonder paginafout worden opgelost.
  • Nabije toegangen delen een vertaling; herhaalde toegangen gebruiken die opnieuw.
  • De toegangsvolgorde kan de TLB-misserfrequentie sterk veranderen.

2.2 Gecachete vertalingen correct houden

Bij een TLB-misser moet een vertaling worden opgezocht, maar architecturen verdelen dat werk verschillend. Bij een door hardware beheerde TLB, zoals op x86 en ARM, doorloopt de MMU de paginatabel vanaf de geselecteerde tabelbasis. De hardware bepaalt welke tabelvorm ze kan doorlopen. Als de geheugenkoppeling bruikbaar is, vult de hardware de vertaalcache zonder voor de gewone misser een afhandelaar van het besturingssysteem aan te roepen.

Een door software beheerde TLB, gebruikt in klassieke MIPS- en SPARC-ontwerpen, veroorzaakt bij een misser een exceptie. Een afhandelaar van het besturingssysteem vindt de geheugenkoppeling en voegt die met geprivilegieerde instructies toe. Dit geeft het besturingssysteem meer vrijheid in de tabelstructuur. Bij terugkeer uit deze exceptie wordt de instructie die de misser veroorzaakte opnieuw geprobeerd; bij terugkeer uit een systeemaanroep gaat de uitvoering normaal gesproken verder na de aanroep.

Houd de aanvulafhandelaar bereikbaar

De misserafhandelaar heeft betrouwbare toegang nodig tot zijn eigen instructies en gegevens. Als de afhandeling van een misser direct hetzelfde onopgeloste type misser binnen de afhandelaar veroorzaakt, kan de voortgang vastlopen. Ontwerpen voorkomen dit met geheugen zonder adresvertaling of permanent vastgezette vertalingen voor de noodzakelijke code en gegevens van de afhandelaar.

Selecteer de juiste adresruimte

Contextwisselingen brengen een ander probleem mee. Proces A kan VPN 7 aan paginaframe 20 koppelen, terwijl proces B VPN 7 aan paginaframe 90 koppelt. Als na de wisseling naar B de niet-gemarkeerde vermelding van A blijft staan, zou B naar het verkeerde paginaframe worden gestuurd. Het laden van de paginatabelbasis van B maakt een gecachete koppeling zonder identificatie op zichzelf niet veilig.

Eén oplossing is om bij een wisseling de relevante TLB-vermeldingen ongeldig te maken. Hun geldigheidsbits worden gewist, zodat het nieuwe proces de vermeldingen opnieuw moet vullen. Een andere oplossing voorziet vermeldingen van een adresruimte-identificatie (ASID). Bij het zoeken worden dan zowel de virtuele pagina als de bijbehorende adresruimte-identificatie vergeleken. x86 noemt die identificatie een procescontextidentificatie, of PCID. Vermeldingen voor meerdere adresruimten kunnen gecachet blijven, terwijl de hardware alleen die van de huidige context selecteert. Hergebruik van identificaties moet nog steeds worden beheerd, zodat een oude vermelding niet voor een nieuwe adresruimte wordt aangezien.

Maak gewijzigde geheugenkoppelingen ongeldig

Een wijziging van een PTE maakt ook een gecachete vertaling verouderd. Stel dat het besturingssysteem het schrijfrecht in het geheugen verwijdert, maar een beschrijfbare TLB-vermelding laat staan. De processor zou via die oude vermelding schrijfbewerkingen kunnen blijven toestaan. Het besturingssysteem moet de betrokken vertalingen ongeldig maken. Op een machine met meerdere processorkernen moet elke kern die de koppeling kan cachen meedoen. Deze coördinatie heet een TLB-shootdown.

Bereken het vertaalbereik

Naast correctheid is ook capaciteit van belang. Het TLB-bereik is de hoeveelheid geheugen die door de gecachete vertalingen wordt vertegenwoordigd:

bereik=vermeldingen×paginagrootte

Een TLB met 64 vermeldingen bereikt 256 KiB bij pagina's van 4 KiB en 128 MiB bij pagina's van 2 MiB. Het bereik beschrijft hoeveel geheugen kan worden gekoppeld, niet de capaciteit van het fysieke geheugen. Bestaande processors kunnen afzonderlijke TLB-capaciteiten voor verschillende paginagroottes hebben; deze berekening vergelijkt daarom een vast aantal vermeldingen.

Wanneer een TLB vol is, vervangt die een vertaling. LRU geeft de voorkeur aan onlangs gebruikte vermeldingen; willekeurige vervanging kiest zonder recent gebruik bij te houden. Een ronde langs één pagina meer dan past, is ongunstig voor LRU omdat elke vertaling wordt verwijderd vlak voordat die opnieuw nodig is.

Belangrijkste punten

  • Hardware of een afhandelaar van het besturingssysteem kan een TLB aanvullen.
  • ASID's onderscheiden identieke VPN's die tot verschillende adresruimten behoren.
  • Bij wijziging van een PTE moeten verouderde gecachete vertalingen ongeldig worden gemaakt.
  • Een TLB-shootdown coördineert het ongeldig maken over processorkernen heen.
  • Het bereik is gelijk aan het aantal vermeldingen maal de paginagrootte.
3

Maak paginatabellen kleiner

Grote virtuele adresruimten maken een volledige array van paginakoppelingen onpraktisch. Paginatabelstructuren besparen ruimte door koppelingen op verschillende manieren te ordenen of weg te laten. Je vergelijkt die keuzes, volgt een doorgang door twee niveaus en past dezelfde redenering met bitvelden toe op x86-64. Elke structuur weegt het geheugen voor koppelingen af tegen het werk dat nodig is wanneer de TLB een vertaling niet bevat; grote pagina's veranderen beide kanten van die afweging.

3.1 Alternatieven voor een volledige lineaire tabel

Een lineaire paginatabel reserveert één vermelding voor elke mogelijke virtuele pagina. De meeste processen gebruiken maar een klein deel van hun adresruimte: code en heap liggen dicht bij het ene uiteinde, de stack bij het andere en een groot gat scheidt ze. Een tabel met miljoenen ongeldige vermeldingen neemt nog steeds geheugen in. Om deze kosten te verlagen, verander je de paginagrootte, de tabelorganisatie of beide.

Verminder het aantal pagina's

Grotere pagina's verminderen het aantal VPN's. Bij een adresruimte van 32 bits en pagina's van 16 KiB vormen 14 bits de offset en 18 bits het VPN. Een lineaire tabel heeft dan 262.144 vermeldingen nodig. Bij 4 bytes per vermelding neemt die 1 MiB in, tegenover 4 MiB bij pagina's van 4 KiB. Dit bespaart tabelruimte, hoewel het proces nog steeds 4 GiB aan virtuele bytes kan adresseren.

De kosten verschuiven naar elders. Een kleine toewijzing kan meer ruimte in de laatste pagina verspillen en bij het binnenhalen van een pagina worden meer bytes overgedragen. Een grotere paginagrootte maakt geen onderscheid tussen een dichtgebruikt deel van de adresruimte en een ongebruikt gat; beide krijgen alleen minder vermeldingen.

Laat gaten weg met afzonderlijke segmenttabellen

Een combinatie van segmentatie en paginering geeft code, heap en stack elk een eigen paginatabel. Elk segment heeft een tabelbasis en een grens voor zijn paginanummers. Het gat tussen segmenten heeft geen vermeldingen nodig. De vertaling selecteert eerst het segment, controleert de grens en zoekt dan de pagina binnen dat segment op.

Deze aanpak hangt af van een bruikbare indeling in segmenten. De tabellen kunnen verschillende lengtes hebben en aaneengesloten fysieke ruimte nodig hebben, waardoor voor de tabellen zelf opnieuw externe fragmentatie ontstaat. De gegevenspagina's van het proces blijven van vaste grootte; de gefragmenteerde objecten zijn nu de paginatabellen van variabele grootte.

Indexeer in plaats daarvan fysieke paginaframes

Een omgekeerde paginatabel verandert wat een vermelding beschrijft. De tabel heeft voor de hele machine één vermelding per fysiek paginaframe en legt het gebruikende proces en VPN vast. Bij 16 GiB fysiek geheugen en paginaframes van 4 KiB zijn 4.194.304 vermeldingen nodig, ongeacht hoeveel processen grote virtuele adresruimten hebben. Om dat aantal om te zetten in een totaal aantal bytes is nog de vermeldingsgrootte nodig.

Een gewone tabel gebruikt het VPN als directe array-index. Een omgekeerde tabel zoekt daarentegen naar het paar dat bestaat uit adresruimte-identiteit en VPN. Een hashstructuur kan dit efficiënt maken, maar bij botsingen kunnen extra zoekstappen nodig zijn. Gedeelde paginaframes vereisen ook extra afhandeling, omdat één paginaframe meerdere virtuele namen kan hebben. Gehashte paginatabellen, zoals in PowerPC-systemen, gebruiken verwante zoekideeën; een gehashte tabel is niet noodzakelijk een strikte omgekeerde tabel met één vermelding per paginaframe.

Wijs tabellen toe per gebruikt gebied

Paginatabellen met meerdere niveaus behouden opzoeken met een index en wijzen alleen tabelpagina's op lagere niveaus toe waar geheugenkoppelingen nodig zijn. Een vermelding op een hoger niveau kan een heel ongebruikt bereik markeren zonder de tabel op het lagere niveau toe te wijzen. Dit is de gebruikelijke oplossing op moderne systemen. De besparing is het grootst bij dunbezette adresruimten, terwijl een TLB-misser meer zoekstappen vereist.

Vergelijk de mogelijkheden door te vragen wat de grootte bepaalt. Een lineaire tabel schaalt met het aantal virtuele pagina's per proces. Een omgekeerde tabel schaalt met het aantal fysieke paginaframes voor het systeem. Een hiërarchie schaalt met de tabeltakken die nodig zijn voor de geheugenkoppelingen. Geen van deze aantallen is het aantal bytes aan programmagegevens dat momenteel aanwezig is.

Belangrijkste punten

  • Grotere pagina's verminderen het aantal PTE's, maar kunnen de interne fragmentatie vergroten.
  • Afzonderlijke segmenttabellen laten gaten weg, maar kunnen tabeltoewijzingen van variabele grootte vereisen.
  • Een omgekeerde tabel heeft voor het systeem één vermelding per fysiek paginaframe.
  • Zoeken in een omgekeerde tabel vereist een adresruimte-identiteit en een VPN.
  • Een hiërarchie laat tabellen op lagere niveaus weg voor ongebruikte adresbereiken.

3.2 Een paginatabel met twee niveaus doorlopen

Een paginatabel met twee niveaus verdeelt een grote lineaire tabel in stukken ter grootte van een pagina. Een paginadirectory verwijst naar die stukken. De directory wordt toegewezen, maar een paginatabelpagina op het lagere niveau wordt alleen toegewezen als voor het gebied ervan geheugenkoppelingen nodig zijn. Een ontbrekende directoryvermelding kan een heel ongebruikt bereik vertegenwoordigen.

Leid de 10/10/12-splitsing af

Neem een virtueel adres van 32 bits, pagina's van 4 KiB en vermeldingen van 4 bytes. Elke paginatabelpagina bevat 1.024 vermeldingen, dus selecteert een index van 10 bits een vermelding. Het adres wordt gesplitst in 10 directorybits, 10 tabelbits en 12 offsetbits. Elke tabel op het lagere niveau koppelt 1.024 pagina's en bestrijkt daarmee 4 MiB aan virtuele adressen. De directory heeft ook 1.024 vermeldingen en neemt één pagina van 4 KiB in.

Volg directory- en tabelvermeldingen

De doorgang volgt fysieke pointers:

  1. Tel directory-index×4 op bij de fysieke basis van de directory. Lees die paginadirectoryvermelding (PDE).
  2. Als die naar een tabelpagina verwijst, vermenigvuldig je het PFN met 4.096 om de fysieke basis van die tabel te krijgen.
  3. Tel tabelindex×4 erbij op en lees de PTE.
  4. Controleer de uiteindelijke geheugenkoppeling en combineer het PFN met de offset.

De PDE verwijst naar een tabel, terwijl de PTE naar de gevraagde gegevenspagina verwijst. Als je deze rollen verwart, gaat een verwijzing naar paginatabelgeheugen in plaats van naar de gegevens van het programma.

Voor virtueel adres 0x00803ABC is de directory-index 2, de tabelindex 3 en de offset 0xABC. Stel dat directoryvermelding 2 naar paginaframe 0xA1 verwijst. De tabel begint op 0xA1000. Vermelding 3 staat 12 bytes verder in die tabel, op 0xA100C. Als de toegestane, aanwezige PTE PFN 0x2F3C4 bevat, is het gegevensadres 0x2F3C4ABC.

Let op de twee verschillende vermenigvuldigingsfactoren. Een tabelindex telt vermeldingen, dus vermenigvuldig je die met de vermeldingsgrootte. Een PFN telt paginaframes, dus vermenigvuldig je dat met de paginagrootte. De offset telt bytes binnen de uiteindelijke pagina en heeft geen van beide factoren nodig. De directorybasis en de pointers die tijdens de doorgang worden gebruikt, zijn fysieke adressen; virtuele pointers gebruiken zou een andere vertaling vereisen om deze vertaling uit te voeren.

Tel tabellen en leesbewerkingen voor het opzoeken

Het ruimtegebruik hangt af van de verdeling van de geheugenkoppelingen. Stel dat een proces de onderste 8 MiB van zijn ruimte van 4 GiB gebruikt en de bovenste 4 MiB, met beide gebieden uitgelijnd op directorygrenzen. Het lage gebied heeft twee tabelpagina's nodig en het hoge gebied één. Met de directory erbij zijn dat vier pagina's, oftewel 16 KiB, in plaats van een lineaire tabel van 4 MiB. Als hetzelfde aantal gegevenspagina's dun verspreid over veel directorygebieden wordt gekoppeld, kunnen meer tabelpagina's nodig zijn.

In het basisonderwijsmodel betekent een ongeldige PDE dat geen van de pagina's in het bijbehorende gebied van 4 MiB tot de adresruimte behoort. De doorgang stopt zonder een PTE te lezen. Volledige besturingssystemen kunnen ontbrekende vermeldingen ook gebruiken voor uitgestelde toewijzing, zodat hun softwareadministratie bepaalt wat een volgens de hardware niet aanwezige vermelding betekent.

De hiërarchie bespaart ruimte door extra werk bij een TLB-misser. Een niet-gecachete doorgang door twee niveaus leest een PDE en een PTE voordat de gegevens worden benaderd: in totaal drie leesbewerkingen uit het geheugen, tegenover twee voor een lineaire tabel. Een TLB-treffer slaat die tabellezingen over. Daardoor is een hoog trefferpercentage vooral waardevol naarmate de hiërarchie dieper wordt.

Belangrijkste punten

  • De 10/10/12-splitsing volgt uit pagina's van 4 KiB en vermeldingen van 4 bytes.
  • Een PDE bepaalt de locatie van een tabelpagina; een PTE bepaalt de locatie van een gegevenspaginaframe.
  • Vermenigvuldig indexen met de vermeldingsgrootte en PFN's met de paginagrootte.
  • Tel zowel de directory als de toegewezen tabelpagina's op het lagere niveau mee.
  • Een TLB-misser kost extra tabellezingen; bij een treffer wordt de doorgang overgeslagen.
  • Dun verspreide geheugenkoppelingen besparen het meest als ze een klein aantal tabelpagina's delen.

3.3 Diepe tabellen en grote pagina's op x86-64

Het aantal tabelniveaus volgt uit drie grootheden: de geïmplementeerde breedte van het virtuele adres, de paginagrootte en de vermeldingsgrootte. Bereken eerst de breedte van de offset. Bereken daarna hoeveel vermeldingen in één tabelpagina passen en hoeveel bits een vermelding selecteren. Verdeel ten slotte de resterende VPN-bits in indexvelden en rond het aantal niveaus zo nodig naar boven af.

Leid de vier niveaus af

Voor x86-64-paginering met vier niveaus is de geïmplementeerde breedte van het virtuele adres 48 bits. Een pagina van 4 KiB levert 12 offsetbits. Een vermelding van 8 bytes geeft 512 vermeldingen per tabelpagina, geselecteerd met 9 bits. Het VPN heeft 36 bits, dus zijn vier indexen van 9 bits nodig. Een succesvolle niet-gecachete doorgang volgt vier vermeldingen en benadert daarna de gegevens.

De niveaus zijn PML4, paginadirectorypointertabel, paginadirectory en paginatabel. Hun indexen beslaan respectievelijk bits 47–39, 38–30, 29–21 en 20–12. CR3 duidt de fysieke basis aan. Linux noemt de overeenkomstige niveaus PGD, PUD, PMD en PTE; de algemene hiërarchie bevat een P4D-niveau, dat wordt samengevouwen wanneer de architectuur slechts vier niveaus gebruikt.

Onderscheid adresbreedte van RAM

Een geïmplementeerde adresruimte van 48 bits bevat 256 TiB aan adresseerbare bytes. Adressen worden nog steeds in waarden van 64 bits opgeslagen: in de gewone canonieke vorm herhalen de bits boven bit 47 dat bit. De geldige lage en hoge bereiken worden gescheiden door een niet-canoniek gat. Dat dit een adresruimte van 48 bits heet, betekent niet dat elk 64-bitspatroon bruikbaar is of dat een proces 256 TiB RAM krijgt.

Een lineaire tabel zou enorm zijn. Er zijn 236 virtuele pagina's; vermenigvuldiging met vermeldingen van 8 bytes geeft 239 bytes, oftewel 512 GiB per proces. Een hiërarchie geeft ongebruikte bereiken weer met ontbrekende takken in plaats van al die vermeldingen te reserveren.

Processors die paginering met vijf niveaus ondersteunen, kunnen 57 geïmplementeerde virtuele adresbits gebruiken wanneer die modus is ingeschakeld. Boven de PML4 wordt nog één index van 9 bits toegevoegd, wat 128 PiB aan adresseerbare bytes en één mogelijke extra tabellezing oplevert. De bovenste bits van een canoniek adres herhalen dan bit 56. De processorondersteuning en de ingeschakelde pagineringsmodus bepalen welke breedte geldt.

Stop de doorgang bij een grote pagina

Grote pagina's stoppen de doorgang vroegtijdig. Op x86-64 kan een vermelding op paginadirectoryniveau rechtstreeks een pagina van 2 MiB koppelen, met 21 offsetbits over. Een paginadirectorypointervermelding kan een pagina van 1 GiB koppelen, met 30 offsetbits over. Lagere bits die anders vermeldingen op een lager niveau zouden selecteren, selecteren nu bytes binnen die grote pagina.

Dit vermindert zowel de lengte van de doorgang als het aantal vertalingen dat voor een bepaald gebied nodig is. Het vergroot het TLB-bereik, wat databases en andere grote werklasten kan helpen. De fysieke koppeling vereist een passend uitgelijnde aaneengesloten reeks paginaframes en een gedeeltelijk gebruikte grote pagina kan veel meer geheugen verspillen. Linux ondersteunt expliciete toewijzing van grote pagina's en transparante grote pagina's; de ondersteunde groottes hangen af van de architectuur.

De eenvoudige kostentelling gaat ervan uit dat geen tabelvermeldingen zijn gecachet. Bestaande processors cachen paginatabelstructuren en tabellezingen kunnen treffers in gewone caches opleveren. Vier niveaus betekenen daarom niet dat elke TLB-misser vier vertragingen door toegang tot het hoofdgeheugen oplevert. Ze beschrijven de afhankelijkheidsketen en de kosten zonder caching.

Belangrijkste punten

  • Bereken de indexbreedte uit het aantal vermeldingen per tabelpagina.
  • x86-64 met vier niveaus verdeelt 36 VPN-bits in vier indexen van 9 bits.
  • De geïmplementeerde breedte van het virtuele adres is kleiner dan de adreswaarde van 64 bits waarin het wordt opgeslagen.
  • Een vermelding voor een grote pagina beëindigt de doorgang vroegtijdig en geeft meer bits aan de offset.
  • Caches voor het doorlopen van tabellen verlagen de gebruikelijke kosten zonder de hiërarchie te veranderen.
4

Gebruik wisselruimte om de capaciteit van het fysieke geheugen te overstijgen

Een proces kan meer virtuele pagina's bezitten dan het op dat moment in het fysieke geheugen heeft. Het besturingssysteem levert de inhoud van een pagina wanneer een toegang die nodig heeft, soms uit wisselruimte en soms zonder iets van de opslag te lezen. Je volgt de instructie die een paginafout veroorzaakt via de afhandelaar terug naar de uitvoering, schat de kosten van paginafouten met opslagtoegang en ziet waarom paginafouten ook nuttige functies ondersteunen, zoals met nullen gevuld geheugen en kopiëren bij schrijven.

4.1 Volg een pagina van wisselruimte terug naar het geheugen

Virtuele adresruimten kunnen samen groter zijn dan het fysieke geheugen, omdat niet elke pagina aanwezig hoeft te blijven. Wisselruimte bewaart de inhoud van verdrongen pagina's op een schijf of SSD. Linux kan een wisselpartitie of wisselbestand gebruiken; Windows gebruikt een wisselbestand. Het fysieke geheugen bevat de verzameling pagina's die op dat moment aanwezig is.

Bij paginering worden afzonderlijke pagina's verplaatst. Bij uitwisselen wordt een pagina naar de achterliggende opslag geschreven voordat het paginaframe opnieuw wordt gebruikt; bij inwisselen wordt de pagina teruggelezen. Historisch betekende wisselen ook het verplaatsen van een heel proces. In moderne gesprekken verwijst het woord vaak naar het verplaatsen van pagina's, dus bepaal wat er wordt verplaatst.

Interpreteer de ontbrekende geheugenkoppeling

Het aanwezigheidsbit van een PTE vertelt de hardware of een aanwezige geheugenkoppeling beschikbaar is. Als een geldige pagina is uitgewisseld, legt het besturingssysteem vast waar de inhoud te vinden is, in door software bepaalde bits van de vermelding of in afzonderlijke metadata. Een aanwezigheidsbit van nul duidt op zichzelf niet op wisselruimte: het kan ook niet-toegewezen of uitgesteld toegewezen geheugen beschrijven.

Een paginafout is een exceptie die ontstaat door een toegang die met de huidige geheugenkoppeling niet kan worden voltooid. De fout kan wijzen op afwezigheid of een schending van de bescherming. De afhandelaar beslist of de toegang geldig is en hoe de fout kan worden opgelost. Bij een succesvolle afhandeling kunnen opgeslagen bytes worden geladen, met nullen gevuld geheugen worden geleverd, een bestaand aanwezig paginaframe worden gekoppeld of een privékopie worden gemaakt. Een werkelijk ongeldige toegang leidt meestal tot een segmentatiefout.

Herstel een opgeslagen pagina

Volg het lezen van een uitgewisselde pagina bij pagina's van 1.024 bytes:

  1. Virtueel adres 5.000 geeft VPN 4 en offset 904.
  2. De TLB heeft geen bruikbare vertaling. Bij het doorlopen van de paginatabel blijkt de geldige pagina niet aanwezig; de softwareadministratie wijst wisselblok 37 aan.
  3. De afhandelaar verkrijgt paginaframe 9. Als geen paginaframe vrij is, moet eerst geheugen worden vrijgemaakt.
  4. Het besturingssysteem leest blok 37 in paginaframe 9. Het proces dat de paginafout veroorzaakte wacht; een ander uitvoerbaar proces kan de CPU gebruiken.
  5. Na voltooiing legt het besturingssysteem PFN 9 vast, markeert de geheugenkoppeling als aanwezig en maakt het proces uitvoerbaar.
  6. De instructie wordt opnieuw geprobeerd. De vertaling bereikt nu fysiek adres 10.120.

De instructie hervat de bedoelde bewerking nadat de bytes beschikbaar zijn. Als de uitvoering de mislukte instructie zou overslaan, zou een lees- of schrijfbewerking verloren gaan. Het proces kan een vertraging merken, maar het virtuele adres is niet veranderd.

Deel de paginafout in en voorspel de vraag

Een paginafout met opslagtoegang vereist een leesbewerking van de opslag. Een paginafout zonder opslagtoegang wordt zonder die I/O opgelost, bijvoorbeeld door een met nullen gevuld paginaframe te leveren of een al aanwezig paginaframe te koppelen. Een groot aantal paginafouten zonder opslagtoegang betekent dus niet evenveel apparaatverkeer als hetzelfde aantal paginafouten met opslagtoegang. Op Linux rapporteert /usr/bin/time -v de twee aantallen voor een commando.

Paginering op aanvraag wacht met het leveren van een pagina totdat die wordt aangesproken. Daardoor kan een programma beginnen zonder alle inhoud te laden. Vooraf ophalen haalt pagina's binnen die naar verwachting binnenkort nodig zijn. Goede voorspellingen voorkomen later wachten; slechte voorspellingen gebruiken bandbreedte en geheugen voor pagina's die nooit worden gebruikt.

Houd de gebeurtenissen uit elkaar. Bij een TLB-misser moet een vertaling worden opgezocht. Bij een paginafout moet het besturingssysteem een probleem met een geheugenkoppeling afhandelen. Een segmentatiefout is een gebruikelijk resultaat van verboden toegang. Een aanwezige pagina waarvoor toegang is toegestaan, kan een TLB-misser veroorzaken zonder een van de andere gebeurtenissen.

Belangrijkste punten

  • Niet aanwezig betekent niet automatisch dat de pagina in wisselruimte is opgeslagen.
  • Een paginafout met opslagtoegang vereist een leesbewerking van de opslag; een paginafout zonder opslagtoegang niet.
  • Bij een paginafout op een uitgewisselde pagina wordt het proces geblokkeerd totdat de leesbewerking is voltooid.
  • De afhandelaar herstelt de geheugenkoppeling en probeert de instructie die de fout veroorzaakte opnieuw.
  • Paginering op aanvraag wacht op gebruik; vooraf ophalen voorspelt toekomstig gebruik.
  • Een TLB-misser, paginafout en segmentatiefout zijn verschillende gebeurtenissen.

4.2 Kosten van paginafouten, gewijzigde pagina's en vrije paginaframes

Een zeldzame leesbewerking van de opslag kan de gemiddelde geheugentoegangstijd bepalen. Laat p de kans zijn dat een verwijzing een paginafout met opslagtoegang veroorzaakt, M de gewone toegangstijd en F de totale afhandelingstijd voor een verwijzing die een paginafout veroorzaakt. Een eenvoudig model met twee gevallen geeft:

EAT=(1−p)M+pF

Hier omvat F de leesbewerking van de opslag, het werk van het besturingssysteem en eventueel vereist terugschrijven van een gewijzigde te vervangen pagina. Het gaat om de totale tijd in het geval van een paginafout, niet alleen om een kleine extra tijd voor het opzoeken van een PTE.

Bereken het effect van zeldzame paginafouten

Stel dat een gewone toegang 100 ns duurt en een paginafout met opslagtoegang in totaal 8 ms. Reken 8 ms om naar 8.000.000 ns voordat je het gemiddelde berekent. Bij één paginafout per 1.000 verwijzingen:

EAT=0,999(100)+0,001(8000000)=8099,9 ns

Dit is ongeveer 81 keer de gewone toegangstijd. Een paginafoutfrequentie van 0,1% klinkt klein, maar een paginafout kost evenveel als vele duizenden geheugenverwijzingen.

Voor een vertraging van minder dan 10% moet het gemiddelde onder 110 ns blijven. Herschikken geeft:

p<110−1008000000−100≈1,25×10−6

Dat is minder dan ongeveer één paginafout met opslagtoegang per 800.000 verwijzingen. De toegestane kans hangt af van de aangenomen afhandelingstijd. Bij een voorbeeldtijd van 0,1 ms voor een SSD is de wachttijd korter, maar nog steeds 100.000 ns: duizend toegangen van 100 ns.

Houd paginaframes gereed

Het besturingssysteem probeert paginaframes gereed te hebben voordat een paginafout er één nodig heeft. Een paginadaemon op de achtergrond, zoals kswapd van Linux, maakt geheugen vrij wanneer het aantal vrije paginaframes onder een lage geheugendrempel daalt. In het basisdrempelmodel gaat de daemon door tot een hoge geheugendrempel is bereikt. Zo hoeft niet bij elke paginafout te worden gewacht tot een te vervangen pagina is geselecteerd en voorbereid.

Bewaar wijzigingen vóór hergebruik

Een gewijzigde pagina bevat wijzigingen sinds de wijzigingstoestand voor het laatst is gewist. Voordat het paginaframe opnieuw wordt gebruikt, moeten die wijzigingen worden bewaard als de pagina deel blijft uitmaken van het geheugen van een proces. Terugschrijven kan op de achtergrond gebeuren. Na succesvol terugschrijven kan de aanwezige pagina als ongewijzigd worden gemarkeerd; een latere schrijfbewerking maakt die weer gewijzigd.

Een ongewijzigde pagina kan alleen zonder nieuwe schrijfbewerking worden verwijderd als de inhoud kan worden teruggehaald of opnieuw kan worden aangemaakt. Ongewijzigde programmacode kan opnieuw uit het uitvoerbare bestand worden gelezen. Een pagina met een actuele kopie in de wisselruimte kan daaruit worden gelezen. Een ongewijzigde anonieme pagina zonder terug te halen kopie kan niet zomaar worden vergeten. Het wijzigingsbit alleen bewijst niet dat achterliggende opslag bestaat.

Als bij een paginafout synchroon een gewijzigde pagina moet worden verwijderd, kan dat een schrijfbewerking voor de te vervangen pagina vereisen, gevolgd door de gevraagde leesbewerking. De voorkeur geven aan een ongewijzigde, terug te halen pagina voor vervanging voorkomt die schrijfbewerking op het kritieke pad van de foutafhandeling. Bij bundeling worden meerdere schrijfbewerkingen gecombineerd tot grotere overdrachten, wat vooral op schijven nuttig is.

Belangrijkste punten

  • Reken alle tijdwaarden om naar één eenheid voordat je het gemiddelde berekent.
  • Een kleine kans op een paginafout met opslagtoegang kan de effectieve toegangstijd bepalen.
  • Een paginadaemon op de achtergrond houdt een reserve van vrije paginaframes aan.
  • De wijzigingstoestand registreert schrijfbewerkingen sinds het laatste wissen, niet simpelweg sinds het laden.
  • Een ongewijzigde pagina veilig verwijderen vereist dat de inhoud kan worden teruggehaald of opnieuw aangemaakt.
  • Terugschrijven op de achtergrond kan een schrijfbewerking voor de te vervangen pagina uit de foutafhandeling halen.

4.3 Nulinitialisatie op aanvraag, gedeelde code en kopiëren bij schrijven

Paginafouten zijn nuttige aangrijpingspunten om werk uit te stellen. Een geheugenkoppeling kan tot een proces behoren voordat het besturingssysteem er een eigen paginaframe aan toewijst. Bij nulinitialisatie op aanvraag levert de eerste toegang met nullen gevuld geheugen op. Zo hoeft niet elke gereserveerde pagina vooraf te worden toegewezen en gewist. Nulinitialisatie voorkomt ook dat een proces achtergebleven gegevens van een ander proces ziet.

Voor de paginafout is geen leesbewerking van de schijf nodig, omdat de vereiste inhoud uit nullen bestaat en niet uit opgeslagen bytes. Het is een paginafout zonder opslagtoegang. Een systeem kan de implementatie optimaliseren, maar het zichtbare resultaat blijft dat pas geleverd geheugen de vereiste nullen bevat.

Deel alleen-lezencode

Afzonderlijke paginatabellen vereisen niet van elke pagina afzonderlijke kopieën. Twee PTE's kunnen hetzelfde PFN bevatten, ook op verschillende virtuele adressen. Processen die hetzelfde programma uitvoeren, kunnen alleen-lezencode delen. Vijftig processen die een editor gebruiken, kunnen verwijzen naar één aanwezige kopie van elke gedeelde codepagina. Alleen-lezenbescherming voorkomt dat één proces die instructies voor iedereen verandert.

Maak bij schrijven eigen inhoud

Kopiëren bij schrijven (COW) maakt het mogelijk pagina's aanvankelijk te delen terwijl later mogelijk eigen inhoud nodig is. Na fork() hebben ouder en kind afzonderlijke adresruimten, maar kunnen ze hun gewone privégegevenspaginaframes delen. Het besturingssysteem markeert hun beschrijfbare privégeheugenkoppelingen als alleen-lezen en legt vast dat het om COW-koppelingen gaat. Lezen lukt zonder te kopiëren.

Wanneer een van de processen voor het eerst naar een gedeelde COW-pagina schrijft, is die schrijfbewerking in strijd met de huidige bescherming en veroorzaakt ze een paginafout. De afhandelaar herkent het geldige COW-geval, wijst een eigen paginaframe toe, kopieert de pagina, legt een beschrijfbare geheugenkoppeling vast voor het schrijvende proces en probeert de instructie opnieuw. Het andere proces behoudt de oorspronkelijke inhoud. Het besturingssysteem moet ook zorgen dat gecachete vertalingen overeenkomen met de gewijzigde geheugenkoppelingen.

Stel dat een proces 400 MiB aan aanwezige privégegevens heeft en dat het kind naar drie verschillende pagina's van 4 KiB schrijft voordat het exec() aanroept. De gegevens die door die schrijfbewerkingen worden gekopieerd, zijn in totaal 12.288 bytes. Herhaald schrijven naar één pagina die al privé is, veroorzaakt niet telkens een nieuwe kopie van de hele pagina. Het aanmaken van paginatabellen en andere procesadministratie kosten nog steeds tijd en ruimte; COW voorkomt dat alle 400 MiB aan gegevens vooraf wordt gekopieerd.

Dit is vooral nuttig wanneer kort na fork() een aanroep van exec() volgt, die de adresruimte van het kind vervangt. Alle oude gegevens direct kopiëren zou werk opleveren dat het kind mogelijk nooit benut. Opzettelijk gedeelde beschrijfbare geheugenkoppelingen hebben een andere betekenis: COW beschrijft de privékoppelingen die bij een schrijfbewerking uiteen moeten gaan.

Een alleen-lezen-PTE alleen maakt een koppeling nog geen COW-koppeling. Schrijven naar werkelijk alleen-lezen-programmacode is een fout; schrijven naar een door COW beschermde gegevenspagina kan worden hersteld. De softwareadministratie onderscheidt de gevallen, zodat dezelfde hardwarematige beschermingsfout kan leiden tot een succesvolle nieuwe poging of een segmentatiefout.

Bescherm kernelkoppelingen

Ook kernelkoppelingen gebruiken bescherming. Een traditioneel ontwerp koppelt kernelgeheugen in de adresruimte van elk proces met toegang uitsluitend voor de kernel, zodat de kernel kan worden binnengegaan zonder een volledig andere geheugenkoppeling te selecteren. Code in gebruikersmodus kan die pagina's niet benaderen alleen omdat ze adressen hebben. Isolatie van kernelpaginatabellen, op getroffen systemen ingevoerd nadat Meltdown in 2018 bekend werd, verwijdert de meeste kernelkoppelingen terwijl gebruikerscode draait en wisselt bij het binnengaan van de kernel van geheugenkoppelingen.

Belangrijkste punten

  • Geheugen met nulinitialisatie op aanvraag vereist geen leesbewerking van de opslag en mag geen oude gegevens blootgeven.
  • Verschillende paginatabellen kunnen hetzelfde alleen-lezen-codepaginaframe koppelen.
  • COW deelt privégegevens totdat een schrijfbewerking een eigen kopie vereist.
  • De afhandelaar gebruikt de softwareadministratie om COW te onderscheiden van een verboden schrijfbewerking.
  • COW voorkomt dat gegevens worden gekopieerd die een kind kort daarna via exec weggooit.
5

Kies beleid voor paginavervanging en voorkom overmatig wisselen van pagina's

Wanneer voor een benodigde pagina geen vrij paginaframe beschikbaar is, moet het besturingssysteem kiezen wat het verwijdert. Die keuze verandert toekomstige paginafoutfrequenties, maar zelfs goed beleid kan niet elke actieve pagina aanwezig houden als de vraag te groot is. Je vergelijkt beleidsvormen aan de hand van paginaverwijzingsreeksen, gebruikt hardwarebits om recent gebruik te benaderen en brengt de werkverzameling van een proces in verband met de toewijzing van paginaframes. De laatste stap is herkennen wanneer herhaalde paginering nuttige voortgang verhindert.

5.1 Missers tellen en de optimale pagina voor vervanging vinden

Een vervangingsbeleid kiest een aanwezige pagina om te verwijderen wanneer voor een benodigde pagina geen vrij paginaframe beschikbaar is. Het fysieke geheugen werkt als een cache voor pagina-inhoud. Het beleid probeert pagina's te bewaren waarvan toekomstig gebruik kostbare paginafouten voorkomt. Een misser bij paginavervanging is een abstracte gebeurtenis waarbij een pagina niet aanwezig is; of I/O nodig is, hangt af van de herkomst van de ontbrekende inhoud.

Registreer treffers en missers

Vergelijk beleidsvormen met dezelfde paginaverwijzingsreeks, hetzelfde aantal paginaframes en dezelfde begintoestand. Een paginaverwijzingsreeks vermeldt paginanummers in toegangsvolgorde. Vraag bij elke verwijzing eerst of de pagina aanwezig is. Zo ja, noteer je een treffer. Zo niet, noteer je een misser, laad je de pagina en verwijder je alleen een pagina voor vervanging als het geheugen al vol is.

Eerste verwijzingen zijn missers, ook zolang er nog paginaframes vrij zijn. Deze onvermijdelijke missers bij eerste gebruik kunnen niet worden voorkomen door een andere pagina voor vervanging te kiezen. Latere missers door onvoldoende capaciteit zijn capaciteitsmissers. Bij paginavervanging zijn er geen plaatsingsconflicten: een pagina kan elk paginaframe bezetten. Conflictmissers horen bij caches met beperkte plaatsingsmogelijkheden, niet bij dit volledig flexibele paginaframemodel.

Kies het gebruik dat het verst in de toekomst ligt

Het optimale beleid, OPT of MIN, kiest de pagina waarvan het volgende gebruik het verst in de toekomst ligt. Een pagina die nooit meer wordt gebruikt, is een ideale kandidaat voor vervanging. Dit levert het kleinste aantal missers op voor een bekende paginaverwijzingsreeks, maar een draaiend besturingssysteem kan willekeurige toekomstige verwijzingen niet kennen. OPT biedt een maatstaf voor praktisch beleid.

Gebruik drie aanvankelijk lege paginaframes en de reeks 1, 2, 3, 1, 4, 1, 5, 2, 1, 4, 3, 1. De eerste drie verwijzingen vullen het geheugen en zijn missers. De volgende 1 is een treffer. Bij verwijzing 5 komt pagina 4 binnen: aanwezige pagina's 1, 2 en 3 worden vervolgens gebruikt op posities 6, 8 en 11. Verwijder 3, waarvan het volgende gebruik het verst weg ligt.

Nadat 1 een treffer oplevert, komt pagina 5 binnen op positie 7. Aanwezige pagina's 1, 2 en 4 worden vervolgens gebruikt op posities 9, 8 en 10, dus verwijdert OPT pagina 4. De volgende 2 en 1 zijn treffers. Pagina 4 is een misser op positie 10; 2 of 5 mag worden verwijderd omdat geen van beide opnieuw wordt gebruikt. Daarna is pagina 3 een misser en wordt een andere pagina verwijderd die niet meer wordt gebruikt. De laatste 1 is een treffer.

Vergelijk totalen en werklasten

Het verloop heeft 7 missers en 5 treffers. Als je alle 12 verwijzingen meetelt, is het trefferpercentage 5/12, oftewel ongeveer 41,7%. Er zijn vijf verschillende pagina's, dus vijf onvermijdelijke missers bij eerste gebruik. Als die missers niet worden meegerekend, wordt het gerapporteerde percentage 5/7, oftewel ongeveer 71,4%. Beide percentages kunnen hetzelfde verloop beschrijven, dus vermeld altijd de noemer.

Houd de huidige verwijzing gescheiden van het toekomstige deel van de reeks om je plaats niet kwijt te raken. OPT vergelijkt het volgende gebruik van elke aanwezige pagina na de huidige positie; het kiest niet de pagina met het grootste nummer of de pagina die als eerste is geladen. Als twee pagina's nooit meer worden gebruikt, blijft de uitkomst bij beide keuzes optimaal.

De werklast bepaalt hoeveel het beleid uitmaakt. Als verwijzingen naar alle pagina's even waarschijnlijk zijn, biedt eerder gebruik weinig houvast. Bij lokaliteit krijgt een kleine, vaak gebruikte verzameling veel verwijzingen en verbetert het bewaren daarvan het trefferpercentage. Het verschil tussen het aantal missers van een praktisch beleid en dat van OPT meet de mogelijke verbetering voor die werklast.

Belangrijkste punten

  • Tel de eerste vullingen als missers, ook voordat een pagina wordt verwijderd.
  • OPT verwijdert de aanwezige pagina waarvan het volgende gebruik het verst weg ligt.
  • OPT is een maatstaf omdat het toekomstige verwijzingen vereist.
  • Paginavervanging kent capaciteitsmissers, maar geen conflictmissers door plaatsing in paginaframes.
  • Vermeld of de noemer van het trefferpercentage onvermijdelijke missers bij eerste gebruik bevat.

5.2 FIFO, LRU en effecten van de werklast

FIFO verwijdert de pagina die van de huidige aanwezige pagina's het eerst is geladen. Een wachtrij houdt de volgorde van binnenkomst bij. Een treffer verplaatst de pagina niet naar de achterkant van die wachtrij. Daardoor is FIFO eenvoudig bij te houden, maar kan het een pagina verwijderen die nog vaak wordt gebruikt, alleen omdat die lang geleden binnenkwam.

Houd het laatste gebruik bij in plaats van de binnenkomst

LRU houdt het recentste gebruik van elke aanwezige pagina bij. Bij een treffer wordt die pagina de meest recent gebruikte; bij een misser met vol geheugen verdwijnt de pagina waarvan het laatste gebruik het langst geleden is. Dit volgt uit temporele lokaliteit: recent gebruik voorspelt vaak gebruik in de nabije toekomst. Binnenkomsttijd en laatste gebruik vormen verschillende geschiedenissen.

Willekeurige paginavervanging kiest willekeurig een aanwezige pagina voor vervanging zonder de volgorde van recent gebruik bij te houden. Het resultaat verschilt per uitvoering. Dit beleid kan het deterministische faalpatroon van LRU bij een cyclische werklast vermijden, maar kan nog steeds ongelukkige keuzes maken. LFU houdt aantallen bij in plaats van recent gebruik. Zonder geleidelijke verlaging van die aantallen kan LFU een pagina behouden die in een eerdere programmafase populair was, maar nu ongebruikt is.

Volg beleidsvormen op dezelfde reeks

Vergelijk drie lege paginaframes met 1, 2, 3, 1, 4, 1, 5, 2, 1, 4, 3, 1. Pagina's 1, 2 en 3 vullen eerst het geheugen. De treffer op 1 laat de FIFO-volgorde ongewijzigd, dus verwijdert de binnenkomende 4 pagina 1. LRU beschouwt 1 daarentegen als recent en verwijdert 2. De volgende verwijzing naar 1 is daarom een misser bij FIFO en een treffer bij LRU.

Bij LRU verwijderen de latere missers pagina 3 voor pagina 5, 4 voor pagina 2, 5 voor pagina 4 en 2 voor pagina 3. Het eindresultaat is 8 missers en 4 treffers. FIFO heeft 10 missers en 2 treffers. OPT heeft 7 missers op dezelfde reeks. LRU presteert hier beter dan FIFO, maar bereikt niet het optimum dat kennis van de toekomst vereist.

Leg de anomalie van Belady uit

Meer paginaframes verbeteren niet elk beleid op elke reeks. De anomalie van Belady is een toename van missers wanneer FIFO meer paginaframes krijgt. Voor 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 heeft FIFO 9 missers met drie paginaframes en 10 met vier. Extra capaciteit verandert de pagina's die later uit de wachtrij worden verwijderd, zodat de verzamelingen aanwezige pagina's niet noodzakelijk in elkaar passen.

LRU en OPT zijn stackalgoritmen: bij een consistente afhandeling van gelijke keuzes is de verzameling aanwezige pagina's bij een kleiner aantal paginaframes opgenomen in die bij een groter aantal. Een grotere capaciteit kan een treffer bij minder geheugen daardoor niet in een misser bij meer geheugen veranderen. LRU geeft op de reeks voor de anomalie 10 missers met drie paginaframes en 8 met vier.

Herken werklasten waarvoor recent gebruik slecht werkt

LRU kent nog steeds ongunstige werklasten. Doorloop drie keer pagina's 1, 2, 3, 4 met drie paginaframes. Elke nieuwe pagina verwijdert de pagina die als volgende nodig is, wat 12 missers oplevert. OPT heeft er 6 nodig. Willekeurige paginavervanging kan bruikbare pagina's gedurende een ronde behouden en presteert hier gemiddeld beter. Ook een eenmalige scan kan een bruikbare, vaak gebruikte verzameling uit een LRU-cache verdringen.

Een beleidsvergelijking moet de werklast en het aantal paginaframes vermelden. Lokaliteit maakt recent gebruik nuttig in veel programma's en vormt zo een reden om LRU in bestaande systemen te benaderen. Een terugkerende lus die net groter is dan de capaciteit, vraagt om een andere keuze; een waargenomen voordeel op één kort verloop bewijst geen algemene rangorde.

Belangrijkste punten

  • FIFO-treffers veranderen de volgorde van binnenkomst niet; LRU-treffers veranderen wel de volgorde van recent gebruik.
  • LFU telt gebruik, terwijl LRU vastlegt wanneer het laatste gebruik plaatsvond.
  • Willekeurige paginavervanging verschilt per uitvoering en kan nog steeds slechte kandidaten kiezen.
  • Bij FIFO kan de anomalie van Belady optreden.
  • Bij LRU en OPT passen de verzamelingen aanwezige pagina's bij toenemende capaciteit in elkaar.
  • Een cyclische werklast die net groter is dan de capaciteit, kan ongunstig zijn voor LRU.

5.3 Recent gebruik benaderen met een klokwijzer

Exacte LRU vereist werk bij elke geheugenverwijzing. Met tijdstempels werkt elke verwijzing een tijdstempel bij en zoekt de selectie van een te vervangen pagina naar de oudste. Met een geordende lijst staat de te vervangen pagina achteraan klaar, maar moet elke verwijzing de pagina naar voren verplaatsen. Deze structuur bij elke lees- en schrijfbewerking in software bijwerken zou te kostbaar zijn.

Lees het gebruiksbit

De hardware biedt een goedkoper signaal: het gebruiksbit, ook referentiebit genoemd. De hardware stelt het in wanneer een pagina wordt gelezen of beschreven. Het besturingssysteem wist het om een nieuw waarnemingsinterval te beginnen. Een ingesteld bit betekent minstens één gebruik sinds het laatste wissen; het telt de frequentie niet en onthult niet de exacte volgorde van laatste gebruik.

Zoek een pagina voor vervanging

Het klokalgoritme plaatst paginaframes in een cirkel en houdt een wijzer bij die naar de volgende kandidaat wijst. Bij vervanging onderzoekt het het gebruiksbit van de kandidaat. Als het bit 1 is, wist de wijzer het en schuift door. Als het bit 0 is, wordt dat paginaframe gekozen voor vervanging. De nieuwe pagina komt binnen met het gebruiksbit ingesteld en de wijzer schuift er voorbij. Een treffer stelt het bit van de aangesproken pagina in zonder de wijzer te verplaatsen.

Stel dat de cirkel A met bit 1, B met bit 0 en C met bit 1 bevat en dat de wijzer op A staat. Een paginafout op D wist het bit van A en verplaatst de wijzer naar B. B heeft al bit 0, dus vervangt D pagina B met bit 1 en eindigt de wijzer bij C. Als de volgende verwijzing een paginafout op E is, wist de wijzer het bit van C, vindt vervolgens A met bit 0 en vervangt A. Als A tussen die paginafouten was aangesproken, zou het bit 1 zijn en zou A opnieuw een kans krijgen.

Als elk bit 1 is en er tussendoor geen nieuwe toegangen zijn, wist één ronde ze allemaal. De wijzer verwijdert dan bij terugkomst de pagina waar hij begon. Die specifieke keuze lijkt op de volgende kandidaat in FIFO-volgorde, maar het klokalgoritme volgt doorgaans de gebruiksgeschiedenis en de positie van de wijzer; het is niet altijd gelijk aan FIFO.

Een volledig verloop van het klokalgoritme vereist een afspraak over de begintoestand. Hier worden lege paginaframes op volgorde gevuld met bit 1; de wijzer blijft bij paginaframe 0 tot de eerste vervanging. Treffers stellen bits in. Bij elke vervanging schuift de wijzer door. Volgens die afspraak leveren drie paginaframes op 1, 2, 3, 1, 4, 1, 5, 2, 1, 4, 3, 1 10 missers op. Een korte reeks kan het voordeel van een benadering van recent gebruik verbergen; over langere uitvoeringen volgt het klokalgoritme lokaliteit vaak goed.

Houd rekening met schrijfkosten en bestaande varianten

Een gewijzigde toestand voegt de kosten toe om een te vervangen pagina te bewaren. Een voorkeur bij het verbeterde klokalgoritme rangschikt paren (gebruiksbit, wijzigingsbit) als (0, 0), (0, 1), (1, 0) en vervolgens (1, 1). Dit geeft de voorkeur aan een pagina zonder recent gebruik en zonder niet-opgeslagen wijzigingen. Implementaties verschillen in de manier waarop ze bij het doorlopen bits wissen en schrijfbewerkingen plannen. Terugschrijven op de achtergrond kan een gewijzigde kandidaat ongewijzigd maken voordat vervanging nodig is.

Bestaande systemen gebruiken uitgebreidere varianten. VAX/VMS plaatste verwijderde pagina's op lijsten met ongewijzigde of gewijzigde pagina's, zodat een proces een pagina kon terughalen voordat het paginaframe opnieuw werd gebruikt. Linux heeft actieve en inactieve lijsten gebruikt en biedt LRU met meerdere generaties, dat pagina's groepeert op waargenomen recent gebruik. Deze systemen gebruiken aanwijzingen van de hardware voor beslissingen van het besturingssysteem; het gebruiksbit van de hardware kiest zelf geen pagina voor vervanging.

Belangrijkste punten

  • Exacte LRU-administratie bij elke verwijzing is kostbaar.
  • Een gebruiksbit registreert elk gebruik sinds het wissen, geen aantal.
  • Het klokalgoritme wist een 1 en gaat verder; het verwijdert een pagina waarbij het 0 vindt.
  • Treffers stellen gebruiksbits in, maar verplaatsen de klokwijzer niet.
  • Ongewijzigde, niet-aangesproken pagina's zijn aantrekkelijke kandidaten voor het verbeterde klokalgoritme.
  • Vermeld de begintoestand en beweging van de wijzer wanneer je het klokalgoritme volgt.

5.4 Werkverzamelingen, toewijzing van paginaframes en overmatig wisselen

Overmatig wisselen van pagina's treedt op wanneer processen het grootste deel van hun tijd besteden aan het via paginafouten binnenhalen van pagina's en het verwijderen van pagina's die snel weer nodig zijn. Het opslagapparaat blijft bezet terwijl de CPU-bezettingsgraad daalt, hoewel programma's nog werk hebben. Een lage CPU-belasting alleen toont geen overmatig wisselen aan; de combinatie van veel paginering en weinig voortgang is de aanwijzing.

De oorzaak is een geheugenvraag die groter is dan het aantal beschikbare paginaframes. Een proces heeft een bruikbare verzameling aanwezige pagina's nodig om de huidige fase te voltooien. Als de actieve verzamelingen van meerdere processen niet samen passen, verdringen hun paginafouten telkens bruikbare pagina's. Nog meer processen starten kan deze druk verergeren, ook al lijkt de CPU onderbenut.

Schat de huidige vraag naar pagina's

De werkverzameling, geschreven als W(t,Δ), schat de huidige behoeften van een proces. In het verwijzingsvenstermodel is dit de verzameling verschillende pagina's in de laatste Δ verwijzingen die eindigen op tijdstip t. Tel elke pagina één keer, ook als die meerdere keren in het venster voorkomt. De grootte van de werkverzameling is een aantal pagina's, niet het aantal verwijzingen.

Bekijk met venster 5 en de reeks 1, 2, 1, 3, 2, 1, 4, 5, 4, 5, 4, 6, 5, 4 de toestand na verwijzing 6. De laatste vijf verwijzingen zijn 2, 1, 3, 2, 1, wat {1, 2, 3} geeft, met grootte 3. Na verwijzing 8 is het venster 3, 2, 1, 4, 5, met grootte 5. Na verwijzing 11 is het 4, 5, 4, 5, 4, met grootte 2. De vraag bereikt tijdelijk een piek wanneer oude en nieuwe fasen overlappen.

Beheer de actieve vraag en toewijzing

Een kort venster kan pagina's weglaten die nog nodig zijn; een te lang venster kan pagina's uit een afgeronde fase bevatten. Het werkverzamelingsmodel van Peter Denning koppelt deze veranderende behoeften aan de toewijzing. Werkverzamelingsbeleid voert processen alleen uit als hun gezamenlijke werkverzamelingen passen. Als dat niet zo is, schort het één of meer processen op en geeft het hun paginaframes vrij. Dit is toelatingsregeling.

Regeling op basis van de paginafoutfrequentie (PFF) gebruikt gemeten foutfrequenties. Boven een bovengrens heeft een proces meer paginaframes nodig. Onder een ondergrens kunnen sommige paginaframes opnieuw worden toegewezen. Als een proces paginaframes nodig heeft en er geen beschikbaar zijn, kan het nodig zijn een proces op te schorten. Twee drempels verminderen voortdurende aanpassingen rond één grens.

Bij globale paginavervanging kan een paginafout een pagina van een ander proces verwijderen. Dit past zich flexibel aan veranderende vraag aan, maar laat één proces het aantal paginafouten van een ander verhogen. Bij lokale paginavervanging komen te vervangen pagina's alleen uit de toewijzing van het proces dat de paginafout veroorzaakt. Dit beperkt onderlinge verstoring, maar kan een proces met te weinig toegewezen paginaframes niet helpen zonder de toewijzing te veranderen.

Kies oplossingen voor geheugendruk

Nuttige oplossingen verminderen de vraag of vergroten de capaciteit: voer minder programma's uit, voeg fysiek geheugen toe of verbeter de lokaliteit, bijvoorbeeld door arrays in opslagvolgorde te doorlopen. Snellere wisselruimte verlaagt de kosten van elke paginafout met opslagtoegang; ze laat een te grote actieve verzameling niet passen. Een schijf vervangen door een SSD kan de voortgang verbeteren zonder de oorzaak weg te nemen.

Bij extreme druk kan de OOM-killer van Linux een geselecteerd proces beëindigen wanneer geheugen vrijmaken en wisselen niet genoeg geheugen kunnen vrijmaken. De selectie gebruikt een score op basis van geheugengebruik en beleidsaanpassingen, niet simpelweg de identiteit van het grootste proces. Het geheugen kan worden vrijgemaakt wanneer het proces eindigt en het werk van het proces gaat verloren. Dit is het vrijmaken van bronnen als laatste redmiddel, anders dan een proces opschorten zodat het later kan worden hervat.

Belangrijkste punten

  • Overmatig wisselen combineert veel paginering met weinig nuttige voortgang.
  • Een werkverzameling telt verschillende pagina's in een recent venster.
  • Toelatingsregeling beperkt actieve processen tot wat het geheugen kan ondersteunen.
  • PFF past de toewijzing van paginaframes aan met boven- en ondergrenzen voor de paginafoutfrequentie.
  • Globale paginavervanging kan pagina's van andere processen verwijderen; lokale paginavervanging isoleert de keuze.
  • Snellere wisselruimte vermindert de vertraging, maar vergroot de capaciteit aan paginaframes niet.
  • Bij beëindiging door de OOM-killer gaat het werk van een proces verloren; opschorting kan het bewaren.

Paginering en virtueel geheugen: voorbeelden

5 Walkthroughs

1

Vertaal een virtueel adres stap voor stap

11 stappen
Splits een adres, zoek de PTE, controleer de geheugenkoppeling en bereken het uiteindelijke fysieke byteadres.
  1. 1
    IntroductieVan een adres naar een byte

    Een leesinstructie duidt een virtueel byteadres aan. De bytes zelf staan in fysieke paginaframes en de paginatabel van het huidige proces verbindt beide. Volg één adres door de splitsing, het opzoeken van de vermelding en de uiteindelijke toegang.

    Houd twee vragen uit elkaar: waar staat de vermelding die deze pagina beschrijft en waar staat de byte die de instructie wil hebben? Beide zijn adressen, maar ze verwijzen naar verschillende objecten.

  2. 2
    UitlegPagina's kunnen verplaatsen zonder programma-adressen te veranderen

    Een pagina is een stuk virtueel geheugen van vaste grootte; een paginaframe is een even groot stuk fysiek geheugen. Pagina 0 kan paginaframe 15 bezetten terwijl pagina 1 paginaframe 2 bezet.

    Het programma ziet nog steeds aaneengesloten virtuele adressen over die pagina's heen. Elke pagina past in elk vrij paginaframe, dus heeft het besturingssysteem niet één lang fysiek gat voor een heel proces nodig.

  3. 3
    VoorbeeldScheid de pagina van de offset

    Gebruik pagina's van 2 KiB en virtueel adres 11.600. Elke pagina bevat 2.048 bytes. Vijf volledige pagina's zijn samen goed voor 10.240 bytes, dus behoort dit adres tot VPN 5.

    De resterende 1.360 bytes geven de offset. Binair bevatten de lage 11 bits die offset, omdat een pagina 211 byteposities heeft. De hogere bits duiden de virtuele pagina aan.

  4. 4
    VoorbeeldMeet ongebruikte toegewezen ruimte

    Een gebied heeft 10.700 bytes nodig en gebruikt pagina's van 2 KiB. Vijf pagina's bevatten slechts 10.240 bytes, dus zijn zes pagina's nodig. Hun totale capaciteit is 12.288 bytes.

    Trek de grootte van het bruikbare gebied af om 1.588 ongebruikte bytes binnen de toewijzing te vinden. Dit is interne fragmentatie. Vrije paginaframes elders maken geen deel uit van die verspilling; de ongebruikte bytes staan binnen een toegewezen pagina.

  5. 5
    UitdagingProbeer een andere adressplitsing

    Bij pagina's van 8 KiB verwijst een proces naar virtueel adres 25.100. Welk VPN en welke offset duiden deze byte aan?

    ---reveal---

    Drie pagina's zijn samen goed voor 24.576 bytes, waardoor offset 524 overblijft. Het VPN is 3 en de offset is 524. De offset moet kleiner zijn dan 8.192; die grens helpt een fout in het quotiënt of de aftrekking te ontdekken voordat je de pagina vertaalt.

  6. 6
    UitlegZoek eerst de vermelding en dan de gegevens

    In een lineaire paginatabel is het VPN de index van een array per proces. Als de basis fysiek adres 20.000 is en vermeldingen 8 bytes hebben, begint PTE 5 op 20.040.

    Vermenigvuldigen met de vermeldingsgrootte bepaalt de locatie van de koppelingsinformatie. Het bepaalt niet de locatie van de gevraagde programmabyte. De vermelding moet een fysiek paginaframenummer leveren en de gevraagde bewerking toestaan voordat de processor het gegevensadres kan vormen.

  7. 7
    KernpuntControleer de toestand van de geheugenkoppeling

    Een pagina kan tot een proces behoren terwijl ze niet aanwezig is. Ze kan ook aanwezig zijn terwijl een bepaalde bewerking verboden is. Aanwezigheid en toegangsrecht beantwoorden verschillende vragen.

    Het onderwijsmodel geeft geldigheid, aanwezigheid en bescherming afzonderlijke rollen. x86 biedt geen afzonderlijk geldigheidsbit; wanneer een hardwarematige geheugenkoppeling niet aanwezig is, onderscheidt de administratie van het besturingssysteem wisselruimte, uitgestelde toewijzing en een ongebruikt adres.

  8. 8
    VoorbeeldVoltooi de adresvertaling

    Keer terug naar virtueel adres 11.600 met pagina's van 2 KiB: VPN 5, offset 1.360. Stel dat PTE 5 de leesbewerking toestaat, aanwezig is en paginaframe 14 aanwijst.

    Paginaframe 14 begint bij byte 28.672. Met de ongewijzigde offset erbij krijg je fysiek byteadres 30.032. De PTE op 20.040 vertelt ons dit resultaat; die is niet zelf het adres waaruit het programma zijn gegevens leest.

  9. 9
    UitdagingKies het juiste uiteindelijke adres

    Bij pagina's van 1 KiB wordt virtueel adres 3.250 via een aanwezige PTE die toegang toestaat aan paginaframe 11 gekoppeld. Welk fysiek adres levert dat op? Leg uit welk deel ongewijzigd blijft.

    ---reveal---

    Het adres heeft VPN 3 en offset 178. Paginaframe 11 begint op 11.264, dus is het resultaat 11.442. De offset blijft 178 omdat een pagina en het bijbehorende paginaframe dezelfde interne byteposities hebben.

  10. 10
    UitdagingVerbind de splitsing met de tabelgrootte

    Een systeem heeft virtuele adressen van 24 bits, pagina's van 4 KiB en vermeldingen van 8 bytes in een lineaire tabel. Hoeveel geheugen neemt de volledige tabel in?

    ---reveal---

    De offset gebruikt 12 bits, zodat 12 VPN-bits en 4.096 vermeldingen overblijven. Vermenigvuldigen met acht geeft 32.768 bytes, oftewel 32 KiB. De tabel bevat nog steeds vermeldingen voor ongebruikte pagina's; weinig gegevenspaginaframes toewijzen verkleint deze volledige lineaire array niet.

  11. 11
    SamenvattingLees de twee adresberekeningen

    Gebruik het VPN om een koppelingsvermelding te vinden, controleer de toestand ervan en gebruik het PFN om een paginaframe te vinden. Neem daarna de oorspronkelijke offset mee naar dat paginaframe.

    De vermeldingsgrootte bepaalt de verplaatsing door de tabel; de paginagrootte bepaalt de verplaatsing door fysieke paginaframes. Als je die eenheden zichtbaar houdt, werkt dezelfde methode met decimale adressen, hexadecimale adressen en verschillende paginagroottes.

2

Gebruik de TLB met behoud van correcte vertalingen

12 stappen
Volg treffers, missers, lokaliteit, contextidentificaties, ongeldig maken en TLB-bereik.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieWaarom herhaalde vertaling snel kan zijn
  2. 2
    UitlegEen treffer bespaart een tabelopzoeking
  3. 3
    KernpuntEen misser kan volledig in het geheugen worden afgehandeld
  4. 4
    VoorbeeldTel de missers bij een opeenvolgend gelezen array
  5. 5
    VoorbeeldBereken een gemiddelde met volledige gevallen
  6. 6
    UitdagingPas lokaliteit toe op een tweede doorgang
  7. 7
    UitlegKies wie de TLB aanvult
  8. 8
    VoorbeeldVoorzie vertalingen van een adresruimte-identificatie
  9. 9
    VerbandEen tabelwijziging vereist het ongeldig maken van cachevermeldingen
  10. 10
    UitdagingBereken het vertaalbereik
  11. 11
    UitdagingOnderscheid een capaciteitsprobleem van een correctheidsprobleem
  12. 12
    SamenvattingVolg zowel prestaties als correctheid
3

Doorloop kleinere paginatabellen

14 stappen
Vergelijk tabelorganisaties, volg een voorbeeld met twee niveaus en leid diepere tabellen en koppelingen voor grote pagina's af.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieGebruik minder geheugen voor geheugenkoppelingen
  2. 2
    UitlegVraag wat één vermelding beschrijft
  3. 3
    VerbandVergelijk twee manieren om verspilling weg te laten
  4. 4
    UitdagingControleer een aantal voor een omgekeerde tabel
  5. 5
    UitlegVerdeel het VPN in twee indexen
  6. 6
    VoorbeeldLees de directoryvermelding
  7. 7
    VoorbeeldVolg de fysieke pointer naar de uiteindelijke vermelding
  8. 8
    UitdagingTel toegewezen tabellen bij dun verspreide geheugenkoppelingen
  9. 9
    UitlegLeid een diepere hiërarchie af
  10. 10
    KernpuntHoud de geïmplementeerde breedte in beeld
  11. 11
    VoorbeeldLaat een directoryvermelding de gegevens koppelen
  12. 12
    UitdagingBereken een ander aantal niveaus
  13. 13
    UitdagingBeoordeel een voorstel voor grote pagina's
  14. 14
    SamenvattingTel ruimte en zoekwerk afzonderlijk
4

Handel paginafouten af en stel onnodig werk uit

14 stappen
Herstel een uitgewisselde pagina, schat de kosten en pas nulinitialisatie op aanvraag en kopiëren bij schrijven toe.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieWacht op de inhoud en probeer het opnieuw
  2. 2
    UitlegInterpreteer een niet aanwezige geheugenkoppeling
  3. 3
    VoorbeeldZoek de opgeslagen pagina
  4. 4
    VoorbeeldLeg de geheugenkoppeling vast en hervat
  5. 5
    UitdagingOnderscheid twee soorten paginafouten
  6. 6
    VoorbeeldReken de kosten om voordat je het gemiddelde berekent
  7. 7
    UitlegBereid te vervangen pagina's voor voordat paginafouten ze nodig hebben
  8. 8
    KernpuntControleer of een ongewijzigde pagina kan worden teruggehaald
  9. 9
    UitdagingVoeg het schrijven van de te vervangen pagina toe aan het kritieke pad
  10. 10
    UitlegLever nullen pas wanneer ze nodig zijn
  11. 11
    UitlegDeel privépagina's tot een schrijfbewerking
  12. 12
    UitdagingTel gekopieerde pagina's, geen schrijfinstructies
  13. 13
    UitdagingLeid de oorzaak af uit het gedrag bij de paginafout
  14. 14
    SamenvattingGebruik paginafouten om de juiste inhoud te leveren
5

Vergelijk te vervangen pagina's en voorkom overmatig wisselen

20 stappen
Volg beleidsvormen, gebruik de klokwijzer, schat werkverzamelingen en kies oplossingen voor overmatige paginering.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieHoud bruikbare pagina's aanwezig
  2. 2
    TipLeg de simulatievoorwaarden vast
  3. 3
    VoorbeeldKies een te vervangen pagina met kennis van de toekomst
  4. 4
    VoorbeeldVoltooi het verloop voor de maatstaf
  5. 5
    UitdagingBepaal het onvermijdelijke deel
  6. 6
    UitlegGebruik de volgorde van binnenkomst voor FIFO
  7. 7
    VoorbeeldGebruik de laatste toegang voor LRU
  8. 8
    KernpuntGa er niet van uit dat recent gebruik hergebruik altijd voorspelt
  9. 9
    UitdagingInterpreteer een resultaat met een extra paginaframe
  10. 10
    UitlegVervang exacte volgorde door een gebruikssignaal
  11. 11
    VoorbeeldNeem één beslissing met het klokalgoritme
  12. 12
    UitdagingGeef een recent aangesproken pagina nog een kans
  13. 13
    VerbandHoud rekening met gewijzigde pagina's voor vervanging
  14. 14
    UitlegHerken geheugendruk die voortgang blokkeert
  15. 15
    VoorbeeldTel een werkverzameling bij een fasewisseling
  16. 16
    UitlegWijs toe op basis van vraag of paginafoutsymptomen
  17. 17
    UitdagingOnderscheid isolatie van capaciteit
  18. 18
    VerbandKies een oplossing die de oorzaak verandert
  19. 19
    UitdagingVerbind werkverzamelingen met paginavervanging
  20. 20
    SamenvattingVerbind verlopen met het draaiende systeem

Paginering en virtueel geheugen: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Oefening 2: Volg opzoekingen en paginafouten10 Oefenvragen

Vraag 1 van 10

Een gebied van 17.500 bytes gebruikt pagina's van 8 KiB. Hoeveel bytes zijn ongebruikt in de toegewezen pagina's?
  1. 1.116 bytes
  2. 8.192 bytes
  3. 7.076 bytes
  4. 15.268 bytes
Toon antwoordVerberg antwoord
Antwoord: C
Twee pagina's bevatten 16.384 bytes, dus heeft het gebied een derde pagina nodig en neemt het 24.576 bytes in. Na aftrek van 17.500 blijven 7.076 ongebruikte bytes over. De resterende 1.116 bytes aan gegevens na twee pagina's zijn het gebruikte deel van de laatste pagina, niet de verspilde ruimte.

Vraag 2 van 10

Waar staat PTE 11 ten opzichte van de tabelbasis in een lineaire tabel met vermeldingen van 8 bytes?
  1. 88 bytes na de basis
  2. 11 bytes na de basis
  3. 19 bytes na de basis
  4. 80 bytes na de basis
Toon antwoordVerberg antwoord
Antwoord: A
Het VPN is een array-index die bij nul begint, dus begint vermelding 11 op 11×8=88 bytes na de basis. Vermelding 0 staat al op de basis. Eén aftrekken vóór het vermenigvuldigen zou vermelding 10 vinden, niet vermelding 11; de index is geen rangnummer dat bij één begint.

Vraag 3 van 10

Een array die op een paginagrens begint, bevat 6.144 waarden van elk vier bytes. De array wordt één keer op volgorde gelezen bij pagina's van 8 KiB, een lege TLB en geen verstorende verwijzingen. Hoeveel TLB-missers treden op?
  1. 6 missers
  2. 12 missers
  3. 6.144 missers
  4. 3 missers
Toon antwoordVerberg antwoord
Antwoord: D
Elke pagina bevat 2.048 waarden van vier bytes, dus neemt de array drie pagina's in. De eerste toegang op elke pagina is een misser en de overige toegangen op die pagina hergebruiken de vertaling. Zes missers zouden gelden bij pagina's van 4 KiB, dus de paginagrootte uit een ander voorbeeld overnemen geeft hier een onjuist resultaat.

Vraag 4 van 10

Een tabelpagina heeft 4.096 bytes en elke vermelding heeft 8 bytes. Hoeveel bits selecteren één vermelding?
  1. 8 bits
  2. 9 bits
  3. 10 bits
  4. 12 bits
Toon antwoordVerberg antwoord
Antwoord: B
Er zijn 512 vermeldingen per tabelpagina en negen bits selecteren uit 512 posities. Twaalf bits selecteren afzonderlijke bytes binnen een pagina van 4 KiB, niet vermeldingen van acht bytes. De offsetbreedte en de breedte van een tabelindex zijn dus verschillend, ook al beschrijven beide posities binnen een pagina.

Vraag 5 van 10

Een hypothetische machine gebruikt virtuele adressen van 39 bits, pagina's van 4 KiB en vermeldingen van 8 bytes in tabellen ter grootte van een pagina. Hoeveel niveaus zijn nodig?
  1. 3 niveaus
  2. 2 niveaus
  3. 4 niveaus
  4. 5 niveaus
Toon antwoordVerberg antwoord
Antwoord: A
De paginaoffset gebruikt 12 bits, zodat 27 VPN-bits overblijven. Elke tabelpagina bevat 512 vermeldingen en gebruikt een index van 9 bits, dus bestrijken drie niveaus die 27 bits. Het volledige adres van 39 bits door negen delen behandelt de byteoffset ten onrechte als een extra deel van de paginatabelopzoeking.

Vraag 6 van 10

Het lezen van een uitgewisselde pagina is klaar en de afhandelaar legt een aanwezige geheugenkoppeling vast. Wat moet gebeuren met de instructie die de paginafout veroorzaakte?
  1. Ze wordt overgeslagen zodat de uitvoering doorgaat
  2. Ze wordt opnieuw geprobeerd met de herstelde koppeling
  3. Ze wordt vervangen door een nieuwe systeemaanroep
  4. Ze wordt voltooid met het nummer van het wisselblok
Toon antwoordVerberg antwoord
Antwoord: B
De instructie kon niet worden voltooid voordat de vereiste pagina aanwezig was, dus wordt ze opnieuw geprobeerd nadat de geheugenkoppeling is hersteld. Overslaan zou de lees- of schrijfbewerking verliezen die het programma vroeg. De locatie in de wisselruimte vertelt de afhandelaar waar de bytes staan; het is niet de waarde die de oorspronkelijke instructie moet ontvangen.

Vraag 7 van 10

Na fork schrijft een kind naar vijf verschillende gedeelde COW-pagina's van elk 4 KiB en schrijft daarna opnieuw naar de eerste van die pagina's. Hoeveel paginagegevens worden voor deze schrijfbewerkingen gekopieerd?
  1. 4 KiB
  2. 24 KiB
  3. 20 KiB
  4. 40 KiB
Toon antwoordVerberg antwoord
Antwoord: C
Elke eerste schrijfbewerking naar een van de vijf gedeelde pagina's maakt een eigen kopie van 4 KiB, samen 20 KiB. De laatste schrijfbewerking gebruikt een pagina die het kind al privé heeft gemaakt en vereist geen nieuwe kopie van de hele pagina. Elke schrijfbewerking als een nieuwe COW-gebeurtenis tellen zou ten onrechte 24 KiB geven.

Vraag 8 van 10

Verwerk 4, 8, 2, 4, 6, 8, 4 met drie aanvankelijk lege paginaframes volgens FIFO en LRU. Wat zijn hun totale aantallen missers?
  1. FIFO: 6; LRU: 5
  2. FIFO: 5; LRU: 6
  3. FIFO: 6; LRU: 6
  4. FIFO: 5; LRU: 5
Toon antwoordVerberg antwoord
Antwoord: D
Beide beleidsvormen missen eerst op 4, 8 en 2. FIFO verwijdert 4 voor 6 en laadt later 4 opnieuw; LRU verwijdert 8 voor 6 en laadt daarna 8 opnieuw, terwijl het 4 behoudt voor de laatste treffer. Elk heeft vijf missers, maar andere vervangingsreeksen; een andere te vervangen pagina verandert het totale aantal missers niet noodzakelijk.

Vraag 9 van 10

Het klokalgoritme heeft paginaframes A(1), B(1), C(0), D(1), met de wijzer op B. Een paginafout laadt E. Wat is het resultaat van de vervanging, inclusief de nieuwe positie van de wijzer?
  1. B verdwijnt; E heeft bit 1; wijzer naar C
  2. C verdwijnt; E heeft bit 1; wijzer naar D
  3. C verdwijnt; E heeft bit 0; wijzer naar D
  4. D verdwijnt; E heeft bit 1; wijzer naar A
Toon antwoordVerberg antwoord
Antwoord: B
Het klokalgoritme wist het ingestelde bit van B en gaat naar C, waarvan het nulbit de pagina tot kandidaat voor vervanging maakt. E komt binnen met bit 1 en de wijzer schuift door naar D. B direct verwijderen zou de tweede kans negeren; een ingesteld bit moet tijdens de ronde eerst worden gewist en geldt niet als toestemming om de pagina te verwijderen.

Vraag 10 van 10

Drie processen hebben werkverzamelingen van 7, 5 en 4 pagina's. Er zijn slechts 12 paginaframes beschikbaar. Als de toelatingsregeling precies één volledig proces opschort en het aantal verwijderde werkverzamelingspagina's minimaliseert, welk proces moet dan worden opgeschort en hoeveel benodigde paginaframes blijven over?
  1. Schort het proces met 5 pagina's op; 1 paginaframe over
  2. Schort het proces met 7 pagina's op; 3 paginaframes over
  3. Schort geen proces op; 4 paginaframes over
  4. Schort het proces met 4 pagina's op; 0 paginaframes over
Toon antwoordVerberg antwoord
Antwoord: D
De gezamenlijke vraag van de werkverzamelingen is 16 pagina's, vier meer dan de capaciteit. Het proces met 4 pagina's opschorten laat een vraag van 12 over en verwijdert de kleinst mogelijke volledige werkverzameling. Het proces met 5 pagina's opschorten laat de vraag ook passen, maar verwijdert meer pagina's dan nodig en voldoet niet aan de gestelde eis om het aantal te minimaliseren.
Set 2: Oefening 1: Bouw het pagineringsmodel op10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Hoeveel offsetbits vereist een pagina van 8 KiB?
  1. 10 bits
  2. 13 bits
  3. 12 bits
  4. 16 bits
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Bij pagina's van 2.048 bytes heeft virtueel adres 7.300 een aanwezige geheugenkoppeling naar paginaframe 6 die toegang toestaat. Welk fysiek byteadres bereikt de toegang?
  1. 7.300
  2. 14.336
  3. 13.290
  4. 13.444
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat moet nog worden gecontroleerd wanneer een schrijfbewerking haar vertaling in de TLB vindt?
  1. Of de gecachete rechten schrijven toestaan
  2. Of de pagina een tweede vrij paginaframe heeft
  3. Of de gegevens ook in de TLB zijn opgeslagen
  4. Of de paginatabel een nieuwe lineaire index heeft
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een TLB met 128 vermeldingen koppelt pagina's van 4 KiB. Wat is het bereik?
  1. 32 KiB
  2. 128 KiB
  3. 512 KiB
  4. 4 MiB
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een volledige virtuele adresruimte van 30 bits gebruikt pagina's van 4 KiB en vermeldingen van 8 bytes in een lineaire tabel. Hoeveel geheugen neemt één tabel in?
  1. 256 KiB
  2. 1 MiB
  3. 8 MiB
  4. 2 MiB
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een systeem met twee niveaus gebruikt pagina's van 4 KiB en vermeldingen van 4 bytes op beide niveaus. Eén proces koppelt pagina's in precies vijf directorygebieden. Hoeveel geheugen bevatten de directory en de tabellen op het lagere niveau samen?
  1. 20 KiB
  2. 40 KiB
  3. 24 KiB
  4. 4 MiB
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een geldige pagina krijgt bij de eerste toegang een met nullen gevuld paginaframe, zonder dat iets van de opslag wordt gelezen. Wat voor paginafout trad op?
  1. Een paginafout zonder opslagtoegang
  2. Een paginafout met opslagtoegang
  3. Een TLB-treffer
  4. Een segmentatiefout
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een gewone toegang duurt 80 ns; de totale afhandeling van een paginafout met opslagtoegang duurt 2 ms. Als één verwijzing op 10.000 zo'n paginafout veroorzaakt, wat is dan de effectieve toegangstijd in het model met twee gevallen?
  1. 80,02 ns
  2. 279,992 ns
  3. 199,992 ns
  4. 2.079,992 ns
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Met twee aanvankelijk lege paginaframes verwerkt OPT 2, 7, 2, 9, 7, 2. Hoeveel missers treden op, inclusief eerste gebruik?
  1. 3 missers
  2. 5 missers
  3. 4 missers
  4. 6 missers
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Met drie aanvankelijk lege paginaframes verwerkt OPT 6, 1, 4, 6, 8, 1, 9, 6, 4. Wat zijn het totale aantal missers en het trefferpercentage zonder onvermijdelijke missers bij eerste gebruik?
  1. 6 missers; 75% treffers
  2. 5 missers; 100% treffers
  3. 6 missers; 33,3% treffers
  4. 7 missers; 50% treffers
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Oefening 3: Combineer de mechanismen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een virtuele adresruimte van 28 bits heeft pagina's van 16 KiB en vermeldingen van 8 bytes in een volledige lineaire tabel. Wat is de tabelgrootte?
  1. 64 KiB
  2. 128 KiB
  3. 256 KiB
  4. 2 MiB
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Het besturingssysteem verwijdert het schrijfrecht van een geheugenkoppeling die twee processorkernen mogelijk hebben gecachet. Welke gecachete toestand moet het bijwerken?
  1. Maak alleen de gegevensbytes op beide kernen ongeldig
  2. Maak de vertaling alleen op de schrijvende kern ongeldig
  3. Maak de verouderde vertaling op beide kernen ongeldig
  4. Vervang de adresruimte-identificaties van alle processen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een omgekeerde tabel bestrijkt 8 GiB fysiek geheugen met paginaframes van 8 KiB. Hoeveel vermeldingen zijn nodig?
  1. 1.048.576 vermeldingen
  2. 262.144 vermeldingen
  3. 2.097.152 vermeldingen
  4. 8.388.608 vermeldingen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een 32-bitssysteem met twee niveaus gebruikt pagina's van 4 KiB en vermeldingen van 4 bytes. De directory begint op fysiek 0x3000. Een toegestane toegang gebruikt virtueel 0x01407120; de PDE bevat PFN 0x52 en de PTE bevat PFN 0x9C. Wat zijn het PDE-adres, het PTE-adres en het uiteindelijke gegevensadres?
  1. 0x3005, 0x52007, 0x9C120
  2. 0x3014, 0x5201C, 0x52120
  3. 0x301C, 0x52014, 0x9C120
  4. 0x3014, 0x5201C, 0x9C120
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een paginafout met opslagtoegang vereist een pagina te lezen in 0,15 ms. Als de gekozen te vervangen pagina gewijzigd is, duurt een vereiste synchrone schrijfbewerking eerst 0,20 ms. Als je alle overige overhead negeert, hoeveel langzamer is deze paginafout dan een paginafout met een ongewijzigde te vervangen pagina waarvan de inhoud kan worden teruggehaald?
  1. 0,20 ms langzamer
  2. 0,05 ms langzamer
  3. 0,15 ms langzamer
  4. 0,35 ms langzamer
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Waarom moet een pas geleverde pagina met nulinitialisatie op aanvraag nullen bevatten voordat het proces die leest?
  1. Om het virtuele adres gelijk te maken aan het paginaframenummer
  2. Om te zorgen dat de pagina al een kopie in de wisselruimte heeft
  3. Om te voorkomen dat de processor ooit het wijzigingsbit instelt
  4. Om te voorkomen dat achtergebleven gegevens van een ander proces zichtbaar worden
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een verloop met 20 verwijzingen begint leeg, spreekt acht verschillende pagina's aan en registreert 13 missers. Wat is het trefferpercentage zonder onvermijdelijke missers bij eerste gebruik?
  1. 7/20, oftewel 35%
  2. 12/20, oftewel 60%
  3. 7/12, ongeveer 58,3%
  4. 7/13, ongeveer 53,8%
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een LRU-simulatie met twee paginaframes begint leeg op 9, 3, 9, 7, 3, 9, 7. Wat is het aantal missers en kan een LRU-simulatie met drie paginaframes meer missers hebben op dezelfde reeks?
  1. 5 missers; meer paginaframes voegen geen missers toe
  2. 6 missers; meer paginaframes voegen geen missers toe
  3. 6 missers; meer paginaframes kunnen missers toevoegen
  4. 7 missers; meer paginaframes kunnen missers toevoegen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Het klokalgoritme begint vol met A(1), B(0), C(1), met de wijzer op A. De verwijzingen zijn D, A, E, waarbij D en E aanvankelijk afwezig zijn; treffers stellen bits in en bij vervanging wordt het nieuwe bit ingesteld en schuift de wijzer door. Wat zijn de uiteindelijke paginaframe-inhouden in de oorspronkelijke volgorde en de positie van de wijzer?
  1. E, D, C; wijzer op B
  2. A, E, D; wijzer op B
  3. E, D, C; wijzer op C
  4. A, D, E; wijzer op A
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat is na verwijzing 9 in 2, 6, 2, 8, 6, 9, 9, 6, 4 de werkverzameling voor een venster van vijf verwijzingen?
  1. {4, 6, 9}
  2. {2, 4, 6, 8, 9}
  3. {4, 6, 8, 9}
  4. {4, 9}
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Oefening 4: Analyseer kosten en toegangspatronen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een virtueel adres van 34 bits gebruikt pagina's van 8 KiB. Hoeveel VPN-bits en virtuele pagina's heeft de adresruimte?
  1. 13 VPN-bits; 213 pagina's
  2. 22 VPN-bits; 222 pagina's
  3. 21 VPN-bits; 234 pagina's
  4. 21 VPN-bits; 221 pagina's
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een C-array die op een paginagrens begint, heeft 128 rijen en 1.024 gehele getallen van elk vier bytes per rij. Een LRU-TLB met 64 vermeldingen begint leeg; pagina's zijn 4 KiB en alleen arrayverwijzingen tellen mee. Hoeveel TLB-missers treden op bij doorlopen per rij en bij doorlopen per kolom?
  1. Rij: 128; kolom: 131.072
  2. Rij: 128; kolom: 128
  3. Rij: 1.024; kolom: 131.072
  4. Rij: 131.072; kolom: 128
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Processen A en B gebruiken allebei VPN 12, gekoppeld aan verschillende paginaframes. Hun TLB-vermeldingen hebben verschillende ASID's. Waarom kunnen beide vermeldingen bij een wisseling gecachet blijven?
  1. De opzoeking vergelijkt het PFN met de gecachete rechten
  2. De opzoeking vergelijkt de huidige ASID samen met het VPN
  3. De opzoeking vergelijkt alleen het VPN na bijwerken van de tabelbasis
  4. De opzoeking vergelijkt alleen de huidige ASID voor alle pagina's
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een 32-bitssysteem met twee niveaus heeft pagina's van 4 KiB en vermeldingen van 4 bytes. Proces A koppelt 1.024 opeenvolgende pagina's vanaf virtueel adres nul. Proces B koppelt 1.024 pagina's, één in elk directorygebied. Hoeveel tabelgeheugen heeft elk nodig, inclusief de directory?
  1. A: 4 KiB; B: 4 MiB
  2. A: 8 KiB; B: 8 KiB
  3. A: 8 KiB; B: 4 MiB + 4 KiB
  4. A: 4 MiB; B: 4 MiB + 4 KiB
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Vervang bij x86-64-paginering met vier niveaus een volledig gevuld, uitgelijnd gebied van 2 MiB met koppelingen van 4 KiB door één koppeling van 2 MiB. Ga ervan uit dat hogere tabellen nog nodig zijn voor andere koppelingen. Hoeveel tabelpagina's op het laagste niveau en hoeveel leesbewerkingen bij het doorlopen per TLB-misser vervallen voor dat gebied?
  1. 512 tabelpagina's; één leesbewerking
  2. Eén tabelpagina; twee leesbewerkingen
  3. Eén tabelpagina; één leesbewerking
  4. 512 tabelpagina's; twee leesbewerkingen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een verwijzing mist in de TLB, maar de PTE is aanwezig en staat de toegang toe. Vereist het verkrijgen van deze vertaling een paginafout met opslagtoegang?
  1. Ja; elke TLB-aanvulling leest de pagina uit wisselruimte
  2. Nee; de vertaling kan zonder opslaglezing worden aangevuld
  3. Ja; de TLB-misser wist het aanwezigheidsbit
  4. Nee; de toegang verloopt zonder controle van rechten
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Gewone verwijzingen duren 120 ns en verwijzingen die een paginafout met opslagtoegang veroorzaken duren in totaal 3 ms. Welke maximale kans op zo'n paginafout houdt het gemiddelde in het model met twee gevallen op of onder 150 ns?
  1. 150/3000000=5,0×10−5
  2. 30/3000120≈1,0×10−5
  3. 120/3000000=4,0×10−5
  4. 30/2999880≈1,0×10−5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Vergelijk drie aanvankelijk lege paginaframes op 5, 2, 8, 5, 1, 2, 5, 8 bij LRU en OPT. Hoeveel missers heeft elk?
  1. LRU: 6; OPT: 5
  2. LRU: 7; OPT: 5
  3. LRU: 6; OPT: 6
  4. LRU: 7; OPT: 6
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een ronde van het verbeterde klokalgoritme vergelijkt X met (gebruiksbit, wijzigingsbit) = (0, 1) en Y met (1, 0). Welke pagina heeft volgens de standaardvoorkeur voor klassen de voorkeur en welke kosten kan het bewaren vereisen?
  1. Y; het bewaren kan een schrijfbewerking vereisen
  2. X; gebruiksbit nul neemt de noodzaak tot schrijven weg
  3. X; het bewaren kan een schrijfbewerking vereisen
  4. Y; wijzigingsbit nul bewijst dat de pagina ongebruikt was
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Twee processen hebben elk zes pagina's nodig om voortgang te boeken, maar krijgen samen acht paginaframes. Een voorgestelde oplossing vervangt globale door lokale paginavervanging en geeft elk vier paginaframes. Waarom kan overmatig wisselen hierdoor onopgelost blijven?
  1. Elke toewijzing blijft kleiner dan de werkverzameling van het proces
  2. Lokale paginavervanging legt elke toewijzing blijvend vast
  3. Acht paginaframes volstaan als elke pagina een eigen eigenaar heeft
  4. Beide processen kiezen nog pagina's uit één globale verzameling
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Oefening 5: Pas toe en stel vast10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Bij pagina's van 8 KiB heeft virtueel 0x00012345 een aanwezige geheugenkoppeling naar PFN 0x2D die toegang toestaat. Welk fysiek adres levert dat op?
  1. 0x0005A345
  2. 0x0002D345
  3. 0x0005B345
  4. 0x00012345
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Twee ontwerpen hebben geen extra TLB-opzoektijd en geen paginafouten of caches voor het doorlopen van tabellen. Een geheugentoegang duurt 90 ns. Ontwerp L heeft een lineaire tabel en 95% TLB-treffers; ontwerp H heeft een tabel met vier niveaus en 99% treffers. Wat zijn hun gemiddelde verwijzingstijden?
  1. L: 94,5 ns; H: 90,9 ns
  2. L: 85,5 ns; H: 89,1 ns
  3. L: 94,5 ns; H: 93,6 ns
  4. L: 99 ns; H: 97,2 ns
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Bij een vaste virtuele adresbreedte verandert een lineaire tabel van pagina's van 4 KiB en vermeldingen van 8 bytes naar pagina's van 16 KiB en vermeldingen van 16 bytes. Hoe verandert de totale grootte in bytes?
  1. De tabel wordt een kwart zo groot
  2. De tabel wordt half zo groot
  3. De tabel blijft even groot
  4. De tabel wordt twee keer zo groot
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een hypothetisch systeem gebruikt 46 geïmplementeerde virtuele adresbits, pagina's van 8 KiB en vermeldingen van 8 bytes in tabellen ter grootte van een pagina. Lagere indexen worden maximaal gevuld. Hoeveel niveaus zijn nodig en hoeveel indexbits blijven over voor de basis?
  1. Drie niveaus; 10 basisindexbits
  2. Vier niveaus; 6 basisindexbits
  3. Vijf niveaus; 3 basisindexbits
  4. Vier niveaus; 3 basisindexbits
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een gewijzigde pagina wordt succesvol teruggeschreven terwijl ze aanwezig blijft. Daarna schrijft geen proces ernaar. Wat is haar toestand en kan een andere verwijzing die gebruiken zonder inwisselen?
  1. Gewijzigd en aanwezig; ja
  2. Ongewijzigd en aanwezig; ja
  3. Ongewijzigd en niet aanwezig; nee
  4. Gewijzigd en niet aanwezig; nee
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Processen A, B en C delen aanvankelijk via COW twee privégegevenspagina's van 4 KiB. A schrijft naar beide pagina's, B schrijft daarna naar de eerste en C vervolgens naar de tweede. Een afhandelaar hergebruikt een oorspronkelijk paginaframe alleen zodra het één eigenaar heeft. Hoeveel extra fysiek paginageheugen vereisen deze schrijfbewerkingen?
  1. 16 KiB
  2. 12 KiB
  3. 20 KiB
  4. 24 KiB
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een verwijzingsverloop gebruikt zeven verschillende pagina's en begint met leeg geheugen. Hoeveel onvermijdelijke missers bij eerste gebruik moet het bevatten?
  1. 0 onvermijdelijke missers bij eerste gebruik
  2. 6 onvermijdelijke missers bij eerste gebruik
  3. 7 onvermijdelijke missers bij eerste gebruik
  4. 14 onvermijdelijke missers bij eerste gebruik
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Twee aanvankelijk lege FIFO-simulaties verwerken 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5, 1, met drie en vier paginaframes. Wat zijn de aantallen missers en vertoont de grotere toewijzing de anomalie van Belady op deze volledige reeks?
  1. Drie: 9; vier: 10; ja
  2. Drie: 10; vier: 10; nee
  3. Drie: 11; vier: 10; nee
  4. Drie: 10; vier: 11; ja
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Het klokalgoritme heeft paginaframes R(1), S(1), T(1), met de wijzer op S. Er zijn geen treffers terwijl het een te vervangen pagina zoekt. Welke pagina wordt verwijderd en waar eindigt de wijzer na de vervanging?
  1. R wordt verwijderd; wijzer eindigt op S
  2. S wordt verwijderd; wijzer eindigt op T
  3. T wordt verwijderd; wijzer eindigt op R
  4. S wordt verwijderd; wijzer eindigt op S
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Op een bepaald moment hebben processen A en B de verwijzingsvensters 7, 4, 7, 9, 4, 7 en 2, 8, 2, 5, 8, 2. De venstergrootte is zes en hun paginaverzamelingen overlappen niet. Ze hebben samen vijf paginaframes. Wat leidt een toelatingsbeleid op basis van werkverzamelingen hieruit af?
  1. De vraag is twaalf paginaframes; verkort beide vensters automatisch
  2. De vraag is vijf paginaframes; beide werkverzamelingen passen al
  3. De vraag is zes paginaframes; verminder het aantal actieve processen
  4. De vraag is drie paginaframes; beide processen kunnen alle paginaframes delen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

79 Kernbegrippen, elk met een definitie

A

aanwezigheidsbit
Een aanwezigheidsbit vertelt de hardware of een vermelding een aanwezige geheugenkoppeling levert; bij een gewist bit moet de software de status van de pagina bepalen.
Een gewist aanwezigheidsbit kan de afhandelaar naar metadata over wisselruimte of naar een toewijzing met nulinitialisatie op aanvraag leiden.
adresruimte-identificatie
Een adresruimte-identificatie voorziet gecachete vertalingen van hun adresruimtecontext, zodat identieke VPN's van verschillende processen onderscheiden blijven.
Verschillende ASID's laten twee vertalingen voor virtuele pagina 7 veilig naast elkaar in dezelfde TLB bestaan.
adresvertaalbuffer
Een adresvertaalbuffer is een snelle hardwarecache voor recente virtuele paginavertalingen en de bijbehorende toegangsinformatie.
Bij opeenvolgende toegang tot veel gehele getallen op één pagina kan één gecachete TLB-vertaling worden hergebruikt.
anomalie van Belady
De anomalie van Belady is een toename van paginamissers wanneer een beleid meer paginaframes krijgt bij dezelfde paginaverwijzingsreeks en beginvoorwaarden.
Bij FIFO kan de anomalie optreden; extra capaciteit verandert welke pagina's later op basis van binnenkomstvolgorde worden vervangen.

B

beschermingsbits
Beschermingsbits geven de toegestane bewerkingen voor een geheugenkoppeling aan, zoals lezen, schrijven, uitvoeren en toegang vanuit gebruikersmodus.
Een aanwezige codepagina kan een schrijfbewerking weigeren, ook al is het paginaframenummer beschikbaar.
bundeling van paginaoverdrachten
Bundeling van paginaoverdrachten groepeert paginaoverdrachten in grotere opslagbewerkingen en vermindert zo de overhead van veel afzonderlijke kleine overdrachten, vooral op schijven.
Een paginadaemon kan meerdere schrijfbewerkingen voor gewijzigde pagina's combineren bij het voorbereiden van paginaframes voor later hergebruik.

C

cache voor paginatabelstructuren
Een cache voor paginatabelstructuren bewaart tussentijdse paginatabelinformatie zodat latere doorgangen sommige opzoekingen op hogere niveaus niet hoeven te herhalen.
Een TLB-misser met vier niveaus kan minder dan vier vertragingen door hoofdgeheugentoegang kosten wanneer tussentijdse vermeldingen zijn gecachet.
canoniek adres
Een canoniek adres is een x86-64-adres waarvan de ongebruikte bovenste bits het hoogste geïmplementeerde virtuele adresbit herhalen.
In de gewone modus met vier niveaus moeten de bits boven bit 47 dat bit herhalen om het adres canoniek te maken.
capaciteitsmisser
Een capaciteitsmisser treedt op wanneer de beperkte capaciteit aan paginaframes verhindert dat een pagina behouden blijft totdat een latere verwijzing die opnieuw nodig heeft.
Een terugkerende pagina kan een misser opleveren hoewel die eerder is geladen, omdat een andere pagina het paginaframe opnieuw gebruikte.
combinatie van segmentatie en paginering
Een combinatie van segmentatie en paginering geeft elk segment een begrensde paginatabel en laat vermeldingen voor virtuele gaten tussen segmenten weg.
Afzonderlijke tabellen voor heap en stack besparen vermeldingen voor het gat, maar kunnen tabeltoewijzingen van verschillende grootte vereisen.

D

directory-index
Een directory-index is het hoge VPN-veld dat tijdens een hiërarchische adresvertaling een vermelding in de paginadirectory selecteert.
De bovenste tien bits selecteren directoryvermelding 2 voor virtueel adres 0x00803ABC in het 10/10/12-schema.
door hardware beheerde TLB
Een door hardware beheerde TLB wordt bij een ontbrekende vertaling aangevuld doordat de processorhardware een door hardware bepaalde paginatabelvorm doorloopt.
Een gewone x86-TLB-misser kan worden afgehandeld zonder een aanvulafhandelaar van het besturingssysteem binnen te gaan.
door software beheerde TLB
Een door software beheerde TLB gebruikt een exceptieafhandelaar van het besturingssysteem om een ontbrekende vertaling te vinden en met geprivilegieerde instructies te plaatsen.
Een klassieke MIPS-aanvulafhandelaar keert terug zodat de processor de instructie die de misser veroorzaakte opnieuw kan proberen.
doorlopen van de paginatabel
Bij het doorlopen van de paginatabel worden geïndexeerde koppelingsvermeldingen gevolgd vanaf de geselecteerde basis naar een uiteindelijke vermelding die de gevraagde fysieke pagina aanduidt.
Een doorgang met twee niveaus leest een PDE en een PTE voordat de processor de gevraagde gegevens benadert.
dunbezette adresruimte
Een dunbezette adresruimte heeft grote ongebruikte virtuele gebieden tussen gekoppelde gebieden, zoals het gat tussen de heap en de stack van een proces.
Het grote virtuele gat heeft geen gegevenspaginaframes nodig alleen omdat aan beide kanten adressen bestaan.

E

effectieve toegangstijd
De effectieve toegangstijd is de kansgewogen gemiddelde tijd voor geheugenverwijzingen volgens een opgegeven kostenmodel voor treffers, missers of paginafouten.
Een TLB-trefferpercentage van 98% geeft 102 ns wanneer treffers 100 ns en succesvol afgehandelde missers 200 ns duren.

F

FIFO-paginavervanging
FIFO-paginavervanging verwijdert de aanwezige pagina die het eerst is geladen en houdt de volgorde van binnenkomst bij zonder die bij treffers te vernieuwen.
Een veelgebruikte pagina kan toch door FIFO voor vervanging worden gekozen als die vóór alle andere aanwezige pagina's binnenkwam.
fysiek paginaframenummer
Een fysiek paginaframenummer duidt een paginaframe aan met zijn index in het fysieke geheugen, in plaats van met het byteadres van het begin van het paginaframe.
Bij pagina's van 4 KiB duidt fysiek paginaframenummer 3 het paginaframe aan dat begint op byteadres 12.288.

G

gebruiksbit
Een gebruiksbit registreert of een pagina is aangesproken sinds het besturingssysteem het bit voor het laatst heeft gewist; het telt geen toegangen.
Tien leesbewerkingen na het wissen laten dezelfde bitwaarde achter als één leesbewerking: het gebruiksbit is 1.
gedeelde codepagina
Een gedeelde codepagina is een fysieke pagina met programma-instructies die als alleen-lezen in de adresruimte van meer dan één proces is gekoppeld.
Meerdere exemplaren van een editor kunnen via verschillende PTE's één aanwezige kopie van dezelfde codepagina gebruiken.
gehashte paginatabel
Een gehashte paginatabel vindt koppelingsrecords via een hash van de identiteit van de virtuele pagina en verwerkt botsende sleutels met extra stappen.
Een hashopzoeking kan een koppeling van proces en VPN vinden zonder elke vermelding in een omgekeerde structuur te doorzoeken.
geheugenbeheereenheid
Een geheugenbeheereenheid is processorhardware die tijdens geheugenverwijzingen adressen vertaalt en de rechten van geheugenkoppelingen afdwingt.
De MMU kan een schrijfbewerking via een alleen-lezenvertaling weigeren, ook wanneer de TLB-opzoeking een treffer oplevert.
geheugendrempel
Een geheugendrempel is een grens voor vrij geheugen die wordt gebruikt om het vrijmaken op de achtergrond te starten of te begrenzen, zodat het systeem een reserve paginaframes behoudt.
Wanneer vrij geheugen onder een lage geheugendrempel zakt, begint het vrijmaken richting een hoger streefaantal vrije paginaframes.
geheugenkoppeling uitsluitend voor kerneltoegang
Een geheugenkoppeling uitsluitend voor kerneltoegang staat geprivilegieerde toegang door de kernel toe en weigert gewone verwijzingen vanuit gebruikersmodus naar het gekoppelde geheugen.
Een leesbewerking vanuit gebruikersmodus naar een kernelpagina uitsluitend voor kerneltoegang wordt geweigerd, ook wanneer de geheugenkoppeling aanwezig is.
globale paginavervanging
Globale paginavervanging staat een proces dat een paginafout veroorzaakt toe een pagina van een ander proces te verwijderen, zodat de verzameling paginaframes flexibel wordt gedeeld.
Een groeiend proces kan de paginafoutfrequentie van een ander proces verhogen door paginaframes af te nemen die de pagina's van dat andere proces bevatten.
grote pagina
Een grote pagina is een geheugenkoppeling die groter is dan de basispaginagrootte en een hiërarchische doorgang kan beëindigen bij een vermelding op een hoger niveau.
Een x86-64-directoryvermelding kan een pagina van 2 MiB rechtstreeks koppelen en de laagste tabelopzoeking weglaten.

I

interne fragmentatie
Interne fragmentatie is toegewezen ruimte die ongebruikt blijft binnen een blok van vaste grootte, zoals de gedeeltelijk gevulde laatste pagina van een gebied.
Een gebied van 9.000 bytes in drie pagina's van 4 KiB laat 3.288 toegewezen bytes ongebruikt.
isolatie van kernelpaginatabellen
Isolatie van kernelpaginatabellen scheidt de meeste kernelkoppelingen van de koppelingen die tijdens gebruikersuitvoering worden gebruikt en wisselt van koppelingscontext bij het binnengaan van de kernel.
Op getroffen systemen vermindert isolatie de blootstelling aan Meltdown, ten koste van extra werk om geheugenkoppelingen te wisselen.

K

klokwijzer
Een klokwijzer markeert het volgende paginaframe dat bij paginavervanging met het klokalgoritme wordt onderzocht en schuift door wanneer kandidaten worden gewist of vervangen.
Nadat het klokalgoritme de pagina in een paginaframe heeft vervangen, schuift de klokwijzer door naar het volgende paginaframe in de ring.
kopiëren bij schrijven
Kopiëren bij schrijven deelt aanvankelijk privépagina-inhoud en maakt een eigen beschrijfbare kopie wanneer een proces voor het eerst naar een gedeelde pagina schrijft.
Een kind dat slechts drie pagina's van 4 KiB wijzigt, kan voorkomen dat het hele gegevensgebied van het ouderproces wordt gekopieerd.

L

LFU-paginavervanging
LFU-paginavervanging selecteert de pagina met de laagste getelde toegangsfrequentie, wat pagina's kan bevoordelen die lang geleden populair waren.
Zonder geleidelijke verlaging van aantallen kan een voorheen vaak gebruikte pagina blijven terwijl een bruikbare pagina uit een nieuwe fase wordt verwijderd.
lineaire paginatabel
Een lineaire paginatabel is een array met één vermelding voor elke mogelijke virtuele pagina, met het virtuele paginanummer als index.
Een volledige lineaire tabel voor 32-bitsadressen met pagina's van 4 KiB en vermeldingen van 4 bytes neemt 4 MiB per proces in.
lokale paginavervanging
Lokale paginavervanging beperkt de keuze van te vervangen pagina's tot de eigen paginaframetoewijzing van het proces dat de paginafout veroorzaakt en beperkt zo verwijdering tussen processen.
Een toewijzing van vier paginaframes kan nog steeds geen werkverzameling van zes pagina's bevatten alleen omdat de vervanging lokaal is.
LRU met meerdere generaties
LRU met meerdere generaties is een aanpak van Linux voor het vrijmaken van pagina's die pagina's groepeert naar waargenomen recent gebruik om verwijdering onder geheugendruk te sturen.
Veroudering op basis van generaties geeft de code voor het vrijmaken meer informatie over recent gebruik dan één gebruiksbit zonder veroudering.
LRU-paginavervanging
LRU-paginavervanging verwijdert de aanwezige pagina waarvan de meest recente toegang het langst geleden is en werkt bij een treffer de volgorde van recent gebruik bij.
Een treffer op een lang geleden binnengekomen pagina beschermt die bij LRU, hoewel ze oud blijft in de FIFO-wachtrij.

N

nulinitialisatie op aanvraag
Nulinitialisatie op aanvraag levert bij het eerste gebruik met nullen gevuld geheugen in plaats van elke gereserveerde pagina vooraf toe te wijzen en te wissen.
Een pas aangesproken heappagina kan zonder schijflezing worden geleverd, terwijl oude bytes van een hergebruikt paginaframe verborgen blijven.

O

omgekeerde paginatabel
Een omgekeerde paginatabel heeft voor het systeem één vermelding per fysiek paginaframe en legt de adresruimte-identiteit en virtuele pagina vast die het paginaframe bezetten.
Bij 16 GiB RAM en paginaframes van 4 KiB heeft een strikte omgekeerde tabel 4.194.304 paginaframevermeldingen.
ongeldig maken van TLB-vermeldingen
Het ongeldig maken van TLB-vermeldingen maakt gecachete vertalingen binnen het betreffende bereik ongeldig, zodat latere verwijzingen die opnieuw moeten aanvullen met actuele koppelingsinformatie.
Vermeldingen ongeldig maken bij een contextwisseling voorkomt dat het volgende proces een vertaling zonder identificatie gebruikt.
ongeldig maken van TLB-vermeldingen op meerdere processorkernen
Het ongeldig maken van TLB-vermeldingen op meerdere processorkernen coördineert het ongeldig maken op kernen die een door het besturingssysteem gewijzigde geheugenkoppeling mogelijk cachen.
Schrijfrecht verwijderen vereist dat andere processorkernen stoppen met het gebruik van eventuele oudere beschrijfbare vertalingen.
ongewijzigde pagina
Een ongewijzigde pagina heeft volgens de registratie van de wijzigingstoestand geen openstaande wijzigingen; om die veilig te verwijderen moet de inhoud nog steeds kunnen worden teruggehaald of opnieuw aangemaakt.
Ongewijzigde code kan worden verwijderd en later opnieuw uit het uitvoerbare bestand worden geladen zonder een nieuwe schrijfbewerking.
onvermijdelijke misser bij eerste gebruik
Een onvermijdelijke misser bij eerste gebruik is een misser bij het eerste gebruik van een pagina die nog niet is geladen en kan niet worden voorkomen door een ander vervangingsbeleid te kiezen.
Een verloop dat leeg begint en vijf verschillende pagina's aanspreekt, heeft vijf onvermijdelijke missers bij eerste gebruik.
OOM-killer
Een OOM-killer beëindigt bij extreme druk een geselecteerd proces zodat het geheugen kan worden vrijgemaakt wanneer het proces eindigt.
Het beëindigde proces verliest zijn werk, terwijl de vrijgegeven bronnen andere processen mogelijk laten doorgaan.
optimale paginavervanging
Optimale paginavervanging verwijdert de pagina die het verst in de toekomst nodig is en geeft het kleinste aantal missers voor een volledig bekende paginaverwijzingsreeks.
OPT is een maatstaf voor simulaties omdat een besturingssysteem de toekomstige toegangen van een willekeurig programma niet kan kennen.
overmatig wisselen van pagina's
Overmatig wisselen van pagina's is aanhoudende zware paginaverplaatsing met weinig nuttige uitvoering doordat actieve processen meer aanwezige pagina's nodig hebben dan het geheugen bevat.
Een lage CPU-bezettingsgraad naast voortdurende paginering kan aangeven dat meer processen starten de druk zou verergeren.

P

pagina
Een pagina is een blok virtuele adressen van vaste grootte dat als één geheel aan een even groot fysiek paginaframe wordt gekoppeld.
Een virtuele pagina van 4 KiB kan paginaframe 12 bezetten terwijl de volgende virtuele pagina paginaframe 3 bezet.
paginadaemon
Een paginadaemon is een achtergrondproces van het besturingssysteem dat geheugen vrijmaakt en vrije paginaframes voorbereidt voordat urgente toewijzingen die nodig hebben.
kswapd van Linux kan pagina's beginnen vrij te maken terwijl nog een kleine reserve vrije paginaframes over is.
paginadirectory
Een paginadirectory is een tabel op een hoger niveau waarvan de vermeldingen paginatabelpagina's op een lager niveau aanwijzen of hun gebieden als afwezig markeren.
In een 10/10/12-systeem bestrijkt één directoryvermelding een virtueel gebied met 1.024 gegevenspagina's.
paginadirectoryvermelding
Een paginadirectoryvermelding is een record dat naar een lagere tabel verwijst en toestand of rechten bevat voor het virtuele gebied dat het vertegenwoordigt.
Het paginaframenummer van een PDE die niet op het laagste niveau staat, wijst een pagina met PTE's aan, niet het uiteindelijke gegevenspaginaframe van het programma.
paginafout
Een paginafout is een exceptie die ontstaat wanneer een geheugentoegang met de huidige geheugenkoppeling niet kan worden voltooid, bijvoorbeeld door afwezigheid of een beschermingsschending.
De afhandelaar kan een COW-schrijffout herstellen maar een schrijfbewerking naar werkelijk alleen-lezen-programmacode weigeren.
paginafout met opslagtoegang
Een paginafout met opslagtoegang vereist een leesbewerking van de opslag om de inhoud van de pagina te verkrijgen voordat het besturingssysteem de geheugenkoppeling kan voltooien.
Een uitgewisselde gegevenspagina van een SSD lezen blijft een paginafout met opslagtoegang, ook als de SSD snel is.
paginafout zonder opslagtoegang
Een paginafout zonder opslagtoegang wordt opgelost zonder pagina-inhoud van de opslag te lezen, bijvoorbeeld door met nullen gevuld geheugen te leveren of een aanwezig paginaframe te koppelen.
Een toewijzing met nulinitialisatie op aanvraag kan het aantal paginafouten zonder opslagtoegang verhogen zonder verkeer naar de wisselruimte te veroorzaken.
paginaframe
Een paginaframe is een blok fysiek geheugen van vaste grootte dat één virtuele pagina van de overeenkomstige paginagrootte kan bevatten.
Het besturingssysteem kan elk vrij paginaframe van 4 KiB gebruiken voor een pas benodigde pagina van 4 KiB.
paginaoffset
Een paginaoffset is de bytepositie binnen een pagina, gecodeerd in de lage adresbits en behouden tijdens de vertaling.
Een offset van 904 duidt nog steeds byte 904 aan nadat de pagina aan fysiek paginaframe 9 is gekoppeld.
paginatabel
Een paginatabel is een door het besturingssysteem beheerde structuur die de koppelingen van virtueel naar fysiek geheugen en de toegangsinformatie van een proces vastlegt.
Door de huidige paginatabel te wisselen kunnen twee processen hetzelfde virtuele adres voor verschillende gegevens gebruiken.
paginatabel met meerdere niveaus
Een paginatabel met meerdere niveaus is een hiërarchie van geïndexeerde tabellen die alleen takken op lagere niveaus toewijst waar adreskoppelingen die nodig hebben.
Een ongebruikt virtueel bereik kan worden weergegeven met een ontbrekende tak in plaats van duizenden ongebruikte vermeldingen op het laagste niveau.
paginatabelvermelding
Een paginatabelvermelding is een koppelingsrecord met een fysiek paginaframenummer en informatie over de toestand of bescherming van een virtuele pagina.
De processor controleert een paginatabelvermelding voordat hij het paginaframenummer gebruikt om een vertaling te voltooien.
paginavervanging met het klokalgoritme
Paginavervanging met het klokalgoritme doorloopt een ring van paginaframes, wist ingestelde gebruiksbits en verwijdert de eerste kandidaat die het met een gewist bit aantreft.
Een pagina met gebruiksbit 1 krijgt een nieuwe kans wanneer de wijzer het bit wist en verdergaat.
paginaverwijzingsreeks
Een paginaverwijzingsreeks is een geordende reeks paginanummers waarmee treffers, missers en keuzes van te vervangen pagina's voor een vervangingsbeleid worden gesimuleerd.
Met dezelfde paginaverwijzingsreeks en aanvankelijke paginaframes kunnen FIFO en LRU onder gelijke omstandigheden worden vergeleken.
paginering met vijf niveaus
Paginering met vijf niveaus voegt op ondersteunende x86-64-processors een hoger tabelniveau toe en maakt, indien geselecteerd, 57 geïmplementeerde virtuele adresbits mogelijk.
Het extra niveau inschakelen voegt een index van negen bits toe vóór de vier bekende lagere indexen.
paginering op aanvraag
Paginering op aanvraag levert een pagina wanneer een verwijzing die voor het eerst nodig heeft, zodat niet elke pagina vóór het begin van de uitvoering hoeft te worden voorbereid.
Een programma kan beginnen terwijl pagina's die het nog niet heeft aangesproken geen aanwezige inhoud hebben.
PML4
Een PML4 is de tabel op het hoogste niveau bij x86-64-paginering met vier niveaus, geselecteerd via CR3 en geïndexeerd met virtuele adresbits 47–39.
De PML4-vermelding leidt naar een paginadirectorypointertabel voordat de doorgang de directory en het laagste niveau bereikt.

R

regeling op basis van de paginafoutfrequentie
Regeling op basis van de paginafoutfrequentie past de toewijzing van paginaframes aan een proces aan met boven- en ondergrenzen voor de gemeten paginafoutfrequentie.
Een proces boven de bovengrens heeft meer paginaframes nodig; een proces onder de ondergrens kan er enkele vrijgeven.
ruimtelijke lokaliteit
Ruimtelijke lokaliteit is de neiging om nabije adressen kort na elkaar te benaderen, zodat één paginavertaling veel verwijzingen kan bedienen.
Aangrenzende arrayelementen lezen levert na het eerste element op een pagina vaak veel TLB-treffers op.

S

segmentatiefout
Een segmentatiefout is een gebruikelijke reactie van het besturingssysteem op een ongeldige of verboden geheugentoegang die de afhandelaar niet op een geldige manier kan herstellen.
Een TLB-misser op een aanwezige pagina die toegang toestaat, veroorzaakt op zichzelf geen segmentatiefout.
stackalgoritme
Een stackalgoritme heeft verzamelingen aanwezige pagina's die bij toenemende paginaframecapaciteit in elkaar passen, waardoor extra paginaframes het aantal missers niet verhogen.
LRU en OPT hebben de stackeigenschap, hoewel LRU nog steeds meer missers dan OPT kan hebben.

T

tabelindex
Een tabelindex is het VPN-veld dat een vermelding selecteert binnen de tabel op het lagere niveau die door de voorafgaande directoryvermelding is gevonden.
Tabelindex 3 vindt een PTE 12 bytes na de tabelbasis wanneer vermeldingen vier bytes innemen.
te vervangen pagina
Een te vervangen pagina is een aanwezige pagina die wordt gekozen om te verwijderen zodat het fysieke paginaframe opnieuw kan worden gebruikt voor de inhoud van een andere pagina.
OPT kiest de aanwezige te vervangen pagina met het verst weg gelegen volgende gebruik in de bekende toekomstige reeks.
temporele lokaliteit
Temporele lokaliteit is de neiging om recent aangesproken adressen opnieuw te gebruiken, waardoor de recente vertaalgeschiedenis nuttig is voor caching.
Een korte lus voert herhaaldelijk code op dezelfde paar pagina's uit en kan hun gecachete geheugenkoppelingen hergebruiken.
terugschrijven
Terugschrijven bewaart de gewijzigde inhoud van een aanwezige pagina in achterliggende opslag, zodat de wijzigingstoestand na succes kan worden gewist.
Een pagina terugschrijven vereist niet dat die direct wordt verwijderd; het proces kan het paginaframe blijven gebruiken.
TLB-bereik
Het TLB-bereik is de hoeveelheid geheugen die een verzameling gecachete vertalingen vertegenwoordigt, berekend als het aantal vermeldingen vermenigvuldigd met de paginagrootte.
Vierenzestig vermeldingen vertegenwoordigen 256 KiB bij pagina's van 4 KiB, aangenomen dat elke vermelding die paginagrootte koppelt.
TLB-misser
Een TLB-misser treedt op wanneer in de vertaalcache geen bruikbare vertaling voor een gevraagde virtuele pagina en context wordt gevonden.
Een TLB-misser kan worden aangevuld vanuit een aanwezige PTE zonder pagina-inhoud uit de wisselruimte te lezen.
toelatingsregeling
Toelatingsregeling beperkt de verzameling actieve processen zodat de beschikbare paginaframes hun geheugenvraag kunnen ondersteunen en schort zo nodig processen op.
Als actieve werkverzamelingen de capaciteit overschrijden, kan één proces opschorten de overige processen laten doorgaan.

V

verbeterd klokalgoritme
Het verbeterde klokalgoritme betrekt de wijzigingstoestand bij de keuze van een te vervangen pagina met tweede kansen, zodat zowel gebruiksgeschiedenis als de kosten van het bewaren van inhoud meetellen.
Een pagina waarvan gebruiksbit en wijzigingsbit beide 0 zijn, de voorkeursklasse (0, 0), heeft geen recent geregistreerd gebruik en geen wijzigingen die op terugschrijven wachten.
virtueel paginanummer
Een virtueel paginanummer is het deel met de hoogste bits van een virtueel adres dat aanduidt welke virtuele pagina de gevraagde byte bevat.
Bij pagina's van 1.024 bytes heeft virtueel adres 5.000 virtueel paginanummer 4 en offset 904.
vooraf ophalen
Vooraf ophalen levert pagina's voordat ze nodig zijn en gebruikt een verwacht toegangspatroon om later wachten op pagina-inhoud te verminderen.
Vooruitlezen kan een sequentieel toegangspatroon helpen, maar verspilt bronnen als de voorspelde pagina's ongebruikt blijven.

W

werkverzameling
Een werkverzameling is de verzameling verschillende pagina's die een proces binnen een recent verwijzingsvenster gebruikte en schat welke pagina's het momenteel aanwezig moet hebben.
Voor het venster van vijf verwijzingen 4, 5, 4, 5, 4 is de werkverzameling {4, 5}, met grootte twee.
wijzigingsbit
Een wijzigingsbit registreert of een pagina is beschreven sinds de wijzigingstoestand voor het laatst is gewist en helpt zo niet-opgeslagen wijzigingen herkennen.
Nadat terugschrijven is voltooid, kan het besturingssysteem de wijzigingstoestand wissen terwijl de pagina aanwezig blijft.
willekeurige paginavervanging
Willekeurige paginavervanging kiest willekeurig een aanwezige pagina voor vervanging en vermijdt zo een volgorde op basis van recent gebruik, terwijl de resultaten per uitvoering verschillen.
Willekeurige keuzes kunnen gemiddeld beter presteren dan LRU bij een cyclus die niet past, maar één uitvoering kan nog steeds pech hebben.
wisselruimte
Wisselruimte is een gereserveerd opslaggebied waarin pagina-inhoud wordt bewaard die uit het fysieke geheugen is verdrongen, zoals een wisselbestand of wisselpartitie.
Een paginafoutafhandelaar kan de bytes van een verdrongen pagina vanaf de vastgelegde locatie in de wisselruimte in een vrij paginaframe lezen.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag