1 / 15

PROCESSPROGRAMMERING

PROCESSPROGRAMMERING. Föreläsning 7 (11.10.2005) Innehåll: IPC: Meddelandeköer. 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”

cliff
Télécharger la présentation

PROCESSPROGRAMMERING

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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 11.10.2005

  3. 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: • Data • En längd • 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 11.10.2005

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

  5. Skapa/ta i bruk en meddelandekö Systemanropet msgget() #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h int msgget(key_t key, int flag); key Ett heltal som karakteriserar en existerande meddelandekö flag Ett heltal som vanligen byggs upp med ”bitwise or”-operatorn: Komponenter: skyddskod|symboliskt ”kommandovärde” 0777|IPC_CREAT Fulla 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() Returnerar ID för meddelandenkön Jonny Karlsson 11.10.2005

  6. Skapa/ta i bruk en meddelandekö 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 11.10.2005

  7. Skicka data till en meddelandekö #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgsnd(int koID, const void *msgptr, size_t msgsize, int flag); koID Meddelandeköns ID msgptr En pekare på en post innehållande data och meddelandetyp () msgsize Anger meddelandets längd i byte flag Heltal som definierar åtgärd ifall meddelandet inte ryms i kön: flag = 0 Väntar till det finns plat i kön flag = IPC_NOWAIT msgsnd() misslyckas Returnerar 0 vid framgång -1 vid misslyckande Jonny Karlsson 11.10.2005

  8. 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]; }; mdlTyp Ett heltalsvärde > 0 som definierar meddelandets typ text Meddelandet som en teckensträng Jonny Karlsson 11.10.2005

  9. Skicka data till en meddelandekö 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 11.10.2005

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

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

  12. Ta emot data från en meddelandekö 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 11.10.2005

  13. 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 11.10.2005

  14. Hantering av en meddelandekö #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgctl(int koID, int cmd, struct msqid_ds *buf); koID Meddelandköns ID cmd Ett heltal som definierar hanteringens åtgärd: cmd = IPC_RMID Meddelandkön raderas (buf saknar här bet.) cmd = IPC_STAT Meddelandköns statusinfo kopieras till fältena i den post som utpekas av buf cmd = IPC_SET Meddelandköns status ställs in enligt fältena i den post som buf adresserar buf Pekare på en post av typ struct_msqid_ds Jonny Karlsson 11.10.2005

  15. Hantering av en meddelandekö Ex. Skriver ut på skärmen antalet meddelanden som finns i meddelandkön med ID=koID Jonny Karlsson 11.10.2005

More Related