Eksamensoppgaver i Operativsystemer og Unix H˚arek Haugerud avdeling for ingeniørutdanning Høgskolen i Oslo Contents 1 Eksamen høsten 1998 Operativsystemer og UNIX 1 1.1 Løsningsforslag. Eksamen høsten 1998 Operativsystemer og UNIX . . . . . . . . . . . . . 4 2 Eksamen v˚aren 1999 Operativsystemer og UNIX 9 2.1 Løsningsforslag. Eksamen v˚aren 1999 Operativsystemer og UNIX . . . . . . . . . . . . . . 12 3 Eksamen høsten 1999 Operativsystemer og UNIX 16 3.1 Løsningsforslag. Eksamen høsten 1999 Operativsystemer og UNIX . . . . . . . . . . . . . 21 4 Eksamen v˚aren 2000 Operativsystemer og UNIX 25 4.1 Løsningsforslag. Eksamen v˚aren 2000 Operativsystemer og UNIX . . . . . . . . . . . . . . 29 5 Eksamen høsten 2000 Operativsystemer og UNIX 33 5.1 Løsningsforslag til eksamen høsten 2000 Operativsystemer og UNIX . . . . . . . . . . . . 38 6 Eksamen v˚aren 2001 Operativsystemer og UNIX 43 6.1 Løsningsforslag,Eksamen v˚aren 2001 Operativsystemer og UNIX . . . . . . . . . . . . . . 49 7 Eksamen høst 2001 Operativsystemer og UNIX 55 7.1 Løsningsforslag til eksamen høsten 2001 Operativsystemer og UNIX . . . . . . . . . . . . 61 8 Eksamen v˚ar 2002 Operativsystemer og UNIX 67 8.1 Løsningsforslag til eksamen v˚aren 2002 Operativsystemer og UNIX . . . . . . . . . . . . . 73 9 Eksamen høst 2002 Operativsystemer og UNIX 79 9.1 Løsningsforslagtil eksamen høst 2002,Operativsystemer og UNIX . . . . . . . . . . . . . 84 10 Eksamen v˚ar 2003 Operativsystemer og UNIX 88 10.1 Løsningsforslag til eksamen v˚aren 2003 Operativsystemer og UNIX . . . . . . . . . . . . . 93 11 Eksamen høst 2003 Operativsystemer og UNIX 97 11.1 Løsningsforslagtil eksamen høst 2003,Operativsystemer og UNIX . . . . . . . . . . . . . 102 12 Eksamen v˚ar 2004 Operativsystemer og UNIX 106 12.1 Løsningsforslag Eksamen v˚ar 2004 Operativsystemer og UNIX . . . . . . . . . . . . . . . 111 ii 13 Eksamen høst 2004 Operativsystemer og UNIX 114 13.1 LøsningsforslagEksamen høst 2004 Operativsystemer og UNIX . . . . . . . . . . . . . . . 119 14 Eksamen v˚ar 2005 Operativsystemer og UNIX 123 14.1 Løsningsforslag. Eksamen v˚ar 2005 Operativsystemer og UNIX . . . . . . . . . . . . . . . 128 15 Eksamen høst 2005 Operativsystemer og UNIX 131 15.1 LøsningsforslagEksamen høst 2005 Operativsystemer og UNIX(LO141A) . . . . . . . . . 136 16 Eksamen v˚ar 2006 Operativsystemer og UNIX 140 16.1 Løsningsforslageksamen v˚ar 2006 Operativsystemer og UNIX . . . . . . . . . . . . . . . . 145 17 Eksamen høst 2006 Operativsystemer og UNIX 149 17.1 LøsningsforslagEksamen høst 2006 Operativsystemer og UNIX(LO141A) . . . . . . . . . 155 18 Eksamen v˚aren 2007 Operativsystemer og UNIX 159 18.1 LøsningsforslagEksamen v˚aren 2007 Operativsystemer og UNIX . . . . . . . . . . . . . . 164 19 Eksamen v˚aren 2008 Unix og Operativsystemer 168 19.1 Løsningsforslagv˚aren 2008 Unix og Operativsystemer . . . . . . . . . . . . . . . . . . . . 173 20 Eksamen høsten 2008 Operativsystemer og Unix 177 20.1 Eksamen høsten 2008 Operativsystemer og Unix . . . . . . . . . . . . . . . . . . . . . . . 182 21 Eksamen v˚aren 2009 Operativsystemer og Unix 186 21.1 Løsningsforslag,eksamen v˚aren 2009 Operativsystemer og Unix . . . . . . . . . . . . . . . 191 22 Eksamen Høsten 2009 Operativsystemer og Unix 196 22.1 LøsningsforslagEksamen Høsten 2009 Operativsystemer og Unix . . . . . . . . . . . . . . 202 23 Eksamen v˚aren 2010 Operativsystemer og Unix 206 23.1 Løsningsforslagv˚aren 2010 Operativsystemer og Unix . . . . . . . . . . . . . . . . . . . . 211 24 Eksamen høsten 2010 Operativsystemer og Unix 216 24.1 Løsningsforslageksamen høsten 2010 Operativsystemer og Unix . . . . . . . . . . . . . . . 220 25 Eksamen v˚aren 2011 Operativsystemer og Unix 224 iii 25.1 Løsningsforslag,eksamen v˚aren 2011 Operativsystemer og Unix . . . . . . . . . . . . . . . 230 26 Eksamen høsten 2011 Operativsystemer og Unix 234 26.1 Løsningsforslag,Eksamen høsten 2011 Operativsystemer og Unix . . . . . . . . . . . . . . 239 27 Eksamen v˚aren 2012 Operativsystemer 243 27.1 Eksamen v˚aren 2012 Operativsystemer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 iv oppgavetekst 1 1 Eksamen høsten 1998 Operativsystemer og UNIX Les nøye gjennom oppgavene før du begynner og pass p˚a˚a besvare alle spørsm˚alene. Alle hjelpemidler er tillatt. De som ønsker det kan besvare oppgavene eller deler av oppgavene p˚a engelsk. Deloppgavene vil ikke bli vektlagt likt ved sensur. En sannsynlig fordeling er: vekt 1 for alle deloppgaver med untak av 2a (vekt 4), 2b (vekt 4), 3a (vekt 4) og 4d (vekt 8) Oppgave 1 I denne oppgaven skal du for hvert delspørsm˚al løse problemet ved˚a angi en UNIX-kommando p˚a en linje; slik du ville ha tastet den inn til et vanlig C-shell fra tastaturet (du svarer f. eks. mkdir kat hvis du blir spurt om hvordan du oppretter en katalog med navn kat). a) Endre rettighetene til katalogen www øverst p˚a ditt hjemmeomr˚ade og til alle dens filer og under- kataloger, slik at du har alle rettigheter mens alle andre kun kan lese og kjøre filer under www. b) Kopier alle filer i katalogen du st˚ar i som slutter p˚a .java til katalogen over deg. c) List alle linjer i filen /etc/passwd som inneholder strengen ”haugerud”. d) Finn ut om filene fil1 og fil2 i katalogen du st˚ar er like. e) Lagre alle linjer som inneholder ditt brukernavn i listingen av prosesser p˚a din lokale maskin i filen proc.txt f) Sett DISPLAY variabelen til axis:0 g) Du har en fil i katalogen du st˚ar i som heter -x og prøver ˚a kopiere den til katalogen tmp med cp -x tmp, men f˚ar beskjed om missing file argument. Hvorfor f˚ar du denne meldingen ? Hvordan kan du f˚a utført operasjonen ? Oppgave 2 a) Lag et C-shell script som ved hjelp av /usr/bin/rsh sjekker at demonen lpd g˚ar p˚a alle mask- inenesomerlistetifilen~/.rhosts. Scriptetskalforhverhostskrivehost-navnettilskjermenogderetter linjen i prosess-listingen som inneholder lpd. Prøv˚a unng˚a at prosessen du bruker for˚a liste prosesser ogs˚a listes p˚a skjermen. Hvis en maskin er nede, skal ikke scriptet kjøre /usr/bin/rsh mot den, for da vil scriptet henge, men gi en melding til skjermenom at maskinenikke er tilgjengelig. Hvilken nytte har man av ~/.rhosts ? b) Anta at du har en fil brukere.txt som kun inneholder et antall brukernavn p˚a det lokale UNIX- systemet. Disse brukerne skal forventes˚a ha en katalog ~/oblig1 som inneholder et program delete. Du ønsker˚a teste om delete-programmene hos brukerne virker og vil derfor kopiere dem til ditt eget hjemmeomr˚ade under katalogen ~/brukere. Lag et C-shell script som utfører denne jobben. Hvis katalogen ~/oblig1 ikke eksisterer skal scriptet sende en mail til brukeren med beskjed. Hvis katalogen eksisterer, men ikke filen delete, skal scriptet sendeenmailtilbrukerenomdet. Hvis~/oblig1/deleteeksistererskaldetlagesenkatalogmedsamme navn som brukeren under din egen katalog ~/brukere og delete legges i denne katalogen. Scriptet skal fortløpendeskrivebeskjedertilskjermenomhvasomblirgjort(dukanantaatdukankjørescriptetmed root-rettigheter, slik at du har tilgang til alle kataloger). Oppgave 3 2 Eksamen høsten 1998 Operativsystemer og UNIX a) Et OS har i sin ready-list tre prosesser P1,P2 og P3 som kom inn i nevnte rekkefølge. Anta at ingen nye prosesserblirlagtinni ready-listmens disse prosessenekjører. CPU-tidsforbruketerkjent forde tre prosessene og er: TP1 = 75µs, TP2 = 50µs og TP3 = 100µs. Tegn figurer med horisontal tidsakse med µssomenhetsomviserhvordanogihvilkenrekkefølgeOS’etutførerprosessene,n˚aroperativsystemeter: 1) single tasking og bruker FCFS-kø 2) single tasking og bruker SJF-kø 3) multitasking og bruker Round Robin scheduling med timeslice =50µs De tre figurene m˚a indikere tidspunktene OS’et starter og stopper prosessene. b) Forklar kort hva en context-switch er. c) Anta at OS’et i Round Robin eksempelet bruker 5µs p˚a en context-switch. Tegn figuren til Round Robin eksempelet p˚a nytt og la context-switch tiden inng˚a . d) Hvorfor bør ikke en timeslice være for liten ? e) Forklar hvordan et OS kan prioritere prosesser i en Round Robin kø forskjellig. Oppgave 4 a) nexus.iu.hioslo.no har IP-adresse 128.39.89.10. Hvilke deler av nexus.iu.hioslo.no er henholdsvis host- name og domain-name ? b) netmask er her 255.255.255.0. Hva i nexus sin IP-adresseidentifiserer henholdsvis nettverketnexus er p˚a og hvilket host-nummer nexus er p˚a dette nettverket. Forklar. c) Hva er en nameserver og hvorfor er den nødvendig ? d) Vi skal n˚a ta utgangspunkt i et standard client/server par som kommuniserer over en socket og lage en enkelnameserversom kan giriktige IP-adressertil clients somspørr. Anta at nameserverstartes opp i en katalog hvor det ligger en fil name.txt med innhold p˚a formen: waldo.iu.hioslo.no 128.39.89.251 nexus.iu.hioslo.no 128.39.89.10 axis.iu.hioslo.no 128.39.89.239 Nameserveren skal kunne gi tilbakemelding til client om alle IP-adresser som er lagret i denne filen. nameserver/clientparet skal fungere som følger (anta at du starter nameserver p˚a maskinen axis): axis% nameserver 9500 Da skal en client-sesjon p˚a f. eks. waldo foreg˚a som følger: waldo% client 9500 axis lookup> nexus.iu.hioslo.no 128.39.89.10 lookup> 128.39.89.251 waldo.iu.hioslo.no lookup> wronglon.iu.hioslo.no Can’t find wronglon.iu.hioslo.no lookup> tull Can’t find tull Brukerenskal alts˚a f˚a svar om han angir et komplett maskin-navneller en IP-adressesomst˚ar i tabellen oppgavetekst 3 name.txt. lookup> er et prompt som skrives til skjermen av client-programmet. Du kan godt overlate det meste av jobben til nameserver; slik at client bare sender all bruker-input over socket’en til name- serveren og skriver alt den mottar over socket’en til skjermen. Velg selv om du vil bruke print SOCKET og <SOCKET> eller send(SOCKET,$string,”0”)og recv(SOCKET,$buffer,$BUFFSIZE,”0”). Lagclient-programmetognameserver-programmetved˚afylleut”innmaten”idetofølgendeprogram(du trenger ikke˚a gjengi denne teksten i besvarelsen; bare angi hvilke programbitersomtilhører henholdsvis nameserver og client. #! /usr/bin/perl # Usage: nameserver 9500 use Socket; use FileHandle; $port = shift || 9500; socket (SOCKET, PF INET, SOCK STREAM, getprotobyname(’tcp’)); bind (SOCKET, pack(’Sna4x8’, AF INET, $port, ”\0\0\0\0”)) or die ”Can’t bind to port $port!”; listen (SOCKET, 5); NEW SOCKET->autoflush(); SOCKET->autoflush(); while (1) #evig løkke { accept(NEW SOCKET, SOCKET); # En client har her koblet seg opp og programmet # er n˚a klar til˚a motta og sende data over NEW SOCKET # Skriv nameserver-kodesom passer inn her og lever den med besvarelsen } #! /usr/bin/perl # Usage: client hostport hostname use Socket; use FileHandle; ($port, $server) = @ARGV; $port && $server or die ”Please supply both port and server.”; socket (SOCKET, PF INET, SOCK STREAM, (getprotobyname(’tcp’))[2]); connect (SOCKET, pack(’Sna4x8’, AF INET, $port, (gethostbyname($server))[4])) or die ”Can’t connect to server $server on port $port.\n”; SOCKET->autoflush(); # Er n˚a klar til˚a sende og motta data over SOCKET # Skriv client-kode som passer inn her og lever den med besvarelsen –SLUTT– 4 Løsningsforslag. Eksamenhøsten1998OperativsystemerogUNIX 1.1 Løsningsforslag. Eksamen høsten 1998 Operativsystemer og UNIX Oppgave 1 a) chmod -R 755 ~/www eller: chmod -R a+rx-w,u+w ~/www b) cp *.java .. eller: cp *.java ../ c) grep haugerud /etc/passwd eller: cat /etc/passwd | grep haugerud eller: awk ’/haugerud/’ /etc/passwd eller: awk /haugerud/ /etc/passwd d) diff fil1 fil2 e) ps aux | grep $user > proc.txt eller: ps ux > proc.txt(men noen prosesser kan da mangle) f) setenv DISPLAY axis:0 g) cp ./-x tmp -x tolkes som et flagg til cp. Oppgave 2 a) #! /bin/csh -f foreach host (‘cat ~/.rhosts‘) set alive = ‘fping $host | grep alive‘ if("$alive" == "") then echo $host er ikke tilgjengelig else echo $host /usr/bin/rsh $host ps aux | grep lpd | grep -v grep endif end Har man filen ~/.rhosts under ~, kan man bruke /usr/bin/rsh mot maskiner listet i denne filen, uten ˚a m˚atte oppgi passord. b) #! /bin/csh -f foreach stud (‘cat brukere.txt‘) if(! -d ~$stud/oblig1) then echo "Du har ikke ~$stud/oblig1" | mail $stud echo "~$stud/oblig1 eksisterer ikke" else if(! -e ~$stud/oblig1/delete) then echo "Du har ikke ~$stud/oblig1/delete" | mail $stud echo "~$stud/oblig1/delete eksisterer ikke" else mkdir ~/brukere/$stud cp ~$stud/oblig1/delete ~/brukere/$stud echo "kopierer ~$stud/oblig1/delete til ~/brukere/$stud" endif endif end Oppgave 3 a) Se Figure 1 løsningsforslag 5 1) P P P 1 2 3 µs 0 75 125 225 2) P2 P 1 P3 0 50 125 225 µs 3) P P P P P 1 2 3 1 3 µs 0 50 100 150 175 225 Figure 1: 3a) b) Context-switch er den operasjonen OS’et gjør n˚ar den bytter prosessen den kjører ut med en ny prosess fra ready-list. OS lagrer all info om prosessen som skal ut og laster bl. a. inn i CPU-registerne det samme innholdet de hadde da den nye prosessen tidligere ble stoppet. c) Se Figure 2 d) Hvis timeslice er for liten g˚ar for mye tid med til context-switching. e) OS’et kan gi større timeslice til prosessermed høy prioritet, eventuelt starte jobber med høy prioritet oftere i Round Robin køen. Oppgave 4 a) host-name: nexus og domain-name: iu.hioslo.no b) nettverk: 128.39.89 og host: 10. Bitene som er satt i netmask identifiserer nettverket. c)Enserversom‘oversetter’mellomhost.domain-nameogIP-adresser. Trengerdenfordietdomenenavn ikke entydig spesifiserer et nettverk, men kun brukes fordi det er lett˚a huske. d) client: print "nameserver> "; while ($userIn = <STDIN>) { print SOCKET "$userIn"; $socIn = <SOCKET>; print $socIn; print "nameserver> "; } close SOCKET; 6 Løsningsforslag. Eksamenhøsten1998OperativsystemerogUNIX nameserver: while ($query = <NEW_SOCKET>) { chomp $query; open (NAME, "name.txt"); $OK = ""; while ($line = <NAME>) { @arr = split(" ",$line); if($arr[0] eq $query) { print NEW_SOCKET "$arr[1]\n"; $OK = "true"; } elsif($arr[1] eq $query) { print NEW_SOCKET "$arr[0]\n"; $OK = "true"; } } close(NAME); if(not $OK) { print NEW_SOCKET "Nameserver can’t find: $query\n"; } } client med send/recv: $BUFFSIZE= 1000; print "nameserver> "; while ($userIn = <STDIN>) { send(SOCKET,"$userIn","0"); recv(SOCKET,$query,$BUFFSIZE,"0"); print $query; print "nameserver> "; } close SOCKET; nameserver med send/recv: while (1) { recv(NEW_SOCKET,$query,$BUFFSIZE,"0"); last if($query eq ""); # ellers t\aa ler ikke server at client slutter/drepes chomp $query; open (NAME, "name.txt"); $OK = ""; while ($line = <NAME>) { @arr = split(" ",$line); if($arr[0] eq $query) { send(NEW_SOCKET,"$arr[1]\n","0");
Description: