next_inactive up previous


6.1 Virtueel geheugen

Vroeger hadden computers erg weinig geheugen. Om toch grote programma's te kunnen draaien heeft men een techniek bedacht waarbij men werkt met overlays. Als een programmeur een programma schrijft dan deelt hij dat zelf in in stukken die in het geheugen passen. Bij het uitvoeren wordt dan een zo'n stuk in het werkgeheugen gezet totdat een ander stuk nodig is. Het programma haalt zelf dit nieuwe stuk op en plaatst het in het geheugen. Door dit principe te automatiseren en onder te brengen in het operating system heeft men de techniek van virtueel geheugen ontwikkeld.

Paging

Een CPU heeft meestal een groter adresseerbereik dan er daadwerkelijk aan werkgeheugen (fysieke adresruimte) aanwezig is. Bij paging wordt het adresseerbereik verdeeld in stukken van vaste grootte die we pages noemen. Het echte werkgeheugen wordt daarop afgebeeld via een vertaalslag van speciale hardware die we MMU noemen (memory management unit). Van een programma zijn alleen bepaalde pages aanwezig, namelijk die waar de CPU mee bezig is. Komt de CPU bij de uitvoering op een niet aanwezig page dan detecteerd de mmu dat en genereert een pagetrap (exception). Via het operating system wordt de informatie die voor die page nodig is van disk gehaald en kan het programma worden doorgestart. Voordeel is dat elk programma in principe het totale geheugenbereik (virtuele adresruimte) ter beschikking heeft en er eenvoudig meer programma's afwisselend door de CPU uitgevoerd kunnen worden (multitasking). Ook hoeft de programmeur zich niet om dit systeem te bekommeren. Paging is transparant voor de applicatieontwikkelaar.

Implementatie van paging

Voor paging is schijfruimte nodig. De gegeven moeten ergens beschikbaar zijn. De MMU houdt met een pagetabel bij welke fysieke pages op welk virtueel adres worden afgebeeld en welke pages ook echt aanwezig zijn.

Demand-paging en werksetmodel

Bij verwijzing naar een niet aanwezig page ontstaat een pagetrap, pagainafout of page fault. De CPU komt dan in het operating system. Het operating system grijpt in en kan de niet aanwezig pagina van disk halen en in het werkgeheugen zetten. Op deze wijze wordt elke keer een pagina op verzoek ingevoerd. We noemen dit demand paging. Op een gegeven moment bevinden zich een hoeveelheid pages in het werkgeheugen. De CPU haalt daar instructies van op of schrijft of leest gegevens. De verzameling pages die door de laatste 'k' geheugenreferenties worden genruikt noemt men de werkset. Zo'n werkset zou redelijk stabiel in de tijd kunnen zijn en een aanwijzing kunnen zijn welke pages echt van belang zijn. Deze zouden dan bij voorkeur geladen moeten worden bij het opstarten van een programma.

Paginavervangingsbeleid

Als al het fysieke geheugen in gebruik is hebben we een algoritme nodig om een pagina te kiezen die weg mag ten koste van een nieuwe. Bestudeer de volgende begrippen die hiermee samenhangen:

Paginagrootte en fragmentatie

Pagina's hebben een grootte die een macht van twee is. 512 bytes is mogelijk maar meer gebruikelijk is 4K of 8K. Ook 64K wordt soms gebruikt. Probleem is dat de laatste page bijna nooit helemaal vol is. Gemiddeld half gevuld. Dit heet interne fragmentatie. Kleine pages hebben een kleinde interne fragmentatie, maar hebben een grote pagetable nodig. Ook zullen er bij kleine pages vaker pagetraps voorkomen.

Segmentatie

Een programma bestaat uit een aantal logische delen. Ze kennen we de stack, de plaats waar variabelen staan en het gedeelte waar de machinecode staat. We noemen dit segmenten. Bij segmentatie heeft elk segment zijn eigen adresruimte. We kunnen per segment bepaalde permissies zetten. Zo zal het codesegment read-only zijn zodat een programma niet per abuis zijn eigen code kan veranderen. Bekijk de voors en tegens van segmentatie ten opzichte van paging

Implementatie van segmentatie

Segmenten hebben een variable grootte. Een probleem dat zich hierbij voordoet is externe fragmentatie. Er vallen gaten van ongebruikt geheugen tussen de segmenten Segmentatie kan gecombineerd worden met paging om dit probleem op te lossen.

Virtueel geheugen op de Pentium II

De Pentium II ondersteunt de twee genoemde vormen van virtueel geheugen alsmede de combinatie van de twee. Dus: De Pentium II gebruikt hiervoor twee tabellen te weten de LDT (Local Descriptor Table) (een voor elk programma) en een enkele GDT (Global descriptor table). Om paging te grbuiken worden in principe alle segmenten op dezelfde adresruimte afgebeeld. We hebben dan een lineair adresruimte van 4GByte.

De Pentium kent vier protectie niveaus:

6.4.2 Virtueel geheugen in Windows NT

Bij NT heeft elk proces een geheugenruimte van 4 GByte. De onderste 2 zijn voor het proces. De bovenste 2GByte is voor de kernel. Een virtuele pagina kent drie toestanden: pages kunnen gedeeld worden tussen meer processen. NT kent een of meer paging files.

Over dit dokument ...

Samenvatting COSY2

This document was generated using the LaTeX2HTML translator Version 2002 (1.62)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 2 tan6.tex

The translation was initiated by Leo van Moergestel on 2003-05-26



next_inactive up previous
Leo van Moergestel 2003-05-26