EKSAMEN Emnekode: ITF22506 Emne: Operativsystemer Dato: 9. desember 2009 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 6 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
Oppgave 1. Prosesser i Linux (10 %) Svar kort og presist på følgende oppgaver: a) Hva er forskjellen på et program og en prosess i Linux? b) Hva skjer når Linux gjør en "context switch"? c) Nye prosesser kan opprettes i Linux (f.eks. fra et C-program) med systemkallet fork. Forklar hvordan fork virker. Oppgave 2. Linux kommandoer og verktøy (10 %) I denne oppgaven skal du for hvert delspørsmål løse problemet ved å angi en Linuxkommando, slik du ville ha tastet den inn til skallet på kommandolinjen (du svarer f. eks. mkdir kat hvis du blir spurt om hvordan du oppretter en katalog med navn kat). a) Kopier alle filer i katalogen du står i, som har et filnavn som slutter på.txt, til katalogen over deg. b) Skriv ut (til standard utenhet) alle linjer i filen /etc/passwd som inneholder strengen levon-helm-rules. c) Endre rettighetene til katalogen htdocs øverst på ditt hjemmeområde og til alle dens filer og underkataloger, slik at du har alle rettigheter mens alle andre kun kan lese og kjøre filer under htdocs. d) Lagre alle linjer som inneholder ditt brukernavn i listingen av prosesser på din lokale maskin i filen proc.txt. e) Sett variabelen DISPLAY til å ha verdien pc666.hiof.no:0.
Oppgave 3. Skallprogrammering (19 %) a) Forklar hva som utføres når følgende program kjøres: #!/bin/sh for user do write $user < message.txt done b) Forklar hva som utføres når følgende program kjøres: #!/bin/sh if [ $# -ne 3 ] then echo "usage: $0 directory file-extension pattern" exit 1 fi if [ -d $1 ] then cd $1 else echo "$1: not a directory" exit 1 fi for file in `ls *$2` do echo -n "$file: " if grep -c $3 $file then lpr $file fi done c) Lag et skallprogram som skriver ut navnet på alle katalogfiler i stående katalog. Programmet skal ikke skrive ut navnene på noen andre filer enn katalogfilene.
Oppgave 4. C-programmering (10 %) Forklar hva som utføres når følgende C-program kjøres: #include <stdlib.h> #include <stdio.h> int main(void) { } int *tabell, *peker; int i, antall = 100; tabell = calloc(antall, sizeof(int)); for (i = 0; i < antall; i++) tabell[i] = random(); peker = tabell; for (i = 0; i < antall/2; i++) { printf("%d\n", *peker); peker = peker + 2; } free(tabell); return 0;
Oppgave 5 (17 %) a) Hvilke Managers er i Windows Vista operativsystem? Gi en beskrivelse av oppgavene til de ulike Managers. b) Gi en beskrivelse av hvordan en semafor fungerer. Hvorfor er det bruk for mekanismer som semaforer? Gi et par pratiske eksempler på når det kan være nyttig å bruke en semafor. c) Beskriv følgende uttrykk i forbindelse med Windows operativsystem: Windows API, spinlock, fiber, virtuelt minne, Plug and Play, Kernel layer. Oppgave 6 (17 %) a) Forklar hva som menes med CPU scheduling. Beskriv noen måter som scheduling kan skje på. Hva er forskjellen på preemptive og ikke preemptive algoritmer? b) Hva skiller multiprosessor scheduling fra scheduling på en prosessor? c) Beskriv følgende måter å organisere multiprosessor scheduling på: Timesharing, Space Sharing og Gang Scheduling. Oppgave 7 (17 %) Skriv et C++ program (CLR Console Application) med to tråder som benytter class Monitor i.net Framework Class Library til synkronisering av en felles liste. private: static ArrayList^ m_liste; // Listen med objekter I en klasse er det to tråder som arbeider mot en felles en liste. Den ene tråden skal henge objekter bakerst på listen et og et. Den andre tråden skal fjerne objekter fremst på listen. Objektene på listen skal være av typen String og tekststrengen skal inneholde nummeret til objektet. Bruk en teller til å telle antall objekter som blir opprettet. Den ene tråden skal henge objekter bakerst på listen. Når et objekt er føyd til skal tråden gjøre utskrift av alle objektene på listen. Deretter skal tråden sove noen sekunder før den føyer til et nytt objekt. Bruk class Random til å trekke et tilfeldig antall sekunder. Den andre tråden skal fjerne objektet fremst på listen, hvis det er et objekt på listen. Hvis listen er opptatt og tråden ikke får fjernet et objekt i løpet av en tidel sekund skal den returnere uten å fjerne. Deretter skal tråden sove noen sekunder før den fjerner et nytt objekt. Start med 5 objekter på listen.
Vedlegg til oppgave 7 Noen member functions i.net Framework Class Library som kan være nyttige i oppgave 7. Thread Members Thread(ThreadStart) Start() Sleep(Int32) 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. Monitor Members Enter(Object) TryEnter(Object, Int32) Exit(Object) Acquires an exclusive lock on the specified object. Attempts, for the specified number of milliseconds, to acquire an exclusive lock on the specified object. Releases an exclusive lock on the specified object. Random Members Random() Next(Int32, Int32) Initializes a new instance of the Random class. Returns a random number within a specified range. ArrayList Members ArrayList() Add(Object) RemoveAt(Int32) Overloaded. Initializes a new instance of the ArrayList class. Adds an object to the end of the ArrayList. Removes the element at the specified index of the ArrayList.