Jonny Karlsson 19.3.2007 PROCESSPROGRAMMERING Föreläsning 6 (19.3.2007) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.

Slides:



Advertisements
Liknande presentationer
ClaroReadPro V5 B engt Österlind Solna Skoldatatek 18 november 2009.
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 1 ( ) Innehåll: -Introduktion av kursen -Program och processer -Fildeskriptorer -Filhantering.
Informationshantering
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.
De fundamentala datatyperna
Filhantering Grundprincipen för filhantering Öppna filen
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
C-programmering ID120V William Sandqvist Länkad lista
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Distribuerade filsystem
DAV B04 - Databasteknik Indexering (kap 14).
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Föreläsning 5.  Idag  Kap 7 i Dawson  Filer  Felhantering med try…except.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
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.
Pekare och speciell programstruktur i inbyggda system
Pathfinding. –Vad är det? –Sökning från A till B.
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.
Tabeller.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Fotosyntesen.
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.
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.
Grundläggande programmering
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering.
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 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.
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 11 ( ) Innehåll: - Förmedling av fildeskriptorer.
Logikprogrammering 21/10 Binära träd
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 5 ( ) Innehåll: IPC: meddelandeköer IPC: delat minne.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska operatorer och logiska uttryck -Referenstyper.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( )‏ Innehåll:  Introduktion till Java EE (Enterprise Edition)  Enterprise Java Beans.
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -IPC: Meddelandeköer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer.
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.
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.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer

Jonny Karlsson En producent och en konsument Konsumenten måste kunna konsumera alla tal som producerats av producenten även om produktionen går snabbare än konsumtionen. Lösning: användning av semaforer (utan semaforskydd skrivs minnesbufferns poster över innan konsumenten hinner läsa alla poster.

Jonny Karlsson En producent och en konsument Det behövs 2 heltalssemaforer TOM initialiseras till N=antalet platser i buffern FULL initialiseras till 0 Pseudokod för producentprocessen: /* delat minne */ int buffer[N], in=0, ut=0; /*semaforer*/ initsemaphore TOM = N; initsemaphore FULL = 0; while(1){ producera(tal); producera(tal); P(TOM); P(TOM); buffer[in] = tal; buffer[in] = tal; in = (in + 1) % N; in = (in + 1) % N; V(FULL); V(FULL);}

Jonny Karlsson En producent och en konsument while(1){ P(FULL); P(FULL); tal = buffer[ut]; tal = buffer[ut]; ut = (ut + 1)%N; ut = (ut + 1)%N; V(TOM); V(TOM);} Pseudokod för konsumentprocessen:

Jonny Karlsson Flera konsumenter och producenter Problem:Alla producenter använder samma index-variabel för att placera heltal i kön. Alla konsumenter använder samma index-variabel för att hämta heltal från kön. Lösning:Använd en binär semafor för att kontrollera att endast en producent kommer åt kön/minnesbuffern på en samtidigt. Använd likaså en binär semafor för att kontrollera att endast en konsument får läsa värden ur kön samtidigt.

Jonny Karlsson Flera konsumenter och producenter /* delat minne */ int buffer[N],in=0,ut=0; /* 4 semaforer /* initsemaphore TOM=N; initsemaphore FULL=0; initsemaphore SEMIN=1; initsemaphore SEMUT=1; while(1) { producera(tal); P(TOM); P(SEMIN); buffer[in]=tal; in=(in+1)%N; V(SEMIN); V(FULL); } Pseudokod för producent-processerna:

Jonny Karlsson Flera konsumenter och producenter while(1) { P(FULL); P(SEMUT); tal = buffer[ut]; ut=(ut+1)%N; V(SEMUT); V(tom); konsumera(tal); } Pseudokod för producent-processerna: För mer detaljerad beskrivning av konsument-producent probemet se föreläsningskompendium sid 29-31

Jonny Karlsson Förmedling av fildeskriptorer En process skapar en fildeskriptor och den öppna fildeskriptorn skickas över till en/flera andra processer. Mycket användbart vid programmering av klient-server applikationer. Mycket typiskt går det till så att serverprocessen gör allt som behövs för att öppna en fil och sedan skickas den öppna fildeskriptorn över till anropande klientprocesser.

Jonny Karlsson Filhantering Kerneln använder 3 datastrukturer för filhantering och relationerna mellan dessa bestämmer hurdan effekt en process har på en annan vid delning av öppna fildeskriptorer: Processtabell (process table) Filtabell (file table) v-nod tabell (v-node table) Varje process är associerad med en processtabell vilken innehåller en tabell med öppna fildeskriptorer för varje process. Associerade med varje fildeskriptor är: Flaggor för fildeskriptorerna En pekare till en filtabell Kerneln uppehåller en filtabell för alla öppna filer. Varje filtabell innehåller: Filstatusflaggan för filen (read, write, append, nonblocking, m.m.) Nuvarande ”file offset” (bestämmer var följande read/write operation startar) En pekare på v-nod tabellen för filen

Jonny Karlsson Filhantering Varje öppen fil har en v-nod tabell. V-noden innehåller information om filtypen och pekare på funktioner som hanterar filen. V-nod tabellen innehåller även I-nod information vilket berättar bl.a. filägaren och filstorleken.

Jonny Karlsson Fildelning Två processer delar en öppen fil genom att använda två sparata filtabeller (båda processerna skapar en egen fildeskriptor med open())

Jonny Karlsson Fildelning Två processer delar en öppen fil genom att den ena processen skapar fildeskriptorn och överför denna till den andra processen

Jonny Karlsson Överföring av fildeskriptorer Det man egentligen vill åstadkomma vid överföring av fildeskriptorer är att två eller flere processer delar samma filtabell. Det som egentligen sker tekniskt är att man överför en pekare till en filtabell från en process till en annan. Dena pekare får första tillgängliga deskriptorvärde. Observera att båda processerna har inte samma deskriptornummer eftersom de fortfarande har skilda processtabeller. Om ena processen stänger sin fildeskripor är filen ändå fortfarande öppen för den andra processen.

Jonny Karlsson Att sända en fildeskriptor En fildeskriptor kan sändas över till en annan process genom en rörledning genom att använda ioctl() funktionen: ioctl(pd[1], I_SENDFD, deskr); pd[1]Deskriptorn för skrivändan i den rörledning genom vilken deskriptorn skall skickas. I_SENDFDKommandoflagga som berättar att en deskriptor skall skickas. deskrDen fildeskriptor som skall skickas.

Jonny Karlsson Att ta emot en fildeskriptor En fildeskriptor kan tas emot från en annan process från en rörledning genom att använda ioctl() funktionen: ioctl(pd[1], I_RECVFD, &deskrpek); pd[0]Deskriptorn för läsändan i den rörledning varifrån deskriptorn skall tas emot. I_RECVFDKommandoflagga som berättar att en deskriptor skall skickas. deskrpekEn pekare på en post av typen struct strrecvfd (Se nästa slide)

Jonny Karlsson Att ta emot en fildeskriptor struct strrecvfd { int fd;//den nya deskriptorn uid_t uid;//användar ID för avsändaren gid_t gid;//grupp ID för avsändaren char fill[8]; }