Plan for dagen Dagens sidesprang: Sverres editorer gjennom tidene & verktøyet tinyclip. Meldingsbasert synkronisering & kommunikasjon

Like dokumenter
Plan for dagen. Kræsj-kurs i sanntidsprogrammering. Måter å tenke på. Programmering intro. Tråder & synkronisering

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

Fra sekvensielt til parallelt

Mer om C programmering og cuncurrency

Fra sekvensielt til parallelt

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

Tråder og concurrency i Linux

Eksempler på ikke-blokkerende systemkall:

Tinyclip eksempel. Dagsplan

Kort notat om parallellstyring IN147

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

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Ikke pensum! Plan for dagen. Resource Management Kontekst: Bloom (1979) Kap. 11: Resource control (utvalg)

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

UNIVERSITETET I OSLO

Oving 2. Oppgave 1. #include <stdio.h> int main(int argc, char **argv) { char *navn = argv[1]; printf ("Navnet ditt er %s\n", navn); } Oppgave 2

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

Tilstandsmaskiner med UML og Java

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

INF1010 Repetisjonskurs i tråder

Eksamen i TTK4145 Sanntidsprogrammering 12. august

Løsningsforslag til eksamen i IN 147 og IN 147A

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Repetisjon fra sist - 1: Plan for dagen. Repetisjon fra sist 2: Hva jeg glemte sist: Nyttige Kommandoer

Programmering i C++ Løsningsforslag Eksamen høsten 2005

INF Notater. Veronika Heimsbakk 10. juni 2012

Anatomien til en kompilator - I

Dagens tema: Sjekking

Oppsummering av IN147 siste del Operativsystemer Parallellisering Veien videre

Dagens tema INF1070. Info om C. Cs preprosessor. Feilsøking. Dag Langmyhr,Ifi,UiO: Forelesning 31. januar 2005 Ark 1 av 29

Informasjon om C. Dagens tema INF1070 INF1070 INF1070 INF1070. Den viktigste kilden til informasjon om C (utenom en god. C-funksjonene.

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

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

Løsningsforslag til eksamen i IN 147(A)

Signaturer. Dagens tema. En vanlig feil int-funksjon. Dette kan noen ganger gi rare feilmeldinger: INF1070 INF1070 INF1070 INF1070

Sensuren vil bli avsluttet i henhold til gjeldende regelverk. Alle deloppgaver teller likt unntatt implementasjonsoppgavene som teller dobbelt.

Faglig kontakt under eksamen: Orestis Gkorgkas

Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer

Forslag til løsning på oppgavesett for uke 40

Programmeringsspråket C

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

INF1010 Tråder II 6. april 2016

UNIVERSITETET I OSLO

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

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

Dagens tema: Synkronisering

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Dagens tema: Synkronisering

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

Hentet fra Suns Totorial:

IN 147 Program og maskinvare

Models of Concurrency

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

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

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

IN 147 Program og maskinvare

Løsningsforslag til eksamen i IN147(A)

Dagens program. Sanntidsprogrammering med Linux. Embedded Linux: Begrensninger. Hvorfor Linux?

IN våren 2019 Onsdag 16. januar

Kapittel 8: Programutvikling

IN våren 2018 Tirsdag 16. januar

Oppgave 1 JK-flip-flop (Total vekt 20%)

Programmeringsspråket C

Del 3: Evaluere uttrykk

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

INF2810: Funksjonell Programmering. Muterbare data

Del 1 En oversikt over C-programmering

INF2100. Oppgaver 23. og 24. september 2010

Runtime-omgivelser Kap 7 - I

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

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

Runtimesystemer Kap 7 - I

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

1b) RaceCondision: En bug som kommer til overflaten ved uheldig timing/scheduling. Det klassiske eksemplet er vel med suspend og resume:

Klasser, objekter, pekere og UML. INF gruppe 13

Rapport Semesteroppgave i datasikkerhet Harald Dahle (795955) og Joakim L. Gilje (796196)

LSCs Live Sequence Charts

INF våren 2017

2012 2a. C rc; void main() { rc = new C (); rc.m2(); } } INF 3110/ INF /28/13 1

Del 4 Noen spesielle C-elementer

Programmeringsspråket C Del 3. Hans Petter Taugbøl Kragset

Oppgave 1 - Linux kommandolinje (%)

Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister

Operativsystemer og grensesnitt

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

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Administrivia INF 3110/ INF /02/2005 1

Presentasjon av: Erling Ringen Elvsrud Nils Fredrik Gjerull Håkon Torjus Bommen

IN2010: Algoritmer og Datastrukturer Series 2

IN1140, H2018 gruppetime oppgaver Introduksjon til Tekst i Python

Skisse til løsning for eksamensoppgave i TDT4186 Operativsystemer

Litt om Javas class-filer og byte-kode

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

Program delegate. Lage et nytt prosjekt i Visual Studio

Jentetreff INF1000 Debugging i Java

Oppgave 1 Oversettelse (vekt 16%)

Transkript:

Plan for dagen Dagens sidesprang: Sverres editorer gjennom tidene & verktøyet tinyclip. Meldingsbasert synkronisering & kommunikasjon Ada & Occam (men hopper over occam.) Tilstandsmaskinmodellering Implementasjon i C Objektorientert (Java, Ada, C++) OCCAM POSIX Sverres editorer gjennom tidene Emacs Emacs folding mode CLiP & emacs folding mode tinyclip & emacs folding mode Word-97(!) html-mode & tinyclip Word-97 html-mode & tinyclip & clipprep Emacs, tinyclip & clipprep Nå, Emacs folding mode, tinyclip, clipprep, txt2doc Tinyclip Enkelt verktøy for literate programming Mikser kode og dokumentasjon Kan lette ut koden som en vil (flytte ting som hører sammen, sammen) --> Naturlig å vedlikeholde dokumentasjonen --> Øker vedlikeholdbarhet. Naturlig fokus på leseren istedet for kompilatoren Legger til rette for veldig kraftige makroer. Tinyclip eksempel This is normal text outside of all stubs and will be thrown away. /*** #File "test.txt" ***/ This will be the first line of the generated file test.txt /*** Slot 1 ***/ This is the last line of the file. /*** End of File ***/ OK lets define some stubs going into slot 1 /*** Slot 1 ***/ Text from first stub with name "Slot 1" /*** End of Slot 1 ***/ /*** Slot 1 ***/ Text from second stub with name "Slot 1" /*** End of Slot 1 ***/

Resultat: test.txt --- This will be the first line of the generated file test.txt Text from first stub with name "Slot 1" Text from second stub with name "Slot 1" This is the last line of the file. --- Message-based synchronization klassifiseringssystem The model of synchronization (Asynchroneous, Synchroneous, Remote Invocation) The method of process naming (direct vs. indirect and symetric vs. asymetric) The message structure (to which degree can complex types be sent) Ulemper med asynkrone meldinger Buffere er begrensede! -> Håndtering av fulle buffere (/fullt minne) Utdatert informasjon Håndtering av slike ting: komplekse patterns og protokoller. Umulig å resonnere på riktighet av kode. Fordel: slipper buffer prosesser (???) Synkronisering kan implementeres med hverandre... Synkron ved asynkron P1 P2 send(message) wait(message) wait(ack) send(ack) Remote invocation ved asynkron P1 P2 send(message) wait(message) wait(reply)... Construct reply send(reply)

Message structure Hvordan pakkes data? (endian-ness,typekompatibilitet) Pekere til objekter? Store rammeverk finnes (de blir gjerne store...) Standard Java - serialization (har fordel av standard, - kritisk avhengig av objektversjoner). Ada (Not messages, not remote invocation... -> extended randevous) Exception handling Selective wait (select, guards, terminate) Ada eks med select & terminate (Fra kap 7:) Process termination Completion of procedure body suicide: thread_exit() abort (e.g. from other process) dangerous Untrapped error Never When not needed (Ada's terminate).

Non-determinism and synchronization primitives. Konflikt igjen imellom å anta ikkedeterminisme og å sikre seg mot utsulting (kontekst her skal meldinger leses i rekkefølge? notify? semaforer?) p301: It is inappropriate for the synchronization to attempt to prevent starvation. Løsning: 1: Ikke anta determinisme for å synkronisere! 2:Kjenn scheduleren slik at du ikke programmerer for utsulting! (Vel, i praksis; FIFO...) Tilstandsmaskiner (9 foiler) Tilstandsmaskiner i occam typer -- legal states VAL INT s_play IS 0: VAL INT s_stop IS 1: PROTOCOL StateMachineEventProtocol CASE e_play e_stop : Tilstandsmaskiner i occam - kodestruktur PROC StateMachine(CHAN OF StateMachineEventProtocol events) INT state : SEQ state := s_stop WHILE TRUE SEQ CASE state s_stop events? CASE e_play SEQ #C printf("starting\n");fflush(stdout); state := s_play e_stop SKIP s_play...

State pattern objektorienterte tilstandsmaskiner Baseklasse med tomme virtuelle funksjoner for hvert event En tilstands-variabel som refererer til en instans av denne En instans av hvert tilstandsobjekt hvilket av disse tilstansvariabelen refererer til avgjør hvilken tilstand vi er i. Eventer --> kall til objektet som tilstandsvariabelen peker på. State-pattern implementasjon I class Casette_State { public: virtual void play(){ virtual void stop(){ ; class Casette_State_Stop: public Casette_State { void play() ; class Casette_State_Play: public Casette_State { void stop() ; State-pattern implementasjon II Casette_State_Play g_s_play; Casette_State_Play g_s_stop; Casette_State g_state = g_s_stop; Casette_State_Stop::play(){ printf("playing\n"); g_state = g_s_play; Casette_State_Stop::play(){ printf("stopping\n"); g_state = g_s_stop; POSIX Vi snakker om aksess til operativsystemets scheduler her! Dvs. ikke for cygwin her kjører vi fortsatt under cygwins scheduler. (... og ingen har portet ada hit.) bibliotekskall en API akkurat som win32

Posix threads (pthreads.h) deler: Posix (Foil med Thread-API) Routine Prefix Functional Group pthread_ Threads themselves and miscellaneous subroutines pthread_attr_ Thread attributes objects pthread_mutex_ Mutexes pthread_mutexattr_ Mutex attributes objects. pthread_cond_ Condition variables pthread_condattr_ Condition attributes objects pthread_key_ Thread-specific data keys Posix Eks1 starte tråder: #include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { printf("\n%d: Hello World!\n", threadid); pthread_exit(null); int main(int argc, char *argv[]) { pthread_t threads[num_threads]; int rc, t; for(t=0;t<num_threads;t++){ printf("creating thread %d\n", t); rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); if (rc){ printf("error; return code from pthread_create() is %d\n", rc); exit(-1); pthread_exit(null); Posix mutex int pthread_mutex_destroy (pthread_mutex_t *); int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *); int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *); int pthread_mutex_lock (pthread_mutex_t *); int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *); int pthread_mutex_trylock (pthread_mutex_t *); int pthread_mutex_unlock (pthread_mutex_t *);

Posix (?) semaphores Posix condition variables int sem_init (sem_t * sem, int pshared, unsigned int value); int sem_destroy (sem_t * sem); sem_t *sem_open (const char *name, int oflag,...); int sem_close (sem_t *sem); int sem_wait (sem_t * sem); int sem_trywait (sem_t * sem); int sem_timedwait (sem_t * sem, const struct timespec *abstime); int sem_post (sem_t * sem); int sem_getvalue (sem_t * sem, int *sval); int pthread_cond_broadcast (pthread_cond_t *); int pthread_cond_destroy (pthread_cond_t *); int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *); int pthread_cond_signal (pthread_cond_t *); int pthread_cond_timedwait (pthread_cond_t *, pthread_mutex_t *, const struct timespec *); int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *); POSIX message queues mqueue.h Foil fra boken p. 302 Finnes ikke under cygwin kjør linux... Vel, linux krever 2.6 kjerne...