Fragen zur Adressbreite und Datentransferrate
Hallo,
habe morgen eine Prüfung und ich hänge grad bei eine paar Übungsaufgaben total durch. Es geht dabei um Adressbreite und Datentransferraten, ich hoffe mir kann jemand (möglichst schnell) helfen, ich wäre euch super dankbar!
hier die Fragen:
Das schon etwas ältere Personalcomputersystem arbeitete mit 24 Bit Adressbreite und 16 Bit Datenbreite (=Wortlänge) seine Taktfrequenz betrug 50 MHz ein einzelner Hauptspeicherzugriff benötigte 100 ns. Wir nehmen vereinfachend an, dass jeder Maschinenbefehl des At-286 grundsätzlich 2 Byte lang ist und genau einen Takt zur Ausführung benötigt. Das System besitzt zunächst keinen Cache.
Bei allen Rechungen Ansatz und Ergebnis angeben, die Einheiten nicht vergessen
24. Welche Ausführungszeit ergibt sich für eine Berechnung die 50000 Maschinen-
instruktionen benötigt? Berücksichtigen Sie dabei die Zeit für Holen und Ausführen der Befehle!
25. Bei jedem zweiten Befehl wird noch ein 16 Bit Datenwort vom oder zum
Hauptspeicher transferiert. Welche Gesamtausführungszeit ergibt sich damit?
26. Welche Verbesserung der Gesamtausführungszeit wäre durch einen ausreichend
großen Cache zwischen RAM und Prozessor zu erreichen, wenn man annimmt, dass
die Cache Zugriffszeit 10 ms beträgt, die Berechnung in einer relativ kurzen Schleife
durchgeführt wird und nur einen kleinen Datenbereich adressiert?
27. Welche Auswirkung hätte eine Vergrößerung der Adressbreite von 24 auf 32 Bit zur Folge?
28. Eine Festplatte hat folgende physikalische Spezifikationen:
20.000 Zylinder, 4 Schreib-/Leseköpfe
64 Sektoren á 1024 Byte je Spur
Drehzahl 5400 U/min
- welches Gesamtvolumen in MB hat diese Platte ?
29. Berechnen Sie die maximal zu erwartende Datentransferrate in MB/s der
Platte aus Frage 28
30. Warum wird diese maximal Datentransferrate bei normalen Schreib/Lesezugriffen nicht erreicht?
danke für Eure Hilfe!
habe morgen eine Prüfung und ich hänge grad bei eine paar Übungsaufgaben total durch. Es geht dabei um Adressbreite und Datentransferraten, ich hoffe mir kann jemand (möglichst schnell) helfen, ich wäre euch super dankbar!
hier die Fragen:
Das schon etwas ältere Personalcomputersystem arbeitete mit 24 Bit Adressbreite und 16 Bit Datenbreite (=Wortlänge) seine Taktfrequenz betrug 50 MHz ein einzelner Hauptspeicherzugriff benötigte 100 ns. Wir nehmen vereinfachend an, dass jeder Maschinenbefehl des At-286 grundsätzlich 2 Byte lang ist und genau einen Takt zur Ausführung benötigt. Das System besitzt zunächst keinen Cache.
Bei allen Rechungen Ansatz und Ergebnis angeben, die Einheiten nicht vergessen
24. Welche Ausführungszeit ergibt sich für eine Berechnung die 50000 Maschinen-
instruktionen benötigt? Berücksichtigen Sie dabei die Zeit für Holen und Ausführen der Befehle!
25. Bei jedem zweiten Befehl wird noch ein 16 Bit Datenwort vom oder zum
Hauptspeicher transferiert. Welche Gesamtausführungszeit ergibt sich damit?
26. Welche Verbesserung der Gesamtausführungszeit wäre durch einen ausreichend
großen Cache zwischen RAM und Prozessor zu erreichen, wenn man annimmt, dass
die Cache Zugriffszeit 10 ms beträgt, die Berechnung in einer relativ kurzen Schleife
durchgeführt wird und nur einen kleinen Datenbereich adressiert?
27. Welche Auswirkung hätte eine Vergrößerung der Adressbreite von 24 auf 32 Bit zur Folge?
28. Eine Festplatte hat folgende physikalische Spezifikationen:
20.000 Zylinder, 4 Schreib-/Leseköpfe
64 Sektoren á 1024 Byte je Spur
Drehzahl 5400 U/min
- welches Gesamtvolumen in MB hat diese Platte ?
29. Berechnen Sie die maximal zu erwartende Datentransferrate in MB/s der
Platte aus Frage 28
30. Warum wird diese maximal Datentransferrate bei normalen Schreib/Lesezugriffen nicht erreicht?
danke für Eure Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 116426
Url: https://administrator.de/forum/fragen-zur-adressbreite-und-datentransferrate-116426.html
Ausgedruckt am: 24.12.2024 um 00:12 Uhr
1 Kommentar
Moin,
da fehlt etwas extrem wichtiges:
24: Soll es sich um einen Pipeline-Fähigen Prozessor handeln oder nicht? Wenn ja - wieviel Stufen hat die Pipeline? Hintergrund:
Nehmen wir mal an ich habe eine 5 Stufen-Pipe:
a) Befehl holen
b) Befehl dekode (was macht der Befehl überhaupt?)
c) Ausführung
d) Speicherzugriffe (z.B. Daten in der ALU verarbeiten usw.)
e) Ergebnis schreiben (ggf. obsolet - z..B. bei Read-Befehlen)
Davon wird die Ausführungszeit schon ganz extrem beeinflusst. Habe ich keine Pipeline und nehme an das ich in jeder Stufe 1 ns benötige so benötigt jeder Befehl genau 5 ns für die Ausführung. Nehme ich aber an das ich eben eine 5 Stufen-Pipeline habe dann benötigt der 1 Befehl 5 ns bis er fertig ist. Da aber während der ersten Befehl in Phase b ist bereits der 2te Befehl in Phase a geladen wird kann man sagen das der 1 Befehl nach 5 ns, der 2te nach 6, der 3te nach 7ns usw. fertig wird.
Jetzt fehlt noch der Befehlsmix. Denn: Kein (nicht-triviales) Programm wird im Maschinencode ohne Sprünge/vergleicher auskommen. Du wirst im "Hochsprachen-Code" eigentlich bei jedem etwas sinnvollerem Programm etwas wie "for ($i=0;$i<=$xyz;$i++)" finden. Was passiert da grob im Maschinencode? Ich nehme mal an wir haben den Befehl "DJNZ" (decrement & jump not zero). Mit diesem Befehl würde ich also z.B. die o.g. schleife abarbeiten. Jetzt der Zusammenhang zur Ausführungszeit: Ich kann bei einem solchen Befehl im einfachen Fall gar keine Vorhersage machen -> entsprechend bringt die Pipeline nichts (im komplexen Fall kann ich Annahmen treffen und somit die Ausführungszeit nochmal erhöhen). Im schlimmsten Fall muss ich sogar ein "Roll-Back" von Daten machen - je nachdem ob ich eine entsprechende "Sprung-Erkennung" im Prozessor habe oder nicht.
Ohne diese Angaben (und dem Wissen wo ihr im Unterricht grad steht) kann man da schlecht was rechnen. Im Simplen Fall kannst du einfach sagen: Zeit = 1/50 MHz, d.h. 1 Takt benötigt 2 ns. Bei 50.000 Maschineninstruktionen kann man also mit 2*50.000= 100.000 ns rechnen. Allerdings: Da das holen des Befehls eingerechnet werden soll passt das so nicht - nur braucht man für die Berechnung dann die Anzahl der Pipeline-Stufen...
Frage 2 hängt auch wieder extrem davon ab welche genaue Architektur du hast. Es gibt die möglichkeit das du einfach sagst "ok, schreiben im Speicher geht auch in 1 Takt und in der Pipeline" -> dann würden das also 50.000 Befehle/2*2ns -> 50.000 ns mehr sein. Das problem dabei: Nehmen wir an du hast einen Pipeline-Prozessor mit 5 Phasen und folgende Befehle:
add r0,1
dec a
add r0,2
djnz r0,1,#sprungmarke
add r0,3
sprungmarke:
add r0,2
Die ersten 3 Befehle - kein Ding. Danach kommt aber das djnz in die Execute - und du erkennst das du wirklich springen willst. Soweit so gut -> nur in der nächsten Stufe der Pipe steht ja bereits der Befehl add r0,3 drin. Du musst also jetzt (ohne Sprungerkennung) deine Pipeline nach der Befehlsausführung erstmal löschen -> sonst hast du Müll in R0 drin. Damit ergibt sich aber das dein addr0,2 wieder komplett in eine leere Pipe geht -> d.h. die Pipeline-Füllung muss komplett neu gemacht werden. Du hast wieder deine x*2 ns bevor der Befehl durchläuft.
26) Was für einen Cache? Befehlscache oder Daten? Wie lange soll ein Zugriff OHNE Cache denn dauern? Beim Befehls-Decode wäre so oder so die erste Stufe der Pipeline damit beschäftigt. Ansonsten fehlen mir da einige Vergleichsdaten (z.B. wie lang dauert ein Speicherzugriff OHNE Cache?). Grade hier kommt dann ggf. aber das Schleifenproblem für Pipelines zum tragen... Habe ich keine Erkennung - es gibt nen Problem... Habe ich eine Sprungvorhersage kann ich da einiges abfahgen...
27: Naja - erstmal kann mehr Speicher direkt angesprochen werden....
28: is mir zuviel zu rechnen ;)
29: Datenrate hängt ab von der Position der Daten. "Aussen" an der Platte ist die "Geschwindigkeit" höher als in der Mitte - in einer Zeiteinheit überfliegt der Schreib/Lesekopf eine längere Strecke. Habe ich also eine Platte mit einem Durchmesser von 100 cm die sich konstant mit 5400 U/Min dreht erreiche ich aussen eine höhere Datenrate als wenn ich eine Scheibe mit d=7cm habe.
30: Weil du suchvorgänge hast, weil die Daten idR. nicht alle in einem gigantischen Block zusammenhängen, weil das Betriebssystem nicht nur 1 Programm sondern n im Zeitscheibenmodell laufen hat, weil auf dem Datenbus auch noch andere Leute verkehren, weil du die Daten auch wegschreiben musst (du liest ja hoffentlich nicht die Daten von der Festplatte direkt nach /dev/null ;) )... Such dir was aus
da fehlt etwas extrem wichtiges:
24: Soll es sich um einen Pipeline-Fähigen Prozessor handeln oder nicht? Wenn ja - wieviel Stufen hat die Pipeline? Hintergrund:
Nehmen wir mal an ich habe eine 5 Stufen-Pipe:
a) Befehl holen
b) Befehl dekode (was macht der Befehl überhaupt?)
c) Ausführung
d) Speicherzugriffe (z.B. Daten in der ALU verarbeiten usw.)
e) Ergebnis schreiben (ggf. obsolet - z..B. bei Read-Befehlen)
Davon wird die Ausführungszeit schon ganz extrem beeinflusst. Habe ich keine Pipeline und nehme an das ich in jeder Stufe 1 ns benötige so benötigt jeder Befehl genau 5 ns für die Ausführung. Nehme ich aber an das ich eben eine 5 Stufen-Pipeline habe dann benötigt der 1 Befehl 5 ns bis er fertig ist. Da aber während der ersten Befehl in Phase b ist bereits der 2te Befehl in Phase a geladen wird kann man sagen das der 1 Befehl nach 5 ns, der 2te nach 6, der 3te nach 7ns usw. fertig wird.
Jetzt fehlt noch der Befehlsmix. Denn: Kein (nicht-triviales) Programm wird im Maschinencode ohne Sprünge/vergleicher auskommen. Du wirst im "Hochsprachen-Code" eigentlich bei jedem etwas sinnvollerem Programm etwas wie "for ($i=0;$i<=$xyz;$i++)" finden. Was passiert da grob im Maschinencode? Ich nehme mal an wir haben den Befehl "DJNZ" (decrement & jump not zero). Mit diesem Befehl würde ich also z.B. die o.g. schleife abarbeiten. Jetzt der Zusammenhang zur Ausführungszeit: Ich kann bei einem solchen Befehl im einfachen Fall gar keine Vorhersage machen -> entsprechend bringt die Pipeline nichts (im komplexen Fall kann ich Annahmen treffen und somit die Ausführungszeit nochmal erhöhen). Im schlimmsten Fall muss ich sogar ein "Roll-Back" von Daten machen - je nachdem ob ich eine entsprechende "Sprung-Erkennung" im Prozessor habe oder nicht.
Ohne diese Angaben (und dem Wissen wo ihr im Unterricht grad steht) kann man da schlecht was rechnen. Im Simplen Fall kannst du einfach sagen: Zeit = 1/50 MHz, d.h. 1 Takt benötigt 2 ns. Bei 50.000 Maschineninstruktionen kann man also mit 2*50.000= 100.000 ns rechnen. Allerdings: Da das holen des Befehls eingerechnet werden soll passt das so nicht - nur braucht man für die Berechnung dann die Anzahl der Pipeline-Stufen...
Frage 2 hängt auch wieder extrem davon ab welche genaue Architektur du hast. Es gibt die möglichkeit das du einfach sagst "ok, schreiben im Speicher geht auch in 1 Takt und in der Pipeline" -> dann würden das also 50.000 Befehle/2*2ns -> 50.000 ns mehr sein. Das problem dabei: Nehmen wir an du hast einen Pipeline-Prozessor mit 5 Phasen und folgende Befehle:
add r0,1
dec a
add r0,2
djnz r0,1,#sprungmarke
add r0,3
sprungmarke:
add r0,2
Die ersten 3 Befehle - kein Ding. Danach kommt aber das djnz in die Execute - und du erkennst das du wirklich springen willst. Soweit so gut -> nur in der nächsten Stufe der Pipe steht ja bereits der Befehl add r0,3 drin. Du musst also jetzt (ohne Sprungerkennung) deine Pipeline nach der Befehlsausführung erstmal löschen -> sonst hast du Müll in R0 drin. Damit ergibt sich aber das dein addr0,2 wieder komplett in eine leere Pipe geht -> d.h. die Pipeline-Füllung muss komplett neu gemacht werden. Du hast wieder deine x*2 ns bevor der Befehl durchläuft.
26) Was für einen Cache? Befehlscache oder Daten? Wie lange soll ein Zugriff OHNE Cache denn dauern? Beim Befehls-Decode wäre so oder so die erste Stufe der Pipeline damit beschäftigt. Ansonsten fehlen mir da einige Vergleichsdaten (z.B. wie lang dauert ein Speicherzugriff OHNE Cache?). Grade hier kommt dann ggf. aber das Schleifenproblem für Pipelines zum tragen... Habe ich keine Erkennung - es gibt nen Problem... Habe ich eine Sprungvorhersage kann ich da einiges abfahgen...
27: Naja - erstmal kann mehr Speicher direkt angesprochen werden....
28: is mir zuviel zu rechnen ;)
29: Datenrate hängt ab von der Position der Daten. "Aussen" an der Platte ist die "Geschwindigkeit" höher als in der Mitte - in einer Zeiteinheit überfliegt der Schreib/Lesekopf eine längere Strecke. Habe ich also eine Platte mit einem Durchmesser von 100 cm die sich konstant mit 5400 U/Min dreht erreiche ich aussen eine höhere Datenrate als wenn ich eine Scheibe mit d=7cm habe.
30: Weil du suchvorgänge hast, weil die Daten idR. nicht alle in einem gigantischen Block zusammenhängen, weil das Betriebssystem nicht nur 1 Programm sondern n im Zeitscheibenmodell laufen hat, weil auf dem Datenbus auch noch andere Leute verkehren, weil du die Daten auch wegschreiben musst (du liest ja hoffentlich nicht die Daten von der Festplatte direkt nach /dev/null ;) )... Such dir was aus