Eksamen høsten 2008 Operativsystemer og Unix
Les nøye gjennom oppgavene og pass på å besvare alle spørsmålene. Før gjerne svarene rett inn uten å kladde først. Alle trykte og skrevne hjelpemidler er tillatt.

Oppgave 1 Bash (15%)

I denne oppgaven skal du i de fire første delspørsmålene angi en kommando på en linje. Skriv linjen slik du ville ha tastet den inn til bash på en Linux-maskin.

a) Gi en kommando som sletter filen /tmp/log.

b) Gi en kommando som gir deg som eier alle rettigheter til filen bareMin.txt mens ingen andre brukere får noen rettigheter.

c) Gi en kommando som kun lister alle prosesser hvor strengen vnc er med i prosesslistingen.

d) Gi en kommando som skriver ut /etc/passwd sortert etter stigende verdier på UID.

e) Følgende kommandoer blir kjørt:

echo "Linux" > data.txt
echo "Windows" > data.txt
cat data.txt | grep Linux > ny.txt

Hva er innholdet i filen ny.txt etter at kommandoene er blitt kjørt? Begrunn svaret.

f) Hva blir resultatet av at følgende kommandoer blir kjørt:

mkdir top_secret
chmod 000 top_secret
cp /etc/passwd top_secret

g) Forklar kort følgende begreper og deres funksjon på et Linux-system

  1. ..
  2. /usr/bin/
  3. /etc/shadow

Oppgave 2 Multitasking (20%)

a) Forklar kort hvordan et operativsystem som kjører på en PC med bare en CPU kan klare å kjøre flere prosesser samtidig.

b) En meteorolog har et meget CPU-intensivt program som i løpet av en time kan regne ut en værprognose på en PC som har en CPU. Han ønsker å kjøre programmet med to forskjellige sett input-data. Siden han har et multitasking OS, starer han to instanser av programmet samtidig. Omtrent hvor lang tid vil det ta før de to værprognosene er ferdig? Begrunn svaret.

c) En kollega råder meteorologen til å skrive om programmet slik at det bruker tråder. Han gjør det og kjører nå programmet som en prosess som har to tråder. Hver tråd regner ut en værprognose. Omtrent hvor lang tid vil det ta før de to værprognosene er ferdig? Begrunn svaret.

d) Meteorologen er ikke fornøyd med resultatet og går på nytt til kollegaen. Han foreslår at han kjører det nye tråd-programmet på en annen PC som har akkurat samme hardware som den han vanligvis bruker, men som har to identiske CPU'er. Omtrent hvor lang tid vil det ta før de to værprognosene er ferdig? Begrunn svaret.

e) Du kjører en prosess og ønsker å se fortløpende hvor stor andel CPU den bruker. Hvordan kan du finne ut det på en Linux-PC?

f) Du kjører en prosess og ønsker å se fortløpende hvor stor andel CPU den bruker. Hvordan kan du finne ut det på en Windows-PC?

g) Forklar kort hva timeslices eller jiffies er.

h) Linux har stort sett brukt jiffies som har hatt en lengde på ett hundredels sekund. Men de siste årene har lengden vært endret litt frem og tilbake. Forklar kort hvordan endring av lengden på timeslice påvirker hvordan systemet oppfører seg.

i) På et Linux-system kjører du en server med PID 2371 og fra /proc/2371/stat kan du fortløpende lese ut hvor mange jiffies den bruker. I denne filen i /proc er det ett tall i en kolonne som angir nøyaktig antall jiffies prosessen har brukt siden den startet. Hvis du vet at en jiffy har en lengde på ett hundredels sekund, forklar i prinsippet hvordan du kan lage et Perl-program som hvert sekund skriver ut et tall som angir hvor stor prosentandel av CPU-tiden serveren har brukt i løpet av det siste sekundet (du trenger altså ikke skrive selve koden, men bare forklare hvordan det kan gjøres).

Oppgave 3 Perl (30%)

a) Filen /proc/meminfo inneholder oppdatert informasjon om systemets minnebruk. Her er et eksempel på hvordan filen ser ut:

MemTotal:      1686528 kB
MemFree:         75692 kB
Buffers:        308584 kB
Cached:         401812 kB
SwapCached:      12000 kB
Active:        1001056 kB
Inactive:       126928 kB
HighTotal:     1087256 kB
HighFree:        48476 kB
LowTotal:       599272 kB
LowFree:         27216 kB
SwapTotal:      497972 kB
SwapFree:       453704 kB
Dirty:               0 kB
Writeback:           0 kB
AnonPages:      417084 kB
Mapped:          37056 kB
Slab:           422768 kB
PageTables:       2084 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   1341236 kB
Committed_AS:   750748 kB
VmallocTotal:   114680 kB
VmallocUsed:      8108 kB
VmallocChunk:   106360 kB

Lag et perl-script som henter ut "MemTotal" og "MemFree" verdiene og skriver dem ut slik:

Totalt minne: 1686528 kB
Ledig minne: 75692 kB

b) Modifiser scriptet til å sjekke verdiene til "Buffers" og "Cached" og å skrive ut den høyeste av dem i tilleg til det som blir skrevet ut i forrige oppgave. I eksempelet over ville resultatet blitt:

Totalt minne: 1686528 kB
Ledig minne: 75692 kB
Cached:   401812 kB

(Du trenger ikke lage hele scriptet på nytt, bare vise forandringene)

c) Vi er naturligvis interessert i å vite når minnet blir oppbrukt. Derfor lager vi en fil /etc/minnegrense som inneholder den laveste grensen for ledig minne som vi er komfortable med. F.eks 4096 kB. Da vil filen se slik ut:

cat /etc/minnegrense
4096
Modifiser scriptet til å hente inn denne verdien i starten og å sjekke om ledig minne er lavere eller høyere enn grensen. Dersom ledig minne er lavere enn grensen skal det sendes en epost til systemadministratoren ola. Man kan sende epost fra kommandolinjen på et Linux system på følgende måte:
echo "ALARM: under laveste minne grense." | mail -s ola@iu.hio.no
Denne kommandoen må altså kjøres fra perl scriptet dersom ledig minne er lavere enn grensen.

Oppgave 4 Nettverk (35%)

a) IPheaderen er vanligvis på 20 byte. Åtte av disse bytene brukes til to adresser. Forklar kort hva disse adressene er og hvordan de brukes.

b) Resten av IPheaderen består av 12 byte og er inndelt i mange felter. Kan du nevne to andre felt og forklare kort hva de brukes til?

c) På Linux-maskinen rex.iu.hio.no utfører du følgende kommando:

$  traceroute www.washington.edu
traceroute to www.washington.edu (140.142.11.6), 30 hops max, 40 byte packets
 1  hio-gw1.hio.no (128.39.89.1)  0.388 ms  0.455 ms  0.538 ms
 2  pil52-gw.uninett.no (158.36.84.53)  0.535 ms  0.627 ms  0.707 ms
 3  pil35-gw.uninett.no (158.36.84.41)  0.655 ms  0.750 ms  0.825 ms
 4  stolav-gw1.uninett.no (158.36.84.49)  0.399 ms  0.393 ms  0.389 ms
 5  oslo-gw.uninett.no (128.39.65.21)  0.504 ms  0.558 ms  0.592 ms
 6  se-tug.nordu.net (193.10.68.105)  8.335 ms  8.366 ms  8.325 ms
 7  dk-uni.nordu.net (193.10.68.18)  24.615 ms se-fre.nordu.net (193.10.252.85) 8.848 ms dk-uni.nordu.net (193.10.68.18) 24.633 ms
 8  dk-ore.nordu.net (193.10.68.118)  18.588 ms  18.615 ms  18.679 ms
 9  nordunet.rt2.cop.dk.geant2.net (62.40.124.45)  18.598 ms  18.660 ms  22.003 ms
10  so-4-0-0.rt1.ams.nl.geant2.net (62.40.112.78)  31.548 ms  31.598 ms  31.634 ms
11  so-7-0-0.rt1.nyc.us.geant2.net (62.40.112.134)  136.709 ms  160.018 ms  118.404 ms
12  198.32.11.50 (198.32.11.50)  126.304 ms  122.748 ms  126.197 ms
13  so-0-0-0.0.rtr.wash.net.internet2.edu (64.57.28.11)  126.332 ms  126.373 ms  122.904 ms
14  so-0-2-0.0.rtr.chic.net.internet2.edu (64.57.28.12)  139.637 ms  139.364 ms  139.359 ms
15  so-4-3-0.0.rtr.kans.net.internet2.edu (64.57.28.36)  153.389 ms  149.879 ms  153.348 ms
16  so-0-0-0.0.rtr.salt.net.internet2.edu (64.57.28.24)  181.406 ms  189.773 ms  184.195 ms
17  so-0-0-0.0.rtr.seat.net.internet2.edu (64.57.28.26)  194.388 ms  190.952 ms  190.949 ms
18  64.57.28.54 (64.57.28.54)  198.009 ms  197.988 ms  198.001 ms
19  iccr-sttlwa01-02-ge-2-2-0-4002.infra.pnw-gigapop.net (209.124.181.132)  197.992 ms  197.952 ms  194.498 ms
20  209.124.181.133 (209.124.181.133)  195.163 ms  195.116 ms  191.660 ms
21  uwcr-hsh-01-vlan1902.cac.washington.edu (205.175.103.9)  191.794 ms  195.109 ms  191.847 ms
22  uwcr-hsh-01-vlan3939.cac.washington.edu (205.175.103.158)  191.960 ms  195.191 ms  192.043 ms
23  acar-ads-01-vlan3902.cac.washington.edu (205.175.110.10)  195.301 ms  195.357 ms  195.461 ms
24  www14.cac.washington.edu (140.142.11.6)  188.553 ms  192.164 ms  192.157 ms
rex$

Forklar kort hva denne kommandoen gjør og hva output fra kommandoen betyr. Forklar spesielt hva hver kolonne i output betyr. For å bedre huske detaljene, slår du opp på manualsiden til traceroute og finner følgende:

This program attempts to trace the route an IP packet would follow to some internet host by launching
probe packets with a small ttl (time  to  live) then  listening  for  an  ICMP  "time exceeded" reply 
from a gateway.  We start our probes with a ttl of one and increase by one until we get an ICMP
"port unreachable" (or TCP reset), which means we got to the "host", or hit a max (which defaults 
to 30 hops). Three probes (by default) are sent  at each  ttl  setting  and  a line is printed showing 
the ttl, address of the gateway and round trip time of each probe.  If the probe answers come from 
different gateways, the address of each responding system will be printed.

d) I linjen i output som starter med tallet 7, har det skjedd noe helt spesielt som man meget sjelden ser. Forklar kort hva som er forskjellig fra alle de andre linjene og hva dette skyldes.

e) Argumentet til kommandoen, www.washington.edu, er webserveren til universitetet i Washington, USA. Mellom to av linkene i listen er det en betydlig større forskjell i tid enn mellom noen av de andre. Mellom hvilke to er forskjellen størst og kan du forkare hvorfor?

f) Mens du utfører denne kommandoen kjører du som root Ethereal (wireshark) på rex. Du lytter på nettverkskortet som er koblet ut mot internett og som har den offentlig IPadressen 128.39.89.9. Dermed kan du se alle pakkene som er et resultat av traceroute-kommandoen. Du teller ikke mindre enn 69 innkommende ICMP-pakker som gir beskjed om Time to live exceeded in transit. Forklar dette antallet og hvordan det henger sammen med output fra traceroute.

g) Du ønsker å finne ut mer om ping og deler av resultatet du får er som følger:

rex$ man ping

   -c count       Stop after sending count ECHO_REQUEST packets. With deadline option, ping waits for 
                       count ECHO_REPLY packets, until the timeout expires.
   -R             Record route.  Includes the RECORD_ROUTE option in the ECHO_REQUEST packet 
                       and displays the route buffer on returned packets.  Note  that  the IP header is  
                       only large enough for nine such routes.  Many hosts ignore or discard this option.
    -t ttl        Set the IP Time to Live.
Deretter utfører du følgende kommando:
rex$ ping -c 1 -t 6  www.washington.edu
PING www.washington.edu (140.142.11.6) 56(84) bytes of data.
From se-tug.nordu.net (193.10.68.105) icmp_seq=1 Time to live exceeded
Forklar kort kommandoen og resultatet du får. Forklar hvordan du kunne forvente dette resultatet når du kjente til output fra traceroute.

h) Du prøver ut en annen opsjon til ping og det gir følgende resultat:

rex$ ping -c 1 -R www.washington.edu
PING www.washington.edu (140.142.11.6) 56(124) bytes of data.
64 bytes from www14.cac.washington.edu (140.142.11.6): icmp_seq=1 ttl=44 time=213 ms
RR: 	rex.iu.hio.no (128.39.89.9)
	hio-gw1.hio.no (158.36.84.54)
	pil52-gw.uninett.no (158.36.84.42)
	pil35-gw.uninett.no (158.36.84.50)
	stolav-gw1.uninett.no (128.39.65.22)
	oslo-gw.uninett.no (193.10.68.106)
	se-tug.nordu.net (193.10.252.3)
	se-fre.nordu.net (193.10.252.4)
	nordunet-gw.rt2.cop.dk.geant2.net (62.40.124.46)
Forklar kort kommandoen og resultatet du får. Hvordan tolker du det du ser sammenlignet med output fra traceroute? Hvorfor får du ikke se flere hop på veien til www.washington.edu?

i) Du kjører Ethereal (wireshark) på rex samtidig med at du utfører kommandoen i forrige deloppgave. I motsetning til de 69 innkommende ICMP-pakkene du så når du kjørte traceroute ser du nå bare en enkelt innkommende ICMP-pakke. En vesentlig forskjell du legger merke til er at IPheaderen for denne pakkene er på 60 byte og ikke på 20 byte som er den normale størrelsen for IPheadere. Alle de 69 pakkenes IPheadere var på 20 byte. Hva tror du de ekstra 40 bytene i den innkommende ICMPpakken inneholder? Forklar kort hvorfor så mange pakker mottas når du kjører traceroute sammenlignet med når du kjører ping -R.

-SLUTT-



haugerud 2009-05-15