Oppgave 1 - Linux kommandolinje (%)

Like dokumenter
Eksamensinformasjon. Linux kommandolinje. Linux kommandolinje. Eksamensinformasjon. Fakultet: Teknologi, kunst og design. Tid: 3 t.

Oppgave 1 - Java og prosesser (20%)

Eksempler på ikke-blokkerende systemkall:

Singletasking OS. Device minne Skjerm minne. Brukerprogram. Brukerdata/heap. Stack. Basis for flerprosess-systemer.

Innhold. 2 Kompilatorer. 3 Datamaskiner og tallsystemer. 4 Oppsummering. 1 Skjerm (monitor) 2 Hovedkort (motherboard) 3 Prosessor (CPU)

P1 P2 P3 P1 P2 P3 P1 P2. OS gjør Contex Switch fra P1 til P2

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Operativsystemer og nettverk Løsningsforslag til eksamen Oppgave 1. a) Linux-kommando: java Beregn & b) Shellprogram:

Eksamensinformasjon. Prosesser. Prosesser. Eksamensoppgave. Operativsystemer (DATS/ITPE2500) Bokmål 06. juni 2017 kl

Løsningsforslag til eksamen 24. november 2015

Operativsystemer og nettverk

EKSAMEN. Operativsystemer og nettverk

Hvordan en prosessor arbeider, del 1

EKSAMEN Innføring i Linux

faks: Avdeling for Ingeniørutdanning. Cart Aælersgate Oslo - tlf 05. iu@hio.no

Høgskoleni Østfold. Ny/utsatt EKSAMEN

Concurrency. Lars Vidar Magnusson. September 20, Lars Vidar Magnusson () Forelesning i Operativsystemer September 20, / 17

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Lynkurs i shellprogrammering under Linux

Seksjon 1. INF2270-V16 Forside. Eksamen INF2270. Dato 1. juni 2016 Tid Alle trykte og skrevne hjelpemidler, og en kalkulator, er tillatt.

Betinget eksekvering og logiske tester i shell

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Intel Core i7. Omid Mirmotahari 4

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Fakultet for informasjonsteknologi, Oppgave 1 Flervalgsspørsmål ( multiple choice ) 15 %

Programmeringsspråket C Del 3

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

oppgavesett 4 INF1060 H15 Øystein Dale Hans Petter Taugbøl Kragset September 22, 2015 Institutt for informatikk, UiO

IN1020. Datamaskinarkitektur

Intel Core i7. Omid Mirmotahari 4

Scheduling og prosesshåndtering

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Informasjon Eksamen i IN1000 høsten 2017

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

Introduksjon til DARK assembly

Programmeringsspråket C Del 3

Tildeling av minne til prosesser

Programmeringsspråket C Del 3

-/tmp med navn på alle kataloger og filer etter at disse

HØGSKOLEN I SØR-TRØNDELAG

Definisjon av prosess

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

EKSAMEN. Operativsystemer. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene.

Emnekode: SO135A Dato: onsdag 25. feb. I Antall oppgaver: 4

HØGSKOLEN I SØR-TRØNDELAG

Prøve- EKSAMEN. Operativsystemer med Linux

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

HØGSKOLEN I SØR-TRØNDELAG

Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014

En oppsummering (og litt som står igjen)

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Minnehåndtering i operativsystemer

Løsningsforslag til eksamen i INF2270

Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer

Løsningsforslag til eksamen i IN 147(A)

Eksamen INF2270 våren 2018

Dagens tema. Rask-maskinen. Rasko-kode Raskas-kode. Litt datamaskinhistorie Registre og lagre Instruksjoner

Minnehåndtering i operativsystemer

En overikt. Dagens tema. Datamaskinenes historie. Rask-maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner. Rasko-kode.

TDT4258 Eksamen vår 2013

Prosesstabeller (PCB - Prosess Control Block) Se på PD: kommandoene ps og top Bakgrunnsprosesser Opprettelse av prosesser:

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

Velkommen til INF2100 Jeg er Dag Langmyhr

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

Mer om C programmering og cuncurrency

Programmeringsspråket C Del 3

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

En prosess kan sees på som et stykke arbeid som skal utføres på datamaskinen. Ofte vil det være flere prosesser/tråder på datamaskinen samtidig.

Generell informasjon

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Ny EKSAMEN. Operativsystemer og nettverk

Eksamen DAT 103. Oppgave 2. Kandidatnr.: 145 1) B 2) B 3) A 4) A 5) D 6) C 7) B 8) A 9) A 10) D

Dagens tema. Datamaskinenes historie. De første moderne datamaskiner. Løsning. Menneskene har alltid prøvd å lage maskiner for å løse sine problemer.

UNIVERSITETET I OSLO

IN 147 Program og maskinvare

Kap. 8 del 1 kodegenerering INF5110 Vår2007

HØGSKOLEN I SØR-TRØNDELAG

Løsningsforslag til eksamen i INF2270

Operativsystemer og grensesnitt

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

UNIVERSITETET I OSLO

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Informasjon Prøveeksamen i IN1000 høsten 2018

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Intro Rask kode x86-op Optimalisering Inline-kode Konklusjon

Nyttige Linux-kommandoer. Hvordan du kan jobbe mer effektivt Dag Langmyhr

Oppgave 1 JK-flip-flop (Total vekt 20%)

1. Profiler og variabler

EKSAMEN. Dato: 7. desember 2016 Eksamenstid: 09:00 13:00

Del 4 Noen spesielle C-elementer

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

INF-5110 Oppgaver kodegenerering etc. INF-5110, vår 2011

Finne ut om en løsning er helt riktig og korrigere ved behov

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Dagens tema. Raskere kode [REB&DRO H kap 5]

Dagens tema: 12 gode råd for en kompilatorskriver

Transkript:

Løsningsforslag Eksamen høst 2017 Operativsystemer Oppgave 1 - Linux kommandolinje (%) a) pwd b) ps Oppgave 2 - Bash-scripting (%) a) ping -i 5 www.hin.no b) ping -c 1 www.hin.no ping -c 1 -t 1 www.hin.no d) ping -c 1 -t 1 www.hin.no grep "Time to live exceeded" e) ping -c 1 -t 2 www.hin.no grep "Time to live exceeded" 1

f) #! /bin/bash ttl=1 host=$1 while [ "true" ] do res=$(ping -c 1 -t $ttl $host grep "Time to live exceeded") if [! "$res" ] then echo "Det er $(($ttl - 1)) rutere på vei til $host" exit else echo "$ttl $res" ((ttl++)) fi Oppgave 3 - C og Assembly (%) a) gcc add.c./a.out b) Resultat: 42 1. Tallet 13 legges i RAM som 4 bytes. (på adressen %rbp peker på, minus 8(bytes)) 2. Tallet 29 legges i RAM som 4 bytes. (på adressen %rbp peker på, minus 4) 3. Tallet 29 som ble lagt i ram kopieres til registeret %eax 4. Tallet 29 som ligger i %eax legges til verdien 13 som ligger i RAM på adressen -8(%rbp) Resultatet er tallet 42 som ligger lagret i RAM på adressen -8(%rbp) d) C-instruksjonen leder til de to assembly-instruksjonene movl -4(%rbp), %eax addl %eax, -8(%rbp) Siden det ikke finnes noen X86-instruksjon som legger sammen to tall i RAM, må først ett av tallene legges i et register. Generelt kan en C-instruksjon som her lede til flere Assembly-instruksjoner. Generelt tilsvarer en Assembly-instruksjon en enkelt maskin-instruksjon (men det finnes noen assembly-direktiver som ikke leder direkte til en instruksjon). e) Opsjonen -O optimaliserer koden slik at den blir raskest mulig. Kompilatoren avdekker da at uansett hvordan denne koden kjøres, vil resulatet bli 42, ingen input eller andre forhold kan endre på det. Dermed lager kompilatoren ganske enkelt kode som legger 42 i et register(før tallet skrives ut). Dette er den raskest mulige koden for å gi dette resulatet. Oppgave 4 - Serialisering og Mutex (%) 2

a) Kode som må fullføres uten at andre prosesser bruker samme felles ressurs b) At OS skifter prosess som bruker CPU en Serialisering er nødvendig for at to prosesser ikke skal oppdatere felles data samtidig, noe som kan resultere i galt og utilsiktet sluttresultat. d) I maskinkoden vil ikke disse instruksjonene bli utført med bare en instruksjon, slik som man så i C og Assembly -oppgaven. Anta at operativsystemet switcher fra T0 til T1 etter at T0 har lastet verdiene av felles og tall inn i hvert sitt register og T1 gjør sin oppdatering i timeslicen den har fått. Når T0 så får lov til å fortsette vil den legge sammen de to tallene den opprinnelig hadde lastet inn i registerne og legge resultatet ut i felles. Dermed vil T1 sin oppdatering være forsvunnet. (Hvis maskinkoden blir laget nøyaktig slik som i forrige oppgave, vil ikke problemet oppstå, da variabelen felles oppdateres i en enkelt instruksjon. Men problemet er at det kan variere hvordan kompilatoren velger å lage maskinkoden og den kan velge å først legge begge verdienen inn i registere, eller legge felles til verdien av et lokalt register og etterpå lagre resultatet, hvis det er mest effektivt. Hvis dette er tilfelle, vil problemet over kunne oppstå.) e) Problemet unngås ved at prosessene utelukker hverandre ved å bruke mutex-funksjonene, da serialiseres utføringen av trådene og man er sikker på at en race condition ikke oppstår. Koden for henholdsvis T0 og T1 blir: Get_Mutex(lock); felles = felles + tall; Release_Mutex(lock); Get_Mutex(lock); felles = felles - tall; Release_Mutex(lock); f) Koden for trådene er som i forrige deloppgave, bortsett fra at T0, som har pid = 0, kaller funksjonene med argumentet 0 og T1 kaller dem med argumentet 1. Hvis T0 kaller Get_Mutex(0) og turn = 1, betyr det at det er T1 sin tur til å ha tilgang til felles og T0 må vente til T1 er ferdig og har utført instruksjonen turn = 1-1 slik at det blir T0 sin tur. Uansett når prosessene blir avbrutt av en context switch, vil kun en av dem ha tilgang til felles, fordi turn settes etter at den kritiske fasen er avsluttet. Mutex-prosedyrene inneholder en venteløkke som kaster bort CPU tid på ikke gjøre noe. Men venteløkke har f. eks. Peterson algoritmen også; den største ulempen med implementasjonen er at hvis en av trådene gjør seg fort ferdig med det kritiske avsnittet, må den alltid vente til den andre prosessen har vært inne i kritisk avsnitt, før den kan aksessere felles igjen. Og det gjør denne implementasjonen ubrukelig i de fleste tilfeller. Oppgave 5 - Powershell (%) a) I PowerShell sendes hele objekter med metoder og egenskaper. b) (ls dok.pdf).name 3

d) $dir = "C:\pdf" if(! (test-path $dir)){ mkdir $dir foreach ($fil in ls -r C:\){ if($fil.extension -eq ".pdf"){ $m = $fil.creationtime.month $y = $fil.creationtime.year $d = "$dir\y$y\m$m" if(! (test-path $d)){ mkdir $d cp $fil.fullname $d Oppgave 6 - Internminne (%) a) At det tar like lang tid å hente en byte fra hvor som helst i minnet. b) Ja, det vil da gå mye hurtigere å hente et byte som ligger i cache en om det ligger i RAM fordi cacheminnet er raskere og nærmere CPU. Den vil bestå av 5000x5000x4 byte = 100 Megabyte. Mega betyr da en million i SI-betydningen (= 95.37 MebiByte). d) Hele arrayet vil kunne være i minnet på en gang når programmet kjøres, så paging er ikke en faktor her. Uten cache ville da programmet gå like fort i begge tilfeller, siden det ville ta like lang tid å hente hvert matriseelement. Men i det første tilfellet ser man at arrayet skrives til i samme rekkefølge som det ligger 4

lagret i RAM. Dermed vil det skrives fortløpende til bytes etterhverandre i cache som så legges samlet ut i minnet. Dette går mye raskeren enn i program to hvor det er 20000 byte mellom hvert matrise element som skrives til. Dermed vil det stort sett bare bli cache-miss og det går totalt sett mye lengre tid å skrive til minnet. 5