Vad är viktigast? Sammanfattning Processer och trådar Avbrottshantering Vad det är och hur det fungerar (på låg nivå) Vilka problem finns Schemaläggning Flerprocessorsystem Varianter, problem Interprocesskommunikation Vad det är, hur det fungerar och de vanligaste problemen Vilka problem uppstår när man verkligen har flera processorer Säkerhet Olika typer av säkerhetsproblem Minneshantering Hur det fungerar och vilka problem som finns Processer och trådar En process är en uppsättning resurser + minst en exekveringstråd En tråd är själva exekveringen En CPU => en process i taget Pseudo-parallellism Programmeringsmodell: Alla program kör samtidigt Varför flera processer Bättre prestanda (beräkningsintensiv jmf IO-intensiv) Enklare programmeringsmodell Bättre användarmodell Processer och trådar Vid start Fixa till minnesutrymme Lägg in processen i de tabeller som behövs Initiera register och kod Markera att processen är färdig att köra Normal drift Körs Väntar på att få köras Väntar på något annat Avsluta en process Stäng filer, släpp resurser, städa upp Ta bort från tabeller Lämna tillbaka minne
Processer och trådar Samma princip för bägge Processer tar längre tid att skapa men jobbar ensam Trådar kräver mindre resurser för att skapas men måste ta hänsyn till andra Beroende på implementation så kan trådar ha problem med blockning Processer och trådar kan med fördel kombineras för ett mer flexibelt system. Schemaläggning När ska en process köras och vilken ska köras Systemet måste välja rätt process att köra Olika typer av system: batch => throughput interactive => response time realtime => deadlines Trådar Schemaläggning på två nivåer? Trådbyte billigt Interprocesskommunikation Interprocesskommunikation Med några undantag så är det tämligen värdelöst med flera trådar/processer om de inte kan kommunicera eller åtminstone synkronisera med varandra Koordinera användningen av resurser, utbyte av information Problemet: flera processer kan försöka använda samma resurs samtidigt Race condition Critical regions (kritiska regioner) Mutual exclusion (ömsesidig uteslutning) Implementation (anta en CPU) Inget processbyte => inget problem => stänga av avbrotten Variabel som flaggar => funkar inte Paterson s lösning Odelbar instruktion => TSL/TAS
Interprocesskommunikation Låta en process sova Semaforer funkar utmärkt men Kräver ofta flera semaforer för att det ska fungera Kan bli rätt komplicerade lösning om det är många processer inblandade Lätt att tänka fel Lätt att koda fel Monitorer Stöd i språket Lättare att koda Kan låsa för mycket Interprocesskommunikation Meddelandebaserad kommunikation Enkel att förstå Kräver mer kod i kärnan Kräver mer resurser Kan vara långsammare Bekvämare Deadlock Uppstår när två eller flera processer hamnar i ett cirkelberoende Fyra krav Ömsesidig uteslutning Väntar på resurser Non-preemptive Cirkulärberoende Lösning Strutstekniken Försök hitta deadlocks och lös upp dem Undvik genom att vara försiktig vid resurstilldelning Designa så att de fyra villkoren aldrig kan uppstå
Återhämtning Inte lätt Avbryta en exekverande process Hoppa tillbaka till ett tidigare tillstånd Slå ihjäl en process Minneshantering Problem Man vill köra många program samtidigt men tyvärr så får de inte plats i minnet samtidigt Programmen ska inte behöva ligga på vissa adresser Lösning Flytta omkring programmen i minnet Spara minnet temporärt till disk Undvik att ladda in hela programmet på en gång Enklast möjliga modell Fixerade minnespartitioner Många köer för partitionerna sorterat efter storlek Nackdel: om en kö blir tom så blir datorn dåligt utnyttjad En kö för alla processer
Två generella problem Hur kan man flytta omkring program? Hur skyddar man de olika programmens data? Virtuellt adressområde Programmet tror att det äger ett jätteminne och hela datorn OSet fejkar det hela Pages, page frames Core map Page tables Page fault TLB Vilken sida ska ut Avbrott First-in, first-out Second chance Least recently used Not frequently used Working set Flera processer Lokala eller globala algoritmer
Problem Minnesmappad IO Hur hanterar man att exekveringen av en process avbryts? Vad behöver man lagra? Vart ska man lagra det? Precise interupts Imprecise interupts Inga speciella instruktioner behövs, vare sig i språk eller CPU Det går antagligen snabbt och enkelt att läsa både data och kontrollinfo Man får behörighetskontroll automagiskt Delar av det adresserbara utrymmet försvinner Cachat minne Separata bussar Speciella IO-kanaler IO Det ska gå fort Processbyte är dyrbart DMA Inget adressutrymme försvinner Inga problem med cachning Speciella instruktioner i CPU och språk Tar längre tid att kolla ett kontroll register
Programvara i lager Diskar RAID Hastigheten är viktig 0, bra vid stora läsningar/skrivningar 1, duplicerar information 2, delar upp information i nibbles + felkorrigering Strip 0 Strip 1 Strip 2 Strip 3 (a) Strip 4 Strip 5 Strip 6 Strip 7 RAID level 0 Strip 8 Strip 9 Strip 10 Strip 11 Strip 0 Strip 1 Strip 2 Strip 3 Strip 0 Strip 1 (b) Strip 4 Strip 5 Strip 6 Strip 7 Strip 4 Strip 5 Strip 8 Strip 9 Strip 10 Strip 11 Strip 8 Strip 9 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 (c) Bit 1 Bit 2 Bit 3 Bit 4 Parity Strip 2 Strip 6 Strip 10 Bit 7 Strip 3 Strip 7 Strip 11 RAID level 2 RAID level 1 Buffring för undvika onödigt arbete Avlasta CPU Minska antalet processbyten 3, i bitar 4, jobbar med strips igen 5, bättre lastfördelning (d) Strip 0 Strip 1 Strip 2 Strip 3 (e) Strip 4 Strip 5 Strip 6 Strip 7 Strip 8 Strip 9 Strip 10 Strip 11 Strip 0 Strip 1 Strip 2 Strip 3 Strip 4 Strip 5 Strip 6 P4-7 (f) Strip 8 Strip 9 P8-11 Strip 10 Strip 12 P12-15 Strip 13 Strip 14 P16-19 Strip 16 Strip 17 Strip 18 RAID level 3 P0-3 P4-7 RAID level 4 P8-11 P0-3 Strip 7 Strip 11 RAID level 5 Strip 15 Strip 19 6, bortfall av fler diskar
Filstruktur Filsystem Prestanda Diskåtkomst är långsamt Buffra i minnet (en del filer ska kanske inte ens ut på disk) Problem: vissa block är viktiga Problem: vad händer om man inte sparar under en lång tid Läsa i förväg Minimera tiden för positionering Logfilsystem (för att undvika små filer) Bra att veta lite om CD-ROM CPM MS-DOS/Windows ME Principerna för Unix NTFS översiktligt NFS översiktligt Ext2 översiktligt Resier översiktligt Journalförande
Unix princip Flera CPUer Delat minne multiprocessor Multidator Distribuerade system Nummer på i-noden Namnet Synkronisering Samma principer Annorlunda implementation Test-and-lock/test-set-lock Två minnesaccesser, chans för en annan CPU att hinna mellan Busy waiting/spin lock Frestar på CPU, bussar, etc Processbyta eller busy waiting Schemaläggning Inte bara vem utan också vart Är processerna beroende av varandra? Central tabell eller flera nivåer? Processbyte eller inte, busy waiting?
Kommunikationsmetoder Meddelanden Blocking Non-blocking Delat minne Samma princip, annorlunda implementation False sharing RPC En bra modell? Flera problem? Multimedia Mycket information Hårda tidskrav Ingen variation Hålla deadlines Förskjutning OK Hoppa mellan olika ställen Komprimering komplicerar men är nödvändigt Realtime scheduling Kan man rent teoretiskt schemalägga Rate-monotonic scheduling Diskar Hög överföringskapacitet och driftsäkerhet viktigast Felfritt, mindre viktigt Earliest deadline first
Säkerhet Buffer overflow Sabotage (virus, trojaner, spionprogram) Intrång Olyckor (backup) Identitet (maskiner och personer, accesskontroll) Programfel Systematiska fel Läsa information (kryptering) Fysisk säkerhet