1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 9(2): Virtual Memory: Segmenten
1/1/ / faculty of Computer Science eindhoven university of technology Wat is het probleem? Meerdere datastructuren van flexibele omvang Bijvoorbeeld bij een compiler: –Symbol table (namen en attributen van variabelen en procedures) –De parse tree (het gedeeltelijke, qua structuur ontlede, programma) –Stack (voor de compiler zelf) –Eventueel de broncode
1/1/ / faculty of Computer Science eindhoven university of technology Wat is het probleem?: parse tree symbol table stack parse tree Verschillende groeiende data = Vrij geheugen Jammer:programma stopt terwijl er nog geheugen vrij is!
1/1/ / faculty of Computer Science eindhoven university of technology Oplossing: Segmenten! Er zijn meerdere ‘geheugenruimtes’ (segmenten) Ieder segment begint bij adres 0 Adres bestaat nu uit 2 delen: –Segment nummer –Adres binnen segment (offset)
1/1/ / faculty of Computer Science eindhoven university of technology Segment 1Segment 2Segment 3 Oplossing: Segmenten! (voorbeeld) parse tree symbol table stack parse tree
1/1/ / faculty of Computer Science eindhoven university of technology Segmenten zijn erg handig: Bijvoorbeeld: elke procedure in een apart segment: –Als in bibliotheek één procedure verandert, blijven adressen van andere procedures gelijk! –Programma’s hoeven niet opnieuw te worden vertaald; alleen de veranderde procedure
1/1/ / faculty of Computer Science eindhoven university of technology Implementatie van Segmenten: Er zijn twee mogelijkheden om segmenten te implementeren: –Swapping –Paging Swapping lijkt op paging, maar dan met hele segmenten tegelijk (met variabele grootte)
1/1/ / faculty of Computer Science eindhoven university of technology Swappen van segmenten: parse tree symbol table stack source symbol table symbol table source Externe fragmentatie
1/1/ / faculty of Computer Science eindhoven university of technology Reloceren: parse tree symbol table stack symbol table stack Nadeel: Traag parse tree symbol table stack symbol table source Nadeel: Beperkt Hole merging:
1/1/ / faculty of Computer Science eindhoven university of technology Segment replacement policies: Om fragmentatie te voorkomen moeten slimme keuzes worden gemaakt bij het verwijderen van segmenten. –Best fit:kies kleinst mogelijke ‘oude’ segment waar nieuwe segment achteraf in past –First fit:kies eerste ‘oude’ segment waar nieuwe segment achteraf in past (cyclisch zoeken) First fit doet het beter! (Best fit maakt veel kleine, nutteloze gaten)
1/1/ / faculty of Computer Science eindhoven university of technology Segmenteren met paging: Paging:Ieder segment is verdeeld in pagina’s (net als in vorige uur) Alle technieken paging nodig, maar nu met meerdere page-tables Voorwaarde: page tables moeten consistent zijn! 3-delig adres: –Segment descriptor (of nummer) –Pagina nummer (binnen segment) –Offset in pagina
1/1/ / faculty of Computer Science eindhoven university of technology segmenten met paging: segment nr. adresspage segment descriptorspage tablememory
1/1/ / faculty of Computer Science eindhoven university of technology Combineren: Veel minder fragmentatie (<1 pagina) Defragmentatie kan nu veel efficienter plaatsvinden in page table Hole merging kan ook in page table! Bij meerdere page table’s (voor meerdere segmenten) moet gelet worden op consistentie Beveiliging (writeable bit) nu per segment i.p.v. per page Zowel paging als segmentering mogelijk!
1/1/ / faculty of Computer Science eindhoven university of technology Interne fragmentatie: Naast externe fragmentatie is er ook interne fragmentatie. Wasda? Interne fragmentatie is het stukje geheugen aan het einde van een pagina dat niet wordt gebruikt (intern in de pagina). –Gemiddeld 1/2 pagina per segment/programma –Niets aan te doen!