Eksamen våren 2012 Operativsystemer
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 - Prosesser (10%)

a) Om man kopierer et C-program kompilert på en x86-basert Linux maskin til en x86-basert Mac OS X, vil da programmet kunne kjøre? Forklar kort.

b) En prosess bruker ca 5 minutter på å beregne et regnestykke. Hvis to slike prosesser kjører samtidig på et multitasking OS med én CPU, hvor lang tid vil det omtrent ta? Forklar kort.

c) Hvorfor kan ikke et OS generelt sett utnytte en dual core CPU ved å la en vanlig sekvensiell prosess kjøre på to CPUer? Forklar kort.

d) En sekvensiell 100% CPU-intensiv regnejobb bruker 8 minutter på en dual core CPU. Hvor lang tid tar det hvis fem slike program startes samtidig på samme maskin? Forklar kort.

e) En sekvensiell 100% CPU-intensiv regnejobb tar 10 minutter på en dual core hyperthreading CPU. Hvor lang tid tar fire slik jobber kjørt samtidig på samme system? Forklar kort.

Oppgave 2 - Kode og maskinkode (15%)

a) Hva er det binæret tallet 101010 i titallsystemet? Forklar kort.

b) Hva er det største tallet man kan lagre i et 8 bits register? Forklar kort.

Ta nå utgangspunkt i den lille 4-bits maskinen som det ble kjørt en simulering av på forelesning og som ble brukt i ukeoppgavene. Tabellen nedenfor viser hva maskinkode for denne CPU'en betyr.

binært Nr operand1 operand2 Nr Navn
0010 DR tall 2 MOVI
0100 DR SR 4 ADD
1100 DR SR 12 CMP
1111 nr nr 15 JNE


c) Hva betyr maskinkoden 01000001? Forklar det gjerne med assemblykode for denne maskinen.

d) Betrakt følgende assemblykode for maskinen:

0 MOVI R0 <- 0 (tallet 0 legges i R0)
1 MOVI R1 <- 1
2 MOVI R2 <- 2
3 ADD R0 <- R0 + R1
4 CMP R0 R2 
5 JNE 3 (Jump Not Equal 3, hopp til linje 3 hvis R0 != R2)
Forklar kort hva som skjer når koden kjøres og hva de tre registerne R0, R1 og R2 inneholder når koden har kjørt ferdig og skal igang med kodelinje 6.

e) Skriv ned høynivåkode med C eller Java-syntaks som kunne gitt tilsvarende assemblykode som vist over om den ble kompilert for denne CPU-arkitekturen. Anta gjerne at registeret R0 tilsvarer variabelen i.

f) For å kunne kjøre koden må CPU'en ha maskinkode. Bruk tabellen ovenfor og oversett hele programmet, linje 0-5 i assemblykoden vist over til maskinkode.

Oppgave 3 - Tråder, synkronisering og internminne (15%)

a) Du lager en java-thread klasse hvor du deklarerer to variabler

static int a; 
int b;
og starter opp tre Java-tråder. Forklar kort hvor mange variabler a og b som det nå vil allokeres plass for i internminnet.

b) Hva skjer om en prosess glemmer å utføre signal på en semafor etter et kritisk avsnitt? Forklar kort.

c) Tenk deg at et Perl program, som kan kjøres samtidig av flere uavhengige brukere, bruker følgende metode for å unngå at to brukere skriver samtidig til en felles fil

`rm /tmp/lockfile`;   # Fjerner /tmp/lockfile
while(-f /tmp/lockfile) {}
# skriver til en felles fil
`touch /tmp/lockfile`;     # Lager /tmp/lockfile
I hvilke tilfeller virker ikke denne metoden? Forklar kort.

d) Et program bruker 512 KByte minne. Page-størrelsen er 4KByte. Hvor mange sider er det i page-tabellen? Forklar kort.

e) CPU utfører en x86-instruksjon som legger sammen tallene i to registere. Vil MMU involveres når denne instruksjonen utføres? Forklar kort.

f) CPU utfører en x86-instruksjon som henter en byte fra RAM og legger den i et register. Vil MMU involveres når denne instruksjonen utføres? Forklar kort.

g) Hva tar lengst tid, en soft miss(TLB miss) eller en hard miss(page fault)? Er forskjellen i tid det tar stor? Forklar kort.

h) Et program kjører og bruker aktivt 512 MByte minne. Hvor i hardware ligger page tabellen når programmet kjører? Ta eventuelt også med steder der deler av den kan ligge. Forklar kort.

Oppgave 4 - Disker og RAID (10%)

a) Forklar kort hva en MB og en MiB er og hvilken av dem som er størst.

Anta nå at du på en datamaskin kjører RAID 4 med fem disker.

b) Forklar kort hvordan de fem diskene brukes for å lagre data.

c) Hvorfor går det raskere å lese en stor fil fra dette RAID'et sammenlignet med om man leste den samme store filen fra en enkelt disk?

d) RAID 3 ligner på RAID 4, men størrelssen på stripene er mye mindre. Tenkt deg at en RAID 3 stripe består av bare ett bit og at følgende er lagret på et slikt 5-diskers RAID 3:

disk 1 disk 2 disk 3 disk4 paritets-disk
1 0   0 1
0 1   0 0
1 1   1 1
1 0   1 0
0 0   0 0
1 0   1 1



Som du ser har disk 3 crashet og alle dataene (bit'ene) fra denne disken er borte. Forklar hvorfor RAID'et er redundant og gjenskap dataene som var på disk 3 før den crashet.

Oppgave 5 - Kommandolinjen (20%)

I alle delspørsmål hvor det blir spurt etter kommandoer, skal svaret være en såkalt one liner(en linje) kommando.

a) Du logger inn på en linux maskin med root brukeren og er den eneste brukeren innlogget. Du starter ett shell og skal vha ps kommandoen liste og sortere alle prosesser som inneholder ordet root.

b) En annen bruker ola logger inn på maskinen og starter en prosess nano root.txt, du er fortsatt logget inn som root i shellet og skal nå liste alle prosesser eid av din(root) bruker.

c) Hva gjør følgende bash script?

for mappe in $(find . -type d)
do
    echo -e "$mappe er en mappe \n"
done

d) Kommandoen du -b(disk usage) i linux lister fil/mappe størrelser i byte i første kolonne. Sett sammen linux kommandoer for å soretere numerisk og i omvendt rekkefølge og velge de 5 første/største filene/mappene under mappen /var/log/ ,med største filen først, slik at utskriften ser slik ut

12809566	/var/log/daemon.log 
9534984	/var/log/daemon.log.1 
2414142	/var/log/syslog.1 
1297796	/var/log/kern.log.1 
1017708	/var/log/messages.1

e) Gjør det samme som i oppgave d) i powershell for mappen C:\windows slik at utskriften blir

 Length Name 
 ------ ---- 
2870272 explorer.exe 
1567761 WindowsUpdate.log 
 733696 HelpPane.exe 
 427008 regedit.exe 
 316640 WMSysPr9.prx
tips:ls, sort, select og format bør brukes.

f) I Linux er ls, cd, uname, mv osv kalt kommandoer og disse returnerer utskrift i form av ren tekst, Hva kalles operajoner man utfører i Powershell, get-help, set-location osv og hva returnerer disse ?

Oppgave 6 - Scripting (10%)

a) Lag et 'Hello World' script i bash, perl og powershell. Scriptene skal skrive Hello World ut på skjermen.

b) Lag et bash script som lister de fem største filene/mappene i mappen den kjører fra pluss alle undermapper. Vi antar at ingen mappenavn har mellomrom eller andre kontrolltegn i navnet. Hint: se oppgave 5c) og 5d).

Oppgave 7 - Perl-scripting (20%)

For ikke så lenge siden ble Høgskolen i Oslo og Høgskolen i Akershus slått sammen. Du som en del av IT teamet på det nye Høgskolen i Oslo og Akershus har fått en liste over Akershus sine brukere som de vil skal få tilgang til Oslo sine systemer. Du har fått i oppgave å lage et perl script for å generere disse brukerne på linux systemer. Brukerfilen er en ren tekst fil og inneholder brukere og deres passord i kryptert form. Scriptet skal få navnet på denne filen fra et argument som sendes med når scriptet kjøres.

User,Passwd 
s9999,EoTF//DYn6Qb6 
s12345,LusiG1Q3P9TUo 
mroot,P0QT9HrhSI5.c 
s98765,nmt/bc7/KJRYA
Scriptet skal gjøre følgende:
  1. Avbryte dersom brukeren scriptet kjøres som ikke har root rettigheter.
  2. Avbryte dersom det ikke er gitt AKKURAT ett argument fra kommandolinjen.
  3. Avbryte dersom filen fra argumentet ikke ser ut til å være en tekst fil og hvis filen ikke kan åpnes.
  4. Lese filen linje for linje, hoppe over første linje, splitte og opprette brukere dersom brukeren ikke finnes fra før.
  5. Oppdatere variabler som holder orden på hvor mange brukere ble opprettet eller hvor mange feilet. Med variabler som inneholder deres brukernavn.
  6. Skrive ut en logg fil (./users.log) med informasjon om hvor mange brukere ble opprettet og deres brukernavn også de som allerede eksisterte og deres brukernavn.
For dette scriptet er use strict valgfritt. Og for å opprette brukere kan følgende linux kommando brukes:
/usr/sbin/useradd -m -g 100 s99999 -p EoTF//DYn6Qb6
Loggfilen kan feks se slik ut:
Logg over opprettede brukere 
s9999 brukeren opprettet 
s12345 brukeren opprettet 
s98765 brukeren opprettet 
3 bruker(e) opprettet 
Logg over brukere som ikke kunne opprettes 
mroot kunne ikke opprettes
1 bruker(e) kunne ikke opprettes

-SLUTT-



haugerud 2012-06-29