4 June 2015 2G1518, 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.

Slides:



Advertisements
Liknande presentationer
Snabbguide och tips.
Advertisements

Skapa ett video-CV på YouTube
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.
Datorarkitekturer och operativsystem
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 -Signaler -Signalhantering.
Enkel dator teknik Tips och tricks.
William Sandqvist System Management functions S Burd, Systems Architecture ISBN Figure 11-2 CPU Management Memory Management.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
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.
Denna föreläsning zVad kursen handlar om zKursupplägg, litteratur, bra att veta zPrestanda - ämnet för dagen.
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 7: Deadlocks.
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Tabeller.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
William Sandqvist C:s minnesmodell.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Att överföra data till PC Förberedelse 1.Installera Programvara, finns på CD i framfickan på väska) 2.Ta fram handenhet 3.Ta fram USB-interface Tanka USB-interface.
Toe taps. Hook turn. U turn. Step on. Twist of outside. Inside fake
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.
Google SketchUp Del 1.
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.
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
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.
IS1200 Datorteknik Föreläsning CE F2 Vi bygger en processor Kursboken, delar av kapitel 7 31 March IS1200 Datorteknik föreläsning CE – F2.
Cacheminnen: skrivning ● Träff ● Skrivbuffert ● Miss.
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.
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 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.
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.
6/3/2015© Mats Brorsson1 Hur mycket snabbare blir det med PC133 SDRAM jämfört med PC100 SDRAM?... blir det med en 1,4 GHz Athlon- processor jämfört.
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.
Uppstart iPad Höörs kommun.
10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007.
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.
William Sandqvist Övning 7 Interrupt, Exeption, Trap.
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)
Denna föreläsning zVad kursen handlar om zKursupplägg, litteratur, bra att veta zPrestanda - ämnet för dagen.
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 Övning 7 Interrupt, Exeption, Trap.
3 August 2015IS1200 Datorteknik föreläsning 71 IS1200 Datorteknik Föreläsning 7 Exceptions Interrupts - Traps.
4 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Övning 10.
William Sandqvist Övning 10 Processorkonstruktion med pipe-line.
Enkel dator teknik Tips och tricks. Välja storlek och radavstånd Här väljer du storlek på texten vi vill att ni använder 14 p till rubriker och 12 p till.
12 October 2015 IS1200 Datorteknik föreläsning CE - F71 IS1200 Datorteknik och komponenter Föreläsning 7 Exceptions Interrupts - Traps.
13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)1 IS1200 Datorteknik Föreläsning 7 Exceptions ht 2009 – vt 2010 (period 2-3) för D-2.
Kommunikationspass Jag heter
Lathund PowerPoint 2007 Lathund
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.
Kandidathantering i Reachmee
Validera hjärtstartare i Sveriges Hjärtstartarregister
Tillfällesbyte Innehåll Återuppta studier, tillfällesbyte
Presentationens avskrift:

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 vt07 för IT/ME och 2IT

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)2 F1F2F3F4F5F6F7F8F9F10Ö2Ö1Ö3Ö4Ö5LAB-1LAB-2Hemlab-1Ö6Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)3 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling (förberedelse till hemlab 3)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)4 Realtidskärna Viktiga begrepp (en del)  Kursboken kap  CPU - scheduling  Time Slice  Timer Interrupt  Context Switch (process/thread switch)  Process Control Block / Thread Control Block  Ready Queue  Round Robin

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)5 CPU-scheduling Round Robin OS Tråd 1 Tråd 2 Tråd 3 time-slice time-out time-ut time-out context switches...

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)6 Åtgärder vid Context Switch  Save PCB: Spara undan viktig information, dvs allt som behövs för att kunna fortsätta exekvering vid senare tidpunkt. (PCB – Process Control Block)  Put in RQ: Placera processen/tråden i Ready-Queue  Get from RQ: Välj en ny, viktig, process/tråd ur Ready- Queue  Unsave PCB: Kopiera in dess PCB till processorn  Return: Starta/fortsätt exekvering av den nyhämtade processen/tråden

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)7 Program-Kod för context switch Hit kommer man vid interrupt från Timern # Denna kod exekveras med PIE=0, avbrott avstängda timerint: subiR29, r29, 4# justera återhoppsadress / ea pushr29# skydda returadress/ea på stacken …# kvittera timern med mera ”cmpcond r24, ri, rj”# har det gått en time-slice bner24, r0,contextswitch# så gör contextswitch # annars... cswret:popr29# återställ returadress/ea eret# tillbaks till samma tråd/process

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)8 Program-Kod för context switch (forts.) contextswitch: pushr31# skydda returadress i r31/ra call PCBSAVE# spara PCB i minnet (på lokal stack) move r4, sp# kopiera sp till r4 call RQPUT# skriv sp i Ready Queue # här görs ”språnget” mellan 2 processer/trådar call RQGET # läs ny sp från Ready Queue move sp, r2# kopiera r2 till sp call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31/ra... cswret:popr29# återställ returadress/ea eret# tillbaks till utvald tråd/process

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)9 Nios-II Process Control Block - PCB Thread Control Block - TCB r1—r26 r28, r30 ctrl2 # bstatus sp r29 #returadress r31 #returadress ctrl3 # ienable ctrl1 # estatus

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)10 Realtidskärna Viktiga begrepp (igen)  Time-Slice# millisekunder  PCB Save # spara undan Process Control Block  RQ Put# pekare till tråd läggs i Ready Queue  RQ Get# pekare till tråd tas ur Ready Queue  PCB Unsave # återställ Process Control Block  Exit# avsluta en tråd  CreateThread (Addr, SP, PRIO) # initiera ett Process Control Block  Yield# släpp resten av en Time-Slice  (Sleep# ”sov en stund” (inte nu!) )

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)11 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 !

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)12 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 !

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)13 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 !

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)14 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)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)15 Ready Queue PCB Save 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

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)16 Ready Queue RQ Put 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

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)17 Ready Queue Select new Process/Thread 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)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)18 Ready Queue RQ Get 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

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)19 Ready Queue, Data Structure Circular Buffer, FIFO wraddr: rdaddr: rqend: queue: ledig upptagen Utanför queue

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)20 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

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)21 Ready Queue, Data Structure Circular Buffer, FIFO wraddr: rdaddr: rqend: queue: ledig upptagen Utanför queue

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)22 Nios-II: Subrutinen rqinit rqinit:moviar8, queue moviar9, wraddr moviar10, rdaddr str8, 0(r9) str8, 0(r10) ret

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)23 Nios-II: Subrutinen RQPUT RQPUT:moviar8, wraddr ldwr9, 0(r8) stwr4, 0(r9)# skriv från r4 addir9, r9, 4# öka wraddr moviar10, rqend bner9, r10, putend moviar9, queue putend:stwr9, 0(r8) ret #OBS ingen kontroll om kön är full

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)24 Nios-II: Subrutinen RQGET RQGET:moviar8, rdaddr ldwr9, 0(r8) ldwr2, 0(r9)# skriv från r4 addir9, r9, 4# öka wraddr moviar10, rqend bner9, r10, getend moviar9, queue getend:stwr9, 0(r8) ret #OBS ingen kontroll om kön är tom

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)25 Program-Kod för context switch (repris) contextswitch: pushr31# skydda returadress i r31/ra call PCBSAVE# spara PCB på lokal stack move r4, sp# kopiera sp till r4 call RQPUT# skriv sp i Ready Queue # här görs ”språnget” mellan 2 processer/trådar call RQGET # läs ny sp från Ready Queue move sp, r2# kopiera r2 till sp call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31/ra... cswret:popr29# återställ returadress/ea eret# tillbaks till utvald tråd/process(

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)26 Kod för context switch mer liknande boken sid 201 contextswitch: pushr31# skydda returadress i r31 call PCBSAVE# spara PCB på lokal stack move r4, sp# kopiera sp till r4 call ITS_scheduler# RQPUT och RQGET i C-kod move sp, r2# kopiera r2 till sp call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31 cswret:popr29# återställ returadress/ea eret# tillbaks till utvald tråd/process

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)27 Nios-II (repris) Process Control Block - PCB Thread Control Block - TCB r1—r26 r28, r30 ctrl2 # bstatus sp r29 #returadress r31 #returadress ctrl3 # ienable ctrl1 # estatus

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)28 Nios-subrutin spara PCB å stacken PCBSAVE: PUSHALL# alla utom r0, r27, r29 och r31 PUSHCTL 3# pusha ienable PUSHCTL 2# pusha bstatus PUSHCTL 1# pusha estatus ret# jmp r31 PCBUNSAVE: POPCTL 1# poppa estatus POPCTL 2# poppa bstatus POPCTL 3# poppa ienable POPALL# alla utom r0, r27, r29 och r31 ret# jmp r31

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)29 Nios-II: Macro för controlreg   stacken # att ändra innehåll i r24/et är OK.macroPUSHCTLnum rdctlr24, ctl\num pushr24.endm # att ändra innehåll i r24/et är OK.macroPOPCTLnum popr24 wrctlr24, ctl\num.endm

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)30 Nios-II: Macro för att pusha register på stacken.macroPUSHALL #except r0, r27, r29, r31 pushr1 pushr2... pushr25 pushr26 pushr28 pushr30.endm

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)31 Nios-II: Macro för att poppa register på stacken.macroPOPALL #except r0, r27, r29, r31 popr30 popr28 popr26 popr25... popr2 popr1.endm

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)32 Nios-II: Macro för att lagra register till stacken.macroSTWALL #except r0, r27, r29, r31 subisp, sp, 32*4# 32 platser stwr1, 4*1(sp) stwr2, 4*2(sp)... stw r25, 4*25(sp) stwr26, 4*26(sp) stwr28, 4*28(sp) stwr30, 4*30(sp).endm

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)33 Nios-II: Macro för att ladda register från stacken.macroLDWALL #except r0, r27, r29, r31 ldwr1, 4*1(sp) ldwr2, 4*2(sp)... ldw r25, 4*25(sp) ldwr26, 4*26(sp) ldwr28, 4*28(sp) ldwr30, 4*30(sp) addisp, sp, 32*4# 32 platser.endm

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)34 Nios-II, Statusregister 0 och 1 status och estatus U PIE PIE = Processor Interrupt Enable (1=enable, 0=disable) U = User Mode (1=User Mode, 0=Supervisor Mode EU EPIE EPIE = Processor Interrupt Enable (1=enable, 0=disable) EU = User Mode (1=User Mode, 0=Supervisor Mode ctl0 - status ctl1 - estatus

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)35 Nios-II Statusregister 3 ienable, ctl3  För var och en av de 32 IRQ-signalerna finns en maskbit vars  värde 0 förbjuder avbrott (disable)  värde 1 tillåter avbrott (enable)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)36 PAUS-RUTA  Snart kommer nästa portion

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)37 2G1518 Datorteknik Föreläsning 9 2. Semaforer (förberedelse till hemlab 3)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)38 Samverkande processer Användning av semaforer vid  Synkronisering  Ömsesidig uteslutning

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)39 Semafor, vad är det  En heltalsvariabel (0, 1, 2, 3 … -1, -2 ??)  (men med) Speciella egenskaper  Operationer (atomära - odelbara)  signal (sem) ~ öka med 1  wait (sem) ~ minska med 1 om det går (annars ”vänta” tills det går)  Binär semafor, kan anta värde 0 eller 1

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)40 Semafor korgbollsanalogi KORG BOLL

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)41 Semafor korgbollsanalogi KORG BOLL SIGNAL är ungefär: Lägg en till boll i korgen (och fortsätt sedan…)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)42 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 …)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)43 Dijkstra  Signal - Verhogen; V(sem)  Wait - Proberen; P(sem)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)44 Samverkan mellan processer med hjälp av semaforer  Synkronisering  Ömsesidig uteslutning (Mutual Exclusion)  Rendez Vous (dubbel synkronisering)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)45 Synkronisering: P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)46 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)47 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)48 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)49 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)50 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)51 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)52 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)53 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)54 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)55 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)56 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)57 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)58 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)59 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)60 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)61 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)62 Ö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”

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)63 Rendez Vous T1 och T2 inväntar varandra innan S1 och S2 exekverar … P1: … signal wait S1 … P2: … signal wait S2 T1: T2:

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)64 Testprogram (hem-laboration 3)  Producers, p stycken, producerar primtal  Consumers, c stycken, konsumerar primtal  FIFO (buffert) med x platser för primtal

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)65 Producer init:tal := start ploop:räkna ut nästa primtal, tal anropa PUT-FIFO (tal) br ploop

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)66 Producer ”NiosII-kod” / makron prod:moviar4, start ploop:callNextPrime# subrutin PUTFIFO# macro brploop

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)67 Consumer init:vid behov ? cloop:anropa GET-FIFO (tal) konsumera primtalet (skrivut tal) brcloop

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)68 Consumer ”Nios-kod” / makron cons:nop cloop:GETFIFO# macro callPrintPrime# subrutin brcloop

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)69 PUT-FIFO  Skriv data till FIFO-buffert  på ett säkert sätt  Det måste finnas minst en ledig plats  ”Samtidig” skrivning är kritisk Vad är det som är kritiskt ? Hantering av skrivpekaren wraddr !

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)70 FIFO Queue, Data Structure (jfr med RQ!) wraddr: rdaddr: fifoend: fifo: ledig upptagen

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)71 FIFO Queue, Data Structure.equnrfifo, 16.data.align4 wraddr:.wordfifo rdaddr:.wordfifo fifo:.fillnrfifo, 4, 0 fifoend:.word

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)72 Nios-II: Subrutinen fifoinit fifoinit:moviar8, fifo moviar9, wraddr moviar10, rdaddr str8, 0(r9) str8, 0(r10) ret

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)73 Nios-II: Subrutinen wrfifo wrfifo:moviar8, wraddr ldwr9, 0(r8) stwr4, 0(r9)# skriv från r4 addir9, r9, 4# öka wraddr moviar10, fifoend bner9, r10, wrend moviar9, fifo wrend:stwr9, 0(r8) ret #OBS ingen kontroll om kön är full

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)74 Nios-II: Subrutinen rdfifo rdfifo:moviar8, rdaddr ldwr9, 0(r8) ldwr2, 0(r9)# skriv från r4 addir9, r9, 4# öka wraddr moviar10, fifoend bner9, r10, rdend moviar9, fifo rdend:stwr9, 0(r8) ret #OBS ingen kontroll om kön är tom

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)75 anrop … wait … wait … wrfifo … signal … signal … retur PUT-FIFO nrempty wrmut nrfull

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)76 ”Nios-kod” för PUTFIFO (bara en massa macron) PUTFIFO:WAITnrempty WAITwrmut callwrfifo SIGNALwrmut SIGNALnrfull RETURN

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)77 Nios-II-kod Macro för System Call.macroSysCallindex moviar4, \index trap.endm

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)78 Nios-II-kod Macro för Wait och Signal.macroSIGNALsem moviar5, \sem SysCall6# trap med 6 i r4.endm.macroWAITsem moviar5, \sem SysCall7# trap med 7 i r4.endm

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)79 GET-FIFO  Läs data från FIFO-buffert  på ett säkert sätt  Det måste finnas minst en upptagen plats  Samtidig läsning är kritisk Vad är det som är kritiskt ? Hantering av rdaddr !

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)80 GET-FIFO nrempty rdmut nrfull retur … signal … signal … rdfifo … wait … wait … anrop

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)81 Nios-kod för GETFIFO (bara en massa macron) GETFIFO:WAITnrfull WAITrdmut callrdfifo SIGNALrdmut SIGNALnrempty RETURN

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)82 CPU-scheduling OS Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 time-slice

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)83 En process kan göra yield  Lämna bort resten av sin time-slice  Speciellt vid wait-operation på semafor  Nästa thread bör få en hel time-slice  Vid en semafor finns ”väntande threads”  En signal kan flytta en thread till RQ  Det finns olika varianter vid signal (vilken tråd ska fortsätta efter signal ?)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)84 Några sidor om  SIGNAL som System Call med TRAP 6  WAIT som System Call med TRAP 7  YIELD som System Call med TRAP 8  EXIT som System Call med TRAP 9  Nios-II-kod för signal, wait och yield ...

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)85 Signal med Nios-II-kod pekare till semafor i r5 # Om anrop görs med SysCall 6 är PIE redan= 0 #DI# enter critical trap6:ldwr24, 0(r5)# hämta värde addir24, r24, 1# lägg till en boll stwr24, 0(r5)# skriv värde #EI# NEJ ! eret# medför även EI

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)86 Wait med Nios-II-kod pekare till semafor i r5  Om anrop görs med TRAP7 är PIE redan =0 trap7: ldwr24, 0(r5)# läs nytt semaforvärde bgtr24, r0, ball# hopp om minst en boll noball:PUSHCTL 1# skydda estatus PUSHr29# skydda ea EI# släpp in TimerInt, OBS OBS ! # YIELD# om så önskas med SysCall 8 DI# hindra TimerInt POPr29# återställ ea POPCTL 1# återställ estatus brtrap7# och leta boll igen ball:subir24, r24, 1# ta en boll stwr24, 0(r5)# semaforvärde skrivs tillbaks eret# medför även EI

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)87 Program-Kod för context switch (uppdaterad repris) contextswitch: pushr31# skydda returadress i r31/ra call PCBSAVE# spara PCB på lokal stack move r4, sp# kopiera sp till r4 call RQPUT# skriv sp i Ready Queue # här görs ”språnget” mellan 2 processer/trådar exit:call RQGET # läs ny sp från Ready Queue move sp, r2# kopiera r2 till sp call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31/ra... cswret:popr29# återställ returadress/ea eret# tillbaks till utvald tråd/process

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)88 Yield med Nios-kod  YIELD-anrop görs med TRAP 8  TRAP 8 görs med SysCall 8  Vad ska utföras av YIELD ?  Samma sak som context switch !

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)89 Kod för YIELD Hit kommer man efter YIELD-anrop och det ska göras Context Switch (Timern ska justeras till hel time-slice …) trap8: pushr29 brcontextswitch

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)90 EXIT med Nios-kod  EXIT-anrop görs med TRAP (t.ex TRAP9)  TRAP 9 görs med SysCall 9  Vad ska utföras av EXIT ?  Tråden ska ej placeras i RQ !

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)91 Kod för EXIT Hit kommer man efter EXIT-anrop och det ska göras Context Switch ( Timern ska justeras till hel time-slice …) trap9: brexit

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)92 Hem-laboration 3 ingår i kursen våren 2006  Material ingår i tentamen (se extentor)  Lab-PM finns på hemsidan  Labben körs på MIPS-simulatorn !  Labben ska redovisas muntligt  Ensam eller i grupp om 2 (ev 2 grupper)

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)93 Hem-laboration 3 CPU-scheduling / semaforer  Idle-tråd kan göra Yield  Producer skriver primtal till FIFO  Consumer läser primtal från FIFO  Antal Producers varieras  Antal Consumers varieras  Antal platser i FIFO varieras  Beteende vid WAIT varieras

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)94 OS Idle (gör inte yield) Prod 1 time-slice Round Robin CPU-scheduling Idle-tråd och en Producer Idle tar cirka 50% av tiden Prod 1 får cirka 50% av tiden

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)95 OS Idle (Idle gör yield) Prod 1 time-slice Round Robin CPU-scheduling Idle-tråd och en Producer Idle tar cirka 0% av tiden Prod 1 får nästan 100% av tiden

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)96 OS Idle (gör yield) Proc 1 Proc 2 Proc 3 time-slice Round Robin CPU-scheduling Idle-tråd och tre Processer Proc 1 får cirka 33% av tiden

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)97 OS Idle Proc 1 Proc 2 Proc 3 Proc 4 Proc 5 time-slice Round Robin CPU-scheduling Idle-tråd och fem Processer Proc 1 får cirka 20% av tiden

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)98 CPU-scheduling endast Idle-tråd OS Idle time-slice Round Robin Idle får cirka 100% av tiden

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)99 Med time-slice 10 millisekunder Hur många instruktioner? $Antag 1 GHz processor $Antag 1 instruktion per CPU-cykel $ instruktioner per sekund $ instruktioner per millisekund $ instruktioner per time slice

4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)100 Windows OS ctrl-alt-del öppnar Windows Task Manager Klicka på Processes och studera längst ner:... System Idle Process SYSTEM många%