IKandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle ~klarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger Itil grunn for løsningen. Avdeling for Ingeniørutdanning. Cart Aælersgate 30-0254 Oslo - tlf 05. iu@hio.no 22 45 32 00. faks: 22 45 32
Eksamen høst 2004 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. Oppgavene vil ikke bli vektlagt likt ved sensur. En sannsynlig fordeling er at oppgave 1 teller 10%, oppgave 2 teller 30%, oppgave 3 teller 20% og oppgave.4 teller 40%. De som ønsker det kan besvare oppgavene eller deler av oppgavene på engelsk. Sett gjerne egne forutsetninger dersom du synes oppgaveteksten er uklar. Beskriv forutsetningene og løs oppgaven utifra dem. Oppgave 1 I denne oppgaven antas det at man kjører bash på en Linux-maskin. a) Gi en kommando som flytter filen Itmp/fil.txt til katalogen du står i b) Gi en kommando som gir antall linjer i filen /etc/group c) Gitt følgende cube$ cat IQ.txt 134 toreo 78 haugerud 120 sigmunds 112 mark cube$ sort IQ. txt head -n 2 Hva blir output fra sort-kommandoen? d) Forklar kort feilmeldingen fra kommandoen cp: $ vhoami hh $ 18 -l -rv-r--r-- 2hh lhh $ cp til dir cp: cannot cre.te r.gular tile 'dir/fil' 4096 Nov 28 12:16 dir O Nov 28 12:16 til Permission denied e) Kommandosekvensen fortsettes med $ cbmod 200 dir $ la -l d-v :2 l $ cp fil dir cp: cannot stat r dir/fil) hh hh Permiaaion 4096 Nov 28 12:16 dir denied O Nov 28 12:16 fil Forklar kort feilmeldingen fra kommandoen cp. l
f) I fortsettelsen av eksempelet i forrige deloppgave, gi en kommando som setter det minmum av rettigheter katalogen dir må. ha for at cp fil dir skal kunne utføres uten feilmeldinger. g) Studer følgende eksempel: $ 18 -l drvx 2 bh -rv-r--r-- 1 bh -rv-r--r-- 1 bh $ cp fil dir $ cp -p fil. ~xt dir. 18-1 dir -rv"r--r-- 1 bh -rv"r--r-- 1 bh bh bh 4096 Nov 28 12:~ dir O Nov 28 12:16 fil O Nov 28 13:01 f11.txt o Nov 28 13:03 O Nov 28 13:01 til til.txt Forklar ut fra dette kort hva som er forskjellen på kommandoene cp og cp -p. Oppgave 2 Det er lurt å gjøre de./, siste deloppgavene i oppgave 1 før du gjør denne oppgaven. Ofte er det nyttig å ta vare på eldre versjoner av filer, for eksempel et program under utvikling eller loggfiler. Men om man ikke fjerner de eldste versjonene, kan man risikere at disken fylles opp. I denne oppgaven skal du lage et bash-script med navn rotate som skal kopiere en fil (gitt som argument 1) til en katalog (gitt som argument 2). Hvis det fra før ligger en fil med samme navn i denne katalogen (en tidligere versjon) skal det lages en kopi av denne filen med versjonsnummer 1 og eventuelle andre versjoner roteres slik at alle får et høyere versjonsnummer. Inntil 10 gamle versjoner av filen skal lagres. Noen eksempler viser best hvordan scriptet skal virke om man utfører. r~at. fil.txt dir I det siste eksempelet skal fil. txt.10 ikke bevares, slik at det maksimalt skal lagres 10 gamle versjoner Filen som angis i første argument kan være gitt med en path før filnavnet som i. ro~at.. 1~/tll..~G dir Scriptet skal avlutte med en passende feilmelding hvis. det ikke gis to argumenter. noen av argumentene ikke oppfyller de krav som må være oppfylt for at man skal kunne kopiere argument 1 (en fil) til argument 2 (en katalog) 2
Oppgave 3 a) En av fordelene med de nye 64-bits x64 prosessorene og ltanium er at de kan adressere mer RAM. Hvor mange byte internminne kan man maksimalt adressere med et 32-bits adresseregister som de fleste av dagens 32-bits prosessorer har? b) Du kjører Jbuilder og et par andre programmer som krever mye internminne. Når du bruker disse programmene kjører de etterhvert veldig sakte og du hører at harddisken brukes hele tidene, selvom programmene ikke lagrer eller leser filer. Hva kan dette skyldes? Forklar kort. c) Anta at du skal lage et CPU-intensivt program som skal utføre en stor matematisk beregning. Du vurderer å bruke språkene bash, C++, Java og Perl. Ranger antatt hastighet for disse programmene fra 1 til 4 med 1 som hurtigste og 4 som sakteste. d) Anta at du har en Linux og en Windows maskin som kjøer på samme type x86-hardware og en Sun Solarismaskin som kjører på sparc. Alle har installert Java. I følgende tabell er det et kryss i første rute fordi et Java-program kompilert på Windows-maskinen kan kjøres på Windowsmaskinen. Fyll ut tilsvarende der du mener det skal være kryss. e) Anta samme maskiner som i forrige deloppgave, men nå. har a.1l en C-kompilator. Siden et C-program som er kompilert på. Windows-maskinen vil kjøre på. Windows-maskinen, er det fylt ut et kryss i første rute. Fyll ut tilsvarende der du mener det skal være kryss. f) Et brukerprogram kjører under et multitasking OS på en maskin med bare en CPU. I maskinkoden til programmet er det en evig løkke som gjør at den samme koden kjøres om og om igjen. Hvordan sørger OS for at andre prosesser slipper til i CPU-Iøkken? Forklar kort. g) Når et brukerprogram skal lese en fil, må modusbit switches til superusermodus for at kjernekode skal utføres. Anta at dette ble gjort med følgende maskin-instruksjoner i brukerprogrammet: switchtosuperusermodus JMP readfile hvor det i den andre instruksjonen hoppes til kjernekoden. Hva er problemet med denne løsningen og hvordan løses det i moderene OS? Forklar kort. ~
Oppgave 4 a) Lag en Perl subrutine addl1ne() som tar to argumenter. Det første er et filnavn og det andre er en tekststreng. Subrutinene skal åpne filen, legge til tekststrengen på slutten av filen og lukke filen igjen. Hvis det ikke lykkes å åpne filen for skriving, skal den skrive ut en feilmelding om det til STDERR. Du skal bruke use str1ct;. ~)! ~enne ~eloppg~ven skal du skrive klient-delen av et Perl chat-program som skal kunne brukes mellom to vilkarlige UnIX-maskiner på Internett. Koden for server-delen heter server og ser slik ut:.! /b1n/perl us.str1ct; us. IO::Sock.t::INET my $serverport. 9002;.y $socket = ID: : Socket: :INET->nev(LocalPort ->..erverport, Reuse -> l, Listen -> 5) or die "Kan ikke starte chat-server pi port..erverport!\d"; while (my $socketconn8ction a $8ocket->aCc8pt(» { vh1le(my Sline. <SsoctetConnect1on» } addline("/t8p/chat".$line); $socketconnection->clo.a() j Koden for subrutinen addline() er den fra oppgave a) og er tenkt inkludert til slutt i server. Begge de to maskinene det skal chattes mellom skal kjøre en slik server. En typisk chat mellom brukeren haugerud på. host rex og brukeren os på host cube kan se slik ut for haugerud på rex: rex$./servert. rext./client cube haugerudorex> Hei! haugerudorex> Er du der? haugerudorex> OK. Jeg m& stikke haugerudorex> Med qui t haugerudgrex> quit rex$ og for os på host cube cube$./servert; cube$./client rex osgcube> Jada... oagcube> Greit, hvordan avslutter man? osgcube> OK osocube> quit cube$ 4
Begge vil når de starter client få opp et xterm-vindu som fortløpende viser det som begge taster inn slik: haugerudorex> Heil haugerudorex> Er du der? osocube> Jada... haugerudorex> OK. Jeg må stikke. os~cube> Greit, hvordan avslutter man? haugerudorex> Med quit osccube> OK Dette skal gjennomføres ved at programmet client (som du skal skrive) åpner en socket på port 9002 til serveren. Navnet på serveren som client skal koble seg til skal bli gitt som første argument. Deretter sender client hver linje som brukeren taster inn over denne socketen til server. I tillegg skriver client hver linje til filen /tmp/chat med subrutinen addline() fra oppgave a). Ikke skriv inn addline() på nytt. Dette gjør at filen /tmp/chat på begge serverene vil fylles opp med alle linjene som de to brukerene taster inn. De to chat'erne ser alt som skrives inn ved å kjøre kommandoen ta11-f /tmp/chat i et terminalvindu. Da vises linje for linje av det som legges til filen /tmp/chat. Scriptet client skal sørge for følgende:. Bruke use strict; Avslutte med passende melding hvis det ikke blir gitt noe argument. Avslutte med passende melding hvis det ikke lykkes å koble seg til!. argument på portnummer 9002. Gjøre kommandoen xterm -e tail -f /tmp/ chat for å vise det som skrives. Men programmet må først gjøre en fork() og utføre kommandoen i child, ellers vil client henge på denne kommandoen. Lage et prompt bestående av brukernavn og host-navn som hentes dynamisk med Linux-kommandoer eller environment-variabler. Sende hver linje brukeren skriver inn (med promptet lagt til først) over socketen og med addline() til filen /tmp/chat -SL~- Avslutte hvis brukeren skriver en linje som bare inneholder ordet quit og eventuelt blanke, TAB eller lignende før eller etter 5