Flera processer Minneshantering Operativsystem lektion 6 Potentiellt problem: Den sida som plockas bort behöver inte vara den sida som används minst!! Det kan finnas andra processer som inte körs eller som har sidor som används ändå mindre Ersätta lokalt eller globalt? Ersätta globalt Om working set varierar => globalt Problem: Men om nån annan process använder en frame och väntar på IO? Det finns stora och små processer PFF Page Fault Frequency Trashing kan uppstå ändå Fast man följer alla regler kan trashing ändå uppstå Tvungen att plocka bort proceser Schemaläggning på flera nivåer Storlek på sidorna Med fel storlek på sidorna får man intern fragmentation
Storlek på sidorna Snabbt att läsa in Slöseri med minne Intern fragmentering Låt data och program dela adress Processorn har ett begränsat adressutrymme Låt två olika bytes ha samma adress Längre tid att läsa in Mindre slöseri med minne Låt processer dela minne Dela kod Om man kör flera kopior av samma program så varför ladda in programmet flera gånger? Dela data Snabbt sätt att skicka data mellan processer Dela data Spar utrymme men vad händer om en process vill skriva och det ska bara synas för denna process Problem Vad händer om en process dör Copy-on-write mema mema mema mema memb memab mema memb h = mem[30] t = mem[12] mem[24] = 17
Implementation En icke existerande adress => "page fault"/trap Speciell kod sparar register Anropa OSet som tar reda på vilken sida som behövs Om adressen verkligen existerar och processen får använda den så letar man reda på en lämplig fysis plats att lägga informationen på. Om nåt är fel så skickas en signal till processen (eller så avslutar man den) Om den valda platsen innehåller en modifierad sida så sparas den till disk. Sedan läses det nya innehållet in (antagligen sker ett process byte här). När rätt sida finns tillgänglig så anropas OSet som fixar till alla tabeller Man backar tillbaka till den instruktion som gav upphov till page fault Alla register läses tillbaka och processen schemaläggs Problem Hur får man reda på vilken adress som gav upphov till page fault Hur ska man reservera disk för att spara till Spara till disk + Snabbt - Oflexibelt - Mycket plats Knep och knåp Kan vara jobbigt att ha ett adressområde ibland Genom att segmentera minnet kan man få OSet att ta hand om obehagligheterna Flexibilitet Möjlighet att ge olika skydd till segmenten + Flexibelt + Mindre plats - Långsammare
Koncept Unix Processer Daemon Förälder vs barn Kommunikation Pipes Signals Processer Hur skapas en process Skapas med fork exec* Zombie 237 237 237 237 1057 1057 Exec
Implementation Två delar: user och kernel part Process table Parametrar för schemaläggning Olika minnesreferenser Signaler Resten User structure Maskinregister Tillståndet för systemanrop File descriptors Accounting Kernel stack Hur ser en process ut Minnesmappade filer Unix använder sig av paging Demand paging User structure + page table Om detta inte finns i minnet så kan processen schemaläggas Page daemon Core map
Algoritm Page daemon kollar med jämna mellanrum Finns det tillräckligt med lediga frames? Jäpp: Gör ingenting Nix: Börja flytta sidor så att det ska finnas tillräckligt Klocka med en visare Klocka med två visare Mycket byte och inte tillräckligt med sidor swapper börjar flytta ut processer till disk Linux 3GB adressutrymm + 1GB reserverat Kärnan finns alltid i minnet Har en grupp av fria sidor En process kollar att det finns tillräckligt Försöker få lediga sidor genom att kolla vilka sidor som har använts minst, vilka delade sidor som inte används och vilka vanliga sidor man kan ta. Hur ser en process ut En annan process kollar att modifierade sidor skrivs till disk. Area Page Reserverat User Windows
Hur ser en process ut Behöver inte byta adressområde => snabbare, mindre adressområde Sidorna kan vara i tre tillstånd: free, commited, reserved. Paging files Mappa filer i minne (filen och minne kan vara ur sync) Stödjer delat minne Copy-on-write Kärna, delat mellan alla processer För programmet Ogiltliga Bara läs Implementering Demand paging Försöker hålla ett viss antal lediga sidor Varje process har en working set, med max och minimum (kan ändras) Använder en lokal algoritm med lite extra styrning baserat på det globala läget Balance set manager => Working set manager (stora passiva först, sedan mindre, sist den aktiva) Working set Skriv disk Process klar Nolla Modifierad Beredd Ledig Nollad Trasigt