20 June 2015 2G1502, Föreläsning 8 vt2004, för IT1 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling 2. Semaforer (förberedelse till lab 5)

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
E-post juni 2013.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 5: CPU-schemaläggning.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar -Signaler -Signalhantering.
Funktioner och programorganisation
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
William Sandqvist System Management functions S Burd, Systems Architecture ISBN Figure 11-2 CPU Management Memory Management.
PC-teknik Repetition enligt önskemål som inkommit via mail. (täcker alltså inte alla moment i kursen)
IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer
23 August 2014 IS1200 Datorteknik vt09, föreläsning 10, (E och I mfl)1 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory.
2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Distribuerade filsystem
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kap 3 & 4: Processer & trådar.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 11: Implementation av filsystem.
PROCESSPROGRAMMERING
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Programmeringsteknik
Tabeller.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: -Programmerade rörledningar -Namngivna rörledningar.
William Sandqvist C:s minnesmodell.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Träning 13 Makroprogrammering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -IPC: Semaforer -Exekveringstrådar (threads) -Introduktion till Java.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Processtruktur -Processklyvning och kodbyte -Avslutning av processer.
Lågnivåprogrammering Översikt av I/O-mekanismer i hårdvara Olika språkkrav och modeller för komponent- hantering(device driving) Modeller för komponent-hantering.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
31 March 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
31 March 2015 IS1200 Datorteknik ht2009 föreläsning 2, (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
Operativsystem - Processkommunikation
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer och synkroniseringsmeddelanden.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: - Förening av dataströmmar -Blockerande I/O multiplexering -Icke blockerande.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Fildeskriptorer -Filhantering -Felhantering.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
22 April 2015IS1200 Datorteknik, föreläsning 11 IS1200 Datorteknik Föreläsning 1 Introduktion.
14.1 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Repetition.
1 June 20152G1502, föreläsning 3, vt G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version.
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.
2 June 2015IS1200, Förel 9, vt08 (Kista)1 IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) vt 2008 (period.
2 June G1518, Föreäsning 7, vt 2007 (D2)1 2G1518 Datorteknik Föreläsning 7 Exceptions ht vt 2006 (period 2-3) för D2.
2 June 20152G1518, Förel 9 vt2006 (E3)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version vt 2006 för.
2 June G1502, Föreläsning 8, vt2004 för E och I1 2G1502 Datorteknik allmän kurs Föreläsning 8 Processorkonstruktion DMA, Direct Memory Access.
4 June 20152G1518, Förel 9 ht2005 (D3)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version ht 2005 för.
4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version.
13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)1 IS1200 Datorteknik Föreläsning 7 Exceptions vt 2008 (period 3) för IT/ME och Hing/Kand.
1 2G1502 Datorteknik allmän kurs Föreläsning 3 Programmering med hopp Programmering av Nios.
1 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Föreläsning 9 zDel 1. CPU-scheduling zDel 2. Semaforer zInför föreläsning 10 zSammanfatting.
William Sandqvist Datorteknik övning 3 stackhantering subrutin som anropar subrutin programutveckling.
4 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Övning 10.
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)1 IS1200 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4.
17 October 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Föreläsning 9 Del 1. CPU-scheduling Del 2. Semaforer (förberedelse till hemlab.
IT och medier1 Utgående från boken Computer Science av: J. Glenn Brookshear Grundläggande datavetenskap, 4p Kapitel 3 Operativsystem.
Microsoft® Office SharePoint® 2007-utbildning
Presentationens avskrift:

20 June G1502, Föreläsning 8 vt2004, för IT1 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling 2. Semaforer (förberedelse till lab 5)

20 June G1502, Föreläsning 8 vt2004, för IT2 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling (förberedelse till lab 5)

20 June G1502, Föreläsning 8 vt2004, för IT3 Realtidskärna Viktiga begrepp (en del) zKursboken kap zCPU - scheduling zTime Slice zTimer Interrupt zContext Switch (process/thread switch) zProcess Control Block / Thread Control Block zReady Queue zRound Robin

20 June G1502, Föreläsning 8 vt2004, för IT4 CPU-scheduling Round Robin OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out time-ut time-out context switches...

20 June G1502, Föreläsning 8 vt2004, för IT5 Makro-Kod för context switch Hit kommer man efter timerint-exc. om man ska göra Context Switch ( Timern har givits kvittens med mera …) zDenna makro-kod exekveras med IE=0 SAVEPCB;spara PCB på lokal stack move %o0, %sp;kopiera %sp till %o0 PUTRQ;skriv %sp i Ready Queue GETRQ ;läs %sp från Ready Queue move %sp, %o0;kopiera %o0 till %sp UNSAVEPCB ;kopiera PCB till processorn tret%07 ;gör ”returhoppet”

20 June G1502, Föreläsning 8 vt2004, för IT6 Nios (nytt) Process Control Block - PCB Thread Control Block - TCB 8 times %gi8 times %oi8 times %Li8 times %ii ctrl1 ;ISTATUS Probably multiples %sp %o7 ;returadress

20 June G1502, Föreläsning 8 vt2004, för IT7 Realtidskärna Viktiga begrepp (igen) zTime-Slice; millisekunder zSave PCB;spara undan Process Control Block zPUTRQ;pekare till thread läggs i Ready Queue zGETRQ;pekare till thread tas ur Ready Queue zUnsave PCB;återställ Process Control Block zExit;avsluta en Thread zCreateThread (Addr, SP, PRIO) ;initiera ett Process Control Block zYield;släpp resten av en Time-Slice’ z(Sleep;”sov en stund” (inte nu!) )

20 June G1502, Föreläsning 8 vt2004, för IT8 CPU-scheduling Exit (System Call) OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out exit time-out Round Robin Tråd 2 borta ur RQ !

20 June G1502, Föreläsning 8 vt2004, för IT9 OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out Round Robin CPU-scheduling Create (System Call) create Tråd 2 tillkom i RQ !

20 June G1502, Föreläsning 8 vt2004, för IT10 OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out Sound Robin CPU-scheduling Yield (System Call) yield < time-slice Tråd 2 vilar i RQ !

20 June G1502, Föreläsning 8 vt2004, för IT11 Ready Queue Current Thread and PCB:s PCB2 Process Control Block PCB4 Process Control Block PCB6 Process Control Block PCB1 Process Control Block Ready Queue Ready Queue innehåller (stack-) pekare till PCB:er Current Thread (5)

20 June G1502, Föreläsning 8 vt2004, för IT12 Ready Queue Put Thread 5 into RQ PCB2 Process Control Block PCB4 Process Control Block PCB1 Process Control Block Ready Queue Current Thread (5) %sp PCB5 Process Control Block PCB6 Process Control Block

20 June G1502, Föreläsning 8 vt2004, för IT13 Ready Queue Put Thread 5 into RQ PCB2 Process Control Block PCB4 Process Control Block PCB1 Process Control Block Ready Queue Current Thread (5) PCB5 Process Control Block PCB6 Process Control Block

20 June G1502, Föreläsning 8 vt2004, för IT14 Ready Queue Select Thread 2 in RQ PCB2 Process Control Block PCB4 Process Control Block PCB1 Process Control Block Ready Queue PCB5 Process Control Block PCB6 Process Control Block Current Thread (2)

20 June G1502, Föreläsning 8 vt2004, för IT15 Ready Queue Get Thread 2 from RQ PCB2 Process Control Block PCB4 Process Control Block PCB6 Process Control Block PCB1 Process Control Block Ready Queue PCB5 Process Control Block Current Thread (2) %sp

20 June G1502, Föreläsning 8 vt2004, för IT16 Ready Queue, Data Structure Circular Buffer, FIFO WRADDR: RDADDR: RQEND: QUEUE: ledig upptagen Utanför stacken bara för att kunna initera SP

20 June G1502, Föreläsning 8 vt2004, för IT17 Ready Queue, Data Structure.equMAX_THREADS, 16.data.align2;2 2 wraddr:.wordqueue;*skrivadress rdaddr:.wordqueue;*läsadress queue:.fillMAX_THREADS, 4, 0 rqend:.word;slutmärke

20 June G1502, Föreläsning 8 vt2004, för IT18 Nios: Subrutinen rqinit rqinit:movia%L0, queue movia%L1, wraddr movia%L2, rdaddr st[%L1], %L0 st[%L2], %L0 lret

20 June G1502, Föreläsning 8 vt2004, för IT19 Ready Queue Macros Nios-assembler.macroPUTRQ;skriv %o0 till RQ bsrrqput;varning för %o7 nop.endm.macroGETRQ;läs %o0 från RQ bsrrqget;varning för %o7 nop.endm

20 June G1502, Föreläsning 8 vt2004, för IT20 Nios: Subrutinen rqput rqput:save%sp, 0 movia%L0, wraddr ld%L1, [%L0] st[%L1], %i0;skriv från %i0 addip%L1, 0x4;öka wraddr movia%L2, rqend cmp%L1, %L2;kolla om rqend ifscc_ne brputend nop movia%L1, queue putend:st[%L0], %L1 ret restore

20 June G1502, Föreläsning 8 vt2004, för IT21 Nios: Subrutinen rqget rqget:save%sp, 0 movia%L0, rdaddr;hämta addr ld%L1, [%L0];hämta pekare ld%i0, [%L1];läs till %i0 addip%L1, 0x4;öka rdaddr movia%L3, queue movia%L2, rqend cmp%L1, %L2; ifscc_eq;om ”rdaddr” = rqend mov%L1, %L3;så ”rdaddr”:=queue getend:st[%L0], %L1 ret restore

20 June G1502, Föreläsning 8 vt2004, för IT22 Makro-Kod för context switch Hit kommer man efter timerint om man ska göra Context Switch ( Timern har givits kvittens med mera,,,) zDenna makro-kod exekveras med IE=0 … SAVEPCB;spara PCB på lokal stack move %o0, %sp;kopiera sp till %o0 PUTRQ;skriv %sp i Ready Queue GETRQ ;läs %sp från Ready Queue move %sp, %o0;kopiera %o0 till sp UNSAVEPCB ;kopiera PCB till processorn tret%07 ;gör ”returhoppet”

20 June G1502, Föreläsning 8 vt2004, för IT23 Kod för context switch mer liknande boken sid 201 zDenna Nios-kod exekveras med IE=0 … mov%sp, %fp;fixa till SP från FP SAVEPCB;spara PCB på lokal stack, Nios-kod mov%o0, %sp;%sp som parameter bsrITS_scheduler;PUTRQ och GETRQ i C-kod mov%sp, %o0 UNSAVEPCB;kopiera PCB till processorn, Nios-kod tret%07;gör ”återstart” av ”ny” tråd

20 June G1502, Föreläsning 8 vt2004, för IT24 Register Window Repetition zCWP = Current Window Pointer zSAVE ”öppna nytt fönster” medför minska CWP med 1 zRESTORE ”byt till gammalt fönster” medför öka CWP med 1

20 June G1502, Föreläsning 8 vt2004, för IT25 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

20 June G1502, Föreläsning 8 vt2004, för IT26 Nios Exceptions Control-regs, %ctl0-2 CWP IPRI IE CWP NCVZ CWP = Current Window Pointer IPRI = Interrupt PRIority IE = Interrupt Enable %ctl0/1 %ctl2 HI_LIMIT HI_LIMIT = Maximum value of CWP LO_LIMIT LO_LIMIT = Minimum value of CWP

20 June G1502, Föreläsning 8 vt2004, för IT27 Nios (nytt) Process Control Block - PCB Thread Control Block - TCB 8 times %gi8 times %ii8 times %Li8 times %oi ctrl1 ;ISTATUS Probably multiples %sp %o7 ;returadress

20 June G1502, Föreläsning 8 vt2004, för IT28 Nios-makro spara PCB å stacken.macroSAVEPCB ?moore;lägen fungerar ej i Nios-makron mov %o6, %i6;fixa till %sp om det inte redan gjorts push%o7;retur/startadress PUSHGREGS;8 global regs to stack PUSHIREGS;8 iutput regs to stack moore:mov%i6, %o6;ta med %sp restore;increment CWP PUSHLREGS;8 (new) Local regs to stack PUSHIREGS;8 (new) input regs to stack CMPCWPMAX;jämför CWP med HI_LIMIT ifscc_ne;om ej lika (CWP < HI_LIMIT) brmoore;så finns fler fönster nop PUSHCTL 1;control reg 1 to stack.endm

20 June G1502, Föreläsning 8 vt2004, för IT29 Nios-makro hämta PCB ur stacken.macroUNSAVEPCB ?muure;lägen fungerar ej i Nios-labben ! POPCTL1;control reg 1 from stack POPIREGS;8 input regs from stack muure:POPLREGS;8 (new) Local regs from stack save%sp,0 POPIREGS;8 (new) input regs from stack CMPCWPICWP;om CWP = ICWP (makro) ifscc_eq;är det klart brmuure;annars fortsätt nop POPGREGS;8 global regs from stack pop%o7;returadress till %o7.endm

20 June G1502, Föreläsning 8 vt2004, för IT30 Nios: Macro för att pusha controlreg å stacken ; förstör %L0.macroPUSHCTLnum pfx\num rdctl%L0 push%L0.endm

20 June G1502, Föreläsning 8 vt2004, för IT31 Nios: Macro för att pusha controlreg å stacken ; förstör ej %L0 (lyxversion, överkurs).macroPUSHCTLnum subi%sp, 4 PUSH%L0 addi%sp, 8 pfx\num rdctl%L0 push%L0 subi%sp, 4 POP%L0.endm

20 June G1502, Föreläsning 8 vt2004, för IT32 Nios: Macro för att popa controlreg ur stacken ; förstör %L0.macroPOPCTLnum pop%L0 pfx\num wrctl%L0.endm

20 June G1502, Föreläsning 8 vt2004, för IT33 Nios: Macro för att popa controlreg ur stacken ; förstör ej %L0 (lyxversion, överkurs).macroPOPCTLnum push%L0 addi%sp, 4 pop%L0 pfx\num wrctl%L0 nop subi%sp, 8 pop%L0 addi%sp, 4.endm

20 June G1502, Föreläsning 8 vt2004, för IT34 Nios: Macro för att pusha 8 global regs å stacken.macroPUSHGREGS push%g0 push%g1 push%g2 push%g3 push%g4 push%g5 push%g6 push%g7.endm

20 June G1502, Föreläsning 8 vt2004, för IT35 Nios: Macro för att pusha 8 local regs å stacken.macroPUSHLREGS push%L0 push%L1 push%L2 push%L3 push%L4 push%L5 push%L6 push%L7.endm

20 June G1502, Föreläsning 8 vt2004, för IT36 Nios: Macro för att pusha 8 output regs å stacken.macroPUSHOREGS push%o0 push%o1 push%o2 push%o3 push%o4 push%o5 ;push%o6;ska %sp pushas ? NEJ ! push%o7;return address !.endm

20 June G1502, Föreläsning 8 vt2004, för IT37 Nios: Macro för att pusha 8 input regs på stacken.macroPUSHIREGS push%i0 push%i1 push%i2 push%i3 push%i4 push%i5 push%i6;%fp push%i7;ev. old return address.endm

20 June G1502, Föreläsning 8 vt2004, för IT38 Nios: Macro för att popa 8 input regs ur stacken.macroPOPIREGS pop%i7;ev. old return address pop%i6;%fp pop%i5 pop%i4 pop%i3 pop%i2 pop%i1 pop%i0.endm

20 June G1502, Föreläsning 8 vt2004, för IT39 Nios: Macro för att popa 8 output regs ur stacken.macroPOPOREGS pop%o7;return address ;pop%o6;ska %sp poppas ? NEJ ! pop%o5 pop%o4 pop%o3 pop%o2 pop%o1 pop%o0.endm

20 June G1502, Föreläsning 8 vt2004, för IT40 Nios: Macro för att popa 8 Local regs ur stacken.macroPOPLREGS pop%L7 pop%L6 pop%L5 pop%L4 pop%L3 pop%L2 pop%L1 pop%L0.endm

20 June G1502, Föreläsning 8 vt2004, för IT41 Nios: Macro för att popa 8 global regs ur stacken.macroPOPGREGS pop%g7 pop%g6 pop%g5 pop%g4 pop%g3 pop%g2 pop%g1 pop%g0.endm

20 June G1502, Föreläsning 8 vt2004, för IT42 Nios Exceptions Control-regs, %ctl0-2 CWP IPRI IE CWP NCVZ CWP = Current Window Pointer IPRI = Interrupt PRIority IE = Interrupt Enable %ctl0/1 %ctl2 HI_LIMIT HI_LIMIT = Maximum value of CWP LO_LIMIT LO_LIMIT = Minimum value of CWP

20 June G1502, Föreläsning 8 vt2004, för IT43 Jämför CWP med HI_LIMIT (överkurs) ;returnerar flaggor från jämförelse mellan CWP och HI_LIMIT.macroCMPCWPMAX pfx0;onödig rdctl%g0;läs ctrl-0 lsri%g0, 4;och skifta fram CWP andip %g0, 0x1F;till 5 LSBits i %g0 pfx2 rdctl%g1;läs ctrl-2 lsri%g1, 5;och skifta fran HI_LIMIT andip %g1, 0x1F;till 5 LSBits i %g1 cmp%g0, %g1;jämför CWP med HI_LIMIT.endm

20 June G1502, Föreläsning 8 vt2004, för IT44 Jämför CWP med ICWP (överkurs) ;returnerar flaggor från jämförelse mellan CWP och ICWP.macroCMPCWPICWP pfx0;onödig ! rdctl%g0;läs STATUS / ctl-0 andip %g0, 0x1F0;maska fram CWP i %g0 pfx1 rdctl%g1;LÄS ISTATUS / ctl-1 andip %g1, 0x1F0;maska fram ICWP i %g1 cmp%g0, %g1;jämför CWP med ICWP.endm

20 June G1502, Föreläsning 8 vt2004, för IT45 initera ”tom” PCB å stacken.macroINITPCB PUSH%o7;skydda returadress subip%sp, 8*4;reservera plats för 8 global regs subip%sp, 8*4;reservera plats för 8 input regs subip%sp, 8*4;reservera plats för 8 Local regs subip%sp, 8*4;reservera plats för 7-8 output regs? PUSHCTL 1;push ISTATUS.endm

20 June G1502, Föreläsning 8 vt2004, för IT46 Create_Thread med en PCB å stacken.macroCreateThread Startaddress, Stackinit, Priority movia%sp, \Stackinit;initiera %o6=%sp mov%fp, %sp;med kopia i %i6=%fp SPL\Priority;Set Priority Level pfx0 rdctl%L0;kopiera CWP till %L0 pfx2 rdctl%L2;läs HI_LIMIT mm lsri%L2, 5;flytta till LSB andip%L2, 0x1F;maska fram bara HI_LIMIT lsli%L2, 4;skifta till rätt plats andip%L0, oxFE0F;nollställ CWP or%L0, %L2;kopiera in CWP i %L0 orip%L0, 0x8000;EI om det inte gjorts pfx1 wrctl%L0;och skriv vidare till ISTATUS nop movia%o7, på plats INITPCB;MACRO, ny variant.endm

20 June G1502, Föreläsning 8 vt2004, för IT47 2G1502 Datorteknik allmän kurs Föreläsning 8 2. Semaforer (förberedelse till lab 5)

20 June G1502, Föreläsning 8 vt2004, för IT48 Samverkande processer Användning av semaforer

20 June G1502, Föreläsning 8 vt2004, för IT49 Semafor, vad är det zEn heltalsvariabel (0, 1, 2, 3 … -1, -2 ??) zSpeciella egenskaper zOperationer (atomära - odelbara) zsignal (sem) ~ öka med 1 zwait (sem) ~ minska med 1 om det går (annars ”vänta” tills det går) zBinär semafor, kan anta värde 0 eller 1

20 June G1502, Föreläsning 8 vt2004, för IT50 Semafor korgbollsanalogi KORG BOLL

20 June G1502, Föreläsning 8 vt2004, för IT51 Semafor korgbollsanalogi KORG BOLL SIGNAL är ungefär: Lägg en till boll i korgen (och fortsätt sedan…)

20 June G1502, Föreläsning 8 vt2004, för IT52 Semafor korgbollsanalogi KORG BOLL WAIT är ungefär: Vänta (vid behov) tills det finns minst en boll i korgen Ta en boll ur korgen (och fortsätt sedan …)

20 June G1502, Föreläsning 8 vt2004, för IT53 Dijkstra zSignal - Verhogen; V(sem) zWait - Proberen; P(sem)

20 June G1502, Föreläsning 8 vt2004, för IT54 Samverkan mellan processer med hjälp av semaforer zSynkronisering zÖmsesidig uteslutning (Mutual Exclusion) zRendez Vous

20 June G1502, Föreläsning 8 vt2004, för IT55 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT56 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT57 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT58 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT59 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT60 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT61 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT62 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT63 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT64 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT65 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT66 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT67 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT68 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT69 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT70 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT71 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT72 Ömsesidig uteslutning P1 i T1 kritisk liksom P2 i T2 … wait P1: … signal … wait P2: signal … T1: T2: P1 Och P2 får inte exekveras ”samtidigt”

20 June G1502, Föreläsning 8 vt2004, för IT73 Rendez Vous T1 och T2 inväntar varann innan S1 och S2 exekverar … P1: … signal wait S1 … P2: … signal wait S2 T1: T2:

20 June G1502, Föreläsning 8 vt2004, för IT74 Testprogram (laboration 5) zProducers, p stycken, producerar primtal zConsumers, c stycken, konsumerar d:o zFIFO (buffert) med x platser för primtal

20 June G1502, Föreläsning 8 vt2004, för IT75 Producer Init:tal := start ploop:räkna ut nästa primtal, tal anropa PUT-FIFO (tal) bra ploop

20 June G1502, Föreläsning 8 vt2004, för IT76 Producer ”Nios-kod” / makron prod:movia%o0, start ploop:bsrNextPrime;subrutin nop PUTFIFO;macro brploop nop

20 June G1502, Föreläsning 8 vt2004, för IT77 Consumer Init: cloop:anropa GET-FIFO (tal) konsumera primtalet (skrivut tal) bracloop

20 June G1502, Föreläsning 8 vt2004, för IT78 Consumer ”Nios-kod” / makron cons:nop cloop:GETFIFO;macro bsrPrintPrime;subrutin nop brcloop nop

20 June G1502, Föreläsning 8 vt2004, för IT79 PUT-FIFO Skriv data till FIFO-buffert på ett säkert sätt zDet måste finnas ledig plats zSamtidig skrivning är kritisk Vad är det som är kritiskt ? Hantering av skrivpekaren wraddr

20 June G1502, Föreläsning 8 vt2004, för IT80 FIFO Queue, Data Structure (jfr med RQ!) WRFIFOA: RDFIFOA: fifoend: FIFO: ledig upptagen

20 June G1502, Föreläsning 8 vt2004, för IT81 FIFO Queue, Data Structure.equnrfifo, 16.data.align4 wrfifoa:.wordfifo rdfifoa:.wordfifo fifo:.fillnrfifo, 4, 0 fifoend:.word

20 June G1502, Föreläsning 8 vt2004, för IT82 FIFO Queue Macros.macroWRFIFO;macro bsrfifowr;subrutinanrop nop.endm.macroRDFIFO;macro bsrfiford;subrutinanrop nop.endm

20 June G1502, Föreläsning 8 vt2004, för IT83 Subrutinen fifowr fifowr:save%sp, 0 movia%L0, wrfifoa;hämta addr ld%L1, [%L0] ;hämta pekare st[%L1], %i0;skriv primtal addip%L1, 0x4;öka wraddr movia%L2, fifoend cmp%L1, %L2;kolla om fifoend ifscc_ne brfwrend nop movia%L1, fifo fwrend:st[%L0], %L1 ret restore

20 June G1502, Föreläsning 8 vt2004, för IT84 Subrutinen fiford fiford:save%sp, 0 movia%L0, rdfifoa;hämta addr ld%L1, [%L0];hämta pekare ld%i0, [%L1];hämta primtal addip%L1, 0x4;öka rdaddr movia%L2, fifoend cmp%L1, %L2;kolla om fifoend ifscc_ne brfrdend nop movia%L1, fifo frdend:st[%L0], %L1 ret restore

20 June G1502, Föreläsning 8 vt2004, för IT85 anrop … wait … wait … wrfifo … signal … signal … retur PUT-FIFO nrempty wrmut nrfull

20 June G1502, Föreläsning 8 vt2004, för IT86 ”Nios-kod” för PUTFIFO (bara en massa macron) putfifo:WAITnrempty WAITwrmut WRFIFO SIGNALwrmut SIGNALnrfull RETURN

20 June G1502, Föreläsning 8 vt2004, för IT87 Nios-kod Macro för Wait och Signal.macroSIGNALsem movia%o0, \sem TRAP6.endm.macroWAITsem movia%o0, \sem TRAP7.endm

20 June G1502, Föreläsning 8 vt2004, för IT88 GET-FIFO Läs data från FIFO-buffert på ett säkert sätt zDet måste finnas upptagen plats zSamtidig läsning är kritisk Vad är det som är kritiskt ? Hantering av rdaddr !

20 June G1502, Föreläsning 8 vt2004, för IT89 GET-FIFO nrempty rdmut nrfull retur … signal … signal … rdfifo … wait … wait … anrop

20 June G1502, Föreläsning 8 vt2004, för IT90 Nios-kod för GETFIFO (bara en massa macron) getfifo:WAITnrfull WAITrdmut RDFIFO SIGNALrdmut SIGNALnrempty RETURN

20 June G1502, Föreläsning 8 vt2004, för IT91 CPU-scheduling OS Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 time-slice

20 June G1502, Föreläsning 8 vt2004, för IT92 En process kan göra yield zLämna bort resten av sin time-slice zSpeciellt vid wait-operation på semafor zNästa thread bör få en hel time-slice zVid en semafor finns ”väntande threads” zEn signal kan flytta en thread till RQ zDet finns olika varianter vid signal

20 June G1502, Föreläsning 8 vt2004, för IT93 Några sidor om zSIGNAL som system call med TRAP 6 zWAIT som system call med TRAP 7 zYIELD som system call med TRAP 8 zEXIT som system call med TRAP 9 zNios-kod för signal, wait och yield z...

20 June G1502, Föreläsning 8 vt2004, för IT94 Signal med Nios-kod pekare till semafor i %o0 zOm anrop görs med TRAP6 är IE redan 0 ;DI;enter critical trap6:ld%L0, [%i0];hämta semafor addi%L0, 1;lägg i en boll st[%i0], %L0;semafor tillbaks ;EI tret%o7;medför även EI

20 June G1502, Föreläsning 8 vt2004, för IT95 Wait med Nios-kod pekare till semafor i %o0 zOm anrop görs med TRAP7 är IE redan =0 trap7: ld%L0, [%i0];läs nytt semaforvärde ifrz%L0;finns det någon boll? brnoball;hopp om ingen boll nop subi%L0, 1;ta en boll st[%i0], %L0;semaforväred skrivs tillbaks tret%o7;medför även EI noball:EI;släpp in TimerInt, OBS OBS ! ;YIELD;om så önskas med TRAP8 DI;hindra TimerInt brtrap7;och leta boll igen nop

20 June G1502, Föreläsning 8 vt2004, för IT96 Makro-Kod för context switch Hit kommer man efter timerint om man ska göra Context Switch ( Timern har givits kvittens med mera …) zDenna makro-kod exekveras med IE=0 SAVEPCB;spara PCB på lokal stack move %o0, %sp;kopiera %sp till %o0 PUTRQ;skriv %sp i Ready Queue GETRQ ;läs %sp från Ready Queue move %sp, %o0;kopiera %o0 till %sp UNSAVEPCB ;kopiera PCB till processorn tret%07 ;gör ”returhoppet”

20 June G1502, Föreläsning 8 vt2004, för IT97 Yield med Nios-kod zYIELD-anrop görs med TRAP (t.ex TRAP8) zVad ska utföras av YIELD zSamma sak som context switch

20 June G1502, Föreläsning 8 vt2004, för IT98 Kod för context switch Hit kommer man efter yield-anrop och det ska göras Context Switch ( Timern ska justeras till hel time-slice …) TRAP8: SAVEPCB ;spara PCB på lokal stack move%o0, %sp PUTRQ ;skriv %sp till ReadyQueue GETRQ ;läs ny %sp från ReadyQueue move %sp, %o0 UNSAVEPCB ;kopiera PCB till processorn tret%07;gör ”returhopp” som vanligt

20 June G1502, Föreläsning 8 vt2004, för IT99 EXIT med Nios-kod zEXIT-anrop görs med TRAP (t.ex TRAP9) zVad ska utföras av EXIT zTråden ska ej placeras i RQ

20 June G1502, Föreläsning 8 vt2004, för IT100 Kod för EXIT Hit kommer man efter EXIT-anrop och det ska göras Context Switch TRAP9: ;SAVEPCB ;spara ej PCB på lokal stack ;PUTRQ ;skriv ej %sp till ReadyQueue GETRQ ;läs ny %sp från ReadyQueue move %sp, %o0 UNSAVEPCB ;kopiera PCB till processorn tret%07;gör ”returhopp” som vanligt

20 June G1502, Föreläsning 8 vt2004, för IT101 Laboration 5 ingår i kursen hösten 2003 zMaterial ingår i tentamen (se extentor) zLab-PM finns på hemsidan zLabben körs på MIPS-simulatorn ! zLabben ska redovisas muntligt zEnsam eller i grupp om 2 (eventuellt 4)

20 June G1502, Föreläsning 8 vt2004, för IT102 Laboration 5 CPU-scheduling / semaforer zIdle-tråd kan göra Yield zProducer skriver primtal till FIFO zConsumer läser primtal från FIFO zAntal Producers varieras zAntal Consumers varieras zAntal platser i FIFO varieras zBeteende vid WAIT varieras

20 June G1502, Föreläsning 8 vt2004, för IT103 CPU-scheduling endast Idle-tråd OS Idle time-slice Round Robin

20 June G1502, Föreläsning 8 vt2004, för IT104 OS Idle Prod 1 time-slice Round Robin CPU-scheduling Idle-tråd och en Producer Prod 1 får cirka 50% av tiden

20 June G1502, Föreläsning 8 vt2004, för IT105 OS Idle Prod 1 time-slice Round Robin CPU-scheduling Idle-tråd och en Producer Prod 1 får nästan 100% av tiden

20 June G1502, Föreläsning 8 vt2004, för IT106 OS Idle Prod 1 Prod 2 Prod 3 time-slice Round Robin CPU-scheduling Idle-tråd och tre Procuder Prod 1 får cirka 33% av tiden