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.

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.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
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.
Funktioner och programorganisation
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
1 Liten summering: 1.Adress: ’ För att logga in på wlanet med bibliotekskortet är lösen = ’1111’. Kortnummer står på kortet! 2.Välj ’Admin’
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.
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
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ö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
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.
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.
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
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.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
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 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.
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.
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)
31 July 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
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.
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.
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.
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.
Validera hjärtstartare i Sveriges Hjärtstartarregister
Presentationens avskrift:

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 3) för IT/ME och Hing/Kand

2 June 2015IS1200, Förel 9, vt08 (Kista)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 IS1200 Datorteknik

2 June 2015IS1200, Förel 9, vt08 (Kista)3 IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling (förberedelse till hemlab 3)

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)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...

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)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 …# kvittera timern med mera ”cmpcond r24, ri, rj”# har det gått en time-slice bner24, r0,contextswitch# så gör contextswitch # annars... cswret: eret# tillbaks till samma tråd/process

2 June 2015IS1200, Förel 9, vt08 (Kista)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: eret# tillbaks till utvald tråd/process

2 June 2015IS1200, Förel 9, vt08 (Kista)9 Nios-II Process Control Block - PCB Thread Control Block - TCB r1—r23 r26 (gp) r28 (fp) sp r31 #returadress r29 (ea)

2 June 2015IS1200, Förel 9, vt08 (Kista)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!) )

2 June 2015IS1200, Förel 9, vt08 (Kista)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 !

2 June 2015IS1200, Förel 9, vt08 (Kista)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 !

2 June 2015IS1200, Förel 9, vt08 (Kista)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 !

2 June 2015IS1200, Förel 9, vt08 (Kista)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)

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)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)

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)19 Ready Queue, Data Structure Circular Buffer, FIFO wraddr: rdaddr: rqend: queue: ledig upptagen Utanför queue

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)21 Ready Queue, Data Structure Circular Buffer, FIFO wraddr: rdaddr: rqend: queue: ledig upptagen Utanför queue

2 June 2015IS1200, Förel 9, vt08 (Kista)22 Nios-II: Subrutinen rqinit rqinit:moviar8, queue moviar9, wraddr moviar10, rdaddr str8, 0(r9) str8, 0(r10) ret

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)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: eret# tillbaks till utvald tråd/process

2 June 2015IS1200, Förel 9, vt08 (Kista)26 Kod för context switch mer liknande lab-PM contextswitch: pushr31# skydda returadress i r31 call PCBSAVE# spara PCB på lokal stack move r4, sp# kopiera sp till r4 call oslab_internal_threadswitch # RQPUT och RQGET i C-kod move sp, r2# kopiera r2 till sp call PCBUNSAVE # kopiera PCB till processorn popr31# återställ r31 cswret: eret# tillbaks till utvald tråd/process

2 June 2015IS1200, Förel 9, vt08 (Kista)27 Nios-II (repris) Process Control Block - PCB Thread Control Block - TCB r1—r23 r26 (gp) r28 (fp) sp r31 #returadress r29 (ea)

2 June 2015IS1200, Förel 9, vt08 (Kista)28 Nios-subrutin spara PCB å stacken PCBSAVE: PUSHALL# r29, r1-23, 26, 28 ret# jmp r31 PCBUNSAVE: POPALL# r29, r1-23, 26, 28 ret# jmp r31

2 June 2015IS1200, Förel 9, vt08 (Kista)29 Nios-II: Macro för att pusha register på stacken.macroPUSHALL #r29, r1-r23, r26, r28 pushr29 pushr1 pushr2... pushr23 pushr26 pushr28.endm

2 June 2015IS1200, Förel 9, vt08 (Kista)30 Nios-II: Macro för att poppa register på stacken.macroPOPALL #r29, r1-r23, r26, r28 popr28 popr26 popr23... popr2 popr1 popr29.endm

2 June 2015IS1200, Förel 9, vt08 (Kista)31 Nios-II: Macro för att lagra register till stacken.macroSTWALL # r1-r23, r26, r28 subisp, sp, 26*4# 26 platser stwea, 4*0(sp)# r29 = ea stwr1, 4*1(sp) stwr2, 4*2(sp)... stw r23, 4*23(sp) stwr26, 4*24 (sp)# r24 = gp stwr28, 4*25 (sp)# r26 = fp.endm

2 June 2015IS1200, Förel 9, vt08 (Kista)32 Nios-II: Macro för att ladda register från stacken.macroLDWALL #r1-r23, r26, r28 ldwea, 4*0(sp)# r29 = ea ldwr1, 4*1(sp) ldwr2, 4*2(sp)... ldw r23, 4*23(sp) ldwr26, 4*24(sp) ldwr28, 4*25(sp) addisp, sp, 26*4# 26 platser.endm

2 June 2015IS1200, Förel 9, vt08 (Kista)33 PAUS-RUTA  Snart kommer nästa portion

2 June 2015IS1200, Förel 9, vt08 (Kista)34 2G1518 Datorteknik Föreläsning 9 2. Semaforer (förberedelse till hemlab 3)

2 June 2015IS1200, Förel 9, vt08 (Kista)35 Samverkande processer Användning av semaforer vid  Synkronisering  Ömsesidig uteslutning

2 June 2015IS1200, Förel 9, vt08 (Kista)36 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

2 June 2015IS1200, Förel 9, vt08 (Kista)37 Semafor korgbollsanalogi KORG BOLL

2 June 2015IS1200, Förel 9, vt08 (Kista)38 Semafor korgbollsanalogi KORG BOLL SIGNAL är ungefär: Lägg en till boll i korgen (och fortsätt sedan…)

2 June 2015IS1200, Förel 9, vt08 (Kista)39 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 …)

2 June 2015IS1200, Förel 9, vt08 (Kista)40 Dijkstra  Signal - Verhogen; V(sem)  Wait - Proberen; P(sem)

2 June 2015IS1200, Förel 9, vt08 (Kista)41 Samverkan mellan processer med hjälp av semaforer  Synkronisering  Ömsesidig uteslutning (Mutual Exclusion)  Rendez Vous (dubbel synkronisering)

2 June 2015IS1200, Förel 9, vt08 (Kista)42 Synkronisering: P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)43 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)44 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)45 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)46 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)47 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)48 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)49 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)50 Synkronisering P1 i T1 krävs före P2 i T2 … P1: … signal … wait P2: … T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)51 Ö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”

2 June 2015IS1200, Förel 9, vt08 (Kista)52 Ö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”

2 June 2015IS1200, Förel 9, vt08 (Kista)53 Ö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”

2 June 2015IS1200, Förel 9, vt08 (Kista)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”

2 June 2015IS1200, Förel 9, vt08 (Kista)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”

2 June 2015IS1200, Förel 9, vt08 (Kista)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”

2 June 2015IS1200, Förel 9, vt08 (Kista)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”

2 June 2015IS1200, Förel 9, vt08 (Kista)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”

2 June 2015IS1200, Förel 9, vt08 (Kista)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”

2 June 2015IS1200, Förel 9, vt08 (Kista)60 Rendez Vous T1 och T2 inväntar varandra innan S1 och S2 exekverar … P1: … signal wait S1 … P2: … signal wait S2 T1: T2:

2 June 2015IS1200, Förel 9, vt08 (Kista)61 Testprogram (hem-laboration 3)  Producers, p stycken, producerar primtal  Consumers, c stycken, konsumerar primtal  FIFO (buffert) med x platser för primtal

2 June 2015IS1200, Förel 9, vt08 (Kista)62 Producer init:tal := start ploop:räkna ut nästa primtal, tal anropa PUT-FIFO (tal) br ploop

2 June 2015IS1200, Förel 9, vt08 (Kista)63 Producer ”NiosII-kod” / makron prod:moviar4, start ploop:callNextPrime# subrutin PUTFIFO# macro brploop

2 June 2015IS1200, Förel 9, vt08 (Kista)64 Consumer init:vid behov ? cloop:anropa GET-FIFO (tal) konsumera primtalet (skrivut tal) brcloop

2 June 2015IS1200, Förel 9, vt08 (Kista)65 Consumer ”Nios-kod” / makron cons:nop cloop:GETFIFO# macro callPrintPrime# subrutin brcloop

2 June 2015IS1200, Förel 9, vt08 (Kista)66 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 !

2 June 2015IS1200, Förel 9, vt08 (Kista)67 FIFO Queue, Data Structure (jfr med RQ!) wraddr: rdaddr: FifoEnd: Fifo: ledig upptagen

2 June 2015IS1200, Förel 9, vt08 (Kista)68 FIFO Queue, Data Structure.equFifoSize, 16.data.align4 wraddr:.wordFifo rdaddr:.wordFifo Fifo:.fillFifoSize, 4, 0 FifoEnd:.word

2 June 2015IS1200, Förel 9, vt08 (Kista)69 FIFO Queue, Data Structure #defineFifoSize16 intFifo[FifoSize] ; intwraddr = 0 ; intrdaddr = 0 ;

2 June 2015IS1200, Förel 9, vt08 (Kista)70 Nios-II: Subrutinen fifoinit FifoInit:moviar8, Fifo moviar9, wraddr moviar10, rdaddr str8, 0(r9) str8, 0(r10) ret

2 June 2015IS1200, Förel 9, vt08 (Kista)71 C-code: skriv tal till Fifo-buffert C-code: läs till tmp från Fifo-buffert /*skriv tal*/ Fifo[wraddr] = tal; wraddr = wraddr + 1; if (wraddr == FifoSize) wraddr = 0; /*läs tal till tmp*/ tmp = Fifo[rdaddr] ; rdaddr = rdaddr + 1; if (rdaddr == FifoSize) rdaddr = 0;

2 June 2015IS1200, Förel 9, vt08 (Kista)72 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

2 June 2015IS1200, Förel 9, vt08 (Kista)73 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

2 June 2015IS1200, Förel 9, vt08 (Kista)74 anrop … wait … wait … wrfifo … signal … signal … retur PUT-FIFO nrempty wrmut nrfull

2 June 2015IS1200, Förel 9, vt08 (Kista)75 ”Nios-kod” för PUTFIFO (bara en massa macron) PUTFIFO:WAITnrempty WAITwrmut callwrfifo SIGNALwrmut SIGNALnrfull RETURN

2 June 2015IS1200, Förel 9, vt08 (Kista)76 Nios-II-kod Macro för System Call.macroSysCallindex moviar4, \index trap.endm

2 June 2015IS1200, Förel 9, vt08 (Kista)77 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

2 June 2015IS1200, Förel 9, vt08 (Kista)78 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 !

2 June 2015IS1200, Förel 9, vt08 (Kista)79 GET-FIFO nrempty rdmut nrfull retur … signal … signal … rdfifo … wait … wait … anrop

2 June 2015IS1200, Förel 9, vt08 (Kista)80 Nios-kod för GETFIFO (bara en massa macron) GETFIFO:WAITnrfull WAITrdmut callrdfifo SIGNALrdmut SIGNALnrempty RETURN

2 June 2015IS1200, Förel 9, vt08 (Kista)81 CPU-scheduling OS Prod 1 Prod 2 Prod 3 Cons 1 Cons 2 time-slice

2 June 2015IS1200, Förel 9, vt08 (Kista)82 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 ?)

2 June 2015IS1200, Förel 9, vt08 (Kista)83 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 ...

2 June 2015IS1200, Förel 9, vt08 (Kista)84 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

2 June 2015IS1200, Förel 9, vt08 (Kista)85 Signal med c-code inpar: pekare till semafor void Signal ( int * sem) { oslab_begin_critical_region() ; *sem = *sem + 1 ; oslab_end_critical_region() ; }

2 June 2015IS1200, Förel 9, vt08 (Kista)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

2 June 2015IS1200, Förel 9, vt08 (Kista)87 Wait med c-code inpar: pekare till semafor void Wait (int * sem) { oslab_begin_critical_region() ; while / *sem <= 0) { oslab_end_critical_region() ; /*os_lab_yield();*/ oslab_begin_critical_region() ; } *sem = *sem -1 ; oslab_end_critical_region() ; }

2 June 2015IS1200, Förel 9, vt08 (Kista)88 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:eret# tillbaks till utvald tråd/process

2 June 2015IS1200, Förel 9, vt08 (Kista)89 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 !

2 June 2015IS1200, Förel 9, vt08 (Kista)90 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

2 June 2015IS1200, Förel 9, vt08 (Kista)91 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 !

2 June 2015IS1200, Förel 9, vt08 (Kista)92 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

2 June 2015IS1200, Förel 9, vt08 (Kista)93 Hem-laboration 3  Material ingår i tentamen (se extentor)  Lab-PM finns på hemsidan  Labben körs på NiosII-simulatorn !  Labben ska redovisas muntligt  Ensam eller i grupp om 2 (ev 2 grupper)

2 June 2015IS1200, Förel 9, vt08 (Kista)94 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

2 June 2015IS1200, Förel 9, vt08 (Kista)95 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

2 June 2015IS1200, Förel 9, vt08 (Kista)96 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

2 June 2015IS1200, Förel 9, vt08 (Kista)97 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

2 June 2015IS1200, Förel 9, vt08 (Kista)98 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

2 June 2015IS1200, Förel 9, vt08 (Kista)99 CPU-scheduling endast Idle-tråd OS Idle time-slice Round Robin Idle får cirka 100% av tiden

2 June 2015IS1200, Förel 9, vt08 (Kista)100 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

2 June 2015IS1200, Förel 9, vt08 (Kista)101 Windows OS ctrl-alt-del öppnar Windows Task Manager Klicka på Processes och studera längst ner:... System Idle Process SYSTEM många%

2 June 2015IS1200, Förel 9, vt08 (Kista)102 OS Idle P1 P2 P3 C1 C2 Round Robin CPU-scheduling Exempelsamling uppgift 9.x time-slice