Jonny Karlsson 26.2.2008 1 PROCESSPROGRAMMERING Föreläsning 4 (26.2.2008 ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering.

Slides:



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

Intagningssystemets databas Ögonblicksbild Kopia av intagningsdatabasen Uppdateras 3 ggr per dag 07:15 – 12:15 – 15:15 Roller Skola, kommun Periodiseras.
X-mas algebra Är du redo? Klicka!!.
Avlusning Debugger (”avlusare”) Breakpoints Watch.
INTRODUKTION TILL PROGRAMMERING
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
De fundamentala datatyperna
Filhantering Grundprincipen för filhantering Öppna filen
Arrays Indicerade variabler.
Välkommen Vahid Mosavat
Programmeringsteknik K och Media
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
MaB: Andragradsekvationer
INTRODUKTION TILL PROGRAMMERING
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
PROCESSPROGRAMMERING
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; }
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.
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.
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.
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
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 INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
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.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 12 ( ) Innehåll: -Datakanaler och datakanalpar -Kommunikation på samma dator med datakanaler.
Föreläsning 14 ”Enkel” Filhantering.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 2 Skolan för Datavetenskap och kommunikation.
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.
Anders Sjögren ANSI - standard ?. Anders Sjögren ANSI - standard ? Om man skriver ett bra C-program och kompilerar fram ”exe”-filen så vore det ju trevligt.
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.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
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.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -IPC: Meddelandeköer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: - Förening av dataströmmar -Blockerande I/O multiplexering -Icke blockerande.
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.
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.
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering

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

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

4Jonny 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.

5Jonny 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

6Jonny 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

7Jonny 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”

8Jonny 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

9Jonny Karlsson Signaler Signaler är kommunikation utan informationsöverföring, inom en process, eller mellan olika processer. Används för processavbrott, dvs. det normala förloppet hos en process kan avbrytas av en signal. Interna signalerSkapas av en exekverande process t.ex: - felaktig instruktion - skrivning av information i en rörledning vars läsända är stängd Externa signalerSkapas t.ex. från: - tangentbordet, t.ex. ctrl-c - Från andra processer systemanropet kill - Från UNIX kommondoraden med kommandot kill En signal identifieras i unix m.h.a. en signalnummer (positivt heltal)

10Jonny Karlsson Signaler STANDARDISERADE SIGNALER I UNIX (Mer info i föreläsningskompendiet och boken) 1.SIGHUP 2.SIGINTTerminal avbrott. Genereras vanligen med ctrl-c 3.SIGQUIT 4.SIGILLGenereras av ogiltig maskininstruktion 5.SIGTRAP 6.SIGIOT 7.SIGEMT 8.SIGFPE 9.SIGKILLGenereras bl.a. av kill -9 processnummer 10.SIGBUS 11.SIGSEGV 12.SIGSYS 13.SIGPIPEGenereras om en process försöker skriva i en rörledning med stängd läsända 14.SIGALRMGenereras av systemanropet alarm(seconds) efter önskat antal sek. 15.SIGTERMGenereras av UNIX kommandot kill processnummer

11Jonny Karlsson Signalhantering UPPFÅNGNING AV SIGNALER ”signal catching” Varje signal i UNIX har en standard funktion som utförs då signalen genereras En signal kan fångas upp och trigga en egen programmerad funktion eller ignoreras genom med systemanropet signal() #include #include typedef void (*sighandler_t) (int); sighandler_t signal(int signum, sighandler_t handler) signumNumret på en signal som man vill uppfånga handerPekare på en void funktion som skall triggas då signalen uppfångas ReturnerarVärdet för den förra ”signal handlern” eller SIG_ERR vid misslyckande.

12Jonny Karlsson Signalhantering En signal kan ignoreras i en process med: signal(signalnummer, SIG_IGN); Man kan återställa grundinställningen för en signal med: signal(signalnummer, SIG_DFL); Alla signaler förtom SIGKILL kan göras uppfångbara med systemanropet signal() 

13Jonny Karlsson Signalhantering Systemanropet pause() kan användas om man vill att en process skall lämna och vänta på en viss signal: #include #include int pause(void);

14Jonny Karlsson Signalhantering ATT SÄNDA EN SIGNAL FRÅN EN PROCESS TILL EN ANNAN Kan i C-programmet göras med systemanropet kill() #include #include int kill (pid_t pid, int signummer); pidprocessnummer för den process som skall ta emot signalen signummersignalnumret som skall skickas till den andra processen Returnerar0 vid framgång -1 vid misslyckande  Ex. 4