Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde 117... p1p2p117... internet.

Lignende præsentationer


Præsentationer af emnet: "Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde 117... p1p2p117... internet."— Præsentationens transcript:

1 Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde 117... p1p2p117... internet

2 Hvad er en proces ? Simpel definition Kørende program Kompleks definition Adresserum med stak, tekst og data Procestabel-indgang med bl.a. systemressourcer En eller flere tråde der deles om tekst, data og ressourcer

3 ps: Vis processer init login shell ps ps -af UID..PID..CMD nielsj..29256..man ps nielsj..29266..ps -af man

4 Procestilstande kørende blokeretklar OS (skedulator) vælger næste klare proces Blokerede processer skal være klar før de kan køre igen

5 Skabelse af proces med system() C: // start.c main() { printf("Nu starter jeg ps-programmet \n"); system("ps -af"); printf("Faerdig ! \n"); } Java: // start.java main() { System.out.println("Nu starter jeg ps-programmet"); Runtime.getRuntime().exec("ps -af"); System.out.println("Færdig !"); }

6 Procestræ ved brug af system() init login sh start System() tillader enhver kommando som forstås af shellen. Kommandoen som overføres til system() fortolkes af ny shell. shps

7 Implementation af processkabelse: fork() // start.c (jf. Wrox s. 356).. pid = fork(); switch(pid) { case -1: printf("fork() mislykkedes \n"); break; case 0: printf("Jeg er børneprocessen"); break; default: printf("Jeg er faderprocessen"); }.. start sh.. børneprocessen.... faderprocessen..

8 Skabelse af proces til at afvikle nyt program: exec() Eksempel: shell sh ps forælder Barn før/efter overlejring // minish.c (jf. Tanenbaum s. 295).. while(1) { type_prompt(); read_command(cmd,pars); pid = fork(); swich(pid) { case -1: printf("ups"); break; case 0: execve(cmd,pars,0); break; default: {.. vent på børneproces..}; }.. ps -af

9 fork() + exec() stak tekst data sh ps efter fork() efter exec() sh ps

10 Internet-ormen Cracker: vil udføre et program - f.eks. sekvensen xy på en maskine hvor han ikke er oprettet som bruger kan kalde programmer f.eks. "finger" på maskinen fra fjern maskine x = "start unix shell", y = "der gør det og det" Ide: kald "finger" med for en for lang parameter, der ender på "xy": finger peter@cbs.dk-bla-bla-..-bla-xy Forudsætninger bl.a. at C ikke har automatisk tjek af om et array-indeks er udenfor arrayets grænser.

11 Arrays i C - brug // Kernighan/Ritchie s. 29: #define MAXLINE 1000 main (..).. char line[MAXLINE]; while … getline(line,MAXLINE).. // kald int getline(char s[],int lim).. // def. Arrays parameteroverføres via pointer (jf. objektreferencer i Java). Ingen tjek af array-grænser. main getline line s

12 Implementation af CALL og RETURN (med rekursion) CALL PR.. PR:.. RETURN Retur-adresser for mere end et procedurekald gemmes på stakken. Indholdet af SP-registret er adressen på toppen af stakken. [[SP]] <- [PC] [SP] <- [SP]-1 [PC] <- PR [SP] <- [SP]+1 [PC] <- [SP] !!!!!!!!

13 Brug af stakken til implementation af RETURN IR IP SP stak tekst (program) data Plads til næste ret.adr. Returadresse CALL.. ?!?

14 Stak i Linux stak Returadresse adresse på shellen tekst data /bin/finger USER PATH CLASSPATH Environment- variable peter@cbs.dk-bla-bla-..-bla-xy... Parametre til programmet SP Filnavn

15 Simple og sammensatte typer i C Simple typer: int a; char b; // altid 1 byte float c; // ingen boolsk type Sammensatte typer: arrays og strukturer: struct kat_post { char navn[14]; // tegn-array bruges som streng int i_node; };

16 Brug af tegn i C #include main() { char b = 'A'; printf("Tegnværdi af b: %c \n", b); // udskriver A; printf("Tegnværdi af b: %c \n", ++b); // udskriver B; printf("Talværdi af b: %d \n", b); // udskriver 66; while (b--) printf("Talværdi af b: %d \n", b); // udskriver 65,64,..,0 } Tegn kan opfattes som heltal Både tegn og heltal kan opfattes som boolske værdier 0 = false alt andet = true operatorne (funktionerne) -- og ++ har både "effekt" og "returværdi" præfix/postfix afgør rækkefølge

17 Brug af strukturer i C struct kat_post { // erklæring af struct-type char navn[14]; int i_node; }; struct kat_post min_post; // erklæring af instans af typen min_post; min_post.navn = "MitNyeFilNavn"; // strukturens attributter tilgås via "." min_post.i_node = 147; // ingen metoder i strukturer !

18 Pointere Intuition: Tænk på pointere som fysiske RAM-adresser Erklæring: Der kan erklæres pointere til alle typer char ch; // ch er tegn char *p; // p er pointer til tegn Brug: & er "adresse-operator" og * er "peger-på-operator": ch = 'A'; // værdien af ch er 'A'; p = &ch; // værdien af p er ch's adresse; printf("p peger på: %c \n", *p); // udskriver A printf("p er adressen: %d \n", p); // ikke meningen // (udskriver langt heltal) p: 'A' ch:

19 Formål med brug pointere Java m.fl. har også "pointere" nemlig referencer til objekter. Arrays parameteroverføres i C og Java som referencer. Forskellen er at i C kan pointere manipuleres direkte. Formål med pointere bl.a.: - hurtig gennemløb af arrays - kommunikation mellem funktions og kaldsomgivelser int retur_vaerdi; char tegn; retur_vaerdi = read(FilDeskriptor,&tegn,1); // både returværdi og det læste tegn skal overføres til kaldsomgivelser


Download ppt "Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde 117... p1p2p117... internet."

Lignende præsentationer


Annoncer fra Google