Operativsystemer og nettverk Løsningsforslag til eksamen 01.12.2014 Oppgave 1 a) Linux-kommando: java Beregn & b) Shellprogram: java Beregn & java Beregn Eventuelt, hvis man vil gjøre det med bare en linje (den første beregningen starter i et subshell): (java Beregn);java Beregn Dette godtas også som svar: java Beregn &;java Beregn (selv om dette er logisk, vil det faktisk gi en syntaksfeil) c) Det vil ikke gå raskere å kjøre disse prosessene samtidig. Siden de er CPU-intensive, vil de bruke nesten 100% av CPUen når de først kjører, og prosessene vil dermed i praksis måtte bytte på å bruke den ene CPU'en. Når det ikke er noen ventetid på data eller I/O, er det ikke noen tid å tjene inn på multitasking. d) Denne måten å kjøre programmet på vil i praksis ligne mye på den forrige. Linux vil schedulere de to trådene som uavhengige enheter, og som for prosessene må de dele på den ene CPUen som er tilgjengelig. Dermed vil det hele gå omtrent like fort. En context switch går litt fortere mellom to tråder, men i praksis vil det være umerkelig sammenlignet med den tiden beregningene bruker. Det vil også brukes litt mindre minne siden trådene kjører felles kode. e) Vi forventer nå at de to trådene kjøres uavhengig på hver sin CPU. Siden det ikke er noe venting på data og lav belastning forøvrig på maskinen, bør beregningene utføres på omtrent halvparten av tiden det tar med en enkel prosessor. Oppgave 2 a) Se f.eks. sidene 12-17 her: http://www.it.hiof.no/opsys/lysark/memory_2.pdf b) Det kan gis ulik tilgang til de forskjellige minnesesegmentene mht. skrivebeskyttelse og deling med andre prosesser/tråder. Vi kan også enkelt sjekke for lesing og skriving utenfor hvert segment. Hvis vi ikke bruker segmentering, må alt minnet som en prosess tildeles behandles likt mht. beskyttelse og sikkerhet. c) Enkelt svar: Det er mye raskere å hente data fra RAM enn fra disk. En page fault er derfor mye mer tidkrevende enn en cache miss. Mer utfyllende svar:
En cache miss tar typisk bare et titalls nanosekunder, siden data må hentes fra RAM. En page fault betyr at en hel side må hentes fra disk, det tar flere millisekunder og altså minst 100 000 ganger så lang tid (en cache miss kan enkelte ganger også føre til en page fault, og da tar den tilsvarende lang tid). d) Det er to faktorer som medvirker til at versjon to kan ta mye lenger tid å kjøre: Oppgave 3 1. Den første versjonen utnytter caching av dataene som skrives mye bedre, siden det her hele tiden skrives til bytes i minne som ligger ved siden av hverandre. I versjon to er det hele tiden hopp på hundre arrayindekser i mellom dataene som skrives. Men, hvis bare utnyttelse av cache spilte inn, ville antagelig ikke forskjellen vært så stor, fordi forskjellen i hastighet mellom å hente data fra cache og fra RAM ikke er like stor. Den andre faktoren som medvirker til tidsforskjellen er: 2. Den første versjonen skriver bare til de første 2 millioner heltallene i RAM. Typisk er et heltall på fire byte, og 8 MByte RAM brukes. Dette kan fint ligge i RAM. Versjon nummer to skriver derimot til 800 MByte og dette vil typisk kunne gi page faults, med skriving til swap/disk hvis det ikke er plass til alle dataene i RAM på en gang. Den store forskjellen i hastighet tyder på at dette er tilfelle. a) cat mintekst.txt > mintekst2.txt b) pwd > /tmp/pwd c) cp -r /etc/* /mnt/backup d) Denne kommandoen lister opp alle prosesser som kjører, og filtrerer deretter ut med grep slik at kun de linjene som begynner med ola blir skrevet ut. wc leser disse linjene og skriver deretter bare ut antallet linjer. Resultatet er antall prosesser på systemet som er eid av brukere med brukernavn som begynner med "ola". e) Denne kommandoen henter ut alle linjene fra loggfilen /var/log/auth.log som inneholder ordet failure. Resulatet blir en liste over mislykkede innloggingsforsøk, siden disse blir logget i denne logfilen. f) tail vil i utgangspunktet kun vise slutten av en fil. Dette er praktisk når man f.eks. vil undersøke noe i en logfil, hvor de nyeste meldingene kommer nederst. Med opsjonen -f, vil tail vise slutten av en fil, men ikke avslutte. tail vil følge med på om filen vokser og skrive ut de nye meldingene fortløpende. Dette er praktisk når man vil følge nøye med på operativsystemet. Man kan da starte f.eks tail -f /var/log/auth.log i et eget terminalvindu og får fortløpende oppdateringer av loggfilen i dette vinduet. g) #!/bin/bash echo "$1 og $2" h) Programmet flytter alle filer i stående katalog, som har et filnavn som slutter med tekststrengen angitt som første parameter, til katalogen /tmp.
i) #!/bin/bash user=$1 sum_vsz=0 sum_rss=0 ps aux grep "^$user" > tempfile while read line do vsz=`echo $line tr -s ' ' ' ' cut -f5 -d' '` sum_vsz=`expr $sum_vsz + $vsz` rss=`echo $line tr -s ' ' ' ' cut -f6 -d' '` sum_rss=`expr $sum_rss + $rss` done < tempfile echo "VSZ total: $sum_vsz, RSS total: $sum_rss"
Løsningsforslag Oppgave 4 A) Oppslag til den lokale url en på webservene /ansatte blir redirectet til den nye siden http://www.nyesider.no/ansatte. I tillegg sier webserveren i fra at dette er en permanent redirect (server sender statuskode 301) B) ALIAS Henviser til en annen path (filsti) internt på serveren enn det som er standard Eks Alias /prosjekt /var/www/prosjekt REDIRECT En omdirigering.. Kan for eksempel henvise til en ny side for den aktuelle siden. Kan fortelle om den skal omdirigere permanent, midlertidig eller rett og slett bare er gone (til den siste statusen henviser den ikke til noen ekstern side) C).htaccess brukes til å regulere rettigheter/features til apache på katalognivå. Du kan sette rettigheter, php instillinger osv osv individuelt per mappe. Overskrive default settinger for apache. D) Bruker to høye porter for å skille trafikken inn til de to andre ftp serverne.. # Tillate innkommende FTP $IPT - A FORWARD - p tcp - d $INT_NET - - dport 21 - j ACCEPT # Route innkommende FTP til server $IPT - t nat - A PREROUTING - d $EXT_IP - p tcp - - dport 21 - j DNAT - - to 192.168.1.3:21 # Route innkommende FTP til server2 (antar at server 3 har lokal ip 192.168.1.5) $IPT - t nat - A PREROUTING - d $EXT_IP - p tcp - - dport 9999 - j DNAT - - to 192.168.1.5:21 # Route innkommende FTP til server3 (antar at server 3 har lokal ip 192.168.1.6) $IPT - t nat - A PREROUTING - d $EXT_IP - p tcp - - dport 9998 - j DNAT - - to 192.168.1.6:21 E) Åpner /etc/aliases (antar at server heter gruppe10.no) og legger inn en linje som følger: webansvarlige: localuser1, localuser2, localuser3, localuser4, localuser5, eksternadresse1@gmail.com, eksternadresse2@gmail.com, eksternadresse3@gmail.com, eksternadresse4@gmail.com, osv. Viktig at de enten kjører kommandien newaliases eller restarter Sendmail i etterkant
F) Litt forenklet.. sjekker header og body på mail etter gitte kriterier før det videresendes til lokale brukere.. Beregner en score som settes for å beregne om mail er spam eller ikke.. Om du setter spam grensen til for eksempel 5, vil mail med score høyere enn 5 få subject omskrevet til SPAM + subject.. Du kan selvsagt legge til lokale mailadresser, og gi de minuspoeng, så du hindrer at mail fra direktør med tittel Viagratilbud bli merket som spam G) Går til /etc/skel og oppretter mappene der de blir kopiert til hjemmeområdet til nye brukere når du kjører adduser skriptet..