Eksamen høsten 2011 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 - Java og prosesser (20%)

a) På en Linux host har du et java-program Arr.java som du ønsker å kjøre. Gi kommandoer som kompilerer og kjører dette programmet fra et bash-shell. Forklar kort hva kommandoene gjør og eventuelt hvilke filer som lages og hva de inneholder.

b) Denne Linux maskinen har to hyperthreading CPU'er og du kjører java-programmet med

$ time java Arr
Real:3.325 User:3.288 System:0.012 99.25%
Forklar kort kommandoen som kjøres og hva output betyr.

c) Du utfører en ny kjøring med kommandoen

$ for i in $(seq 1 2); do time java Arr& done
Forklar kort hva du oppnår med å kjøre denne kommandoen.

d) Java-programmet Arr.java endrer hele tiden på verdier i ett array arr[100]. Den vesentligste delen av programmet ser slik ut:

tall = arr[i];
arr[i] = arr[j];
arr[j] = tall;
der i og j er to heltall som blir valgt tilfeldig fra 0 til 99. Output fra kjøringen av kommandoen i forrige delspørsmål blir:
$ for i in $(seq 1 2); do time java Arr& done
Real:3.312 User:3.272 System:0.020 99.41%
Real:3.364 User:3.296 System:0.012 98.32%
Forklar kort tidsbruken sammenlignet med den første kjøringen utifra det du vet om Linux-hosten.

e) Neste kjøring av Java-programmet gir følgende:

$ for i in $(seq 1 4); do time java Arr& done
Real:4.954 User:4.908 System:0.032 99.71%
Real:4.956 User:4.920 System:0.024 99.77%
Real:4.995 User:4.920 System:0.020 98.91%
Real:5.128 User:5.060 System:0.028 99.22%
Forklar kort tidsbruken sammenlignet med de første kjøringene utifra det du vet om Linux-hosten.

f) Hva vil du forvente skjer og du får som output om du kjører følgende kommando?

$ for i in $(seq 1 8); do time java Arr& done
Forklar kort.

Oppgave 2 - Internminne (25%)

a) Hvis page-størrelsen er 2KByte, hvor mange sider består en prosess som totalt bruker 11 KByte minne av?

b) Vil antall sider for en prosess kunne minke mens den kjører? Forklar kort.

c) Hva er en dirty page? Finnes det en type sider for en prosess som aldri blir dirty? Forklar kort.

d) Hva er en page table entry og hva er det viktigste feltet i den?

e) En page table entry inneholder et Referenced bit. Forklar kort hva dette bit'et brukes til.

f) I en TLB entry finnes det ikke noe Referenced bit. Forklar kort hvorfor dette ikke finnes.

g) Hva står RAM for? Forklar kort betydningen av dette begrepet.

h) Mange datamaskiner har et hurtigere cache-minne mellom CPU og RAM. Vil det kunne føre til at det er forskjell i hvor lang tid det tar for CPU å hente inn to forskjellige bytes fra RAM til registerne i CPU'en? Forklar kort.

En matrise, også kalt et todimensjonalt array, er et sett av elementer ordnet i rader og kolonner. For eksempel kan en 2x2 matrise A[2][2] defineres i et C-program og den vil da ha 2x2 elementer: A[0][0], A[0][1], A[1][0] og A[1][1]. Når disse elementene lagres i RAM, lagres de etterhverandre som vist i eksempelet. I en 3x3 matrise lagres først A[0][0], A[0][1] og A[0][2] etterhverandre, så A[1][0], A[1][1] og så videre.

i) Et C-program definerer en heltalls-matrise med int mat[5000][5000];. Hvis et heltall (integer, int) bruker 4 byte lagringsplass, hvor mange Megabyte består denne matrisen av?

j) På en maskin med 2 GByte RAM har man følgende C-program:

int mat[5000][5000];

for(i = 0;i < 5000;i++){
      for(j = 0;j < 5000;j++){
              mat[i][j] = 5;
      }
}
Programmet kompileres og kjøres:
$ time a.out
Real:0.113 User:0.020 System:0.092 99.39%
Så endres kun èn linje i programmet, linjen der matriseverdier legges inn endres til mat[j][i] = 5;. Når programmet så kompileres og kjøres, tar det nesten tre ganger så lang tid å kjøre det:
$ time a.out
Real:0.303 User:0.216 System:0.084 98.95%
Hvordan kan dette forklares?

Oppgave 3 - bash (10%)

a) Skriv et bash-script som ved hjelp av en løkke skriver ut følgende:

Linje 2
Linje 4
Linje 6
Linje 8

b) Forklar med egne ord hva som skjer når du kjører dette scriptet. Gi en forklaring som forteller i store trekk hva som oppnås ved å kjøre scriptet.

#! /bin/bash
lineNR=$1
cp ~/.ssh/known_hosts ~/tmpssh
echo "" > ~/.ssh/known_hosts

cat ~/tmpssh |
while read line
do
 ((c = c + 1))
 if [ $c != $lineNR ]; then
    echo "$c $line" >> ~/.ssh/known_hosts
 fi
done

Oppgave 4 - Perl (20%)

a) Skriv et perl-script som gjør det samme som i bash-scriptet i forrige oppgave. Scriptet skal altså ved hjelp av en løkke skriver ut følgende:

Linje 2
Linje 4
Linje 6
Linje 8

b) Under ser du utdrag fra to ulike perl-script, script1.pl og script2.pl, som begge åpner tekstfilen "syslog.txt". Tekstfilen inneholder følgende linjer:

# Error logs: 
Error1: Invalid password for user haugerud;
Error2: Invalid password for user haugerud;
Error3: Invalid password for user haugerud;
Error4: Account locked for user haugerud;
Sammenlikne nå scriptene nedenfor og forklar, så detaljert du kan, hva de gjør. Skriv også ut det scriptene vil printe ut:
# script1.pl
open(F1, "syslog.txt");
@f1=<F1>;
for($i=0; $i<= $#f1; $i++){
       print "$i $f1[$i]";
}
# script2.pl
open(F1, "syslog.txt");
<F1>;
$line=<F1>;
foreach (<F1>){
        print $_;
}

c) Skriv et script, enum.pl, som leser inn sin egen kildekode, linje for linje, og som legger inn hver linje i en hash. Nøkkel i hashen skal være linjenummer og verdi selve linjen. Når innlesingen er ferdig skal innholdet av hashen skrives ut. Både nøkkel og verdi skal skrives ut, adskilt med kolon.

Oppgave 5 - Powershell (10%)

a) Skriv et powershell-script som gir samme output som perl-scriptet i forrige oppgave. Scriptet skal altså ved hjelp av en løkke skriver ut følgende:

Linje 2
Linje 4
Linje 6
Linje 8

b) Skriv et powershell-script som krever to argumenter. Scriptet skal skrive ut teksten "Powershell er x ganger bedre enn cmd! ", der x er et tall, som er regnet ut ved å legge sammen argument 1 og argument 2.

c) Følgende kommando gir størrelsen på filen "test.txt" i antall bytes:

(ls test.txt).Length
Følgende kommando gir nøyaktig samme output:
(ls test.txt).get_Length();
Forklar forskjellen på disse kommandoene.

d) Ville det gi mening å kjøre tilsvarende kommandoer i bash? Forklar.

Oppgave 6 - Nettverk (15%)

a) Forklar kort forskjellen på en offentlig og en privat IP-adresse.

b) Hvor mange IP-adresser er det i et subnet med netmask 255.255.255.128? Forklar kort.

c) Gitt følgende fra en Linux-host:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1a:a0:a5:f1:b6  
          inet addr:128.39.89.9  Bcast:128.39.89.255  Mask:255.255.255.0
Hvilke adresser utgjør subnettet denne maskinen er en del av? Forklar kort.

d) Samme maskin pinger 128.39.74.65 og 128.39.89.10, men etterpå finnes bare sistnevnte i arp-tabellen:

 
$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
128.39.89.1              ether   00:12:44:81:88:00   C                     eth0
128.39.89.10             ether   00:25:64:b3:6c:41   C                     eth0
Forklar kort hvorfor ikke begge er der.

e) Forklar kort hvilke verdier bit'ene SYN og ACK har i pakkene som utgjør en three-way handshake. I hvilken del av pakkene sitter disse bit'ene?

-SLUTT-



haugerud 2013-05-28