1 June G1502, Föreläsning 9, vt2004 för IT1 2G1502 Datorteknik allmän kurs Föreläsning 9 1. Processorkonstruktion 2. DMA, Direct Memory Access 3. Något om JAVA 4. Repetition
1 June G1502, Föreläsning 9, vt2004 för IT2 Kursboken kap 7, Processorkonstruktion Jämför innehåll i föreläsningar och kursboken z4 stegs PIPE-LINE z5 stegs PIPE-LINE zFenomen vid konstruktion med PIPE-LINE Avsnitt 9.3, sid
1 June G1502, Föreläsning 9, vt2004 för IT3 CPU med 4 steg Execute Fetch Operand Write Back Fetch Instruction Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 PC
1 June G1502, Föreläsning 9, vt2004 för IT4 4 stegs CPU Konsekvent synkronism Förbered skrivning till Register File FIFOEXEWB ALU arbetar / D-Cache arbetar Avkoda samt Leta fram operander Leta fram instruktion ur I-cache Skriv resultat till Register File Skrivning till tmp-reg Skriv oprander till ALU-register Skrivning till Instruction Register Skrivning till Program Counter clock
1 June G1502, Föreläsning 9, vt2004 för IT5 Execute Fetch Operand Write Back Fetch Instruction Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 PC NYTT IR0 IR1 IR2 PIPE - LINE införs ! Flera register IR
1 June G1502, Föreläsning 9, vt2004 för IT6 4 stegs CPU utan och med PIPE-LINE FIFOEXEWBFIFOEXEWBFIFOEXEWBFIFOEXEWBFIFOEXEWBFIFOEXEWB Utan PIPE-LINE Med PIPE-LINE
1 June G1502, Föreläsning 9, vt2004 för IT7 Processor med 4 stegs PIPE-LINE Hur lång tid tar varje instruktion, 4 cykler Antal Cykles Per Instruction, CPI, 1 cykel Antal instruktioner per cykel, 1 instruktion FIFOEXEWBFIFOEXEWBFIFOEXEWB
1 June G1502, Föreläsning 9, vt2004 för IT8 Fenomen pga PIPE-LINE 1.Branch Delay Slot Instruktionen i minnespositionen närmast efter en hoppinstruktion kommer hämtas och utföras innan hoppet verkställs Programexempel 18: BEQ DIT;offset lagras i binärkod 20: ADD …;hämtas och utförs 22: … … DIT: SUB...
1 June G1502, Föreläsning 9, vt2004 för IT9 Fenomen pga PIPE-LINE 2. Data Dependency RAW - Read After Write Instruktioner som läser från ett register strax efter en instruktion som skriver till samma register kan få fel värde Programexempel 44:ADD R1 <- R2 + R3 46:ADD R4 <- R5 + R6 48:ADD R7 <- R1 + R4
1 June G1502, Föreläsning 9, vt2004 för IT10 Data Dependencies med 4 stegs PIPE-LINE 44: ADD... 46: ADD... FIFOEXEWBFIFOEXEWBFIFOEXEWB 44:ADD R1 <- R2 + R3 46:ADD R4 <- R5 + R6 48:ADD R7 <- R1 + R4 48: ADD... R4 skrivs till RegFile Gamla värden R1 och R4 läses från RegFile R1 skrivs till RegFile
1 June G1502, Föreläsning 9, vt2004 för IT11 Data Dependencies med 4 stegs PIPE-LINE zSkrivning till register sker i WB-steget zLäsning från register sker i FO-steget zSkrivning måste ske innan läsning zWB-steg måste ligga före FO-steg zGenom att placera 2 NOP:ar eller 2 ”oberoende” instruktioner mellan WB och FO kan man lösa RAW-konflikten zRAW - Read - Write
1 June G1502, Föreläsning 9, vt2004 för IT12 44: ADD... 46: ADD... FIFOEXEWBFIFOEXEWBFIFOEXEWB 44:ADD R1 <- R2 + R3 46:ADD R4 <- R5 + R6 NOP NOP 48:ADD R7 <- R1 + R4 48: ADD... R4 skrivs till RegFile Nya värden i R1 och R4 läses från RegFile R1 skrivs till RegFile FIFOEXEWBFIFOEXEWB NOP
1 June G1502, Föreläsning 9, vt2004 för IT13 Data Dependencies inför nya data-vägar Execute Fetch Operand Write Back Fetch Instruction Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 IR0 IR1 IR2 44: R1 <- R2+R3 46: R4 <- R5+R6 48: R7 <- R1+R4 ADD PC+n PC+Imm
1 June G1502, Föreläsning 9, vt2004 för IT14 Data Dependencies med 4 stegs PIPE-LINE 44: ADD... 46: ADD... FIFOEXEWBFIFOEXEWBFIFOEXEWB 44:ADD R1 <- R2 + R3 46:ADD R4 <- R5 + R6 48:ADD R7 <- R1 + R4 48: ADD... R4 skrivs till RegFile Ny värden R1 och R4 läses via nya datavägar R1 skrivs till RegFile
1 June G1502, Föreläsning 9, vt2004 för IT15 LOAD och STORE zVi vill kunna utföra instruktionerna LOADR dst, [ R addr ] STORE [ R addr ], R src zIndirekt adressering via register
1 June G1502, Föreläsning 9, vt2004 för IT16 ALU/EXEWB Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 ADD IR0 IR1 IR2 RWM CPU med 4 stegs PIPE-LINE Instruction Decode Fetch Operand Instruction Fetch PC+n PC+Imm
1 June G1502, Föreläsning 9, vt2004 för IT17 LOAD och STORE med 4 stegs PIPE-LINE LOAD to Rd USE Rd FIFO MEM WBFIFOEXEWB Data från MEM finns tillgängligt Data från MEM finns ej tillgängligt för FO
1 June G1502, Föreläsning 9, vt2004 för IT18 Data Dependencies inför nya data-vägar Register File 32 x 32 Program Memory n x 16 ALU Register File 32 x 32 PC IR0 IR1 IR2 44: R1 <- R2+R3 46: R4 <- R5+R6 48: R7 <- R1+R RWM ALU/EXEWBInstruction Decode Fetch Operand Instruction Fetch Rätta till
1 June G1502, Föreläsning 9, vt2004 för IT19 LOAD och STORE med 4 stegs PIPE-LINE LOAD to Rd USE Rd FIFO MEM WBFIFOEXEWB Data från MEM finns tillgängligt Data från MEM finns tillgängligt för FO tack vare Data Forward
1 June G1502, Föreläsning 9, vt2004 för IT20 LOAD och STORE zVi vill kunna utföra instruktionerna LOADR dst, Offset[ R addr ] STOREOffset[ R addr ], R src zIndexerad adressering
1 June G1502, Föreläsning 9, vt2004 för IT21 CPU med 5 stegs PIPE-LINE ALU/EXEInstruction Decode Fetch Operand MEMInstruction Fetch Register File 32 x 32 Program Memory n x 16 ALU PC ADD IR0 IR1 IR2 RWM IR3 Write Back Register File 32 x 32 PC+n PC+Imm
1 June G1502, Föreläsning 9, vt2004 för IT22 Processor med 5 stegs PIPE-LINE LOAD FIFOALUWB MEM FIFOALUWB MEM ADD Hur lång tid tar varje instruktion, 5 cycles Cykles Per Instruction, CPI, 1 cycle Antal instruktioner per cykel, 1 instruktion FIIDEXEWB MEM Jämför med Figur 7.12 i kursboken, sid 255
1 June G1502, Föreläsning 9, vt2004 för IT23 LOAD och STORE med 5 stegs PIPE-LINE LOAD to Rd FIFOALUWB MEM FIFOALUWB MEM USE Rd Data från MEM finns tillgängligt Data från MEM finns ej tillgängligt för FO
1 June G1502, Föreläsning 9, vt2004 för IT24 Fenomen pga PIPE-LINE 2. Data Dependency Instruktioner som läser från ett register strax efter en instruktion som skriver till samma register kan få fel värde Programexempel 44:ADD R1 <- R2 + R3 46:ADD R9 <- R5 + R6 48:ADD R7 <- R0 + R4 50:ADD R8 <- R1 + R7
1 June G1502, Föreläsning 9, vt2004 för IT25 med 5 stegs PIPE-LINE 44: ADD... 46: ADD... 44:ADD R1 <- R2 + R3 46:ADD R9 <- R5 + R6 48:ADD R7 <- R0 + R4 50:ADD R8 <- R1 + R7 48: ADD... R9 skrivs till RegFile R1 och R7 läses från RegFile R1 skrivs till RegFile FIFOEXEWB MEM FIFOEXEWB MEM FIFOEXEWB MEM FIFOEXEWB MEM R7 skrivs till RegFile 50: ADD...
1 June G1502, Föreläsning 9, vt2004 för IT26 Data Dependencies med 5 stegs PIPE-LINE zSkrivning till register sker i WB-steget zLäsning från register sker i FO-steget zSkrivning måste ske innan läsning zWB-steg måste ligga före FO-steg zGenom att placera 3 NOP:ar eller 3 ”oberoende” instruktioner mellan WB och FO kan man lösa RAW-konflikten
1 June G1502, Föreläsning 9, vt2004 för IT27 44: 46: 44:ADD R1 <- R2 + R3 46:ADD R9 <- R5 + R6 48:ADD R7 <- R0 + R4 NOP 50:ADD R8 <- R1 + R7 48: R4 skrivs till RegFile R1 och R7 läses från RegFile R1 skrivs till RegFile FIFOEXEWB MEM FIFOEXEWB MEM FIFOEXEWB MEM FIFOEXEWB MEM R7 skrivs till RegFile 50: ADD... FIFOEXEWB MEM FIFOEXEWB MEM FIFOEXEWB MEM NOP
1 June G1502, Föreläsning 9, vt2004 för IT28 inför nya data-vägar ALU/EXEInstruction Decode Fetch Operand MEMInstruction Fetch Register File 32 x 32 Program Memory n x 16 ALU PC ADD IR0 IR1 IR2 IR3 Write Back +2 Register File 32 x 32
1 June G1502, Föreläsning 9, vt2004 för IT29 CPU med 5 stegs PIPE-LINE ALU/EXEInstruction Decode Fetch Operand MEMInstruction Fetch Register File 32 x 32 Program Memory n x 16 ALU PC ADD IR0 IR1 IR2 RWM IR3 Write Back Register File 32 x 32
1 June G1502, Föreläsning 9, vt2004 för IT30 inför nya data-vägar Register File 32 x 32 Program Memory n x 16 ALU PC ADD IR0 IR1 IR2 IR3 +2 Register File 32 x 32 RWM
1 June G1502, Föreläsning 9, vt2004 för IT31 Fenomen pga PIPE-LINE 3. Load Delay LOAD reg FIFOALUWB MEM USE reg Tillgängligt från minne FIFOALUWB MEM Skriv till ALU-reg (Gammalt registervärde)
1 June G1502, Föreläsning 9, vt2004 för IT32 Load Delay i 5-stegs pipe även vid Data Forward LOAD reg FIFOALUWB MEM ADD reg Tillgängligt från minne FIFOALUWB MEM Skriv till ALU-reg Data Forward fungerar FIFOALUWB MEM NOP ?
1 June G1502, Föreläsning 9, vt2004 för IT33 Pipeline med register och kombinatorik ALU PC ADD IR0 IR1 IR2 +2 REGISTER KOMBINATORIK REGISTER KOMBINATORIK REGISTER
1 June G1502, Föreläsning 9, vt2004 för IT34 2. Block Data Transfer - BDT Kopiera ett antal ord, ett Block zfrån minne till minne zfrån I/O till minne zfrån minne till I/O zfrån I/O till I/O Typexempel mellan MM och SS dvs Main Memory och Secondary Storage dvs mellan ”hårddisk och RAM-minne”
1 June G1502, Föreläsning 9, vt2004 för IT35 BDT: minne till minne MEM SrcAddr NrOfTransfers DstAddr Det behövs 2 adresspekare Källadress och Destinationsasdress Det behövs en räknare, antal kopieringar Var lagras pekare och räknare ? I register eller i minne ! beroende på metod
1 June G1502, Föreläsning 9, vt2004 för IT36 BDT: minne till minne CPU MEM BUS I/O
1 June G1502, Föreläsning 9, vt2004 för IT37 BDT: minne till I/O CPU MEM BUS I/O
1 June G1502, Föreläsning 9, vt2004 för IT38 BDT: I/O till minne CPU MEM BUS I/O
1 June G1502, Föreläsning 9, vt2004 för IT39 BDT: I/O till I/O CPU BUS I/O
1 June G1502, Föreläsning 9, vt2004 för IT40 BDT - Block Data Transfers Block Data Transfer utförs i tre olika del-moment zInitiera: pekare och räknare, mm zKopiera: en enhet i taget (byte/word) zAvsluta: bokföring (i OS) att block är kopierat
1 June G1502, Föreläsning 9, vt2004 för IT41 BDT - Block Data Transfers Block Data Transfer kan utföras med tre olika metoder zProgram-styrd Block Data Transfer zAvbrotts-styrd Block Data Transfer zDMA-styrd Block Data Transfer (DMA - Direct Memory Access)
1 June G1502, Föreläsning 9, vt2004 för IT42 Program-styrd BDT source to destination Programstruktur zinitiera pekare och räknare zloop:kopiera en enhet (byte/word) z bra loop om ej klart z avsluta
1 June G1502, Föreläsning 9, vt2004 för IT43 Programstyrd BDT source to destination ;Initiera inför programmerad BDT ;pekare och räknare i ”vanliga” CPU-register movia%L0, SrcAddr movia%L1, DstAddr movia%L2, NrOfTransfers
1 June G1502, Föreläsning 9, vt2004 för IT44 Program-styrd BDT Memory to Memory ;Kopiera i programslinga.equwordsize, 4 loop:ld%reg, [%L0];läs data st[%L1], %reg;skriv data addi%L0, wordsize;öka läsadress addi%L1, wordsize;öka skrivadress subi%L2, 1;minska räknare bneloop;hoppa om ej klart braavsluta;hopp till OS
1 June G1502, Föreläsning 9, vt2004 för IT45 Program-styrd BDT I/O to Memory Antag att I/O-porten är en ”vanlig” inport med en signal av typen IBF - Input Buffer Full IBF ettställs varje gång det finns nya data att läsa från inporten
1 June G1502, Föreläsning 9, vt2004 för IT46 IN-port RD IN-PORT IBFWRIN-DATA RD IBF Adress Data Control CPU-BUSS IN 0 IN n DnDn D0D0 IN 1 D1D1 Q Q’ set clear IBF WR RD vippa grindar &&&......
1 June G1502, Föreläsning 9, vt2004 för IT47 BDT: I/O till minne CPU MEMI/O SrcAddr DstAddr NrOfTransfers
1 June G1502, Föreläsning 9, vt2004 för IT48 Block Data Transfer I/O to Memory ;Kopiera i programslinga (nästan likadan).equwordsize, 4 loop:bsrgetdata;blocking on IBF st[%L1], %reg;skriv data ;addi%L0, wordsize;öka ej läsadress addi%L1, wordsize;öka skrivadress subi%L2, 1;minska räknare bneloop;hoppa om ej klart braavsluta;hopp till OS
1 June G1502, Föreläsning 9, vt2004 för IT49 Program-styrd BDT Memory to I/O Antag att I/O-porten är en ”vanlig” utport med en signal av typen OBE - Output Buffer Empty OBE ettställs varje gång det går att skriva till utporten
1 June G1502, Föreläsning 9, vt2004 för IT50 Block Data Transfer Memory to I/O ;Kopiera i programslinga (nästan likadan).equwordsize, 4 loop:ld%o0, [%L0];läs data bsrputdata;blocking on OBE addi%L0, wordsize;öka läsadress ;addi%L1, wordsize;öka ej skrivadress subi%L2, 1;minska räknare bneloop;hoppa om ej klart braavsluta;hopp till OS
1 June G1502, Föreläsning 9, vt2004 för IT51 Block Data Transfer I/O to I/O ;Kopiera i programslinga (nästan likadan).equwordsize, 4 loop:bsrgetdata;blocking on IBF bsrputdata;blocking on OBE ;addi%L0, wordsize;öka ej läsadress ;addi%L1, wordsize;öka ej skrivadress subi%L2, 1;minska räknare bneloop;hoppa om ej klart braavsluta;hopp till OS
1 June G1502, Föreläsning 9, vt2004 för IT52 Avbrotts-styrd BDT I/O to Memory Typ-exempel: Kopiera från hårddisk till ram-minne Antag att hårddisken levererar data via en ”vanlig” inport med en signal IBF IBF ettställs varje gång det finns nya data
1 June G1502, Föreläsning 9, vt2004 för IT53 Avbrotts-styrd Block Data Transfer source to destination ;Initiera inför avbrotts-styrd BDT ;pekare och räknare kan inte lagras i ”vanliga” CPU-register utan måste lagras i minnet. movia%L0, SrcAddr;måste ändras movia%L1, DstAddr;måste ändras movia%L2, NrOfTransfers;måste ändras
1 June G1502, Föreläsning 9, vt2004 för IT54 BDT: I/O till minne med avbrott (IBF ger IRQ) CPU MEM I/O SrcAddr DstAddr NrOfTransfers IRQ
1 June G1502, Föreläsning 9, vt2004 för IT55 Avbrotts-styrd BDT I/O to Memory Initiera inför avbrotts-styrd BDT ; storei Addr <- Imm är ett macro som skriver värdet Imm till minnet på adress Addr zstoreiSrcAddrPoint <- SrcAddrValue zstoreiDstAddrPoint <- DstAddrValue zstoreiNrOfTransf <- NrOfTransfValue Det behövs alltså 3 reserverade platser i minnet Det går ej att använda register !? (varför?)
1 June G1502, Föreläsning 9, vt2004 för IT56 Avbrotts-styrd BDT I/O to Memory zProgramstruktur initiera: programsnutt i OS kopiera: Exceptionhandler, int, anropas vid avbrott dvs då IBF = 1 int:kopiera en enhet;se nästa sida TRET %07;retur från int avsluta:braOS-avsluta;hopp till OS
1 June G1502, Föreläsning 9, vt2004 för IT57 Avbrotts-styrd BDT I/O to Memory kopiera en enhet;se denna sida zint: loadia %L0, SrcAddrPoint;hämta läsadress z loadia %L1, DstAddrPoint;hämta skrivadress z ld%L2, [%L0];läs data från INPORT z st[%L1], %L2;skriv data till minne zloadia%L3, NrOfTranf;hämta räknare z subi%L3, 1;uppdatera räknare z ifrz%L3;kolla om klart z braavsluta;hopp till OS z; forts.
1 June G1502, Föreläsning 9, vt2004 för IT58 Avbrotts-styrd BDT I/O to Memory Avbrottsrutin forts. z;addi%L0, wordsize;öka läsadress, nej ! z addi%L1, wordsize;öka skrivadress, ja ! z ;storiaSrcAddrPoint, %L0;skriv EJ tillbak läsadress z storiaDstAddrPoint, %L1;skriv tillbaks skrivadress z storiaNrOfTrans, %L3;skriv tillbaks räknare z return;from interrupt
1 June G1502, Föreläsning 9, vt2004 för IT59 BDT: I/O till minne med avbrott (IBF ger IRQ) CPU MEM I/O SrcAddr DstAddr NrOfTransfers IRQ
1 June G1502, Föreläsning 9, vt2004 för IT60 BDT: I/O till minne med DMA (IBF ger DMARQ) CPU MEM DMA Bus Arbiter BR BG MEM I/O SrcAddr DstAddr NrOfTransfers DMARQ
1 June G1502, Föreläsning 9, vt2004 för IT61 Bus Arbiter krävs Bus Request / Bus Grant CPU MEM BUS I/O DMA Bus Arbiter BR BG
1 June G1502, Föreläsning 9, vt2004 för IT62 Bus-ledningar Om det finns fler än en Master krävs Bus Arbiter (bus-fördelare) zSignal (er) av typ Bus Request zSignal (er) av typ Bus Grant
1 June G1502, Föreläsning 9, vt2004 för IT63 DMA - Direct Memory Address zDMARQ - DMA ReQuest (ny signal) zSource Address Register zDestination Address Register zByte/Word Count Register zControl Register zBlock Size: Byte Count or End Of Block
1 June G1502, Föreläsning 9, vt2004 för IT64 BDT: I/O till minne med DMA CPU MEM DMA Bus Arbiter BR BG MEM I/O SrcAddr DstAddr NrOfTransfers
1 June G1502, Föreläsning 9, vt2004 för IT65 DMA-styrd BDT Memory to Memory Programstruktur zinitiera z... DMA:kopiera en enhet avsluta: Meddela att det är klart ? Hur? Vart?
1 June G1502, Föreläsning 9, vt2004 för IT66 Block Data Transfer I/O to Memory ;Initiera inför DMA-styrd BDT ;DmaSrc, -Dst, -Nr och -Ctl är memory-mapped register i DMA zstoreiDmaSrc, SrcAddr zstoreiDmaDst, DstAddr zstoreiDmaNr, NrOfTransfers zstoreiDmaCtl, DirandSize
1 June G1502, Föreläsning 9, vt2004 för IT67 DMA - Direct Memory Address Operativsystemets åtgärder för att genomföra BDT med DMA Initiera: register i DMA och starta DMA Kopiera: sköts av DMA ”i bakgrunden” Avsluta: Avbrott från DMA leder till bra avsluta;hopp till OS Bokför att BDT är fullföljd, ”stäng DMA”
1 June G1502, Föreläsning 9, vt2004 för IT68 BDT - Block Data Transfers Block Data Transfer kan utföras med tre olika metoder zProgram-styrd Block Data Transfer upptar 100% av CPU-tid zAvbrotts-styrd Block Data Transfer upptar < 100% av CPU-tid zDMA-styrd Block Data Transfer upptar << 100% av CPU-tid
1 June G1502, Föreläsning 9, vt2004 för IT69 BDT: I/O till minne med program (pollning av IBF) CPU MEM DMA Bus Arbiter BR BG MEM I/O SrcAddr DstAddr NrOfTransfers
1 June G1502, Föreläsning 9, vt2004 för IT70 BDT: I/O till minne med avbrott (IBF ger IRQ) CPU MEM DMA Bus Arbiter BR BG MEM I/O SrcAddr DstAddr NrOfTransfers IRQ
1 June G1502, Föreläsning 9, vt2004 för IT71 BDT: I/O till minne med DMA (IBF ger DMARQ) CPU MEM DMA Bus Arbiter BR BG MEM I/O SrcAddr DstAddr NrOfTransfers DMARQ
1 June G1502, Föreläsning 9, vt2004 för IT72 2G1502 Datorteknik allmän kurs Tillägg till Föreläsning 9 något om JAVA
1 June G1502, Föreläsning 9, vt2004 för IT73 Något om Java zEditering av textfil, fil.java zKompilering till Byte-code, fil.class zInterpretering av Byte-code med zJVM - Java Virtual Machine
1 June G1502, Föreläsning 9, vt2004 för IT74 Programutveckling Assembler-kod Ass-program Text-fil Object-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil”
1 June G1502, Föreläsning 9, vt2004 för IT75 Assemblering; översätter Nios-kod till Assembler-kod Nios-program Text-fil Ladd-modul assemblering / översättning och länkning fil.asm, kan redigeras med en editor fil.objdump kan ej redigeras med en editor kan laddas ner till datorn minne
1 June G1502, Föreläsning 9, vt2004 för IT76 Programexekvering Nios-kod (Intel, …) FETCH (update PC) (decode) EXECUTE Hårdvara
1 June G1502, Föreläsning 9, vt2004 för IT77 C++ program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil” Pascal-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” BLANDAD KOD
1 June G1502, Föreläsning 9, vt2004 för IT78 Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil” Pascal-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” BLANDAD KOD JAVA-program Text-fil
1 June G1502, Föreläsning 9, vt2004 för IT79 Alt1: Kompilering; översätter java-kod till Assembler-kod java-program Text-fil Nios-code kompilering / översättning fil.java, kan redigeras med en editor fil.objdump, kan ej redigeras med en editor kan laddas ner till datorn minne
1 June G1502, Föreläsning 9, vt2004 för IT80 Alt2: Kompilering; översätter java-kod till byte-kod java-program Text-fil Byte-code kompilering / översättning fil.java, kan redigeras med en editor fil.class, kan ej redigeras med en editor kan laddas ner till datorn minne
1 June G1502, Föreläsning 9, vt2004 för IT81 Programexekvering byte-kod (Intel, …) FETCH (update PC) (decode) EXECUTE Mjukvara JVM - Java Virtual Machine
1 June G1502, Föreläsning 9, vt2004 för IT82 Java Virtual Machine interpreterar byte-code do { fetch an opcode; if (operands) fetch operands; execute the action for the opcode } while (there is more to do);
1 June G1502, Föreläsning 9, vt2004 för IT83 Decode - Execute ADD ?LD ?AND ?BR ? Exec ADD Exec LD Exec AND Exec BR JA NEJ Fetch ILLEGAL JA Fetch
1 June G1502, Föreläsning 9, vt2004 för IT84 Kompilering; översätter java-kod till objekt-modul Interpretering Plattforms-oberoende Byte-code flyttbar JVM Java Virtual Machine Plattforms-beroende
1 June G1502, Föreläsning 9, vt2004 för IT85 Interpretering zFetch och Execute görs med programvara zJava har översatts till Byte-Code zByte-Code är en ”följd av instruktioner” zVarje processor (Nios, MIPS, x86) har en egen JVM (som exekveras i maskinkod) zJVM kan skrivas i C (eller pascal eller java) och kompileras/assembleras till Nios/MIPS
1 June G1502, Föreläsning 9, vt2004 för IT86 Programexempel, ass-code zC = A + B ; z”översätts” till zLOADR1 <-- A zLOADR2 <-- B zADDR3 <-- R1 + R2 zSTOREC <-- R3
1 June G1502, Föreläsning 9, vt2004 för IT87 Programexempel, byte-code zC = A + B ; z”översätts” till zPUSHA;kopiera från minne till stack zPUSHB;kopiera från minne till stack zADD;”operera på stacken” zPOPC;kopiera från stack till minne
1 June G1502, Föreläsning 9, vt2004 för IT88 Operera på stack Addition av heltal ADDera de två översta int på stacken zPOP till ALU-A zPOP till ALU-B zaddera alu-a och alu-b till tmp-reg zPUSH från tmp-reg
1 June G1502, Föreläsning 9, vt2004 för IT89 Java-program steg vid program-arbete zSkriv källkod i JAVA, plattforms-oberoende och flyttbart zkompilera till byte-code, plattforms- oberoende och flyttbart zInterpretera byte-code med JVM zJVM = Java Virtual Machine, plattforms-beroende
1 June G1502, Föreläsning 9, vt2004 för IT90 funktionen tick i java-kod Class Tick { public int tick (int time) {time = time + 1; if ((time & 0x000F) == 0x000A) time = time - 0x000A + 0x0010; if ((time & 0x00F0) == 0x0060) time = time - 0x x0100; if ((time & 0x0F00) == 0x0A00) time = time - 0x0A00 + 0x1000; if ((time & 0xF000) == 0x6000) time = 0x0000; return time; } }
1 June G1502, Föreläsning 9, vt2004 för IT91 funktionen tick i byte-kod ;Här kommer den metod som kan anropas utifrån. ;vid anrop finns in-parameter i indexerat fält av local variables och med index 1 Method int tick(int) ;time = time + 1; 00x15iload_1;push int from 1(ireg) - time 10x04iconst_1;push #1 20x60iadd;int add: pop-pop-add-push 30x3cistore_1;pop to 1(ireg) - time forts.
1 June G1502, Föreläsning 9, vt2004 för IT92 funktionen tick i byte-kod forts.;if ((time & 0x000F) == 0x000A) time = time - 0x000A + 0x0010; 4iload_1;push int from 1(ireg) 5bipush 15;push #15 (2-byte-instr) 7iand;int and: pop pop and push 8bipush 10;push #10 10if_cmpne 21;conditional branch 13iload_1;push int from 1(ireg) 14bipush 10;push #10 16isub;int sub: pop pop sub push 17bipush 16;push #16 19iadd;int add: pop pop add push 20istore_1;pop int to 1(reg) 21...
1 June G1502, Föreläsning 9, vt2004 för IT93 funktionen tick i byte-kod forts.;if ((time & 0x000F) == 0x000A) time = time - 0x000A + 0x0010; 40x15iload_1;push int from 1(ireg) 50x10bipush 15;push #15 (2-byte-instr) 60x0f;value 15=0x0f 70x7eiand;int and: pop pop and push 80x10bipush 10;push #10 90x0a;value 10=0x0a 100xa0if_cmpne 21;conditional branch 110xkl;10 + 0xklmn = 21 maybe 120xmn;address other byte ??? 130x15iload_1;push int from 1(ireg) 140x10bipush 10;push #10 160x64isub;int sub: pop pop sub push 170x10bipush 16;push #16 180x10;value 16=0x10 190x60iadd;int add: pop pop add push 200x3cistore_1;pop int to 1(reg)
1 June G1502, Föreläsning 9, vt2004 för IT94 funktionen tick i byte-kod forts.;if ((time & 0xF000) == 0x6000) time = 0x0000; 61iload_1;push int from 1(ireg) 62ldc #2 ;(2-byte-instr) 64iand;int and: pop pop and push 65sipush 24576;push #24576 (3-byte-instr) 68if_cmpne 73;conditional branch 71iconst_1;push #1 72istore_1;pop int to 1(reg) 73iload_1;returparameter till stack 74ireturn;retur med int på stack
1 June G1502, Föreläsning 9, vt2004 för IT95 Mer om java JVM och byte-code
1 June G1502, Föreläsning 9, vt2004 för IT96 Mer om java JVM och byte-code
1 June G1502, Föreläsning 9, vt2004 för IT97 2G1502 Datorteknik allmän kurs Föreläsning 9 Repetition Sammanfattning Lite till
1 June G1502, Föreläsning 9, vt2004 för IT98 2G1502 Datorteknik allmän kurs Tentamina z26 maj (ordinarie för IT-1 i KISTA) z28 maj (ordinarie för E och I vid CAMPUS) anmälan via till
1 June G1502, Föreläsning 9, vt2004 för IT99 2G1502 Datorteknik allmän kurs zKursen i förhållande till andra kurser zDatorn i olika nivåer från C-kod till NAND- grind zLite mer om PC zLite om java (en påtår?)
1 June G1502, Föreläsning 9, vt2004 för IT100 Dator- teknik ak 2G1502 Datorteknik allmän kurs Digitala kretsar Data- logi Dator- teknik fk Dator- arkitektur Datorkomm. och datornät Operativ- system kompilator- teknik Parallela Datorsystem
1 June G1502, Föreläsning 9, vt2004 för IT101 Viktiga delar i en dator CPU MEM BUS I/O program data
1 June G1502, Föreläsning 9, vt2004 för IT102 Flera Slave kan man ha ! På olika adresser ! CPU MEM BUS I/O Adress dittenAdress datten ?? Adress-avkodare MASTER SLAVE
1 June G1502, Föreläsning 9, vt2004 för IT103 Programexekvering FETCH (update PC) (decode) EXECUTE
1 June G1502, Föreläsning 9, vt2004 för IT104 Programexempel 1 zC = A + B ; z”översätts” till zLOADR1 <-- A zLOADR2 <-- B zADDR3 <-- R1 + R2 zSTOREC <-- R3
1 June G1502, Föreläsning 9, vt2004 för IT105 Instruktionstyper zKopiering, MOVE, PUSH, POP,... zAritmetiska, ADD, SUB, … zLogiska, AND, OR, XOR,... zLoad och Store zHopp, JMP, BRA, villkorliga, BSR, JSR, xRET,... z(övriga brukar alltid finnas …)
1 June G1502, Föreläsning 9, vt2004 för IT106 Operandutpekning med Operand i minnet zEffektiv adress i instruktionen, adressfält zEffektiv adress i ett register zOperand i instruktionen, datafält zIndexerad adressering zSjälvrelativ adressering, PC-relativ zIndirekt adressering via minne z...
1 June G1502, Föreläsning 9, vt2004 för IT107 Datatyper zInteger lagras ofta i 32 bitar zLong (int) blir då 64 bitar zFloat (i java) lagras i 32 bitar zDouble (float) blir då 64 bitar zByte är 8 bitar zChar i C lagras i 8 bitar zChar i java lagras i ? Bitar zBoolean i c, 0/1 = False/True)
1 June G1502, Föreläsning 9, vt2004 för IT108 Nios Instruktionsformat ADD R dst, R srcB ADD ADD R dst, Imm x ADD 6 5 5
1 June G1502, Föreläsning 9, vt2004 för IT109 MIPS Instruktionsformat ADD R dst, R srcA, R srcB ADD ”ledigt” ADD R dst, R srcA, Imm x ADD
1 June G1502, Föreläsning 9, vt2004 för IT110 Mall för macro syntetisk instruktion.macroclr reg movi\reg, 0x0.endm Effekten av detta är att man kan införa nya instruktioner, t.ex. clr %ri, för att nollställa register %ri
1 June G1502, Föreläsning 9, vt2004 för IT111 Funktioner, subrutiner zHur sker anrop zHur sker återhopp Returadress måste lagras zHur sker parameteröverföring från anropare till rutinen, inparametrar från rutinen till anroparen, returvärden zOlika typ av parameter (värde, pekare)
1 June G1502, Föreläsning 9, vt2004 för IT112 Subrutinanrop och retur CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL FKN RETURN FKN:MUL … CALL FKN RETURN rekursivt anrop
1 June G1502, Föreläsning 9, vt2004 för IT113 STACK - operationer PUSH och POP Stack Pointer SP PUSH op: SP <- sp - n mem(sp) <- op POPdst: dst <- mem(sp) SP <- sp + n n = antal bytes + -
1 June G1502, Föreläsning 9, vt2004 för IT114 Table 20. Smallest Nios Register File Reg[.. Reg[24..31] Reg[16..23] Reg[8..15] Reg[ ] Reg[ ] Reg[ ] Reg[0..7] %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7 %o0..%o7 %L0..%L7 %i0..%i7%g0..%g7 %o0..%o7 %L0..%L7 %i0..%i7%g0..%g7 SAVE RESTORE CWP = 0 CWP = 1 CWP = 5 CWP = 6 CWP = 4 CWP = 2
1 June G1502, Föreläsning 9, vt2004 för IT115 Programexempel 2a, subrutin med värde som parameter parameter på stacken res = sum ( int par1, int par2); z”översätts” till PUSHpar2 PUSHpar1 CALLsum ADDIsp <- sp + 2n STOREres <- %reg
1 June G1502, Föreläsning 9, vt2004 för IT116 res = sum ( int par1, int par2); z”översätts” till LOADreg1 <- par2 LOADreg2 <- par1 CALLsum STOREres <- %reg Programexempel 3a, subrutin med värde som parameter parameter i register
1 June G1502, Föreläsning 9, vt2004 för IT117 Programexempel 2b, subrutin med adress som parameter parameter på stacken res = sum ( int* par1, int* par2); z”översätts” till PUSH&par2;PEA par2 PUSH&par1;PEA par1 CALLsum ADDIsp <- sp + 2n STOREres <- %reg
1 June G1502, Föreläsning 9, vt2004 för IT118 Programexempel 3b, subrutin med adress som parameter parameter i register res = sum ( int* par1, int* par2); z”översätts” till LOADreg1 <- &par2 LOADreg2 <- &par1 CALLsum STOREres <- %reg
1 June G1502, Föreläsning 9, vt2004 för IT119 for-loop transformeras till while-loop Loop:for (start; cond; update) body; next: … ;start LOOP:…;body …;update Bcond LOOP NEXT: … start; loop:while (cond) {body;update} next: …;start LOOP:BcondBODY BRANEXT BODY: …;body …;update BRALOOP NEXT: …
1 June G1502, Föreläsning 9, vt2004 för IT120 Cond ? body False True Loop: startupdate Cond ? body start False True Test Nextupdate Next for-loop transformeras till while-loop Loop: Test
1 June G1502, Föreläsning 9, vt2004 för IT121 while-loop transformeras till if nocond start; loop:while (cond) {body;update} next: …;start LOOP:BcondBODY BRANEXT BODY: …;body …;update BRALOOP NEXT: … start; loop:if (nocond) goto next body;update;goto loop next: …;start LOOP:BnocondNEXT BODY: …;body …;update BRALOOP NEXT: …
1 June G1502, Föreläsning 9, vt2004 för IT122 Cond ? bodystart False True Test Nextupdate while-loop transformeras till if nocond NoCond ? bodystart True False Test Nextupdate Loop:
1 June G1502, Föreläsning 9, vt2004 för IT123 C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Pascal-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil” FORTRAN Text-fil Ass-program Text-fil Object-modul ”Text-fil”
1 June G1502, Föreläsning 9, vt2004 för IT124 res=sum(a,b) Ass-program Text-fil Object-modul ”Text-fil” sum: save... Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram subrutin Länkning Assemblering Kompilering
1 June G1502, Föreläsning 9, vt2004 för IT125 IN-port med IBF-signal RD IN-PORT IBFWRIN-DATA RD IBF Adress Data Control CPU-BUSS IN 0 IN n DnDn D0D0 IN 1 D1D1 Q Q’ set clear IBF WR RD vippa grindar &&&......
1 June G1502, Föreläsning 9, vt2004 för IT126 UT-port med OBE-signal UT-PORT OBERDUT-DATA WR OBE Adress Data Control CPU-BUSS Q Q’ D cl Q Q’ D cl Q Q’ D cl DnDn D0D0 D1D1 UT 0 UT n UT 1 WR Q Q’ set clear OBE RD WR vippa vippor
1 June G1502, Föreläsning 9, vt2004 för IT127 Handskakning med IBF/OBE Flödes-schema, invänta ready (blockerande I/O) PÅHOPP AVHOPP IBF=1? Nollställ IBF LÄS INDATA LÄS IBF JA NEJ INHOPP UTHOPP OBE=1? Nollställ OBE SKRIV UTDATA LÄS OBE JA NEJ
1 June G1502, Föreläsning 9, vt2004 för IT128 Handskakning med IBF/OBE Flödes-schema, direkt retur (icke blockerande I/O) PÅHOPP AVHOPP IBF=1? Nollställ IBF PAR:= INDATA LÄS IBF JA NEJ PAR:= -1PÅHOPP AVHOPP OBE=1? Nollställ OBE och PAR SKRIV UTDATA LÄS OBE JA NEJ PAR:= -1
1 June G1502, Föreläsning 9, vt2004 för IT129 Flödesschema för korsvis kommunikation START getcharx ?senchar JA NEJ reccharx ?putchar NEJ JA
1 June G1502, Föreläsning 9, vt2004 för IT130 Flödesschema för korsvis kommunikation med paritetskontroll START getcharx ?parmake JA NEJ reccharx ?partest NEJ JA errmakesencharputchar
1 June G1502, Föreläsning 9, vt2004 för IT131 Interrupt (external) Blixt från en klar himmel huvudprogram returhopp returadress ”anrop” Interrupt 17 Exceptionrutin 17 var finns exception-rutinen ? Där länkaren placerat den var lagras adressen till exception-rutinen ? I en tabell OPCODE reg IntHandler 17: var sparas returadressen ? I register %o7
1 June G1502, Föreläsning 9, vt2004 för IT132 Exception Vector Table med adresser till handlers Int handler Int handler Int handler Int handler 0: 0x7FF00 1: 0x7FF04 2: 0x7FF08. 17: IntHandler17 63: 0x7FFFC
1 June G1502, Föreläsning 9, vt2004 för IT133 Flödesschema för korsvis kommunikation avbrottstyrd med paritetskontroll getcharparmakereccharpartest TRET errmakesencharputchar TRET Error Control RxRdy-INT JA
1 June G1502, Föreläsning 9, vt2004 för IT134 OS Idle Thread 1 Thread 2 Thread 3 time-slice Round Robin CPU-scheduling Idle-tråd och tre till Thread 1 får cirka (knappt) 33% av tiden time-out yield
1 June G1502, Föreläsning 9, vt2004 för IT135 Samverkan mellan processer med hjälp av semaforer zSynkronisering zÖmsesidig uteslutning (Mutual Exclusion) zRendez Vous (dubbel synkronisering)
1 June G1502, Föreläsning 9, vt2004 för IT136 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:
1 June G1502, Föreläsning 9, vt2004 för IT137 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2:
1 June G1502, Föreläsning 9, vt2004 för IT138 Rendez Vous T1 och T2 inväntar varann innan S1 och S2 exekverar … P1: … signal wait S1 … P2: … signal wait S2 T1: T2:
1 June G1502, Föreläsning 9, vt2004 för IT139 Hur datorer fungerar Detta har ni lärt er ! Kopplingen mellan zProgram i C-kod (pascal, java, …) zProgram i Assembler (Nios, MIPS, …) zMaskinkod (binärkod, hexkod) zExekvering av program i binärkod zi CPU med PIPE-LINE zCPU byggs av logiska kretsar och minnen
1 June G1502, Föreläsning 9, vt2004 för IT140 Hur datorer fungerar Dessutom har ni lärt er ! zCache-minne orsak till införsel funktion, parametrar prestandavinster med cache zFördelning av processortid görs av OS zSamverkan mellan processer synkronisering, ömsesidig uteslutning rendez vous
1 June G1502, Föreläsning 9, vt2004 för IT141 Hur datorer fungerar slutligen har ni lärt er ! För Block Data Transfer, BDT gäller att zDMA - Direct Memory Access är bättre än zAvbrottstyrd BDT som är bättre än zProgramstyrd BDT
1 June G1502, Föreläsning 9, vt2004 för IT142 Tentamen innehåller zMaskinaritmetik med mera zAssemblerprogrammering,subrutiner zAssemblerprogrammering pollning/avbrott zCache-minnen zProcessorkonstruktion zCPU scheduling och semaforer
1 June G1502, Föreläsning 9, vt2004 för IT143 Lycka till på tentamen Välkommen till andra kurser några exempel z2G1510, Datorteknik fk z2G1511, Datorarkitektur z2G1506, Programming with Processes z2G1508, Compilers and Virtual Machines z2G1504, Operating Systems z2G1114, Parallella Datorsystem z...
1 June G1502, Föreläsning 9, vt2004 för IT144 2G1502 Datorteknik allmän kurs Tentamina z26 maj (ordinarie för IT-1 i KISTA) z28 maj (ordinarie för E och I vid CAMPUS) anmälan via till