Avdeling for ingeniørutdanning Institutt for teknologi



Like dokumenter
UNIVERSITETET I OSLO

INF Notater. Veronika Heimsbakk 10. juni 2012

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

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

INF Notat om I/O i Java

INF 1010, vår 2005 Løsningsforslag uke 11

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

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

INF Løsning på seminaropppgaver til uke 8

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

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

Leksjon 7. Filer og unntak

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

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

Sortering med tråder - Quicksort

IN Notat om I/O i Java

INF2100. Oppgaver 26. september til 1. oktober 2007

INF2100. Oppgaver 23. og 24. september 2010

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

GUI («Graphical User Interface») del 2

Operativsystemer, prosesser og tråder

INF1000-SIKT - Notat om I/O i Java

UNIVERSITETET I OSLO

Synkronisering I. Kapittel 6. Tråd A. ferdig. t.varsle() u.vente() Tråd B. ferdig. tid

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

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

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

Post-it spørsmål fra timen (Arv og subklasser)

UNIVERSITETET I OSLO

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

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

Løse reelle problemer

INF1010. Grensesnittet Comparable<T>

INF1010 våren 2018 tirsdag 23. januar

Kapittel 8: Programutvikling

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

INF2100. Oppgave 1, 2 og 3. Løsningsforslag til oppgaver 23. og 24. september Her er det mange mulige løsninger her er én: import java.io.

UNIVERSITETET I OSLO

Fra Python til Java, del 2

TDT4100 Objektorientert programmering

IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

INF2100. Oppgave 1. Oppgave 2 4. Løsningsforslag til oppgaver uke 40 og Se figur 1 på neste side.

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

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

INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF2100. Oppgaver uke 40 og

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

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

Løse reelle problemer

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

Leksjon 7. Filer og unntak

Mer objektorientert programmering

Innlesing fra fil og metoder med returverdier

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Del 3: Evaluere uttrykk

INF1010 Tråder II 6. april 2016

Leksjon 7. Filer og unntak

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

ADT og OO programmering

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Repetisjon. INF gruppe 13

Jentetreff INF1000 Debugging i Java

Eksamen. Objektorientert Programmering IGR 1372

Arne Maus OMS, Inst. for informatikk

UNIVERSITETET I OSLO

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

UNIVERSITETET I OSLO

STABLER OG REKURSJON. Abstrakte Data Typer (ADT) Stabler. ADT Stabel

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; }

Videregående programmering 6

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

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

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

INF1010 våren Arv og subklasser - del 2

TOD063 Datastrukturer og algoritmer

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

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Å lese tall fra en fil, klassen Scanner

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20

OPPGAVE 5b og 8b Java Kode

Inf1010 oppgavesamling

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Eksamensoppgave i TDT4100 Objektorientert programmering

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF2440 Eksamen 2016 løsningsforslag. Arne Maus, PSE ifi, UiO

IN2010: Algoritmer og Datastrukturer Series 2

LO191D/LC191D Videregående programmering

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

Læreboken på 45 minutter

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Transkript:

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 Jeg/vi bekrefter at den innleverte besvarelsen helt og fullt er mitt/vårt verk.............

Innholdsfortegnelse Klasseinndeling... 3 Ringbuffer... 3 Konklusjon... 3 Main.java... 4 Daddy.java... 5 Son.java... 6 Son1.java... 7 Son2.java... 8 Son3.java... 9 RingBuffer.java... 10

Klasseinndeling Main og RingBuffer er to opplagte selvstendige klasser å begynne med. Videre bør det være en klasse for hver tråd. Felles funksjonalitet for sønnene samles i en klasse som sønnene arver fra. Klassene blir da: Main, RingBuffer, Daddy, Son, Son1, Son2, Son3. Ringbuffer En rett frem-implementasjon av en ringbuffer, men hvordan bør underflow og overflow håndteres? Dersom man er i en situasjon hvor man ønsker live streaming e.l. er det ønskelig at ubrukt data overskrives. Da må man huske på å forskyve lesepekeren i tillegg til skrivepekeren, slik at man fortsatt er FIFO. Alternativt, og mest vanlig, kan man forby skriving til buffer når den er full. Jeg velger å kaste en BufferOverflowException i ringbufferen, slik at den som bruker ringbufferen selv kan bestemme hvordan den bør håndteres i sin implementasjon. Forsøk på å lese data der data ikke finnes, bør også varsles. Jeg kaster en BufferUnderflowException. I begge tilfeller hvor jeg bruker ringbufferen, ignorerer jeg disse exceptionene, slik at den forsøker å lese eller skrive helt til den får det til. Det er umulig å få underflow og overflow samtidig, derfor er ikke dette en fare for vranglås. push()- og pop()-metodene er synchronized, slik at ikke to prosesser forsøker å utføre IO-operasjoner samtidig. Konklusjon Jeg har lært hva en ringbuffer er, og hvordan den kan og bør funke. Jeg har også lært at selv om en feil ikke oppstår i løpet av 20 minutters kjøring, må man ta høyde for den, fordi den kan (og vil) komme senere.

Main.java public class Main { public static void main(string[] args) { new Thread(new Daddy()).start();

Daddy.java public class Daddy implements Runnable { private RingBuffer m_ringbuffer; Daddy() { m_ringbuffer = new RingBuffer(3); public void run() { new Thread(new Son1(m_ringBuffer)).start(); new Thread(new Son2(m_ringBuffer)).start(); new Thread(new Son3(m_ringBuffer)).start();

Son.java public abstract class Son implements Runnable { protected RingBuffer m_ringbuffer; Son(RingBuffer rb) { m_ringbuffer = rb; protected void sleep() { try { Thread.sleep(500); catch (InterruptedException e) { //Ignore

Son1.java import java.util.scanner; public class Son1 extends Son { Son1(RingBuffer rb) { super(rb); public void run() { Scanner keyboard = new Scanner(System.in); while (true) { m_ringbuffer.push(keyboard.next());

Son2.java import java.nio.bufferoverflowexception; public class Son2 extends Son { Son2(RingBuffer rb) { super(rb); public void run() { int _i = 0; while (true) { try { m_ringbuffer.push(integer.tostring(_i++ % 10)); catch (BufferOverflowException e) { _i--; //Decrement _i if we couldn't successfully push sleep(); //For human readability

Son3.java import java.nio.bufferunderflowexception; public class Son3 extends Son { Son3(RingBuffer rb) { super(rb); public void run() { while (true) { try { System.out.println(m_ringBuffer.pop()); catch(bufferunderflowexception e) { //Ignore sleep(); //For human readability

RingBuffer.java import java.nio.bufferoverflowexception; import java.nio.bufferunderflowexception; public class RingBuffer { private String[] m_aitems; //Array of items - the buffer private int m_n = 0; //Number of items in the buffer private int m_iread = 0; //Read index private int m_iwrite = 0; //Write index private int m_isize; //Buffer size RingBuffer(int size) { if (size <= 0) { throw new IllegalArgumentException("Buffer size must exceed 0."); m_isize = size; m_aitems = new String[size]; synchronized public void push(string item) { if (m_n >= m_isize) { throw new BufferOverflowException(); m_aitems[m_iwrite] = item; m_n++; m_iwrite = (m_iwrite + 1) % m_isize; synchronized public String pop() throws BufferUnderflowException { if (m_n < 1) { throw new BufferUnderflowException(); String item = m_aitems[m_iread]; m_n--; m_iread = (m_iread + 1) % m_isize; return item;