Systemnära programmering 2012-11-05. Tentamen. Systemnära programmering, 7.5hp 5 november 2012



Relevanta dokument
Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

... Funktionsanrop. Vad händer när man kör ett program?

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)

Strängar. Strängar (forts.)

Tentamen i Programmering grundkurs och Programmering C

printenv sort pager printenv grep args sort pager

Tentamen i. Programmering i språket C

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

HI1025 Operativsystem, KTH Haninge, VT2012

Och!efter!ca!20!omgångar!hamnade!den!på!en!stabil!konfiguration!enligt!nedan! där!den!stannar!kvar.!

Om pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp().

Synkronisering - Semaforen. Om att vänta men inte i onödan

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Summering av fält 1.1. Synkronisering - Semaforen. Summering av fält 1.3. Summering av fält 1.2. Summering av fält 2.3 (INTE GK)

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Tentamen i Programmering grundkurs och Programmering C

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Synkronisering. Ordning och reda

Programmeringsteknik med C och Matlab

TDIU01 - Programmering i C++, grundkurs

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen OOP

Tentamen. Datorteknik och realtidssystem

Att skriva till och läsa från terminalfönstret

Pekare och arrayer. Indexering och avreferering

Mekanismer. (implementation)

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Repetition C-programmering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Typkonvertering. Java versus C

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Grundläggande programmering med C# 7,5 högskolepoäng

PROGRAMMERING-JAVA TENTAMINA

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Tentamen i Realtidsprogrammering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Grundprogrammen. combine

Tentamen ges för: Tentamensdatum: Tid:

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

OBS!! Detta är DEL 2 av tentan. För att få ut denna måste du ha lämnat in del 1. Om du inte fått ut del 1 bör du meddela skrivningsvakten. OBS!!

Övning från förra gången: readword

TDIU01 - Programmering i C++, grundkurs

Operativsystem ID1200/06 Tentamen :00-18:00

JAVAUTVECKLING LEKTION 4

Fö 4 TSEA81. Monitors and Message passing. Condition variables - händelsevariabler

Deluppgift 10 Starta den första processen (3.5h förarbete, 30min kodning)

Tentamen *:58/ID100V Programmering i C Exempel 3

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Introduktion C-programmering

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Avancerad SSL-programmering II

En kort text om programmering i C.

Fö 4 TSEA81. Monitors and Message passing

Föreläsning 3. Programmering, C och programmeringsmiljö

SMD 134 Objektorienterad programmering

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Raspberry Pi och Tellstick, ett program i C.

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put)

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Tentamen i TDIU16 Process- och operativsystemprogrammering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Programmeringsteknik med C och Matlab

Tentamen i Introduktion till programmering

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Exempelsamling Assemblerprogrammering

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

DAT043 Objektorienterad Programmering

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

HI1024 Programmering, grundkurs TEN

Föreläsning 6: Introduktion av listor

OOP Tentamen

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Språkkonventioner och redigering av tal.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

OOP Objekt-orienterad programmering

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

(2) Skriv ett program som skapar ett antal processer vars relationer beskrivs av nedanstående tidsdiagram a

Dugga i Grundläggande programmering STS, åk

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

OOP Omtenta

DD2387 Programsystemkonstruktion med C++ Tentamen 2

Transkript:

Tentamen Systemnära programmering, 7.5hp 5 november 2012 Skrivtid: 9 13 Hjälpmedel: EN av följande böcker Bilting & Skansholm: Vägen till C ELLER J.R. Hanly & E.B. Koffman: C Program Design for Engineers ELLER J.R. Hanly & E.B. Koffman: Problem Solving and Program Design in C ELLER A. Kelley & I. Pohl: A Book on C ELLER Brian W. Kernighan & Dennis M. Ritchie: C Programming Language Maxpoäng: 40 (Gräns för 3: 20p (50%), 4: 26p (65%), 5: 32p (80%)) Börja varje uppgift på nytt blad och fyll i koden på varje blad. Jag planerar att besöka skrivsalen ungefär 11.00. Vid tveksamheter beskriv er tolkning. Tänkpåattmankanfåpoängävenommanelyckaslösahelauppgiften. Lycka Till! Uppgift 1 (4 p) Förklara kortfattat följande begrepp och dess användning: Reentrant function Nonblocking I/O Process Race condition Uppgift 2 (3 p) Vad är en hård länk? Vad är en symbolisk länk? Beskriv likheter och skillnader dem emellan. 1

Uppgift 3 (3 p) Man kan hantera signaler på olika sätt. Till exempel kan man ignorera signalen. Vilka är de 2 övriga sätten att hantera signaler? Ett par signaler kan e ignoreras, varför? En del andra signaler bör e ignoreras även om det går. Vilken typ av signaler hör dit och varför bör de e ignoreras? Uppgift 4 (5 p) Beskriv vad som händer när följande kommando exekveras av csh(alltså e vad kommandot utför). Ta med bland annat, Hur startas processer och program? När, och av vilken process skapas pipor. Hur hanteras omdirigering etc. Beskriv utförligt och rita gärna figurer. % coma < infil.txt comb comc -o fout Uppgift 5 (5 + 1 p) #include <...> static g = 10; main( argc, char *argv[]) { v = 10; pid_t p; } while (++v > 8) if ((p = fork()) < 0) { perror("fork error"); return 1; } else if (p == 0) { v-=2; g++; } else { g--; v-=3; if (waitpid(p, NULL, 0)!= p) { perror("waitpid error"); return 1; } } prf("mypid = %d parentpid = %d p = %d v = %d g = %d\n", getpid(), getppid(), p, v, g); return 0; (a) Vad skrivs ut av programmet ovan? PID-nummer får ni hitta på, bara relationen mellan de olika numren framgår. (Rita gärna en figur.) (b) Blir det någon skillnad om man plockar bort waitpid? Motivera ditt svar. 2

Uppgift 6 (1 + 3 + 1 p) Enligt Stevens finns det 3 strukturer (file table, process table entry, v-node table) som kärnan använder för att hantera öppna filer. (a) Hur är dessa relaterade? (b) Ge exempel på information som finns i varje struktur. (c) Om två processer öppnar samma fil vilken/vilka (om någon) strukturer är gemensamma? Uppgift 7 (8 p) Skriv ett ANSI C-program argtst (för att prova olika optioner till ett kommando) argtst command opt1 [opt2...] file som tar ett kommando, minst ett option och en fil som argument, t ex % argtst ls -l -g -i -n main.c och startar en process för varje option som angetts till kommandot. Varje process ska exekvera kommandot med en option och filen som argument. Programmet ska utföra ungefär samma sak som om man ger kommandoraden % command opt1 file; command opt2 file;... Till exempel motsvarar argtst-exemplet ovan följande kommandorad % ls -l main.c; ls -g main.c; ls -i main.c; ls -n main.c dvs varje kommando får en egen process, men utförs i sekvens och man får e tillbaka promten direkt utan först när alla optioner testats. (Kom ihåg att testa saker och ting. Funktionen system() får ej användas.) 3

Uppgift 8 (2 + 4 p) (a) Nämn en likhet och olikhet mellan en semafor och mutex (från pthread). (b) Betrakta följande synkroniseringsproblem: I ett system finns det tre typer av processer kallade A, B och C. De använder en gemensam resurs R. Resursen R kan användas samtidigt av ett godtyckligt antal processer, men högst två olika typer av processer får använda R samtidigt. Till exempel så kan R användas samtidigt av 5 processer av typ B och 3 processer av typ C, men om sedan en process av typ A också vill använda R så måste den vänta tills antingen alla processer av typ B eller alla processer av typ C har släppt resursen. Lös detta genom att implementera en entry section (dvs kodavsnitt att exekvera före) och exit section (kodavsnitt efter) till den kritiska region i vilken R används. Dvs entry section använd R här exit section Använd vanliga, räknande semaforer för synkronisering och en C-liknande pseudokod. Din lösning måste säkerställa korrekt synkronisering och den ska vara deadlock-fri, men den behöver e vara fri från utsvältning. Du måste också tydligt deklarera och initialisera alla variabler och semaforer. Din lösning ska vidare vara symmetrisk, dvs koden för de tre processtyperna ska vara identisk så när som på namnen på vissa variabler och semaforer. Därför behöver du bara skriva koden för en av processtyperna förutsatt att namnen på variabler och semaforer gör det uppenbart hur koden ska ändras för att passa övriga processtyper. (Använd t ex suffixet A för variabler och semaforer som är specifika för processer av typ A.) Tips: Använd en räknande semafor initialiserad till 2 för att garantera att högst två olika typer av processer samtidigt kan gå in i den kritiska region där R används. T ex: semaphore ok_to_use = 2; Glömejattdeendaoperationernasomkananvändaspåenvanligräknande semafor är wait och signal. 4

Funktionsprototyper execl(const char *pathname, const char *arg0,.../* (char *) 0 */); execle(const char *pathname, const char *arg0,.../* (char *) 0, char *const envp[] */); execlp(const char *filename, const char *arg0,.../* (char *) 0 */); execv(const char *pathname, char *const argv[]); execve(const char *pathname, char *const argv[], char *const envp[]); execvp(const char *filename, char *const argv[]); void FILE pid t exit( status); fclose(file *fp); feof(file *fp); fgetc(file *fp); This function never returns Returns: 0 if OK, -1 on error Returns: nonzero (true) if end of file on stream, 0 (false) otherwise Returns: next character if OK, EOF on end of file or error fgets(char *buf, n, FILE *fp); Returns: buf if OK, NULL on end of file or error *fopen(const char *filename, const char *type); type: "r", "w", "a", "r+", "w+", "a+" Returns: file poer if OK, NULL on error fork(void); <sys/types.h> Returns: 0 in child, process ID of child in parent, -1 on error fprf(file *fp, const char *format,...); Returns: #characters output if OK, negative value if output error fputc( c, FILE *fp); Returns: c if OK, EOF on error fputs(const char *str, FILE *fp); Returns: nonnegative value if OK, EOF on error void free(void *ptr); fscanf(file *fp, const char *format,...); Returns: #input items assigned, EOF if input error or EOF before any conversion getc(file *fp); Returns: next character if OK, EOF on end of file or error getchar(void); Returns: next character if OK, EOF on end of file or error 5

void void FILE *malloc(size t size); Returns: nonnull poer if OK, NULL on error pclose(file *fp); Returns: 0 if OK, -1 on error perror(const char *msg); pipe( fildes[2]); Returns: 0 if OK, -1 on error *popen(const char *cmdstring, const char *type); type: "r", "w" Returns: file poer if OK, NULL on error prf(const char *format,...); putc( c, FILE *fp); putchar( c); Returns: #characters output if OK, negative value if output error Returns: c if OK, EOF on error Returns: c if OK, EOF on error puts(const char *str); Returns: nonnegative value if OK, EOF on error scanf(const char *format,...); Returns: #input items assigned, EOF if input error or EOF before any conversion system(const char *cmdstring); Returns: termination status of shell pid t wait( *statloc); <sys/types.h> <sys/wait.h> Returns: process ID if OK, 0, or -1 on error pid t waitpid(pid t pid, *statloc, options ); <sys/types.h> <sys/wait.h> options: 0, WNOHANG, WUNTRACED Returns: process ID if OK, 0, or -1 on error 6