Karaktergivende rapportopgave i Styresystemer og multiprogrammering

Størrelse: px
Starte visningen fra side:

Download "Karaktergivende rapportopgave i Styresystemer og multiprogrammering"

Transkript

1 Karaktergivende rapportopgave i Styresystemer og multiprogrammering 1. marts 2005 Den karaktergivende rapportopgave i Styresystemer og multiprogrammering stilles tirsdag den 1. marts 2004 og skal afleveres senest onsdag den 6. april kl. 14:00 i DIKU s 1.delsadministration, Universitetsparken 1, 2100 København Ø. Besvarelser, der sendes med posten, skal være DIKU i hænde senest ved afleveringsfristens udløb. Besvarelser kan udarbejdes individuelt eller i grupper på op til tre deltagere. Der gives ingen reduktion i opgavens omfang ved individuel aflevering, hvorfor det anbefales at opgaven løses i grupper. Gruppesammensætningen behøver ikke at være den samme i denne opgave og i den tidligere godkendelsesopgave. Vigtige meddelelser vedrørende denne opgave vil blive meddelt på kursets hjemmeside og i kursets nyhedsgruppe diku.dat-os. 1 Generelt om opgaven Denne opgave består af to dele; en gruppedel og en individuel del. Gruppedelen af opgaven drejer sig om design og implementation af et trådbibliotek på brugerniveau i programmeringssproget C. Opgaven er beregnet til løsning på DIKUs Linux systemer, men andre Intel X86 baserede Linuxsystemer kan også anvendes. Den individuelle del består i at hvert gruppemedlem skal besvare en række spørgsmål fra lærebogen. Disse spørgsmål vil hovedsageligt dreje sig om stof fra lærebogen der ikke direkte berøres af gruppedelen af opgaven. Der er i alt 3 sæt af spørgsmål; et per gruppemedlem. 2 Grænseflade til trådbiblioteket Grænsefladen til det trådbibliotek, I skal implementere, er en reduceret udgave af POSIX trådunderstøttelsen i Linux. Disse funktioner starter normalt med præfixet pthread men dette præfix er i opgavens grænseflade omdøbt til othread for at undgå problemer med navnesammenfald. I det følgende vil alle påkrævede funktioner blive beskrevet, dog vil alle returværdierne for de enkelte funktioner ikke nødvendigvis blive angivet. Der henvises til appendiks A for den komplette information omkring returværdier. Returværdiernes symbolske navne er defineret i standard UNIX headerfilen errno.h; prøv man errno for en nærmere beskrivelse. 2.1 Trådadministration I dette afsnit introduceres kaldene til at oprette og nedlægge tråde. Desuden beskrives hvordan trådattributter kan bruges til at påvirke afviklingen af trådene. Trådene skal afvikles ved frivilligt processkift dog med mulighed for at der kan skiftes tråd under udførslen af et kald til trådbiblioteket. Der skal anvendes prioriteret skedulering af trådene hvori der anvendes 16 prioritetsniveauer nummereret fra 0 til 15, hvor 0 er højeste prioritet. For 1

2 at undgå udsultning af tråde skal der implementeres ældning. Hvordan ældningen implementeres er op til opgaveløseren. Vær opmærksom på at der altid vil kunne forekomme udsultning idet en proces jo kun frivilligt afgiver processoren, så håndteringen af udsultningen skal foretages under antagelse af at en vilkårlig tråd jævnligt kalder trådbiblioteket. Inden for hver prioritet skal trådene skeduleres i FIFO orden Trådkontrol En ny tråd startes via kaldet: int othread_create(othread_t *thread, othread_attr_t *attr, void * (*start_routine)(void *), void *arg); der givet en funktionspeger start routine til en funktion der tager en parameter af typen void * og en argumentpeger arg starter en ny tråd, der begynder med at eksekvere funktionen givet via funktionspegeren med argumentpegeren som parameterværdi. En tråd identificeres via en identifikation af typen othread t, og en peger til en sådan struktur skal gives med som parameteren thread til othread create. Endelig kan man specificere nogle trådattributter attr - disse vil blive forklaret nedenfor i afsnit Angives ingen trådattibuter men i stedet NULL anvendes standardattributterne for tråden (her drejer det sig kun om prioriteten der som standard sættes til 7). En tråd bliver udført indtil den kalder: void othread_exit(void *retval); eller indtil den returnerer fra sin hovedfunktion (den funktion, der blev specificeret i othread create. En tråd kan returnere en statusværdi via parameteren retval af typen void *, der senere kan aflæses af andre via kaldet: int othread_join(othread_t th, void **thread_return); der venter på at tråden th afslutter. Statuspegeren fra denne tråd returneres i thread return. Hvis flere tråde forsøger at kalde othread join på den samme tråd, er det kun den første der må få lov til at joine - resten skal have returneret fejlkoden EPERM. Endelig kan en tråd frivilligt opgive processoren ved at kalde: int othread_yield (void); der placerer tråden bagest i klarkøen for den prioritet tråden har, hvorefter der aktiveres en ny tråd. En tråd kan finde sin egen identifikation ved at kalde: othread_t othread_self(void); der returnerer den variabel af typen othread t der er knyttet til den kørende tråd. Endelig kan en tråd undersøge om to trådidentifikationer thread1 og thread2 er ens via kaldet: int othread_equal(othread_t thread1, othread_t thread2); der skal returnerer en positiv heltalsværdi hvis de to tråde er ens og ellers 0. 2

3 2.1.2 Trådattributter Trådbibliotekets håndtering af de enkelte tråde kan styres ved at angive en mængde attributter for en given tråd når den oprettes. Man kan således forestille sig at man via disse attributter kan styre hvilken skeduleringsmekanisme en tråd skal bruge eller hvor stor en stak der skal allokeres til tråden. I denne opgave er attributterne begrænsede til at håndtere hvilken prioritet en tråd skal anvende i den prioriterede skedulering. Trådattributterne skal indeholdes i strukturen othread attr t, der initialiseres ved kaldet: int othread_attr_init(othread_attr_t *attr) Når en tråd er oprettet kan attributterne nedlægges ved kaldet: int othread_attr_destroy(othread_attr_t *attr) der kan frigive eventuelle dynamisk allokerede elementer i attributstrukturen. Når en attributstruktur er blevet initialiseret kan den modificeres ved hjælp af en række othread attr set* kald; i denne opgave skal følgende kald til opdatering af skeduleringsparameteren (i dette tilfælde prioriteten) implementeres: int othread_attr_setschedparam(othread_attr_t *attr, const struct sched_param *param); Strukturen struct sched param er defineret i includefilen sched.h der typisk er placeret i /usr/include og bl.a. indeholder feltet int sched priority til fastlæggelse af en prioritet. Kaldet af othread attr setschedparam skal returnere fejlkoden EINVAL hvis prioriteten ikke ligger i intervallet fra 0 til 15. Man kan desuden undersøge indholdet af eksisterende attributstrukturer ved hjælp af en række othread attr get* kald; i denne opgave skal følgende kald til læsning af trådens prioritet implementeres: int othread_attr_getschedparam(const othread_attr_t *attr, struct sched_param *param); Implementationsnoter Typen othread t er et eksempel på hvordan man skjuler den faktiske implementation af både identifikationen af en tråd og trådens kontrolblok for de programmer der bruger et kodemodul. Al manipulation af othread t typen sker via funktionskald, e.g., othread equal. I skal altså selv sørge for at allokere den nødvendige plads til de tråde der oprettes i jeres trådbibliotek. Dette indbefatter trådens stak, hvor selve stakstørrelsen skal være 4KB. I modsætning til othread t er othread attr t ikke skjult men defineret direkte i othread.h. I er selv ansvarlige for at fastlægge en passende datastruktur som angivet i othread.h. Det er ligeledes op til jer hvordan I implementere køer med mere til brug ved skedulering af tråde; dog skal selve trådskift og trådoprettelse implementeres som skitseret i afsnit 3. Endelig skal I bemærke at returværdien af en tråd ikke kan fjernes før en anden tråd har udført othread join med den afsluttede tråd. 2.2 Gensidig udelukkelse Trådbiblioteket understøtter gensidig udelukkelse via låse (i othread API et kaldet mutexer). En lås oprettes via kaldet: 3

4 int othread_mutex_init(othread_mutex_t *mutex, const othread_mutex_attr_t *mutexattr); der sørger for initialiseringen af den lås, der peges på af mutex. Som ved oprettelse af tråde, kan der knyttes en mængde attributter til låsene (her specificeret via parameteren mutexattr af typen othread mutex attr t. I denne opgave bruges attributterne til at angive hvilken af følgende tre typer en lås skal initialiseres som: NORMAL indeholder ingen kontrol af hvilke tråde, der forsøger at tage eller frigive en lås. Hvis en tråd forsøger at tage en lås, den allerede selv holder, vil den blokere og der vil opstå en baglås. Desuden kan en tråd frigive en lås, den ikke selv har taget. RECURSIVE tillader at en tråd kan tage låse, den allerede holder. Låsen skal frigives det antal gange den er taget før den er tilgængelig for andre tråde. ERRORCHECK returnerer fejlkoden EDEADLK hvis den kaldende tråd allerede har taget låsen. Desuden returneres fejlkoden EPERM hvis tråden, der forsøger at frigive en lås, ikke er den tråd, der har taget låsen. Ud over brugen af othread mutex init kan en lås også initialiseres statisk ved brug af konstanterne: OTHREAD_NORMAL_MUTEX_INITIALIZER OTHREAD_RECURSIVE_MUTEX_INITIALIZER OTHREAD_ERRORCHECK_MUTEX_INITIALIZER En initialiseret lås kan nedlægges med kaldet: int othread_mutex_destroy(othread_mutex_t *mutex); hvori eventuelle dynamisk allokerede strukturer kan frigives. En lås kan kun frigives hvis den ikke er låst ellers returneres fejlkoden EBUSY. En lås kan henholdsvis tages med kaldet: int othread_mutex_lock(othread_mutex_t *mutex); der blokerer indtil låsen er tilgængelig for tråden (returværdien afhænger af hvilken type lås det drejer sig om). En lås kan frigives med operationen: int othread_mutex_unlock(othread_mutex_t *mutex); hvis opførsel er afhængig af låsetypen. Drejer det sig om en NORMAL lås, resulterer kaldet altid i at låsen er frigivet når kaldet returnerer (det vil sige selv om låsen i forvejen var ledig returneres der ingen fejlmeddelelse). Er det en RECURSIVE lås, reducers antallet af gange låsen er låst af den kaldende tråd med 1 og kun hvis antallet er 0 frigives låsen. Hvis der er tale om en ERRORCHECK låsen frigives låsen kun hvis den er låst og hvis det er den kaldende tråd der holder mutexen - i alle andre tilfælde returneres fejlkoden EPERM. Der er en variant af låsekaldet der ikke blokerer: int othread_mutex_trylock(othread_mutex_t *mutex); der fungerer som othread mutex lock hvis låsen er ledig. I det tilfælde hvor låsen ikke er ledig, returneres i stedet fejlkoden EBUSY med det samme. Mutexattributterne initialiseres og nedlægges ved kaldene: 4

5 int othread_mutexattr_init(othread_mutexattr_t *attr); int othread_mutexattr_destroy(othread_mutexattr_t *attr); ækvivalent til trådattributterne. Mutexattributterne bruges kun til at specificere hvilken type mutexen har. Dette gøres ved kaldet: int othread_mutexattr_settype(othread_mutexattr_t *attr, int kind); hvor kind angiver typen, specificeret ved en af følgende tre konstanter: OTHREAD MUTEX NORMAL, OTHREAD MUTEX RECURSIVE eller OTHREAD MUTEX ERRORCHECK. Indholdet af en eksisterende mutexattribut kan aflæses ved hjælp af kaldet: int othread_mutexattr_gettype(const othread_mutexattr_t *attr, int *kind); 2.3 Betingelsesvariable Trådbiblioteket skal understøtte betingelsesvariable med en funktionalitet lignende den kendt fra monitorer, men i trådbiblioteket er betingelsesvariable knyttet til mutex er i stedet for monitorer (hvordan dette gøres fremgår af funktionerne der forklares nedenfor). En betingelsesvariabel initialiseres med et kald af: int othread_cond_init(othread_cond_t *cond); og nedlægges med et kald af: int othread_cond_destroy(othread_cond_t *cond); hvori eventuelle dynamisk allokerede strukturer kan frigives. En betingelsesvariabel kan kun nedlægges hvis der ikke er tråde der venter på den. En betingelsesvariabel kan også initialiseres statisk ved brug af konstanten OTHREAD COND INITIALIZER. En tråd kan vente på en betingelsesvariabel cond ved at kalde: int othread_cond_wait(othread_cond_t *cond, othread_mutex_t *mutex); hvor mutexen mutex skal være låst ved kaldets start. othread cond wait skal sætte processen til at vente på cond og frigive mutex udeleligt. Når tråden returnerer fra kaldet skal den igen være indehaver af låsen mutex. En tråd, der venter på betingelsesvariablen cond kan aktiveres igen med kaldet: int othread_cond_signal(othread_cond_t *cond); der starter en vilkårlig tråd af de tråde der venter på cond. Desuden kan alle tråde, der venter på en betingelsesvariabel cond aktiveres med kaldet: int othread_cond_broadcast(othread_cond_t *cond); Således svarer othread cond signal og othread cond broadcast til metoderne notify og notifyall kendt fra de synkroniserede objekter i Java. Endelig er det muligt at vente på en betingelsesvariabel i et begrænset tidsrum med operationen: int othread_cond_timedwait(othread_cond_t *cond, othread_mutex_t *mutex, const struct timespec *abstime); 5

6 der fungerer som othread cond wait med den forskel at den ventende tråd aktiveres når tidspunktet specificeret via abstime er overskredet. Bemærk at det er et absolut tidspunkt der specificeres, det vil sige at en timeout på 5 sekunder skal specificeres som nuværende tidspunkt + 5 sekunder og ikke blot 5 sekunder. Selve strukturen timespec er defineret i standardheaderen time.h og har formen: struct timespec { time_t tv_sec; long int tv_nsec; }; hvor tv sec angiver antallet af sekunder og tv nsec angiver antallet af nanosekunder. I denne opgave skal timeouts kun behandles med en opløsning i sekunder. 3 Implementation I dette afsnit introduceres de mekanismer (ud over et generelt kendskab til C) der er nødvendige for at løse opgaven. Vi starter med at se på hvordan man skifter mellem forskellige tråde for derefter at se på hvordan man opretter nye tråde. Endelig ser vi på hvordan timerafbrydelser understøttes i UNIX programmel. 3.1 Trådskift Et trådskift fra tråd A til tråd B realiseres groft sagt ved at gemme registersættet for den kørende tråd (A) og derefter erstatte det med et tidligere gemt registersæt for tråd B. På denne måde gemmes hele As tilstand: registersættet indeholder jo en stakpeger og en programpeger, så aktiveringsposter på stakken og det aktuelle udførselspunkt gemmes også via registersættet. Tilstanden for tråd B bliver ligeledes reetableret når Bs gemte registersæt bliver gjort til den aktuelle tilstand for processoren. De gemte registersæt placeres oftest i en kontrolblok for tråden sammen med andre kontrolinformationer omkring tråden, f.eks. ID og prioritet. Disse kontrolblokke vil typisk være placeret i forskellige ventekøer: der er typisk en klarkø der indeholder tråde der venter på adgang til processoren (bruges der som i denne opgave prioriteret skedulering vil der være et antal klarkøer) og desuden vil der være en ventekø per lås og per betingelsesvariabel. Desuden skal der gemmes en reference til kontrolblokken for den aktive tråd, idet denne jo ikke er placeret i nogen proceskø - dette gøres typisk i en current variabel. Et processkift mellem trådene A og B vil derfor typisk en form som vist i figur 1. De fleste programmeringssprog understøtter ikke direkte det at gemme og hente registersættet for en tråd. I C kan dette indirekte håndteres ved hjælp af kaldene setjmp og longjmp. Disse to kald er understøttet med henblik på at kunne foretage en ikke-lokal goto-operation, det vil sige en goto til en label der ikke er erklæret i samme funktionskrop. Ideen er at man via setjmp(jmp buf env) gemmer tilstanden for den udførende tråd i parameteren env og at man på et senere tidspunkt kan kalde longjmp(jmp buf env, int value) hvorefter man på magisk vis returnerer for anden gang fra kaldet af setjmp. Når man returnerer fra setjmp første gang (også kaldet det direkte kald) returneres altid 0 hvorimod man anden gang returnerer med returværdien angivet i value, hvor value skal være forskellig fra 0. På denne måde kan man skelne mellem om man netop har gemt tilstanden af tråden eller om den er blevet reetableret som vist i figur 2. Antager vi nu at vi har to kontrolblokke for trådene A og B, så kunne man forestille sig selve opdateringen af tilstande i forbindelse med et trådskift implementeret ved noget i retning af skitsen i figur 3. 6

7 .. tråd As afvikling.. <gem trådens tilstand i kontrolblok> <indsæt kontrolblok i ventekø> <udtag kontrolblok for ny tråd fra klarkø> <opdater current peger> <reetabler trådens tilstand fra kontrolblok>.. tråd Bs afvikling.. Figur 1: Skitse af processkift mellem trådene A og B if(setjmp(env) == 0) /* vi ender her ved et direkte kald */ else /* vi ender her når nogen kalder longjmp(env) */ Figur 2: Eksempel på anvendelse af setjmp if(setjmp(a->env) == 0) /* Tråd A har netop gemt sin tilstand */ longjmp(b->env); /* Vi genskaber Bs tilstand */ else /* Her fortsætter A sin eksekvering når den engang bliver aktiveret igen */ Figur 3: Skitse af trådskift baseret på setjmp og longjmp 3.2 Oprettelse af tråde Når man starter et enkelttrådet C program så vil der kun være knyttet en enkelt tråd til afviklingen af dette. Vil man så, som i denne opgave, oprette yderligere tråde og aktivere dem, skal man foretage en kloning af den gamle tråds tilstand via setjmp. Den nye tråd vil fortsætte fra det punkt hvor setjmp blev kaldt af den gamle tråd, når den nye tråd aktiveres første gang med et kald af longjmp. Dette kræver dog at den nye tråd har fået oprettet sin egen stak, og at den tilstand der anvendes af longjmp er blevet modificeret til at anvende den nye stak (dette vil typisk sige at den gemte stakpeger skal opdateres med placeringen af den nye stak). Desuden kan det være nødvendigt at kopiere lokale variable fra stakken for den gamle tråd til stakken for den nye tråd. Figur 4 skitserer trinene i at oprette en ny tråd B. Manipulationen af stakpegere samt andre registre er selvsagt specifikke for en enkelt arkitektur og vi vil i det følgende udelukkende beskæftige os med Intel X86 arkitekturen. I Intel X86 gror stakken mod lavere adresser og for en tråd ser stakken ud som skitseret i figur 5. I figuren ses det at der anvendes to registre til at holde styr på en funktions stakramme; en basepeger (EBP) og en stakpeger (ESP). Ligeledes fremgår det at en funktions lokale variable er placeret 7

8 <alloker trådtilstand for B> if(setjmp(b->env) == 0) { /* Tråd B bliver aktiveret for første gang */ <kald B s hovedfunktion med argumentet> <hvis B returnerer hertil skal den afsluttes> } <kopier dele af kørende tråds stak til Bs stak> <opdater stakpeger og andre registre, der anvender stakken til at pege på den nye stak> <indsæt B i klarkøen> Figur 4: Skitse af oprettelse af tråde baseret på setjmp på stakken mellem EBP og ESP. Lokale variable for den kaldende funktion Mod lavere adresser Parametre overført til den kaldte funktion Grænse mellem stakrammer Returadresse EBP register Lokale variable for den kaldte funktion Toppen af stakken ESP register Figur 5: Strukturen af en Intel x86 ved funktionskald Når vi via setjmp gemmer en tråds tilstand vil vi således også gemme EBP og ESP registrene. Når vi opretter en ny tråd, skal vi oprette en ny stak, og dermed er det nødvendigt at opdatere de to pegere i trådens tilstand til at pege på den nye stak. Vi kan få fat i de to registre ved hjælp af konstanterne JB SP og JB BP som vist i figur 6, hvor vi opfatter tilstanden som en tabel af typen int. Dette er baseret på den faktiske implementation af jmp buf i /usr/include/bits/setjmp.h, der indeholder den x86 specifikke del af definitionerne af setjmp. Denne form vil altså ikke kunne anvendes på andre arkitekturer, men til brug i denne opgave burde det ikke give problemer. Slutteligt er der blot at tilføje at den oprettede tråd ikke må referere til data, der ligger på 8

9 jmp_buf env; int *envp; if(setjmp(env)) { /* Her returnerer et longjmp til */... } envp = (int *) &env; printf("jb_bp: %p\n", (void *) envp[jb_bp]); printf("jb_sp: %p\n", (void *) envp[jb_sp]); Figur 6: Eksempel på tilgang til EBP og ESP i jmpbuf den gamle tråds stak; f.eks. parametrene og lokale variable i tidligere funktioner. Dette betyder bl.a. at I skal gemme den nye tråds funktionpeger og argumentpeger i lager, der overlever efter at den gamle tråd er returneret fra funktionen, der opretter den nye tråd. 3.3 Timerafbrydelser I forbindelse med implementering af othread cond timedwait er det et krav til jeres implementation at I anvender UNIX signalmekanismen til at holde styr på timeouts. UNIX signaler giver styresystemet mulighed for at komme med en asynkron markering af at en hændelse er indtrådt; det anvendes bl.a. til at implementere asynkron I/O men også til at håndtere suspender og dræb kommandoer til en proces sendt af shellen. Alle funktioner vedrørende signaler er defineret i signal.h. I vores tilfælde er det interessante signal SIGALRM, der sendes til en proces når en timer, der tidligere er sat af processen, udløber. For at en proces kan foretage noget fornuftigt, når den modtager et signal, skal den installere en signalhåndteringsroutine. Dette gøres ved kaldet signal: void (*signal(int signo, void (*func)(int)))(int); der installerer funktionen func til at håndtere signalet signo. signal returnerer en funktionspeger til den hidtidige signalhåndteringsroutine hvis den nye funktion bliver installeret korrekt (derfor ser prototypen noget sær ud - returværdien er en funktionspeger) og ellers fejlkoden SIG ERR. Signalhåndteringsroutinen får det modtagne signal med som argument, når den aktiveres. Man kan ved at definere en passende type for funktionen få en definition 1 af kaldet som er mere læsevenlig: typedef void Sigfunc(int); Sigfunc *signal(int, Sigfunc *); I figur 7 gives et eksempel på hvordan en proces fanger et SIGALRM signal der genereres af den timer der er sat via alarm kaldet. Vær opmærksom på at som udgangspunkt kan et signal aktivere en håndteringsroutine når som helst. Dette betyder at hvis en signalhåndteringsroutine ændrer i datastrukturer som også kan ændres af andre funktioner, så kan disse datastrukturer komme i en udefineret tilstand. For at beskytte sig mod dette kan man enten lukke for signaler når sådanne datastrukturer behandles 1 Dette fif er oprindeligt fra bogen The Standard C Library, Prentice-Hall 1992 af P. J. Plauger. 9

10 #include <stdio.h> #include <signal.h> static int flag; void sig_alrm(int signo) { flag = 1; } int main(void) { if(signal(sigalrm, sig_alrm) == SIG_ERR) { printf("kunne ikke installere signalhåndteringsroutine\n"); exit(-1); } } alarm(10); /* Genererer en SIGALRM om 10 sekunder */ while(!flag) { } Figur 7: Eksempel på opfangelse af signalet SIGALRM eller man kan ændre på håndteringsroutinen så den blot sætter et flag, der så på et senere tidspunkt kan undersøges af den almindelige udførsel af processen, og først på dette tidspunkt udføres den kritiske operation. Mængden af signaler der blokeres for en proces administreres hjælp af funktionen: int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); der enten kan tilføje signalerne i set til mængden af blokerede signaler ved at angive how = SIG BLOCK, fjerne signalerne i set fra mængden af blokerede signaler (how = SIG UNBLOCK) eller sætte mængden af blokerede signaler til set ved at angive how = SIG SETMASK. Den gamle mængde af blokerede signaler returneres i oldset. Mens der er blokeret for signaler kan man undersøge hvorvidt et signal er indtruffet ved hjælp af kaldet: int sigpending(sigset_t *set); Selve signalmængden sigset t kan manipuleres med følgende operationer: int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signum); int sigdelset(sigset_t *set, int signum); int sigismember(const sigset_t *set, int signum); 10

11 der henholdsvis initialiserer en signalmængde til tom, til fuld, tilføjer et signal til mængden, fjerner et signal fra mængden og undersøger hvorvidt et signal er en del af en mængde. Der henvises til UNIX man siderne for yderligere oplysninger omkring signalhåndtering. 4 Milepæle I forbindelse med rapporten er der et milepælsmøde med en instruktor; hensigten er at I ved dette møde diskuterer hvordan og hvorvidt I har nået de nedenfor definerede milepæle. Intentionen er at I kan få hurtig tilbagemelding på de løsningsforslag I er i gang med at implementere og at I samtidig har nogle holdepunkter i projektforløbet der jo strækker sig over fem en halv uge. Milepælsmødet skal afholdes efter cirka tre uger, og vil have en varighed på cirka 1 time. Ved mødet bør følgende være designet og implementeret: oprettelse og nedlæggelse af tråde frivilligt processkift håndtering af trådattributter trådskedulering og ældning Desuden bør følgende være designet og implementationen bør være påbegyndt: låseoperationer betingelsesvariable inklusiv venten med timeout afprøvningsstrategi I vil blive tildelt en instruktor ud fra fordelingen af godkendelsesopgaven. I forbindelse med at I får feedback på godkendelsesopgaven kan I aftale et mødetidspunkt for milepælsmødet. Hvis I ændrer gruppesammensætning til denne opgave skal I give instruktoren der har rettet jeres G-opgave besked. 5 Udleveret materiale I forbindelse med opgaven udleveres følgende filer: En næsten færdig headerfil til othread biblioteket (othread.h) En række eksempelprogrammer, der viser forskellige anvendelser af othread trådbiblioteket: create.c: oprettelse af en tråd. yield.c: brug af frivilligt processkift. param.c: brug af parametre til trådenes hovedfunktion. mutex.c: brug af låse. trylock.c: bruger ikkeblokerende låsekald. bounded.c: bounded buffer eksempel der anvender låse og betingelsesvariabel. Ovennævnte filer kan findes i kataloget: /usr/local/del1/dat-os/k/src. 11

12 6 Individuelle opgaver I forbindelse med rapportopgaven skal hvert gruppemedlem lave en individuel opgave bestående af en række opgaver fra lærebogen: Silberschatz, Galvin & Gagne: Operating System Concepts with Java, 6th edition,, ISBN Opgaverne fordeles i 3 mandsgrupper således at det yngste gruppemedlem løser opgave A, det næstyngste gruppemedlem løser opgave B og det ældste gruppemedlem løser opgave C. Hvis der er tale om en tomandsgruppe løses opgaverne A og B med samme tildeling som ovenfor og hvis der er tale om en enmandsgruppe skal man løse opgave C. 6.1 Opgave A Opgave A består af følgende delopgaver: 4.2, 5.3, 6.4a, 8.8, 9.2, 10.4a-d, 11.1, 12.1a+b+d, 13.2, 14.2a+b, Opgave B Opgave B består af følgende delopgaver: 4.4, 5.6, 6.4b, 8.3, 9.3, 10.1, 11.2, 12.6, 13.4, 14.2c+d, 14.5 (uden sammenligningen med 14.3(c). 6.3 Opgave C Opgave C består af følgende delopgaver: 4.1, 6.3a, 6.3b, 8.1, 9.1, 10.3, 11.10, 12.1c+e+f, 13.6, 14.2e+f, Rapport Det udførte arbejde skal beskrives og dokumenteres i en rapport. Kravene til rapporten er: 1. Omfanget må maksimalt være 30 sider, eksklusiv bilag og de individuelle opgaver. Der lægges vægt på, at rapporten er velstruktureret og præcis. Materiale, der udleveres i forbindelse med opgaven skal ikke afleveres, men eventuelle ændringer skal angives. 2. Indledningen skal indeholde en kort statusrapport, der klargør i hvor høj grad trådbiblioteket virker. 3. Rapporten skal indeholde en analyse af de relevante problemstillinger, f.eks: Oprettelse og afslutning af tråde. Trådbeskrivelser samt håndtering af trådskift. Trådskedulering ( short-term scheduling ), specielt med hensyn til prioriteret skedulering og strategi for ældning af processer. Håndtering af låse (mutexer) og betingelsesvariable Trådbibliotekets håndtering af signaler. 4. Rapporten skal indeholde en kort beskrivelse af trådbibliotekets funktioner og struktur. 5. Rapporten skal kort beskrive forenklende antagelser og begrænsninger. 12

13 6. Rapporten skal dokumentere at den i opgaven specificerede grænseflade overholdes; dette kan til dels gøres ved at dokumentere korrekt afvikling af de udviklede eksempelprogrammer, men da disse ikke foretager en udtømmende afprøvning af grænsefladen bør I også dokumentere egenudviklede afprøvningsprogrammer. Præciser, hvilke krav trådbiblioteket opfylder og hvilke krav den ikke opfylder. 7. Der skal være en individuel opgaver per gruppemedlem: de individuelle opgaver skal være tydeligt mærket med navn samt cpr-nummer. 8. Vær opmærksom på at afleverede kildetekster skal være letlæseligt. Vær især opmærksom på at L A TEX ikke respekterer tabuleringer, hvilket kan betyde at kildeteksterne bliver vanskelige at læse. Rapporten behøver ikke at at omfatte en brugsvejledning. 13

14 A Grænseflade for trådbibliotek /* Osmthreads - en forsimplet udgave af Posix trådbiblioteket i Linux */ /* Dette er en modificeret udgave af headerfilen normalt placeret i */ /* /usr/include/pthreads som er copyright (C) 1996 Xavier Leroy */ /* (Xavier.Leroy@inria.fr). Se den fil for nærmere bestemmelser omkring */ /* brugen af #ifndef _OTHREAD_H #define _OTHREAD_H 1 #include <sched.h> #include <time.h> /* Type definitions */ /* othread_t */ typedef unsigned long int othread_t; /* othread_attr_t */ typedef struct { /* Denne skal I selv definere */ } othread_attr_t; /* othread_mutex_t */ typedef struct { /* Denne skal I selv definere */ } othread_mutex_t; /* othread_mutexattr_t */ typedef struct { /* Denne skal I selv definere */ } othread_mutexattr_t; /* othread_cond_t */ typedef struct { /* Denne skal I selv definere */ } othread_cond_t; /* Initializers. */ #define OTHREAD_NORMAL_MUTEX_INITIALIZER \ /* Denne skal I selv definere */ # define OTHREAD_RECURSIVE_MUTEX_INITIALIZER \ /* Denne skal I selv definere */ # define OTHREAD_ERRORCHECK_MUTEX_INITIALIZER \ /* Denne skal I selv definere */ #define OTHREAD_COND_INITIALIZER /* Denne skal I selv definere */ /* Values for attributes. */ enum { OTHREAD_MUTEX_NORMAL, OTHREAD_MUTEX_RECURSIVE, OTHREAD_MUTEX_ERRORCHECK }; /* Function for handling threads. */ /* Create a thread with given attributes ATTR (or default attributes if ATTR is NULL), and call function START_ROUTINE with given arguments ARG. EAGAIN Not enough system resources were available to create thread */ int othread_create (othread_t *threadp, const othread_attr_t *attr, void *(*start_routine) (void *), void *arg); 14

15 /* Obtain the identifier of the current thread. */ othread_t othread_self (void); /* Compare two thread identifiers. 0 The threads are not equal >0 The thread are equal */ int othread_equal (othread_t thread1, othread_t thread2); /* Terminate calling thread. Never returns :-) */ void othread_exit (void *retval); /* Make calling thread wait for termination of the thread TH. The exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN is not NULL. ESRCH No thread could be found corresponding to that specified by th. EINVAL Another thread is already waiting on termination of th. EDEADLK The th argument refers to the calling thread. */ int othread_join (othread_t th, void **thread_return); /* Functions for handling attributes. */ /* Initialize thread attribute *ATTR with default attributes. Returns 0 always. */ int othread_attr_init (othread_attr_t *attr); /* Destroy thread attribute *ATTR. Returns 0 always. */ int othread_attr_destroy (othread_attr_t *attr); /* Set scheduling parameters (priority) in *ATTR according to PARAM. EINVAL the priority specified in param is outside the range of allowed priorities for the scheduling policy currently in attr (0 to 15) */ int othread_attr_setschedparam (othread_attr_t *attr, const struct sched_param *param); /* Return in *PARAM the scheduling parameters of *ATTR. Returns 0 always. */ int othread_attr_getschedparam (const othread_attr_t *attr, struct sched_param *param); /* Yield the processor to another thread or process. Returns 0 always. */ int othread_yield (void); /* Functions for mutex handling. */ /* Initialize MUTEX using attributes in *MUTEX_ATTR, or use the default values if later is NULL. Returns 0 always. */ int othread_mutex_init (othread_mutex_t *mutex, const othread_mutexattr_t *mutex_attr); /* Destroy MUTEX. EBUSY the mutex is currently locked. */ int othread_mutex_destroy (othread_mutex_t *mutex); /* Try to lock MUTEX. EBUSY the mutex could not be acquired because it was currently locked. EINVAL the mutex has not been properly initialized. */ int othread_mutex_trylock (othread_mutex_t *mutex); /* Wait until lock for MUTEX becomes available and lock it. 15

16 EINVAL the mutex has not been properly initialized. EDEADLK the mutex is already locked by the calling thread ( error checking mutexes only). */ int othread_mutex_lock (othread_mutex_t *mutex); /* Unlock MUTEX. EINVAL the mutex has not been properly initialized. EPERM the calling thread does not own the mutex ( error checking mutexes only). */ int othread_mutex_unlock (othread_mutex_t *mutex); /* Functions for handling mutex attributes. */ /* Initialize mutex attribute object ATTR with default attributes (kind is OTHREAD_MUTEX_NORMAL). */ int othread_mutexattr_init (othread_mutexattr_t *attr); /* Destroy mutex attribute object ATTR. */ int othread_mutexattr_destroy (othread_mutexattr_t *attr); /* Set the mutex kind attribute in *ATTR to KIND (either OTHREAD_MUTEX_NORMAL, OTHREAD_MUTEX_RECURSIVE or OTHREAD_MUTEX_ERRORCHECK) EINVAL kind is neither OTHREAD_MUTEX_NORMAL OTHREAD_MUTEX_RECURSIVE nor OTHREAD_MUTEX_ERRORCHECK */ int othread_mutexattr_settype (othread_mutexattr_t *attr, int kind); /* Return in *KIND the mutex kind attribute in *ATTR. */ int othread_mutexattr_gettype (const othread_mutexattr_t *attr, int *kind); nor /* Functions for handling conditional variables. */ /* Initialize condition variable */ */ int othread_cond_init (othread_cond_t *cond); /* Destroy condition variable COND. EBUSY some threads are currently waiting on cond. */ int othread_cond_destroy (othread_cond_t *cond); /* Wake up one thread waiting for condition variable COND. */ int othread_cond_signal (othread_cond_t *cond); /* Wake up all threads waiting for condition variables COND. */ int othread_cond_broadcast (othread_cond_t *cond); 16

17 /* Wait for condition variable COND to be signaled or broadcast. MUTEX is assumed to be locked before. */ int othread_cond_wait (othread_cond_t *cond, othread_mutex_t *mutex); /* Wait for condition variable COND to be signaled or broadcast until ABSTIME. MUTEX is assumed to be locked before. ABSTIME is an absolute time specification; zero is the beginning of the epoch (00:00:00 GMT, January 1, 1970). ETIMEDOUT the condition variable was not signaled until the timeout specified by abstime */ int othread_cond_timedwait (othread_cond_t *cond, othread_mutex_t *mutex, const struct timespec *abstime); #endif /* othread.h */ 17

Processer og tråde. dopsys 1

Processer og tråde. dopsys 1 Processer og tråde dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne) hhv. små systemer: Multiprogrammering og time-sharing (fra 60 erne og frem): dopsys

Læs mere

1 Sammenfatning 3. 5 Afprøvning 24 5.1 Forventede uddata for obligatoriske afprøvningstilfælde... 24 5.2 Overholdelse af grænseflade...

1 Sammenfatning 3. 5 Afprøvning 24 5.1 Forventede uddata for obligatoriske afprøvningstilfælde... 24 5.2 Overholdelse af grænseflade... Indhold 1 Sammenfatning 3 2 Analyse 4 2.1 Opprettelse og afslutning af tråde................... 4 2.2 Trådbeskrivelser............................. 4 2.3 Trådskedulering............................. 5

Læs mere

Datalogi 1F rapportopgave K2 Anonym datakommunikation

Datalogi 1F rapportopgave K2 Anonym datakommunikation Datalogi 1F rapportopgave K2 Anonym datakommunikation 23. april 2004 1 Administrativ information Rapportopgave K2 stilles fredag den 23. april 2004 og skal afleveres senest fredag den 14. maj kl. 11:00

Læs mere

Synkronisering af sekventielle processer

Synkronisering af sekventielle processer Synkronisering af sekventielle processer Klaus Hansen, Niels Elgaard Larsen, Maz Spork, Jørgen Sværke Hansen 15. februar 2005 1 Introduktion Ved en multiprogram forstår vi et program, hvori vi kan specificere,

Læs mere

INGENIØRHØJSKOLEN I ÅRHUS Elektro- og IKT-afdelingen. I3PRG3 + I3DTM3 + I3ISY1-3. semester

INGENIØRHØJSKOLEN I ÅRHUS Elektro- og IKT-afdelingen. I3PRG3 + I3DTM3 + I3ISY1-3. semester INGENIØRHØJSKOLEN I ÅRHUS Elektro- og IKT-afdelingen Side 1 af 7 Eksamenstermin: DECEMBER 2003 / JANUAR 2004 Varighed: 4 timer - fra kl. 9.00 til kl. 13.00 Ingeniørhøjskolen udleverer: 3 omslag samt papir

Læs mere

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Karaktergivende opgave i Styresystemer og multiprogrammering (reeksamen) 13. august 2007

Karaktergivende opgave i Styresystemer og multiprogrammering (reeksamen) 13. august 2007 Karaktergivende opgave i Styresystemer og multiprogrammering (reeksamen) 13. august 2007 Den karaktergivende opgave i Styresystemer og multiprogrammering stilles mandag den 13. august 2007 klokken 9:00

Læs mere

Planen for idag. Synkroniseringsmekanismer. Krav til løsning. Kritiske regioner. Bagerens algoritme. Kritisk region via delt lager.

Planen for idag. Synkroniseringsmekanismer. Krav til løsning. Kritiske regioner. Bagerens algoritme. Kritisk region via delt lager. Planen for idag Synkroniseringsmekanismer Kritiske regioner Semaforer: Binære semaforer Tællesemaforer Beskedsemaforer Prioritetsinvertering Låse (spinlocks) sikrer udelelig adgang Barrierer synkroniseringspunkt

Læs mere

Processer og koordinering. dopsys 1

Processer og koordinering. dopsys 1 Processer og koordinering dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne): Multiprogrammering og time-sharing (60 erne): dopsys 2 Motivation.. parallelle

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Principper for Samtidighed og Styresystemer

Principper for Samtidighed og Styresystemer Principper for Samtidighed og Styresystemer Synkronisering og Deadlocks René Rydhof Hansen Februar 2008 PSS 08 (Forelæsning 03) Synkronisering og Deadlocks Februar 2008 1 / 33 Skemaændringer Forelæsning

Læs mere

Koordinering. dopsys

Koordinering. dopsys Koordinering At indføre flertrådethed (1) når tråde tages i brug opstår typisk konflikter (et velkendt eksempel er errno ) 2 At indføre flertrådethed (2) en del konflikter kan afhjælpes med thread-local

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Planen for idag. Datalogi 1F Forår 2003. Hvad er en proces? Livscyklus for en proces. Hvad består en proces af?

Planen for idag. Datalogi 1F Forår 2003. Hvad er en proces? Livscyklus for en proces. Hvad består en proces af? Datalogi 1F Forår 2003 OS[2]: Processor, tråde og skedulering Jørgen Sværke Hansen Planen for idag Processer: Procesbegrebet Processkift Processers familieliv Kommunikerende processer Tråde En lettere

Læs mere

Kernealphaerne Indhold af G1

Kernealphaerne Indhold af G1 Kernealphaerne Indhold af G1 3 små opgaver: 1. Oversæt en kerne og afvikl den på en kernealpha 2. Håndoversæt en C/C++ funktion til alpha assembler 3. Implementer procedurer til dynamisk lagerallokering

Læs mere

Planen for idag. Indhold af G1. Kernealphaerne. Alpha erne. Datalogi 1F Forår 2003

Planen for idag. Indhold af G1. Kernealphaerne. Alpha erne. Datalogi 1F Forår 2003 Planen for idag Datalogi 1F Forår 2003 G1 Et gensyn med KFirst G1 Jørgen Sværke Hansen cyller@diku.dk 2 Sidst så vi hvordan man starter den første proces KCurProc = KWaitQ.Get(); KFirst(KCurProc->sp);

Læs mere

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004 Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen torsdag den 3. juni 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes

Læs mere

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU OUTLINE INEFFICIENCY OF ATTILA WAYS TO PARALLELIZE LOW COMPATIBILITY IN THE COMPILATION A SOLUTION

Læs mere

DM14-1. Obligatorisk opgave F.06. System Call. Jacob Aae Mikkelsen Ingen andre gruppe medlemmer. 6. marts 2005

DM14-1. Obligatorisk opgave F.06. System Call. Jacob Aae Mikkelsen Ingen andre gruppe medlemmer. 6. marts 2005 - 1. Obligatorisk opgave F.06 System Call Jacob Aae Mikkelsen - 191076 Ingen andre gruppe medlemmer 6. marts 2005 1 Indhold 1 Opgave beskrivelse 2 2 Analyse 2 2.1 Hukommelses allokering.....................

Læs mere

Real-time programming safety in Java and Ada

Real-time programming safety in Java and Ada Real-time programming safety in Java and Ada Bo Sandén Presenter: Thomas Bøgholm 25. oktober 2007 Forfatteren Artiklen Synkroniserings Begreber Bo Sandén Professor på Colorado Technical University Beskæftiger

Læs mere

Implementation af Koordinering. dopsys 1

Implementation af Koordinering. dopsys 1 Implementation af Koordinering dopsys 1 Oversigt: Impl. af koordinering Begreber: Kritiske regioner Gensidig udelukkelse Synkroniseringsprimitiver: Binære semaforer / mutexes Tællesemaforer Betingelsesvariabler

Læs mere

Processer og koordinering

Processer og koordinering Processer og koordinering.. fortsat dopsys 1 Betingelsesvariabler (Condition variables).. hukommelsesløs variant af semaphorer: Atomare operationer: Signal bruges til at sende et signal. Wait bruges til

Læs mere

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006 Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Skriftlig eksamen onsdag d. 25. januar 2006 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved hver opgave. Den skriftlige

Læs mere

Design Systemkald. User-mode Linux, The Linux kernel/325-2004

Design Systemkald. User-mode Linux, The Linux kernel/325-2004 Tracing tråden afbryder systemkaldet via ptrace Systemkaldet til værten ændres til getpid Processens stak manipuleres til at kalde kernen Kernen returnerer til processen Design Systemkald Design Startup/shutdown

Læs mere

Resource types R 1 1, R 2 2,..., R m CPU cycles, memory space, files, I/O devices Each resource type R i has W i instances.

Resource types R 1 1, R 2 2,..., R m CPU cycles, memory space, files, I/O devices Each resource type R i has W i instances. System Model Resource types R 1 1, R 2 2,..., R m CPU cycles, memory space, files, I/O devices Each resource type R i has W i instances. Each process utilizes a resource as follows: request use e.g., request

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater Design by Contract Design and Programming by Contract Anne Haxthausen ah@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1 Project Step 7 Behavioral modeling of a dual ported register set. Copyright 2006 - Joanne DeGroat, ECE, OSU 1 The register set Register set specifications 16 dual ported registers each with 16- bit words

Læs mere

To mikroarkitekturer til MIPS Karakteropgave på Maskinarkitektur 1B

To mikroarkitekturer til MIPS Karakteropgave på Maskinarkitektur 1B To mikroarkitekturer til MIPS Karakteropgave på Maskinarkitektur 1B Martin Zachariasen 10. september 2004 1 Introduktion Dette er den karaktergivende rapportopgave på kurset Maskinarkitektur 1B, efterår

Læs mere

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Lærevejledning - en introduktion til maskinarkitektur faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Roskilde Universitetscenter Naturvidenskabelig Basisuddannelse

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

SmartAir TS1000. Daglig brug

SmartAir TS1000. Daglig brug SmartAir TS1000 Daglig brug Indhold Brugere... 4 Opret brugere... 4 Brugerliste vinduet... 5 Knapper... 5 Grupper... 6 Søg bruger... 7 Rapport vinduet (brugere)... 7 Døre... 8 Opret døre... 8 Dørliste

Læs mere

Modern Concurrency Abstractions for C#

Modern Concurrency Abstractions for C# Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007 Motivation for concurrency Forbedring af concurrency Baggrundsinformation

Læs mere

Videregående Programmering for Diplom-E Noter

Videregående Programmering for Diplom-E Noter Videregående Programmering for Diplom-E Noter 1. Uddelegering Ét af de væsentlige principper i objektorienteret programmering er, at enhver klasse selv skal kunne "klare ærterne". Enhver klasse skal altså

Læs mere

Netværksalgoritmer 1

Netværksalgoritmer 1 Netværksalgoritmer 1 Netværksalgoritmer Netværksalgoritmer er algoritmer, der udføres på et netværk af computere Deres udførelse er distribueret Omfatter algoritmer for, hvorledes routere sender pakker

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

VægtAgenten Betjeningsvejledning Version 3.0

VægtAgenten Betjeningsvejledning Version 3.0 Download og installation Dagligt brug Side 1 af 6 Trin 1: Denne vejledning beskriver, hvordan du Downloader og installerer VægtAgenten Vigtigt! Bruger du Windows 95 eller 98 så se her: Før du installerer

Læs mere

Netværk & elektronik

Netværk & elektronik Netværk & elektronik Oversigt Ethernet og IP teori Montering af Siteplayer modul Siteplayer teori Siteplayer forbindelse HTML Router (port forwarding!) Projekter Lkaa Mercantec 2009 1 Ethernet På Mars

Læs mere

DATALOGI 1F. Skriftlig eksamen tirsdag den 10. juni 2003 1 25 % 2 10 % 3 25 % 4 10 % 5 30 %

DATALOGI 1F. Skriftlig eksamen tirsdag den 10. juni 2003 1 25 % 2 10 % 3 25 % 4 10 % 5 30 % Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1F Skriftlig eksamen tirsdag den 10. juni 2003 Opgave Vægtning 1 25 % 2 10 % 3 25 % 4 10 % 5 30 % Alle de sædvanlige hjælpemidler må benyttes,

Læs mere

HTX, RTG. Rumlige Figurer. Matematik og programmering

HTX, RTG. Rumlige Figurer. Matematik og programmering HTX, RTG Rumlige Figurer Matematik og programmering Vejledere: Jørn Christian Bendtsen og Karl G. Bjarnason Morten Bo Kofoed Nielsen & Michael Jokil 10-10-2011 In this assignment we have been working with

Læs mere

RoE timestamp and presentation time in past

RoE timestamp and presentation time in past RoE timestamp and presentation time in past Jouni Korhonen Broadcom Ltd. 5/26/2016 9 June 2016 IEEE 1904 Access Networks Working Group, Hørsholm, Denmark 1 Background RoE 2:24:6 timestamp was recently

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

VMware og dopsys-linux

VMware og dopsys-linux VMware og dopsys-linux 1 Virtuel maskine: OS Hardware Virtualisering: Resurser deles mellem processer: En virtuel maskine er til rådighed for hver proces. Virtualisering nu dybere: hver proces hvert OS.

Læs mere

Studieretningsprojektet i 3.g 2007

Studieretningsprojektet i 3.g 2007 Studieretningsprojektet i 3.g 2007 Det følgende er en generel vejledning. De enkelte studieretnings særlige krav og forhold forklares af faglærerne. STATUS I 3.g skal du udarbejde et studieretningsprojekt.

Læs mere

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

Indholdsfortegnelse resultat- & kritikprogrammet.

Indholdsfortegnelse resultat- & kritikprogrammet. Indholdsfortegnelse resultat- & kritikprogrammet. Ringsekretærers indtastning af resultater og kritikker... 2 Kom i gang Opstart af programmet... 2 En anden bruger er i gang med ringen... 3 Dommer ændringer

Læs mere

MIPS, registerallokering og MARS

MIPS, registerallokering og MARS MIPS, registerallokering og MARS Torben Mogensen 2011 Resumé Vi beskriver modulerne Mips.sml og RegAlloc.sml, samt hvordan de bruges sammen med MIPS-emulatoren MARS. 1 MIPS modulet Modulet Mips.sml indeholder

Læs mere

Analyse og design af Indlejrede Systemer. v/ Jens Dalsgaard Nielsen Henrik Schiøler Mads Dore alle Afdeling for Proceskontrol

Analyse og design af Indlejrede Systemer. v/ Jens Dalsgaard Nielsen Henrik Schiøler Mads Dore alle Afdeling for Proceskontrol Analyse og design af Indlejrede Systemer v/ Jens Dalsgaard Nielsen Henrik Schiøler Mads Dore alle Afdeling for Proceskontrol 1 kursusindhold... Del 1: 5 mm Parallelitet, multiprogrammering, OS services

Læs mere

Planen for idag. Opdatering af delt lager

Planen for idag. Opdatering af delt lager Planen for idag Synkronisering: Tidsafhængighed i multiprogrammer Semaforer: Binære semaforer Tælle semaforer Grænseflader: Hvordan implementeres systemkald Tidsafhængighed i multiprogrammer proces læser

Læs mere

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00 Page 1/12 Aarhus Universitet, Science and Technology, Computer Science Exam Wednesday 27 June 2018, 9:00-11:00 Allowed aid: None The exam questions are answered on the problem statement that is handed

Læs mere

Schedulering af SAS job i MS Task Scheduler, som sender e-mail med log og statuskode ved fejl

Schedulering af SAS job i MS Task Scheduler, som sender e-mail med log og statuskode ved fejl Schedulering af SAS job i MS Task Scheduler, som sender e-mail med log og statuskode ved fejl Eksemplet består af 2 dele, et SAS program der fejler, samt et Powershell script til at eksekvere SASprogrammet

Læs mere

Common Language Runtime. Multithreading

Common Language Runtime. Multithreading Common Language Runtime Multithreading Multithreading i.net Dedicated threads Programmøren kontrollerer starttidspunkt, levetid m.m. for den enkelte thread. Pooled threads Threads lånes fra en pulje af

Læs mere

Bentleyuser.dk Årsmøde 2010 Nordic Civil 2010

Bentleyuser.dk Årsmøde 2010 Nordic Civil 2010 Bentleyuser.dk Årsmøde 2010 Nordic Civil 2010 8.-10. November 2010, Munkebjerg Hotel, Vejle Workshop W2 Annotation Scale i MicroStation V8i Underviser: Tine Lai Andersen, Bentley Systems (Danmark) Bentley

Læs mere

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende Changes for Rottedatabasen Web Service The coming version of Rottedatabasen Web Service will have several changes some of them breaking for the exposed methods. These changes and the business logic behind

Læs mere

Systemkald i Unix/Linux

Systemkald i Unix/Linux Systemkald i Unix/Linux 1 Operativsystemet Fra proces: OS som værktøjskasse: tilgængelig via systemkald... OS som resurseadministrator, abstrakt/virtuel maskine: CPU: processer, tråde, schedulering I/O:

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere

18 Multivejstræer og B-træer.

18 Multivejstræer og B-træer. 18 Multivejstræer og B-træer. Multivejs søgetræer. Søgning i multivejssøgetræer. Pragmatisk lagring af data i multivejstræer. B-træer. Indsættelse i B-træer. Eksempel på indsættelse i B-træ. Facts om B-træer.

Læs mere

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22.

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22. Klasser og Objekter i Python Uge 46 Learning Python: kap 15-16, 19-22. Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. En kage form Klassens

Læs mere

Vejledning for vurdering af redesign-forslag fra Design & Usabilityevalueringsprojektet

Vejledning for vurdering af redesign-forslag fra Design & Usabilityevalueringsprojektet Vejledning for vurdering af redesign-forslag fra Design & Usabilityevalueringsprojektet i kurset Systemdesign & HCI, foråret 2004 DIKU, 17.05.04 Kasper Hornbæk & Erik Frøkjær Vedlagt dette dokument finder

Læs mere

applies equally to HRT and tibolone this should be made clear by replacing HRT with HRT or tibolone in the tibolone SmPC.

applies equally to HRT and tibolone this should be made clear by replacing HRT with HRT or tibolone in the tibolone SmPC. Annex I English wording to be implemented SmPC The texts of the 3 rd revision of the Core SPC for HRT products, as published on the CMD(h) website, should be included in the SmPC. Where a statement in

Læs mere

Kerner med afbrydelser. Planen for i dag. Kerne med afbrydelser. Tætkoblede drivprogrammer. Uheldig rækkefølge. Synkronisering med ydre enheder

Kerner med afbrydelser. Planen for i dag. Kerne med afbrydelser. Tætkoblede drivprogrammer. Uheldig rækkefølge. Synkronisering med ydre enheder Planen for i dag Repetition af kerner med r Kerner med tvungent processkift Præsentation af K1 Kerner med r Vi erstattede aktiv venten med: ventende processer placeres i ventekøer r aktiverer ventede processer

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Introduktion. Unifaun Online 29-04-2014

Introduktion. Unifaun Online 29-04-2014 Introduktion Unifaun Online 29-04-2014 2 Indhold 1 Introduktion til Unifaun Online... 3 1.1 Grundlæggende navigering... 3 1.2 Søgning af information... 3 1.3 Indtastning af faste oplysninger... 4 1.4 Din

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

CD-DIRECT Installationsvejledning

CD-DIRECT Installationsvejledning CD-DIRECT Installationsvejledning Indhold 1. Kom godt i gang med installationen af CD-DIRECT... 3 2. CD-DIRECT Installation... 4 3. Enkeltbruger Type I (uden kopi af databasefilen)... 5 3.1 Opdatering

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 4 18. september 2009 Pointers Referenceparametre 2 / 19 Pointers 1 Pointers 2 Referenceparametre Pointers Referenceparametre 3 / 19 Husk: En variabel er en navngiven plads i computerens

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

ESP30076 임베디드시스템프로그래밍 (Embedded System Programming)

ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) Module 14: Kernel Timer ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 리눅스에서커널타이머사용법알아보기 HZ, jiffies_64, struct timer_list 커널타이머를활용한하드웨어제어용디바이스드라이버작성 2 Timer 관련변수 HZ 리눅스커널에서주기적으로발생하는시스템타이머

Læs mere

dmasark Aflevering - Uge 50

dmasark Aflevering - Uge 50 dmasark Aflevering - Uge 50 Michael Lind Mortensen, 20071202, DAT4 Michael Dahl, 20073943, DAT4 Katalog: http://www.daimi.au.dk/ u073943/dmasark/uge6/ 13. december 2007 Indhold 1 PingClient implementation

Læs mere

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge. Denne guide er oprindeligt udgivet på Eksperten.dk Tilfældige tal Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge. Den forudsætter

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

ECE 551: Digital System * Design & Synthesis Lecture Set 5

ECE 551: Digital System * Design & Synthesis Lecture Set 5 ECE 551: Digital System * Design & Synthesis Lecture Set 5 5.1: Verilog Behavioral Model for Finite State Machines (FSMs) 5.2: Verilog Simulation I/O and 2001 Standard (In Separate File) 3/4/2003 1 ECE

Læs mere

Citrix CSP og Certificate Store Provider

Citrix CSP og Certificate Store Provider Project Name Document Title TDC Citrix Citrix og Certificate Store Provider Version Number 1.0 Status Release Author jkj Date 5-10-2006 Trademarks All brand names and product names are trademarks or registered

Læs mere

ANVENDELSE AF EVALUERING PÅ DEN LANGE BANE

ANVENDELSE AF EVALUERING PÅ DEN LANGE BANE ANVENDELSE AF EVALUERING PÅ DEN LANGE BANE INDIREKTE ANVENDELSE NETE KROGSGAARD NISS PROGRAM Intro om betydningen af anvendelse Nedslåethed Håb for professionen SFI s (gode) måde at håndtere det på Fælles

Læs mere

IFC Egenskaber. Mohammad Hussain Parsianfar s102951 BYG DTU

IFC Egenskaber. Mohammad Hussain Parsianfar s102951 BYG DTU Mohammad Hussain Parsianfar s102951 Indholdsfortegnelse 1 Introduktion... 3 1.1 Hvorfor er det interessant... 3 1.2 Formål... 4 2 Simplebim... 5 2.1 Præsentation af softwaren... 5 2.1.1 Brugergrænseflade...

Læs mere

Mandatory Assignment 1

Mandatory Assignment 1 Mandatory Assignment 1 Morten Franck Peter Hansen 9. oktober 2003 Gruppe 4, Parallelle Systemer (02220) Indhold 1 Trin 1 Petri Net 1 1.1 Model af pass().................................... 1 1.2 Model

Læs mere

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 DM14 1. Obligatoriske opgave Systemkald Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 Side 1 af 5 Intro: Formålet med opgaven at et lave en system kald

Læs mere

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Øvelse 9. Klasser, objekter og sql-tabeller insert code here Øvelse 9. Klasser, objekter og sql-tabeller Denne opgave handler om hvordan man opbevarer data fra databasekald på en struktureret måde. Den skal samtidig give jer erfaringer med objekter, der kommer til

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Internt interrupt - Arduino

Internt interrupt - Arduino Programmering for begyndere Brug af Arduino Internt interrupt - Arduino - Afslutning EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Intern interrupt Jeg vil rydde lidt op. Her er nogle punkter vil har glemt

Læs mere

Assignment #5 Toolbox Contract

Assignment #5 Toolbox Contract Assignment #5 Toolbox Contract Created by: René Kragh Trine Randløv E mail address cph rk70@cphbusiness.dk 23 11 2014 1 Introduktion Dette dokument indeholder en vertikal kontrakt for et system som skal

Læs mere

Rapport Bjælken. Derefter lavede vi en oversigt, som viste alle løsningerne og forklarede, hvad der gør, at de er forskellige/ens.

Rapport Bjælken. Derefter lavede vi en oversigt, som viste alle løsningerne og forklarede, hvad der gør, at de er forskellige/ens. Rapport Bjælken Indledning Vi arbejdede med opgaverne i grupper. En gruppe lavede en tabel, som de undersøgte og fandt en regel. De andre grupper havde studeret tegninger af bjælker med forskellige længder,

Læs mere

Spørgsmål & Svar. Udbud af Klinisk ernæring til sygehusene i Region Syddanmark 10/14041

Spørgsmål & Svar. Udbud af Klinisk ernæring til sygehusene i Region Syddanmark 10/14041 & Svar 1 & Svar Udbud af Klinisk ernæring til sygehusene i 10/14041 Udbyder har modtaget nedenstående spørgsmål vedr. udbudsmaterialet. ene, der er anonymiseret, samt de tilhørende svar, er anført nedenfor.

Læs mere

IDAP manual Analog modul

IDAP manual Analog modul IDAP manual Analog modul Dato: 15-06-2005 11:01:06 Indledning Til at arbejde med opsamlede og lagrede analoge data i IDAP portalen, findes en række funktions områder som brugeren kan anvende. Disse områder

Læs mere

Side 1 af 9. SEPA Direct Debit Betalingsaftaler Vejledning

Side 1 af 9. SEPA Direct Debit Betalingsaftaler Vejledning Side 1 af 9 SEPA Direct Debit Betalingsaftaler Vejledning 23.11.2015 1. Indledning Denne guide kan anvendes af kreditorer, som ønsker at gøre brug af SEPA Direct Debit til opkrævninger i euro. Guiden kan

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

:51: [INFO ] [.o.core.internal.coreactivator] - openhab runtime has been started (v1.8.1) :51:55.

:51: [INFO ] [.o.core.internal.coreactivator] - openhab runtime has been started (v1.8.1) :51:55. 2016-03-19 08:51:50.436 [INFO ] [.o.core.internal.coreactivator] - openhab runtime has been started (v1.8.1). 2016-03-19 08:51:55.227 [INFO ] [o.o.i.s.i.discoveryserviceimpl] - mdns service has been started

Læs mere

Wii Software Modificering. Uber Guide

Wii Software Modificering. Uber Guide Wii Software Modificering Uber Guide Af Michael Bartholin (og Alice Raunsbæk) http://wii.m-r-a.dk Revision: 2.2 Side 1 af 13 Sidst opdateret: 01/03/2010 Indholdsfortegnelse Indholdsfortegnelse...2 Introduktion...3

Læs mere

Fang Prikkerne. Introduktion. Scratch

Fang Prikkerne. Introduktion. Scratch Scratch 2 Fang Prikkerne All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club. Introduktion

Læs mere

Peter Kellberg. Rundt om Danmarks Statistiks makroer. Design, Standardisering, Teknik

Peter Kellberg. Rundt om Danmarks Statistiks makroer. Design, Standardisering, Teknik Peter Kellberg Rundt om Danmarks Statistiks makroer Design, Standardisering, Teknik SAS Forum 2009 Ét makrobibliotek ca 50 makroer, vi selv har lavet mange andre fx CLAN Autocall makroer en makro er et

Læs mere