Oversikt. Inf Våren Parallelle programmer og felles data. Hva er parallelle programmer I I. Hva er parallelle programmer?
|
|
|
- Ida Berg
- 8 år siden
- Visninger:
Transkript
1 Oversikt Inf Våren 2009 Tråder del 1 Parallelle programmer og felles data Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Hva er parallelle programmer? Hvorfor parallelle programmer? Hvordan kan dette skje i en maskin med bare en CPU/prosessor? Hvordan kan dette skje i en maskin med flere CPU-er/prosessorer? Noen begreper: Programmer, prosesser og tråder Avbrytbare (pre emptive) eller ikke avbrytbare (non pre emptive) prosesser og tråder. Tråder i Java Hvordan nytter vi tråder Oppdaterings problemet: Samtidig oppdatering av data Løsningen: Monitorer = Kritiske regioner med synkroniserte metoder. 2 Hva er parallelle programmer - I Hva er parallelle programmer I I På en datamaskin kan flere programmer kjøre samtidig: Virkelig samtidig: To programmer får på samme tidspunkt utført hver sin instruksjon (må da ha flere CPU-er/prosessorer) Tilsynelatende samtidig: Maskinen (CPU-en/prosessoren) skifter så raskt mellom programmene at du ikke merker det (flere ganger i sekundet). Maskinen utfører da noen få millioner instruksjoner for hvert program før den skynder seg til neste program. Uansett om programmene går virkelig eller tilsynelatende samtidig, må de behandles som om de går virkelig samtidig (fordi man ikke kan forutsi når maskinen skifter fra et program til et annet) Administrasjonen av hvilke program som kjører, og hvordan de deler tiden mellom seg, gjøres av operativsystemet (Unix, Windows, Mac-OS). Operativsystemet er et meget stort program og er det første programmet som startes i maskinen. Det har alle tillatelser, men skrur mange av disse tillatelsene av for vanlige programmer (eks: skrive direkte til disken eller til alle steder i primærlageret/ram). På de fleste operativsystem kan flere brukere være pålogget og kjøre sine programmer samtidig Datamaskinen kan også skifte rask mellom de ulike programmene hver bruker har og som trenger å være aktive samtidig Eks: Du kjører både et Java-program og sitter samtidig og skriver et brev i Word 3 4
2 Hvorfor parallelle programmer? Maskinarkitektur Maskinen har mye større kapasitet enn det vi vanligvis trenger; går for det meste på tomgang. Min PC har mer enn 99% av CPU-tiden kjørt tomgangsprogrammet ( the (the System Idle Process ) siste uke. En bruker trenger å kjøre flere programmer samtidig (se film/skype samtidig som du jobber.) Ofte må mange ulike brukere jobbe på samme data samtidig (eks. et bestillingssystem e med flere e selgere e på samme data: en kino, en flyavgang,...) Dual-core, N-core prosessorer: Ekte parallellitet Før: Nå: prosessor registre cache 2 System-bus cache 1 prosessor registre cache 2 prosessor registre cache 1 cache 1 System-bus prosessor prosessor registre cache 2 registre cache 1 cache 1 Minne (RAM) Minne (RAM) IO-bus IO-bus Disk Disk 5 6 Parallellprogrammering Operativsystemets oppgave Parallellprogrammering vil si å løse en oppgave ved hjelp av programmer (eller programbiter) som skal utføres samtidig. Samarbeidende d prosesser sender meldinger til hverandre (blå piler) eller leser og skriver i felles primærlager (grønne piler) (men vanligvis ikke begge deler). Prosess 1 Prosess 2 Felles data Prosess 3 7 Operativsystemet velger hver gang det kjører, blant de mange programmene som er klare til å kjøre, hvilket som skal kjøres nå. Hver gang: Det kommer noe data utenfra (tastatur, mus, disk, nettverk) Den innebygde klokka tikker (50 ganger i sekundet) Da vekkes operativsystemet opp og overtar kontrollen fra (avbryter) det programmet som kjørte. Må huske hva det avbrutte programmet var i ferd med å gjøre. Så bestemmer operativsystemet t t rettferdig hvilket program som nå skal overta og kjøre litt: De med høyest prioritet må slippe til oftest og mest Ingen må vente alt for lenge Dersom intet program ønsker å kjøre, har operativsystemet en egen tomgangsprosess som kan kjøre (går bare rundt i en tom løkke). 8
3 Programmer, prosesser og tråder Operativsystemet administrerer Prosesser (og et antall tråder i hver prosess) Prosesser En prosess er utføringen av et program Er isolert fra hverandre, kan i utgangspunktet bare snakke til operativsystemet Kan sende meldinger til andre prosesser via operativsystemet Eier hver sin del av hukommelsen Eier hver sine filer,.. Hver eies av en bruker (eller op.sys) Et program Startes som én prosess (kan så evt. starte andre prosesser) En tråd Er parallelle eksekveringer k inne i én prosess Alle tråder i en prosess deler prosessens del av hukommelsen (ser samme variable og programkode) Tråder er som små -prosesser inne i en vanlig stor prosess P1 P2 Operativsystemet (styrer alt) Pn 9 10 Hvorfor fant man på tråder? Hva nytter vi tråder til? Vi har prosesser hvorfor ikke bare bruke dem? Det går greit, men litt tregt Å skifte fra at en prosess kjører til at en annen kjører tar omlag instruksjoner Prosesser ble funnet på omlag 1960, tråder minst 20 år seinere. Tråder er som små prosesser inne i én prosess, og det er langt rasker å skifte fra en tråd til en annen tråd (kalles ofte lettvektsprosesser) Prosesser kommuniserer vanligvis via operativsystemet Tråder kommuniserer via felles data Ellers har tråder og prosesser omlag samme muligheter og problemer når man lager programmer Parallellprogrammering = bruke flere prosesser og/eller flere tråder for å løse en programmeringsoppgave Programmer med tråder er vanskeligere å skrive og teste/feilsøke enn bare én tråd i én prosess (som dere grovt sett har gjort til nå) Vi har et program som skal betjene flere brukere (som flybestilling). Hver bruker får da hver sin tråd, som betjener én bruker. Mange aktiviteter samtidig på PC-en din (inklusive kommunikasjon med omverdenen) Simuleringsmodeller: Etterape prosesser i virkeligheten for å finne ut statistikk/utfalet for f.eks. køer på et motorvei, variasjoner i biologiske systemer (simulere laks fra fødsel til død), datanettverk, krigføring (slag med tanks og fly),... (men kvasiparallellitet mer vanlig) Om det finnes flere prosessorer kan programmet med tråder gå raskere ( Dual/Quad/8/16/. -core -prosessorer) Tråder og prosesser: Hver ting du skal kunne gjøre, skrives som et enkelt program som gjør én oppgave for én bruker Skal så en bruker gjøre flere ting samtidig eller flere brukere gjøre en ting hver, nytter vi flere tråder og/eller prosesser (en til hver) 11 12
4 Tråder i Java Er innebygget i språket I ethvert program er det minst én tråd (den som starter og kjører i main) Fra denne tråden kan vi starte flere andre, nye tråder En tråd starter enten som: Et objekt av en subklasse av class Thread som inneholder en metode run() som du skriver i subklassen. Slik gjør du: Lag først objektet av subklassen (new...) Kall så metoden start() i objektet (ikke laget av deg, men arvet fra Thread). start() sørger for at run(), som du har skrevet, vil bli kalt. Thread implementerer grensesnittet Runnable (se under) Et objekt av en klasse som også implementerer grensesnittet Runnable run() er eneste metode i grensesnittet Gi dette objektet som parameter til klassen Thread, og kall start( ) på dette Thread-objektet Litt mer komplisert. 13 public class Restaurant { int antbestilt; int antlaget = 0, antservert = 0; // tallerkenrertter int antkokker = 5, antservitører = 50; Restaurant(int ant) { antbestilt ant; for (int i 0; i < antkokker; i++) { Kokk k = new Kokk(this, "Kokk nr. " + i); k.start(); for (int i = 0; i < antservitører; i++) { Servitor s = new Servitor(this, "Servitør nr. " + i); s.start(); new Restaurant(Integer.parseInt(args[0])); synchronized boolean kokkferdig() { return antlaget == antbestilt; synchronized boolean servitørferdig() { return antservert == antbestilt; synchronized boolean puttallerken(kokk k) { // Kokketråden blir eier av låsen. while (antlaget - antservert > 2) { /* så lenge det er minst 2 tallerkner * som ikke er servert, skal kokken vente. */ wait(); /* Kokketråden gir fra seg låsen og sover til den catch (InterruptedException e) { // Kokketråden blir igjen eier av låsen boolean ferdig = kokkferdig(); kkf if (!ferdig) { antlaget++; System.out.println(k.getName() + " laget nr: " + antlaget); notify(); /* Si ifra til servitøren. */ return!ferdig; synchronized boolean gettallerken(servitor s) { // Servitørtråden blir eier av låsen. while (antlaget == antservert &&!servitørferdig()) { /* så lenge kokken ikke har plassert en ny tallerken. Dermed skal * servitøren vente. */ wait(); /* Servitørtråden gir fra seg låsen og sover til den catch(interruptedexception e) { // Servitørtråden blir igjen eier av låsen. boolean ferdig = servitørferdig(); if (!ferdig) { antservert++; System.out.println(s.getName() + " serverer nr: " + antservert); notify(); /* si ifra til kokken */ return!ferdig; class Kokk extends Thread { Restaurant rest; Kokk(Restaurant rest, String navn) { super(navn); // Denne tråden heter nå <navn> this.rest = rest; while (rest.puttallerken(this)) ( { // levert tallerken. catch (InterruptedException e) { // Kokken er ferdig class Servitor extends Thread { Restaurant rest; Servitor(Restaurant rest, String navn) { super(navn); // Denne tråden heter nå <navn> this.rest = rest; public void run() En { tråd i programmet while (rest.gettallerken(this)) { catch (InterruptedException e) { // Servitøren er ferdig Tankemodell for tråder public class Restaurant { int antbestilt; int antlaget = 0, antservert = 0; // tallerkenrertter int antkokker = 5, antservitører = 50; Restaurant(int ant) { antbestilt ant; for (int i 0; i < antkokker; i++) { Kokk k = new Kokk(this, "Kokk nr. " + i); k.start(); for (int i = 0; i < antservitører; i++) { Servitor s = new Servitor(this, "Servitør nr. " + i); s.start(); new Restaurant(Integer.parseInt(args[0])); synchronized boolean kokkferdig() { return antlaget == antbestilt; synchronized boolean servitørferdig() { return antservert == antbestilt; synchronized boolean puttallerken(kokk k) { // Kokketråden blir eier av låsen. while (antlaget - antservert > 2) { /* så lenge det er minst 2 tallerkner * som ikke er servert, skal kokken vente. */ wait(); /* Kokketråden gir fra seg låsen og sover til den catch (InterruptedException e) { // Kokketråden blir igjen eier av låsen boolean ferdig = kokkferdig(); if (!ferdig) { antlaget++; System.out.println(k.getName() + " laget nr: " + antlaget); notify(); /* Si ifra til servitøren. */ return!ferdig; synchronized boolean gettallerken(servitor s) { // Servitørtråden blir eier av låsen. while (antlaget == antservert &&!servitørferdig()) { /* så lenge kokken kk ikke har plassert en ny tallerken. Dermed skal * servitøren vente. */ wait(); /* Servitørtråden gir fra seg låsen og sover til den catch(interruptedexception e) { // Servitørtråden blir igjen eier av låsen. boolean ferdig = servitørferdig(); if (!ferdig) { antservert++; System.out.println(s.getName() + " serverer nr: " + antservert); notify(); /* si ifra til kokken */ return!ferdig; class Kokk extends Thread { Restaurant rest; Kokk(Restaurant rest, String navn) { super(navn); // Denne tråden heter nå <navn> this.rest = rest; while (rest.puttallerken(this)) { // levert tallerken. catch (InterruptedException e) { // Kokken er ferdig class Servitor extends Thread { Restaurant rest; Servitor(Restaurant rest, String navn) { super(navn); // Denne tråden heter nå <navn> To this.rest tråder = rest; i programmet while (rest.gettallerken(this)) { catch (InterruptedException e) { // Servitøren er ferdig Tråder i Java: tråden Sove og våkne class MinTråd extends Thread { public void run( ) { while (<mer å gjøre>) { <gjør noe>; try y{ {sleep(<et tall, dvs. en stund>); catch (InterruptedException e) {... // end while run inneholder vanligvis //endrun //end class MinTråd En tråd lages og startes opp slik: MinTråd tråden; tråden = new MinTråd( ); tråden.start( ); en løkke som utføres til oppgaven er ferdig. MinTråd objekt (en tråd) start run Her går den nye og den gamle tråden (dette programmet), vider hver for seg En tråd kan sove et antall milli- (og nano) sekunder; metode i Thread: static void sleep (long millis) Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds. Andre tråder slipper da til (får kjøre) Hvis noen avbryter tråden mens den sover skjer et unntak: sleep(1000); // sover ett sekund catch (InterruptedException e) { behandle avbrudd start( ) er en metode i Thread som må kalles opp for å få startet tråden. start-metoden vil igjen kalle metoden run (som vi selv programmerer)
5 En Stoppeklokke, subklasse av Thread, inneholder : public void run() Den som lager objektet, kaller start() som igjen kaller run(). class Klokke { In stdin = new In(); System.out.println("Trykk [ENTER] for å starte og stoppe"); stdin.inline(); // Her lages stoppeklokke-objektet: Stoppeklokke stoppeklokke = new Stoppeklokke(); // og her settes den nye tråden i gang. stoppeklokke.start(); stdin.inline(); / venter på ENTER stoppeklokke.end(); class Stoppeklokke extends Thread { boolean stop = false; // blir kalt opp av superklassens start-metode. int tid = 0; while (!stop) { System.out.println(tid++); Thread.sleep(1 * 1000); // ett sekund catch (InterruptedException e) { Avbrytbare eller ikke-avbrytbare prosesser og tråder. Hvis en prosess (eller en tråd) prøver å gjøre en så lang beregning at andre prosesser (tråder) ikke slipper til, må den avbrytes. Alle skikkelige operativsystemer t (Windows 2000, XP og Unix/linux) greier å avbryte både prosesser og tråder f.eks. via klokka som sender avbruddssignal 50 ganger per sek. Gamle/enkle operativsystemer som MS-DOS og Win95 greide ikke det. Tråder er innebygget i Java (dvs. et program kan starte flere tråder) Java-definisjonen sier at det er opp til hver implementasjon av kjøresystemet java om tråder skal være avbrytbare eller ikke. public void end() { stop = true; 18 Tråder kan avbryte seg selv Vanligvis vil operativsystemet dele prosessoren mellom alle aktive tråder (tidsdeling - time-slicing ), og altså kaste en tråd ut av prosessoren etter en tid (på engelsk: pre-emption). p run-metoden kan eksplisit la andre tråder slippe til ved å si yield( ); Noen ganger det kan være ønskelig å la andre aktiviteter komme foran. I visse tilfeller er det til og med nødvendig fordi noen operativsystem ikke klarer å stoppe en tråd og la en annen fortsette (for eksempel klarer Solaris ikke tidsdeling mellom tråder). yield( ); slipper andre tråder til, og lar tråden som utfører yield vente midlertidig (men denne tråden blir igjen startet opp når det på ny er den sin tur). En tråd (Et tråd-objekt) start run while (!done) { : : sleep(500); : : yield ( ); : Sove og Vike Tre trafikklys styrt av tre tråder Laget av Judy Bishop i læreboka Java Gently Men inni er det ingen ting 19 20
6 main JFrame f = new Traffic(); f Her er masse felles datastruktur og metoder for å tegne opp rammen rundt lysene og knappene nederst. actionperformed Traffic3- klasse- 0 data- 1 struktur 2 class SetOfLights er en indre klasse i class Traffic if (event == newsetbutton) { lights[nlights] = new SetOfLights(area, lightsposition); lights[nlights].start(); start();.... SetOfLights[] lights = new SetOfLights[3]; SetOfLights objekt (en tråd) start t run while (true) <tegn lys> SetOfLights objekt (en tråd) start run while (true) <tegn lys> StOfLiht SetOfLights objekt (en tråd) start run while (true) <tegn lys> Traffic3- objekt 21 import java.awt.*; import java.awt.event.*; public class Traffic3 extends JFrame implements ActionListener, ItemListener { private JPanel area; private int lightsposition = 105; private static final int lightswidth = 150; private SetOfLights[] lights = new SetOfLights[3]; private int nlights = 0, setwanted = 0; private JTextField duration; private JComboBox colours; private int light; private JButton newsetbutton; private JButton walkbutton; private JButton closebutton; Alle data er skjult for omverdenen public Traffic3() { super("traffic Lights version 3 "); getcontentpane().add("north",new Label ("Savanna Traffic Light Simulation",Label.CENTER)); area = new JPanel(); area.addmouselistener(new MouseEvtHandler()); getcontentpane().add("center",area); JPanel buttons = new JPanel(); newsetbutton = new JButton("New Set"); newsetbutton.addactionlistener(this); buttons.add(newsetbutton); colours = new JComboBox (); Et eget colours.additem("red"); objekt colours.additem("green"); colours.additem("yellow"); colours.additem( additem("walk"); colours.seteditable(false); colours.additemlistener(this); light = 0; buttons.add(colours); buttons.add(new JLabel("Duration")); duration = new JTextField("", 4); duration.addactionlistener(this); buttons.add(duration); walkbutton = new JButton("Walk"); walkbutton.addactionlistener(this); buttons.add(walkbutton); closebutton = new JButton("Close"); closebutton.addactionlistener(this); buttons.add(closebutton); getcontentpane().add("south",buttons); som tar seg av museklik k 22 public void itemstatechanged(itemevent e) { String s = (String) e.getitem(); if (s.equals("red")) {light = 0; else if (s.equals("green")) {light = 1; else if (s.equals("yellow")) {light = 2; else if (s.equals("walk")) {light = 3; class MouseEvtHandler extends MouseAdapter { public void mousepressed(mouseevent e) { int n = e.getx() / lightswidth; if (n < nlights) setwanted = n; En egen klasse som tar seg av museklikk JFrame f = new Traffic3(); f.setsize(450, 210); f.setvisible(true); f.addwindowlistener(new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ); En annen måte å // slutt main sørge for at programmet terminerer normalt Sett den fargen som skal forandres Nytt lys Max tre lys Lyttemetoden ligger i hoved-objektet: objektet: public void actionperformed(actionevent e) { Object event = e.getsource(); if (event == newsetbutton) { lights[nlights] = new SetOfLights(area, lightsposition); lights[nlights].start(); lightsposition += lightswidth; nlights++; if (nlights = = 3) newsetbutton.setenabled(false); else if (event = = walkbutton) { lights[setwanted].walk = true; else if (event = = duration) { lights[setwanted].time[light]= Integer.parseInt(duration.getText()); else if (event = = closebutton) { for (int i = 0; i<nlights; i++) lights[i].stop(); setvisible(false); dispose(); System.exit(0); // slutt actionperformed 23 Trådene class SetOfLights extends Thread { private int red = 0; private JPanel area; private int x; private int light; boolean walk = false; boolean walkon = false; int time [] = {500, 500, 500, 500; Tråden(e)s tilstand Konstruere en tråd: public SetOfLights(JPanel c, int x) { area = c; this.x = x; Selve tråden(e) public void run( ) { while (true) { for (int light = 0; light < 3; light++) { if (light == red & walk) { walkon = false; for (int i = 0; i < 11; i++) { draw(light); sleep(time[3]); catch (InterruptedException e) { walkon =!walkon; walk = false; else { draw(light); sleep(time[light]); catch (InterruptedException e) { // slutt while (true) // slutt run 24
7 Grønn void draw(int light) { Graphics g = area.getgraphics(); g.setcolor(color.black); g.drawoval(x-8, 10, 30, 68); g.setcolor(color.cyan); g.fillrect(x-90,10,70,100); g.setcolor(color.black); g.drawstring(""+time[0], x-70, 28); g.drawstring(""+time[2], x-70, 48); g.drawstring(""+time[1], x-70, 68); g.drawstring(""+time[3], x-70, 98); switch (light) { case 0: g.setcolor(color.red); g.filloval(x, 15, 15, 15); g.setcolor(color.lightgray); g.filloval(x, 35, 15, 15); g.filloval(x, 55, 15, 15); break; case 1: g.setcolor(color.green); g.filloval(x, 55, 15, 15); g.setcolor(color.lightgray); g.filloval(x, 15, 15, 15); g.filloval(x, 35, 15, 15); break; Gul Her tegner tråden ut sitt lys Rød variablen ibl light styrer uttegningen g case 2: g.setcolor(color.yellow); g.filloval(x, l( 35, 15, 15); g.setcolor(color.lightgray); g.filloval(x, 15, 15, 15); g.filloval(x, 55, 15, 15); break; // slutt case if (light == red & walk) { if (walkon) g.setcolor(color.green); else g.setcolor(color.white); g.filloval(x+1, 85, 14, 14); else { g.setcolor(color.black); g.drawoval(x, 85, 15, 15); // slutt draw //slutt tråd-klassen SetOfLights // slutt class Traffic3 Oppdaterings problemet: Samtidig oppdatering av data Løsningen: Kritiske regioner med synkroniserte metoder. Først: mer intro og aller enkleste eksempel Så et program som feiler: Flysalg.java Deretter et program som er riktig: Flysalg2.java Felles data F Enkelt eksempel på at to tråder kan ødelegge felles data. Felles data (grønne felt) må vanligvis bare aksesseres (lese eller skrives i) av en tråd om gangen. Hvis ikke blir det kluss i dataene. På figuren vår er det to områder vi har problemer med (dvs. at to eller flere tråder kan risikere å manipulere data i disse områdene samtidig). Disse to områdene er markert med F (for Felles). Et slikt område kalles en monitor. Prosess k De andre to områdene inneholder data som vi enten vet at bare en tråd om gangen bruker, eller som er slik at det ikke er noe problem om flere tråder bruker det samtidig. Slike resonementer er imidlertid farlige og ofte feilaktig, derfor er det egentlig best å beskytte alle delte data (som hører sammen) som om de kan bli oppdatert samtidig. F Monitor er ikke noe ord i Java 27 Felles data: Tråden Ta: Tråden Gi: int penger int x; int x; = 2000; fll felles felles x = felles.penger; x = fll felles.penger; x -= 500 ; x += 500 ; felles.penger = x; felles.penger = x; La oss se hva som skjer hvis tråden Ta først utføres litt, og stopper opp ved pilen. Deretter overtar tråden Gi, og hele denne tråden utføres Hva med ekte ferdig. Til slutt utføres resten av tråden Ta. parallellitet? 28
8 Felles data: int penger = 2000; void ta( ) int x; x = penger; x -= 500 ; penger = x; void gi( ) int x; x = felles.penger; x += 500 ; felles.penger = x; Samme med metoder Tråden Ta:... felles.ta( )... felles Tråden Gi: felles... fll felles.gi( i()... Trådene utfører metodene ta og gi som om koden inne i metodene var en del av trådenes kode. På samme måte som på forrige side kan vi se hva som skjer hvis tråden Ta først utfører metoden ta litt, og så stopper opp ved pilen. Deretter overtar tråden Gi, og hele denne tråden utføres ferdig (og utfører hele metoden gi). Til slutt utføres resten av tråden Ta (metoden ta). 29 Vi ordner dette med kritiske regioner / synkroniserte metoder. Felles data: int penger = 2000; synchronized void ta (int ant) int x; x = penger; x -= ant ; penger = x; synchronized void gi (int ant) int x; x = penger; x += ant ; penger = x; Tråden Ta: felles felles.ta(500); Tråden Gi: felles felles.gi(500); En kritisk region er en kodebit som utføres ferdig før en annen tråd får lov å utføre en kritisk region (med hensyn på de samme dataene). Max en tråd om gangen eier objektet (dataene, monitoren). Metodene i et objekt blir kritiske regioner når det står synchronized foran metodenavnene. Høyst én kritisk region kan utføres inne i et objekt om gangen. Derfor blir den felles datastrukturen inne i objektet beskyttet, og riktig oppdatert (hvis metodene er riktig programmert). Innkapsling 30 class Flysalg { static int antseter = 7; int antsolgt = 0; Nytt eksempel som feiler: System.out.println("Skal selge::" + antseter + " flyseter med 2 selgere"); Flysalg fly= new Flysalg(); Selger s1 = new Selger ( Stein ", fly); s1.start(); start(); Selger s2 = new Selger( Michael", fly); s2.start(); int antigjen () { return antseter; void selg(int ant ) { antseter -= ant; antsolgt +=ant; System.out.println(" Salg: ant igjen:" + antseter +", ant solgt: " + antsolgt); class Selger extends Thread { Flysalg fly; String navn; Skal selge::7 flyseter med 2 selgere Stein vil selge:2 Michael vil selge:4 Salg: ant igjen:3, ant solgt: 4 Salg: ant igjen:1, ant solgt: 6 Stein vil selge:1 Michael vil selge:1 Salg: ant igjen: 0, ant solgt: 7 Salg: ant igjen: -1, ant solgt: 8 Press any key to continue... Selger(String navn,flysalg fly) { this.navn = navn; this.fly = fly; while (fly.antigjen() > 0 ) { int ønske = (int) (Math.random() * fly.antigjen() + 1); System.out.println( navn+ " vil selge:" + ønske); // vent litt catch (InterruptedException e) { fly.selg(ønske); l sleep((long) 2000); // vent 2 sek catch (InterruptedException e) { // Selgere ferdig
9 Mer om synkroniserte metoder / kritiske regioner / monitorer Alle tråder har felles adresserom Hvis flere tråder forsøker samtidig å først lese en variabel a så oppdatere (endre) a basert på den verdien den leste, kan det gå galt (jfr. eksemplet side 20-30) FORDI: En tråd X kan først lese verdien av a, og så bli avbrutt. Så kan andre tråder Y, Z komme inn og endre a Når X igjen får kjøre, vil den oppdatere a ut fra a s gamle verdi, og ikke det den nå er Vi må beskytte slik lesing og så skriving av samme data Setter vi synchronized foran metodene, vil vi sikre at: Høyst en tråd er inne i noen av de synkroniserte metodene i dette objektet samtidig. Dette er monitorens eier. En tråd får slippe til, de andre trådene må vente Når den ene er ferdig, slipper de som venter til (en etter en) Alle data i objektet blir skrevet skikkelig ned i variablene i RAM 33 class Flysalg2 { static int antseter = 7 ; int antsolgt=0; System.out.println("Skal selge::" + antseter + " flyseter med 2 selgere"); Flysalg2 fly= new Flysalg2(); Selger s1 = new Selger ( Stein ", fly); s1.start(); Selger s2 = new Selger( Michael", fly); s2.start(); int antigjen () { return antseter; synchronized boolean prøvsalg(int ant) { if (antseter >= ant ) { antseter -= ant; antsolgt += ant; System.out.println(" Salg: ant igjen:" + antseter + ", ant solgt: " + antsolgt); return true; else { return false; class Selger extends Thread { Flysalg fly; String navn; Selger(String navn,flysalg fly) { this.navn = navn; this.fly = fly; while (fly.antigjen() > 0 ) { int ønske = (int) (Math.random() * fly.antigjen() +1); System.out.println( navn+ " vil selge:" + ønske); // vent litt catch (InterruptedException e) { Skal selge::7 flyseter med 2 selgere Stein vil selge:6 Michael vil selge:5 Salg:5, ant igjen:2, ant solgt: 5 Salget OK for:michael Allerede solgt for Stein Michael vil selge:2 Stein vil selge:2 Salg:2, ant igjen:0, ant solgt: 7 Salget OK for:stein Allerede solgt for Michael Press any key to continue... if ( fly.prøvsalg(ønske)) System.out.println("Salget OK for:" + navn); else System.out.println("Allerede solgt for " + navn);); sleep((long) 2000); // vent 2 sek catch (InterruptedException e) { // Selgere ferdig Et større litt større eksempel kokk og servitør Kokken lager mat og setter fram tallerkner Servitøren tar en tallerken og serverer Kokken må ikke sette mer enn to tallerkner foran servitøren (maten blir kald) Servitøren kan selvsagt ikke servere mat som ikke er laget Her: en kokk og en servitør senere flere av hver. >java Restaurant0 10 Kokken laget nr 1 Servit r serverer nr:1 Kokken laget nr 2 Servit r serverer nr:2 Kokken laget nr 3 Servit r serverer nr:3 Kokken laget nr 4 Kokken laget nr 5 Servit r serverer nr:4 Kokken laget nr 6 Servit r serverer nr:5 Kokken laget nr 7 Servit r serverer nr:6 Servit r serverer nr:7 Kokken laget nr 8 Servit r serverer nr:8 Kokken laget nr 9 Servit r serverer nr:9 Kokken laget nr 10 Servit r serverer nr:10 36
10 wait(); notify(); Kokken må vente når det er to tallerkner i kø Servitøren må vente når det ikke er laget noe mat Kokken må starte opp kelneren igjen når han har laget tallerken nr. 1 (eller alltid når han har laget en tallerken?) Servitøren må starte opp kokken igjen når han tar tallerken nr. 2 (eller alltid når han tar en tallerken?) Kokk Servitør wait(); wait(); notify(); notify(); 37 public class Restaurant0 { int antbestilt ; int antlaget= 0, antservert = 0; // tallerkenretter Restaurant0(int ant) { antbestilt = ant; Restaurant0 rest; rest = new Restaurant0(Integer.parseInt(args[0])); Kokk kokk = new Kokk(rest); kokk.start(); Servitor servitor = new Servitor(rest); servitor.start(); start(); synchronized boolean kokkferdig () { return antlaget == antbestilt; synchronized boolean servitørferdig () { return antservert == antbestilt; synchronized void puttallerken() { // Kokketråden blir eier av låsen. while (antlaget - antservert > 2) { /* så lenge det er minst 2 tallerkner * som ikke er servert, skal kokken vente. */ wait(); /* Kokketråden gir fra seg * låsen og sover til den catch (InterruptedException e) { // Kokketråden blir igjen eier av låsen. antlaget++; System.out.println("Kokken laget nr " + antlaget); notify(); /* Si ifra til servit{øren. */ synchronized void gettallerken() { // Servitørtråden blir eier av låsen. while (antlaget == antservert ) { /* så lenge kokken ikke har plassert * en ny tallerken. Dermed skal * servitøren vente. */ wait(); /* Servitørtråden gir fra seg * låsen og sover til den catch (InterruptedException e) { // Servitørtråden blir igjen eier av låsen. antservert++; System.out.println("Servitør serverer nr:" + antservert); notify(); /* si ifra til kokken. */ // end class Restaurant0 class Kokk extends Thread { Restaurant0 rest; Kokk(Restaurant0 rest) { this.rest = rest; while(!rest.kokkferdig()) { rest.puttallerken(); // lever tallerken catch (InterruptedException e) { // Kokken er ferdig class Servitor extends Thread { Restaurant0 rest; Servitor(Restaurant0 rest) { this.rest = rest; while (! rest.servitørferdig()) servitørferdig()) { rest.gettallerken(); /* hent tallerken og * server */ catch (InterruptedException e) { // Servitøren er ferdig Tror du dette programmet er feil? Hvis ja: Påvis en kjøring som gir en feilsituasjon Tror du dette programmet er riktig? Tror du dette programmet er riktig? Hvis ja: Begrunn hvorfor det er riktig?
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
INF1010 - Våren 2015 Li' repe$sjon om Tråder og GUI Stein Gjessing,, Universitetet i Oslo 1 GUI, tråder og hendelser Op-sys (Win, Linux,..) Ditt Program sin Event Dispatch Thread Hver ting brukeren gjør
La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet
K A P I T T E L 18 Tråder N år et program kjøres, utføres programsetningene i en bestemt rekkefølge. En tråd er det samme som denne programflyten, og i dette kapitlet skal vi se på hvordan vi starter og
INF Våren 2017 Tråder del 1
INF1010 - Våren 2017 Tråder del 1 23. mars 2017 Stein Gjessing,, Universitetet i Oslo Horstmann kap 20.1 20.3 1 Maskin med 8 kjerner 2 Oversikt Hva er parallelle programmer? Hvorfor parallelle programmer?
IN1010''1 Våren 2018 Tråder del'1. 3.'april 2018''
IN1010''1 Våren 2018 Tråder del'1 3.'april 2018'' Stein'Gjessing,,' Universitetet'i'Oslo Horstmann)kap)20.1) 20.3) 1 Maskin'med'8'kjerner 2 Oversikt Hva'er'parallelle'programmer? Hvorfor'parallelle'programmer'?
Tråder i Java Parallelle programmmer og programbiter
Oversikt Tråder i Java Parallelle programmmer og programbiter Stei Gjessig, Ist. for iformatikk, Uiv. i Oslo Hva er parallelle programmer? Hvorfor parallelle programmer? Hvorda ka dette skje i e maski
Tråder Repetisjon. 9. og 13. mai Tråder
Tråder Repetisjon 9. og 13. mai Tråder Hva er tråder? 2 Hva er tråder? I utgangspunktet uavhengige aktiviteter som konkurrerer om å få bruke prosessoren. 2 Hvorfor tråder? 3 Hvorfor tråder? Flere oppgaver
INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd
J INF1010 Tråder J Marit Nybakken [email protected] Motivasjon Til nå har vi kun skrevet programmer der programmet bare var på ett sted i koden til enhver tid (bortsett fra når vi har drevet med GUI,
IN1010 våren Repetisjon av tråder. 15. mai 2018
IN1010 våren 2018 Repetisjon av tråder 15. mai 2018 Stein Gjessing,, Universitetet i Oslo 1 Tråder Datamaskinarkitektur prosessor registre cache 1 cache 2 prosessor registre cache 1 Disk System-bus Minne
INF1010 Tråder II 6. april 2016
INF1010 Tråder II 6. april 2016 Stein Gjessing Universitetet i Oslo 1 Tråder i Java tråden minrunp class MinRun implements Runable { MinRun(... ) {... } public void run( ) {...... } } //end
Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %
Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 % Stein Gjessing Institutt for Informatikk Universitetet i Oslo 1 Oppgave 10 Tegning av datastrukturen (vekt 5% av del B) Tegn datastrukturen til
INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo
INF, 22. mai 23 Prøveeksamen 23 (Eksamen 2. juni 22) Stein Gjessing Inst. for Informatikk Universitetet i Oslo Oppgave a Tegn klassehierarkiet for de 9 produkttypene som er beskrevet over. Inkluder også
GUI («Graphical User Interface») del 2
GUI («Graphical User Interface») del 2 Interaksjon med brukeren Hendelsesdrevet programmering Tråder i GUI Et spill basert på klikkbare ruter Se også på Infoskrivet https://www.uio.no/studier/emner/matnat/
Sortering med tråder - Quicksort
Sortering med tråder - Quicksort Skisser til to programmer INF1010 våren 2016 Stein Gjessing Institutt for informatikk Universitetet i Oslo Sortering som tema, slikt som valg av sorteringsmetode, hastigheten
2 Om statiske variable/konstanter og statiske metoder.
Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.
INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk
INF2440 Prøveeksamen, løsningsforslag, 20 mai 2015 Arne Maus PSE, Inst. for informatikk 1 Prøveeksamen Er en modell av hva du får til eksamen: - like mange (+-1) oppgaver som eksamen og nesten samme type
Gjennomgang av eksamen H99
Gjennomgang av eksamen H99 Administrasjon av kurser, studenter og påmeldinger Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for Informatikk Universitetet i Oslo Oppgave 1 (15 %) (Besvares
INF Notater. Veronika Heimsbakk 10. juni 2012
INF1010 - Notater Veronika Heimsbakk [email protected] 10. juni 2012 1 Tilgangsnivåer 2 CompareTo Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N
LO191D/LC191D Videregående programmering
LO191D/LC191D Videregående programmering Eksamen mai 2012 Løsningsforslag Oppgave 1 Klassen Destinasjon: // Oppgaven er uklar på hva som skal inn i klassen Destinasjon. // Her følger en minimumsutgave
2 Om statiske variable/konstanter og statiske metoder.
Gaustadbekkdalen, januar 22 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår i primærlageret når
Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.
Dagens forelesning Java 13 Design av større programmer : fordeling av roller INF 101-13. mars 2003 Flere eksempler på bruk av objekter MVC-prinsippet MVC-prinsippet Flere eksempler på programmer med objekter
Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf 1010-2008 GUI - del 2
GUI (Graphical User Interface)-programmering Inf 1010-2008 GUI - del 2 Stein Gjessing Inst for Informatikk Univ. i Oslo Tidligere Hvordan få laget et vindu på skjermen Grafikk (tegning i vinduet) Hvordan
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider. Vedlegg:
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider.
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Onsdag 4. juni 2014 Tid for eksamen: 9:00-15:00 Oppgavesettet er på
Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.
Kapittel 7 Synkronisering II etingelse oppfylt (0) liste venteliste tråd-deskriptor tråd-deskriptor tråd-deskriptor tråd-deskriptor Figur 7-1: Datastrukturen for en etingelse. are når oppfylt er 0 kan
Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006
Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006 Prosesser og tråder Datamaskinen lager prosesser. En prosess organiserer arbeidet i et program ved å administrere tråder. Det er
Avdeling for ingeniørutdanning Institutt for teknologi
Avdeling for ingeniørutdanning Institutt for teknologi Oppgavetittel: Lab Fag(nr./navn): DOPS2021 - Operativsystemer Gruppemedlemmer: T. Alexander Lystad Faglærer: Karoline Moholth Dato: 15. oktober 2009
INF1010 våren januar. Objektorientering i Java
INF1010 våren 2017 25. januar Objektorientering i Java Om enhetstesting (Repetisjon av INF1000 og lær deg Java for INF1001 og INF1100) Stein Gjessing Hva er objektorientert programmering? F.eks: En sort
INF våren 2017
INF1010 - våren 2017 Om Java Objekter og klasser Både for deg som kan og for deg som ikke kan Java Stein Gjessing Universitetet i Oslo Ny versjon etter forlesningen der tre meningsløse private modifikatorer
TOD063 Datastrukturer og algoritmer
TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage
Definisjon av prosess
Prosesser og tråder Definisjon av prosess Enkel definisjon: En prosess er et program som kjører på datamaskinen Mer presis definisjon: En prosess er en samling av ressurser som er nødvendige for å utføre
INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo
INF1010, 21. februar 2013 Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo Ikke noe nytt her From the Java language specification (version 6): 14.14.2
Grafisk Brukergrensesnitt
Grafisk Brukergrensesnitt Repetisjonskurs Hva må kunnes? JFrame JPanel JComponents Layouts Listeners jframe Representerer et vindu JComponents legges på vinduet Har en tittel og størrelse Komponenter struktureres
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; }
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; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =
Eksempler på ikke-blokkerende systemkall:
Blokkerende systemkall Thread-modeller Thread-modeller Blokkerende systemkall Viktigste grunn for tråder: blokkerende I/O forespørsler Applikasjonen som ber om I/O blir satt på vent av operativsystemet
INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010
Grafisk brukergrensesni3 med Swing og awt del 1 GUI (Graphical User Interface)- programmering Hvordan lage et vindu på skjermen Hvordan legge ulike komponenter i vinduet (trykknapper, tekseelter, tekst,
import javax.swing.*; import java.awt.*;
import javax.swing.*; import java.awt.*; import javax.swing.*; import java.awt.*; Pluss mange Implementasjoner av forskjellige grensesnitt class RammeDemo { public static void main(string[] args) { JFrame
Velkommen til. INF våren 2016
Velkommen til INF1010 - våren 2016 Denne uken (onsdag og torsdag): Om INF1010 Java datastrukturer Klasser med parametre i Java Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 1 INF1010
INF2100. Oppgaver 26. september til 1. oktober 2007
INF2100 Oppgaver 26. september til 1. oktober 2007 1 Språket Denne uken skal vi implementere en utvidelse av språket fra forrige ukes oppgave. Syntaksen er vist i figur 1 på neste side og betydning er
INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)
INF1010 våren 2019 Onsdag 30. januar Mer om unntak i Java (med litt repetisjon av I/O først) Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type:
Grafiske brukergrensesnitt med Swing og AWT
Grafiske brukergrensesnitt med Swing og AWT - 1 av 11 INNHOLD INTRODUKSJON 3 VINDUER, RAMMER OG PANELER. 4 KOMPONENTER OG VINDUSELEMENTER 6 KNAPPER OG KNAPPELYTTERE.. 8 LAYOUT.. 10 APPENDIX. 11 2 av 11
public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren
Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en
Fra Python til Java, del 2
Fra Python til Java, del 2 Hvordan kjøre Java? På Ifis maskiner På egen maskin Et eksempel Array-er For-setninger Lesing og skriving Metoder Biblioteket Hva trenger vi egentlig? Å kjøre Java For å kunne
IN1010 våren januar. Objektorientering i Java
IN1010 våren 2018 23. januar Objektorientering i Java Om enhetstesting Om arrayer og noen klasser som kan ta vare på objekter Stein Gjessing Hva er objektorientert programmering? F.eks: En sort boks som
Socket og ServerSocket
Side 1 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 Dette dokumentet er revidert den 29.8.2006, kl:12:30. Det er foretatt rettelser i begge versjoner av klassen A_Server. Socket og ServerSocket
Repitisjonskurs. Arv, Subklasser og Grensesnitt
Repitisjonskurs Arv, Subklasser og Grensesnitt Subklasser Klasser i OO-programmering representerer typer av objekter som deler et sett med egenskaper. En subklasse har egenskapene til en klasse + ett sett
public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren
Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en
13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER
.9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,
Enkle generiske klasser i Java
Enkle generiske klasser i Java Oslo, 7/1-13 Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Del 1: Enkle pekere Før vi tar fatt på det som er nytt i dette notatet, skal vi repetere litt
Introduksjon til objektorientert programmering
Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes
IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr
IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden [email protected] Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler
GUI («Graphical User Interface») del 2
GUI («Graphical User Interface») del 2 Interaksjon med brukeren Hendelsesdrevet programmering Tråder i GUI Se også på Infoskrivet https://www.uio.no/studier/emner/matnat/ ifi/in1010/v18/gui/fx-intro-in1010.pdf
I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ
INF2440-V18 Information INF2440 Vår 2018 eksamen Dato og tid: 11. juni 2018 09:00. Varighet: 4 timer Hjelpemidler: Alt skriftlig materiale er tillatt. Ingen elektroniske hjelpemidler er tillatt. Powerpoint
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 6. juni 2006 Tid for eksamen: 1430 1730 Oppgavesettet er på 6 sider. Vedlegg: INF1010 Objektorientert programmering
< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»
< T extends Comparable > Indre klasser mm. «Det du bør ha hørt om før oblig 4» Strukturen i oblig 3 null null null null Personbeholder pl null null Person p "Adnan" [email protected] INF1010 21. februar
OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?
OPPGAVESETT 4 PROSEDYRER Oppgavesett 4 i Programmering: prosedyrer. I dette oppgavesettet blir du introdusert til programmering av prosedyrer i Java. Prosedyrer er også kjent som funksjoner eller subrutiner.
Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm
Mer om easyio Mer om forgreninger Løkker 7. september 2004 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 4 1 Tre måter å lese fra terminal Først:
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i: INF2440 Effektiv parallellprogrammering Prøveeksamensdag: 1. juni 2016 Tidspunkter: 09.00 16.00 Oppgavesettet er på: 4 sider
Løsningsforslag Test 2
Løsningsforslag Test 2 Oppgave 1.1: Interface definerer et grensesnitt som kan implementeres av flere klasser. Dette gir en standardisert måte å kommunisere med objekter av en eller flere relaterte klasser.
Scheduling og prosesshåndtering
Scheduling og prosesshåndtering Håndtering av prosesser i et OS OS må kontrollere og holde oversikt over alle prosessene som kjører på systemet samtidig Prosesshåndteringen må være: Korrekt Robust Feiltolerant
INF1010, 15. januar 2014 2. time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo
INF1010, 15. januar 2014 2. time Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo Repetisjon fra gamle dager: Metoder med parametre En metode uten parameter:
INF1010. Grensesnittet Comparable<T>
INF1010 21. februar 2013 Grensesnittet Comparable Stein Michael Storleer Institutt for Informatikk Universitetet i Oslo Interface med parametre interface Utkledd { // T er klassen jeg er utkledd
IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo
IN1010 våren 2018 Tirsdag 15. mai Repetisjon av subklasser og tråder Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 Klassehierarki: Personbil Bil Klasser - Subklasser class Bil {
INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen
INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og
AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE
AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE Emne: Informatikk II Emnekode: LO325E Faglig veileder: G.Milvang og H.Hemmer Gruppe(r): 2EA,2EB,2EC Dato:12.12.03 Eksamenstid:9 00-14 00 Eksamensoppgaven
Operativsystemer, prosesser og tråder
Dagens program Grunnleggende tråd-programmering i Java: Java-tråder: definisjoner, egenskaper Interferens Låsing og synkronisering Venting og signallering Løpende eksempel: lesere og skrivere Erfaringer
(MVC - Model, View, Control)
INF1010 - våren 2008 Modell - Utsyn - Kontroll (MVC - Model, View, Control) Stein Gjessing Inst. for informatikk Et bankprogram Vi skal lage et program som håndterer kontoene i en bank. En konto eies av
GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.
Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere Hardware-støttet alle softwareløsninger innebærer mange instruksjoner i tillegg til busy-waiting, som koster CPU-tid. I praksis
Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister
Dagens tema Lister og generiske klasser, del I Array-er og ArrayList (Big Java 6.1 & 6.8) Ulike lagringsformer (Collection) i Java (Big Java 15.1) Klasser med typeparametre («generiske klasser») (Big Java
Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen
Forkurs INF1010 Dag 1 Andreas Færøvig Olsen ([email protected]) Tuva Kristine Thoresen ([email protected]) Institutt for Informatikk, 6. januar 2014 Forkurs INF1010 - dag 1 Hello, World! Typer Input/output
INF1000 (Uke 5) Mer om løkker, arrayer og metoder
INF1000 (Uke 5) Mer om løkker, arrayer og metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset Praktisk informasjon Når disse
