Stżrikerfi I
09.12.41
Lokapróf 18. desember 1996
Öll skrifleg hjįlpargögn leyfileg.
1. [10%] Fyrirtęki nokkurt framleišir hylki sem eiga aš taka viš af disklingurm. Hvert
hylki inniheldur tvęr plötur og getur geymt 1GB. Snśningshrašinn er 5400 sn/mķn og gefiš er
upp aš hęgt sé aš lesa allt aš 10MB/sek. ķ stuttan tķma.
- a) Hvaš segir žetta okkur um gagnamagn į hverjum sķvalningi (cylinder) og hversu margir
eru sķvalningarnir? (Fjöldi sķvalninga er jafn fjölda spora į hverri plötu).
- b) Nś er lķka gefiš upp aš hįmarksleshraši ķ lengri tķma er 6.6MB/sek. Hvaš segir žaš
okkur um fęrslutķma milli ašliggjandi spora og hver er mešalleitartķmi hylkisins?
2. [10%] Žokkalegur geislaprentari prentar 300 dpi (dots per inch). Hversu mikiš
skjįminni žarf til aš fį sömu upplausn į 15 tommu tölvuskjį (ž.e. 9 x 12 samkv. Pythagoras),
i) fyrir 256 liti eša ii) fyrir 24 bita lit? Ef uppfęrsluhrašinn (refresh rate)
er 75 Hz, hversu mikill er gagnaflutningshrašinn śr skjįminninu (fyrir bįšar litagerširnar)?
3. [10%] Skošiš C forritsbśtinn hér aš nešan:
float x = 0.1;
double y = 0.1;
if ( x == y )
/* A */
else
/* B */
Hvaša nišurstöšu hefur samanburšurinn ķ if-setningunni? Hvers vegna? Skiptir mįli hvort
viš notum annan fasta, t.d. 0.5 ķ breytunum x og y?
4. [20%] Žiš eigiš aš skrifa quicksort stef ķ 8086 smalamįli, kallanlegt śr Borland C++.
Hér aš nešan er qsort stefiš ķ C++. Žiš megiš gera rįš fyrir aš stefiš split sé til og aš žaš
hafi veriš skrifaš ķ Borland C++.
// Notkun: split(f, a, b, k);
// Fyrir: f[a..b-1] er svęši ķ f
// Eftir: f[a..k-1] < p og f[k..b-1] ³ p, meš f[k] = p, žar
// sem p er upphaflega f[a]
void split( int f[], int a, int b, int& k );
// Notkun: qsort(f, a, b);
// Fyrir: f[a..b-1] er svęši ķ f
// Eftir: Bśiš aš raša f[a..b-1] ķ vaxandi röš
void qsort( int f[], int a, int b ) {
int k;
if( b-a < 2 ) return;
split( f, a, b, k );
qsort( f, a, k ); qsort( f, k+1, b );
}
5. [10%] Skošiš eftirfarandi 8086-smalamįlsbśt:
clc
upp: mov ax, [si]
adc [di], ax
inc si
inc si
inc di
inc di
loop upp
Svariš eftirfarnadi spurningum um kódann:
- a) Lżsiš hvaš bśturinn gerir (meš oršum eša saušakóda).
- b) Hvers vegna er skipunin inc notuš til aš hękka si og di, ķ staš žess aš leggja 2 viš
meš skipuninni add?
6. [10%] Segiš hvort eftirfarandi fullyršingar eru sannar eša ósannar. Rökstyšjiš.
Athugiš aš sanngildi fullyršinganna getur fariš eftir žeim forsendum sem žiš gefiš ykkur, žiš
veršiš žvķ aš taka žęr fram.
- a) Ašgangur ķ einstök bęti er hrašvirkari į "big-endian" gjörvum en į "little-endian".
- b) Meiri hrašaaukning gjörva heldur en minnis er helsta įstęšan fyrir minnisstigveldi
(memory hierarchy).
- c) Žaš tekur 5 nanósek. aš framkvęma eina ADD-skipun ķ 200MHz Pentium gjörva.
- d) Endurbęttur Hamming kódi leišréttir ašeins villur ķ gagnabitunum, en ekki ķ varbitunum
sjįlfum.
7. [15%] Žżšiš eftirfarandi forritsbśt ķ C yfir ķ i) 8086 smalamįl og ķ ii) PA-RISC
smalamįl.
switch ( k ) {
case 0: r--; break;
case 1: c++; break;
case 2: r++; break;
case 3: c--;
}
Žiš megiš nota breytunöfnin sem nöfn į gistum ķ PA-RISC forritinu (t.d. %k fyrir k), en veršiš
aš śthluta sjįlf gistum ķ 8086 forritinu. Reyniš aš hafa kódann eins hrašvirkan og mögulegt er
ķ bįšum tilfellum (en aušvitaš fyrst og fremst réttan!).
8. [15%] Tölva hefur tveggja laga skyndiminni. Žaš innra er 16KB meš 128 mengi og 4
lķnur ķ hverju žeirra. Ytra skyndiminniš er 2MB og notar beina vörpun meš lķnustęrš 512
bęti.
- a) Lżsiš skyndiminnunum nįnar og sżniš hvernig tilvķsun ķ vistfangiš 4A68C508 yrši
mešhöndluš ef viš gerum rįš fyrir aš žaš sé hvorki ķ innra né ytra skyndiminni.
- b) Geriš grein fyrir hverskonar minnisašgangur er slęmur (ž.e. kastar śt žeim lķnum sem į
aš nota nęst) fyrir innra skyndiminni og einnig hverskonar ašgangur er slęmur fyrir
ytra skyndiminniš.
- c) Lżsiš gróflega minnisašgangi sem vęri slęmur fyrir bęši innra og ytra skyndiminni. Er
lķklegt aš slķkur ašgangur komi upp, og žį ķ hvernig forritum?