Presentation laddar. Vänta.

Presentation laddar. Vänta.

1 June 2015 2G1502, 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.

Liknande presentationer


En presentation över ämnet: "1 June 2015 2G1502, 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."— Presentationens avskrift:

1 1 June 2015 2G1502, 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

2 1 June 2015 2G1502, 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 322-326

3 1 June 2015 2G1502, 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

4 1 June 2015 2G1502, 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

5 1 June 2015 2G1502, 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

6 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT6 4 stegs CPU utan och med PIPE-LINE FIFOEXEWBFIFOEXEWBFIFOEXEWBFIFOEXEWBFIFOEXEWBFIFOEXEWB Utan PIPE-LINE Med PIPE-LINE

7 1 June 2015 2G1502, 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

8 1 June 2015 2G1502, 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...

9 1 June 2015 2G1502, 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

10 1 June 2015 2G1502, 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

11 1 June 2015 2G1502, 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

12 1 June 2015 2G1502, 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

13 1 June 2015 2G1502, 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

14 1 June 2015 2G1502, 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

15 1 June 2015 2G1502, 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

16 1 June 2015 2G1502, 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

17 1 June 2015 2G1502, 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

18 1 June 2015 2G1502, 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+R4 50 +2 RWM ALU/EXEWBInstruction Decode Fetch Operand Instruction Fetch Rätta till

19 1 June 2015 2G1502, 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

20 1 June 2015 2G1502, 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

21 1 June 2015 2G1502, 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

22 1 June 2015 2G1502, 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

23 1 June 2015 2G1502, 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

24 1 June 2015 2G1502, 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

25 1 June 2015 2G1502, 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...

26 1 June 2015 2G1502, 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

27 1 June 2015 2G1502, 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

28 1 June 2015 2G1502, 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

29 1 June 2015 2G1502, 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

30 1 June 2015 2G1502, 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

31 1 June 2015 2G1502, 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)

32 1 June 2015 2G1502, 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 ?

33 1 June 2015 2G1502, 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

34 1 June 2015 2G1502, 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”

35 1 June 2015 2G1502, 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

36 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT36 BDT: minne till minne CPU MEM BUS I/O

37 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT37 BDT: minne till I/O CPU MEM BUS I/O

38 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT38 BDT: I/O till minne CPU MEM BUS I/O

39 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT39 BDT: I/O till I/O CPU BUS I/O

40 1 June 2015 2G1502, 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

41 1 June 2015 2G1502, 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)

42 1 June 2015 2G1502, 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

43 1 June 2015 2G1502, 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

44 1 June 2015 2G1502, 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

45 1 June 2015 2G1502, 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

46 1 June 2015 2G1502, 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 &&&......

47 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT47 BDT: I/O till minne CPU MEMI/O SrcAddr DstAddr NrOfTransfers

48 1 June 2015 2G1502, 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

49 1 June 2015 2G1502, 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

50 1 June 2015 2G1502, 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

51 1 June 2015 2G1502, 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

52 1 June 2015 2G1502, 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

53 1 June 2015 2G1502, 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

54 1 June 2015 2G1502, 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

55 1 June 2015 2G1502, 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?)

56 1 June 2015 2G1502, 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

57 1 June 2015 2G1502, 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.

58 1 June 2015 2G1502, 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

59 1 June 2015 2G1502, 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

60 1 June 2015 2G1502, 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

61 1 June 2015 2G1502, 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

62 1 June 2015 2G1502, 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

63 1 June 2015 2G1502, 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

64 1 June 2015 2G1502, 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

65 1 June 2015 2G1502, 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?

66 1 June 2015 2G1502, 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

67 1 June 2015 2G1502, 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”

68 1 June 2015 2G1502, 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

69 1 June 2015 2G1502, 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

70 1 June 2015 2G1502, 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

71 1 June 2015 2G1502, 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

72 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT72 2G1502 Datorteknik allmän kurs Tillägg till Föreläsning 9 något om JAVA

73 1 June 2015 2G1502, 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

74 1 June 2015 2G1502, 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”

75 1 June 2015 2G1502, 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

76 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT76 Programexekvering Nios-kod (Intel, …) FETCH (update PC) (decode) EXECUTE Hårdvara

77 1 June 2015 2G1502, 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

78 1 June 2015 2G1502, 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

79 1 June 2015 2G1502, 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

80 1 June 2015 2G1502, 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

81 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT81 Programexekvering byte-kod (Intel, …) FETCH (update PC) (decode) EXECUTE Mjukvara JVM - Java Virtual Machine

82 1 June 2015 2G1502, 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);

83 1 June 2015 2G1502, 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

84 1 June 2015 2G1502, 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

85 1 June 2015 2G1502, 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

86 1 June 2015 2G1502, 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

87 1 June 2015 2G1502, 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

88 1 June 2015 2G1502, 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

89 1 June 2015 2G1502, 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

90 1 June 2015 2G1502, 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 - 0x0060 + 0x0100; if ((time & 0x0F00) == 0x0A00) time = time - 0x0A00 + 0x1000; if ((time & 0xF000) == 0x6000) time = 0x0000; return time; } }

91 1 June 2015 2G1502, 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.

92 1 June 2015 2G1502, 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...

93 1 June 2015 2G1502, 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)

94 1 June 2015 2G1502, 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

95 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT95 Mer om java JVM och byte-code http://java.sun.com/docs/vmspec/2nd-edition/html

96 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT96 Mer om java JVM och byte-code http://java.sun.com/docs/vmspec/2nd-edition/html

97 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT97 2G1502 Datorteknik allmän kurs Föreläsning 9 Repetition Sammanfattning Lite till

98 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT98 2G1502 Datorteknik allmän kurs Tentamina z26 maj 09-14 (ordinarie för IT-1 i KISTA) z28 maj 14-19 (ordinarie för E och I vid CAMPUS) anmälan via email till johan@imit.kth.se

99 1 June 2015 2G1502, 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?)

100 1 June 2015 2G1502, 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

101 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT101 Viktiga delar i en dator CPU MEM BUS I/O program data

102 1 June 2015 2G1502, 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

103 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT103 Programexekvering FETCH (update PC) (decode) EXECUTE

104 1 June 2015 2G1502, 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

105 1 June 2015 2G1502, 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 …)

106 1 June 2015 2G1502, 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...

107 1 June 2015 2G1502, 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)

108 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT108 Nios Instruktionsformat ADD R dst, R srcB ADD 6 5 5 ADD R dst, Imm x ADD 6 5 5

109 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT109 MIPS Instruktionsformat ADD R dst, R srcA, R srcB ADD ”ledigt” 6 5 5 5 11 ADD R dst, R srcA, Imm x ADD 6 5 5 16

110 1 June 2015 2G1502, 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

111 1 June 2015 2G1502, 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)

112 1 June 2015 2G1502, 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

113 1 June 2015 2G1502, 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 + -

114 1 June 2015 2G1502, 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[104..111] Reg[112..119] Reg[120..127] 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

115 1 June 2015 2G1502, 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

116 1 June 2015 2G1502, 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

117 1 June 2015 2G1502, 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

118 1 June 2015 2G1502, 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

119 1 June 2015 2G1502, 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: …

120 1 June 2015 2G1502, 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

121 1 June 2015 2G1502, 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: …

122 1 June 2015 2G1502, 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:

123 1 June 2015 2G1502, 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”

124 1 June 2015 2G1502, 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

125 1 June 2015 2G1502, 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 &&&......

126 1 June 2015 2G1502, 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

127 1 June 2015 2G1502, 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

128 1 June 2015 2G1502, 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

129 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT129 Flödesschema för korsvis kommunikation START getcharx ?senchar JA NEJ reccharx ?putchar NEJ JA

130 1 June 2015 2G1502, 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

131 1 June 2015 2G1502, 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

132 1 June 2015 2G1502, 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

133 1 June 2015 2G1502, 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

134 1 June 2015 2G1502, 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

135 1 June 2015 2G1502, 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)

136 1 June 2015 2G1502, 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:

137 1 June 2015 2G1502, 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:

138 1 June 2015 2G1502, 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:

139 1 June 2015 2G1502, 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

140 1 June 2015 2G1502, 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

141 1 June 2015 2G1502, 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

142 1 June 2015 2G1502, 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

143 1 June 2015 2G1502, 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...

144 1 June 2015 2G1502, Föreläsning 9, vt2004 för IT144 2G1502 Datorteknik allmän kurs Tentamina z26 maj 09-14 (ordinarie för IT-1 i KISTA) z28 maj 14-19 (ordinarie för E och I vid CAMPUS) anmälan via email till johan@imit.kth.se


Ladda ner ppt "1 June 2015 2G1502, 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."

Liknande presentationer


Google-annonser