Stżrikerfi I
09.12.41
Lokapróf 17. desember 1994
Leyfileg hjįlpargögn: Kennslubękur og fyrirlestranótur
1. [10%] Haršur diskur hefur 1152 spor (tracks), 28 geira (sectors)
meš 512 bęti į geira. Auk žess er hęgt aš lesa 448KB af disknum įn žess
aš hreyfa leshausana.
a) Hver er fjöldi hliša ķ žessum harša diski og hvert er
heildargeymslumagn hans?
b) Hver eru nešri mörk į žeim tķma sem tęki aš lesa allan diskinn
sem lżst er hér aš ofan ef hann snżst į 3600 sn/mķn? En ef snśningshrašinn
vęri 5400 sn/mķn?
c) 12 ms er algengur mešalleitartķmi į 3600 sn/mķn diski. Hver vęri
sambęrilegur leitartķmi į 5400 sn/mķn diski, ef ekkert annaš snśningshrašinn
breytist? (Rökstyšjiš!)
2. [15%] a) Viš höfum 8 bita stök sem viš viljum nota undir
2's complement heiltölur kódašar meš Endurbęttri Hamming kódun. Į hvaša
bili eru žęr tölur sem viš getum kódaš žannig? Sżniš hvernig talan -3 er
kóduš.
b) Viš höfum 16 bita stök sem viš viljum nota undir fleytitölur
kódašar meš Endurbęttri Hamming kódun. Stingiš uppį skiptingu žeirra
bita, sem ekki eru notašir sem varbitar, upp ķ formerkisbita, veldi og
brot, žannig aš fleytitalan hegši sér eins og IEEE fleytitala. Eina
skilyršiš er aš fleytitalan hafi tveggja tugastafa nįkvęmni
(t.d. 9.9 <> 9.8). Hver er stęrsta og minnsta stašlaša talan sem
žiš getiš tįknaš?
3. [10%] Gjörvaframleišandi nokkur višurkennir aš sumar reikniašgeršir
meš 64 bita fleytitölur vinna ekki rétt. Nešri 32 bitarnir ruglast og žaš
eru ašeins efstu 32 bitarnir ķ śtkomunni sem eru réttir. Śtskżriš įhrif
villunar:
i) Hver eru įhrifin į nįkvęmni fleytitalnanna (ž.e. hver er nś
nįkvęmnin ķ tugabrotum)?
ii) Hvaš meš stęrstu og minnstu tįknanlegar tölur, breytist žaš
eitthvaš?
iii) Einhver önnur gildi sem villan hefur įhrif į?
4. [10%] Śtskżriš hvaš gerist ķ eftirfarandi 8086-smalamįlsbśtum.
mov cl, 0 mov cx, ax
lyk: mov bx, ax upp: shr ax, 1
cmp bx, -1 cmp ax, 0
je ut je ut
inc bx sub cx, ax
or ax, bx jmp upp
inc cl ut:
jmp lyk
ut:
Bśtur I Bśtur II
--------- ----------
Hvaša gildi hafa gistun ax og cx žegar lykkjurnar hętta? Beriš saman
ašferširnar sem notašar eru ķ bśtunum tveimur.
5. [20%] Skrifiš 8086-smalamįlsstef sem er kallanlegt śr Borland
C++ til aš jafna śt (smooth) gildi ķ vektor. Ef vektorinn er int A[MAX],
žį er formślan er eftirfarandi
A[i] = (A[i-1] + A[i] + A[i+1])/3.
Athugiš aš vektorgildin hęgra megin eru upphaflegu gildin ķ
vektornum. Til dęmis er A[i-1] ekki žaš gildi sem var reiknaš
śt ķ sķšustu ķtrun (ef viš teljum uppį viš). Stefiš fęr inn bendi (SEGM og
OFFSET) į vektorinn A, lengd hans n, og tvö jašargildi, annaš fyrir A[-1],
en hitt fyrir A[n]. Skķrgreining stefsins ķ C++ vęri
void jafna(int *A, unsigned int n, int upph_gildi, int loka_gildi);
Stefiš veršur aš vera kallanlegt śr C++, žannig aš žiš megiš ekki nota
neinar vķšvęrar breytur og ef žiš žurfiš stašvęrar breytur
žį śthlutiš žiš žeim plįssi į staflanum. Ręšiš ašferšir til aš sleppa viš
aš nota deilingu ķ stefinu.
6. [10%] Sumir RISC gjörvar geyma ķ eins konar skyndiminni sķšustu
skilyrtu hoppskipanir sem voru framkvęmdar og teljara fyrir hversu oft
hoppiš var tekiš į móti žvķ hve oft žaš var ekki tekiš. Žetta er sķšan
notaš til aš giska į hvort hoppiš verši tekiš ķ nęsta sinn sem skipunin er
framkvęmd (kallaš "dynamic branch prediction").
i) Segiš frį kostum og göllum žess aš halda svona bókhald.
ii) Nefniš a.m.k. tvęr ašrar leišir til aš giska į hvort skilyrt
hopp verši tekin og beriš žęr saman viš ofangreinda ašferš.
7. [10%] Žżšiš nešangreindan forritsbśt yfir ķ HP PA-RISC kóda.
s = 0
for (i=1; i<=K; i++)
s += 2*i;
Žiš fįiš ekki fullt fyrir dęmiš nema lykkjan sé žrjįr PA-RISC skipanir.
Fjórar skipanir gefa 6 punkta (af 10) og fleiri skipanir hlutfallslega
fęrri punkta.
8. [15%] Hverjir af nešangreindum möguleikum (a eša b)
eru betri meš tilliti til skyndiminnis. Rökstyšjiš.
i) a) for (i=0; i<10000; i++) b) for (j=0; j<10000; j++)
for (j=0; j<10000; j++) for (i=0; i<10000; i++)
A[i][j] = 2*A[i][j]; A[i][j] = 2*A[i][j];
-------------
ii) a) int gildi[MAX]; b) struct stak {
int lykill[MAX]; int gildi;
int lykill;
};
struct stak S[MAX];
-------------
iii) a) for (i=0; i<N; i++) b) for (i=0; i<N; i++)
for (j=0; j<N; j++) for (j=0; j<N; j++)
A[i][j] = 1/B[i][j]; {
A[i][j] = 1/B[i][j];
for (i=0; i<N; i++) C[i][j] += A[i][j];
for (j=0; j<N; j++) }
C[i][j] += A[i][j];