Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Beskeder/beskedkøer Afsender- proces hej Modtager- proces.. msgsnd(..,"hej",..);.. msgrcv(..);.. Afsender skal bl.a. angive den besked der ønskes afsendt.

Lignende præsentationer


Præsentationer af emnet: "Beskeder/beskedkøer Afsender- proces hej Modtager- proces.. msgsnd(..,"hej",..);.. msgrcv(..);.. Afsender skal bl.a. angive den besked der ønskes afsendt."— Præsentationens transcript:

1 Beskeder/beskedkøer Afsender- proces hej Modtager- proces.. msgsnd(..,"hej",..);.. msgrcv(..);.. Afsender skal bl.a. angive den besked der ønskes afsendt adresse = beskedkø Beskedkø kendes kun af processer på maskinen Der sendes ikke acknowledgement Modtagerproces "forbruger" besked ved læsning

2 Opg. 4 / ugeseddel 39 Filosof 0Filosof 4... Grafik- proces Filosoffer kommunikerer indbyrdes for at deles om gaflerne Filosoffer sender beskeder til grafikproces om hvad der ønskes udskrevet på skærmen

3 Interproces-kommunikation (IPC) Den mest naturlige: beskeder Metoder/faciliteter vi har gennemgået tidligere: Filer Semaforer Pipes Andre metoder/faciliteter: Signaler Delt hukommelse mellem separate processer

4 Hvorfor IPC ? Processer har behov for at udveksle information Men processer har ikke umiddelbart adgang til hinandens data. Konkret pga. beskyttelse af processens adresserum. Generelt kan man sige at den enkelte proces tror den har maskinen for sig selv. Eksempler på kommunikation: "boss"-proces sender input data til "worker"-proces 1 proces fortæller ander processer: "jeg er i kritisk region, hold jer væk"

5 Hvorfor overhovedet multiple processer i samme applikation ? Eksempler: browser viser første del af webside før hele siden er kommet frem databasesystem tillader samtidige forespørgsler e-handelssytem tillader samtidige brugere Opgaver, der skal løses samtidigt med andre opgaver, placeres i separat proces. Administration af samtidighed overlades til operativsystem Programmet for den enkelte opgave kan skrives som om programmet havde maskinen for sig selv. Bortset altså fra nødvendigheden af IPC !

6 Separate processer vs. eksplicit programmering af fordeling af cpu-tid while (TRUE) { {for PH = philosopher 0,1,2,4 do} run_philosopher_for_0.1_sec(PH); }; } // ?? Hvordan vides hvor hvor delopgave er kommet til (hvilken programlinje) ? Hvordan undgås tidsspilde pga. blokering ? Teknisk set måske muligt, men vanvittig kompliceret.

7 Beskeder/beskedkøer ….. msgsnd(..);.. msgrcv(..);.. Afsender skal angive - adresse (kø) & indhold - længde af besked - prioritet - flag som styrer opførsel i specialtilfælde

8 C-strukturer til beskeder // Simpel besked struct besked { long int prioritet; char txt[40]; }.. struct besked min_besked = {0,"Filosof 3 har gaffel 2 og 3"};.. msgsnd(,(void *)&min_besked,40, ); // Kompleks besked struct ordre { long int rute; // hvilken flyrute ? char ordre; // 'b' = bestil, 'a' = afbestil int antal; // antal billetter char navn[40]; // personen der afgiver ordren }

9 Lighedspunkter i systemkald: filbehandling, semaforer, beskedkøer start fd = open()semid = semget()msqid = msgget() operationFilerSemaforerBeskedkøer brug read(fd,buf,size) write(fd,buf,size) semop(semid,..) msqsnd(msgid,&mess,sz,..) msgrcv(msqid,&mess,sz,...) slut close(fd)semctl(semid,..)msqid = msgget() Heltal til identifikation af fil/semafor/kø ID returneres af systemkald til oprettelse Filer og beskedkøer arbejder med pointere til data

10 Sammenligning filer/beskedkøer Generelle egenskaber Kapacitet ? Persistens ? Tilgængelighed ? Mere specifikke egenskaber Effektivitet ? Navngivning ? Sikkerhed ?

11 Tråde "Billedlig" betydning af tråd: en rækkefølge af udførte instruktioner dvs. en slags "tracing" af programudførelsen GOTO my_label my_label Instruktioner

12 Tråde ("billedlige") ved fork().. pid = fork(); switch(pid) { case -1: printf("fork() mislykkedes \n"); break; case 0: printf("Jeg er børneprocessen"); break; default: printf("Jeg er faderprocessen"); }.. Faderproces børneproces

13 Tråde som "letvægtsprocesser" En multitrådet applikation opnår multitasking med flere tråde i samme proces. Jævnfør procesdefinition: Adresserum med stak, tekst og data Procestabelindgang med bl.a. systemressourcer En eller flere tråde der deles om tekst, data og systemressourcer Eksempler: Java: class Thread C: POSIX-tråde

14 1 eller flere tråde i samme proces 1 computer 2 processer med hver sin tråd 1 computer 1 proces med 2 tråde

15 Flere processer: fork() + exec() stak tekst data sh ps efter fork() efter exec() sh ps PC

16 Flere processer: fork() uden exec() Efter fortsat program udførelse: forskellig værdi af processens PC (Program Counter) forskellig stak (procedurestak) forskellige data men stadig samme programtekst samt parametre filo

17 Fordele ved multitrådning filo-p To processer To tråde filo-t Fordele Skabelse af tråde er hurtigere Kommunikation mellem tråde hurtigere end mellem processer Proces har ret til at prioritere mellem sine egne tråde Tråde deler både processens tekst- og data-del.

18 Opdeling i delopgaver: boss/worker-model boss worker 1 proces er "boss" udgør kontaktpunkt fordeler delopgaver "ledelse" f.eks. omfordeling, drab, m.m. Design-overvejelser:

19 Klient/server-model boss worker Server, f.eks. webserver eller database Klient, f.eks. webbrowser forespørgsel svar

20 Pipeline-model Velegnet til fase-vis bearbejdning af data hvis de enkelte faser er uafhængige muligt at lagre data i buffere imellem faserne eksterne afhængigheder medfører at det ikke kan forudses hvornår der skal arbejdes i hvilke faser

21 Arrays og pointere char txt[] = "hello world!\n";; // skaber txt[0].. txt[14] samt txt // hvor txt er adressen på txt[0] putchar(txt[0]); // vi vil se det 1. Tegn ! putchar(txt[13]); // vi vil se det 14. Tegn ! // txt[13] findes ved at lægge 13 til txt putchar(*(txt)) // samme som txt[0] putchar(*(txt + 13)) // samme som txt[13] Navnet på et array ( txt ) er en adresse, nemlig adressen på array-ets første element (txt[0]) og har således lighedspunkter med en pointer. C tillader "pointer-aritmetik" både med pointere og arraynavne.

22 Beregning af længden af en streng // naturligt program int strlen(char s[]) { int pos; for (pos=0; s[pos] != '\0'; pos++); // s + pos lægges sammen i hver iteration return pos; } // optimeret med pointer-aritmetik int strlen(char *s) { char *pos; for (pos = s; *pos != '\0'; pos++); //.. hvilket er sparet væk her ! return (pos - s); }


Download ppt "Beskeder/beskedkøer Afsender- proces hej Modtager- proces.. msgsnd(..,"hej",..);.. msgrcv(..);.. Afsender skal bl.a. angive den besked der ønskes afsendt."

Lignende præsentationer


Annoncer fra Google