Jonny Karlsson 11.10.2005 PROCESSPROGRAMMERING Föreläsning 7 (11.10.2005) Innehåll: -IPC: Meddelandeköer.

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
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.
Manual för älgdatabasen i
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 1 ( ) Innehåll: -Introduktion av kursen -Program och processer -Fildeskriptorer -Filhantering.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
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
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
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.
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
C-programmering ID120V William Sandqvist Länkad lista
Programmeringsteknik K och Media
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
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.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 11 Arrayer.
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
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.
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.
Vektorer (klassen Vector) Sortering
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.
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 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.
Modulär programutveckling
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
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.
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.
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.
6558/G558 DATAKOMMUNIKATION Ruttning. Algoritmer –hur bygger man ruttningstabeller? –Distansvektoralgoritmen –Länktillståndsalgoritmen Skalning.
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.
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
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
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.
INTRODUKTION TILL PROGRAMMERING
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.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Operativsystem - Processkommunikation
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.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
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 )
Python.
Presentationens avskrift:

Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 7 ( ) Innehåll: -IPC: Meddelandeköer

Jonny Karlsson IPC IPC = Inter Process Communication En samling systemanrop för processkommunikation Innehåller tre slags kommunikationsverktyg: Meddelande köer ”message queue” Delat minne”shared memory” Semaforer”semaphores”

Jonny Karlsson Meddelandeköer En meddelandekö är en länkad lista som kan bestå av ett visst antal meddelanden. Meddelanden som sätts in i en meddelandekö sparas i datorns minne och Kerneln sköter om köhanteringen. Ett meddelande som finns i en meddelandkö bör ha tre egenskaper: 1.Data 2.En längd 3.Ett typ-värde En meddelandekö avviker från algoritmen för en vanlig kö eftersom man nödvändigtvis inte måste avhämta data från ena ändan av kön. Man kan istället hämta ett meddelande på basen av meddelandets typ

Jonny Karlsson Meddelandeköer Figur. Exempel på kommunikation mellan två processer via en meddelandkö

Jonny Karlsson Skapa/ta i bruk en meddelandekö Systemanropet msgget() #include #include <sys/msg.h int msgget(key_t key, int flag); keyEtt heltal som karakteriserar en existerande meddelandekö flagEtt heltal som vanligen byggs upp med ”bitwise or”-operatorn: Komponenter: skyddskod|symboliskt ”kommandovärde” 0777|IPC_CREATFulla rättigheter och skapar kön om den ej finns, om kön finns tas den existerande kön i bruk. 0777|IPC_EXECL’’ och skapar kön om dej ej finns. Om kön finns misslyckas msgget() ReturnerarID för meddelandenkön

Jonny Karlsson Skapa/ta i bruk en meddelandekö Process 1: #define MSGKEY 75 int koID; koID = msgget(MSGKEY,0777|IPC_CREAT); Process 2: #define MSGKEY 75 int koID; koID = msgget(MSGKEY,0777|IPC_CREAT); Ex. Två processer om skapar och tar i bruk en och samma meddelandekö. Ena processen skapar (Den som exekveras först) och den andra tar i bruk.

Jonny Karlsson Skicka data till en meddelandekö #include #include int msgsnd(int koID, const void *msgptr, size_t msgsize, int flag); koIDMeddelandeköns ID msgptrEn pekare på en post innehållande data och meddelandetyp (  ) msgsizeAnger meddelandets längd i byte flagHeltal som definierar åtgärd ifall meddelandet inte ryms i kön: flag = 0 Väntar till det finns plat i kön flag = IPC_NOWAITmsgsnd() misslyckas Returnerar0 vid framgång -1 vid misslyckande

Jonny Karlsson Skicka data till en meddelandekö  Andra parametern i msgsnd() är en pekare på en post som bör vara av följande typ: struct meddelandeformat { long mdlTyp; char text[size]; }; mdlTypEtt heltalsvärde > 0 som definierar meddelandets typ textMeddelandet som en teckensträng

Jonny Karlsson Skicka data till en meddelandekö #define maxsize 10 struct mdlformat { long mdltyp; long mdltyp; char text[maxsize]; char text[maxsize];}; struct mdlformat mdlpost; mdlpost.mdltyp = 1; strcpy(mdlpost.text, ”text”); msgsnd(koID, &mdlpost, maxsize, 0); Ex. Skickar ett meddelande av typ 1 innehållande en teckensträng till en meddelandkö med ID=koID. Processen väntar tills meddelandet får plats i kön.

Jonny Karlsson Ta emot data från en meddelandekö #include #include int msgrcv(int koID, const void *msgptr, size_t maxsize, long msgtyp, int flag); koIDMeddelandeköns ID msgptrEn pekare på en post innehållande data och meddelandetyp maxsizeMottagna meddelandets maximala längd msgtypBetecknar typed på det meddelande som skall tas emot: msgtyp = 0Tar emot första meddelandet i kön msgtyp > 0Tar emot ett meddelande med angiven typ som är först i kön msgtyp < 0Tar emot första meddelandet med minsta typ- värde eller lika med det absoluta typ-värdet

Jonny Karlsson Ta emot data från en meddelandekö flagDefinierar ågärd ifall kön är tom eller meddelandets längd > maxsize: 0Blir och vänta på ett meddelande av rätt typ, msgrcv() misslyckas om meddelandets längd > maxsize IPC_NOWAITmsgrcv() misslyckas om data med rätt typ inte finns att hämta i kön MSG_NOERROREtt överlångt meddelande förkortas till maxsize

Jonny Karlsson Ta emot data från en meddelandekö #define maxsize 10; struct mdlformat { long mdltyp; long mdltyp; char text[maxsize]; char text[maxsize];}; struct mdlformat mdlpost: msgrcv(koID, &mdlpost, maxsize, 1, IPC_NOWAIT); Ex. Tar emot första meddelandet av typ 1 från en meddelandkö med ID=koID. Om inget meddelande av typ 1 finns att hämta ur meddelandkön misslyckas msgrcv (returnerar -1)

Jonny Karlsson Hantering av en meddelandekö Varje meddelandkö är associerad med struktur (struct) som definierar meddelandköns egenskaper: struct msqid_ds { struct ipc_perm msg_perm; //IPC-rättigheter struct msg *msg_first; //Pekare på första msg struct msg *msg_last; //Pekare på sista msg ulong msg_cbytes; //Köstorlek (bytes) ulong msg_qnum; //Antal msg i kön ulong msg_qbytes;//Maximal köstorlek pid_t msg_lspid; //Senaste msgsnd() PID pid_t msg_lrpid; //Senaste msgrcv() PID time_t msg_stime; //Senaste msgsnd() tid time_t msg_rtime; //Senaste msgrcv() tid time_t msg_ctime; //Senaste ändring (tid) }

Jonny Karlsson Hantering av en meddelandekö #include #include int msgctl(int koID, int cmd, struct msqid_ds *buf); koIDMeddelandköns ID cmdEtt heltal som definierar hanteringens åtgärd: cmd = IPC_RMIDMeddelandkön raderas (buf saknar här bet.) cmd = IPC_STATMeddelandköns statusinfo kopieras till fältena i den post som utpekas av buf cmd = IPC_SETMeddelandköns status ställs in enligt fältena i den post som buf adresserar bufPekare på en post av typ struct_msqid_ds

Jonny Karlsson Hantering av en meddelandekö struct msqid_ds kohant; msgctl(koID, IPC_STAT, &kohant) printf(”%d\n”, kohant.msg_qnum); Ex. Skriver ut på skärmen antalet meddelanden som finns i meddelandkön med ID=koID