Eksamen våren 2009 Operativsystemer og Unix
Les nøye gjennom oppgavene før du begynner og pass på å besvare alle spørsmålene. Alle trykte og skrevne hjelpemidler er tillatt. Sett gjerne egne forutsetninger dersom du synes oppgaveteksten er uklar. Beskriv forutsetningene og løs oppgaven utifra dem.

Oppgave 1 - Bash (10%)

a) Hva gjør følgende kommando?

cat /etc/passwd | cut -d : -f 1

b) Hva er feil i denne kommandoen:

ls /home >> grep group > group_users.txt

c) Gi en kommando som teller antall brukere som finnes på systemet

d) Gi en kombinasjon av kommandoer som sjekker om det akkurat nå finnes en prosess med navn "calc.pl"

e) Hva gjør følgende kommando:

if [ -f /home/ola/.trash/* ]; then
    rm /home/ola/.trash/*
fi

Oppgave 2 - Prosesser (20%)

Denne oppgaven handler om prosesser i et Linux/Unix miljø. Anta at du har et CPU-intensivt program med navn regn. Det bruker all den CPU-tid som det gis tilgang til. Programmet forventer et tall som argument og skriver ut et desimaltall som resultat. En vanlig kjøring kan se slik ut

$ ./regn 23
Resultatet er: 4.23114451
Programmet bruker nøyaktig 10 minutter på utføre beregningen når Linux-maskinen ellers ikke er i bruk. Tiden er den samme uansett hvilken parameter du sender med.

a) Du setter igang programmet med feil parameter. Forklar kort hvordan du kan stoppe det.

b) I riktig gamle dager måtte du vente til programmet var ferdig før du kunne bruke datamaskinen din til noe annet. Forklar kort hvordan et moderne operativsystem gjør det mulig at du surfer på nettet samtidig som programmet kjører. Linux-PC'en din har kun én CPU.

c) Du leser nettaviser med Firefox mens du venter på at programmet regn skal bli ferdig. I hvilken grad forventer du at din bruk av Firefox vil påvirke hvor lang tid beregningen tar? Forklar kort.

d) Du har gått litt lei av å lese nettaviser og gleder deg stort over en melding fra drift. De har oppgradert PC'en din slik at du nå har to CPU'er av samme type som den gamle. Nå skal programmet gå fortere! Men skuffet oppdager du at programmet fortsatt bruker 10 minutter. Hva skyldes det? Forklar kort.

e) Neste dag må du kjøre regneprogrammet ditt med to forskjellige parametre. Du setter igang begge samtidig på følgende måte:

$ ./regn 44 > res44.txt&
$ ./regn 112 > res112.txt&
Forklar kort hva disse kommandoene betyr og hvor lang tid det vil ta før du får resultatene dine. Begrunn svaret.

f) Skriv et bash-script med navn run som tar et vilkårlig antall argumenter. Scriptet skal anta at hvert argument er et tall og for hvert tall skal programmet regn startes med tallet som argument. Hvis for eksempel run startes med

$ ./run 44 112
skal nøyaktig det samme skje som i forrige delspørsmål. For hver regn-jobb skal altså resultatet lagres i en fil med navn resTALL.txt der TALL er tall-argumentet. Hvis det ikke oppgis noe argument til run, skal det avsluttes med en passende feilmelding.

Oppgave 3 - Threads/tråder (20%)

a) Forklar kort forskjellen på en "single core" og en "dual core" CPU.

b) Forklar kort forskjellen på threads og hyperthreading.

c) Du har fått jobb som konsulent og får et oppdrag hos en kunde som jobber på en PC med Windows XP. Kunden kjører et Java-program som er ganske CPU-intensivt, men som også bruker noe tid på å lese fra disk. Det bruker 10 minutter på å fullføre jobben. Kunden forteller at hun nettop har oppgradert til en dual core CPU, men at programmet likevel ikke går fortere. Forklar kort for kunden hvorfor Java-programmet ikke klarer å utnytte begge CPU-kjernene.

d) Kundens program leser fire store tekstfiler og for hver fil utføres noen kompliserte beregninger av hvor lang avstand det er mellom visse ord i teksten i denne filen. Forklar kort for kunden hvordan du kan endre Java-programmet til å utnytte begge CPU-kjernene ved å bruke to Java-tråder. Du trenger ikke å skrive Java-kode, men bare skissere prinsippene for hvordan koden skal løse den konkrete programmeringsoppgaven ved hjelp av to Java-tråder.

e) Kunden er meget imponert over forslaget ditt og betaler villig for at du skriver om programmet. Det gjør du på en times tid og demonstrerer for kunden at programmet nå tar 5 minutter på å fullføre. Forklar kort for kunden hvorfor tiden blir halvert.

f) Kunden forteller videre at hver av CPU-kjernene er hyperthreading og spør om det er mulig å gjøre ytterligere endringer av Java-koden for å utnytte hyperthreadingen. Skisser kort for kunden en liten ekstra endring av Java-koden som gjør at programmet utnytter hyperthreading.

g) Kunden er fyr og flamme når du meget rakst skriver om programmet og kjører det på nytt. Det går ett minutt raskere og bruker total 4 minutter på hele jobben. Prøv å forklare for kunden hvorfor det ikke var å forvente at kjøretiden ble halvert til to og et halvt minutt.

Oppgave 4 - Minne (30%)

Ola har hørt at nettlesere ofte bruker mye minne og ønsker å overvåke minnebruk til nettleseren sin, Firefox. Han lager følgende script som skal kunne gi minnebruk til en vilkårlig prosess:

#!/bin/bash

ps aux | grep $1

Når han så kjører scriptet sitt slik:

$ ./memwatch.sh firefox

ola    11391  0.0  0.0   3336   808 pts/5    S+   12:30   0:00 grep firefox
ola    32743  0.5  1.5 137528 51912 ?        Sl   10:39   0:38 /usr/lib/firefox-3.0.9/firefox

a) Kan du forklare utskriften som ola får?

b) Han er ikke helt fornøyd med utskriften sin og leser seg dypere inn i ps kommandoen. Headeren på en "ps aux" utskrift ser ut som følger:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

I man-siden finner han følgende forklaringer til to av kolonnene:

RSS  resident set size, the non-swapped physical memory that a task has used (in kiloBytes).
VSZ   virtual memory size of the process ( in kiloBytes).

Ola vil gjerne at både RSS og VSZ feltet skal skrives ut (og ingenting annet) for den prosessen han er interessert i. Han har også hørt at Perl skal være enklere å bruke til dette formålet men har lite erfaring med språket. Lag et script i perl som tar et argument fra brukeren og skriver ut summen av RSS og VSZ feltet for alle prosesser som matcher argumentet, f.eks:

./memwatch.pl firefox
Sum RSS: 51912
Sum VSZ: 137528

c) Ola er mer fornøyd nå med det nye scriptet, men ser fort at det blir brysomt å måtte kjøre scriptet omigjen hele tiden mens han surfer for å se om minnebruken endrer seg over tid. Gi et forslag (helst i form av en kommando eller perl-kode) til hvordan tallene kunne blitt vist kontinuerlig istedefor kun en gang.

d) Etter å ha fulgt med på tallene en stund skjønner Ola at det er litt vanskelig å legge merke til noen trender eller i det hele tatt huske tilbake i tid. Han vil heller ha en grafisk løsning som oppdateres automatisk og lager noen grafer for ham, f.eks på en webside. Kan du foreslå en løsning for Ola? (her trenger du ikke vise kode.)

e) Forklar hvordan det scriptet som allerede er laget kan inngå i en slik grafisk løsning. Du trenger ikke programmere hele løsningen, bare skisser de viktigste delene.

f) Kan du forklare om følgende utsagn er rett eller galt? "VSZ, summert for alle prosesser kan overskride den faktiske mengden RAM som er installert på systemet."

Oppgave 5 - Nettverk (20%)

a) Forklar kort og generelt hva NAT(Network Address Translation) er og hva som var grunnen til at NAT ble laget.

\includegraphics[width=17cm]{enNatNet.eps}

b) På NAT-gatewayen i figuren over, som kjører Ubuntu Linux, utføres følgende iptables-kommando:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Forklar kort hva hvert ledd i kommandoen betyr og hva som oppnås med dette. Hva slags NAT er dette?

c) Anta at en web-browser på en Linux-boks med IP-adresse 158.36.84.110 prøver å koble seg til web-serveren på 128.39.89.9. Figuren under viser en illustrasjon av den aller første TCP-pakken som sendes i opprettelsen av denne TCP-forbindelsen(du kan anta at et eventuelt DNS-oppsalg er avsluttet). På vei til målet vil denne pakken som du ser sendes over tre nettverksforbindelser. I den første delen av reisen, mellom 158.36.84.110 og gateway A 158.36.84.53, er verdien for noen av feltene skrevet inn. Fullfør dette og skriv inn verdiene for alle felt på veien til 128.39.89.9. Ethernet/MAC-adressene er forkortet slik at det skal bli mindre å skrive. For eksempel er MACgb0 bare en forkortelse for 00:16:3e:51:01:6a. Det som skal fylles ut er IP-adresse, portnummer og MAC-adresse for både avsender og mottager. Det nederste feltet i boksene skal inneholde TCP-flagg som er satt. SYN-flagget er som du ser satt i den første pakken.

\includegraphics[width=16cm]{net.eps}

d) Som svar på pakken i forrige spørsmål, sendes det en pakke fra 128.39.89.9 tilbake til 158.36.84.110. Fyll ut alle de tomme feltene for tilbaketuren også.

e) Anta at Gateway A endres til en NAT-gateway slik at IP-adressene blir som i figuren i delspørsmål b). 158.36.84.110 endres til 10.0.0.2 og gateway A sin IP-adresse 158.36.84.53 endres til 10.0.0.1. Forklar hvilke endringer dette vil medføre for header-feltene du skrev ned i delspørsmål c) og d). Du skal altså forklare hvordan header-feltene i figuren i delspørsmål c) og d) endres når trafikken går gjennom en NAT-gateway istedet for en vanlig gateway. Anta at alt annet er uendret.

-SLUTT-



haugerud 2011-05-12