TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 2 TSEA28 Datorteknik Y (och U) Föreläsning 7 Kent Palmkvist, ISY Dagens föreläsning Summering så här långt Strukturer för att stödja operativsystem Multianvändarsystem Supervisorläge Multitasking Context switching MMU Specifikt 68000 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 3 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 4 Praktiska kommentarer För trångt i labbet Fler anmälda än förväntat Extra tillfälle i halvklass (för dom som inte kunnat anmäla sig) Lab2a Lab2b Extra tillfälle även för lab3 lab5 (samma deadline som tidigare) Se anmälningssidan Extra labb för dom som gjort dugga i tid inför lab1 Torsdag eller fredag vecka 10 (mail kommer senare) Summering så här långt Datorn läser instruktioner lagrade i minnet Maskinkodsinstruktioner tolkas och utförs Består av instruktionstyp och argument Instruktionerna är enkla operationer Dataflytt (move) Aritmetiska/logiska (add, sub, mult, and, or,xor, lsr, lsl, asl) Branchinstruktioner (bra, beq, bne, blt,...) Subrutin och interruptrutin (jsr, rts, rte)
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 5 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 6 Summering så här långt, forts. Argument till operationer av olika typer Register (D0-D7, A0-A7, PC, SR,...) Flaggor (Z,V,N,C) minnesaddresser Olika sätt att ange ett värde (finns fler än dessa) samt storlek byte, word och long Omedelbar, #$100 Direkt, $1000 Indirekt, (A0) Indirekt med postinkrement, (A1)+ Indirekt med predecrement, -(A2) Förskjutning, 12(A3) Summering så här långt, forts. Flaggorna i statusregistret uppdateras oftast beroende på resultat från instruktionen Z resultat = 0 C Carry (minnessiffra från beräkning eller skiftad bit från t ex lsr) N Negativt resultat (MSB = 1) V overflow vid 2-komplements operation TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 7 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 8 Summering så här långt, forts. Stack används till mycket återhoppsadresser vid subrutinanrop och avbrott Statusregister vid avbrott Spara registervärden som måste återställas i slutet av en rutin SP kan ibland vara ett vanligt register (t ex A7) Avbrott Avbryter exekvering ungefär som ett subrutinanrop Summering så här långt, forts. Introduktion M68008 i Tutor-systemet Skriva enkla program Felsöka och testa enkla program I/O (parallellport) koppling mot t ex tangentbord Användning av interrupt (lab 2) Kan ha flera nivåer av prioritet Sparar statusregister och återhoppsaddress på stack Kan tillåtas eller förbjudas mha speciella kontrollbitar (t ex I2 I1 I0 i statusregistret i M68000)
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 9 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 10 En verklig dators funktion Olika program kan laddas in Assemblera inte nytt varje gång Flera program körs samtidigt Programmen kan samsas på samma maskin Hantering av I/O kan variera Tangentbord Skärm lagringsmedia Extra krav för verklig dator Behöver gömma detaljfunktion hos I/O Jfr med pingpong i lab2, PIO alternativt utskrift Subrutiner med väl definierat registeranvändning och funktion Behöver garantera att ett program inte påverkar ett annat Inte förstöra stacken Inte skriva över andra programmets minne Byta snabbt mellan olika program för att ge intryck av samtidigt körande program TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 11 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 12 Funktion hos operativsystem Behöver bygga ut funktion för att bättre stödja ett operativsystem Operativsystem hanterar hårdvara och gömmer detaljer från användaren Windows, Linux, respektive MacOS ser likadana ut oberoende av hur datorn är byggd i detalj Ger illusionen av att flera saker sker samtidigt Delar på resurser så att alla användare får tillgång till dom Säkerhet Användarprogram får inte krascha datorn (stänga av funtioner, störa andra program) Applikation 1 Operativsystem Hårdvara Applikation 2 Notering om stackar i samband med subrutiner och avbrott Finns inget som kräver att återhoppsadressen som RTS tar från stacken har placerats där av en JSR instruktion Manipulation av stack möjlig Direkt via t ex move.l #$12345678,(A7) ; ersätt med ny adress Samma manipulation möjlig vid RTE. Inget krav att ett äkta avbrott skapat SR och PC kopior på stack Dvs RTE respektive RTS hoppas att det är korrekta återhoppsadresser, men kan inte garantera det A7 Återhoppsadress
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 13 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 14 Skillnad mellan supervisor och användare Hur hantera slarvig användare Vissa funktioner är kritiska för datorns funktion Avbrottsmask, stackpekare, I/O Begränsa programmets möjlighet att påverka dessa funktioner Användarprogram ska begära hjälp av operativ-systemet för tillgång till hårdvaruspecifika funktioner M68008 har två moder Supervisormode Inga begränsningar. Lämpligt för operativsystemsrutiner och startup User mode Begränsade möjligheter. Kan inte ändra interrupt, påverka viss I/O register och liknande SR 15 13 10 9 8 4 3 2 1 0 T S I2 I1I0 X NZ VC De flesta funktioner bygger på att stackpekaren är korrekt (pekar på tillgängligt RAM-minne) En slarvig användare skulle kunna använda a7 till något annat Så länge som inga subrutinanrop görs används inte stacken av användaren Operativsystemet behöver fortfarande en fungerande stack, t ex för avbrott Lösning i M68000 En extra stackpekare för supervisor mode (SSP) Byter register beroende på mode (värde på S i SR) Liknar hanteringen av DDR och DRA register i PIA Använd SSP i supervisor mode och vid avbrott A0 A6 A7 A7 S USP SSP USP SSP TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 15 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 16 Att hoppa mellan Supervisor och user mode i M68000 Supervisor mode indikeras av S-bit i statusregistret S-bit är satt när processorn startar Avbrottsrutiner körs med S=1 Inklusive TRAP instruktionen, lämplig som anrop till operativsystemet (Se manualsidan för syscalls i linux) Övergång till User mode RTE om sparat SR har S = 0 Direkt skrivning till SR (tillåtet endast från supervisor mode) Reset Avbrott trap Supervisor mode User mode SR RTE (S=0) move...,sr 15 13 10 9 8 4 3 2 1 0 T S I2 I1I0 X NZ V C För den nyfikne Kontextbyte Mål Få det att verka som flera program körs samtidigt på datorn Utan att programmen behöver veta om varandra Tidiga system (t ex Mac) använde kolloborativ multitasking, där varje program aktivt lämnar över till nästa program (tråkigt om ett program inte vill) Låt varje enskilt program köra på processorn Efter en viss tid avbryts nuvarande program och nästa startas Jämför med en restaurang med 1 anställd Måste vara kock ibland, servitör ibland, städare ibland Fungerar så länge som byten sker tillräckligt ofta
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 17 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 18 För den nyfikne Kontextbyte, forts. Konfigurera en timer som ger avbrott var 10e ms (100 Hz) Vid avbrott Spara d0-d7 och a0-a6 till supervisorstacken Spara USP till på supervisorstacken Spara nuvarande SSP (supervisor stack pointer) till minnet (1 plats per program som körs) Hämta SSP från ett annat program Hämta USP på (nya) supervisorstacken Hämta d0-d7 och a0-a6 från supervisorstacken RTE Byter helt tillstånd (stack, register, status) Syst. stack prog1 Syst. Stack prog2 SSP SSP prog1 prog2 Enklare exempel på kontextbyte Exempelkod finns på hemsidan Tre rutiner Skriv ut Task 1 is running Skriv ut Task 2 is running Skriv ut alla tecken från '0' till 'z' Varje rutin känner bara till sig själv Skriver ut sitt meddelande om och om igen Vet inte när nästa rutin ska startas task1 move.l #string1,a0 task1_loop move.b (a0)+,d4 tst.b d4 beq task1 ; If we are at the end ; of the string, restart! jsr printchar bra task1_loop string1 dc.b 'Task 1 is running',13,10,0 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 19 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 20 Kontextbyte exempel, forts. Använd tutorsimulatorn Ctrl-F load, G 1000 Ladda program, starta program på rad $1000 Ctrl-A ger interrupt från PIA port A Startar avbrottsrutinen context_switch Kontextbyte, kod Spara alla register på supervisor stack Byt supervisorstack till nästa program ;;; ---------------------------------------------------------------------- context_switch tst.b $10080 ; Acknowledge interrupt ;; Push all registers onto the supervisor stack, ;; including the user stack pointer (USP) movem.l a0-a6/d0-d7,-(a7) move.l usp,a0 move.l a0,-(a7) ;; (No need to push SR as that has been pushed ;; automatically to the stack) ;; Find next task to run find_next_task move.l current_task,a0 ; find_task_loop add.l #4,a0 cmp.l #no_more_stackpointers,a0 ; At the end? bne not_last_entry ; And we are done! last_entry move.l #supervisor_stackpointers,a0 not_last_entry cmp.l #0,(a0) beq find_task_loop ; If 0, no task available restore_context move.l a0,current_task ; Save the current task move.l (a0),a7 ; Load stack pointer move.l (a7)+,a0 ; Restore all registers move.l a0,usp movem.l (a7)+,a0-a6/d0-d7 rte
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 21 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 22 Multitasking Mer information fås i kurser som Datorteknik och realtidssystem (för Y) och (antagligen) motsvarande kurs för U Processprogrammering och operativsystem Blir ett svårare problem att lösa om flera program behöver bearbeta samma data Låsa tillgång (jämför med buffered_getkey i förra föreläsningen) Vanliga program får inte ändra avbrottsnivå Många sätt att optimera prestanda och garantera svarstider Vilket program ska väljas som nästa program att köra? Att dela resurser mellan program Grundläggande resurs Minne Varje program vill ha tillgång till minne utan att bry sig om andra programs behov Operativsystemet ska hantera tillgängligt minne Programmet begär viss mängd minne från operativsystemet och får en adress tillbaks Programmet lämnar tillbaks minne till operativsystemet när uppgiften är klar TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 23 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 24 När minnet tar slut Ett annat minnesproblem Även om datorn har tillräckligt med minne jämfört med hur mycket minne varje program behöver så räcker inte det minne Dålig säkerhet Du kör din internetbank Exempel (webbläsare och bildvisare kör samtidigt) Webbläsare allokerar minne för site 1 (20% av totalt) Bildvisare allokerar minne för bild 1 (40% av totalt) Webbläsare allokerar minne för site 2 (20% av totalt) Webbläsare stänger site 1 (totalt 60 % allokerat) Bildvisare allokerar minne för bild 2 (40%) <- går inte 40% finns tillgängligt, men delat på två ställen Minnesfragmentering! site 2 bild 1 site 1 bild 2 Ett annat program som startats av någon annan (virus/malware). Detta program tittar i minnet på din webläsare Stor risk att nycklar och passord hittas, t ex tangentbordbuffertar, lokala variabler etc. Måste kunna skydda minnesareor från olika användare Varje användares minne ska bara vara tillgängligt för denna användare och för operativsystemet
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 25 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 26 Minnesskydd Lägg till funktion som spärrar tillgång till andra program Minska risken att ett urspårat program skriver över någon annans data Ta bort möjlighet för fel program läsa känslig information Lägg till skrivskydd på vissa minnesytor Kan dela kod utan risk för påverkan Vanligt för standardbibliotek i datorer Lösning på minnesskydd och fragmenteringsproblemet Memory Management Unit (MMU) Håller ordning på vilket program har tillgång till vilken minneyta Varje program ser en logiskl beskrivning av minnesrymden Skydda vissa minnesytor mot skrivning av program (operativsystemet får skriva) Kan döpa om adresser Flera program kan se det som att dom skriver på adress $1000 Inga problem samla ihop minnesdelar till stor sammanhållen Logisk adress adress Program 1 Program 2 MMU Minne TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 27 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 28 MMU funktion Se fysiskt minne som byggblock T ex 4KByte stora områden (12 bitar) MMU översätter logisk adress till fysisk adress Högsta adressbitarna väljer vilket block (20 bitar) Lägre bitar används direkt till minnet Logisk adress $12347A63 adress $20223A63 översätts minneskarta Logisk adress adress Program 1 Program 2 MMU Minne Fördelar med MMU Låter dator med liten logisk använda stort minne Låter stor logisk minnesrymd matcha liten fysisk Minnesskydd, tillåt bara en användare komma åt speciella fysiska minnesområden Dela minnes mellan användare (subrutinbibliotek, datastrukturer) Slå ihop minnesfragment till sammanhängande minnesytor Slipper ändra adresser i programmet (alla program tillåts börja på samma logiska adress) Minneskarta för Program 1 Minneskarta för Program 2
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 29 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 30 Litet exempel på virtuellt minne position för data och program Program1 adress 2000, Program2 adress 3000 Subrutiner adress 4000 Program1 data area adress 5000, Program2 data area adress 8000 Logisk adress förväntad av programmet (samma för båda) Körs på adress 1000, subrutiner på adress 2000, data på adress 6000 Två olika minneskartor, en för varje program Antag 16 olika block (översätt bara 4 MSB bitar av 16-bitars adress) Minneskarta för Program 1 Minneskarta för Program 2 Litet exempel på virtuellt minne, forts. 16 positioner i översättningstabellen (4 bit) Exempel program1 (logisk start $1000) start $2000 move.l $6330,D0 ; data från fysisk $5330 jsr $2010 ; subrutinanrop till $4010 jmp $1003 ; hopp till $2003 Program 2 (fysisk start $3000) Välj rätt tabell beroende på vilket program ska köra Väljs av operativsystemet Prog1. MMU Adr Data 0 1 2 2 4 6 5 F Prog2. MMU Adr Data 0 1 3 2 4 6 8 F TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 31 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 32 Ge program mer minne än det finns Virtuellt minne MMU detekterar försök att läsa på adresser som inte allokerats Genererar ett page fault avbrott Avbrottsrutinen allokerar nytt minnesblock bland befintligt fysiskt minne Andra funktioner Detekterad skrivningar i delade minnesblock ger två kopior (en för varje program) Om fysiska minnet tar slut kan fysiskt minnesblock som inte använts på länge flyttas till hårddisk och användas på nytt (swap) Implementation av virtuellt minne Logisk adress delas upp i logisk sidaddress (mest signifikanta delarna) och displacement Logisk sidaddress används för att ta reda på fysisk sidadress Varje logisk sidadress har också indikerat ett antal egenskaper förutom fysisk sidadress tillgänglig/allokerad Ändrad Skrivbar Hur länge sedan den användes
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2016-02-17 33 Praktiskt problem med en översättningstabell 20 bitars adress => väldigt stor tabell 1 miljon entries, dyr och långsam Praktiskt system delar upp tabellen i två hierarkiska nivåer 10 bitar topnivå, 10 bitar mindre tabell Logisk adress www.liu.se 1a nivål 2a nivå a minnet