2.3.4.4 Kommunikation mit E/A-Geräten

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
<p>
Im bisherigen Verlauf dieses Moduls sind bereits viele Beispiele gezeigt worden, bei denen das Steuerwerk der CPU mit Registern oder dem Hauptspeicher kommuniziert. Da ein Computer aber noch weitere Komponenten besitzt, muss auch die Kommunikation der CPU mit den sogenannten Peripheriegeräten möglich sein.
Im bisherigen Verlauf dieses Moduls sind bereits viele Beispiele gezeigt worden, bei denen das Steuerwerk der CPU mit Registern oder dem Hauptspeicher kommuniziert. Da ein Computer aber noch weitere Komponenten besitzt, muss auch die Kommunikation der CPU mit den sogenannten Peripheriegeräten möglich sein.
</p>


<p>
Peripheriegeräte sind:
Peripheriegeräte sind:
* Festplatte
* Festplatte
Zeile 7: Zeile 10:
* Tastatur
* Tastatur
* etc.
* etc.
</p>


<p>
Genaugenommen kommuniziert die CPU dann nicht direkt mit diesen Komponenten, sondern mit einem Controller, der speziell für die betreffende Komponente zuständig ist.
Genaugenommen kommuniziert die CPU dann nicht direkt mit diesen Komponenten, sondern mit einem Controller, der speziell für die betreffende Komponente zuständig ist.
</p>


<br />
<p>
 
<loop_figure title="CPU, Interrupt-Controller, Speicherwerk und weitere Controller mit ihren Komponenten" description="" copyright="CC-BY" index=true show_copyright=true>[[Datei:Vnrgesamt2.jpg|700px]]</loop_figure>
<p><loop_figure title="CPU, Interrupt-Controller, Speicherwerk und weitere Controller mit ihren Komponenten" description="" copyright="CC-BY" index=true show_copyright=true>[[Datei:Vnrgesamt2.jpg|700px]]</loop_figure></p>
</p>


<br />
<br />
Zeile 18: Zeile 24:
==== Allgemeiner Aufbau eines Controllers ====
==== Allgemeiner Aufbau eines Controllers ====


<p>
Genau wie die CPU besitzt auch der Controller eines Peripheriegeräts verschiedene Register. Üblich sind:
Genau wie die CPU besitzt auch der Controller eines Peripheriegeräts verschiedene Register. Üblich sind:
* '''Steuerregister'''<br />Hier kann über das Bussystem ein Steuerbefehl an den Controller übergeben werden (ähnlich dem Befehlsregister auf der CPU).
* '''Steuerregister'''<br />Hier kann über das Bussystem ein Steuerbefehl an den Controller übergeben werden (ähnlich dem Befehlsregister auf der CPU).
* '''Datenregister'''<br />Hier kann ein Datenwort hinterlegt, oder ein vom Peripheriegerät über den Controller bereitgestelltes Datenwort ausgelesen werden.
* '''Datenregister'''<br />Hier kann ein Datenwort hinterlegt, oder ein vom Peripheriegerät über den Controller bereitgestelltes Datenwort ausgelesen werden.
* '''Zustandsregister'''<br />Hier hinterlegt der Controller jeweils Werte, die über den aktuellen Zustand des Controllers (oder Peripheriegeräts) Auskunft geben.
* '''Zustandsregister'''<br />Hier hinterlegt der Controller jeweils Werte, die über den aktuellen Zustand des Controllers (oder Peripheriegeräts) Auskunft geben.
</p>


<br />
<p>
 
<loop_area type="annotation">In dem (oder den) Zustandsregister(n) können verschiedene Zustände angezeigt werden, beispielsweise
<loop_area type="annotation">In dem (oder den) Zustandsregister(n) können verschiedene Zustände angezeigt werden, beispielsweise
* Ready: Controller ist bereit für den nächsten Steuerbefehl.
* Ready: Controller ist bereit für den nächsten Steuerbefehl.
Zeile 33: Zeile 40:
* etc.
* etc.
</loop_area>
</loop_area>
</p>


<br />
<p>
 
Die folgende Abbildung zeigt den allgemeinen Aufbau eines Controllers. Dabei ist von jeder Registerart nur ein einziges eingezeichnet, es ist jedoch auch denkbar, dass der Controller über mehrere Register je Art verfügt.
Die folgende Abbildung zeigt den allgemeinen Aufbau eines Controllers. Dabei ist von jeder Registerart nur ein einziges eingezeichnet, es ist jedoch auch denkbar, dass der Controller über mehrere Register je Art verfügt.
</p>


<br />
<p>
 
<loop_figure title="Allgemeiner Aufbau eines Controllers" description="" copyright="CC-BY" index=true show_copyright=true>[[Datei:Controller1.jpg|700px]]</loop_figure>
<p><loop_figure title="Allgemeiner Aufbau eines Controllers" description="" copyright="CC-BY" index=true show_copyright=true>[[Datei:Controller1.jpg|700px]]</loop_figure></p>
</p>
 
<br />


<p>
Die bislang betrachte Menge an Peripheriegeräten verfügt jeweils über einen eigenen Controller, wobei jeder Controller mit dem entsprechenden Registersatz ausgestattet ist:
Die bislang betrachte Menge an Peripheriegeräten verfügt jeweils über einen eigenen Controller, wobei jeder Controller mit dem entsprechenden Registersatz ausgestattet ist:
</p>


<br />
<p>
<loop_figure title="Verschiedene Controller mit eigenen Registersätzen" description="" copyright="CC-BY" index=true show_copyright=true>[[Datei:Controller3.jpg|700px]]</loop_figure>
</p>


<p><loop_figure title="Verschiedene Controller mit eigenen Registersätzen" description="" copyright="CC-BY" index=true show_copyright=true>[[Datei:Controller3.jpg|700px]]</loop_figure></p>
<p>
 
<loop_area type="task">'''Aufgabe 1'''
<br />
<p>
 
<loop_area type="task"><p>'''Aufgabe 1'''</p>
Auf das Datenregister eines Controllers kann die CPU sowohl lesend, als auch schreibend zugreifen. Wie verhält es sich aber beim Steuer- und beim Zustandsregister? Ist der Zugriff hier ''nur lesend'', ''nur schreibend'' oder ''lesend und schreibend'' möglich?
Auf das Datenregister eines Controllers kann die CPU sowohl lesend, als auch schreibend zugreifen. Wie verhält es sich aber beim Steuer- und beim Zustandsregister? Ist der Zugriff hier ''nur lesend'', ''nur schreibend'' oder ''lesend und schreibend'' möglich?
</p>
</loop_area>
</loop_area>
</p>


<br />
<br />
Zeile 60: Zeile 70:
==== Zeit und Kosten machen den Unterschied ====
==== Zeit und Kosten machen den Unterschied ====


<p>
Zwei entscheidende Unterschiede bei der Kommunikation zwischen dem Steuerwerk und Registern, Hauptspeicher sowie den Controllern der weiteren Komponenten bestehen einerseits in der dafür benötigten Zeit, und andererseits in den Kosten, die eine technische Realisierung der betreffenden Komponenten verursacht.
Zwei entscheidende Unterschiede bei der Kommunikation zwischen dem Steuerwerk und Registern, Hauptspeicher sowie den Controllern der weiteren Komponenten bestehen einerseits in der dafür benötigten Zeit, und andererseits in den Kosten, die eine technische Realisierung der betreffenden Komponenten verursacht.
</p>


<p>
Die Kommunikation zwischen Steuerwerk und Registern ist mit Abstand am schnellsten möglich. Beides ist auf der CPU angesiedelt, die Wege sind kurz und effizient ausgebaut. Nachteilig ist lediglich, dass alle Register der CPU zusammen nur recht wenig Speicherplatz bieten. Dies liegt an entsprechend hohen Kosten, welche die Integration (vieler) weiterer Register auf der CPU nach sich ziehen würde.
Die Kommunikation zwischen Steuerwerk und Registern ist mit Abstand am schnellsten möglich. Beides ist auf der CPU angesiedelt, die Wege sind kurz und effizient ausgebaut. Nachteilig ist lediglich, dass alle Register der CPU zusammen nur recht wenig Speicherplatz bieten. Dies liegt an entsprechend hohen Kosten, welche die Integration (vieler) weiterer Register auf der CPU nach sich ziehen würde.
</p>


<br />
<p>
 
<loop_area type="annotation">'''Wunschvorstellung'''
<loop_area type="annotation"><p>'''Wunschvorstellung'''</p>
<p>
 
Wäre es nicht ideal, wenn alle Programme und Daten, die du normalerweise auf deiner Festplatte gespeichert hast, direkt in Registern der CPU abgelegt wären? Du bräuchtest dann weder Festplatte noch Hauptspeicher und dein System würde konkurrenzlos schnell arbeiten!
Wäre es nicht ideal, wenn alle Programme und Daten, die du normalerweise auf deiner Festplatte gespeichert hast, direkt in Registern der CPU abgelegt wären? Du bräuchtest dann weder Festplatte noch Hauptspeicher und dein System würde konkurrenzlos schnell arbeiten!
 
</p>
<p>
Du kannst dir ausmalen, dass das technisch nicht so einfach möglich ist, oder?
Du kannst dir ausmalen, dass das technisch nicht so einfach möglich ist, oder?
</p>
</loop_area>
</loop_area>
</p>


<br />
<p>
 
Die Kommunikation zwischen Steuerwerk und Hauptspeicher ist - verglichen mit den Registern - bereits deutlich langsamer, jedoch immer noch recht schnell. Der Hauptspeicher ist speziell für eine schnelle Arbeitsweise konzipiert, er bietet auch deutlich mehr Platz als die Menge der CPU-Register. Nachteilig ist hier, dass der Inhalt des Hauptspeichers verloren geht, sobald der betreffende Computer ausgeschaltet wird.
Die Kommunikation zwischen Steuerwerk und Hauptspeicher ist - verglichen mit den Registern - bereits deutlich langsamer, jedoch immer noch recht schnell. Der Hauptspeicher ist speziell für eine schnelle Arbeitsweise konzipiert, er bietet auch deutlich mehr Platz als die Menge der CPU-Register. Nachteilig ist hier, dass der Inhalt des Hauptspeichers verloren geht, sobald der betreffende Computer ausgeschaltet wird.
</p>


<p>
Abhilfe schafft bei diesem Nachteil beispielsweise die Festplatte. Sie bietet üblicherweise deutlich mehr Speicherplatz als der Hauptspeicher und kann ihre Daten zudem dauerhaft (also auch über ein Ausschalten und einen Neustart des betreffenden Rechners hinaus) speichern. Leider ist die Kommunikation zwischen CPU und Festplatten-Controller erheblich langsamer als zwischen CPU und Hauptspeicher. Dafür liegen die Kosten für eine Festplatte (in Bezug zur Speicherkapazität) deutlich unter den Kosten für Hauptspeicher.
Abhilfe schafft bei diesem Nachteil beispielsweise die Festplatte. Sie bietet üblicherweise deutlich mehr Speicherplatz als der Hauptspeicher und kann ihre Daten zudem dauerhaft (also auch über ein Ausschalten und einen Neustart des betreffenden Rechners hinaus) speichern. Leider ist die Kommunikation zwischen CPU und Festplatten-Controller erheblich langsamer als zwischen CPU und Hauptspeicher. Dafür liegen die Kosten für eine Festplatte (in Bezug zur Speicherkapazität) deutlich unter den Kosten für Hauptspeicher.
</p>


<br />
<p>
 
<loop_area type="annotation">Eine Festplatte kostet pro Gigabyte Speicherkapazität deutlich weniger, als ein Gigabyte Hauptspeicher. Dafür arbeitet der Hauptspeicher deutlich schneller.
<loop_area type="annotation">Eine Festplatte kostet pro Gigabyte Speicherkapazität deutlich weniger, als ein Gigabyte Hauptspeicher. Dafür arbeitet der Hauptspeicher deutlich schneller.
</loop_area>
</loop_area>
</p>


<br />
<p>
 
<loop_area type="annotation"><cite>Tanenbaum+2009</cite> nennt folgende näherungsweisen Vergleichswerte für die Zugriffe auf Daten:
<loop_area type="annotation"><cite>Tanenbaum+2009</cite> nennt folgende näherungsweisen Vergleichswerte für die Zugriffe auf Daten:
* Die CPU kann 10 x schneller auf ein Register zugreifen, als auf den Arbeitsspeicher.
* Die CPU kann 10 x schneller auf ein Register zugreifen, als auf den Arbeitsspeicher.
Zeile 91: Zeile 108:
* Ein Registerzugriff ist damit 10&nbsp;000 x schneller, als ein Festplattenzugriff.
* Ein Registerzugriff ist damit 10&nbsp;000 x schneller, als ein Festplattenzugriff.
</loop_area>
</loop_area>
</p>


<br />
<p>
 
Auch für die Kommunikation zwischen der CPU und allen weiteren Controllern der sonstigen Komponenten gilt: Es ist langsam.
Auch für die Kommunikation zwischen der CPU und allen weiteren Controllern der sonstigen Komponenten gilt: Es ist langsam.
</p>


<p>
Das folgende Video erläutert die Bedeutung von Interrupts bei der Kommunikation zwischen CPU und Ein- / Ausgabegeräten. Beispielhaft wird die Festplatte als EA-Gerät betrachtet.
Das folgende Video erläutert die Bedeutung von Interrupts bei der Kommunikation zwischen CPU und Ein- / Ausgabegeräten. Beispielhaft wird die Festplatte als EA-Gerät betrachtet.
</p>


<br />
<p>
 
<loop_media type="video" title="Ein- und Ausgabe mit Festplatte und Interrupts (04:00)" description="http://youtu.be/nOEW4I_QX2c" copyright="CC-BY" index=true show_copyright=true>{{#ev:youtube|nOEW4I_QX2c|700}}</loop_media>
<p><loop_media type="video" title="Ein- und Ausgabe mit Festplatte und Interrupts (04:00)" description="http://youtu.be/nOEW4I_QX2c" copyright="CC-BY" index=true show_copyright=true>{{#ev:youtube|nOEW4I_QX2c|700}}</loop_media></p>
</p>
 
<br />


<p>
Im Video wird deutlich, dass '''für jedes einzelne Datenwort''' folgende Schritte erforderlich sind:
Im Video wird deutlich, dass '''für jedes einzelne Datenwort''' folgende Schritte erforderlich sind:
* Die CPU sendet die Adresse des gewünschten Datenwortes an den Festplatten-Controller.
* Die CPU sendet die Adresse des gewünschten Datenwortes an den Festplatten-Controller.
Zeile 115: Zeile 134:
* Der Hauptspeicher legt das Datenwort in der gewünschten Speicherzelle ab.
* Der Hauptspeicher legt das Datenwort in der gewünschten Speicherzelle ab.
* Die Interruptbehandlungsroutine informiert den Interrupt-Controller darüber, dass der Interrupt jetzt fertig behandelt ist.
* Die Interruptbehandlungsroutine informiert den Interrupt-Controller darüber, dass der Interrupt jetzt fertig behandelt ist.
</p>


<br />
<p>
 
Ganz schön viel Aufwand, oder? (Und dabei ist diese Auflistung noch nicht einmal ganz komplett, aber damit beschäftigst du dich gleich noch in den Aufgaben weiter unten ;-)
Ganz schön viel Aufwand, oder? (Und dabei ist diese Auflistung noch nicht einmal ganz komplett, aber damit beschäftigst du dich gleich noch in den Aufgaben weiter unten ;-)
</p>


<br />
<p>
 
<loop_area type="annotation">'''Für eine Handvoll Bits...'''
<loop_area type="annotation"><p>'''Für eine Handvoll Bits...'''</p>
<p>
Es ist an dieser Stelle wichtig zu erkennen, was für ein großer Aufwand betrieben wird, nur um ein einzelnes Datenwort von der Festplatte in den Hauptspeicher zu kopieren.
Es ist an dieser Stelle wichtig zu erkennen, was für ein großer Aufwand betrieben wird, nur um ein einzelnes Datenwort von der Festplatte in den Hauptspeicher zu kopieren.
</p>
</loop_area>
</loop_area>
</p>


<br />
<p>
 
Aber: Wie groß ist so ein Datenwort eigentlich?
Aber: Wie groß ist so ein Datenwort eigentlich?
</p>


<p>
Es hat die Größe der Registerbreite des Datenregisters auf dem Festplatten-Controller, oder alternativ die Größe der Busbreite des Datenbusses, über das es übertragen wird. Mit hoher Wahrscheinlichkeit haben Register und Bus dieselbe Breite, vielleicht 32 oder 64 Bit (und auf neueren Systemen irgendwann mal 128 Bit).
Es hat die Größe der Registerbreite des Datenregisters auf dem Festplatten-Controller, oder alternativ die Größe der Busbreite des Datenbusses, über das es übertragen wird. Mit hoher Wahrscheinlichkeit haben Register und Bus dieselbe Breite, vielleicht 32 oder 64 Bit (und auf neueren Systemen irgendwann mal 128 Bit).
</p>


<p>
Und: Wie groß ist heute eine übliche Datei, die ein Anwendungsprogramm enthält?
Und: Wie groß ist heute eine übliche Datei, die ein Anwendungsprogramm enthält?
</p>


<p>
Das können schnell mehrere Megabyte sein, also ganz schön viele Datenwörter...
Das können schnell mehrere Megabyte sein, also ganz schön viele Datenwörter...
</p>


<br />
<p>
 
<loop_area type="notice">'''Weiterführende Literatur'''
<loop_area type="notice"><p>'''Weiterführende Literatur'''</p>
<p>
<cite>Wüst+2011</cite> erläutert in Kapitel 5 (Ein- und Ausgabe) weitere Hintergründe zum Thema. Die Lektüre dieser Quelle sei ausdrücklich empfohlen.<br /><small>Studierende sind oftmals berechtigt, eine PDF-Version dieses Buches ohne entstehende Kosten [[Hinweise für Studierende#Downloadbare Bücher von Springerlink|über ihre Hochschulen von Springerlink zu beziehen.]]</small>
<cite>Wüst+2011</cite> erläutert in Kapitel 5 (Ein- und Ausgabe) weitere Hintergründe zum Thema. Die Lektüre dieser Quelle sei ausdrücklich empfohlen.
</p>
<p>
<small>Studierende sind oftmals berechtigt, eine PDF-Version dieses Buches ohne entstehende Kosten [[Hinweise für Studierende#Downloadbare Bücher von Springerlink|über ihre Hochschulen von Springerlink zu beziehen.]]</small>
</p>
</loop_area>
</loop_area>
</p>


<br />
<p>
 
<loop_area type="task">'''Aufgabe 2'''
<loop_area type="task"><p>'''Aufgabe 2'''</p>  
<p>
 
Im [http://youtu.be/nOEW4I_QX2c Video] wird gezeigt, wie die CPU wartet, und wartet, und wartet. Das ist natürlich keine gute Idee im Hinblick auf die Geschwindigkeit des Gesamtsystems.
Im [http://youtu.be/nOEW4I_QX2c Video] wird gezeigt, wie die CPU wartet, und wartet, und wartet. Das ist natürlich keine gute Idee im Hinblick auf die Geschwindigkeit des Gesamtsystems.
* Was könnte die CPU alternativ tun, während sie auf den Interrupt wartet?
* Was könnte die CPU alternativ tun, während sie auf den Interrupt wartet?
* Eigentlich ist das Betriebssystem gefordert, hier andere Tätigkeiten zu veranlassen. Welche fallen dir ein?
* Eigentlich ist das Betriebssystem gefordert, hier andere Tätigkeiten zu veranlassen. Welche fallen dir ein?
</p>
</loop_area>
</loop_area>
 
</p>
<br />


<p>
<p>
Zeile 170: Zeile 202:
<loop_area type="task">'''Aufgabe 4'''
<loop_area type="task">'''Aufgabe 4'''
<p>
<p>
Das Zustandsregister eines Controllers kann (u.a.) ein READY anzeigen, im [http://youtu.be/nOEW4I_QX2c Video] ist das zu sehen. Es reicht ein Bit, um den Zustand READY zu kennzeichnen. Ist dieses Bit gleich 1, so gilt: der Controller ist READY für den nächsten Steuerbefehl.
Das Zustandsregister eines Controllers kann (u.a.) ein READY anzeigen, im [http://youtu.be/nOEW4I_QX2c Video] ist das zu sehen. Es reicht ein Bit, um den Zustand READY zu kennzeichnen. Ist dieses Bit gleich 1, so gilt: der Controller ist READY für den nächsten Steuerbefehl. Gleiches gilt für den Zustand BUSY. Auch hierfür reicht ein Bit.
 
</p>
Gleiches gilt für den Zustand BUSY. Auch hierfür reicht ein Bit.
<p>
 
Für READY und BUSY werden im Zustandsregister demnach zwei Bit benötigt.
Für READY und BUSY werden im Zustandsregister demnach zwei Bit benötigt. Kannst du dem zustimmen? Oder gibt es eine sinnvolle Alternative? Welche Alternative fällt dir ein?
* Kannst du dem zustimmen?
* Oder gibt es eine sinnvolle Alternative?
* Welche Alternative fällt dir ein?
</p>
</p>
</loop_area>
</loop_area>

Version vom 20. September 2013, 19:31 Uhr

Im bisherigen Verlauf dieses Moduls sind bereits viele Beispiele gezeigt worden, bei denen das Steuerwerk der CPU mit Registern oder dem Hauptspeicher kommuniziert. Da ein Computer aber noch weitere Komponenten besitzt, muss auch die Kommunikation der CPU mit den sogenannten Peripheriegeräten möglich sein.

Peripheriegeräte sind:

  • Festplatte
  • Monitor
  • Maus
  • Tastatur
  • etc.

Genaugenommen kommuniziert die CPU dann nicht direkt mit diesen Komponenten, sondern mit einem Controller, der speziell für die betreffende Komponente zuständig ist.

Vnrgesamt2.jpg


Allgemeiner Aufbau eines Controllers

Genau wie die CPU besitzt auch der Controller eines Peripheriegeräts verschiedene Register. Üblich sind:

  • Steuerregister
    Hier kann über das Bussystem ein Steuerbefehl an den Controller übergeben werden (ähnlich dem Befehlsregister auf der CPU).
  • Datenregister
    Hier kann ein Datenwort hinterlegt, oder ein vom Peripheriegerät über den Controller bereitgestelltes Datenwort ausgelesen werden.
  • Zustandsregister
    Hier hinterlegt der Controller jeweils Werte, die über den aktuellen Zustand des Controllers (oder Peripheriegeräts) Auskunft geben.

Anmerkung

In dem (oder den) Zustandsregister(n) können verschiedene Zustände angezeigt werden, beispielsweise

  • Ready: Controller ist bereit für den nächsten Steuerbefehl.
  • Busy: Controller ist noch mit der Ausführung des aktuellen Steuerbefehls beschäftigt.
  • Read Error: Das angeforderte Datenwort kann nicht vom Peripheriegerät gelesen werden.
  • Write Error: Das im Datenregister befindliche Datenwort kann nicht auf dem Peripheriegerät gespeichert werden.
  • Out of paper: Der an diesen Controller angeschlossene Drucker hat kein Papier mehr.
  • etc.

Die folgende Abbildung zeigt den allgemeinen Aufbau eines Controllers. Dabei ist von jeder Registerart nur ein einziges eingezeichnet, es ist jedoch auch denkbar, dass der Controller über mehrere Register je Art verfügt.

Controller1.jpg

Die bislang betrachte Menge an Peripheriegeräten verfügt jeweils über einen eigenen Controller, wobei jeder Controller mit dem entsprechenden Registersatz ausgestattet ist:

Controller3.jpg

Aufgabe

Aufgabe 1

Auf das Datenregister eines Controllers kann die CPU sowohl lesend, als auch schreibend zugreifen. Wie verhält es sich aber beim Steuer- und beim Zustandsregister? Ist der Zugriff hier nur lesend, nur schreibend oder lesend und schreibend möglich?


Zeit und Kosten machen den Unterschied

Zwei entscheidende Unterschiede bei der Kommunikation zwischen dem Steuerwerk und Registern, Hauptspeicher sowie den Controllern der weiteren Komponenten bestehen einerseits in der dafür benötigten Zeit, und andererseits in den Kosten, die eine technische Realisierung der betreffenden Komponenten verursacht.

Die Kommunikation zwischen Steuerwerk und Registern ist mit Abstand am schnellsten möglich. Beides ist auf der CPU angesiedelt, die Wege sind kurz und effizient ausgebaut. Nachteilig ist lediglich, dass alle Register der CPU zusammen nur recht wenig Speicherplatz bieten. Dies liegt an entsprechend hohen Kosten, welche die Integration (vieler) weiterer Register auf der CPU nach sich ziehen würde.

Anmerkung

Wunschvorstellung

Wäre es nicht ideal, wenn alle Programme und Daten, die du normalerweise auf deiner Festplatte gespeichert hast, direkt in Registern der CPU abgelegt wären? Du bräuchtest dann weder Festplatte noch Hauptspeicher und dein System würde konkurrenzlos schnell arbeiten!

Du kannst dir ausmalen, dass das technisch nicht so einfach möglich ist, oder?

Die Kommunikation zwischen Steuerwerk und Hauptspeicher ist - verglichen mit den Registern - bereits deutlich langsamer, jedoch immer noch recht schnell. Der Hauptspeicher ist speziell für eine schnelle Arbeitsweise konzipiert, er bietet auch deutlich mehr Platz als die Menge der CPU-Register. Nachteilig ist hier, dass der Inhalt des Hauptspeichers verloren geht, sobald der betreffende Computer ausgeschaltet wird.

Abhilfe schafft bei diesem Nachteil beispielsweise die Festplatte. Sie bietet üblicherweise deutlich mehr Speicherplatz als der Hauptspeicher und kann ihre Daten zudem dauerhaft (also auch über ein Ausschalten und einen Neustart des betreffenden Rechners hinaus) speichern. Leider ist die Kommunikation zwischen CPU und Festplatten-Controller erheblich langsamer als zwischen CPU und Hauptspeicher. Dafür liegen die Kosten für eine Festplatte (in Bezug zur Speicherkapazität) deutlich unter den Kosten für Hauptspeicher.

Anmerkung

Eine Festplatte kostet pro Gigabyte Speicherkapazität deutlich weniger, als ein Gigabyte Hauptspeicher. Dafür arbeitet der Hauptspeicher deutlich schneller.

Anmerkung

Tanenbaum 2009 nennt folgende näherungsweisen Vergleichswerte für die Zugriffe auf Daten:

  • Die CPU kann 10 x schneller auf ein Register zugreifen, als auf den Arbeitsspeicher.
  • Die CPU kann 1000 x schneller auf den Arbeitsspeicher zugreifen, als auf eine Festplatte.
  • Ein Registerzugriff ist damit 10 000 x schneller, als ein Festplattenzugriff.

Auch für die Kommunikation zwischen der CPU und allen weiteren Controllern der sonstigen Komponenten gilt: Es ist langsam.

Das folgende Video erläutert die Bedeutung von Interrupts bei der Kommunikation zwischen CPU und Ein- / Ausgabegeräten. Beispielhaft wird die Festplatte als EA-Gerät betrachtet.

Im Video wird deutlich, dass für jedes einzelne Datenwort folgende Schritte erforderlich sind:

  • Die CPU sendet die Adresse des gewünschten Datenwortes an den Festplatten-Controller.
  • Der Festplatten-Controller besorgt das Datenwort von der Festplatte und stellt es in seinem Datenregister zur Verfügung.
  • Der Festplatten-Controller sendet einen Interrupt zum Interrupt-Controller.
  • Der Interrupt-Controller nimmt den Interrupt entgegen und verwaltet ihn.
  • Der Interrupt-Controller informiert die CPU über den Interrupt des Festplatten-Controllers.
  • Die CPU startet die zugehörige Interruptbehandlungsroutine.
  • Die Behandlungsroutine kopiert das Datenwort in ein Register auf der CPU.
  • Die Behandlungsroutine sendet das Datenwort von der CPU zum Hauptspeicher.
  • Der Hauptspeicher legt das Datenwort in der gewünschten Speicherzelle ab.
  • Die Interruptbehandlungsroutine informiert den Interrupt-Controller darüber, dass der Interrupt jetzt fertig behandelt ist.

Ganz schön viel Aufwand, oder? (Und dabei ist diese Auflistung noch nicht einmal ganz komplett, aber damit beschäftigst du dich gleich noch in den Aufgaben weiter unten ;-)

Anmerkung

Für eine Handvoll Bits...

Es ist an dieser Stelle wichtig zu erkennen, was für ein großer Aufwand betrieben wird, nur um ein einzelnes Datenwort von der Festplatte in den Hauptspeicher zu kopieren.

Aber: Wie groß ist so ein Datenwort eigentlich?

Es hat die Größe der Registerbreite des Datenregisters auf dem Festplatten-Controller, oder alternativ die Größe der Busbreite des Datenbusses, über das es übertragen wird. Mit hoher Wahrscheinlichkeit haben Register und Bus dieselbe Breite, vielleicht 32 oder 64 Bit (und auf neueren Systemen irgendwann mal 128 Bit).

Und: Wie groß ist heute eine übliche Datei, die ein Anwendungsprogramm enthält?

Das können schnell mehrere Megabyte sein, also ganz schön viele Datenwörter...

Hinweis

Weiterführende Literatur

erläutert in Kapitel 5 (Ein- und Ausgabe) weitere Hintergründe zum Thema. Die Lektüre dieser Quelle sei ausdrücklich empfohlen.

Studierende sind oftmals berechtigt, eine PDF-Version dieses Buches ohne entstehende Kosten über ihre Hochschulen von Springerlink zu beziehen.

Aufgabe

Aufgabe 2

Im Video wird gezeigt, wie die CPU wartet, und wartet, und wartet. Das ist natürlich keine gute Idee im Hinblick auf die Geschwindigkeit des Gesamtsystems.

  • Was könnte die CPU alternativ tun, während sie auf den Interrupt wartet?
  • Eigentlich ist das Betriebssystem gefordert, hier andere Tätigkeiten zu veranlassen. Welche fallen dir ein?

Aufgabe

Aufgabe 3

Im Video wird darauf verzichtet zu zeigen, wie sich Werte beispielsweise in den Registern PC oder IR (usw.) ändern, und welche Werte davon über das Bussystem übertragen werden.

  • Diskutiere dieses in deiner Lerngruppe!
  • Erklärt euch gegenseitig das Zusammenspiel aller Komponenten und Register.
  • Findest du auch ein Beispiel, welches die ALU einbezieht?
  • Was passiert mit PC und IR bei einem Interrupt?
  • Wie werden diese Register beim Abarbeiten der Interruptbehandlungsroutine belegt?
  • Was passiert mit diesen Registern am Ende der Abarbeitung der Interruptbehandlungsroutine (wenn im Video das ACK-IRQ-Signal zum Interrupt-Controller gesendet wird)?

Aufgabe

Aufgabe 4

Das Zustandsregister eines Controllers kann (u.a.) ein READY anzeigen, im Video ist das zu sehen. Es reicht ein Bit, um den Zustand READY zu kennzeichnen. Ist dieses Bit gleich 1, so gilt: der Controller ist READY für den nächsten Steuerbefehl. Gleiches gilt für den Zustand BUSY. Auch hierfür reicht ein Bit.

Für READY und BUSY werden im Zustandsregister demnach zwei Bit benötigt.

  • Kannst du dem zustimmen?
  • Oder gibt es eine sinnvolle Alternative?
  • Welche Alternative fällt dir ein?

Aufgabe

Aufgabe 5

Im Text dieser Seite wird erwähnt, dass die im Bild gezeigten Controller nur ein Register je Typ enthalten, dass es aber auch möglich ist, dass ein Controller mehrere Register eines Typs enthält.

  • Entwickle ein Szenario, in dem es sinnvoll mehrere Register eines Typs gibt!



Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png