Innehåll Minneshantering (...) Föreläsning 1 bakgrund och mobvabon conbnous allocabon, fixed allocabon, buddy, segmentabon paging Föreläsning 2 pagetable bitar, prestanda, TLB virtuellt minne page replacement algorithms, beladys Föreläsning 3 working set window long term scheduler, thrashing mulblevel paging, inverted pagetable Föreläsning 1 Hur är systemet uppbyggt? Vilka problem finns relaterat Bll minne? ConBnous allocabon External fragmentabon CompacBon Fixed allocabon Internal fragmenataion Buddy system SegmentaBon Paging (vikbgt!) Systemet hivlls... I kernel (rita): CPU med register... plats för fler kernel mode och user mode en lista med kerneltrådar i OS minne processer med egna usertrådar internt koppling mellan kerneltrådar och usertrådar program är skrivna för en viss programlayout och förutsä[er a[ variabler och funkboner finns på vissa adresser Problemformuleringar Vad händer om två olika program behöver använda samma mnnesadresser Bll olika variabler och funkboner? Vad händer om en process skriver i minnet där dessa operabvsystemstrukturer är placerade? Vad händer om en process skriver över programkod eller data för en annan process? Problem a[ lösa idag Relokering Hur processer kan placeras var som helst i minnet, eller fly[as under körning Minnesskydd Hur processer kan hindras åtkomst Bll minne annat än deras eget Hur kan vi skydda minnet mer detaljerat? Delar av processen kan vara read- only Delar av processen skall ej kunna exekveras (stacken) 1
Fler önskemål Minnesdelning Hur kan processer med en del kod gemensamt placera den koden i en gemensam del av minnet? Exempel: programbibliotek Processer med krav på mer minne än fysiskt Bllgängligt Hur skall man ändå kunna exekvera sådana processer? Termer bra a[ kunna Adressrymd En viss sekvenbell uppsä[ning adresser i minnet RelaBv adress En posibon i minnet angiven utgående från en godtycklig adress Basadress Utgångspunkten för en relabv adress Absolut adress En fast posibon i minnet (utgående från adress 0) Relokering Programmeraren skriver koden för varje process a[ använda e[ visst område i minnet Obekvämt: I strid med e[ av målen med OS Kompilatorn gör automabskt jobbet, programmeraren anger bara posibon i minnet Foraarande obekvämt OperaBvsystemet gör jobbet automabskt när processen läses in från programfilen IneffekBvt: I strid med e[ av målen med OS??? Hårdvarustöd för relokering Kompilatorn kompilerar programmet för placering på en fast posibon i minnet, t.ex. från adress noll Processen använder under körning rela%va adresser utgående från den fasta posibonen CPU har e[ register med en basadress som automabskt adderas på varje adress som används under körning CPU kan uaöra adressberäkningen för nästa instrukbon medan föregående exekverar ingen prestandaförlust (eller obetydlig) Minnesskydd Programmeraren ser Bll a[ inte använda annat än processens eget minne Osäkert: I strid med OS målsä[ning Kompilatorn lägger Bll automabska kontroller a[ endast rä[ minne används IneffekBvt och osäkert OprakBskt: Svårt för kompilatorn a[ kontrollera allt OperaBvsystemet kontrollerar automabskt? Omöjligt a[ lösa? Hårdvara kontrollerar varje access ubfrån konfigurabon från OS. Den modell som brukar användas... Hårdvarustöd för minnesskydd Processorn har e[ extra register i par med det Bdigare basregistret Det anger storleken eler slutpunkten på minnesrymden som startar i basregistret Vi kallar det limitregister CPU kontrollerar automabskt a[ alla adresser som används i user mode ligger mellan basregistret och maxstorleken Eventuella felkbga adresser genererar avbro[ 2
AdministraBon av register Basregistret anger starten på processens adressrymd Limitregistret anger slutet på processens adressrymd När en process som läses in placeras den i minnet på adress BASE. OS ger processen Bllgång Bll SIZE minne OS iniberar basregistret Bll BASE och limitregistret Bll BASE+SIZE Avbro[ vid minnesfel OS placerar kod för a[ hantera avbro[ från felakbg adressering så den körs vi minnesfel Vid avbro[ för minnesfel kan OS välja a[ avsluta processen (page- fault, segmentebon- fault, bus error, förbjuden åtgärd, etc...) Registren är endast åtkomliga i kernel mode! RepeBBon: Vad händer vid avbro[? (jämför med systemanrop, vad är skillnaden?) Placering i minnet Vi har nu metoder a[ placera en process var vi vill utan a[ programfel uppstår för a[ processen ligger på oväntat ställe i minnet Men var i minnet skall en ny process placeras? Fixed parbboning Dynamic parbboning (conbguous allocabon) Buddy system Vad har metoderna för för- och nackdelar? External fragmentabon Systemets minne är uppdelat i en mängd fragment Några fragment är reserverade av processer eller operabvsystemet Andra fragment är lediga Tillsammans utgör alla lediga fragment en ansenlig mängd ledigt minne Inget fragment är stort nog för a[ vara användbart (Det lediga minnet finns utanför (externt) det allokerade men ingen sekvens är lång nog a[ använda) Internal fragmentabon Systemets minne är uppdelat i en mängd fragment Fragmenten är reserverade av processer eller operabvsystemet Många av fragmenten utny[jas inte fullt ut Tillsammans utgör alla lediga lediga bitar i e[ fragment en ansenlig mängd ledigt minne Inga lediaga bitar är användbara ehersom de är reserverade av något process (Det lediga minnet finns inub (internt) det allokerade men går inte a[ använda ehersom det är reserverat) CompacBon Löser problemet med extern fragmentering Fly[ar processer i minnet så allt ledigt minne kommer i en sekvens Är ineffekbvt ehersom mycket data måste fly[as i minnet IneffekBvt: Går emot e[ av målen med OS 3
SegmentaBon Programmerarens vy av minnets användning Dela in processen i flera små bitar Kod Data Mer data Stack Placera varje bit fri[ i minnet Stöd i hårdvara för flera register med basadresser Mildrar extern fragmentering genom a[ mindre fragment nu går a[ ny[ja, hela processen kräver inte längre sekvenbellt minne Återstående problem... External fragmentabon... Minnesdelning... Processer störren än Bllgängligt minne... Detaljerat minnesskydd... Paging är den vik%gaste minneshanterings- metoden!!! Härnäst skall vi prata om paging. Termer bra a[ kunna Frame En del av det fysiska minnet då paging används Page Motsvarande del i logiska minnet då paging används Offset Adress internt i en page eller frame Logisk adress En låtsad men sekvenbell adress Fysisk adress Adressen som verkligen läggs ut på adressbussen Virtuell adress Logisk adress då virtuellt minne används 2- potenser 2 0 1 2 1 2 2 5 32 2 8 256 2 10 1024 1ki 2 16 2 10 *2 6 1ki*64 64ki 2 20 1Mi 2 30 1Gi 2 32 2 30 *2 2 1Gi*4 4Gi 2 40 1Ti 2 45 2 40 *2 5 1Ti*32 32Ti (paging) Vi utgår från en minnesrymd uppdelat i N lika stora delar, ungefär som fixed parbboning. Vi kallar varje del för en frame Några frames är upptagna, några är lediga. Minnet är fragmenterat internt och externt. Vi vill lägga in en process som kräver 5 frames sekvenbellt. Det finns inte. Rita situabonen ovan... Idé: Vi reserverar 5 frames, vilka som helst. Vi uppfinner en metod a[ låtsas a[ dessa 5 frames ligger sekvenbellt. Alla adresser processen använder är på låtsas, men ser för processen ut a[ vara helt sekvenbella utan glapp. Vi kallar en låtsad adress för en logisk adress. Vi behöver e[ system för a[ översä[a en logisk adress Bll en motsvarande rikbg fysisk adress. Varje logisk adress måste motsvaras av exakt en fysisk adress. En fysisk adress skulle kunna ha flera logiska adresser. 4
Vi skapar en tabell över vilken fysisk adress varje logisk adress har. På posibonen för en logisk adress i tabellen lagras motsvarande fysiska adress. PotenBella problem (lösningar senare): Tabellen blir större än det minne processen behöver. Tabellen får inte plats i en frame. Varje process behöver en egen tabell. Idé: Vi delar in den logiska (låtsade) adress- rymden i delar som vardera är lika stor som en frame. Vi kallar varje del en page. Vi skapar tabellen. På posibonen för varje page lagrar vi motvarande frame. Storleken på tabellen beror nu på hur många pages det får plats i adressrymden och hur stor varje frameadress är. Vi kallar tabellen för sidtabell, pagetable. Givet en logisk adress måste vi nu för a[ hi[a Bll den fysiska adressen: Räkna ut vilken page adressen finns i. Gå Bll indexet motsvarande det pagenumret i tabellen och läsa framenumret. Räkna ut hur långt in i pagen adressen vi söker finns. Vi kallar det offset. Gå lika långt in i framen. Rita... Problem: Mycket räkningar. Kan vi opbmera? Rita! Antag a[ varje adress använder 4 decimala siffror (adresser 0000 Bll 9999). Antag a[ vi bestämmer a[ den sista siffran i varje adress anger offset. Framestorlek? Antag a[ vi bestämmer a[ de två sista siffrorna i varje adress anger offset. Framestorlek? Antag a[ vi bestämmer a[ de tre sista siffrorna i varje adress anger offset. Framestorlek? Idé: Om vi väljer framestorlek enligt någon ovan blir det särdeles enkelt a[ räkna. Vilka siffror kommer ange pagenumret? Hur blir de[a när vi har binärt talsystem (bits och bytes)? Problem: Datorn räknar i basen 2, inte 10. Idé: Vi använder samma metod, men i basen två. I basen 2 är varje siffra en bit. Vi väljer de N sista bitarna Bll offset. Övriga bitar anger pagenumret. Valet av framestorlek begränsas nu Bll en tvåpotens (2, 4, 8, 16,..., 1024, 2048,...) Exponenten anger antalet bitar i offset. Uppslagning i hårdvara CPU får adressen Bll sidtabellen av OS CPU översä[er automabskt alla adresser processen använder. Med sidstorlek på fomen 2 N där N är antalet bitar i offset blir adressberäkningen mycket enkel i hårdvara. 5
Paging och segmentabon? SegmentaBon kan vara prakbskt för programmeraren då det bä[re motsvarar programmerarens syn på processens olika delar. SegmentaBon kan användas i en minnesrymd som är sidindelad. Först slås segmentets basadress och limit upp i en segmen[abell, och en en logisk (sekvenbell) adress räknas ut, sedan slås den upp i pagetable så en fysisk adress erhålls. Separatorsida Denna sida är avsiktlig. Föreläsning 2 SnabbrepeBBon av sidindelat minne (paging) Prestanda med paging TranslaBon Lookaside Buffer (TLB) Minnesdelning med paging Virtuellt minne Extra informabon (bitar) i pagetable Page replacement algorithms FIFO, OpBmal, LRU, Clock Beladys anomaly - repebbon Processen får en låtsad logisk minnesrymd indelad i pages (sidor) Fysiska minnesrymden delas in på samma sä[, men varje del kallas här en frame Varje logisk adress delas upp i två delar, sidnummer och offset inom sidan Varje logiskt sidnummer översä[s av CPU Bll e[ fysisk framenummer genom a[ slå i pagetable. Prestanda Utan paging En minnesaccess för åtkomst av sökt adress Med paging Adressberäkning Görs i förväg och i hårdvara, försumbart En minnesaccess för a[ slå i pagetable En minnesaccess för åtkomst av sökt adress Halverad minnesprestanda! Två accesser för en! TranslaBon lookaside buffer Förkortas TLB Snabb cache exklusivt för pagetable Bygger på Principle of locality 90% av Bden används 10% av data. Först B[ar vi i TLB, bara om det misslyckas slår vi i pagetable. Exempel: Räkna: 100ns minnesaccess, 10ns TLB- uppslagning, 90% hit- rate 6
Minnesdelning Process 1 använder C s standardbibliotek Process 2 använder det också Process 3 med... Idé: Vi placerar C s standardbibliotek i en frame. Vi låter pagetable i alla tre processerna peka ut denna frame för en av sina pages! Virtuellt minne - Idé Om alla pages en process behöver inte får plats i minnet kan de lagras på disk Blls de behövs. Vid pagefault kan OS avbro[shanterare läsa in det minne som saknas från disk och låta CPU återstarta den instrukbon som orsakade pagefault. Vid återstarten finns minnet och processen kan fortsä[a. En algoritm väljer ut hur frames ersä[s då minnet är fullt. Alla processer behöver inte finnas i minnet, endast de som är redo. En ny (long- term) schemaläggare avgör vilka processer som skall finnas i minnet. Virtuellt minne - exempel E[ minne med 4 frames, ingen ledig Två processer med 2 frames var En sida vardera på disk En sida vardera som ändrats Rita och diskutera vad som händer när en process försöker komma åt data i sidan som ej finns i minnet... Speciella flaggor i pagetable Hur vet vi om en sida är gilbg, dvs Bllhör processen och finns i en frame? Invalid bit Om den är sa[ ger uppslagning av en adress i sidan e[ pagefault som OS hanterar Hur vet vi (senare) om en sida ändrats? Modified bit Clock/LRU bits Hur kan vi skydda minnet i en sida? Read- only bit No- execute bit Kernel mode memory Virtuellt minne pagefault steg 1 Processen kör i user mode och försöker läsa en (virtuell, logisk) adress. CPU delar upp adressen i sidnummer och offset. CPU B[ar i pagetable på sidnumrets posibon. CPU ser a[ valid - biten är sa[ Bll false OS har inte Blldelat någon frame Bll sidan! CPU genererar e[ avbro[ (interrupt). Virtuellt minne pagefault steg 2 CPU växlar Bll kernel mode och Bll operabvsystemets kerneltråd för processen som kör. CPU sparar alla processens register på kernelstacken. CPU slår upp i sin avbro[stabell var hanterarfunkbonen för pagefault finns (inlagd av OS) och startar den. 7
Virtuellt minne pagefault steg 3 HanterarfunkBonen för interruptet är en del av OS. OS undersöker vilken page som inte kunde slås upp. OS undersöker i en intern tabell om denna page har någon data på disk som kan läsas in. Om inte avslutas processen med e[ felmeddelande. Vi förutsä[er här a[ data fanns på disk och fortsä[er. OS undersöker om det finns någon frame i RAM som är ledig. Isåfall går vi Bll steg 5. Vi förutsä[er här a[ alla frames var upptagna och fortsä[er. Virtuellt minne pagefault steg 4 OS väljer ut en frame som förmodligen (förhoppningsvis) inte kommer a[ behövas på länge. OS markerar den som invalid i pagetable för den process (de processer) som använder den, och B[ar sambdigt i pagetable om sidan är modifierad sedan den lästes in i minnet (en bit vi kallar dirty - bit, CPU ansvarar för a[ uppdatera dirty bit vid varje skrivning). Om sidan var ändrad sparas ändringarna på disk så sidan kan återställas när processen som använder den får pagefault. Virtuellt minne pagefault steg 5 OS läser in sidan som saknades från disk och placerar den i den frame som var eller gjorts ledig. OS uppdaterar pagetable för den process som fick pagefult. OS avslutar avbro[et (interruptet). CPU återställer processens register och stack, och byter Bll user- mode och återstartar instrukbonen som misslyckades. Pagetable är uppdaterad och instrukbonen lyckas nu (?) utan pagefault. Virtuellt minne - fördelar Minnet inte begränsat Bll fysiska mängden RAM Fler processer kan vara igång sambdigt endast de som är redo behöver finnas i minnet CPU kan ny[jas effekbvare om det hela Bden finns Bllgång Bll redo processer. Mycket stora processer kan exekveras programmeraren behöver inte fundera (så mycket) på minnesanvändningen OS tar hand om det på bästa sä[. Virtuellt minne - nackdelar Prestanda vid pagefault är bedrövlig För få processer i redo- kön leder Bll dåligt ny[jande av CPU medan för många (eller för stora) processer i minnet leder Bll många pagefault För lite RAM leder Bll många pagefault För många pagefault leder Bll trashing Flera pagefault i en instrukbon? Pagefult i pagetable? Pagefault i loopar? Problem a[ välja vilka pages som skall finnas i minnet vid varje Bllfälle för a[ minimera pagefault och maximera CPU- ny[jande. Virtuell minne - prestanda? Vi antar a[ en minnesaccess tar 100ns (vi antar a[ TLB och all siduppslagning är inkluderat i den siffran) Vi antar a[ en diskaccess tar 10ms Vi antar a[ pagefault uppstår vid 1% av minnesaccesserna. (1% page fault rate) 90% av Bden behövs bara 10% av datat! Vad blir den genomsni[liga minnesprestandan? (Jämför beräkningen med TLB.) Vad är rimlig page- fault rate? 8
Page replacement algorithm Hur skall OS välja ut vilken frame som skall tas bort och återanvändas då en ny sida behöver läsas in? Välj en sida som är ledig. Välj en sida som inte behövs igen (omöjligt a[ veta). Välj en sida som inte kommer a[ behövas på längst Bd (opbmal och omöjligt a[ veta). Välj sidan eher den som valdes senast (FIFO). Välj en sida som inte verkar användas speciellt frekvent (clock, counbng). Välj en sida som inte använts på läng och hoppas det betyder den inte kommer behövas på länge. (LRU, clock) Rita exempel... Beladys anomaly Frågeställning: Om flera frames läggs Bll i e[ system, kommer då antaled pagefault a[ minska? Fler frames är generellt se[ bä[re. Fler fames kan leda Bll fler pagefaults! FIFO 3 frames blir 4 med sekvens 123412512345 Föreläsning 3 Long term scheduler Thrashing Working set window Page fault frequency Local vs global replacement policy MulBlevel paging Inverted pagetable - repebbon Processen får en låtsad logisk minnesrymd indelad i pages (sidor) med motsvarande fysiska frames. Varje logiskt sidnummer översä[s av CPU Bll e[ fysisk framenummer genom a[ slå i pagetable eller TLB Pagetable kan hålla reda på extra informabon om hur varje sida får användas (valid, read- only, no- exec, dirty) Sidor som inte får plats i minnet lagras på disk och läses in vid behov (när pagefault sker). En algoritm avgör vilken frame som ersä[s då en ny läses in vid disk. Long- term scheduler Ser Bll a[ det fins Bllräckligt med processer i ready- kön (och därmed i minnet) för a[ hålla CPU fullt sysselsa[. Thrashing Förutsä[ning: OS försöker hålla CPU upptagen med arbete genom a[ hålla redo- kön full och CPU ny[jad medan disken arbetar. 1. E[ pagefault uppstår. Processen fly[as Bll en kö i väntan på a[ sidan läses in från disk och en redo process fortsä[er. 2. Den nya processen har just få[ en av sina sidor utkastade för a[ få en ledig sida Bll sidan som skall läsas in. 3. E[ ny[ pagefult uppstår. En redo process schemaläggs. 4. Också denna har just få[ en sida utkastad... antalet pagefault ökar. 5. CPU- ny[jande sjunker då många processer väntar på data från disk. 6. OS läser in fler processer för a[ hålla CPU fullt utny[jad. Antalet frames per process minskar. 7. Färre frames leder Bll ännu fler pagefult och minskat CPU- ny[jade. 8. OS läser in fler processer... färre frames... 9
Tilldelning av sidor Hur skall OS avgöra hur många frames en process behöver för a[ fungera utan många pagefault? Studera process working set under en Bdsperiod hur många olika sidor använder processen under Bdsperioden? (OH!) Räkna ut genom a[ bokföra vilka sidor en process använder en viss Bdperiod bakåt. StaBsBk över page fault frequency och anpassa antalet sidor däreher. Hur skall OS Blldela frames Bll processer? Ge varje process en viss mängd frames. Vid pagefault återanvänder processen en av sina egna frames. Tilldela frames Bll processer ur en global pool. - Exempel Exempel: Vi har e[ antal processer av varierande storlek, mellan 1kiB och 7kiB. Vi har e[ system med 32 bitars adressbuss. Det innebär 2 32 = 4Gi adresser. En adress använder alltså 4 byte. Hur stor skall varje sida vara? Hur många bitar blir då offset? Exempel: Fortsä[ning... Hur många sidor behövs? Hur stor blir pagetable (sidtabellen)? Hur många sidor behövs Bll pagetable? När uppslagning skall ske i pagetable, hur vet CPU vilka sidor pagetable ligger i? Large pagetable problem! Hela pagetable måste vara sekvenbell! Pagetable bör ha samma storlek som en frame! MulBlevel paging - Idé (sidindelning i flera nivåer) Vi delar in pagetable i flera bitar. Vi gör en ny tabell som berä[ar i vilken frame varje bit kan hi[as. Vi kallar den nya tabellen för page direcory Varje del av en pagetable kallar vi foraarande pagetable, men vi har nu många pagetables, lika många som kan anges av page directory. Vi kan applicera samma ide om och om igen för a[ få paging i många nivåer. Rita... MulBlevel paging (sidindelning i flera nivåer) Fortsä[ exempel, rita... Vad blir nu prestanda? Hur stor adressrymd har varje process? Hur mycket minne kan systemet komma åt? Physical adress extension. Vad händer om vi har 64- bit adresser? Hur stor blir pagetable? Behöver alla pagetable a[ lagras i minnet? OH: Y[erligare nivåer av paging. - fördelar Processer ser allbd samma (visserligen låtsade ) adressrymd. Enkelt för kompilator och programmerare som kan förutsä[a a[ hela denna minnesrymd är Bllgänglig och allbd likadan. OS har frihet a[ koppla varje logisk page Bll vilken fysisk frame som helst. (Ingen external fragmentabon.) Processer får skyddat minne - kan bara komma åt frames som OS Blldelat processens pagetable. OS kan enkelt låta processer dela frames med andra processer och sä[a rävgheter på dessa. OS kan enkelt ny[ja diskutrymme Bll sidor som inte får plats i fysiskt minne (RAM). Det skall visas denna FÖ. 10
- nackdelar CPU måste översä[a varje adress. Uppslagning i N- nivås pagetable kräver N extra minneaccesser. TLB krävs för god prestanda. För stor sidstorlek ger hög internal fragmentabon. För liten sidstorlek ger för stor pagetable. Pagetable kräver extra minne och kan ta upp oproporboneligt mycket minne. Virtuellt minne kan bli katastrof för prestanda. Inverted pagetable Idé: Vi vänder på steken! Vi har en viss mängd fysiskt minne. Vi delar in det i frames. Vi skapar en inverterad pagetable. På posibonen för varje frame anges vilken process och vilken page i den processen som använder framen. OH. Rita! Vad är nackdelen? Fördelen? Inverted pagetable Uppslagning blir besvärligare. För a[ översä[a page X i process Y Bll motsvarande frame måste en rad i tabellen som matchar X och Y sökas upp. Löses i hårdvara för Bllräcklig prestanda. Minnesdelning blir besvärligt. Varje frame har nu bara en page. Tabellen blir mindre! Och det behövs bara en tabell för hela systemet! Tid över? Hemuppgih Uppgih 8: Stack Bll main? Hur går det? Frågor? SegmentaBon StarvaBon Priority inversion 11