1 C1 Vraag A: Definieer het begrip deadlock. Aan welke voorwaarden moet voldaan zijn opdat een deadlock zou kunnen optreden? Een deadlock is een verzameling processen waarin elk proces van de verzameling wacht op een gebeurtenis, die alleen een ander proces in de verzameling kan veroorzaken. Omdat alle processen aan het wachten zijn kan geen enkel proces zo’n gebeurtenis veroorzaken. Voorwaarden voor een deadlock: Wederzijdse uitsluiting: het systeem bevat bronnen die slechts door één proces kunnen gebruikt worden. Vasthouden en wachten: een proces mag toegewezen voorzieningen vasthouden terwijl het wacht op de toewijzing van andere voorzieningen Geen preëmptieve verwijderingen: Een bron kan niet gedwongen verwijderd worden van een proces dat de bron vasthoudt. Alleen het proces dat de bron vasthoudt kan vrijwillig de bron afstaan. Cyclisch wachten: er bestaat een gesloten keten van processen waarin elk proces ten minste één voorziening vasthoudt die het volgende proces in de keten nodig heeft. Vraag B: Bespreek de strategie detectie en opheffing van deadlocks. Behandel zowel het aspect detectie als het aspect opheffing. Verduidelijk zowel hulpmiddelen uit de grafentheorie als numerieke technieken die hierbij van dienst kunnen zijn. Bespreek eveneens de praktische implementeerbaarheid van deze strategie. Detectie: Benaderingen voor het detecteren van deadlocks beperken noch de toegang tot voorzieningen, noch de acties van processen: indien mogelijk wordt altijd voldaan aan alle verzoeken van processen om bronnen. Het deadlockprobleem wordt maar aangepakt als het zich effectief voordoet. Het is echter niet zo eenvoudig deadlocks te detecteren. Het proces dat zich in een deadlock bevindt weet dit immers zelf niet en ook het besturingssysteem weet dit niet. Resourcegraaf: Bij elke toestand van het systeem kunnen deadlocks pas worden vastgesteld door analyse van de resourcegraaf. Een resourcegraaf toont de aanvragen en toewijzingen van processen aan bronnen bij elke toestand van het systeem. In principe moet na elke aanvraag de resourcegraaf geanalyseerd worden. Indien van elke bron maar één element beschikbaar is => wacht-op-graaf: een mogen geen cycli voorkomen, anders DEADLOCK! Indien bronnen meerdere elementen beschikbaar hebben => graafreductie: een resourcegraaf kan worden gereduceerd indien er tenminste één procesknooppunt bestaat waarvoor alle uitgaande pijlen kunnen worden omgedraaid (= alle gewenste bronnen kunnen worden toegewezen) Indien volledige reductie mogelijk is => geen deadlocksituatie Numerieke reductiemethoden: Worden uitgevoerd mbv vectoren en matrices Vectoren: aanwezige bronnen: totaal aantal elementen van elke bron beschikbare bronnen: aantal vrije elementen van elke bron Matrices: Toewijzingsmatrix: geeft voor elk proces i hoeveel exemplaren van elke bron j reeds zijn toegewezen Aanvraagmatrix: geeft voor elk proces i hoeveel exemplaren het proces nog wil van elke bron j. Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 1 2 Algoritme voor het detecteren van deadlocks: Tijdens de uitvoering van het algoritme worden processen gemarkeerd om aan te geven dat ze geen last hebben van een deadlock. 1) zoek een niet gemarkeerd proces i waarvoor geldt dat alle elementen op de i-de rij van A kleiner zijn dan de overeenkomstige elementen van B. Indien zo’n proces er niet is stopt het algoritme. Deze stap zoekt een proces op waaraan kan worden voldaan vanuit de momenteel beschikbare bronnen, en dat tot het einde kan uitgevoerd worden. 2) tel alle elementen van de i-de rij van T op bij de overeenkomstige elementen van B. Het geselecteerde proces wordt gedraaid tot het klaar is, en geeft alle bronnen, die het in zijn bezit heeft, terug. Het proces wordt gemarkeerd als afgelopen. Op het einde van het algoritme geven ongemarkeerde processen aan dat ze in een deadlock zijn. Opheffen Het controleren op deadlocks vraagt veel overhead en bovendien is het probleem er niet mee opgelost. Er zijn een aantal manieren om deadlocks op te heffen, maar bij elke methode gaat informatie verloren. Elk proces in een deadlock, één voor één afbreken, detectie algoritme toepassen tot alle deadlocks zijn verdwenen Tijdens het uitvoeren van processen checkpoints (volledige procesbeeld) opslaan in een bestand. Bij deadlock teruggaan naar vorige toestand zonder deadlock (rollback). Het werk dat na de checkpoint is uitgevoerd gaat verloren. Preëmptieve verwijdering van bronnen tot wanneer de deadlock niet meer bestaat. Praktische implementeerbaarheid: Veel overhead! Vraag C: Vermeld 3 andere benaderingen om met deadlocks om te gaan. Geef hiervan telkens een korte situering, zonder echter op details in te gaan. Deadlocks vermijden door aanvragen van bronnen te analyseren en eventueel te vermijden. 1) Toestandsdiagrammen: veilige toestanden 2) Claimgrafen 3) Resourcetrajecten Deadlocks onmogelijk maken door een van de 4 voorwaarden uit te sluiten 1) resources exclusief toegewezen aan één proces, beschermd door wederzijdse uitsluiting 2) processen houden resources vast en wachten op andere resources 3) preëmptieve verwijdering van resources 4) cyclisch wachten: cyclus keten in de resourcegraaf Kans op deadlocks minimaliseren. Het volledig uitsluiten van deadlocks vraagt meestal teveel overhead. Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 2 3 C2 Vraag A: Verduidelijk aan de hand van resourcetrajecten het verschil tussen de strategieën vermijden van deadlocks en onmogelijk maken van deadlocks. Vermijden Onmogelijk maken Verticale as: Voortgang van proces Q Horizontale as: Voortgang van proces P Dikke zwarte lijnen: Het pad dat uiteindelijk gevolgd wordt door de processor. (Omwille van proceswisselingen kan het pad niet gewoon horizontaal of verticaal lopen) De extra horizontale en verticale lijnen duiden op het aanvragen en vrijgeven van een bron. De gearceerde gebieden duiden de momenten aan waarop beide processen dezelfde bronnen nodig hebben. Door wederzijdse uitsluiting kunnen deze gebieden niet betreden worden. Vermijden van Deadlocks: De scheduler beslist om het zwarte gebied niet te betreden = de scheduler verwerpt het verzoek van Q om B zolang A aan P toegewezen is. Onmogelijk maken van Deadlocks: Een proces geeft zijn bron vrij alvorens een andere bron te vragen. Deadlocks zijn onmogelijk. Vraag B: Bespreek in detail de strategie vermijden van deadlocks. Verduidelijk zowel hulpmiddelen uit de grafentheorie als numerieke technieken die hierbij van dienst kunnen zijn. Bespreek eveneens de praktische implementeerbaarheid van deze strategie. Voor het ontwerp van het algoritme voor vermijding van deadlocks hebben we claimgrafen nodig. Claimgrafen zijn een bijzonder soort resourcegrafen, die ook de potentiële aanvragen weergeven. Deze extra informatie zal het besturingssysteem nodig hebben om te weten welke bronnen een proces in de toekomst zal aanvragen en gebruiken. Het belangrijkste algoritme voor het vermijden van deadlocks is gebaseerd op het begrip veilige toestand. Dit is een toestand waarin het besturingssysteem bronnen kan toewijzen zonder te moeten vrezen voor deadlocks. Om te bepalen of een toestand veilig is moet het besturingssysteem, behalve de reeds toegewezen bronnen, ook weten wat elk proces in de toekomst zou kunnen aanvragen. Deze informatie zit precies vervat in de claimgraaf op dat ogenblik. Een toestand is veilig indien de claimgraaf volledig gereduceerd kan worden. Uit deze concepten kan de volgende praktische benadering voor het vermijden van deadlocks afgeleid worden: Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 3 4 Verzoekt een proces om een bijkomende voorziening die beschikbaar is, veronderstel dan fictief dat aan dit verzoek voldaan wordt en pas de claimgraaf aan. Controleer vervolgens via graafreductie of het resultaat een veilige toestand is. Is het resultaat een veilige toestand, voldoe dan ook effectief aan het verzoek. Indien niet, blokkeer het proces totdat veilig aan het verzoek voldaan kan worden. (= het bankiersalgoritme) Numerieke technieken: Worden uitgevoerd mbv vectoren en matrices Vectoren: aanwezige bronnen: totaal aantal elementen van elke bron beschikbare bronnen: aantal vrije elementen van elke bron Matrices: Toewijzingsmatrix: geeft voor elk proces i hoeveel exemplaren van elke bron j reeds zijn toegewezen Aanvraagmatrix: geeft voor elk proces i hoeveel exemplaren het proces nog wil van elke bron j. 1) Zoek in de aanvraagmatrix A een rij waarvan alle elementen kleiner of gelijk zijn dan de corresponderende elementen in B. Indien deze rij niet kan gevonden worden dan komt het systeem bij een maximaal gebruik van bronnen uiteindelijk in een deadlock, omdat geen van de processen kan worden afgemaakt. 2) Tel de overeenkomstige elementen van de toewijzingsmatrix T op bij B, en markeer het proces als beëindigd 3) Herhaal stappen 1 en 2 tot alle processen gemarkeerd zijn als beëindigd. Is dit niet mogelijk, dan is de oorspronkelijke toestand onveilig. Praktische implementeerbaarheid: Dit wordt in praktijk in geen enkel besturingssysteem gebruikt omdat het een onhaalbare zaak is om van elk proces a priori te weten te komen welke bronnen het ooit nodig zal hebben Vraag C: Bespreek de alternatieve mogelijkheden in de strategie onmogelijk maken van deadlocks. Behandel telkens in hoeverre deze praktisch kunnen verwezenlijkt worden. Het optreden van deadlocks is onmogelijk indien aan verzoeken om bronnen en aan de gelijktijdigheid van uitvoering van processen zondanige beperkingen worden opgelegd zodat aan één van de vier noodzakelijke voorwaarden voor het optreden van deadlocks niet wordt voldaan. 1) Wederzijdse uitsluiting vermijden: Geen wederzijdse uitsluiting implementeren is in praktijk niet mogelijk. Indien bronnen niet exclusief zouden worden toegewezen, zou er chaos ontstaan. 2) Vasthouden en wachten vermijden: deadlocks kunnen onmogelijk gemaakt worden door te voorkomen dat processen, die één of ander bron in bezit hebben, op nog meer bronnen wachten. Dit kan bereikt worden door te eisen dat alle bronnen tegelijk worden aangevraagd, voor de uitvoering. Indien een van de bronnen niet beschikbaar is, wordt geen enkele bron toegewezen en moet het proces wachten. Probleem: bronnen moeten a priori bekend zijn & uithongering mogelijk. Oplossing: proces bij elke aanvraag van een nieuwe bron verplichten om de bronnen, die het reeds in bezit heeft, vrij te geven. Of twee-fasen-lock protocol: fase 1: Groeifase: alle benodigde bronnen afgaan en op slot proberen zetten. Als er een niet op slot kan gezet worden, alles vrijgeven en opnieuw beginnen fase 2: Krimpfase: wijziging aanbrengen en slot verwijderen Kan niet voor alle processen gerealiseerd worden Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 4 5 3) Preëmptieve verwijdering van bronnen: Het verwijderen van een bron dat door een proces wordt vastgehouden is over het algemeen nog moeilijker te realiseren. De bron kan weggehaald worden op voorwaarde dat de toestand van de bron gemakkelijk is op te slaan. Bij printers en tapedrives is dit bijvoorbeeld niet mogelijk. Indien de bron is toegewezen aan een proces dat niet geblokkeerd is, zijn aanvullende checkpoint en rollbackprocedures vereist. 4) Cyclisch wachten doorbreken: Dit is de enigste mogelijkheid die in praktijk enigszins haalbaar is. De meest voor de hand liggende oplossing is een globale nummering invoeren voor alle bronnen. Processen kunnen op iedere moment een nieuwe bron aanvragen, maar de aanvragen moeten in volgorde van de nummering van de bronnen gebeuren. Bovendien moeten verschillende instanties van eenzelfde brontype in één keer aangevraagd worden. Met deze regels kan een resourcegraaf en een wacht-op-graaf nooit een cyclus bevatten. Alle processen worden sequentieel afgewerkt. Echter INEFFICIËNT: processen worden vertraagd en onnodig de toegang geweigerd tot bronnen. Dezelfde volgorde van bronnen voor elk proces is bovendien zeker niet optimaal. Vraag D: Vermeld twee andere benaderingen om met deadlocks om te gaan. Geef hiervan telkens een korte situering, zonder op details in te gaan. 1) Detecteren en opheffen van deadlocks (zie C1) 2) Kans op deadlocks minimaliseren. C3 Vraag A: Vul op de figuur hieronder de benaming van de zeven modellen die in een besturingssysteem voor geheugenbeheer worden aangewend. Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 5 6 Vraag B: Welke technologische stap wordt aangeduid door de stippellijn op de figuur. Hoe wordt deze stap gerealiseerd? Bespreek voor een nadelen van deze evolutie. Technologische stap: Om externe en interne fragmentatie zoveel mogelijk te beperken kunnen we proberen de processen op te splitsen in stukjes die vrije ruimten in het geheugen kunnen opvullen. Het geheugen wordt dus niet meer als een aaneengesloten blok in het geheugen geladen. Hoe realiseren? 1) Paginering ~ vaste partitionering: Het hoofdgeheugen in frames verdeelt = stukken met gelijke, relatief kleine, grootte Procesbeelden in pagina’s verdeelt ter grootte van frames. Het besturingssysteem houdt een paginatabel bij voor elk proces. Deze bevat de framelocatie voor elke pagina van het proces. 2) Segmentatie ~ dynamische partitionering Programma’s worden verdeelt in blokken, echter niet met gelijke grootte. Het besturingssysteem houdt een segmenttabel bij voor elk proces, die de fysieke locatie van elk segment van het proces bevat. Voor- en nadelen: Voordelen: - interne (paginering) en externe (segmentatie) fragmentatie kleiner - segmentatie vergemakkelijkt sharing - meer processen in geheugen Nadelen: - ingewikkeldere adresvertalingen Vraag C: Waarom is adresvertaling noodzakelijk? Hoe en door wie wordt adresvertaling gerealiseerd, in het kader van geheugenmodellen 3 en 4. Een proces kan in de loop van de tijd verschillende partities bezetten. De locaties waarnaar een proces verwijst zijn dus niet vast. Daarom wordt onderscheidt gemaakt tussen: Logische adressen ~ het geheugenbeeld dat de programmeur heeft: verwijzingen naar geheugenlocaties, onafhankelijk van de huidige toewijzing van het proces aan het geheugen. Speciaal geval zijn de relatieve adressen. Hierbij worden alle adressen uitgedrukt tov één bepaald punt, meestal het begin van het programma Fysieke adressen ~ het geheugenbeeld dat het besturingssysteem & de processor heeft: Dit zijn de werkelijke locaties in het hoofdgeheugen. Logische adressen moeten vertaald worden in fysieke adressen vooraleer geheugentoegang mogelijk is. Deze omzetting wordt geregeld door het memory management unit op elk moment dat een instructie wordt uitgevoerd. Bij paginering: Het besturingssysteem houdt een paginatabel bij voor elk proces. Elke ingang in de paginatabel bevat het nummer van het frame in het hoofdgeheugen dat de corresponderende pagina bevat. Alle pagina hebben een gelijke grootte die een macht is van 2 => logisch verband tussen logische en relatieve adressen. Logisch adres = Relatief adres = paginanummer + relatieve positie binnen pagina MMU: - linker bits van logisch adres = paginnanummer - paginanummer is index procespaginatabel => framenummer - fysiek adres = framenummer en relatieve positie samenvoegen => globale actie: tijdens instructiecyclus paginanummer veranderen in framenummer. Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 6 7 Bij segmentatie: Het besturingssysteem houdt een segmenttabel bij voor elk proces, die de fysieke locatie van elk segment van het proces bevat. Segmenten hebben verschillende groottes => geen logisch verband tussen logische en relatieve adressen. => adresvertaling minder gemakkelijk Logische adres = segmentnummer + relatieve positie MMU: - segmentnummer uit linkerbits van logisch adres - segmentnummer = index processegmenttabel => fysiek beginadres & lengte segm. - fysiek adres = begin adres en relatieve positie optellen. De lengte van het segment moet groter zijn dan de rechterbits van het logisch adres aangeven, zoniet is het logisch adres ongeldig en wordt een interrupt gegenereerd. Vraag D: Vergelijk de onderlinge voor- en nadelen van de modellen 3 en 4. Paginering Segmentatie: Voordelen: - gemakkelijke adresvertaling - blokken van verschillende grootte - verborgen voor programmeur - sharing - lengte segmenten kan wijzigen in de loop van de uitvoering Nadelen: - interne fragmentatie - externe fragmentatie - ingewikkeldere adresvertaling Vraag E: Bespreek 3 manieren waarop het geheugengebruik in model 2 kan geadministreerd worden. Administratie van geheugen gebeurt door het besturingssysteem. Er wordt bijgehouden welke geheugenpartities reeds in gebruik zijn en welke nog beschikbaar zijn. 1) Bitmaps: Het geheugen wordt verdeeld in kleine allocatie-eenheden van gelijke grootte. Bij elke allocatie-eenheid hoort een bit die aangeeft of het geheugen vrij of bezet is. Niet veel gebruikt, want tijdverslindend proces bij zoeken naar aaneengeschakelde allocatieeenheden die groot genoeg zijn voor een proces. 2) Gekoppelde lijsten: Het geheugen wordt voorgesteld als een gekoppelde lijst van segmenten die ofwel in gebruik zijn door een proces ofwel vrij zijn. De meest efficiënte oplossing plaatst aan het begin en het eind van een segment informatie met de status en de grootte van het segment en neemt enkel de vrije segmenten op in een dubbelgekoppelde lijst. 3) Buddysysteem: Gehele geheugenruimte die beschikbaar voor toewijzing wordt behandeld als een blok met groot 2y. Zolang de vereiste geheugenruimte kleiner is dan de helft van de beschikbare ruimte wordt die ruimte gesplitst in 2. Zo wordt de ruimte verder gesplitst tot het kleinst mogelijke blok wordt bereikt. Het buddysysteem houdt voortdurend een gekoppelde lijst bij van alle niet toegewezen blokken. Het buddysysteem versnelt samenvoeging, omdat het alleen moet zoeken in de lijst van blokken met dezelfde grootte. Interne fragmentatie helaas zeer groot! Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 7 8 C4 Vraag A: Vul op de figuur hiernaast de benaming in van de zeven modellen die in het besturingssysteem voor geheugenbeheer worden aangewend. Zie vraag C2. Vraag B: Welke technologische stap wordt aangeduid door de stippellijn in de figuur. Bespreek de gevolgen (voordelen, potentiële gevaren,…) van deze evolutie. (De stippellijn ligt hier na proces 3 en 4) Technologische stap: Bij de eerste 2 manieren van geheugenbeheer is het noodzakelijk dat het proces volledig in het geheugen geladen wordt. Door invoering van pagineren in segmentatie wordt het echter mogelijk enkel die pagina’s (of segmenten) in het geheugen te laden die we op dat moment nodig hebben. Dit concept noemen we virtueel geheugen. Gevolgen: Het deel dat zich op een bepaald moment in het hoofdgeheugen bevindt noemen we de residente set. Op basis van de paginatabel (of segmenttabel) kan de processor vaststellen of alle geheugenverwijzingen betrekking hebben op locaties die zich in de residente set bevinden. Wordt een logisch adres (nu virtueel adres genoemd) tegengekomen dat zich niet in de residente set bevindt, dan genereert de processor een interrupt = paginafout. Op dat moment neemt het besturingssysteem de besturing over en plaatst een I/O-verzoek om de nodige pagina’s op te halen. Indien het gewenste stuk is binnengehaald wordt een I/Ointerrupt gegenereerd, die opnieuw het besturingssysteem activeert, waardoor dit de paginatabellen kan bijwerken en het betrokken proces terug in de gerede toestand kan plaatsen. Voordelen: => Verbetering van systeemgebruik door: Meer ruimte voor processen => kans is groter dat er minstens 1 proces in de gerede toestand zal zijn Geheugenhoeveelheid dat een proces kan aanspreken kan groter zijn dan de totale hoeveelheid beschikbare hoofdgeheugen => programmeur moet geen rekening houden met het beschikbaren geheugen, geen overlay-technieken nodig. Geheugen wordt efficiënter benut. I/O-operaties en bijgevolg tijd bespaard omdat ongebruikte stukken niet in en uit geheugen moeten geswapt worden. Nadelen: Heel wat overhead bij paginafouten. Bij teveel paginafouten -> trashing: processor is meer bezig met swappen, dan uitvoeren van instructies. Vraag C: Bespreek in het kader van geheugenmodel 5 op welke manier de grootte van de noodzakelijke tabellen in het geheugen kan beperkt worden, en wat hiervan de gevolgen zijn. Paginering vereist een weloverwogen keuze voor de paginagrootte. Kleine pagina’s -> weinig interne fragmentatie, maar wel groot aantal pagina’s per proces -> grote paginatabellen, waardoor er minder geheugen vrij blijft voor het proces. Grotere pagina’s geven ook een efficiëntere blokoverdracht van gegevens uit secundair geheugen. Bij een constante hoeveelheid toegewezen geheugen heeft de paginagrootte invloed op de frequentie waarmee paginafouten optreden. Relatief kleine paginagrootte is efficiënter. (order kb in praktijk) Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 8 9 In veel computersystemen is de virtuele adresruimte die elk proces kan aanspreken groter dan de beschikbare hoeveelheid reëel geheugen. Hierdoor wordt de hoeveelheid geheugen die per proces alleen al voor paginatabellen vereist is te groot om in het hoofdgeheugen te kunnen worden geladen. Hiervoor bestaan 2 oplossingen: 1) Paginatabellen zelf in virtueel geheugen: Hiervoor kan een systeem met 2 niveaus gebruikt worden: forward-mapped page table Het paginanummer in het logisch adres wordt opgesplitst in 2 delen: 1. meest significante deel = index voor steeds residente paginatabel, en verwijst naar specifieke paginatabel 2. minst significante deel = index specifiek paginatabel, verwijst naar fysieke frame => 2 soorten paginafouten mogelijk. Een voor binnenhalen specifieke paginatabel en een voor het binnenhalen van de procespagina 2) Geïnverteerde paginatabel voor ganse systeem ipv procestabel voor elk proces. Een geïnverteerde paginatabel bevat een ingang per geheugenframe. Grootte paginatabel is enkel afhankelijk van de grootte van het geheugen. Omdat de geïnverteerde paginatabel niet is gesorteerd op paginanummer, maar op framenummer, en om te vermijden dat het paginanummer sequentieel moet opgezocht worden, past men hashing toe. Bij virtueel geheugenbeheer wordt het paginanummer en de procesidentificatie vertaald naar een hashwaarde, die gebruikt wordt als een index in een hashtabel. Deze tabel bevat een verwijzing naar één van de elementen in de geïnverteerde paginatabel die de specifieke hashwaarde oplevert. Alle elementen met dezelfde hashwaarde zijn in de geïnverteerde paginatabel aan elkaar gekoppeld in een circulaire lijst. Het framenummer kan berekend worden op basis van het adres van het element (ten opzichte van het beginadres van de geïnverteerde paginatabel) en hoeft bijgevolg niet expliciet opgeslagen te worden. In beide technieken veroorzaakt elke verwijzing naar een virtueel adres minimaal 2 geheugentoegangen: één voor het opvragen van de juiste paginatabel en één voor het opvragen van de gewenste gegevens. Om verdubbeling van de geheugentoegangstijd te vermijden wordt een hardwarecache in de MMU gebruikt die de meest recent gebruikte paginatabelingangen bevat. Vraag D: Vergelijk de onderlinge voor- en nadelen van modellen 5 en 6. Waarom werd model 7 ingevoerd? In hoeverre is men hierin geslaagd? Paginering: Segmentatie: Voordelen: - onzichtbaarheid voor programmeur - gemakkelijker afhandeling van - eenvoudigere algoritmen voor geheugenbeheer groeiende structuren - eliminatie externe fragmentatie Nadelen: - interne fragmentatie - externe fragmentatie => voordelen samenvoegen: besturingssystemen met zowel paginering als segmentatie. In gecombineerde paginering- segmentatie virtueel geheugensystemen wordt de adresruimte van een proces opgebroken in enkele segmenten, gekozen door de programmeur. Elk segment wordt verdeeld in pagina’s met vaste grootte, gelijk aan de grootte van een frame in het hoofdgeheugen. Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 9 10 Vraag E: Bespreek de adresstructuur gehanteerd in model 7 en verduidelijk in een figuur hoe de adresvertaling gebeurt. Adresstructuur: Adresvertaling: Logische of virtueel adres = Segmentnummer + segmentpositie Segmentpositie = paginanummer + paginapositie Elk proces heeft zijn eigen segmenttabel, elk processegment zijn eigen paginatabel. Seg # = index voor segmenttabel => ‘p’-bit, grootte v. segment, geheugenadres Page # + geheugenadres = paginanummer = index paginatabel => framenummer Frame # (= fysiek beginadres) + offset (= afstand van beginadres tot instructie) => instructie Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 10 11 C5 Vraag A: Welke globale taken bij geheugenbeheer moeten worden vervuld door de computerhardware en in het bijzonder door de processor? de besturingssysteemsoftware? Processor: 1) genereren van paginafouten Besturingssysteem: - beslissen of een pagina of segment naar het secundair geheugen moet verplaatst worden of niet en de uitwerking ervan Vraag B: Welke (zes) specifieke vragen moet besturingssysteemsoftware beantwoorden? Ga hierbij zoveel mogelijk in detail voor wat invulling ervan betreft, behalve voor het probleem vervangingsstrategieën. Bij deze laatste moet je enkel de vraagstelling formuleren. Vermeld ook steeds hoe het probleem in Unix en in Windows NT wordt aangepakt. 1) Wanneer moet een pagina worden overgebracht naar het hoofdgeheugen? 2 alternatieven: 1. vraagpaginering: een pagina wordt pas overgebracht naar het hoofdgeheugen als hierom gevraagd wordt => veel paginafouten bij opstarten van proces 2. prepaginering: Meerdere aaneengesloten pagina’s, zoals ze opgeslagen zijn in het secundair geheugen, worden ineens binnengehaald, ook al is maar een pagina gevraagd. Unix: vraagpaginering Windows: prepaginering, aantal pagina’s is afhankelijk van het geheugen en de aard van de pagina’s. 2) Op welke plaats in het hoofdgeheugen moeten pagina’s geladen worden? Enkel relevant bij pure segmentatiesystemen. o First-fit: zoekt vanaf het begin van het geheugen en plaatst het segment in de eerste plaatst die groot genoeg is. o Next-fit: zoekt vanaf de plaats van waar het geëindigd is. Plaatst het blok in de eerst geheugenplaats die groot genoeg is. o Best-fit: zoekt het hele geheugen af naar de plaats die het best past. Het geheugen wordt snel verdeeld in blokken die te klein zijn voor nieuwe processen. o Worst-fit: wijst het grootst beschikbare blok toe, in de hoop veel gaten te krijgen die nog voldoende groot zijn voor nieuwe processen. o Optimal-fit: Schakelt dynamisch tussen de vier basisalgoritmen. Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 11 12 3) Hoeveel paginaframes moeten worden toegewezen aan elk actief proces? o Hoe kleiner de hoeveelheid geheugen die wordt toegewezen aan elk proces, hoe groter het aantal processen dat kan worden geladen, hoe groter de kans dat er een proces zich in de gerede toestand bevind. o Een te klein aantal pagina’s per proces zal de frequentie van paginafouten doen toenemen. o Een overtoewijzing van geheugen aan een proces levert geen merkbare verbeteringen 2 mogelijke strategiën: 1. Vaste toewijzing: aantal pagina’s wordt toegekend bij creatie proces 2. Variabele toewijzing: paginaframes worden dynamisch toegewezen of onttrokken aan processen om de paginafoutfrequentie te verlagen. Hierbij moet echter het gedrag van de processen worden beoordeeld wat overhead veroorzaakt. Unix: variabele toewijzing Windows: variabele toewijzing 4) Lokale of globale vervanging? Wanneer we een pagina moeten vervangen, omdat een nieuwe pagina moet worden geladen zijn er 2 mogelijkheden: o Lokale vervanging: alleen de pagina’s van het proces dat een fout veroorzaakte komen in aanmerking voor vervanging o Globale vervanging: alle pagina’s in het hoofdgeheugen komen in aanmerking voor vervanging. Gebruik van paginabuffering en werksetbenadering Unix: variabele toewijzing met globale vervangingsstrategie Windows: variabele toewijzing met lokale vervanginsstrategie 5) Wanneer moet een gewijzigde pagina worden weggeschreven naar het secundair geheugen? 2 strategieën: 1. vraagopschoning: een pagina wordt alleen weggeschreven naar het secundair geheugen als deze is geselecteerd voor vervanging. 2. opschoning vooraf: pagina’s worden in batches weggeschreven ook al zijn hun paginaframes nog niet aan vervanging toe. Dit leidt tot verspilling als de kans groot is dat de pagina’s later opnieuw zullen worden gewijzigd. Daarom wordt vaak paginabuffering gebruikt. 6) Welke specifieke pagina’s in het hoofdgeheugen moeten worden vervangen wanneer een nieuwe pagina moet worden geladen? Vraag C: Bespreek paginabuffering. Bij welke vragen in b) komt deze techniek ter sprake? Parallel met de paginatabellen per proces worden op systeemniveau twee intermediaire lijsten van slachtofferframes bijgehouden: de lijst van vrije frames en de lijst van vrije frames met gewijzigde pagina’s, die als cache werken voor te vervangen pagina’s. Beslist een besturingssysteem om een pagina uit te swappen, dan wordt die pagina nog niet direct verwijderd of naar het secundaire geheugen geschreven. Enkel de ingang in de paginatabel wordt verwijderd en onderaan één van de lijsten van slachtofferframes bijgeplaatst, naar gelang de pagina gewijzigd is of niet. Moet er een nieuwe pagina geladen worden dan wordt de pagina bovenaan de lijst effectief verwijderd of vanuit het hoofdgeheugen naar het secundair geheugen verplaatst. Doordat een pagina nog even beschikbaar blijft in een intermediaire lijst kunnen we tijd besparen wanneer er toch nog naar die pagina verwezen zou worden. Komt aan bod bij vraag 4 & 5 Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 12 13 Vraag D: Bespreek de werksetbenadering. Bij welke vraag in b) kom deze techniek ter sprake? Hoe wordt werksetbenadering in praktijk benaderd? Bij combinatie variabele toewijzing met lokale vervangingsstrategie (vraag 3 & 4 van b) selecteert het besturingssysteem te vervangen pagina’s uit de residente set van het actieve proces dat de fout veroorzaakt heeft. Hierdoor moeten alternatieve technieken gebruikt worden om de waarschijnlijke toekomstige behoeften, meer bepaald de ideale grootte van de residente set, van deze actieve processen in te schatten. Hiervoor gebruikt men soms de werksetbenadering. De werkset is de verzameling pagina’s die nodig is voor de uitvoering van een proces gedurende een bepaalde periode. Als die set in het hoofdgeheugen staat treden geen paginafouten op. Periodiek worden de pagina’s uit de residente set van een proces die niet voorkomen in de werkset, verwijderd. Een proces wordt enkel efficiënt uitgevoerd als de in het hoofdgeheugen residente set de werkset kan bevatten: zijn er te weinig frames, dan zullen er veel meer verwijzingen zijn die paginafouten opleveren. Indien de som van de werksetgroottes van alle processen groter is dan het totaal aantal beschikbare frames, dan treedt trashing op. Het besturingssysteem kan beslissen om een of meer processen volledig uit het geheugen te swappen. De werksetstrategie kan bijgevolg automatisch en dynamisch het aantal actieve programma’s en hun geheugenverbruik beheren, en kan bovendien trashing vermijden. Praktisch gebruik: - Het nauwkeurig bepalen van de werksetgrootte vraagt veel overhead, daarom wordt de foutenfrequentie van elk proces bijgehouden: daalt deze onder een drempelwaarde dan kunnen frames van het proces aan andere processen worden toegekend. Wordt de foutenfrequentie te hoog dan heeft het proces meer frames nodig. - Windows NT gebruikt een andere methode: bij elke paginafout wordt de werksetgrootte van dat proces vergroot, op voorwaarde dat een drempelwaarde niet wordt overschreden. Pas bij overschrijding leidt een paginafout tot paginavervanging. C6 Vraag A: Waar in de besturingssysteemsoftware voor geheugenbeheer situeren deze vervangingsstrategieën zich? In welke situaties (omschrijf!), buiten dit specifieke domein van geheugenbeheer, zijn eveneens vervangingsstrategieën noodzakelijk? Wie zorgt in deze situaties voor de implementatie ervan? Op het moment er geheugen moet vrijgemaakt worden moet een er pagina’s uit het hoofdgeheugen geswapt worden. Welke pagina’s dit best zijn wordt bepaald door de vervangingsstrategie. Ook op hoger lagen van de geheugenhiërarchie zijn vervangingstrategieën nodig. Hiervoor kan het hardwaremechanisme van de LRU gebruikt worden. Vraag B: Bespreek de principes van de diverse vervangingsstrategieën, met inbegrip van eventuele varianten. Optimale strategie: vervangt de pagina’s waarvoor het het langst zal duren voor ze opnieuw opgevraagd zullen worden. In praktijk niet realiseerbaar. Last Recently used: vervangt de pagina in het geheugen waarnaar het langst niet verwezen is. Niet geschikt voor processen met een cyclisch verwijzingspatroon, waarbij het paginabereik groter is dan de hoeveelheid geheugen. In praktijk moeilijk te implementeren: het is in principe nodig om een gesorteerde lijst of stapel van pagina’s bij te houden, waarbij de recentst gebruikte pagina voorop staat en de minst recente achteraan. De lijst moet softwarematig bij elke verwijzing naar het Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 13 14 geheugen aangepast worden wat veel te lang duurt. Oplossing: hardwaremechanisme Er wordt voor een machine met N paginaframes een matrix van NxN bits bijgehouden die geïnitialiseerd zijn op 0. Telkens een paginaframe X gebruikt wordt, maakt de hardware eerst in een rij X alle bits 1 en vervolgens in kolom X alle bits 0. Op elk moment geeft de binaire waarde van de rij dan aan hoe recent de overeenkomstige pagina dan gebruikt is. Niet bruikbaar op niveau van hoofdgeheugen – secundair geheugen, maar wel in hogere lagen van de geheugenhiërarchie. Not Frequently Used: Aangezien het hardwaremechanisme niet beschikbaar, wordt een licht afwijkend software-algoritme gebruikt. In plaatst van het algoritme na elke geheugenverwijzing toe te passen, wordt het slechts periodiek toegepast. Er wordt voor elke pagina een softwareteller bijgehouden. Wanneer een paginafout optreedt wordt de pagina verwijderd waarvan de teller het kleinst is. First In, First Out: behandelt de frames die zijn toegewezen aan een proces als een circulaire buffer, voegt nieuwe pagina’s toe aan het eind van de buffer en verwijdert pagina’s die zich al het langst in het geheugen bevinden. Pagina’s die langdurig nodig zijn voor het proces worden dan ook herhaaldelijk in en uit het hoofdgeheugen gepagineerd. Presteert zeer slecht! Anomalie van Belady: meer frames beschikbaar, toch meer fouten! Klokstrategie: Ook wel tweede-kans-algoritme genoemd. Aan elk frame wordt een extra use-bit gekoppeld, die in de paginatabel opgeslagen wordt. ~ NFU-algoritme waarbij de teller maar uit 1 bit bestaat. De usebit wordt op 1 ingesteld bij het laden in het hoofdgeheugen en wanneer de pagina gebruikt wordt. De frames die kandidaat zijn voor vervangen worden behandeld als een circulaire buffer (FIFO) Moet een pagina vervangen worden dan zoekt het besturingssysteem adhv een pointer naar een frame waarvoor de usebit 0 is. Komt het hierbij frames tegen waar de usebit 1 is dan worden die op 0 ingesteld. Het verschil met FIFO is dat de recent geadresseerde frames worden overgeslagen. o Kan geoptimaliseerd worden door het aantal usebits te verhogen. (Linux) o Ook kan men de dirty bit bij de selectie betrekken => pagina’s die niet recent gebruikt zijn en niet gewijzigd zijn worden verwijdert. Wordt bij een eerste rondje niets gevonden dan worden de pagina’s opnieuw overlopen en wordt naar pagina’s gezocht die gewijzigd zijn maar niet recent gebruikt zijn. Ook dit rondje kan niets opleveren. => derde-kans-algoritme (Mac) o In Unix wordt nog een andere verfijning gebruikt voor het beheren van gebruikersprocessen. (Voor kernelprocessen wordt een niet-virtueel buddysysteem gebruikt.) De paginering wordt gedeeltelijk uitgevoerd door een specifiek proces, de paginadeamon. Unix houdt een dubbelgekoppelde lijst bij waarin alle vrije paginaframes staan. Bij een fout wordt het eerste element uit de lijst verwijdert en wordt de benodigde pagina in dat frame ingelezen. De paginadeamon onderzoekt regelmatig of het aantal vrije frames gelijk is aan de parameter lotsfree. Als er niet voldoende frames vrij zijn dan wordt er geswapt. Er wordt bij het swappen geen rekening gehouden met bij welk proces de pagina’s behoren => globaal vervangingsalgoritme. o Omdat een volledige doorgang van het klokalgoritme vrij lang blijkt te duren wordt een klokalgoritme met 2 wijzers (pointers) gebruikt. De voorste wijzer zet de usebit op 0 terwijl de achterste pagina’s voor verwijdering selecteert. Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 14 15 Vraag C: Vergelijk en bespreek de efficiëntie van deze strategieën (onderling met de optimale strategie), aan de hand van volgend voorbeeld: bovenaan het schema worden de achtereenvolgende pagina’s vermeld die nodig zijn voor de uitvoering van een proces waaraan drie geheugenframes zijn toegewezen. Bepaal voor de diverse strategieën de inhoud van de paginatabel op elk ogenblik. Duidt eveneens telkens aan wanneer paginafouten optreden. Vraag D: Welke (reële) strategie is globaal de meest efficiënte? Is dit steeds het geval (geef eventueel tegenvoorbeeld)? Hoe kan deze strategie in hardware en software worden geïmplementeerd? LRU benadert in het voorbeeld het best de optimale strategie. LRU is echter niet geschikt voor processen met een cyclisch verwijzingspatroon en is in praktijk moeilijk te implementeren. NFU benadert LRU. FIFO is het snelste proces. Aangezien het klokalgoritme gebaseerd is op NFU en FIFO is dit globaal het meest efficiënte. Dit algoritme kan in software worden geïmplementeerd. Dit proces kan aangeroepen worden door verschillende gebeurtenissen: Op tijdbasis (bv elke seconde) Door de scheduler, indien de paginafoutenfrequentie te hoog oploopt Indien de lijst van vrije frames te klein wordt Uw bak stella, als bedanking mag opgestuurd worden naar de Krijgslaan 180, in Gent. © Maarten De Muynck 15