Virtueel Geheugen 1) Logisch adres <-> fysisch adres CPU (Central Processing Unit) werkt met constante of logische adressen. Logische adressen blijven dus steeds dezelfde, terwijl fysische adressen kunnen veranderen. Harde schijf CD – rom, deze werken allemaal met een fysisch adres. Vroeger zagen we nog veel 32 bit processoren, daarna kwamen de 64, 128, 256, 512 (wordt nu het meest gebruikt). Er zijn reeds processoren met een geheugen van 1GB!!! Dat deel van de computer wordt ook wel het virtuele geheugen genoemd, wat we hier uitvoerig zullen gaan bespreken. 2) Lokaliteit van programma’s Wanneer een instructie nodig is, is er veel kans dat we na die instructie nog een andere instructie nodig is. Stel nu dat we instructie per instructie uit de harde schijf moeten halen. Dit zou veel tijd in beslag nemen en is dus onhandig. Wanneer we dus een instructie oproepen met onze computer, dan zal onze computer niet alleen die instructie doorgeven aan het virtuele geheugen, maar dan zal hij veel instructies doorgeven. Waardoor bij de volgende oproep van een instructie de kans groot is dat die reeds aanwezig is in het virtueel geheugen, op die manier wordt er veel tijd bespaart. De logische adresruimte wordt steeds deelt men in in kleinere blokken: Bestaande uit een vaste grootte: PAGINA’S Bestaande uit een variabele grootte: SEGMENTEN Er zijn steeds een aantal pagina’s te vinden in het intern geheugen en ook op de harde schijf. Het logische adres bestaat nu uit een paginanummer (+offset) en segment. Nu is er wel een systeem nodig om: - te detecteren of pagina reeds in het intern geheugen aanwezig is - indien pagina er niet in zit: breng de pagina naar het intern geheugen. - Indien nu het intern geheugen reeds vol zit, start dan het paginavervangingsalgoritme. Uitleg bij figuur 1: - Eerst gaat de processor nagaan via de mapper of de opgevraagde informatie reeds niet aanwezig is in het intern geheugen. (1) - Is de opgevraagde informatie reeds aanwezig in het intern geheugen, dan geeft de processor dit aan via het logisch adres(4). - Is de opgevraagde informatie niet aanwezig in het interngeheugen, dan wordt er naar de harde schijf gezocht(2) naar het fysisch adres van de informatie, die dan vervolgend gekoppeld wordt aan een logisch adres van het interngeheugen(3). figuur 1: hoe worden de gegevens naar het intern geheugen verzonden? Een pagina hangt in de harde schijf dus niet vast aan een welbepaalde plaats, dit komt dus overeen met de eigenschappen van logische adressen, waarmee een harde schijf werkt. De mapper heeft in het schema van figuur 1 een cruciale functie. Ze moet namelijk de paginanummers van het logische adres, waarmee het intern geheugen werkt gaan koppelen aan de papeframe van het overeenkomstig fysisch adres. We moeten dus gaan indexeren. Er kunnen natuurlijk pagefaults gaan optreden. Pagefaults treden op wanneer we dan toch de informatie van de harde schijf moeten halen. Hoe lossen we dit op? Wel, hiervoor heeft men tal van vervangingsalgoritmen bedacht. RANDOM: wanneer men een pagina moet vervangen, zal men een willekeurige pagina gaan verwijderen om zo er een nieuwe in te plaatsen. We voelen aan dat dit systeem niet echt ideaal zijn zal. FIFO: First In First Out: Dit vervangingsalgoritme werkt snel en makkelijk, maar gaat wel geen rekening gaan houden met veel gebruikte pagina’s. Voorbeeld: abacadaeafa met 4 pagina’s ruimte. Geeft 7 pagefaults: a_ _ _: pagefault a b _ _: pagefault a b _ _: geen pagefault a b c _: pagefault a b c _: geen pagefault a b c d: pagefault a b c d: geen pagefault b c d e: pagefault c d e a: pagefault d e a f: pagefault d e a f: geen pagefault FINUFO: First In, Not Used, First Out. Dit is een vervangingsalgoritme dat veel beter gaat werken, want in tegenstelling tot FIFO zal FUNIFO wel rekening gaan houden met veel gebruikte pagina’s Voorbeeld: hernemen we het voorbeeld van daarnet, dan zien we dat er nu minder pagefaults zullen optreden. We zullen hier in totaal maar 6 pagefaults hebben ipv 7. Dit komt omdat a de zogenaamde markering krijgt, omdat nadat het in het intern geheugen werd ingevoerd opnieuw werd opgevraagd. LRU: Least Recently Used. Deze methode gaat de pagina’s gaan rangschikken volgens de tijd van gebruik. Wanneer dus de pagina in ons voorbeeld 4 maal na elkaar niet werd opgevraagd zal ze in principe verwijderd worden. Wanneer dus a moet opgeroepen worden en a staat reeds in het intern geheugen, dan zal a behandelt als het ware behandelt worden alsof het als laatst toegevoegd werd. Over het algemeen zal het LRU – algoritme het meest efficiënte zijn na FINUFO, FIFO en tenslotte de RANDOM, dat natuurlijk het minst practisch is. Let op, in sommige gevallen is FINUFO beter als LRU. Mooie examenvraag: “geef een frequentie waarin FINUFO beter is dan het LRU vervangingsalgoritme.” 3) Oefening Vervolledig de volgende tabel. Het intern geheugen bestaat uit 3 pagina’s. A B C A D A E A F G A E score FIFO F a__ F ab_ F abc N abc F bcd F cda F dae N dae F aef F efg F fga F gae 10 fouten F F F N F N F N F F N F FINUFO a__ ab_ abc abc adc adc ade ade afe afg afg aeg 8 fouten LRU F F F N F N F N F F N F a__ ab_ abc bca cad cda dae dea eaf afg fga gae 8 fouten Voor deze frequentie zijn zowel FINUFO als LRU even efficiënt.