könnte mir jemand bei diesen aufgaben helfen? erklärungen etc? oder die musterlösung posten?
Existiert ein unmittelbarer ternärer Code mit den Wortlängen 1,2,2,2,2,2,3,3,3,3? Falls ja, konstruieren Sie einen, falls nein, versuchen Sie einen unmittelbaren ternären Code zu finden, indem Sie nur eine Wortlänge verändern.
Welche Anzeigen setzt der Befehl subcc der Sparc V8 für die folgenden Subtraktionen?
0x00000000 - 0xb2d05e00 = 0x4d2fa200
0x00000000 - 0x80000001 = 0x7fffffff
0x00000000 - 0x80000000 = 0x80000000
0x00000000 - 0xfff1236 = 0xf000edca
0x00000000 - 0x7ffffff4 = 0x8000000c
0x80123456 - 0x00000000 = 0x80123456
0x80123456 - 0x00000000 = 0x80123456
0x00000000 - 0xcfffffff = 0x30000001
Bestimmen Sie für die folgende Referenzkette R die Anzahl der Seitenalarme bei Beladys Algorithmus und dem LRU-Verfahren bei einer Größe des Kachelspeichers von 3.
R = a b c d a b b a c e d c a f g a d b c f
Man betrachte eine dreistufige Speicherhierarchie L1-Cache, L2-Cache und Hauptspeicher. Die relativen Zugriffszeiten seien 1, 5, 20.
Berechnen Sie für eine "look-through"-Organisation die mittlere Zugriffszeit bei Trefferquoten von 90%, 98%, 100%.
Die mittlere Zahl ist folgendermaßen zu interpretieren, falls man ein Datum nicht im L1-Cache findet, dann besteht eine Chance von 98%, daß es im L2-Cache liegt.
Betrachten Sie einen direkten Cache mit folgenden Parametern: Hauptspeichergröße = 65.536, Cachegröße = 256, Cacheblockgröße = 8.
In welchen Cacheblöcken werden die Elemente mit den folgenden Adressen gespeichert?
a) 0001 0001 0001 1011
b) 1100 0011 0011 0010
c) 0111 0001 1011 0110
d) 0101 0101 0110 1011
Bestimmen Sie für die folgende Referenzkette R die Anzahl der Seitenalarme bei Beladys Algorithmus und dem LRU-Verfahren bei einer Größe des Kachelspeichers von 3.
R = a b c d a b b a c e d c a f g a d b c f
das kann ich.
belady:
R = a b c *d a b b a *c *e d c *a *f *g a d *b *c *f
1:a a a a a e a a a a c c
2:- b b b c c c f g b b b
3:- - c d d d d d d d d f
wobei das für die letzten drei reine willkür ist. 9BANG [edit](+3
für die ersten drei = 12BANG)[/edit]
lru:
R = a b c *d *a *b b a *c *e *d c *a *f *g a *d *b *c *f
1:a a a d d d c c c c c g g b b b
2:- b b b a a a a d d f f d d d f
3:- - c c c b b e e a a a a a c c
13BANG. [edit](+3
für die ersten drei = 16BANG)[/edit]
merke:belady ist toller, aber leider unmöglich
Zur letzten Aufgabe:
Cacheblockgröße = 8 == 2^3 , also 3 Stellen Versatz
Cachegröße = 256 == 2^8 , also 8 Stellen für den Index
Indextag Index Versatz
a) 0001 0 | 001 0001 1 | 011
=> 35
b) 1100 0 | 011 0011 0 | 010
=> 102
c) 0111 0 | 001 1011 0 | 110
=> 54
d) 0101 0 | 101 0110 1 | 011
=> 173
Man betrachte eine dreistufige Speicherhierarchie L1-Cache, L2-Cache und Hauptspeicher. Die relativen Zugriffszeiten seien 1, 5, 20.
Berechnen Sie für eine "look-through"-Organisation die mittlere Zugriffszeit bei Trefferquoten von 90%, 98%, 100%.
Die mittlere Zahl ist folgendermaßen zu interpretieren, falls man ein Datum nicht im L1-Cache findet, dann besteht eine Chance von 98%, daß es im L2-Cache liegt.
0,9*1+0,1*0,98*6+0,1*0,02*26= 1,54
Cacheblockgröße = 8 == 2^3 , also 3 Stellen Versatz
Cachegröße = 256 == 2^8 , also 8 Stellen für den Index
Indextag Index Versatz
a) 0001 0 | 001 0001 1 | 011
=> 35
b) 1100 0 | 011 0011 0 | 010
=> 102
c) 0111 0 | 001 1011 0 | 110
=> 54
d) 0101 0 | 101 0110 1 | 011
=> 173
^^Falsch, denn der Index sind die letzten 8 Bit (da Hauptspeicher = 256x Cachegröße) und gefragt war nach den Blöcken [evtl. mit assoziativ verwechselt?]. Da der Cache 256 Adressen groß ist und jeder Block 8 Adressen umfasst, ergibt dies 256/8 (= 2^8/2^3 = 2^5) = 32 Blöcke. Ist also nix mit 173 und so.
Mit dem "Versatz" kommt es jedoch hin, denn die letzten 3 Bit sind in über (da diese jeweils innerhalb eines Blockes liegen). Da die 256 Adressen des Cache mit 8 Bit (2^8 = 256)
direkt angesprochen werden können müssen die letzten 8 Bit betrachtet werden (erklärung warum die letzten bei Bedarf). Den Block liest man jetzt so ab:
Indextag Index Versatz
a) 0001 0001 | 0001 1|011
=> 3
b) 1100 0011 | 0011 0|010
=> 12
c) 0111 0001 | 1011 0|110
=> 22
d) 0101 0101 | 0110 1|011
=> 13
Ausserdem wollte ich nochmal loswerden:
@Anonymer User: Es wäre schön, wenn man schon nicht zu den Übungen geht(?!) wenigstens sich das bisschen Mühe macht und die letzten drei Threads mal anschaut! Denn da steht z.B. schon etwas zu
Aufgabe 10 oder auch
Aufgabe 48.
Cacheblockgröße = 8 == 2^3 , also 3 Stellen Versatz
Cachegröße = 256 == 2^8 , also 8 Stellen für den Index
Indextag Index Versatz
a) 0001 0 | 001 0001 1 | 011
=> 35
b) 1100 0 | 011 0011 0 | 010
=> 102
c) 0111 0 | 001 1011 0 | 110
=> 54
d) 0101 0 | 101 0110 1 | 011
=> 173
^^Falsch, denn der Index sind die letzten 8 Bit (da Hauptspeicher = 256x Cachegröße) und gefragt war nach den Blöcken [evtl. mit assoziativ verwechselt?]. Da der Cache 256 Adressen groß ist und jeder Block 8 Adressen umfasst, ergibt dies 256/8 (= 2^8/2^3 = 2^5) = 32 Blöcke. Ist also nix mit 173 und so.
Mit dem "Versatz" kommt es jedoch hin, denn die letzten 3 Bit sind in über (da diese jeweils innerhalb eines Blockes liegen). Da die 256 Adressen des Cache mit 8 Bit (2^8 = 256) direkt angesprochen werden können müssen die letzten 8 Bit betrachtet werden (erklärung warum die letzten bei Bedarf). Den Block liest man jetzt so ab:
Indextag Index Versatz
a) 0001 0001 | 0001 1|011
=> 3
b) 1100 0011 | 0011 0|010
=> 12
c) 0111 0001 | 1011 0|110
=> 22
d) 0101 0101 | 0110 1|011
=> 13
selber falsch
b) 1100 0011 | 0011 0|010
=> ist 6 und nicht 12 nach deiner aussage
Aber der Hauptspeicher hat doch garnix damit zu tun, wo die dinger gespeichert werden.
Ich verstehe die aufgabe so, dass die bitkette schon dem cacheblock zugeordnet ist und man nur ablesen braucht, wo er gespeichert ist. Und unter cachegröße verstehe ich, dass er 256 mal die 8 Bit aufnehmen kann.
Tja wer hat nun recht?
wäre es möglich dies noch näher zu erklären?
wäre es.
belady streicht immer den aus dem cache der in der zukunft am längsten nicht mehr genutzt werden wird.
zb. habe ich a, b und c im cache. als nächstes wird d gebraucht. ich muss also was streichen. in der zukunft wird auf a, b, b, und a zugegriffen (in dieser reihenfolge) die sollte ich also nicht streichen, sondern stattdessen c. das gibt einen cacheinhalt von a, b, d.
lru streicht immer den, der am längsten nicht genutzt wurde. zb. habe ich nach den ersten drei schritten a, b und c im cache. als nächstes wird d gebraucht. vorher wurde in der reihenfolge a, b, c auf die elemente zugegriffen die im cache liegen. am weitesten zurück liegt also a. a wird gestrichen. nun liegen d, b und c im cache.
gefragt war, wie oft es nötig ist auf den hinter dem cache liegenden speicher zuzugreifen. das ist jeweils die summe der *e und die zahl vor dem BANG.
(ausserdem gibt es einen knopf Vorschau und wenn man sich anmeldet kann man sogar seine eigenen beiträge nachträglich ändern)
Aber der Hauptspeicher hat doch garnix damit zu tun, wo die dinger gespeichert werden.
Doch, denn es wird nur der Hauptspeicher addressiert. Der Cache sitzt dazwischen und holt die Daten aus dem Hauptspeicher um sie an den Prozessor weiterzuleiten.
Ich verstehe die aufgabe so, dass die bitkette schon dem cacheblock zugeordnet ist und man nur ablesen braucht, wo er gespeichert ist.
richtig
Und unter cachegröße verstehe ich, dass er 256 mal die 8 Bit aufnehmen kann.
Welche 8 Bit? Unter Cachegröße verstehe ich, dass 256 Adressen (also die Daten die an den Adressen liegen) gespeichert werden können. Da der Hauptspeicher nun 256 mal so groß ist wie der Cache, wiederholt sich die
direkte Addressierung alle 256 Adressen. Deshalb geben die letzten 8 Bit der HS-Adresse die Cache-Adresse an. Da wir nur einen 8er Block haben wollen teilen wir dies durch 8. Ergo die letzten drei Bits weglassen.
Darstellung mit Dezimalzahlen (ohne Blöcke):
Adresse Cache Binäre Anmerkung
0 0 Adr. ist 16 mal 0, Cache ist 8 mal 0
1 1
255 255
256 0 Adr. ist 0000000100000000, Cache ist 8 mal 0
257 1
511 255
512 0
65.535 255 Adr. ist 16 mal 1, Cache ist 8 mal 1
Tja wer hat nun recht?
Ich [15]
Aber b) ist trotzdem falsch
Also ich denke, dass man unter
Cachegröße = 256
verschiedenes verstehen kann. Erstens, dass der Cache 256 Wörter aufnehmen kann und zweitens, dass er 256 Blöcke aufnimmt. In der Übung wurde uns zu der ersten Variante geraten. Dann ist natürlich Looms Lösung richtig.
Ich hab keine Ahnung ob das richtig ist.
kann das bitte jemand kontrollieren, bzw korrigierren?!?!
0x00000000 - 0xb2d05e00 = 0x4d2fa200 => C
0x00000000 - 0x80000001 = 0x7fffffff =>C, N, V
0x00000000 - 0x80000000 = 0x80000000 => C, N, V
0x00000000 - 0x0fff1236 = 0xf000edca => C, N (Hab hier ne "0" hinzugefügt, weil da eine fehlte)
0x00000000 - 0x7ffffff4 = 0x8000000c => C, N
0x80123456 - 0x00000000 = 0x80123456 => N
0x80123456 - 0x00000000 = 0x80123456 =>N
0x00000000 - 0xcfffffff = 0x30000001 =>C
Bestimmen Sie für die folgende Referenzkette R die Anzahl der Seitenalarme bei Beladys Algorithmus und dem LRU-Verfahren bei einer Größe des Kachelspeichers von 3.
R = a b c d a b b a c e d c a f g a d b c f
das kann ich.
belady:
R = a b c *d a b b a *c *e d c *a *f *g a d *b *c *f
1:a a a a a e a a a a c c
2:- b b b c c c f g b b b
3:- - c d d d d d d d d f
wobei das für die letzten drei reine willkür ist. 9BANG
lru:
R = a b c *d *a *b b a *c *e *d c *a *f *g a *d *b *c *f
1:a a a d d d c c c c c g g b b b
2:- b b b a a a a d d f f d d d f
3:- - c c c b b e e a a a a a c c
13BANG. merke:belady ist toller, aber leider unmöglich
ich versteh das mit dem einfügen noch nicht ganz. müssen 1, 2, 3 immer zu gleicher länge voll sein? manchmal wird es aufgefüllt bevor der neue eingefügt wird, aber wann und warum?
[schnipp]
R = a b c *d a b b a *c *e d c *a *f *g a d *b *c *f
1:a a a a a e a a a a c c
2:- b b b c c c f g b b b
3:- - c d d d d d d d d f
[schnapp]
ich versteh das mit dem einfügen noch nicht ganz. müssen 1, 2, 3 immer zu gleicher länge voll sein? manchmal wird es aufgefüllt bevor der neue eingefügt wird, aber wann und warum?
Lies es andersrum, nach rechts hin vergeht die Zeit, die Spalten sagen, was drin ist. Also zum Zeitpunkt 0 ist in 1 das a, 2 und 3 sind leer. Zum Zeitpunkt 1 ist in 1 das a, in 2 das b und 3 ist leer, etc. Es wird immer erstmal, solange noch freie Plätze da sind, dieser genutzt; erst danach werden Verdrängungsstrategien betrachtet.
ein seitenalarm wird ausgelößt, wenn eine benötigte seite nicht verfügbar ist. insofern werden auch bei den ersten drei anfragen seitenalarme ausgelöst.
Ich hab keine Ahnung ob das richtig ist.
kann das bitte jemand kontrollieren, bzw korrigierren?!?!
0x00000000 - 0xb2d05e00 = 0x4d2fa200 => C
0x00000000 - 0x80000001 = 0x7fffffff =>C
0x00000000 - 0x80000000 = 0x80000000 => C, N, V
0x00000000 - 0x0fff1236 = 0xf000edca => C, N
0x00000000 - 0x7ffffff4 = 0x8000000c => C, N
0x80123456 - 0x00000000 = 0x80123456 => N
0x80123456 - 0x00000000 = 0x80123456 =>N
0x00000000 - 0xcfffffff = 0x30000001 =>C
Korrigiert mich wenn ich falsch liege [24]
[schnipp]
R = a b c *d a b b a *c *e d c *a *f *g a d *b *c *f
1:a a a a a e a a a a c c
2:- b b b c c c f g b b b
3:- - c d d d d d d d d f
[schnapp]
ich versteh das mit dem einfügen noch nicht ganz. müssen 1, 2, 3 immer zu gleicher länge voll sein? manchmal wird es aufgefüllt bevor der neue eingefügt wird, aber wann und warum?
Lies es andersrum, nach rechts hin vergeht die Zeit, die Spalten sagen, was drin ist. Also zum Zeitpunkt 0 ist in 1 das a, 2 und 3 sind leer. Zum Zeitpunkt 1 ist in 1 das a, in 2 das b und 3 ist leer, etc. Es wird immer erstmal, solange noch freie Plätze da sind, dieser genutzt; erst danach werden Verdrängungsstrategien betrachtet.
was sind noch freie plätze? ich verstehe das einfügen der letzten nicht weil dort teilweise a und d aufgefüllt wird.