Oppgave 1
a) chmod 644 foto.jpg
b) mv foto.jpg ~/www/foto
c) scp /etc/passwd s123456@nix.iu.hio.no:~
d) ssh nix.iu.hio.no
e) Default sender cat readme.txt
innholdet av filen til STDOUT som vil si terminalvinduet. I den første kommandoen
blir output omdirigert til /dev/null
som er et bunnløst sluk der alt forsvinner og kommandoen resulterer i
at ingenting synlig skjer. Den andre kommandoen gjør at innholdet av filen vises i terminalvinduet.
f) Filen :home:hh:prosjekt
flyttes til katalogen /home/hh/prosjekt
og blir der lagret under
navnet :home:hh:prosjekt
.
g) date +%F_%T -r sendt.log
Oppgave 2
#! /bin/bash cd /root/ftester if [ -f sendt.log ] then $date=`date +%F_%T -r sendt.log` mv sendt.log sendt.log.$date fi date > sendt.log /root/ftester/fsend scp sendt.log root@firewall.iu.hio.no:/root/ftester
a)
#! /bin/bash cd /root/ftester ssh -f server.iu.hio.no /root/ftester/ftaimot /root/firewall.rc if [ -f sendt.log ] then /bin/rm sendt.log fi ssh -f shadowfax.iu.hio.no /root/ftester/frun.bash while [ ! -f sendt.log ] do echo "Venter på at testen skal bli ferdig på shadowfax" sleep 5 done echo "sendt.log mottatt fra shadowfax" scp root@server.iu.hio.no:/root/ftester/mottatt.log . ./freport sendt.log mottatt.log > report.txt
Oppgave 3
a) Siden det er tidkrevende simuleringer, bør man velge et relativt raskt språk med tanke på CPU-intensive oppgaver. Både C og C++ er da gode alternativer. Java er ikke like hurtig, men akseptabelt. Objektorientering er generelt meget nyttig når man programmerer simuleringer, C++ og Java har da et fortrinn i forhold til C. Perl er mindre effektivt i slike sammenhenger, men ikke helt utelukket.
b) For å gjøre en såpass enkel oppgave, kan man bruke cp
og chmod
direkte i et bash-script.
Det finnes også mange andre script-språk som er like enkle. Dette går også helt greit med Perl, men man må skrive
noen få tegn ekstra i forhold til et bash-script, man er ikke like "nær" kommandolinjen. Man kan også skrive C-program som
gjør dette, men det krever litt mer koding og det gir ingen vesentlig tidsgevinst.
c) Til en slik oppgave er Perl ideelt, da det er raskt og enkelt å skrive kode som trekker ut informasjon fra tekstfiler. Det tar mer tid og kode å skrive det samme i C eller Java og tester viser at Perl nesten er på høyde med C's hurtighet når det gjelder å lese og manipulere informasjon i tekstfiler. Det er også mulig å gjøre dette i et scriptspråk som bash, men det vil gå vesentlig saktere enn Perl-programmet.
d) Når et slikt OS fordeler CPU-tid mellom flere samtidige prosesser, lar det hver prosess kjøre en tilmålt timeslice i en Round Robin-kø. Ved å tildele forskjellig størrelse på timeslicene, vil tildelt CPU-tid kunne prioriteres fra mye til lite (det er også mulig å sette opp egne køer for spesielt viktige prosesser, som må kjøre ferdig før andre slipper til).
e) Hvis prosessene bruker semaforen riktig, vil den første prosessen som når det kritiske avsnittet der
den felles variabelen brukes, redusere semaforens verdi fra 1 til 0 og gå inn i kritisk avsnitt. Hvis den avbrytes av
en contextswitch før den er ferdig, vil neste prosess nå sitt kritiske avsnitt. Den senker semaforen til -1, tas ut
av RR-køen og legges i semaforens kø. Slik går det også med neste prosess når den når fram; semaforen senkes da til -2.
Etterhvert som prossessene blir ferdig med kritisk avsnitt, økes semaforen med 1 og neste prosess i køen slipper til. Til
slutt er alle tre ferdige og semaforen får igjen verdien 1. Dette er helt avhengig av at prosessene bruker semaforene
riktig ved å kalle på wait
før kritisk avsnitt og signal
etter kritisk avsnitt.
f) Denne metoden virker aldri, fordi den lager /tmp/lockfile
før den går inn i en evig løkke. Der vil den stå
for alltid, fordi ingen prosess vil komme til kodelinjen der /tmp/lockfile
fjernes. For at dette skulle virke,
måtte filen lages etter while-løkken.
g) Algoritmene sørger for at mutual exclusion blir oppfylt, det er ikke mulig for noen av prosessene å komme samtidig inn i kritisk avsnitt. Men en context switch etter
flag[t] = true;for en prosess blir fatalt hvis den andre prosessen da prøver å gå inn i kritisk avsnitt og også utfører
flag[t] = true;for begge flaggene blir true og begge prosessene blir stående og spinne i while-løkken til evig tid......
Oppgave 4
a)
#! /bin/perl open(NY,"ny.txt"); while($line = <NY>) { addLine($line); } close(NY); sub addLine() { $add = $_[0]; open(DATA,"data.txt"); while($data = <DATA>) { if($data eq $add) { close(DATA); return; } } close(DATA); open(DATA,">>data.txt"); print DATA $add; close(DATA); }
b)
#! /bin/perl use strict; # Variabler må da deklareres med my use IO::Socket::INET; my $DBfile = "PTP.txt"; my $serverPort = 9020; my $socket; # Oppretter nå et socket-objekt $socket = IO::Socket::INET->new(LocalPort => $serverPort, Listen => 5) or die "Can't start tcp-server at port $serverPort ($!)\n"; my $socketConnection; # Koblingen til client my ($answer,$fileString,$line); while ($socketConnection = $socket->accept()) # Venter på tilkobling { my $client = $socketConnection->peerhost(); print "Received connection from $client.\n"; open(DB,$DBfile); while(my $line = <DB>) { print $socketConnection $line; } close(DB); close($socketConnection); # Kobler ned forbindelsen for å vente på en ny print "Connection closed.\n\n"; }