TSEA28 Datorteknik Y (och U) Föreläsning 1 Kent Palmkvist, ISY Dagens föreläsning Introduktion/motivation Administrativ information Historik Vad är en dator Litet exempel 2
Vem är jag 3 N B-huset 2:a våning Föreläsare och kursansvarig Ingång 25 Kent Palmkvist kentp@isy.liu.se Kontor 3B:502 (andra våning) Till E-huset Ingång 27 4 Tillgänglighet till information Alla slides finns på kursens hemsida http://www.isy.liu.se/edu/kurs/tsea28 Kursmaterial (förutom bok) även på kurshemsidan Förberedelseuppgifter Anvisningar för kursen (deadlines etc) Labbmaterial Gamla tentor Material även från Andreas Ehliar, Lennar Bengtsson, Camilla Eidem, och Tomas Svensson Labanmälan via Lisam
5 Kursens mål Förstå Hur en dator är uppbyggd och fungerar på registernivå Binär aritmetik Kunna Skriva små enkla assemblerprogram Hantera in/utmatning Implementera instruktioner m h a mikroprogrammering Kursens mål, forts. Känna till Principer för hur cache fungerar Olika sätt att öka exekveringshastigheten Hur processorn påverkar operativsystemet 6
7 Varför detta är intressant En programmeringsintresserad U:are Förstå begränsningar hos olika datorer En matematikintresserad Y:are Snabba upp beräkningsprogram/simuleringar En fysikintresserad Y:are Använda sensorer för insamling av mätdata En elektronikintresserad student Nästan all elektronik innehåller en dator Det är roligt! Senare kurser För Y Elektronik kandidatprojekt Inbyggda DSP processorer Datorarkitektur Datorteknik ett datorsystem på ett chip För U Processprogrammering och operativsystem Kompilatorkonstruktion? 8
9 10 Fortsatt prestandautveckling? Miniatyrisering ger allt snabbare datorer Exponentiell prestandaökning Moores lag Fysiska begränsningar finns Klockfrekvensökningen har avklingat Många prestandamått Beräkningshastighet Instruktioner/s Effektförbrukning Värmeutveckling ger krav på kylning Storlek Fler transistorer och längre ledare ger större kapacitans och större effektförbrukning Pris
Aktuella trender inom datorstrukturer Hårdvaran allt mer specialiserad Kryptering, videokodning/avkodning, DSP Många parallellkopplade datorer Ibland skapad genom att två datorer delar vissa bitar (inkl delar av processorn) Mjukvaran måste anpassas till denna hårdvara Kräver god förståelse för datorteknik Administrativ information 11
13 Kursens innehåll Går VT1 + VT2 6 hp (3hp tenta, 3hp labb) 16 föreläsningar 3 lektioner (2 under VT1) 5 laborationer (3 under VT1) 1 tentamen (4h) Självstudier > 100h!! Laborationsförberedelse ~ 12h per styck Varierar mellan studenter, vissa kan behöva mer! Kurslitteratur Computer Organization and Architecture Themes and Variations; Alan Clements Laborationsanvisningar (finns på kurshemsidan) Notering: Tidigare års kurslitteratur går att använda, men saknar många detaljer Grundläggande Datorteknik (Roos) Kompendium i Datorteknik (Wiklund) 14
15 Föreläsningar och lektioner Föreläsningarna bygger delvis på kursboken, men även annat material ingår Lektioner för att hjälpa till med labbförberedelser Se dom som frågestunder Se till att vara förberedd innan lektion! Läs igenom labbeskrivning och dokumentation innan lektion! 16 Laborationer Fem laborationer uppdelat på 2 x 2h (totalt 4h/lab) Lab1: Kodlås (introduktion till assembler) Lab2: Avbrott Lab3: Digitalur Lab4: Mikroprogrammering Lab5: Bussar/Cache Laborationsgrupper 2 personer per grupp Max 30 personer i labbet
17 Laborationsanmälan Elektronisk anmälan via Lisam 15 grupper per lab, 2 personer per grupp Kontrollera att labbtillfället passar (schemats indelning endast en rekommendation) Viktigt! Labbanmälan stänger dagen innan första labbtillfället Bara anmälda studenter får delta i laborationen Två typer av laborationsförberedelser Individuella förberedelseuppgifter Kallad även hemuppgift/dugga Förberedelse inför laborationsuppgiften Läsa labbkompendiet och annat material Lösa uppgifter/skriva kod innan laborationstillfället Ej förbered student kan tvingas lämna labblokal! Se kurshemsidan för beskrivning av hur test kan göras på hårdvara hemifrån 18
19 Individuella föreberedelseuppgifter Inför (nästan) varje laboration finns en individuell förberedelseuppgift Syfte: Uppmuntra alla laboranter att vara väl förberedda inför laborationen Anvisningar finns på kursens hemsida Se labbhemsidan Krav Klar med förberedelseuppgift innan ordinarie laborationstillfälle för att få tillgång till eventuellt extra laborationstillfälle Regler kring samarbete om individuell förberedelseuppgift Samarbete inom labbgruppen tillåten men ej uppmuntrad (dvs ni bör försöka er på uppgiften på egen hand innan ni börjar samarbeta) Samarbete utanför labbgruppen ej tillåten Diskussion i allmänna ordalag om uppgiften, labbmiljö och så vidare är ok Gränsen för otillåtet samarbete går vid att visa upp din individuella uppgift för någon utanför labbgruppen Diskussion med examinator, labbassistent och laborationsassistent är givetvis tillåten om du kör fast 20
Laborationslokal Mux2 21 N B-huset 2:a våning Ingång 25 B-huset, 2:a våning, mellan ingång 25 och 27 Mycket av arbetet kan även göras hemifrån Simulering tillåter test av kod i förväg Ingång 27 Redovisning på labbtid i laborationslokalen Förändringar från tidigare år Introduktion av ARM-relaterad beskrivning Kursboken fokuserar mer på ARM 1:a steget i bytet till ARM-baserade laborationer Sista året med 68000-systemet (tutor) Ny laborationsutrustning nästa år Tenta kommer under närmaste två åren kunna lösas med antingen ARM eller 68000 kod 22
Lite datorhistoria 24 Lite datorhistoria Analytic engine (1837, Charles Babbage) Ritningar men ingen fungerande maskin https://commons.wikimedia.org/wiki/file:babbage_difference_engine.jpg Ca 3 minuter för multiplikation av två 20-siffriga tal Z3 (1941, Konrad Zuse) Elektromekanisk (relä) 3 sekunder för multiplikation https://commons.wikimedia.org/wiki/file:z3_deutsches_museum.jpg
25 Lite datorhistoria, forts. Eniac, 1946 Radiorör, 150 kw effektförbrukning 5000 additioner/subtraktioner per sekund Intel 4004, 1971 2300 transistorer Första enchips mikroprocessorn 740 khz klockfrekvens (0.095 MIPS) https://commons.wikimedia.org/wiki/file:eniac_penn1.jpg#/media/file:eniac_penn1.jpg https://commons.wikimedia.org/wiki/file:legendary_chip_designer_betting_on_hu man_mind.jpg#/media/file:legendary_chip_designer_betting_on_human_mind.jpg 26 Lite datorhistoria, forts. Cray-I, 1975 Superdator, vektormaskin, 80 MHz, 160 MIPS Apple II, 1977, resp. VIC20, 1981 (tidiga hemdatorer) "Cray-1-p1010221" by Rama - Own work. Licensed under CC BY-SA 2.0 fr via Wikimedia Commons https://commons.wikimedia.org/wiki/file:cray-1-p1010221.jpg#/media/file:cray-1-p1010221.jpg 8-bitars 6502 process 1 MHz klockfrekvens, 3500 transistorer 48 Kbyte RAM minne (max) https://commons.wikimedia.org/wiki/file:commodorevic-20-fl.jpg#/media/file:commodore-vic-20-fl.jpg
27 Lite datorhistoria, forts. IBM PC, 1981 16-bitars 8088 processor, 29000 transistorer 4.77 MHz klockfrekvens, max 640 KB IMG_7271.jpg#/media/File:IMB_PC-IMG_7271.jpg http://www.oldcomputers.net/ibm5150.html RAM https://commons.wikimedia.org/wiki/file:imb_pc- ARM, 1985 32-bitars RISC processor, 25000 transistorer Acorn Archimedes ARM Ltd startat av Apple och Acorn 1990 https://commons.wikimedia.org/wiki/file:acornarchimedeswiki.jpg#/media/file:acornarchimedes-wiki.jpg 28 Lite datorhistoria, forts. AMD64, 2003 64-bitars 8086 kompatibel 1 miljon transistorer 1 GHz klockfrekvens Intel Haswell (i3, i5, i7), 2013 Inklusive grafikprocessor, 1.4 miljarder transistorer, 3 GHz Intel Xeon, 2015 18 kärnor, 5.7 miljarder transistorer, 160W Effektutveckling blir en viktig begränsning för persondatorer runt år 2000
Lite datorhistoria, summering Hastigheten (instruktioner per sekund) ökar exponentiellt Priset går ned trots ökad prestanda Moores lag Antal transistorer på ett chip dubbleras vartannat år Generellt: prestanda ökar också exponentiellt Olika exponenter => differenser ökar också exponentiellt (t ex hastighet minne jämfört med cpu) En dators inre uppbyggnad 29
31 En programmerares vy av en dator Högnivåspråk Interpreterande (tolka kod under körning, t ex JAVA) Kompilerande (översätt innan körning till maskinkod, t ex C) Assemblerspråk Datorns egna interna språk Alla högnivåspråk måste översättas till detta Mikroprogrammering (inget en vanlig användare ser) Styrning av interna funktioner i datorns inre Översiktsbeskrivning av en dator Indata Switchar, sensorer, kommunikationsmoduler Utdata lysdioder, reläer, video, etc. In och utdata i digital form (binära tal) Datorsystem Indata Buss Utdata Processor (CPU) Minne Data Buss Program 32
33 Översiktsbeskrivning av en dator, forts Minnet innehåller två typer av information Instruktioner som beskriver vilka operationer som utföras Datorsystem Indata Buss Utdata Processor (CPU) Minne Data Buss Program Datavärden som sparas i datorn Översiktsbeskrivning av en dator, forts Processorn läser instruktioner från minnet och utför dessa operationer på värden från indata och minne. En instruktion åt gången Resultat hamnar i minne och som utsignaler Datorsystem Indata Buss Utdata Processor (CPU) Minne Data Buss Program 34
35 Typer av byggblock i processorn Lagrar ett värde tillfälligt En eller flera bitars värde Data in Data ut 1234 Register Minne Större vektor av registervärden Minnescell väljs via adress Ibland samma buss för data in och data ut Styrsignaler väljer om data sparas eller läses Data in 1234 5678 Data ut : Adress 36 Byggblock, forts. Aritmetikenhet för enklare beräkningar Addition, subtraktion, and, or etc. Resultat analyseras (addition ger nollresultat, minnessiffra från addition etc.) Styrsignaler väljer vilken funktion som ska beräknas Data in A Data in B Resultat Y ALU Flaggor Y = f(a,b) där f kan vara AND, OR, XOR, NOT, ADD,SUB,SHIFT,ROTATE, Flaggor anger egenskaper hos resultat, t ex =0, minnessiffra, etc.
Byggblock, forts. 37 Endast en källa aktiv åt gången Bussar Skickar vidare värden från ett block till många andra Styrenhet Hämta nästa instruktion från minnet Avkoda instruktionen, styr vilka värden som skickas vart Klocka styr hur ofta styrsignaler ändras Instruktion Styrsignaler Styrenhet : Klocka Exekvering av program kräver minst Programräknare (PC) Aritmetikenhet (ALU) Beräknar addition etc. Z: flagga = 1 om resultat = 0 Tillfälliga register (D) Håller reda på position för aktuell instruktion i programminnet Lagra mellanresultat Styrenhet (CU) Minne In Adress Data PC CU ALU D Z Ut 38
39 Maskininstruktionens utseende Lagrad i en minnescell Typ Argument xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 4 Binärt data Två delar Vilken typ av operation (4 bit => 16 olika) Argument till operation (32 bit) I detta exempel: 36 bitars ord i minnet 32 Typkod Förklaring 0000 (0) 0001 (1) 0010 (2) Ladda in argument i D Addera argument till D Jämför argument med D, Z=1 om D=argument,Z=0 annars Sätt PC till argument om Z=0 Sätt PC till argument om Z=1 Sätt PC till argument om argument = 2000 skicka D till display om argument = 2100 hämta aktuellt displayvärde till D om argument = 2200 hämta sensorvärde till D, D=1 om någon står i dörren, D=0 annars 0011 (3) 0100 (4) 0101 (5) 0110 (6) 0110 (6) 0110 (6) 40 Assemblerinstruktioner Svårt komma ihåg och läsa binärmönster Använd så kallade mnemonics istället Typkod Assemblerinstruktion Föklaring 0000 (0) 0001 (1) 0010 (2) 0011 (3) 0100 (4) 0101 (5) 0110 (6) 0110 (6) 0110 (6) move #värde,d add #värde,d cmp #värde,d bne adress beq adress jmp adress jsr 2000 jsr 2100 jsr 2200 Ladda in argument i D Addera argument till D Jämför argument med D, Z=1 om D=argument, Z=0 annars Sätt PC till argument om Z=0 Sätt PC till argument om Z=1 Sätt PC till argument om argument = 2000 skicka D till display om argument = 2100 hämta aktuellt displayvärde till D om argument = 2200 hämta sensorvärde till D, D=1 om någon står i dörren, D=0 annars
41 42 Litet exempel: Räkna studenter Jag vill räkna antal studenter som besöker mig på kontoret under en dag Sätt en sensor i dörren och en sifferdisplay En dator får räkna Y:are: ni vet hur man bygger detta med två räknare, 7segmentsavkodare, enpulsare etc. Detta byggsätt saknar flexibilitet när nya funktioner ska läggas till Första steget: definiera en algoritm Varje gång sensorvärdet ändras från 0 till 1 ska displayvärdet ökas med 1 Dela upp Initiering när strömmen slås på Hitta sensorvärdesändring 0 till 1 Öka displayvärde Hitta sensorvärdesändring 1 till 0 Börja om att leta efter sensor=1 Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 sensorvärde = 0
43 Implementering i exempeldatorn Adress Maskinkod Assemblerinstruktion Förklaring 0 1 2 3 4 5 6 7 8 9 10 11 move #0,D jsr 2000 jsr 2200 cmp #1,D bne 2 jsr 2100 add #1,D jsr 2000 jsr 2200 cmp #0,D bne 8 jmp 2 ; Nollställ D ; sätt display till 00 ; Hämta sensorvärde ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; Hämta sensorvärde ; Är dörren tom? ; nej, kontrollera igen ; börja om Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 sensorvärde = 0 Implementering i exempeldatorn, forts. Adress Maskinkod Typ Arg. Assemblerinstruktion Förklaring 0 1 2 3 4 5 6 7 8 9 10 11 move #0,D jsr 2000 jsr 2200 cmp #1,D bne 2 jsr 2100 add #1,D jsr 2000 jsr 2200 cmp #0,D bne 8 jmp 2 ; Nollställ D ; sätt display till 00 ; Hämta sensorvärde ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; Hämta sensorvärde ; Är dörren tom? ; nej, kontrollera igen ; börja om 0 6 6 2 3 6 1 6 6 2 3 5 0 2000 2200 1 2 2100 1 2000 2200 0 8 2 Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 sensorvärde = 0 44
45 Assembler Översätter assemblerinstruktion till maskinkod Skriv en textfil med assemblerinstruktioner Håller även reda på adresser Ange bara symboliska namn på platser i programmet (kallas label) Adress Maskinkod Typ Arg. wait0: label jsr 2200 cmp #0,D bne wait0 ; Hämta sensorvärde ; Är dörren tom? ; nej, kontrollera igen 8 9 10 6 2200 2 0 3 8 Assemblerversion av programmet Label Assemblerinstruktion Förklaring start: move #0,D jsr 2000 jsr 2200 cmp #1,D bne wait1 jsr 2100 add #1,D jsr 2000 jsr 2200 cmp #0,D bne wait0 jmp wait1 ; Nollställ D ; sätt display till 00 ; Hämta sensorvärde ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; Hämta sensorvärde ; Är dörren tom? ; nej, kontrollera igen ; börja om wait1: wait0: Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 sensorvärde = 0 46
47 Ytterligare funktion: fördröjning Varje besökare kan ge flera pulser Två ben, väska, kläder. Lösning: vänta en stund efter display räknat upp En loop i programmet som bara tar tid att utföra Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 Vänta 0.5s sensorvärde = 0 Ytterligare funktion: fördröjning, forts. Label Assemblerinstruktion Förklaring start: move #0,D jsr 2000 jsr 2200 cmp #1,D bne wait1 jsr 2100 add #1,D jsr 2000 move #0,D add #1,D cmp #10000,D bne delay jsr 2200 cmp #0,D bne wait0 jmp wait1 ; Nollställ D ; sätt display till 00 ; Hämta sensorvärde ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; starta timer på 0 ; öka timer med 1 ; lämpligt antal klockcykler? ; inte tillräckligt många varv ; Hämta sensorvärde ; Är dörren tom? ; nej, kontrollera igen ; börja om wait1: delay: wait0: Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 Vänta 0.5s sensorvärde = 0 48
49 Billigare system: Förenkla display Enklare display => billigare system Ta bort möjlighet att läsa av värdet Kan bara skriva värde => behöver lagra värdet i datorn också D-registrets värde förstörs när sensor läses, kan inte användas Två alternativ: Fler register eller lagring i minnet Fler register => fler operationstyper En uppsättning operationer för varje register Lagra i minnet => Två nya instruktion för att läsa och skriva i minnet Välj adress som inte används till annat (t ex i exemplet: 100) Instruktioner för läsa och skriva i minnet Lägg till instruktioner för att spara och hämta ett värde i minnet Kod Assemblerinstr. Förklaring 7 move adress,d Läs värdet på angiven adress i minnet och placera det i D 8 move D,adress Skriv värdet i D på angiven adress i minnet Minne adress D move adress,d : Minne adress D move D,adress : 50
51 Skillnad mellan instruktionstyp 0 och 7 Viktig skillnad mellan instruktion 0 och 7 0 move #värde,d t ex move #1,D Placera värdet 1 i D 7 move adress,d t ex move 1,D Läs adress 1 och placera dess värde i D. Motsvarande maskinkod (binärt) move #1,D => 000000000000000000000000000000000001 move 1,D => 011100000000000000000000000000000001 Dvs samma argument i maskinkoden, men olika innebörd pga olika operationstyp Skillnad indikeras med tecknet # framför argumentet Exempel med displayvärdet i minnet start: wait1: delay: wait0: move #0,D move D,100 jsr 2000 jsr 2200 cmp #1,D bne wait1 move 100,D add #1,D jsr 2000 move D,100 move #0,D add #1,D cmp #10000,D bne delay jsr 2200 cmp #0,D bne wait0 jmp wait1 ; Nollställ D ; spara displayvärde adress 100 ; sätt display till 00 ; Hämta sensorvärde ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; spara nya värdet i minnet ; starta timer på 0 ; öka timer med 1 ; lämpligt antal klockcykler? ; inte tillräckligt många varv ; Hämta sensorvärde ; Är dörren tom? ; nej, kontrollera igen ; börja om Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 Vänta 0.5s sensorvärde = 0 52
www.liu.se