Memory management unit
De Memory management unit (of kortweg MMU) is een hardware-component in de computer die gebruikt wordt voor de runtime-afbeelding van virtuele naar fysieke geheugenadressen. Daarnaast zorgt het bij sommige architecturen voor meer geavanceerde taken zoals geheugenbescherming, fragmentatie etc.
De processor gebruikt een virtuele adresruimte die ingedeeld wordt in zogenaamde paginas (pages), die elk 2n groot zijn (enkele kilobytes).
Het gebruikersprogramma krijgt de fysieke adressen nooit te zien, met andere woorden: het programma werkt met logische adressen. De MMU converteert logische adressen naar fysieke adressen en omgekeerd.
Het concept van een logische adresruimte die gebonden is aan een fysieke adresruimte is belangrijk in een goed geheugenbeheersysteem.
De MMU wordt bijgestaan door een speciale, kleine, snelle hardware-cache, de translation look-aside buffer (TLB). De TLB is opgebouwd met een associatief hogesnelheidsgeheugen. De MMU bevat een pagina-tabel die geïndexeerd is volgens de pagina nummer. Elke page table entry (PTE) geeft de fysieke paginanummer die overeenstemt met de virtuele. Dit wordt samengevoegd met de page offset om het volledige fysieke adres te verkrijgen.
Het is mogelijk dat er geen geheugen is toegewezen aan een zekere virtuele pagina. In dat geval zal de MMU een page fault sturen naar de CPU. Het besturingssysteem zal dan trachten een vrije page te vinden in het RAM-geheugen en een nieuwe page table entry opzetten om het te koppelen aan het gevraagde virtuele adres. Als er geen vrij RAM-geheugen beschikbaar is, zal er (afhankelijk van het besturingssysteem) een vervangingsalgoritme aangesproken worden (ook bekend als paging).
De MMU wordt ook gebruikt om gebruikersprocessen af te schermen van het besturingssysteem en de afscherming van gebruikersprocessen tegen elkaar. Meestal wordt hiervoor een relocatie- en limietregister gebruikt. Het relocatieregister bevat de waarde van het laagste fysieke adres; het limietregister bevat de reeks logische adressen. Met het relocatie- en het limietregister moet elk logisch adres lager zijn dan het limietregister; de MMU mapt het logische adres dynamisch door de waarde in het relocatieregister erbij op te tellen. Dit adres wordt vervolgens doorgestuurd naar het geheugen. Het besturingssysteem geeft de limietregisters door aan de gebruikersprogramma's. Het wijst met andere woorden, elk programma zijn eigen virtuele adresruimte toe.
Dit zorgt ervoor dat gebruikersprocessen niet in elkaars geheugen kunnen schrijven. Wordt dit toch geprobeerd, dan vindt er een kernel trap plaats.
De MMU lost ook het probleem van geheugenfragmentatie op. Fragmentatie treedt op doordat verschillende blokken gealloceerd en terug vrijgelaten worden en zodoende vrije blokken gefragmenteerd worden over het gehele geheugen. Met virtueel geheugen lijkt het alsof het toegewezen geheugen één aaneengesloten blok is, terwijl het in werkelijkheid verspreid kan zijn.
Bronnen
[bewerken | brontekst bewerken]- http://www.cacs.louisiana.edu/~mgr/404/burks/foldoc/26/72.htm (gearchiveerd op archive.org)
- Operating systems met Java - 2004 - A. Silberschatz, et al.