TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 3 TSEA28 Datorteknik Y (och U) Föreläsning 7 Kent Palmkvist, ISY Praktiska kommentarer Ordningsfråga Glöm inte koppla ned anslutningarna till darma Stäng inte av maskinen, bara logga ut Maskinproblem i MUX1 Ska nu vara åtgärdat Om labbmaskin hänger sig Skriv upp på whiteboard, Låt maskin vara igång, kontakta mig (via email) Dom som inte hunnit klart lab1 Approach 1 Redovisa lab1 i början av lab2 Approach 2 Extra lab 1 tillfälle, någon gång slutet av vecka 8 Endast för dom som deltagit i del A och B av lab 1 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 2 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 4 Dagens föreläsning Summering så här långt Mer detaljer om avbrott på Darmasystemet Strukturer för att stödja operativsystem Multianvändarsystem Supervisorläge Multitasking Context switching MMU Specifikt ARM 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 Data till/från minne (ldr, str, push/pop) Dataflytt mellan register (mov) Aritmetiska/logiska (add, sub, and, orr, eor, lsr, lsl, asl) Branchinstruktioner (b, beq, bne, blt,...) Subrutin och interruptrutin (bl, bx lr, mov pc,lr)
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 5 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 7 Summering så här långt, forts. Argument till operationer av olika typer Register (r0-r12, PC, LR, SP, PSR,...) Villkor (NE, EQ, LT, MI,...) baserat på flaggor (Z,V,N,C) minnesaddresser Olika sätt att ange ett värde (finns fler än dessa) samt andra storlekar byte, halfword för minnesaccess. Omedelbar, #0x100 Direkt, 0x4001000, Finns INTE på Darma (ARM saknar adresseringsmode) Indirekt, [r0] Indirekt med offset (indirekt med förskjutning), [r0,#0x1234] Indirekt med postinkrement, [r0],#0x4 Indirekt med predecrement, [r0,#-0x4]! Summering så här långt, forts. Stack används till mycket LR innan subrutinanrop i subrutiner PSR, PC, LR, R12, R0-R3 vid avbrott (dvs allt för att kunna återställa) Spara registervärden som måste återställas i slutet av en rutin SP kan ibland vara ett vanligt register (t ex R13) Avbrott Avbryter exekvering ungefär som ett subrutinanrop Kan ha flera nivåer av prioritet Sparar statusregister och återhoppsaddress på stack Kan tillåtas eller förbjudas mha speciella instruktioner TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 6 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 8 Summering så här långt, forts. Flaggorna i statusregistret uppdateras 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 (visar om N stämmer) Flesta instruktioner behöver ange att flaggor ska uppdateras ADDS, ANDS,... CMP ändrar alltid flaggor (finns ingen CMPS) Summering så här långt, forts. Introduktion ARM Cortex-M i Darma-systemet Skriva enkla program Felsöka och testa enkla program I/O (parallellport) koppling mot t ex tangentbord
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 9 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 11 Strukturering av program Hopp till subrutin bara med bl Subrutiner måste avslutas med mov pc,lr (eller pop {pc} om push {lr} i början Inga hopp mha B eller Bxx Kontrollera enskilda bitar i ord (t ex strobe) mha maskning (AND, OR etc.) Programstruktur mappas till linjär Rita gärna programstruktur mha flödesdiagram eller liknande Mappa funktionsblock till subrutiner och/eller kod Hoppa från slut av block till nästa del Hur fungerar avbrott från GPIO? Varje pinne kan trigga avbrott Låg nivå, hög nivå, positiv flank, negativ flank eller båda flanker Styrs med kontrollregister i GPIO GPIOIS, GPIOIBE, GPIOIEV 1 bit per pinne i kontrollregistren Om flank används ligger begäran kvar tills den nollställs Skriv 1or i GPIOICR (GPIO Interrupt Clear Register) för att nollställa Om orsak inte åtgärdad (nivå eller nollställt flank) fås nytt avbrott direkt Måste nollställa orsak för att undvika nytt avbrott TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 10 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 12 Avbrottssystem Darma System bestående av GPIO, NVIC och CPU GPIO genererar avbrottsbegäran NVIC (Nested Vector Interrupt Controller) prioriterar och begär avbrott (inklusive vektor) hos CPU (processorn) CPU utför avbrott (push till stack, hämta vektor) CPU kan tillåta eller ignorera avbrottsbegäran CPSIE I respektive CPSID I Spärrar alla avbrott 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
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 13 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 15 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 Notering om stackar och LR i samband med subrutiner och avbrott Finns inget som kräver att återhoppsadressen som tas från stacken eller vid mov pc,lr eller bx lr har placerats där av en BL och push {lr} instruktion Manipulation av LR möjlig Direkt via t ex mov LR,#$1237 ; ersätt med ny adress Samma manipulation möjlig vid avbrottsåterhopp. Inget krav att ett äkta avbrott skapat SR och PC kopior på stack Dvs bx lr respektive mov pc,lr hoppas att det är korrekta återhoppsadresser, men kan inte garantera det TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 14 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 16 Funktion hos operativsystem Hantering av multianvändarsystem 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 Applikationen ska inte behöva veta alla detaljer om hårdvaran Säkerhet Användarprogram får inte krascha datorn (stänga av funtioner, störa andra program) Applikation 1 Operativsystem Hårdvara Applikation 2 Separera vanliga program från operativsystem och avbrott Kritisk funktion för att garantera Olika lösningar i olika processorer 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 operativsystemet för tillgång till hårdvaruspecifika funktioner
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 17 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2017-02-13 19 Hur hantera slarvig användare R0 De flesta funktioner bygger på att stackpekaren är korrekt (pekar på tillgängligt RAM-minne) En slarvig användare skulle kunna använda SP till något annat Så länge som inga subrutinanrop görs används inte stacken av PC användaren Operativsystemet behöver fortfarande en fungerande stack, t ex för avbrott Lösning i Cortex-M4 En extra stackpekare för Handler mode (Handler) Byter register beroende på mode Använd MSP i handler mode (och vid avbrott) SP SP Cortex-M Mode MSP PSP MSP PSP 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 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 18 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2017-02-13 20 Hantering av multianvändarsystem ARM Cortex-A Olika registeruppsättningar (5 st) User, FIRQ, IRQ, SVC, mm. Vissa bara olika PC, PSR och SP, andra med fler registerdubletter Byter vid avbrott eller återhopp ARM Cortex-M4 Två olika mode Thread (användare) och Handler (avbrott, OS) mode Olika SP för respektive mode M68000 (t ex i tidig Apple Macintosh) 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 vissa I/O register och liknande 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 2017-02-13 21 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2017-02-13 25 För den nyfikne Kontextbyte, forts. Konfigurera en timer som ger avbrott var 10e ms (100 Hz) 10 ms per program innan nästa program får tid att köra Vid avbrott Spara r0-r15 (inkl PC, SP och LR) samt PSR till kärnans minnesområde (1 per program) Hämta r0-15, PSR från nästa program Bx lr Byter helt tillstånd (stack, register, status) Syst. stack prog1 Syst. Stack prog2 prog1 prog2 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? TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2017-02-13 22 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2017-02-13 26 Enklare exempel på kontextbyte, 68000 Att dela resurser mellan program 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 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 2017-02-13 27 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2017-02-13 29 När minnet tar slut Minnesskydd Även om datorn har tillräckligt med minne jämfört med hur mycket minne varje program behöver så räcker inte det 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 minne site 2 bild 1 site 1 bild 2 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 Minnesfragmentering! TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2017-02-13 28 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2017-02-13 30 Ett annat minnesproblem Dålig säkerhet Du kör din internetbank 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 Lösning på minnesskydd och fragmenteringsproblemet Memory Management Unit (MMU) Logisk Håller ordning på vilket program har tillgång till vilken minneyta adress Varje program ser en logisk 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 0x1000 Inga problem samla ihop minnesdelar till stor sammanhållen adress Program 1 Program 2 MMU Minne
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 31 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 33 MMU funktion (virtuellt minne) 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 0x12347A63 adress 0x20223A63 översätts minneskarta Logisk adress adress Program 1 Program 2 MMU Minne Litet exempel på MMU-funktion Antag 16-bit adress (65536 adresser), 16 olika minnesblock Varje block är 4 KByte översätt bara 4 MSB bitar av 16-bitars adress En tabell för varje program MSB MSB Logisk adress 4 Tabell 16 värden 4 adress 12 LSB LSB Program 1 Program 2 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 32 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 34 Fördelar med MMU Program 1 Litet exempel på MMU-funktion Program 1 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 minne 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) Program 2 position för data och program Program1 adress 0x2000, Program2 adress 0x3000 Subrutiner adress 0x4000 Program1 data area adress 0x5000, Program2 data area adress 0x8000 Logisk adress förväntad av programmet (samma för båda) Körs på adress 0x1000, subrutiner på adress 0x2000, data på adress 0x6000 Två olika minneskartor, en för varje program Program 2
TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 35 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 37 Litet exempel på MMU-funktion, forts. Implementation av virtuellt minne, utökning 16 positioner i översättningstabellen (4 bit) Exempel program1 (logisk start 0x1000) start 0x2000 mov r0,#0x6330 ; data från fysisk 0x5330 ldr r1,[r0] bl 0x2010 ; subrutinanrop till 0x4010 b 0x1003 ; hopp till 0x2003 Program 2 (fysisk start 0x3000) 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 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 2018-02-12 36 TSEA28 Datorteknik Y (och U), föreläsning 7, Kent Palmkvist 2018-02-12 38 Praktiskt problem med en översättningstabell Antag 32-bitar adress, 4KByte block (12 bitar) => 20 bitars översättning => 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 1a nivål 2a nivå a minnet Ge program mer minne än det finns Virtuellt minne Placera oanvända minnesdelar på sekundärminne (disk) 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)
www.liu.se