Objekt-tjenere og deres implementasjon

Like dokumenter
Modeller av prosessering Implementasjon av tjenere

Distribuerte objekter og objekt-basert mellomvare

Tråder Repetisjon. 9. og 13. mai Tråder

Hentet fra Suns Totorial:

CORBA Component Model (CCM)

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

Operativsystemer, prosesser og tråder

Java RMI (Remote Method Invocation) Gruppe 9: Ivar Steien Rasmussen Tom Anders Dalseng Andreas Petlund

UNIVERSITETET I OSLO

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Eksempler på ikke-blokkerende systemkall:

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

Distributed Component Object Model. Utvikling av distribuerte applikasjoner. Utvidelse av COM for støtte av distribuerte objekter

RM-ODP og Multimedia middleware (M3W):

INF Notater. Veronika Heimsbakk 10. juni 2012

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006

Kapittel 7: Mer om arv

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

Implementering av caching ved hjelp av Spring. Christian Vestøl

UNIVERSITETET I OSLO

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Avdeling for ingeniørutdanning Institutt for teknologi

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF1010 Tråder II 6. april 2016

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

GUI («Graphical User Interface») del 2

Definisjon av prosess

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF våren 2017

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

Forelesning III Kap 8 & 7; Dagsplan. Gjenbruk. Condition synchronization. Gjennomgående eksempler. Kode: Design: Verktøy

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

Threads Threads (tråder) threads vs prosesser threads vs prosesser Definisjoner av

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

2 Om statiske variable/konstanter og statiske metoder.

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

UNIVERSITETET I OSLO

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Sortering med tråder - Quicksort

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

Tråder og concurrency i Linux

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Tildeling av minne til prosesser

Fakultet for informasjonsteknologi,

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Inf1010 oppgavesamling

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

INF2440 Uke 6, v2015 om faktorisering av primtall + tre løsninger på et produsent/konsumentproblem. Arne Maus PSE, Inst.

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Socket og ServerSocket

En prosess kan sees på som et stykke arbeid som skal utføres på datamaskinen. Ofte vil det være flere prosesser/tråder på datamaskinen samtidig.

Replikering. Olav Lysne

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Lars Vidar Magnusson. October 11, Lars Vidar Magnusson () Forelesning i Operativsystemer October 11, / 28

IN1010 våren Repetisjon av tråder. 15. mai 2018

Test 2 OOP. - Prøveeksamen

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Transkript:

Objekt-tjenere og deres implementasjon Foreleser: Frank Eliassen Frank Eliassen, SRL & Ifi/UiO 1 Plan Arkitektur for objekt-tjenere Prosesser og tråder (threads) Tråd-synkronisering i Java Fler-trådede tjenere CORBA Portable Object Adapter POA policies POA managers ORBacus threading policies Frank Eliassen, SRL & Ifi/UiO 2 1

Objekt-tjenere-I Tjenere som er skreddersydd til å understøtte distribuerte objekter Tjenester realiseres ved objekter som tjeneren innkapsler Tjenester legges til eller fjernes ved legge til eller fjerne objekter Objekt-tjenere opptrer som steder der objekter kan leve Flere måter å aktivisere et objekt på Frank Eliassen, SRL & Ifi/UiO 3 Objekt-tjenere II Når et objekt aktiviseres, hvilke prosesseringsressurser skal implementasjonen av det tilordnes? Skal en ny prosess eller tråd opprettes? Finnes mange måter dette kan gjøres på Finnes det én beste måte? Hvordan bruke prosesser og tråder i distribuerte system? Bedre ytelse Bedre utnyttelse av ressurser Forenkle programmering Men først Frank Eliassen, SRL & Ifi/UiO 4 2

Objekt-tjenere-III Aktiviserings-policy En bestemt måte å aktivisere et objekt på Ulike dimensjoner Hvordan oversette mellom ROR og lokal implementasjon? Skal tjeneren være enkelt-trådet eller fler-trådet? Dersom fler-trådet, hvordan tilordne tråder til objekter og forespørsler? En pr objekt? En pr forespørsel? Transiente vs persistente objekter, etc En objekt-tjener bør understøtte flere policies Objektene kan grupperes etter hvilken aktiviserings-policy de er underlagt Objekt-adapter: programvare som implementerer en spesifikk aktiviserings-policy Frank Eliassen, SRL & Ifi/UiO 5 Objekt-tjenere-IV Organisering av objekt-tjener som understøtter forskjellige aktiviseringspolicies skeleton skeleton skeleton Object adapter Object adapter OS dispatcher Frank Eliassen, SRL & Ifi/UiO 6 3

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) Frank Eliassen, SRL & Ifi/UiO 7 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 Frank Eliassen, SRL & Ifi/UiO 8 4

Motivasjon tråder kjøretidsomgivelser (adresserom) er dyre å opprette tråder er mye billigere å opprette og terminere 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 Frank Eliassen, SRL & Ifi/UiO 9 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 Frank Eliassen, SRL & Ifi/UiO 10 5

Trådpakker II Tråder deler felles lager aksess til delte data --> kritisk region semaforer, monitorer o.l. Trådpakker tilbyr ofte en mutex abstraksjon for gjensidig utelukkelse tilsvarer binær semafor: to tilstander locked og unlocked operasjoner: LOCK, UNLOCK og noen ganger TRY_LOCK LOCK: tråd blokkeres hvis den må vente på tilstand unlocked Trådpakker kan og tilby betingelsesvariable kø forbundet med hver variabel condition_wait(conditionid,mutexid) inkluderer unlock av mutexid condition_signal(conditionid) tråd som venter på conditionid og som vekkes, prøver å utføre relock på mutexid Frank Eliassen, SRL & Ifi/UiO 11 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); Frank Eliassen, SRL & Ifi/UiO 12 6

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( ) void start ( ) boolean isalive( ) void join( ) koden som eksekveres når tråden startes oppretter ny tråd og legger den i klar-køen false hvis tråden har terminert 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) Frank Eliassen, SRL & Ifi/UiO 13 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 - gir det fra seg når metoden er ferdig Frank Eliassen, SRL & Ifi/UiO 14 7

Betinget synkronisering i Java Koordinere adgang til felles ressurser (buffer o.l.) Tre metoder som tilbys av class Object: 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ø. 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). Frank Eliassen, SRL & Ifi/UiO 15 Betinget synkronisering i Java Implementeres som guarded action i monitor-metode: public synchronized void action() throws InterruptedException { while (!cond) wait(); // modifiser monitor data; notify(); } Frank Eliassen, SRL & Ifi/UiO 16 8

Flertrådet tjener Forespørsel dispatch ingen disk caching ingen disk caching disk caching disk caching disk caching Inn-Ut 8 ms forsinkelse 2 ms m/cache i snitt 2 ms prosessering 2.5 ms m/cache # prosessorer # tråder Maks. anrop/sekund 1 1 100 1 2 125 1 2 400 2 2 444 2 3 500 Frank Eliassen, SRL & Ifi/UiO 17 Flertrådet klient opprett tråd RMI hovedtråd utfør RMI Frank Eliassen, SRL & Ifi/UiO 18 9

Flertrådet klient Tråd 1 genererer resultater, men krever ikke svar fra tjener Flere varianter er tenkelige. RMI utfør RMI (blokkerende) Frank Eliassen, SRL & Ifi/UiO 19 CORBA Portable Object Adapter (POA) Muliggjør portable tjenerimplementasjoner fullstendig spesifisert i CORBA 2.2 (1997) standard POA språkbinding for hvert prog.språk policies styrer adferden til en POA root POA POA som må understøttes av alle implementasjoner utøver én bestemt policy kan lage egne policies for egne POA Spesialiseringer/varianter av root POA kanhaflerepoa per applikasjon ulike objekt kan være gjenstand for ulike policies Frank Eliassen, SRL & Ifi/UiO 20 10

POA spesifikasjonen OMG, ORB Portability Joint Submission (Final) Part 1 of 2, orbos/97-05-15 (chap 3) http://www.omg.org/cgi-bin/doc?orbos/97-05-15 Frank Eliassen, SRL & Ifi/UiO 21 CORBA Portable object adapter (POA) Muliggjør portabilitet av objektimplementasjoner mellom ulike ORBer Understøtter lettvekts transiente objekter og persistente objektidentifikatorer (f.eks. i ODBMSer) Tillater tjenere å implementere mange objekter Understøtter transparent objekt-aktivisering Utvidbar mekanisme for aktiviseringspolicies Flere POAer i en tjener CORBA klient CORBA tjener ORB? POA servants Frank Eliassen, SRL & Ifi/UiO 22 11

CORBA server arkitektur Klient ORB POA manager Tjener Objekt refereanse minpoa ID Objekt Servant manager ID Objekt IOR [IRref, nettadr, (minpoa,objid)] ID Objekt Servants: Implementerer anrop på objekter Frank Eliassen, SRL & Ifi/UiO 23 POA policies POA policy kontrollerer kjøretidsomgivelsen til en servant utøves av POA og servant managers policy type et aspekt ved kjøretidsomgivelsen/aktivisering spesifieres som et attributt policy er spesifikasjon av en POA policy mengde attributtverdier oppgis som argument når man oppretter en ny POA createpoa (navn, POAmngr,policy) Frank Eliassen, SRL & Ifi/UiO 24 12

POA policy typer: Object Life Span Spesifiserer persistensmodellen for en POA TRANSIENT Objektene i denne POAen overlever ikke prosessen i hvilken de ble først opprettet PERSISTENT Objektene i denne POAen overlever prosessen i hvilken de ble først opprettet Root POA default TRANSIENT Frank Eliassen, SRL & Ifi/UiO 25 POA policy typer: Id Assignments Spesifiserer om Objekt ID i denne POA er generert av applikasjonen eller POAen USER_ID Objektene tilordnes Object ID av applikasjonen Benyttes typisk av applikasjoner med persistente objekter POA metode: activate_object_with_id(objid, object_pointer) SYSTEM-ID Objektene tilordnes Object ID av POAen. POA metode: activate_object(object_pointer) Hvis POAen også har PERSISTENT Object Life Span Policy, må de tilordnede Object ID være entydige over alle instansieringer av den samme POA Root POA default SYSTEM-ID Frank Eliassen, SRL & Ifi/UiO 26 13

POA policy typer: Object Id Uniqueness Spesifiserer om de servants som aktiviseres i denne POA har entydige Object ID. UNIQUE_ID Servants aktivisert med denne POA understøtter nøyaktig en Object Id Benyttes typisk av applikasjoner med få transiente objekter MULTIPLE_ID en servant aktivisert med denne POA kan understøtte en eller flere Object Id. Benyttes typisk av applikasjoner med mange persistente objekter eksempel: en servant inkarnerer alle objektene en servant representerer et database entry Root POA default UNIQUE-ID Frank Eliassen, SRL & Ifi/UiO 27 POA policy typer: illustrasjon Object Id Uniqueness UNIQUE_ID POA Servants Object ID Servant pointer Object reference POA Active Object Map Frank Eliassen, SRL & Ifi/UiO 28 14

POA policy typer: illustrasjon Object Id Uniqueness MULTIPLE_ID POA Servant Object ID Servant pointer Object reference POA Active Object Map Frank Eliassen, SRL & Ifi/UiO 29 POA policy typer: Implicit Activation Spesifiserer om denne POA understøtter implisitt aktivisering av objekter. IMPLICIT_ACTIVATION Denne POA vil kun understøtte implisitt aktivisering når en applikasjon prøver å få tak i en objektreferanse for en inaktiv servant (kaller metode servant_to_reference), vil POAen automatisk generere en Object Id for denne servant og aktivisere det resulterende objekt anbefales ikke å kombinere IMPLICIT_ACTIVATION med PERSISTENT NO_IMPLICIT_ACTIVATION Denne POA vil kun understøtte eksplisitt aktivisering Root POA default IMPLICIT_ACTIVATION Frank Eliassen, SRL & Ifi/UiO 30 15

POA policy typer: Servant Retention Spesifiserer om denne POA vil oppbevare aktive servants i en Active Object Map. RETAIN Denne POA vil oppbevare aktive servants i sin Active Object Map NON_RETAIN Servants oppbevares ikke i denne POA. Kun meningsfull i kombinasjon med USE_DEFAULT_SERVANT eller USE_SERVANT_MANAGER policies Root POA default RETAIN Frank Eliassen, SRL & Ifi/UiO 31 POA policy typer: Request Processing Spesifiserer hvordan forespørsler prosesseres av denne POA. USE_ACTIVE_OBJECT_MAP_ONLY Hvis denne POA ikke finner en Object Id i sin tabell, returnerer den en exception til klienten USE_DEFAULT_SERVANT Hvis denne POA ikke finner en Object Id i sin tabell, eller hvis NO_RETAIN policien er spesifiert, vil kallet bli formidlet til en default servant som tidligere er blitt registrert hos POAen (set_servant) USE_SERVANT_MANAGER Hvis denne POA ikke finner en Object Id i sin tabell, eller hvis NO_RETAIN policien er spesifiert, vil kallet bli formidlet til en servant manager som tidligere er blitt registrert hos POAen (set_servant_manager) Root POA default USE_ACTIVE_OBJECT_MAP_ONLY Frank Eliassen, SRL & Ifi/UiO 32 16

POA policy typer: Thread Spesifiserer threading modellen som brukes av denne POA. ORB_CTRL_MODEL POAen er ansvarlig for å tilordne anrop til tråder. I en fler-trådet omgivelse kan samtidige anrop formidles til flere tråder applikasjonen må programmeres for å handtere multi-threading I Java: synchronized metoder og betinget synkronisering svakhet: kunne ønske oss mer finkornet kontroll (jfr. ORBacus) SINGLE_THREAD_MODEL Denne POA vil prosessere anrop sekvensielt. Applikasjonen trenger ikke programmeres for å handtere multithreading ( thread-safe kode) Root POA default ORB_CTRL_MODEL Frank Eliassen, SRL & Ifi/UiO 33 Noen nyttige POA policy kombinasjoner RETAIN og USE_ACTIVE_OBJECT_MAP_ONLY Tjenere som forvalter et endelig (lite) antall prestartede objekter RETAIN og USE_SERVANT_MANAGER Tjenere som forvalter et stort antall persistente objekter RETAIN og USE_DEFAULT_SERVANT Tjenere som forvalter et stort antall transiente objekter NON_RETAIN og USE_SERVANT_MANAGER Tjenere som benytter en servant per metodekall etc. etc. Frank Eliassen, SRL & Ifi/UiO 34 17

Opprette nye POA Kan opprette et hierarki av POAer POA metode create_poa(navn, POAmngr,policy_spec) merk: ingen arv av policies Hver POA utøver en viss policy ulike grupper av objekter forvaltes på ulike måter root_poa A B C D Frank Eliassen, SRL & Ifi/UiO 35 POA managers Kontrollerer flyten av anrop inn i en samling POAer Factory metode create_poa_manager(navn) POA_managerinterface tillater applikasjonen å utøve denne kontrollen activate lar anrop flyte til de assosierte POAer hold_requests alle anrop til de assosierte POAer køes opp discard_requests kaster alle anrop til de assosierte POAer exceptions sendes til klienter som anroper deactivate ingen anrop kan lenger mottas. Anrop avvises på en implementasjonsspesifikk måte Frank Eliassen, SRL & Ifi/UiO 36 18

Kontrol av anropsflyt vha POA managers Applikasjon ORB root_poa POA manager POA POA POA POA POA POA POA manager Frank Eliassen, SRL & Ifi/UiO 37 ORBacus: Utdrag av kode for init av ORB & POA public class Server { static public void main (String[] args) { // initialiserer ORBen org.omg.corba.orb orb = org.omg.corba.orb.init(args,props); // få tak i referanse til rootpoa org.omg.portableserver.poa rootpoa = org.omg.portableserver.poahelper.narrow( orb.resolve_initial_reference( RootPOA ); // få tak i referanse til rootpoaens POAManager org.omg.portableserver.poamanager manager = rootpoa.the_poamanager; //annen initialisering (f.eks. opprette/registrere servants)... //aktiviser POA manager og ORBen (vente på anrop) manager.activate() orb.run(); Frank Eliassen, SRL & Ifi/UiO 38 19

Thread policy i ORBacus 4.0 Kommando-linjeopsjoner forfiner POAens Thread policy Eksempler tråd-per-klient tjener en aktiv tråd per klient, flertrådet tjener en klient kan ikke ha flere samtidige forespørsler i samme tjener tråd-per-anrop tjener en ny tråd opprettes for hvert forespørsel tråd-pool tjener statisk forråd av tråder som allokeres til innkommende forespørsler pool-størrelsen gir øvre grense for samtidighet i tjeneren Frank Eliassen, SRL & Ifi/UiO 39 ORBacus: Tråd-per-klient tjener connect f() h() accept dispatch accept dispatch connect g() dispatch Klient A Klient B Tjener Frank Eliassen, SRL & Ifi/UiO 40 20

ORBacus: Tråd-per-anrop tjener connect f() h() connect g() Klient A Klient B Tjener Frank Eliassen, SRL & Ifi/UiO 41 ORBacus: Tråd-pool tjener f() g() h() i() Klient A Tjener Frank Eliassen, SRL & Ifi/UiO 42 21

Mer detaljer om CORBA Se CORBA Programmer s Guide: http://www.iona.com/support/docs/e2a/asp/5.0/corba/ pguide_java/html/index.html Frank Eliassen, SRL & Ifi/UiO 43 Oppsummering Objekt-tjenere Et sted for objekter å leve Understøtter flere aktiviserings-policies realisert ved objekt-adaptere Flere-trådede tjenere kan i noen tilfeller benyttes til å øke gjennomstrømningen (metodekall/tidsenhet) dersom f.eks. I/O er flaskehalsen fler-trådede tjenere kan utnytte multi-cpu tjenermaskiner CORBA Portable Object Adapter kan spesifisere ulike policies for hvordan innkommende anrop skal prosesseres og allokeres ressurser (inkl. threading policy) Frank Eliassen, SRL & Ifi/UiO 44 22