Jonny Karlsson 4.10.2005 PROCESSPROGRAMMERING Föreläsning 6 (4.10.2005) Innehåll: - Förening av dataströmmar -Blockerande I/O multiplexering -Icke blockerande.

Slides:



Advertisements
Liknande presentationer
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Advertisements

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 1 ( ) Innehåll: -Introduktion av kursen -Program och processer -Fildeskriptorer -Filhantering.
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
Filhantering Grundprincipen för filhantering Öppna filen
Arrays Indicerade variabler.
C-programmering ID120V William Sandqvist Länkad lista
Distribuerade filsystem
Växjö 15 april -04Språk & logik: Reguljära uttryck1 DAB760: Språk och logik 15/4: Finita automater och 13-15reguljära uttryck Leif Grönqvist
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 7: Deadlocks.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
PROCESSPROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Word Read Plus 08 talsyntes
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
Programmeringsteknik
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: -Programmerade rörledningar -Namngivna rörledningar.
OCR-hantering, betalningsuppföljning, bokföring, uppföljning
William Sandqvist C:s minnesmodell.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering.
Modulär programutveckling
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -IPC: Semaforer -Exekveringstrådar (threads) -Introduktion till Java.
Array. Vad är en array? En variabel som kan innehålla flera värden ◦ $age[’Max’] = 17; ◦ $age[’Simon’] = 17; ◦ $age[’Teo’] = 16; ◦ $age[’Ehnborg’] = 16;
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 12 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
Föreläsning 14 ”Enkel” Filhantering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 11 ( ) Innehåll: - Förmedling av fildeskriptorer.
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.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 5 ( ) Innehåll: -Signaler -Signalhantering.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 5 ( ) Innehåll: IPC: meddelandeköer IPC: delat minne.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska operatorer och logiska uttryck -Referenstyper.
1 Sockets Traditionellt har UNIX varit svag på IPC, InterProcess Communication. I augusti 1983 kom en ny IPC-mekanism i 4.2BSD som var enkel om konsistent.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
Programmeringsteknik Föreläsning 17 Skolan för Datavetenskap och kommunikation.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -IPC: Meddelandeköer.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( ) Innehåll: -Fildeskriptorer -Filhantering -Felhantering.
Föreläsning2 Operativsystem.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( )‏ Innehåll:  Att designa parallella program - manuell vs. automatisk parallellisering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Uppstart iPad Höörs kommun.
Hämta och installera Disgen 2016
Digitalteknik 3p - Kombinatoriska Byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: - Förening av dataströmmar -Blockerande I/O multiplexering -Icke blockerande I/O multiplexering med signalering

Jonny Karlsson Förening av dataströmmar Systemanrop i UNIX kan delas in i två kategorier: Långsamma systemanropKan blockera en process för alltid Övriga systemanropBlockerar ej Exempel på systemanrop som kan blockera för alltid: Läsoperationer, om data saknas Skrivoperation, om data inte kan accepteras Öppningsoperationer (t.ex. FIFO)

Jonny Karlsson Förening av dataströmmar Exempel: Läsning av en rörlednings dataström som visas på skärmen while(..) { read(pd[0], buf, sizeof(buf)); printf(”%s”, buf); }

Jonny Karlsson Förening av dataströmmar Exempel2:Läsning av två rörledningars dataströmmar som förenas och visas på bildskärmen Lösning1:Blockerande I/O multiplexering med systemanropet select() Lösning2:Icke-blockerande I/O multiplexering med signalering

Jonny Karlsson Blockerande I/O multiplexering Systemanropet select(): #include #include <unistd.h int select(int maxdeskr, fd_set *readDeskrSet, fd_set *writeDeskrSet, fd_set *exceptDeskrSet, struct timeval *tvptr); maxdeskrDet maximala deskriptorvärdet för de deskriptorer som skall ”lyssnas på” + 1 readDeskrSetPekare på en post innehållande de deskriptorer som skall ”lyssnas på” när man kollar om en deskr. är redo för avläsning. writeDeskrSetPekare på en post innehållande de deskriptorer som skall ”lyssnas på” när man kollar om en deskr. är redo för skrivning.

Jonny Karlsson Blockerande I/O multiplexering exeptDeskrSetPekare på en post innehållande de deskriptorer som skall ”lyssnas på” när man kollar om en deskr. har hamnat i ett undantagstillstånd (t.ex. uppstått ett fel) tvptrEn post som definierar den tid select() skall blockera processen och vänta på en aktiv deskriptor innan programmet går vidare struct timeval { long tv_sec;/*sekunder*/ long tv_usec;/*millisekunder*/ } ReturnerarReturnerar antalet aktiva deskriptorer (antalet deskriptorer som är redo för läsning/skrivning eller förorsakat ett fel

Jonny Karlsson Blockerande I/O multiplexering Argumenten som ges till systemanropet select() berättar för kerneln: vilka deskriptorer vi är intresserade av vilka tillstånd hos varje deskriptor vi är intresserade av (läsa, skriva, undantag) Hur länge vi vill vänta (inte alls, en viss tid eller för alltid) När select() returnerar berättar kerneln för oss: Det totala antalet deskriptorer som är ”klara” Vilka deskriptorer som är ”klara” för vilket tillstånd (läsa, skriva, undantag) Om select returnerar ett värde > 0 vet vi att en eller flera deskriptorer är ”redo” för ett visst tillsånd och vi kan därefter kalla på lämpligt systemanrop (oftast read eller write) och samtidigt vara säkra på att processen inte blockeras

Jonny Karlsson Blockerande I/O multiplexering Det finns fyra definierade macron för hantering av fd_set poster: FD_ZERO(fd_set *fdset)Tömmer posten FD_SET(int deskr, fd_set *fdset);Sätter till en deskriptor i posten som skall övervakas FD_CLR(int deskr, fd_set *fdset);Tar bort en deskriptor ur posten FD_ISSET(int deskr, fd_set *fdset);Blir ”true” om deskriptorn man ger som första parameter är ”redo”

Jonny Karlsson Blockerande I/O multiplexering Principen för användning av fd_set poster och select(): 1.Deklarera deskriptorer och fd_set poster 2.Nolla fd_set posterna med FD_ZERO() 3.Addera alla deskriptorer man vill testa till en fd_set post med FD_SET() 4.Låt select() vänta på aktiva deskriptorer 5.Testa vilken deskriptor som blev ”klar” med FD_ISSET() 6.Läs data från respektive ”klar” deskriptor Första parametern i select() är ett avgränsarvärde som definierar det maximala värdet för en deskriptor som skall övervakas + 1.  Exempel 1

Jonny Karlsson Icke-blockerande I/O multiplexering med signalering Signaler kan utnyttjas för att uföra asynkron multiplexering av dataströmmar. Behövs två inställningar för varje deskriptor som skall övervakas: 1.Deskriptorn måste sättas i icke-blockerande läge 2.Kerneln skall generera signalen SIGPOLL när en deskriptor som övervakas blir ”redo”. Systemanropet fcntl() kan användas för att ändra ”läget” hos en deskriptor fcntl(deskr, F_SETFL, O_NONBLOCK)//hissar flaggen O_NONBLOCK hos //deskriptorn deskr För mera information om systemanropet fcntl, se man-fil.

Jonny Karlsson Icke-blockerande I/O multiplexering med signalering Systemanropet ioctl() kan användas för att berätta åt kerneln att generera en viss signal vid ett visst tillstånd hos en övervakad deskriptor ioctl(deskr, I_SETSIG, S_RDNORM)//genererar SIGPOLL när en deskriptor är redo //för avläsning För mera information om systemanropet ioctl, se man-fil. När signalen SIGPOLL genererats måste alla övervakade deskriptorer testas (t.ex. läsas med read) eftersom man inte kan veta vilken deskriptor som orskakat SIGPOLL. Eftersom read inte i detta fall får blockera processen om inget data finns att hämta, måste läsdeskriptorn vara i oblockerande läge. SIGPOLL signalen måste fångas upp, annars avbryts programmet när den första deskriptorn blir aktiv

Jonny Karlsson Icke-blockerande I/O multiplexering med signalering Systemanropet pause() används för att frysa processen tills en eller flera deskriptorer blir aktiva. Principen för asynkron multiplexering: 1.Deklarera och skapa deskriptorerna 2.Definiera en signaluppfångare för signalen SIGPOLL 3.Ställ in deskriptorerna i icke-blockerande läga 4.Aktivera signalen SIGPOLL för varje aktiv deskriptor 5.Vänga på signalen (som informerar om att en deskriptor blivit aktiv) med pause() 6.Testa varje deskriptor genom att försöka läsa ur dem.  Exempel 2