YeXo - een kernel programmeren

22 april 2006

Virtual memory manager

Een VMM is een extra laag bovenop de PMM. De VMM zorgt ervoor dat als een process (of de kernel zelf) extra geheugen aanvraagt dat dit geheugen direct achter het vorig aangevraagde geheugen lijkt te liggen. Dit kan door middel van een techniek die paging heet. Paging heb ik al eerder aangezet bij het laden van de kernel op 3gb in het virtueel geheugen. Bij het initiƫren van de VMM moet deze ervoor zorgen dat hij weet waar de page directory en de page tables zich bevinden. Verder moet de VMM twee functies hebben: een om een page aan te vragen op een bepaald virtueel adres en een om een page op een virtueel adres weer vrij te geven. Bij mij heten deze functies vmmMapPage en vmmUnmapPage.

De functie vmmMapPage controleert eerst op welke plaats in welke page table het virtuele adres staat. Daarna wordt gekeken of die page table al bestaat en anders wordt eerst die page table aangemaakt. Daarna wordt het juisten adres (verkregen van de PMM) weggeschreven met de waarde 3 (kernel-level en read/write).