Modeller av prosessering Implementasjon av tjenere Foreleser: Kjell Åge Bringsrud 1 Oversikt Motivasjon for flertrådede prosesser og deres anvendelse i distribuerte system Modeller av prosessering i CORBA samtidighetsmodeller nyttig for tjenerimplementasjoner flere samtidige klienter Fokus på kap. 6.4 i Coulouris et al 2 IN-ODP HØST 2001 1
Prosesser og tråder Motivasjon tradisjonelt prosessbegrep fra Unix anno 1980 1-1 relasjon mellom prosess og prosesseringsaktivitet behov for intern samtidighet i prosesser Løsning: generalisere prosess-begrepet til å kunne assosieres med flere prosesseringsaktiviteter Prosess tråder OS-ets abstraksjon av en prosesseringsaktivitet kjøretidsomgivelse ett adresserom trådsynkronisering (f.eks. semaforer) og komm.ressurser (ports) 3 Tråder To modeller Hver prosess har ett adresserom og en eneste kontrolltråd (og program-teller) Hver prosess har flere kontrolltråder som deler ett adresserom og eksekverer i (kvasi)parallell Datamaskin Datamaskin prosess tråd programteller 4 IN-ODP HØST 2001 2
Motivasjon tråder kjøretidsomgivelser (adresserom) er dyre å opprette tråder er mye billigere å opprette og terminere tråder kalles også lettvekstsprosesser tråder kan dele kjøretidsomgivelser (f.eks. globale variable, åpne filer, timere, signal,. ) prosesser definerer beskyttelsesdomener en tråd i en prosess kan (normalt) ikke aksessere data og ressurser i en annen prosess 5 Flertrådet tjener Anrop Inn-Ut 8 ms forsinkelse 2 ms m/cache i snitt dispatch ingen disk caching ingen disk caching disk caching disk caching 2 ms prosessering 2.5 ms m/cache i snitt # prosessorer #tråder Maks. anrop/sekund 1 1 100 1 2 125 1 2 400 2 2 500 6 IN-ODP HØST 2001 3
Flertrådet klient opprett tråd RPC hovedtråd utfør RPC 7 Tråder vs flere prosesser Tråddata Programteller Stack Prioritet og tilstand Registersett Barnetråder (threadids) Trådtilstand: RUNNING, READY, BLOCKED, TERMINATED Prosessdata Adresserom (adr. tabeller) Globale variable Ports/komm.grensesnitt Timere Signaler Semaforer Tråder (threadids) Opprette en tråd er billigere enn å opprette en prosess: O(10) ggr raskere? Trådbytte innen en prosess er billigere enn mellom prosesser: O(100) ggr raskere? Tråder innen en prosess kan dele data og ressurser mer effektivt enn mellom prosesser Tråder innen en prosess er ikke beskyttet mot hverandre 8 IN-ODP HØST 2001 4
Trådpakker Trådpakke: et sett med primitiver (f.eks. bibl. kall) cthread_fork(func,arg) --> threadid cthread_exit(result) cthread_join(threadid) cthread_yield() Tråder kan opprettes og termineres under kjøretid Trådterminering kan være frivillig eller påtvunget fra utenfor tråden 9 Tråder deler felles lager Trådpakker II aksess til delte data --> kritisk region semaforer, monitorer o.l. Trådpakker tilbyr ofte en mutex binær semafor: to tilstander locked og unlocked operasjoner: LOCK, UNLOCK og noen ganger TRY Trådpakker kan og tilby betingelsesvariable kø forbundet med hver variabel condition_wait(conditionid, mutexid) condition_signal(conditionid) 10 IN-ODP HØST 2001 5
Trådpakker III Eksempel synkronsiering Cond_var ikke_full Produsent buffer Cond_var ikke_tom Konsument Produsent lock(buffer) if full then c_wait(ikke_full, buffer); buffer.put(c) c_signal(ikke_tom) unlock(buffer) put,get,tom,full Alternativt: benytt monitorer Konsument lock(buffer) if tom then c_wait(ikke_tom, buffer); C:=buffer.get c_signal(ikke_full) unlock(buffer) 11 Preemptive Tråd schedulering en tråd kan suspenderes for å slippe til en annen tråd selv om den er RUNNABLE Ikke-preemptive en tråd ekskverer inntil den gjør et (system)kall som gjør at den suspenderes passer ikke for sanntids- og multimedia-applikasjoner Prioritet sanntids- og multimedia-appliksjoner krever at tråder kan gis prioritet eksempel: en høyprioritetstråd kan assosiseres til hendelser som krever hurtig reaksjon 12 IN-ODP HØST 2001 6
Tråder i Java Thread run() MyThread run() Runnable run() MyRun run() target Thread class MyThread extends Thread { public void run () { // Thread a = new MyThread(); public interface Runnable { public abstract void run() class MyRun implements Runnable { public void run () { // Thread b = new Thread(new MyRun); 13 Thread metoder static void sleep tråden pauser i oppgitt antall millisek. static void yield gir opp prioritet (settes bakerst i klar køen ) static Thread currentthread tråden som eksekverer nå ( denne koden ) void run( ) koden som eksekveres når tråden startes void start ( ) oppretter ny tråd og legger den i klar-køen boolean isalive( ) false hvis tråden har terminert void join( ) den kallende tråd blokkeres inntil den kallte tråd terminerer. Finnes og variant der man angir timeout (dvs. maks. ventetid på at tråden skal terminere) 14 IN-ODP HØST 2001 7
Tråders livsløp i Java THREAD = CREATED, CREATED = (start RUNNING stop TERMINATED), RUNNING = ({suspend,sleep NON_RUNNABLE yield RUNNABLE {stop,end TERMINATED run RUNNING), RUNNABLE = (suspend NON_RUNNABLE dispatch RUNNING stop TERMINATED), NON-RUNNABLE = (resume RUNNABLE stop TERMINATED), TERMINATED = STOP. 15 Synkronisering i Java Introduserer kritiske regioner ved et monitor-begrep. Token assosiert ved hvert objekt som bare én tråd kan eie av gangen vente-kø av blokkerte tråder assosiert med hvert token tråder som venter på tokenet Monitor-objekt har synkroniserte metoder. Innkapsler felles data. public class buffer { public synchronized Data get { //.. Gjør noe som leser dataene.. public synchronized put (Data d) { //.. Gjør noe som endrer dataene.. synchronized metoder: -prøver(automatisk)å tilegne seg objektets token - blokkerer inntil tokenet er mottatt -girdetfrasegnår metoden er ferdig 16 IN-ODP HØST 2001 8
Synkronisering i Java Blokker av kode som kritisk region. Object other = // et eller annet objekt... { synchronized(other){ length = length + other.size * 14; width = other.var1 + other.var2; synchronized blokk: - konkurrerer med alle andre blokker som synkroniserer på samme objekt, og med alle metoder som er synchronized i klassen til objektet 17 Betinget synkronisering i Java Koordinere adgang til felles ressurser (buffer o.l.) Tre metoder som tilbys av class Object: public final void wait()throws InterruptedException; venter på å bli vekket av en annen tråd. Den ventende tråd frigjør token assosiert med monitoren. Når tråden vekkes må den vente til den har alle sine token igjen. Andre tråder kan imellomtiden ha hatt disse (og oppdatert de delte data). public final void notify(); vekker opp en enkel tråd som venter i objektets kø. public final void notifyall(); vekker opp alle tråder som venter i objektets kø. 18 IN-ODP HØST 2001 9
Betinget synkronisering i Java Implementeres som guarded action i monitor-metode: public synchronized void action() throws InterruptedException { while (!cond) wait(); // modifiser monitor data; notify(); 19 Monitor eksempel Koordinere adgang til parkeringsplass avgang -tråd monitor Park.plass wait() notify() ankomst -tråd 20 IN-ODP HØST 2001 10
Ankomst-tråden Monitor eksempel class Ankomst implements Runnable { ParkeringsMonitor parkplass; Ankomst(ParkeringsMonitor p) {parkplass = p; public void run() { try { while (true) {.. //vent på en ankomst.. parkplass.ankomst(); catch (InterruptedException e) { 21 Avgang-tråden Monitor eksempel class Avgang implements Runnable { ParkeringsMonitor parkplass; Avgang(ParkeringsMonitor p) {parkplass = p; public void run() { try { while (true) {.. //vent på at noen vil forlate.. parkplass.avgang(); catch (InterruptedException e) { 22 IN-ODP HØST 2001 11
Monitor eksempel Parkeringsmonitor class ParkeringsMonitor { protected int plasser; protected int kapasitet; ParkeringsMonitor(int kap) {plasser = kapasitet = kap; synchronized void ankomst() throws InterruptedException { while (plasser == 0) wait(); --plasser; notify(); synchronized void avgang() throws InterruptedException { while (plasser == kapasitet) wait(); ++plasser; notify(); 23 Monitor eksempel Kode for initialisering ParkeringsMonitor p = new ParkeringsMonitor(n); Thread ank = new Thread(new Ankomst(p)); Thread avg = new Thread(new Avgang(p)); ank.start; avg.start; 24 IN-ODP HØST 2001 12
Modeller av prosessering i CORBA CORBA definerer samtidighetsmodeller for tjenere enkeltrådet, flertrådet Er definert ved såkalte activation/deactivation policies for Basic Object Adaptor (BOA) BOA: En CORBA definert Object Adaptor som er ment å skulle passe for de fleste klienter og objekt-implementasjoner Aktiviseringspolitikk regler som en implementasjon følger når det er flere aktive objekt og implementasjoner Alle BOA implementasjoner må understøtte fire ulike aktiviseringspolitikker 25 BOA objektaktivisering Felles tjener flere aktive objekt deler samme tjener (enkeltrådet) Tjenerprosess Object adapter A s IDL B s IDL A B Vent felles 26 IN-ODP HØST 2001 13
BOA objektaktivisering II Udelelig tjener kun ett objekt av gangen kan være aktivt i samme tjener Tjenerprosess Object adapter Object adapter A s IDL B s IDL A Tjenerprosess B udelelig 27 BOA objektaktivisering III Tjener per metodekall hvert anrop av en metode er implementert ved oppstart av en separat tjener (prosess eller tråd), og som terminerer når metoden er fullført. Flertrådet tjenerprosess Object adapter A s IDL B s IDL A B Behov for synkronisering Tjener-per-metode 28 IN-ODP HØST 2001 14
BOA objektaktivisering III Tjener per metodekall (forts) Tjenerprosesser Object adapter A s IDL A B B s IDL B Behov for synkronisering Tjener-per-metode 29 BOA objektaktivisering IV Persistent server tjeneren aktiviseres ved mekanismer utenfor BOA BOA handterer alle anrop som for felles tjener Tjenerprosess Applikasjon Object adapter A s IDL Scheduler A B s IDL B Persistent tjener Applikasjonsspesifikt 30 IN-ODP HØST 2001 15
CORBA 2.0 portabilitet Tjener-implementasjoner ikke portabel mellom ulike ORB implementasjoner grensesnitt til BOA underspesifisert av OMG aktivisering/deaktivisering registrering av objekter i ORBen navngiving base_ klasser 31 CORBA 3.0 Portable Object Adapter (POA) Muliggjør portable tjenerimplementasjoner støtte for persistente objekter objektreferanser overlever flere tjener-inkarnasjoner støtte for transient aktivisering av objekter servant managers instansierer objekter (servants) root POA, pluss spesialiseringer av denne policies styrer adferden til en POA kan lage egne policies for egne POA spesialiseringer av root POA kan ha flere POA per applikasjon ulike objekt kan være gjenstand for ulike policies 32 IN-ODP HØST 2001 16
POA arkitektur Klient ORB POA Tjener Servant manager Objekt refereanse ID ID ID Objekt Objekt Objekt Objekt implementasjoner (servants) 33 ORBacus samtidighetsmodell blokkerende tjener en klientsesjon av gangen, enkeltrådet reaktiv tjener flere klientsesjoner av gangen, enkeltrådet tråd-per-klient tjener en aktiv tråd per klient, flertrådet tjener en klient kan ikke ha flere samtidige anrop i samme tjener tråd-per-anrop tjener en ny tråd opprettes for hvert anrop tråd-pool tjener statisk forråd av tråder som allokeres til innkommende anrop gir maks. grad av samtidighet i tjeneren 34 IN-ODP HØST 2001 17