4 grundregler 1. Man kan aldrig få för mycket minne 2. Minnet kan aldrig bli för snabbt Minneshantering 3. Minne kan aldrig bli för billigt 4. Programmens storlek ökar fortare än minnet i datorerna (känns det som) Windows minkrav Problemet Vi vill ha in många program samtidigt i minnet men det finns inte plats. Lösningar Flytta omkring data i minnet Spara minnet till disk och läs in vid behov Ladda inte in hela programmet/data på en gång
Enklast möjliga: ett program i taget Fixerade minnespartitioner Många köer för partitionerna sorterade efter storlek Dela upp minnet Prestanda Bättre prestanda pga IO väntan 1.00 Swapping Hur många processer samtidigt? 0.80 0.60 0.40 0.20 0.00 0 5 10 15
Generella problem Hur kan man flytta omkring program? Hur skyddar man programmen? Flytta omkring program Regel 1 - använd relativa adresser om möjligt Variant 1 - Gå in och ändra på koden och data så att adresserna blir rätt Jo, tjena!! Variant 2 - Nån sorts översättning av adresserna. Tabeller i hårdvara/mjukvara Flytta omkring Logisk Fysisk
Hålla reda på minnet first fit första bästa där den får plats, dela upp Snabb next fit ta nästa lediga lite långsammare best fit leta efter det som passar bäst långsammare, segm. minne worst fit sämsta möjliga inte bra heller Separata listor Sorterade listor Listor med olika storlekar - quick fit Virtuellt minne =
Paging Address Translation Architechture Divide physical memory into fixed-sized blocks called frames (size is power of 2, between 512 bytes up to 64KB have been used) logical address physical address Divide logical memory into blocks of same size called pages Set up a page table to translate logical to physical addresses Address generated by CPU is divided into: Page number (p) used as an index into a page table which contains base address of each page in physical memory CPU p d p f f d s physical memory Page offset (d) combined with base address to define the physical memory address that is sent to the memory unit page table Page Fault
Problem 32 bitar & 4KB page ger ca 1 miljon sidor minst 3MB... mycket men OK 64 bitar & 4KB page ger ca 4 503 599 627 370 496 sidor Flera nivåer på sidtabell Lokal användning Delvis användning ehhhhhhhhh Problem Sidtabellen ligger i minnet (den är stor) Sidtabellen kan ligga på disk... ick
Lösning Lagra de allra mest använda adresserna i hårdvara Translation Lookaside Buffer Inverted Page Table 4 503 599 627 370 496 sidor ger stor tabell Sidor som finns i minnet Mjukvara Sidan fanns inte i minnet Hitta plats Ta bort något Läsa in Algoritmer Den optimala algoritmen Not recently used First-in, first-out Second chance Clock page Least recently used Working set WSClock
Not recently used Statusflaggorna R & M First-in, First-out Den äldsta sidan åker ut 1. Icke refererad, icke modifierad 2. Icke refererad, modifierad 3. Refererad, icke modifierad 4. Refererad, modifierad Second chance Gammal och inte så populär Clock page Least recently used Sidor som är populära just nu kommer att vara populära i den närmsta framtiden Sidor som inte är populära just nu kommer inte att vara populära i den närmsta framtiden
Not frequently used Räknare Accessed-flaggan Avbrott från klockan Start av ett program Läser in sidor allt eftersom Antalet ökar Trashing
Working Set Sammanfattning Skriva och läsa processer från disk Många page fault Prepaging Optimal Den är bra NRU Mindre bra FIFO Säger inget om vilken sida som används ofta Sec. chance Bättre för populära sidor Clock Bara en bättre impl. LRU Bra men svår att implementera NFU ~LRU sämre, men lättare att implementera Aging ~LRU, enkel snabb Working Set Svår att få effektiv WSClock Bra Saker att tänka på Det sida som plockas bort behöver inte vara den sida som används minst! Andra processer har också sidor Ersätta lokalt eller globalt