Operativsystem - Minneshantering I Mats Björkman 2016-02-11
Översikt Grundläggande minneshantering (Föreläsning MM I, idag) Problem inom minneshantering Minneshantering och multitasking Hantering av ledigt minne Virtuellt minne (Föreläsning MM II) Paging (sidhantering) Sidfel Sidutbytesalgoritmer Segmentering Operativsystem, Mats Björkman, MDH 2
Lärandemål Varför minneshantering? Logisk och fysisk adressrymd Grundläggande minneshantering Operativsystem, Mats Björkman, MDH 3
Minneshierarki SNABBARE REGS CACHE PRIMÄRMINNE DISK STÖRRE 4
Minneshierarki DYRARE REGS CACHE PRIMÄRMINNE DISK BILLIGARE 5
Processens adressrymd 0 00008abe <_E>: 8abe: 79 00 00 05 79 00 00 05 mov.w #0x5 8ac2: 55 02 55 02 bsr.+2 (8ac6) Code Data P1 00008ac4 <.ef>: 8ac4: 54 70 54 70 rts 00008ac6 <_E_sub>: 8ac6: 19 11 19 11 sub.w r1,r1 8ac8: 1d 01 1d 01 cmp.w r0,r1 8aca: 4e 20 4e 20 bgt.+32 (8aec) 00008dea < data>: 8dea: ff ff ff ff Stack PROCESS m 00008dec <_ExecTask>:... 00008dee <_ticks>: 8dee: ff ff ff ff 00008df0 <_x>:... 00008df2 <_y>: 8df2: 8d 44 8d 44 Operativsystem, Mats Björkman, MDH 6
System med en process i taget (ingen multiprogrammering) User Program 0xFFF Operating System in ROM Device drivers in ROM BIOS User Program Operating System in RAM 0x00 User Program Operating System in RAM Operativsystem, Mats Björkman, MDH 7
En process i taget Kan använda fasta adresser, exv. att exekveringen alltid börjar på adress 0 Enkel kompilering, enkel minneshantering Men, endast 1 process och helt statiskt Operativsystem, Mats Björkman, MDH 8
Flera processer samtidigt? Om vi vill åstadkomma multiprogrammering behöver vi kunna hantera flera processers minne samtidigt Operativsystem, Mats Björkman, MDH 9
Hur hanterar vi flera processers adressrymder samtidigt? 10
Grundläggande problem: Skydd Vi måste skydda processers minne från varandra Vi måste även skydda operativsystemets minne från felfungerande eller illasinnade processer Operativsystem, Mats Björkman, MDH 11
Grundläggande problem: Effektivitet Om vi implementerar minnesskydd så måste kontrollen av skyddet vara effektiv Hårdvarustöd blir i princip ett krav Tänk er skydd utan hårdvarustöd Operativsystem, Mats Björkman, MDH 12
System med multipla processer - En tidig lösning IBM 360-systemet (1964 --) Process 1 KEY Implementerade multipla processer genom hårdvarustöd CPU 0x100000 Tot: 1MB Process 2 KEY Key for process SR Operativsystem, Mats Björkman, MDH CPU has 512 4-bit key registers 0x00 Memory divided into 512 2k blocks 13
Varför fungerade IBM 360? Nyckeltabellen kunde inte ändras av användarprocessen Statusregistret kunde inte ändras av användarprocessen OS:et tilldelade processen en nyckel, och lagrade samma nyckel för den processens block i tabellen Operativsystem, Mats Björkman, MDH 14
Varför fungerade IBM 360? Vid minnesaccesser gjordes automatiskt i hårdvaran en jämförelse mellan nyckeln för sidan och processens nyckel i statusregistret Om inte lika, utlöstes en TRAP Operativsystem, Mats Björkman, MDH 15
Relokering i OS 360 För att kunna ha mer än en process i minnet samtidigt, implementerade OS 360 en form av relokering vid laddningen (mer strax) Begränsning: Nyckelns längd (4 bitar) begränsade multiprogrammeringen till max 16 samtidiga processer Operativsystem, Mats Björkman, MDH 16
Relokering generellt Om ett program skall flyttas i minnet så måste ibland programmet ändras Att flytta ett program i minnet kallas relokering (relocation) Operativsystem, Mats Björkman, MDH 17
Hopproblemet Key for process A Key for process B 0 : : ADD 28 MOV 24 20 16 12 8 4 JMP 24 0 16380 0 : : CMP 28 24 20 16 12 8 4 JMP 28 0 16380 KABOOM!!! 0 : : CMP 16412 16408 16404 16400 16396 16392 16388 JMP 28 16384 0 : : ADD 28 MOV 24 20 16 12 8 4 JMP 24 0 32764 16380 Operativsystem, Mats Björkman, MDH 18
Hopproblemet - lösning För att lösa hopproblemet här behöver vi ändra adresserna i den process som flyttas Den flyttade processens adresser måste peka till rätt ställe i minnet Operativsystem, Mats Björkman, MDH 19
Hopproblemet Key for process A Key for process B 0 : : ADD 28 MOV 24 20 16 12 8 4 JMP 24 0 16380 Operativsystem, Mats Björkman, MDH 0 : : CMP 28 24 20 16 12 8 4 JMP 28 0 28 måste i detta fall ersättas med 16412 16380 KABOOM!!! 0 : : CMP 16412 16408 16404 16400 16396 16392 16388 JMP 28 16384 0 : : ADD 28 MOV 24 20 16 12 8 4 JMP 24 0 32764 16380 20
Önskade egenskaper för minnet Transparent relokering (flytt) av program Minnesskydd Stöd för ett stort antal processer För att åstadkomma multiprogrammering Även för att komma förbi det fysiska primärminnets begränsningar Operativsystem, Mats Björkman, MDH 21
Önskade egenskaper för minnet Lösningar: Minnesabstraktion: Logisk adressrymd Swappa till sekundärminne (disk) Virtuellt minne (ämnet för nästa föreläsning) Operativsystem, Mats Björkman, MDH 22
Logisk adressrymd Minnesabstraktion Program använder inte fysiska adresser, utan logiska Varje program har sin egen logiska adressrymd Varje process startar exv. vid logisk adress 0x00 Förutsätter möjligheten att relokera Operativsystem, Mats Björkman, MDH 23
Logisk adressrymd I det tidigare exemplet ses exv. adress 28 i process B som en logisk adress Förr eller senare behöver den dock översättas (bindas) till en fysisk adress (i vårt fall 16412) Operativsystem, Mats Björkman, MDH 24
Bindning av adresser Översättning från logiska till fysiska adresser Bindning kan ske vid: Kompilering Laddning Exekvering Operativsystem, Mats Björkman, MDH 25
Bindning av adresser Översättning från logiska till fysiska adresser Bindning kan ske vid: Kompilering Laddning Ersätt symboliska adresser (labels) med fysiska adresser Är relokering möjlig med denna approach? Exekvering Operativsystem, Mats Björkman, MDH 26
Bindning av adresser Översättning från logiska till fysiska adresser Bindning kan ske vid: Kompilering Laddning Exekvering Ersätt logiska adresser med fysiska adresser i den laddade koden Är relokering möjlig med denna approach? Operativsystem, Mats Björkman, MDH 27
Statisk relokering Användes i IBM 360 Avhjälper hopproblemet Vid laddning allokeras minnesblock Koden kopieras från fil till dessa block Alla adresser i koden ersätts med fysiska adresser beräknade för de specifika block som allokerats Operativsystem, Mats Björkman, MDH 28
Statisk relokering: nackdelar Långsam laddning, statiskt Laddaren måste kunna veta exakt vilka värden som kommer att användas som adresser Svårt eller omöjligt att göra vissa smarta saker, exv. att beräkna adressen utgående från värden som inte lagrats som adresser Operativsystem, Mats Björkman, MDH 29
Bindning av adresser Översättning från logiska till fysiska adresser Bindning kan ske vid: Kompilering Laddning Exekvering Översätt logiska adresser till fysiska i hårdvaran under exekvering Operativsystem, Mats Björkman, MDH 30
Exempel: Bas & Limit-register Först använt i superdatorn CDC 6600, och i Intel 8088 (Första PC -processorn) Fysisk adress = adressen i koden + Base Reg. Limit-registret ger minnesskydd Process 1 Limit Base Process 2 Limit Base 16384 Operativsystem, Mats Björkman, MDH 0 1000 16384 CPU Limit Base 1000 16384 Process 2 exekverar 0 : : CMP 16412 16408 16404 16400 16396 16392 16388 JMP 28 16384 0 : : ADD 28 MOV 24 20 16 12 8 4 JMP 24 0 17380 16380 31
Bas- och Limit-register Bas- och Limit-registren pekar ut vilket segment av adressrymden som den exekverande processen får accessa Registren kan inte ändras av processen Operativsystem, Mats Björkman, MDH 32
Bas- och Limit-register Effektivitetsproblem bas-register: Våra fysiska adresser är summan av basadressen och den logiska adressen För varje minnesaccess krävs alltså en aritmetisk operation (addition) Operativsystem, Mats Björkman, MDH 33
Bas- och Limit-register Effektivitetsproblem limit-register: Vi måste gissa hur mycket dynamiskt data som behövs och hur stor stack som krävs för att komma fram till ett bra värde för limit-registret Operativsystem, Mats Björkman, MDH 34
Operativsystem, Mats Björkman, MDH 35
Processens storlek är dynamisk Allokering av minne för dynamiska data ( heap ) Stackar som växer (och krymper) Detta gör att OS:et måste hålla reda på hur mycket minne som processen använder Operativsystem, Mats Björkman, MDH 36
Processer i minnet: exempel Growing area Heap Allokera extra utrymme för: Stack (växer uppåt) Heap (växer nedåt) Size of Proc Growing area Stack Proc2 Heap Stack Size of Proc Proc1 OS 37
Stöd för ett stort antal processer: swapping Swappa ut hela processen på disk när den inte kör Variable-sized processes Proc1 P3 D I S K Proc2 Empty OS M E M O R Y Swap-villkor: Processen får inte vänta på interrupts från exv. I/O 38
Swapping utan relokerbar kod! PROC A PROC B PROC C PROC A PROC B PROC C OS OS OS OS OS OS Time 39
Swapping, multipla processer PROC C PROC C PROC C PROC C PROC C PROC B PROC B PROC B PROC B PROC A PROC A PROC A PROC D PROC D PROC D OS OS OS OS OS OS PROC C PROC D PROC A PROC A PROC B Time 40
Hantering av ledigt minne Swapping riskerar att introducera hål i minnet mellan processer Allokeringarna behöver hanteras på något sätt: Bitmap Länkad lista Operativsystem, Mats Björkman, MDH 41
Hantering av ledigt minne: Bitmap-exempel Minnets storlek: 32 sidor A 5 6 4 6 3 B C D E 0 10 20 30 Bitmappens storlek: 32 bitar 8 Bitmap: 11111000111111111100111111111000 A B C D E 42
Hantering av ledigt minne: Länkad lista-exempel Minnets storlek: 32 sidor 5 6 4 6 3 A B C D E 0 10 20 30 P 0 5 P 8 6 H 18 2 P 26 3 H 5 3 P 14 4 P 20 6 H 29 3 43
Algoritmer för att hitta ledigt minne First-fit Minnet skannas från början till dess ett tillräckligt stort hål hittas Next-fit Som ovan, men skanningen startar från där förra hålet fanns Best-fit Hela minnet skannas, det bästa hålet (så lite för stort som möjligt) används Worst-fit Som ovan men det hål som är störst används Quick-fit Håller listor med hål i vanliga storlekar för snabbare access 44
Algoritmer för att hitta ledigt minne: övning Minnet börjar här uppe 10 k 10 k 10 k 10 k 12 k 4 k 4 k 4 k 4 k 10 k 20 12 k 20 12 k 20 k 20 12 k 8 k 8 k 8 k 9 k 9 k 18 k 9 k 7 k 10 k 10 k 18 18 k 18 8 k 8 k 7 k 7 k 7 k 9 k 9 k 9 k 9 k 12 k 12 k 12 k 12 k 15 k 15 k 15 k 15 9 k 6 k First fit Next fit Best fit Worst fit 45
Algoritmer för att hitta ledigt minne First-fit Minnet skannas från början till dess ett tillräckligt stort hål hittas Next-fit Som ovan, men skanningen startar från där förra hålet fanns Best-fit Hela minnet skannas, det bästa hålet (så lite för stort som möjligt) används Worst-fit Som ovan men det hål som är störst används Quick-fit Håller listor med hål i vanliga storlekar för snabbare access 46
Fragmentering Extern fragmentering Det finns tillräckligt ledigt minne, men inte sammanhängande Intern fragmentering Allokerat minne används inte 47
Fragmentering Extern fragmentering Det finns tillräckligt ledigt minne, men inte sammanhängande Många små oallokerade segment OS 48
Fragmentering Extern fragmentering Det finns tillräckligt ledigt minne, men inte sammanhängande Oanvända delar av allokerade segment OS Intern fragmentering Allokerat minne används inte OS 49
Extern fragmentering Beroende på algoritm för minnesallokering så får vi mer eller mindre problem med extern fragmentering Worst-fit är bra för att den alltid lämnar stora delar kvar Operativsystem, Mats Björkman, MDH 50
Extern fragmentering: åtgärder Ett sätt att komma tillrätta med extern fragmentering är kompaktering Eftersom processerna är relokerbara, så kan vi flytta dem så att allt oanvänt minne hamnar i ena änden av minnesutrymmet Operativsystem, Mats Björkman, MDH 51
Kompaktering OS OS Ett enda oallokerat segment 52
Kompaktering, kostnad Kompaktering kostar mycket, alla processer behöver relokeras Bättre vore kanske ett system att hantera minnet där alla lediga utrymmen vore lika stora? Detta leder till paging Operativsystem, Mats Björkman, MDH 53
Intern fragmentering Problem: Vi har allokerat minne till processen efter en gissning av hur mycket minne vi kommer att behöva Kodsegmentet är inget problem, vi vet vid laddningen hur stor kod vi har Data-/stack-segmenten är däremot problematiska Operativsystem, Mats Björkman, MDH 54
Intern fragmentering För att undvika att vi får slut på minne för dynamiska data och stack vill vi gärna ta i lite i överkant för att vara på den säkra sidan Detta ökar på problemet med intern fragmentering Operativsystem, Mats Björkman, MDH 55
Intern fragmentering Alternativ: Gör det enkelt att utöka segmenten när så krävs Ett sätt är att allokera i fixa blockstorlekar där blocken inte behöver vara sammanhängande När det behövs mer minne utökas segmentet med ett block till Detta leder till paging Operativsystem, Mats Björkman, MDH 56
Paging Våra problem leder oss till att önska oss ett system där processers minnesutrymmen består av block (sidor) av fix storlek, och där det är lätt att lägga till och lämna tillbaks sidor allt efter behov Detta tas upp i nästa föreläsning, virtuellt minne, med fokus på paging Operativsystem, Mats Björkman, MDH 57
Lärandemålen igen Varför minneshantering? Logisk och fysisk adressrymd Grundläggande minneshantering Operativsystem, Mats Björkman, MDH 58