EKSAMEN Emnekode: ITF22506 Emne: Operativsystemer Dato: 10. desember 2008 Eksamenstid: kl. 9.00 til kl. 13.00 Hjelpemidler: 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater. Faglærer: Jan Høiberg Einar Krogh Eksamensoppgaven: Oppgavesettet består av 5 sider inklusiv denne forsiden. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene. Oppgavesettet består av 7 oppgaver. Oppgavene 1, 2,3,4 er fra Modul 1 (JH) Oppgavene 5, 6, 7 er fra Modul 2 (EK) Sensurdato: 7. januar 2009 Karakterene er tilgjengelige for studenter på studentweb senest 2 dager etter oppgitt sensurfrist. Følg instruksjoner gitt på: http://www.hiof.no/index.php?id=11229 1
Oppgave 1: Generelt om operativsystemet Linux (10%) a) Hva er de viktigste oppgavene til et operativsystem? b) Forklar kort følgende begrep i Linux: i) Standard innenhet og standard utenhet. ii) Filterprogram. iii) Redirigering av I/O. iv) Piping (eller rørlegging ) c) Programmet lint kan brukes i tillegg til kompilatoren for å luke ut bugs og finne mistenkelig og ikke-standard kode i C-programmer. lint leser en fil med C- kode og skriver ut advarsler og feilmeldinger til standard utenhet. En bruker som ville sjekke kvaliteten på programmene sine (et stort antall C-filer som var plassert i katalogen myprogs), ga følgende kommando: lint myprogs/*.c Dette ga ingen respons fra lint. Brukeren fikk i stedet bare tilbake kommandopromptet fra skallet. Hva tror du dette betyr mht. til brukerens C-kode? Oppgave 2: Linux-verktøy og kommandoer (15%) a) Forklar kort hva som utføres ved eksekvering av hver av disse tre kommandoene: i) ls -ld h* ii) who grep janh > /dev/null && echo Sjefen er her iii) tail -100 fil.txt tee fil2.txt mail s Hei janh@hiof.no b) Skriv Linux kommandoer (sammensatt med rørlegging og redirigering av I/O) som utfører følgende operasjoner: i) Finner og skriver ut alle linjer på filen minfil.txt i stående katalog, som inneholder i rekkefølge (men ikke nødvendigvis rett etter hverandre) bokstavene b, a, n og d. Det skal ikke gjøres forskjell på store og små bokstaver, f.eks. skal ordene BAND og Branford skrives ut hvis de finnes på filen. ii) Skriver ut brukernavn og "fullt navn" for alle brukere på Linux-systemet som har et brukernavn som begynner med a, b eller c. Utskriften skal være alfabetisk sortert på brukernavnet. iii) Setter tilgangsrettighetene for filen minfil slik at eieren av filen kan lese filen, skrive til filen og eksekvere den. Alle andre brukere skal bare kunne lese filen. 2
Oppgave 3: Skallprogrammering (15%) a) Forklar hva som utføres ved kjøring av følgende skallprogram: #!/bin/sh trap "echo $0 aborting; rm tempfile; exit 1" 1 2 3 15 footer_file=$1 shift for file do if [ -r "$file" -a -w "$file" ] then cat "$file" $HOME/$footer_file > tempfile cp tempfile "$file" rm tempfile else echo $0: Cannot read and write $file exit 1 fi done b) Skriv et interaktivt skallprogram som leser to filnavn (tekststrenger) fra bruker (dvs. fra standard innenhet). Hvis begge filene finnes og er lesbare, skal innholdet av filene skrives ut til standard utenhet. Innholdet av de to filene skal deretter legges etter hverandre i en ny fil med navn appended_files. Alle filene skal ligge i stående katalog. Programmet bør håndtere feilsituasjoner fornuftig. Oppgave 4: C-kode med operativsystemkall (10%) Hva skrives ut når C-programmet nedenfor kjøres?: #include <stdio.h> #include <stdlib.h> int main(void) { int nummer; printf("da er vi gang!\n"); nummer = fork(); if (nummer == 0) { char *argv[3]; argv[0] = strdup("w"); argv[1] = strdup("-s"); argv[2] = NULL; } printf("og nå over til noe helt annet:\n"); execvp(argv[0], argv); } waitpid(nummer, NULL, 0); printf("hadet!\n"); 3
Oppgave 5 (17 %) a) Hvorfor er det behov for synkronisering av tråder? Hvilke synkroniseringsobjekter kan man bruke i Visual C++ 2008? Beskriv de ulike synkroniseringsobjektene og hvordan de fungerer. b) Hva menes med Interprosess kommunikasjon? Hvilke muligheter har prosesser på en PC til å kommunisere med hverandre? Hvilke muligheter har prosesser til å kommunisere med hverandre over nettverk? c) Gi en oversikt over hvordan Windows Sockets fungerer. Beskriv både server og klient. Oppgave 6 (17 %) a) Gi en oversikt over hvordan operativsystemer kommuniserer med hardware. b) Beskriv hvilke oppgaver følgende typer operativsystemer er laget for 1. Operativsystemer for vanlige PC-er. 2. Operativsystemer for sanntidssystemer. 3. Operativsystemer for servere i et nettverk. Hva vil være forskjellig for disse typene operativsystemer? c) Hvilket behov er det for sikkerhet i datasystemer. Ta for deg både enkeltstående datamaskiner og datamaskiner tilknyttet et nettverk. Oppgave 7 (17 %) Skriv et C++ program (Console i Visual Studio) med to tråder som kommuniserer med hverandre via et buffer. Den ene tråden (skrivetråden) skal skrive meldinger til bufferet. Den andre tråden (lesetråden) skal lese meldingene fra bufferet. Som buffer benyttes en String. private: static String^ _Buffer; Når en tråd har skrevet til / lest fra bufferet skal den sove noen sekunder. Bruk class Random for å trekke tilfeldige tall. Lesetråden skal ikke lese bufferet før noe er skrevet og skrivetråden skal ikke skrive noe nytt før forrige melding en er lest. For å synkronisere lesing/skriving benyttes to event objekter private: static EventWaitHandle^ _skrevetevent; private: static EventWaitHandle^ _lestevent; Lag fornuftige utskrifter til skjermen fra de to trådene slik at vi hele tiden er oppdatert på hva som skjer. Se vedlegg side 5 for noen aktuelle bibliotekrutiner i programmet. 4
Vedlegg Vedlegg til oppgave 7. Thread Members Thread(ThreadStart) Start() Sleep() Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started. Causes a thread to be scheduled for execution. Blocks the current thread for the specified number of milliseconds. Random Members Random() Next(Int32, Int32) Initializes a new instance of the Random class. Returns a random number within a specified range. EventWaitHandle Members EventWaitHandle(Boolean, EventResetMode) WaitOne() Set() Initializes a new instance of the EventWaitHandle class, specifying whether the wait handle is initially signaled, and whether it resets automatically or manually. Blocks the current thread until the current WaitHandle receives a signal. Sets the state of the event to signaled, allowing one or more waiting threads to proceed. 5