Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

// Semaphore.java package semaphore; public class Semaphore { int resources = 1; // Constructors Semaphore() {} Semaphore(int i) { resources = i; } synchronized.

Lignende præsentationer


Præsentationer af emnet: "// Semaphore.java package semaphore; public class Semaphore { int resources = 1; // Constructors Semaphore() {} Semaphore(int i) { resources = i; } synchronized."— Præsentationens transcript:

1 // Semaphore.java package semaphore; public class Semaphore { int resources = 1; // Constructors Semaphore() {} Semaphore(int i) { resources = i; } synchronized void down() {while.. wait();..} synchronized void up() {.. notify();} } Skitse af semafor-klasse

2 synchronized void down() { while (resources <= 0) { try {wait();} catch.. } resources = resources - 1; } synchronized void up() { resources = resources + 1; notify(); } down() og up()

3 Semafor brugt til at beskytte kritisk sektion i database-record Agent Semaphore Agent Record sem.down(); rec.X = rec.X +1; sem.up(); X er globalt data

4 Et objekts lås og mængder af ventende tråde public class Semaphore { synchronized void down() { while.. wait();.. } synchronized void up() {.. notify(); } lås s-mængde w-mængde sem (Semaphore-objekt) Låst hvis et objekt er i gang med at udføre en metode, som er synchronized De tråde, som er blokeret fordi de venter på at udføre en metode, som er synchronized De tråde, som er blokeret fordi de har udført wait() i Semaphore-objektet (og som ikke er blevet resume-de endnu)

5 Hvem sættes i kø hvor ? "Hvem ?" og "hvor ?" spørgsmål til synkronisering. Hvem suspenderes ? Det gør tråde, og specifikt den tråd som vil udføre en synchronized metode i et låst objekt, eller som udfører et kald af wait(). Hvor anbringes de suspenderede tråde ? De tilknyttes det objekt, der indeholder metoden med synchonized / wait(). Rækkevidden af notify() og notifyAll() er de suspenderede tråde, som er knyttet til det objekt, der indeholder metoden med notify()/notifyAll()

6 public class Record { integer X; synchronized void incr() { while.. wait();.. X = X + 1; notify(); } lås s-mængde w-mængde rec (Record-objekt) Alternativ til brug af semafor

7 Semafor-operationer: down og up skal være atomiske // Forenklet implementation i C af semaforer // Semaforen er repræsenteret ved et heltal. down(int *sem) { if (*sem=0) {SLEEP UNTIL WAKEUP}; *sem = *sem - 1; } up(int *sem){ *sem = *sem + 1; {WAKEUP ONE SLEEPING PROCESS}; } ? sleep *Sem-- *sem++ wakeup

8 Metoder/faciliteter til interproces-kommunikation Fra OS-kurset: Filer Semaforer Besked-køer Pipes Andre: Signaler Delt hukommelse

9 Besked-køer ….. msgsnd(..);.. msgrcv(..);.. Afsender skal angive - adresse = ? - længde af besked - prioritet - flag som styrer opførsel i specialtilfælde

10 Sockets vs. besked-køer Ligheder: formål: interproces-kommunikation implementation: kerne-understøttet (hvis andre sprog, f.eks. Java, bruger faciliteterne, er det via C) global navngivning af kommunikations-mediet strømme hvis indhold forbruges ved læsning Forskelle: sockets kan også forbinde processer på forskellige maskiner sockets kan forbinde maskiner med forskellige operativsystemer en besked-kø kan have flere sendere og/eller modtagere beskeder er afgrænsede beskeder har prioritet

11 Boss/workers brug af besked-køer … Boss Worker

12 Boss/workers brug af (TCP-baserede) sockets accept(..): Bruges til automatisk at generere ny socket-forbindelse for hver ny request fra klient. Oprettelse af forbindelse mellem worker/klient lettes Prioritet/type behøves ikke til at identificere afsender eller modtager Da sockets ikke grupperer det overførte data i beskeder, skal modtageren parse input-strømmen blot for at finde ud af hvorfra og hvortil en "besked" går.

13 Formål med Farleys multitrådede webserver/problemsolver (eks. 4.1-4.3) Klient/browser Server Solver Håndtering af multiple klienter

14 Server Thread RunnableSolver Solver-objekt parameteroverføres til Thread-objekt ProblemSet Farleys multitrådede server - de vigtigste klasser Client Socket- forbindelse class RunnableSolver { void solve() {..} public void run() { solve(); }.. }

15 Kombination af RMI og multitrådning: Design Server: 1 tråd modtager nye forespørgsler 1 tråd per klient behandler klientens forespørgsel (nu via fjernt solver-objekt) varetager socket-kommunikation med klient Solver på fjern maskine: 1 solver-objekt for hvert klient-tråd (helst) Solver tråd Server

16 Thread Solver ProxySolver Server som kan tilgå 1 fjernt solver-objekt ProblemSet 0..n 1 1 1 1 1

17 class RunnableProxyServer Version 1: ét fjernt solver-objekt class RunnableProxySolver implements Runnable, Solver { RMIProblemSet currProblem; OutputStream clientOut; InputStream clientIn; RunnableProxySolver(..) {..}; RMISolver s; void solve() { currProblem =..; s = (RMISolver) Naming.lookup(..); s.solve(currProblem,..);.. } public void run() { solve(); }.. } Alle bruger det samme solver-objekt Alle har sit eget problem-objekt Til/fra klient

18 class RMISolverImpl class RMISolverImpl implements RMISolver { RMIProblemSet currProblem; void setProblem(RMIProblemSet s) { currProblem = s; } boolean solve() { currProblem.setSolution(Math.sqrt(currProblem.getValue())); } boolean solve(RMIProblemSet s,..) {.. }.. } // forenklet i forhold til Farleys program synchronized ? Bruger solve/2 den globale setProblem ?

19 Samtidig brug af et fjernt objekt Flere tråde kan samtidig få udført metode-kald i et objekt uanset om det er fjernt eller på samme maskine hvis metoden bruger delte, globale variable, skal den synkroniseres hvis metoden ikke bruger delte, globale variable, svarer metoden til et funktionskald og bruger ikke objektets tilstand

20 Party Filosof Gaffel 1 5 1 52 1 take_forks(..) Filosof = separat tråd Samtidig brug af metode i objekt i samme proces

21 Faser i elektronisk handels- transaktion Jf. SET Spec., Book 1, afsnit 2.3. 1. Kortindehaver "browser". 2-3. Kortindehaver beslutter sig for køb. 4. Kortindehaver vælger betaling (kreditkort via SET). 5. Kortindehaver sender ordre til e-købmand (afsnit 4.4). 6. E-købmand tjekker hos kortindehavers bank (4.5). 7. E-købmand sender ordrebekræftelse til kortindehaver (4.4). 8. Levering/ydelse af vare/tjenesteydelse. 9. Pengeoverførsel til e-købmand. (4.6) Krav til websider Krav til SET- implementation

22 Krav til SET-godkendt e-handels-server Langvarige transaktioner som involverer 3 parter: kortindehaver købmanden selv SET gateway Beregningstunge opgaver: offentlig nøgle kryptering/dekryptering af korte strenge symmetrisk nøgle kryptering af lange strenge Datatunge opgaver - database med: varekatalog kundeoplysninger (omend ikke kreditkortsnumre..) Forhåbentlig mange transaktioner !


Download ppt "// Semaphore.java package semaphore; public class Semaphore { int resources = 1; // Constructors Semaphore() {} Semaphore(int i) { resources = i; } synchronized."

Lignende præsentationer


Annoncer fra Google