3 Rechnerorganisation – Teil 1 3.1 Von-Neumann-Architektur

3  Rechnerorganisation – Teil 1 3.1   Von-Neumann-Architektur
3 Rechnerorganisation – Teil 1
3.1 Von-Neumann-Architektur
John von Neumann
Computer der ersten Generation waren riesige Geräte. So bestand zum Beispiel der
ENIAC (1943), ein aus Mitteln der amerikanischen Armee finanziertes Projekt, aus
18.000 Vakuumröhren und 1500 Relais, wog 30 Tonnen und verbrauchte 140 KW
an Strom.
Programmiert wurde der ENIAC durch Einstellen von bis zu 6000 mehrstelligen
Schaltern und durch Anschluss unzähliger Buchsen mit einem wahrhaften Wald an
Steckbrückenkabeln.
Im Jahre 1944 legte John von Neumann, ein ehemaliges Mitglied des ENIACProjektes, ein Architektur-Konzept für einen speicherprogrammierten
Universalrechner vor.
Von Neumann fiel auf, dass die Programmierung von Computern mit Unmengen von
Schaltern und Kabeln langsam, mühsam und unflexibel war.
Er erkannte, dass man das Programm mit den Daten im Speicher des Computers
in digitaler Form darstellen konnte, und er erkannte, dass man die schwerfällige,
serielle Dezimalarithmetik des ENIAC, bei der jede Ziffer mit zehn Vakuumröhren (1
On und 9 Off) dargestellt wird, durch parallele Binärarithmetik ablösen kann.
Von-Neumann-Architektur
Sein erster Entwurf ist heute als Von-Neumann-Maschine oder als Von-NeumannArchitektur bekannt.
Wie weitsichtig und visionär sein Konzept war, wird daran deutlich, dass auch
aktuellen Computern noch diese Architektur zugrunde liegt.
Eine Von-Neumann-Maschine weist die folgenden wichtigen Merkmale auf:
1. Ein programmgesteuerter Rechner besteht aus
a. zentraler Recheneinheit (CPU = Central Processing Unit) mit
 einer ALU (Arithmetical Logical Unit) und
 einer Steuereinheit
b. Speicher
c. Ein- und Ausgabe-Einheiten und
d. den internen Datenwegen (Busse)
2. Die Zahlen werden im Rechner binär dargestellt.
3. Die Struktur des Rechners ist unabhängig von dem zu bearbeitenden Problem
(--> Universalrechner). Die verschiedenen Aufgaben werden durch
entsprechende Programme gelöst.
21
4. Programme und von diesen benötigte Daten werden in einem gemeinsamen
Speicher abgelegt. Die Speicherplätze sind gleichlang und werden über
Adressen einzeln angesprochen.
5. Befehle geben nur die Speicheradresse an, wo die Daten abgelegt sind, und
nicht die Daten selbst.
Die bedeutendste Neuerung in der damaligen Zeit war von Neumanns Idee, das
Programm und die Daten zuerst in denselben Speicher zu laden und dann
auszuführen. Bis dahin war das Programm noch hardwaremäßig verschaltet oder
wurde über Lochstreifen schrittweise eingelesen und sofort (streng sequentiell)
bearbeitet. Nun war es möglich:
1. Sprünge einzuführen, sowohl auf vorhergehende wie spätere
Programmsequenzen, und
2. Programmcode während des Programmablaufes zu modifizieren
(allerdings eine sehr riskante, fehleranfällige Möglichkeit!).
Von Neumann erreicht also mit seinem Konzept, daß der Rechner selbstständig
logische Entscheidungen treffen kann.
Damit ist der Übergang vom starren Programmablauf zur flexiblen
Programmsteuerung oder, anders ausgedrückt, von der Rechenmaschine zur
Datenverarbeitungsanlage vollzogen.
Nachteile der von-Neumann-Architektur
Die von Neumann Architektur hat aber auch einige Nachteile:
1. Im Speicher kann man Befehle und Daten anhand des Bitmusters nicht
unterscheiden.
22
2. Im Speicher kann man variable und konstante Daten nicht unterscheiden.
3. Bei falscher Adressierung können Speicherinhalte verändert werden, die nicht
geändert werden dürfen, wie z.B. Befehle und Konstanten (Eine Bitänderung bei
einem Befehl erzeugt einen ganz anderen Befehl!)
4. Da Daten und Befehle im Speicher gehalten werden, wird die Verbindung und
Datenübertragung zwischen CPU und Speicher über den Systembus zum sog.
Von-Neumann-Flaschenhals.
Jeglicher Datenverkehr von und zur CPU wird über den internen Bus abgewickelt,
dessen Transfergeschwindigkeit langsamer ist, als die
Verarbeitungsgeschwindigkeit der CPU.
Dieses Problem versucht man in modernen PC's durch die Verwendung von
schnellem Cache-Speicher, der meist in der CPU integriert ist, abzuschwächen.
3.2 Merkmale und Komponenten der Von-Neumann Rechnerarchitektur
3.2.1 Zentrale Recheneinheit / Central Processing Unit
Die Zentrale Recheneinheit oder CPU stellt das "Gehirn" im System dar. Sie
besteht aus Recheneinheit und Steuereinheit.
Ein geschicktes Zusammenspiel der Steuereinheit mit der Recheneinheit sorgt dafür,
dass nacheinander die Befehle geholt und dann ausgeführt werden.
Für arithmetische Operationen, wie z.B. der Addition, oder logische Operationen, wie
z.B. AND und NOT, ist die Recheneinheit zuständig.
Die Recheneinheit hat eine feste Verarbeitungsbreite, z.B. 8, 16, 32 oder 64 Bit.
Man spricht dann von einem 8, 16, 32 oder 64-Bit System.
Recheneinheit oder ALU
Die Aufgabe der Recheneinheit besteht in der Bearbeitung der Daten, besonders
dem Ausführen von arithmetischen und logischen Operationen.
Steuereinheit
Zur wichtigsten Aufgabe der Steuereinheit gehört die Koordination der zeitlichen
Abläufe im Rechner. Dazu muss die Steuereinheit die Befehle aus dem Speicher
holen, entschlüsseln und deren Ausführung steuern. Die Steuereinheit besteht aus
Befehlsregister, Befehlsdecoder, Speicheradressregister und Befehlszähler.
1. Im Befehlsregister (IR=Instruction Register) befindet sich jeweils der aktuell
zu bearbeitende Befehl. Das Befehlsregister ist ein spezielles CPU-Register,
das vom Anwender nicht adressierbar ist.
2. Der Befehlsdecoder entschlüsselt den Befehl und erzeugt die zur Ausführung
notwendigen Hardware-Steuersignale
3. Im Speicheradressregister (MAR=Memory Adress Register) steht


die Adresse des nächsten auszuführenden Befehls oder
die Adresse eines Datenwortes, falls zur Ausführung eines Befehls ein
Datenwort vom Speicher geholt bzw. in den Speicher gebracht werden
muss
23

Der Befehlszähler (PC=Program Counter) übernimmt den Wert des
Speicheradressregisters und erhöht ihn entsprechend der
Befehlslänge.
Bei einem linearen Befehlsablauf kann das Speicheradressregister
diesen Wert als Adresse für den folgenden Befehl übernehmen; bei
einem Sprung ist die neue Adresse im Befehl selbst angegeben.
3.2.2 Speicher
Der Speicher eines von Neumann Rechners besteht aus einer Vielzahl von
Speicherzellen. Jede Speicherzelle kann ein Bit speichern.
Man faßt jeweils mehrere Zellen zu einer Speicherzeile oder einem Speicherwort
zusammen (z.B. bei einem 32-Bit System ergeben 32 Bit ein Speicherwort)
Um ein Speicherwort in einem Speicher ablegen und auch wiederfinden zu können,
zählt man die Speicherplätze vom Speicheranfang bis zum Ende durch, und zwar
byteweise. Diese Zahlen nennt man Adressen.
Man braucht also so viele Adressen, wie der Speicher Bytes enthält.
3.2.3 Interne Datenwege / Busse
Innerhalb eines von Neumann-Rechners entstehen Daten in verschiedenen
Hardware-Komponenten und werden dann in anderen Komponenten benötigt. Der
Transport dieser Daten erfolgt auf den sog. internen Datenwegen. Diese wollen wir
im Folgenden näher betrachten.
Die wichtigsten Busse sind 1) der Datenbus, 2) der Adressbus und 3) der
Steuerbus
1. Der Datenbus wird normalerweise parallel übertragen, d.h. bei einem 32-Bit
System besteht der Datenbus aus 32-Leitungen.
Der Datenbus überträgt die Daten, die über den Adressbus angefordert werden.
2. Der Adressbus besteht aus den Adressleitungen, deren Anzahl vom
Adressbereich der CPU abhängt.
Ein typischer Wert sind heute 32-Leitungen, um mit 32 Bit bis zu 4 GByte
adressieren zu können.
Über den Adressbus werden nur Adressen übertragen
3. Der Steuerbus ist der Teil des Bussystems, welcher die Steuerung des Busses
bewerkstelligt.
Hierzu zählen unter anderem die Leitungen für die Interrupt-Steuerung,
Buszugriffssteuerung, der Taktung (falls ein Bustakt erforderlich ist), Reset- und
Statusleitungen.
24
3.2.4 Ein-/Ausgabeeinheit
Eingabe-/Ausgabewerk steht im Konzept des Von-Neumann-Rechners für alle die
Komponenten, die den Computer mit "draußen" verbindet.
"Draußen" bedeutet dabei nicht „außerhalb des Gehäuses", sondern "nicht mehr zu
dem eigentlichen, universellen Von Neumann Rechner-Konzept gehörend".
In einem modernen PC verkörpert
der Prozessor das Rechenwerk und die Steuereinheit,
die Northbridge mit dem RAM den Speicher bzw. das Speicherwerk und
der Rest, angefangen mit der Southbridge, bildet das Eingabe/Ausgabewerk.
Eine Grafikkarte, für die allermeisten Rechner notwendiges Bauteil zur
Kommunikation mit dem Benutzer, ist bereits "draußen" – und heutzutage bereits ein
spezialisierter Rechner für sich.
Zu dem Ein-/Ausgabewerk gehören also z.B. der PCI-Bus für Einsteckkarten ebenso
wie die verschiedenen Schnittstellen für Peripheriegeräte und Festplatten.
3.3 Mainboard
Zentraler Bestandteil des Rechners ist das Mainboard (auch: Hauptplatine oder
Motherboard).
Auf dem Mainboard sind die einzelnen Bauteile wie die CPU (Hauptprozessor), der
Arbeitsspeicher (RAM), der Chip mit dem BIOS sowie verschiedene Steckplätze
und Schnittstellenbausteine montiert.


Es bietet Steckplätze für Grafikkarten (AGP oder PCI-Express)
Für PCI-Steckkarten (Soundkarte, Netzwerkkarte usw.)
Außerdem beherbergt das Mainboard den sog. Chipsatz. Der Chipsatz besteht in
der Regel aus Northbridge und Southbridge.
3.3.1 Systembus
Die oben genannten Erweiterungskarten stecken in den bereits erwähnten
Steckplätzen des Mainboards.
25
Diese Steckplätze sind untereinander und mit der Hauptplatine durch einen sog. Bus
(auch Systembus genannt) verbunden.
Hierbei handelt es sich um eine Serie paralleler Datenleitungen, über die Daten
zwischen Prozessor und Peripheriegeräten ausgetauscht werden.
Busse gibt es mit unterschiedlich vielen Leitungen und mit unterschiedlichen
Protokollen (oder Standards) zur Übertragung von Daten über diese Leitungen.
Die Leistungsfähigkeit eines Busses wird an der Anzahl von Bytes gemessen, die
in einer Sekunde übertragen werden können. Moderne Busse schaffen einige
hundert MByte pro Sekunde.
Da an dem Bus viele unabhängig und gleichzeitig arbeitende Peripheriegeräte
angeschlossen sind, muss auch der Buszugang durch einen Controller (den
Buscontroller) geregelt werden.
Die Standards für Technik und Datenübertragung des Busses haben sich in den
letzten Jahren sehr verändert. Einige dieser Standards heißen:





ISA (Industry Standard Architecture)
EISA (Extended ISA)
PCI (Peripheral Component Interconnect)
AGP (Accelerated Graphics Port)
(Ist strenggenommen kein Bus, da man nur genau ein Gerät anschließen
kann)
PCI-Express
Mit den Standards ändern sich auch die Steckplätze. Bis vor kurzem hatten aktuelle
Mainboards einen AGP-Steckplatz für Grafikkarten. Der AGP Steckplatz ist derzeit
aber bereits fast durch seinen leistungsfähigeren Nachkommen PCI-Express x16
ersetzt worden.
3.3.2 BIOS
Das Akronym BIOS steht für Basic Input Output System.
Das BIOS ist heutzutage in einem sogenannten Flash-EEPROM Baustein
gespeichert.
EEPROM steht für Electrically Erasable Programmable Read-Only Memory, d. h.
elektrisch löschbarer, programmierbarer Nur-Lese-Speicher.
Im diesem BIOS-Chip sind grundlegende und sehr elementare Hilfsprogramme
zur Ansteuerung der verschiedenen Hardwarekomponenten wie Tastatur, Maus,
Festplatte und Grafikcontroller abgelegt.
Die Programme werden auch als Interrupts (engl. für Unterbrechungen) bezeichnet,
weil Sie je nach Prioritätenstufe andere gleichzeitig laufende Programme
unterbrechen dürfen.
26
Jeder Tastendruck, jede Mausbewegung, führt zum Aufruf eines Interrupts. Dabei
werden die Parameter des aufgetretenen Ereignisses ermittelt und es wird ggf.
darauf reagiert.
Der Boot-Vorgang
Zusätzlich enthält das BIOS Programme, die nach dem Einschalten des Rechners
ausgeführt werden. Dazu gehört eine Prüfung, welche Geräte angeschlossen sind,
ein Funktionstest des Hauptspeichers und das Laden des Betriebssystems von
Festplatte, Netzwerk, Diskette oder CD-Rom.
Dies ist ein mehrstufiger Prozess


ein Programm im BIOS lädt und startet ein Ladeprogramm (loader)
Dieses Ladeprogramm lädt das eigentliche Betriebssystem.
Diesen Vorgang nennt man booten
(von engl. bootstrapping = Schuh schnüren.
Eine andere Geschichte behauptet, booten stamme aus den Geschichten von Baron
Münchhausen, der sich in der englischen Fassung nicht an den eigenen Haaren,
sondern an den eigenen Schnürsenkeln=boot straps aus dem Sumpf gezogen hat.)
Verbindung zwischen Betriebssystem und Hardware
Das BIOS stellt also (gemeinsam mit den Treibern) gewissermaßen die Brücke
zwischen der angeschlossenen Hardware und dem Betriebssystem dar.
27
3.3.3 CPU
Die CPU (oder auch Prozessor) ist das Kernstück eines Computers. Er dient der
Verarbeitung von Daten, die sich in Form von Bytes im Speicher des Rechners
befinden.
Zwei wesentliche Bestandteile der CPU sind Register und ALU (arithmetical logical
unit).
Die ALU ist eine komplizierte Schaltung, welche die eigentlichen mathematischen
und logischen Operationen ausführen kann.
Register sind extrem schnelle Hilfsspeicherzellen, die direkt mit der ALU verbunden
sind.
Die ALU-Operationen erwarten Ihre Argumente in bestimmten Registern und liefern
ihre Ergebnisse wieder in Registern ab.
Auch der Datentransfer vom Speicher zur CPU läuft durch die Register.
Üblicherweise sind diese Register 32 oder 64 Bit breit. Man spricht dann von einem
32-Bit oder einem 64 Bit Prozessor, meint damit aber mehrere, eigentlich zu
unterscheidende Aspekte:

D: Die Anzahl der Datenbits, die von dem verwendeten Prozessor in einem
arithmetischen Befehl verknüpft werden können.
(Breite der Register)

S: Die Anzahl der Bits, die von einem LOAD- oder STORE-Befehl
gleichzeitig zwischen dem Speicher und einem CPU-Register transportiert
werden können
(s. Datenbus).

A: Die Anzahl der Bits, die zur Adressierung verwendet werden können.
(s. Adressbus)
Cache Speicher
Der Cache-Speicher der CPU ist ein schneller Puffer-Speicher, in welchen ständig
Kopien des Hauptspeichers vorgehalten werden, die möglicherweise als nächstes
von der CPU benötigt werden.
Die Ziele beim Einsatz eines Caches sind eine Verringerung der Zugriffszeit bzw.
eine Verringerung der Anzahl der Zugriffe auf den zu cachenden Speicher.
Ein weiterer eher nebensächlicher Effekt beim Einsatz von Caches ist die verringerte
Bandbreitenanforderung an die nächsthöhere Speicherebene der
Speicherhierarchie. Dadurch, dass oftmals der Großteil der Anfragen vom Cache
beantwortet werden kann (sog. Cache-Hit), sinkt die Anzahl der Zugriffe und damit
die Bandbreitenanforderung an den zu cachenden Speicher. Ein moderner
28
Mikroprozessor ohne Cache würde selbst mit unendlich kleiner Zugriffszeit des
Hauptspeichers dadurch ausgebremst, dass nicht genügend Speicherbandbreite zur
Verfügung steht, weil durch den Wegfall des Caches die Anzahl der Zugriffe auf den
Hauptspeicher und damit die Anforderung an die Speicherbandbreite stark
zunehmen würde.
Bei CPUs kann der Einsatz von Caches somit zum Verringern des Von-NeumannFlaschenhals der Von-Neumann-Architektur beitragen. Die
Ausführungsgeschwindigkeit von Programmen kann dadurch im Mittel enorm
gesteigert werden.
Ein Nachteil von Caches ist das schlecht vorhersagbare Echtzeitverhalten, da die
Ausführungszeit eines Befehls aufgrund von Cache-Misses nicht immer konstant ist.
Cache Hierarchie
Da Cache-Speicher zwar sehr schnell, aber auch sehr teuer ist, ist es (aus
kostengründen) nicht ohne weiteres möglich, einen Cache zu bauen, der gleichzeitig
sowohl groß als auch schnell ist.
Man kann aber mehrere Caches verwenden - z. B. einen kleinen schnellen und
einen großen langsameren Cache (der aber immer noch Größenordnungen schneller
ist als der zu cachende Speicher). Damit kann man die beiden konkurrierenden Ziele
von geringer Zugriffszeit und Cachegröße bei vertretbaren Kosten realisieren.
Existieren mehrere Caches, so bilden diese eine Cache-Hierarchie, die Teil der
Speicherhierarchie ist. Die einzelnen Caches werden als Level-1 bis Level-n
durchnummeriert (kurz: L1, L2 usw.).
Die niedrigste Nummer bezeichnet hierbei den Cache mit der kleinsten Zugriffszeit welcher also als erstes durchsucht wird.
Enthält der L1 Cache die benötigten Daten nicht, so wird der nächste (meist etwas
langsamere, aber größere) Cache (also der L2) durchsucht usw. Das geschieht
solange, bis die Daten entweder in einem Cache-Level gefunden oder alle Caches
ohne Erfolg durchsucht wurden (Cache Miss).
In diesem Fall muss auf den verhältnismäßig langsamen Speicher zugegriffen
werden.
Moderne CPUs haben meist zwei oder drei Cache-Levels. Mehr als drei ist eher
unüblich. Festplatten haben nur einen Cache.
Prozessor-Cache
Bei CPUs kann der Cache direkt im Prozessor integriert, d.h. On-Die (bei aktuellen
Prozessoren bis zu 4MB L2-Cache) oder extern auf der Hauptplatine oder auf der
Prozessorplatine (z.B. beim Pentium II - Slot1) platziert sein.
Je nach Ort des Caches arbeitet dieser mit unterschiedlichen Taktfrequenzen: Der L1
ist fast immer direkt im Prozessor integriert und arbeitet daher mit dem vollen
29
Prozessortakt, also meist mit mehreren Gigahertz.
Ein externer Cache hingegen wird oftmals nur mit einigen hundert Megahertz
getaktet.
Gängige Größen für L1-Caches sind 4 bis 256 KB und für den L2 256 bis 4096 KB.
Bei aktuellen CPUs ist der L1- und der L2-Cache direkt auf dem Prozessor-Kern
(Die) integriert.
Prozessor-Hersteller
Die beiden wichtigsten Prozessor-Hersteller sind Intel (z.B. Pentium 4, Core 2 Duo
u.a.) und AMD (Athlon XP, Athlon64, Athlon64 X2 u.a.).
Jeder Hersteller verwendet mittlerweile einen eigenen Prozessor-Sockel:

Bei Intel ist der aktuellste Sockel zur Zeit der Sockel 775.
In diesen Sockel passen Pentium 4, Pentium D, und Core 2 Duo Prozessoren.

Die aktuellsten Sockel bei AMD sind zur Zeit der Sockel 939 und der neue
Sockel AM2.
In den Sockel 939 passen Athlon64, Athlon64 X2 und Opteron Prozessoren.
Auch für den Nachfolger, den Sockel AM2, gibt es passende Athlon64 und
Athlon64 X2 Modelle.
3.3.4 Arbeitsspeicher / RAM (Random Access Memory)
Im Hauptspeicher/Arbeitsspeicher/RAM eines Computers werden Programme und
Daten abgelegt.
Die Daten werden von den Programmen bearbeitet. Der Inhalt des RAM's ändert
sich ständig - insbesondere dient der Arbeitsspeicher nicht der permanenten
Speicherung von Daten. Fast immer ist er aus Speicherzellen aufgebaut, die ihren
Inhalt beim Abschalten des Computers verlieren.
Der Arbeitsspeicher ist also ein flüchtiges oder volatiles Speichermedium. Beim
nächsten Einschalten werden alle Bits des Arbeitsspeichers auf ihre
Funktionsfähigkeit getestet und dann auf 0 gesetzt.
Die Bits des Arbeitsspeichers sind byteweise organisiert. Jeder Befehl kann
immer nur auf ein ganzes Byte zugreifen, um es zu lesen, zu bearbeiten oder zu
schreiben.
Den 8 Bits, die ein Byte ausmachen, kann noch ein Prüfbit beigegeben sein. Mit
dessen Hilfe überprüft der Rechner ständig den Speicher auf Fehler, die z.B. durch
eine Spannungsschwankung oder einen Defekt entstehen können.
Diese Fehlerüberprüfung funktioniert nach dem selben Prinzip wie das Prüfbit beim
ASCII-Code.
die Speicherhardware setzt und liest das Prüfbit automatisch.
Meist setzt diese das Prüfbit so, dass die Anzahl aller Einsen in dem gespeicherten
Byte zusammen mit dem Prüfbit geradzahlig wird (even parity), daher heißt das
30
Prüfbit auch Parity-Bit.
Wird ein Bit durch einen Fehler oder Defekt verändert, erkennt das die
Speicherhardware daran, daß die Anzahl der Einsen ungerade wird.
Diese sog. ECC-Fehlerkorrektur wird vorwiegend im Server-Bereich eingesetzt.
Die Verwendung von Prüfbits verliert allerdings seit einiger Zeit wegen der höheren
Zuverlässigkeit der Speicherbausteine an Bedeutung.
Speichertypen
Es gibt grundsätzlich zwei Typen von Speicherzellen:


Dynamisches RAM oder DRAMs und
Statisches RAM oder SRAMs.
DRAMs speichern die elektrische Ladung in Kondensatoren, die periodisch wieder
aufgefrischt werden müssen, da sich die gespeicherte Information aufgrund von
Leckströmen mit der Zeit verflüchtigt.
Aus diesem Grund sind DRAMs langsamer (aber dafür billiger) als SRAMs und
werden hauptsächlich für den Hauptspeicher verwendet.
SRAMs haben die Fähigkeit, ihre Inhalte zu behalten, solange der Strom fließt:
Sekunden, Minuten, Stunden oder gar Tage. SRAMs sind sehr schnell, die typischen
zugriffszeiten betragen nur wenige Nanosekungen. Aus diesem Grund sind werden
sie häufig als Cache-Speicher der Ebene 2 (Second Level Cache oder L2 Cache)
verwendet.
Cache Speicher stellt eine Möglichkeit dar, das Problem des Von-Neumann
Flaschenhalses zu mildern.
Der schnelle Cache steht dem Prozessor als Puffer zur Verfügung. In diesem
Speicher wird immer ein gewisser Teil des Arbeitsspeichers vorgehalten, so daß
die Datenübertragung vom und zum Prozessor beschleunigt wird, da die Lese- und
Schreibzugriffe beim Cache schneller sind, als beim Hauptspeicher.
Für Arbeitsspeicher kommt heutzutage eine verbesserte Version des DRAM zum
Einsatz:

SDRAM (Synchronous Dynamic RAM), dessen Taktrate optimal auf die CPU
abgestimmt ist.

DDR-SDRAM (Double Data Rate) stellt eine Weiterentwicklung von SDRAM
dar.
Bei DDR-SDRAM wird im Vergleich zu SDRAM innerhalb eines Taktes die
doppelte Menge an Daten übertragen.
31
Technische Realisierung
Technisch wird der Arbeitsspeicher heutiger Computer aus speziellen Bauelementen,
den Speicherchips aufgebaut.
Diese werden nicht mehr einzeln, sondern als Speichermodule angeboten.
Dabei sind jeweils mehrere Einzelchips zu sogenannten SIMM- oder DIMMModulen (single/dual inline memory module) zusammengefasst.
Das sind kleine Mini-Platinen mit 72 Pins auf einer Seite der Steckverbindung
(SIMM) oder mit 168 Pins, d.h. je 84 Pins auf beiden Seiten (DIMM), auf denen
jeweils 8 oder 9 gleichartige Speicherchips sitzen.
Gängige Taktfrequenzen für DDR-SDRAM sind:







DDR-266 mit 133 MHz, d.h. 266 MHz effektivem Takt (2,1 GByte/s
DDR-333 mit 166 MHz, d.h. 333 MHz effektivem Takt (2,7 GByte/s)
DDR-400 mit 200 MHz, d.h. 400 MHz effektivem Takt (3,2 GByte/s)
DDR2-1066 mit 533 MHz , d.h. 1066 MHz effektivem Takt
3.3.5 Northbridge
Die Northbridge ist in modernen Computersystemen für den
Hochgeschwindigkeits-Datenaustausch verantwortlich.
So enthält in den meisten PC-Systemen die Northbridge unter anderem den
Speichercontroller, der den Datentransfer zwischen CPU und Hauptspeicher
verwaltet.
Der Speichercontroller ist über den sog. Frontsidebus (FSB) an die CPU
gekoppelt.
Außerdem synchronisiert der Chip der Northbridge noch den Datentransfer und die
Datensteuerung zwischen CPU und AGP- und/oder PCI-Express Grafikkarte.
In neueren Systemen ist der Speichercontroller nicht mehr Bestandteil der
Northbridge, sondern direkt in den Prozessor integriert (z.B. Athlon64).
Auf diese Weise wird der Datentransfer zwischen CPU und Speicher zusätzlich
beschleunigt, da die "externe" Verbindung zwischen CPU und Northbridge (FSB)
wegfällt, wodurch die entstehenden Latenzen beim Speicherzugriff deutlich reduziert
werden können.
Die Northbridge ist über den PCI-Bus, über PCI-X (schnellere 64Bit Variante von
PCI) , oder über eine andere proprietäre Schnittstelle wie z.B. Hypertransport an
die Southbridge angebunden.
32
Northbridge und Southbridge bilden zusammen den Chipsatz.
3.3.6 Southbridge
Neben der Northbridge ist die Southbridge der wichtigste Bestandteil des
Chipsatzes.
Während die Northbridge die Verbindung zwischen CPU und Arbeitsspeicher
darstellt ist die Southbridge für den Datentransfer und die Datensteuerung zwischen
peripheren Geräten (PCI-Steckkarten, IDE-Laufwerke wie Festplatten und CD/DVD-ROM) zuständig.
Die Southbridge kontrolliert neben den angeschlossenen Laufwerken auch die
Maus und die Tastatur, sowie verschiedene über USB angeschlossene Geräte,
wie z.B. Drucker, Scanner usw.
Außerdem sind heutzutage oft Peripheriegeräte bereits in die Southbridge
integriert, wie z.B. OnBoard-Soundlösungen und LAN-Schnittstellen.
In moderneren Systemen kann die Southbridge sogar direkt in die Northbridge
integriert sein, so z.B. bei nVidia's nForce4 Chipsatz.
Die Bezeichnungen Northbridge und Southbridge resultieren aus der räumlichen
Anordnung der jeweiligen Chips auf dem Mainboard.
Dreht man die Platine so, daß der Prozessorsockel oben ist, liegt die Northbridge
33
näher an der CPU, also "im Norden der Platine", während die Southbridge weiter
"südlich" im unteren Teil der Platine zu finden ist.
3.3.7 PCI-Bus
PCI steht für Peripheral Component Interconnect und dient folgerichtig zur
Verbindung von Peripheriegeräten mit dem Chipsatz (Northbridge+Southbridge)
und dem Prozessor.
Der PCI-Bus ist Industriestandard und fester Bestandteil von IBM-kompatiblen PC's,
Apple Macintoshs.
Der PCI-Bus System wurde von Intel im Jahr 1990 entwickelt, um den zu langsam
gewordenen ISA- und dessen Nachfolger, den EISA-Bus abzulösen.
Der ursprüngliche PCI-Bus übertrug 32 Bit pro Zyklus und lief mit 33 Mhz (d.h. einer
Zykluszeit von 30 ns).
Die Bandbreite betrug insgesamt 133 Mbyte/s.
1993 wurde der PCI 2.0 eingeführt, und 1995 kam PCI 2.1 heraus. PCI 2.2 hat
Eigenschaften, die ihn für mobile Computer geegnet machen (vorwiegend solche zur
Einsparung von Batteriestrom). Mittlerweile liegt PCI 2.3 vor.
Der PCI-Bus läuft mit bis zu 66 Mhz und handhabt 64 Bit-Transfers. Somit hat er
eine Bandbreite von 528 Mbyte/s.
Ursprünglich waren auch Grafikkarten über den PCI-Bus ins System eingebunden.
Allerdings reichte die maximale Bandbreite des Busses mit den steigenden
Anforderungen der sich rasch weiterentwickelnden 3D-Grafik nicht mehr aus, nicht
zuletzt deswegen, weil sich aufgrund der Bus-Struktur, mehrere Geräte die
Bandbreite teilen müssen.
34
Als Lösung des Bandbreitenproblems für Grafikkarten wurde deswegen der
Accelerated Graphics Port - kurz AGP - entwickelt.
3.3.8 Accelerated Graphics Port (AGP)
3D-Grafik ist aus keinem Anwendungsbereich mehr weg zu denken. Ob Forschung,
Unterhaltung oder Multimedia, alles setzt auf 3D-Visualisierung.
Echtzeit-3D Grafik benötigt jedoch große Datenmengen. Diese Datenmengen waren
irgendwann zu groß, um vom bereits leicht betagten PCI-Bus bewältigt zu werden,
der sich im Laufe der Zeit als Engpass für die Grafikausgabe herausstellte.
Vor allem deshalb, weil der PCI ein Bus ist, den sich mehrere Erweiterungskarten
und evtl. die Southbridge (die ebenfalls über den PCI-Bus mit der Northbrdige
verbunden war) teilen müssen.
Mitte des Jahres 1996 begann ein Konsortium von Mainboard- und
Grafikkartenherstellern unter der Führerschaft von Intel mit der Entwicklung des
AGP.
Der Accelerated Graphics Port ist weder ein Ersatz für den PCI-Bus noch eine
Erweiterung. Zudem ist er strenggenommen auch kein Bus.
Er ist eine einzelne Punkt-zu-Punkt-Verbindung zwischen Grafikkarte und
Chipsatz (i.e. der Northbridge)
Der AGP ist ein spezielles Interface für die Kopplung von Prozessor,
Hauptspeicher und Grafikkarte.
Um auch Speicherzugriffe an der CPU vorbei zu ermöglichen (und so für Entlastung
des Prozessors zu sorgen), bekommt der AGP vom System-BIOS exklusiv einen
bestimmten Speicherbereich im Hauptspeicher zugewiesen. Dieser Speicher wird
in der AGP-Spezifikation AGP-Aperture genannt.
Allerdings sind Lese- und Schreibzugriffe auf den Hauptspeicher bedeutend
langsamer als auf den lokalen Speicher der Grafikkarte
Der AGP hat eine Breite von 32 Bit und einen Takt von 66 Mhz und somit
ursprünglich eine Bandbreite von 266 MBytes.
In weiteren Ausbaustufen der AGP-Spezifikation wurden die Übertragungsraten
weiter angehoben:



AGP 2x --> 532 MBytes/s
AGP 4x --> 1,06 GByte/s
AGP 8x --> 2,1 GByte/s
Mit der neuesten Version AGP 8x ist das Ende der Fahnenstange erreicht, da sich,
auf Grund von Timing-Problemen bei hohen Taktungen, die durch die parallele
Datenübertragung entstehen, und dem dadurch zunehmend komplizierter
werdenden Platinendesign, die Geschwindigkeit nicht weiter steigern lässt.
35
Dazu kommt noch, dass heutige Grafikkarten über so viel eigenen Speicher
verfügen, dass sie nur noch verhältnismäßig selten auf den Hauptspeicher zugreifen
müssen.
Im Vergleich zum Grafikspeicher ist der Arbeitsspeicher des PCs relativ langsam.
AGP war als schnelle Punkt-zu-Punkt-Verbindung zum Arbeitsspeicher sinnvoll,
solange schnelles VRAM (Video RAM oder Grafikspeicher) auf der Grafikkarte
übermäßig teuer war, was heute nicht mehr der Fall ist.
Seit Mitte 2006 wurden kaum noch neue Hauptplatinen mit Unterstützung für den
AGP vorgestellt. Stattdessen verwenden die meisten Hersteller den schnelleren PCIExpress-Port auf ihren Hauptplatinen.
3.3.9 PCI-Express
PCI-Express (Peripheral Component Interconnect Express) (Abk. PCIe od. PCI-E)
ist der Nachfolger von PCI und AGP und bietet eine höhere Datenübertragungsrate.
PCIe ist im Gegensatz zum PCI-Bus kein paralleler Bus, sondern eine serielle
Punkt-zu-Punkt-Verbindung.
Die Datenübertragung erfolgt über sogenannte Lanes (dt. Spuren, Wege), wobei
jede Lane aus einem Leitungspaar für das Senden und einem zweiten Paar für das
Empfangen besteht.
Trotz dieses völlig anderen physischen Aufbaus ist PCIe softwareseitig voll
kompatibel zu PCI, sodass weder Betriebssysteme, noch Treiber, noch
Anwendungsprogramme angepasst werden müssen.
PCIe ist vollduplexfähig und arbeitet mit einer Taktrate von 1,25 GHz DDR
(effektiven 2,5 GHz).
Daraus berechnet sich die Datenrate einer Lane zu max. 250 MByte/s pro
Richtung, da für ein 8 Bit-Paket ein 10-Bit Paket übertragen wird, in dem 2 Bit für
36
Verwaltungszwecke eingesetzt werden.
Zählt man beide Richtungen zusammen erhält man sogar ca. 500 MByte/s (zum
Vergleich: der Standard-PCI Bus mit 32-Bit Busbreite bei 33 MHz erreicht nur
maximal 133 MByte/s).
Verwendet man nur eine Lane, spricht man von PCIe x1.
Durch Koppelung mehrerer Lanes kann man die Datenrate erhöhen, etwa x2 mit
2 Lanes bis zu x32 mit 32 Lanes. Die PCI-SIG (Special Interest Group) plant
darüberhinaus zukünftig auch Versionen mit 500 und 1000 MByte/s pro Lane.
Im Endnutzerbereich wird PCIe x1 als Ersatz für den PCI-Bus und PCIe x16 zur
Anbindung einer Grafikkarte verwendet (PCI-Express For Graphics, PEG), was
somit auch den AGP überflüssig macht.
PEG oder PCIe x16 bietet eine Bandbreite von 4 GByte/s in jede Richtung, also
insg. 8 GByte/s.
Die Slots sind außerdem abwärts kompatibel, d.h. eine x4 Karte kann z.B. auch in
einen x8 Slot gesteckt werden, die überzähligen vier Lanes werden dann nicht
genutzt.
Umgekehrt ist dies momentan nur bei SLI (Scalable Link Interface) üblich.
Denn obwohl die Slots für die Grafikkarten die Größe von x16 Slots haben, werden
beim Einsatz von zwei Grafikkarten die 16 Lanes auf beide Slots verteilt, so daß jede
Grafikkarte nur 8 Lanes zur Verfügung hat, falls das Mainboard bzw. der darauf
verbaute Chipsatz keine vollwertigen x16 Slots für beide Grafikkarten bereitstellt.
3.3.10
IDE (ATA/ATAPI)
IDE bedeutet Integrated Drive Electronics.
Im Unterschied zu den Festplatten der ersten Generation, ist der FestplattenController nicht mehr auf einer zusätzlichen Steckkarte untergebracht, sondern in
die Festplatte integriert.
Die Weiterentwicklung von IDE ist EIDE (Extended IDE).
Die (E)IDE-Schnittstelle bezeichnet man oft auch als ATA-Schnittstelle (Advanced
Technology Attachment), allerdings ist EIDE und ATA nicht dasselbe:

(E)IDE definiert den Anschluß der Laufwerke, wie Pinbelegung, Stecker,
Kabel und elektrische Signale.

ATA definiert das Protokoll, anhand dessen die Daten über die Leitungen
übertragen werden.
Der Datentransfer zwischen Peripherie und Hauptspeicher kann entweder über die
CPU oder über das sogenannte Bus Mastering ausgeführt werden.
37
Bus Mastering ist das effektivere Verfahren, weil durch direkten Speicherzugriff
(Direct Memory Access: DMA) die CPU entlastet wird.
Für den Datentransfer gibt es zwei Protokolltypen:
1.
2.
Den älteren PIO-Modus (Programmed Input/Output)
den neueren UDMA-Modus (Ultra Direct Memory Access)
Beim PIO-Modus ist der Prozessor für jeden Lese- und Schreibvorgang
verantwortlich.
Der UDMA-Modus kann über den DMA-Controller direkt auf den Arbeitsspeicher
zugreifen. So kann der Prozessor sich um andere Aufgaben kümmern. Das gesamte
System läuft schneller.
Modus
IDE (ATA-1) PIO 0
IDE (ATA-1) PIO 1
IDE (ATA-1) PIO 2
IDE Multiword-DMA 0
IDE Multiword-DMA 1
IDE Multiword-DMA 2
E-IDE (Fast ATA-2) PIO 3
E-IDE (Fast ATA-2) PIO 4
Bandbreite
3,33 MByte/s
5,22 MByte/s
8,33 MByte/s
4,16 MByte/s
13,33 MByte/s
16,66 MByte/s
11,11 MByte/s
16,66 MByte/s
Einführung
1989
1994
Der Ultra-DMA-Modus (Ultra-ATA) unterstützt höhere Datenübertragungsraten und
besitzt eingebaute Sicherheitsmechanismen.
Zusätzlich wird die Belastung des Prozessors bei der Datenübertragung durch das
sog. Bus-Mastering reduziert.
Das Bus-Mastering ist ein Datentransfer-Verfahren für die Übertragung von Daten
und Befehlen, bei dem der Host-Controller direkt auf dem Arbeitsspeicher zugreift,
ohne den Prozessor zu belasten.
Für alle Ultra-ATA-Festplatten (133/100/66) wird ein UDMA-Kabel benötigt. Dieses
Flachbandkabel hat 80 Leitungen. 40 für den Datenverkehr und 40 für die Erdung.
Der Ultra-DMA-Standard 133 ist abwärtskompatibel. An diesen Controllern lassen
sich auch andere Ultra-ATA-Festplatten (66 und 100) betreiben.
Modus
Bandbreite
Einführung
16,66 MByte/s
1996
Ultra-DMA 0 (ATA-16 / ATA-3)
25,0 MByte/s
Ultra-DMA 1 (ATA-25)
33,33 MByte / sek.
1997
Ultra-DMA 2 (ATA-33 / ATA-4)
44,4 MByte / sek.
Ultra-DMA 3 (ATA-44)
1999
Ultra-DMA 4 (Ultra-ATA-66 / ATA-5) 66,66 MByte / sek.
Ultra-DMA 5 (Ultra-ATA-100 / ATA-6)99,99 (100) MByte / sek.2000
2001
Ultra-DMA 6 (Ultra-ATA-133 / ATA-7)133 MByte / sek.
38
Konfiguration von EIDE-Geräten
An einen (E)IDE-Strang können maximal 2 Geräte angeschlossen werden.
Das Master-Gerät wird am Kabelende angesteckt. Der Jumper sollte hinten am Gerät
auf Master (M) gesteckt sein. Ein zweites Gerät kommt an den zweiten Stecker, in
der Mitte des Kabels. Dies wird als Slave betrieben. Entsprechend sollte der Jumper
(S) gesteckt sein.
Bei der Verwendung von Cable Select (CS) muss bei beiden Geräten entsprechend
der Jumper gesteckt sein. Die Position bzw. die Betriebsart wird in diesem Fall über
eine (nicht) durchverbundene Ader im Flachbandkabel eingestellt. In manchen
Gerätekonstellationen funktioniert diese Automatik nicht. Deshalb ist angeraten in
jedem Fall die manuelle Einstellung vorzunehmen. Bei nur zwei Geräten ist das auch
kein Problem.
Die Software-Konfiguration von Festplatten und Laufwerken wird im BIOS
vorgenommen. Dort stellt man den EIDE-Anchluß auf Auto-Detect (Autoerkennung)
ein. Erst wenn diese Einstellung fehlschlägt, dann kommt man um das manuelle
Eintragen der Festplatten oder Laufwerks-Parameter nicht herum. Im Regelfall ist
das nicht notwenig.
ATAPI - Advanced Technology Attachment with Packet Interface
ATAPI bedeutet Advanced Technology (AT) Attachment with Packet Interface
und ist ein Erweiterung des Befehlssatzes ATA zum Anschluss eines CD-RomLaufwerks oder eines anderen Wechsel-Laufwerks (z. B. ZIP-Drive) an die EIDESchnittstelle.
Im aufkommenden Multimedia-Zeitalter wurden Computer mit CD-Rom-Laufwerken
als Wechsel-Massenspeicher ausgestattet. Mit dem Laufwerk wurde auch eine CDRom-Controller-Steckkarte in den Computer eingebaut. Jeder CD-Rom Hersteller
lieferte seine eigene, speziell für seine eigenen CD-Rom-Laufwerke, eine ControllerKarte mit.
Als Zwischenstufe wurden Soundkarten mit den 3 bis 4 wichtigsten Schnittstellen
onboard ausgestattet. Auf die Dauer, und mit dem einsetzenden CD-Rom-Boom,
wurde das aber zu teuer. Außerdem waren die proprietären Schnittstellen nicht
schnell genug, um die Aufgaben in einem Multimedia-Computer erledigen zu können.
Die Lösung war, CD-Rom-Laufwerke entweder an den SCSI-Bus oder die EIDESchnittstelle anzuschließen. Für die billigen Consumer-Computer wurde die EIDESchnittstelle gewählt.
Dabei gab es aber ein Problem: Für jedes Gerät, das an der EIDE-Schnittstelle
angeschlossen ist, wird ein fester Laufwerksbuchstabe vergeben. Und somit ist es
kein Wechsel-Laufwerk mehr. Der CD-Rom-Wechsel würde einen Neustart des
Computers nach sich ziehen.
Aus diesem Grund wurde der ATAPI-Befehlssatz entwickelt um CD-ROMs über die
EIDE-Schnittstelle steuern zu können. Das BIOS ist sogar in der Lage das
Betriebssystem von einer CD-ROM oder DVD zu booten.
39
CD- oder DVD-Laufwerke werden nun ohne einen speziellen Treiber erkannt und
ins System eingebunden. Für ältere Modelle mußte man immer einen zusätzlichen
Treiber für die Controller-Karte installieren.
3.3.11
S-ATA (Serial ATA)
Schnittstellen für Massenspeicher waren bisher immer in paralleler
Ausführung.
Mit zunehmender Übertragungsgeschwindigkeit ergeben sich
technische Schwierigkeiten, die für die Übertragungsrate eine
obere Grenze setzen:

Bei parallelen Bussen wird es bei höheren Übertragungsraten immer
schwieriger, den Datenfluss auf allen Leitungen synchron zu halten
Je länger ein Kabel ist, desto eher treten Laufzeitdifferenzen zwischen den
parallelen Signale auf. Dies kann nur durch eine kürzere Übertragungsstrecke
oder eine geringere Taktrate verhindert werden.

Zusätzliche Masseleitungen führen zu dicken und unflexiblen Flachband- oder
Rundkabeln, die die Luftströmung innerhalb eines Computers verhindert.
Serial-ATA hat sich aus dem älteren ATA, auch IDE genannten, Standard
entwickelt. Zu Gunsten der Leistungsfähigkeit entschied man sich, von einem
parallelen Busdesign zu einem bit-seriellen Bus überzugehen, d. h., dass die
Daten seriell übertragen werden (Bit für Bit) und nicht, wie bei den alten ATAStandards, in 16-Bit-Worten.
Mit 150 MByte/s hat S-ATA direkt an die parallele ATA-Schnittstelle (P-ATA) mit 133
MByte/s angeknüpft. Die Serial-ATA-Schnittstelle unterstützt 1,5 GBit/s bei einer
Nettodatenrate von ca. 150 MByte/s.
Um die Kompatibilität zu gewährleisten werden die parrallel vorliegenden Daten
mit Wandlern in serielle Datenströme konvertiert. Die hohe Integrationsdichte und die
extrem schnelle interne Verarbeitungsgeschwindigkeit in integrierten Schaltungen
erlauben die Wandlung in nahezu Echtzeit.
Gegenüber seinem Vorgänger besitzt S-ATA drei Hauptvorteile:
1. höhere Datentransferrate,
2. vereinfachte Kabelführung und
3. Hot-Plug-Fähigkeit zum Austausch von Datenträgern im laufenden Betrieb
(im Serverbereich wichtig).
Seit der Einführung von Serial-ATA wird der bisherige ATA-Standard häufig als
Parallel ATA (P-ATA) bezeichnet, um Verwechslungen zu vermeiden.
Auf neueren Hauptplatinen findet man zu den üblichen zwei
P-ATA-Steckplätzen zusätzlich zwei bis acht S-ATA-Anschlüsse für Festplatten.
40
S-ATA nutzt auf der Link-Layer-Schicht (Kabel) eine Punkt-zu-Punkt Verbindung.
Jedes Gerät hat also seinen eigenen Anschluss.
S-ATA ist nicht auf Festplatten beschränkt, mittlerweile gibt es z. B. auch SATABandlaufwerke, DVD-Laufwerke und -Brenner.
S-ATA II (Serial ATA II)
S-ATA II bietet eine maximale Geschwindigkeit von 300 MByte/s und ist damit
theoretisch doppelt so schnell wie S-ATA.
Das "theoretisch" bezieht sich darauf, daß die Geschwindigkeit zur Zeit nicht von
der Datenübertragung begrenzt ist, sondern durch die Festplattenmechanik.
Festplatten mit 10.000 Umdrehungen in der Minute (U/min) liefern rund 75 MByte/s
an Daten. Die Schnittstellengeschwindigkeit reicht also auch für die Zukunft locker
aus.
S-ATA II bietet einige zusätzliche Features im Vergleich zu S-ATA:

Native Command Queuing (NCQ)
ist eine Technologie für Festplatten, die die Geschwindigkeit verbessert.
Sie ermöglicht, dass mehrere Anfragen gleichzeitig an die Festplatte
abgesetzt werden und diese dann selbst entscheidet, welche Anfrage sie zu
erst abarbeitet. Durch die Vermeidung unnötiger Kopfbewegungen kann so
der Durchsatz und vor allem die Latenz verbessert werden. Das Laufwerk
selbst, der Controller und der Treiber müssen Command Queuing
unterstützen, um es zu nutzen.
(Weitere Informationen zu NCQ auf TomsHardware.de)

eSATA (external SATA)
für externe Laufwerke, maximale Kabellänge 2m.
eSATA verwendet andere, stärker abgeschirmte Kabel, um externe Geräte
vor elektromagentischen Störungen zu schützen. So soll die sichere
Übertragung über 2m ermöglicht werden.

Port Multiplier
Über diesen Mechanismus kann der Punkt-zu-Punkt-Datenstrom auf
mehrere Geräte aufgeteilt werden.
Bis zu 15 Geräte lassen sich an einem SATA-II-Port betreiben.
Bei 4 Geräten mit ca. 70 MByte/s würden 3 G/Bit/s ausreichen, um alle
Geräte ohne Geschwindigkeitsverlust bedienen zu können.
3.3.12
USB (Universal Serial Bus)
Der Universal Serial Bus (USB) ist ein Bussystem zur Verbindung eines
Computers mit Zusatzgeräten. Ein USB-Anschluss belegt wenig Platz und kann
einfache Geräte wie Mäuse, Telefone oder Tastaturen mit Strom versorgen.
41
Mit USB ausgestattete Geräte können im laufenden Betrieb miteinander verbunden
werden (Hot-Plugging), angeschlossene Geräte und deren Eigenschaften können
automatisch erkannt werden.
Moderne Computer haben meist zwei bis sechs USB-Schnittstellen. Stehen zu wenig
USB-Anschlüsse zur Verfügung, kann man über preiswerte Hubs bis zu 127 USBGeräte an einer Schnittstelle betreiben.
USB eignet sich für viele Geräte wie Drucker, Scanner, Webcams, Maus, Tastatur,
aber auch Dongles, sowie USB-Kaffeewärmer und USB-Weihnachtsbäume;o).
Einige Geräte sind überhaupt erst mit USB entstanden, wie z.B. USBSpeichersticks.
Seit der Einführung der USB-2.0-Spezifikation sind relativ hohe
Datenübertragungsraten möglich, wodurch sich der USB zum Anschluss weiterer
Gerätearten wie Festplatten, TV-Schnittstellen und Foto-Kameras eignet.
USB wurde entwickelt um eine einheitliche Schnittstelle für PC-Peripheriegeräte
anzubieten.
Er ersetzt zunehmend ältere serielle und parallele Anschlüsse, aber auch PCIBussysteme (z.B. bei externen Soundkarten).
Technischer Überblick
USB ist ein bitserieller Bus, die einzelnen Bits des Datenpaketes werden also
nacheinander übertragen. Die Datenübertragung erfolgt differentiell über zwei
verdrillte Leitungen, eine überträgt das Datensignal unverändert und die andere das
invertierte Signal. Der Signalempfänger bildet die Differenzspannung beider
Signale; der Spannungshub zwischen 1- und 0-Pegeln ist dadurch doppelt so groß.
Dies erhöht die Übertragungssicherheit, unterdrückt Gleichtaktstörungen und
verbessert nebenbei die elektromagnetische Verträglichkeit.
Zwei weitere Leitungen dienen, falls nötig, zur Stromversorgung der
angeschlossenen Geräte. Durch Verwendung von vier Adern in einem Kabel können
diese dünner und preiswerter als bei parallelen Schnittstellen ausgeführt werden.
Eine hohe Datenübertragungsrate ist mit relativ geringem Aufwand zu erreichen, da
nicht mehrere Signale mit identischem elektrischen und zeitlichen Verhalten
übertragen werden müssen.
Ähnlich wie bei S-ATA dürfen die Kabel eine bestimmte Länge nicht überschreiten.
USB-Kabel dürfen eine maximale Länge von 5m haben, viele Geräte funktionieren
mit längeren Kabeln nicht richtig.
Die Bus-Spezifikation sieht einen zentralen Host-Controller (dem sog. MASTER)
vor, der die Koordination der angeschlossenen Peripherie-Geräte (den sog. SlaveClients) übernimmt.
Daran können bis zu 127 verschiedene Geräte angeschlossen werden.
42
An einen USB-Port kann immer nur ein einzelnes USB-Gerät angeschlossen werden.
Wenn an einen Host mehrere Geräte angeschlossen werden sollen, muss deshalb
ein Verteiler (Hub) für die Kopplung dieser Geräte sorgen. Durch den Einsatz von
Hubs entstehen Baumstrukturen, die alle im Hostcontroller enden.
Der USB ersetzt die älteren PC-Schnittstellen RS232 (seriell), Gameport, die
Centronics-Schnittstelle (paralleler Drucker-Anschluss) sowie die PS/2Schnittstelle für Tastatur und Maus. Im Vergleich zu diesen bietet USB deutlich
höhere Datenübertragungsraten.
Trotz seines Namens – Universal Serial Bus – ist der USB kein physischer
Datenbus. Bei einem solchen werden mehrere Geräte parallel an eine Leitung
angeschlossen. Die Bezeichnung „Bus“ bezieht sich auf die logische Vernetzung,
die tatsächliche elektrische Ausführung erfolgt nur mit Punkt-zu-Punkt-Verbindungen.
Übertragungsgeschwindigkeiten
USB 1.x bietet folgende Übertragungsgeschwindigkeiten:
o
o
1,5 Mbit/s (Low Speed),
12 Mbit/s (Full Speed)
Ab USB 2.0 erlaubt USB mit bis zu
o
480 Mbit/s (High Speed)
Daten zu übertragen. Diese Übertragungsraten basieren auf dem Systemtakt der
jeweiligen USB-Geschwindigkeit und stellen die physikalisch mögliche
Datenübertragungsrate dar. Die tatsächlich nutzbare Datenrate liegt – z. B. durch
Protokolloverhead – darunter; bei aktuellen Systemen in der Größenordnung 320
Mbit/s.
Wird die Schnittstelle eines Geräts mit „USB 2.0“ angegeben, heißt das nicht
unbedingt, dass dieses Gerät auch die High-Speed-Datenrate von 480 MBit/s
anbietet.
Standpunkt der Anbieter ist dabei, dass ein USB-2.0-kompatibles Gerät grundsätzlich
jede der drei Geschwindigkeiten benutzen kann und die 2.0-Kompatibilität in erster
Linie bedeutet, dass die neueste Fassung der Spezifikation eingehalten wird.
480 MBit/s dürfen also nur erwartet werden, wenn ein Gerät mit dem Logo „Certified
USB Hi-Speed“ ausgezeichnet ist.
Seit 2008 erfolgt Entwicklung von USB 3.0 mit 4,8 Gbit/s.
Seit 2010 zunehmend Geräte verfügbar, die diesen Standard unterstützen.
43
3.4 Speicher-Hierarchie
3.5 Funktionell-struktureller Aufbau der CPU
Aufbau des Zentralprozessors als vereinfachte funktionale Darstellung
44
3.5.1.1 Leitwerk (Steuerwerk)
Das Leitwerk nimmt Koordinationsfunktionen für den Prozessor wahr und stellt den
Kern der CPU dar. Es steuert den Ablauf des Befehls- und Datenflusses und
bestimmt mit seinem Taktgeber die Verarbeitungsgeschwindigkeit. Es besteht aus
logischen Schaltungen und Registern. Das Leitwerk ist für die Übertragung von
Anweisungen aus dem Arbeitsspeicher zuständig, decodiert diese und führt sie aus.
Von den zahlreichen Registern eines Prozessors gehören folgende zum Leitwerk:
Befehlszähler, Befehlsregister und Statusregister.
Der Befehlszähler (Synonym: Programmzähler (programm counter)) enthält jeweils
die Adresse des nächsten zur Ausführung anstehenden Befehles. Zu Beginn der
Programmabarbeitung wird der Befehlszähler mit der Anfangsadresse (= Adresse
des ersten Befehls) geladen. Das Leitwerk holt von der Adresse, die im Befehlszähler
enthalten ist, diesen Befehl zur Verarbeitung ab. Nach vollzogener
Befehlsinterpretation wird der Befehlszähler um die Länge des gerade
übernommenen Befehls erhöht, d.h. um die entsprechende Zahl von
Arbeitsspeicheradressen weitergezählt. Dadurch ergibt sich normalerweise die
Adresse des Folgebefehls, der damit aus dem Arbeitsspeicher (bzw. aus dem
Cache) geholt und verarbeitet werden kann. Ist der Normalfall, bei dem die Befehle
des Programms in aufeinander folgenden Stellen des Arbeitsspeichers stehen, nicht
gegeben, so muss eine Modifikation des Befehlszählers erfolgen. Dies ist z.B. bei
Schleifen der Fall, bei denen zu bereits vorher verarbeiteten Befehlen zurück
gesprungen wird. Bei derartigen Sprungoperationen wird der Befehlszähler nicht auf
den im Arbeitsspeicher nächstfolgenden Befehl eingestellt, sondern er wird mit der
Zieladresse des Sprungbefehls geladen.
Der Befehl, der aus der durch den Befehlszähler adressierten Speicherstelle gelesen
wurde, wird im Befehlsregister (instruction register) gespeichert. Das Befehlsregister
enthält also genau den Befehl, der im Moment ausgeführt wird.
Der Befehlsdekodierer entschlüsselt die im Operationsteil angegebene
Bitkombination und setzt diese in Steuersignale um. Die erzeugten Signale und die
errechneten Operandenadressen werden je nach Befehlstyp an die für die
Ausführung des Befehls zuständigen Teile des Rechenwerks, des Leitwerks, den
Arbeitsspeicher, den I/O-Prozessor usw. weitergeleitet.
Der Status, in dem sich ein Programm befindet, wird in einem Statusregister
angegeben. Beim Mehrprogrammbetrieb bedient der Prozessor abwechselnd in
Zeitabschnitten verzahnt mehrere Programme, sodass bei der Unterbrechung eines
laufenden Programms vermerkt werden muss, wo nach der Wiederaufnahme des
Programms fortgesetzt werden soll. Zu diesem Zweck wird der erreichte
Befehlszählerstand in einem Statusregister sichergestellt.
Es gibt noch weitere Unterbrechungsgründe, wie z.B. Hardware- oder Softwarefehler.
In Abhängigkeit vom jeweiligen Unterbrechungsereignis ergreift das Betriebssystem
die erforderlichen Maßnahmen.
Das Leitwerk enthält noch eine Reihe weiterer Spezialregister, auf die hier aber nicht
eingegangen werden soll.
Das Leitwerk liest und interpretiert Befehl für Befehl. Die abgegebenen Steuersignale
dienen zur Steuerung der verschiedenen Register und Addierwerke (im
45
Rechenwerk), der peripheren Geräte usw. Abgesehen von einigen wenigen
Befehlen, die z.B. die Dateneingabe von Eingabeeinheiten in den Arbeitsspeicher
oder die Ausgabe der verarbeiteten Daten aus dem Arbeitsspeicher zu
Ausgabeeinheiten veranlassen, findet die Befehlsausführung im Wesentlichen im
Zentralprozessor (Rechenwerk) statt. Während der Ausführungsphase werden zum
Beispiel Operanden aus dem Arbeitsspeicher geholt, Daten miteinander verknüpft,
Ergebnisse in den Arbeitsspeicher geschrieben usw.
3.5.1.2 Rechenwerk (ALU – Arithmetic Logic Unit)
Während das Leitwerk sich um die koordinierte Abarbeitung der Befehle kümmert,
führt das Rechenwerk sie letztendlich aus.
Das Rechenwerk erhält vom Leitwerk die auszuführenden Rechenoperationen und
die bereitgestellten Daten, führt die Rechenoperation aus und liefert die Ergebnisse
wieder an das Leitwerk zurück. Die Rechenoperationen werden in arithmetische
(bspw. Addition, Subtraktion, Multiplikation, Bitverschiebeoperationen,
Vergleichsoperationen) und logische Operationen (bspw. UND, ODER, NICHT)
unterteilt.
Die Operanden der Rechenoperationen sind meist Worte (2 Byte, 16 Bit), die als
duale Werte interpretiert werden. Zu den Grundelementen der Rechenoperationen
gehören die Additionen, die durch Addierschaltungen realisiert werden.
Multiplikationen können bspw. darauf aufbauend durch fortgesetzte Addition realisiert
werden. Bei vielen Prozessoren können weitere Operationen durch
Mikroprogrammierung hinzugefügt werden.
Während die Rechenwerke für ganzzahlige Werte (integer) traditionell Bestandteil
des Prozessorchips waren, wurden lange Zeit die Rechenwerke für
Gleitkommaoperationen als eigene Gleitkommaeinheiten (floating point unit) in
separaten Chips integriert. Die heutigen Mikroprozessoren haben integrierte
Gleitkommaeinheiten, wobei diese auch in unterschiedlicher Form für Skalar- oder
Vektoroperationen bereitgestellt werden.
Die Verarbeitungsbreite des Rechenwerks gibt die Größe der Operanden in Bit an.
Eine höhere Verarbeitungsbreite bedeutet dabei, dass in einem Rechenschritt
größere Datenmengen verarbeitet werden können.
Heutige Prozessoren verfügen über eine Verarbeitungsbreite von 32/64 Bit für
Operationen mit ganzen Zahlen (integer arithmetic), während die Gleitkommaeinheit
mit 128 Bit oder mehr (abhängig vom Prozessortyp) arbeitet.
Nachdem die prinzipiellen Bestandteile der Zentraleinheit bekannt sind und deren
Funktionsweise erläutert wurde, sollen im Folgenden die einzelnen Stufen der
Befehlsabarbeitung am Beispiel des Von-Neumann-Zyklus zusammengefasst
werden.
3.5.1.3 Von-Neumann-Zyklus
46
Noch einmal zur Erinnerung: Die zwei Aufgaben der CPU sind die Befehlsausführung
und die Ablaufsteuerung. Gemäß diesen Aufgaben besteht sie aus einem
Rechenwerk/Datenprozessor und einem Leitwerk/Befehlsprozessor.
Die Aufgabe des Datenprozessors besteht in der "klassischen" Verarbeitung von
Daten, d.h. dem Ausführen von Berechnungen. Dazu enthält er die ArithmetischLogische-Einheit (ALU) sowie (mindestens) drei Register zur Aufnahme von
Operanden. Bei den Registern handelt es sich um




den Akkumulator,
ein Multiplikator-Register (MR) (z.B. zur Aufnahme von
Multiplikationsergebnissen) und
ein Link-Register (LR) (zur Aufnahme z.B. eines Additionsübertrages), welche
beide als Akkumulator-Erweiterung angesehen werden können, sowie
das Memory Buffer Register (MBR), über welches die Kommunikation mit dem
Speicher abgewickelt wird.
Während der Akkumulator ein allgemeines Register ist, welches im Prinzip für jede
im Rahmen eines Programms anfallende Aufgabe verwendet werden kann, sind alle
anderen Register spezielle Register, welche alle eine spezielle Funktion besitzen und
ausschließlich für diese verwendet werden können.
Die Aufgabe des Befehlsprozessors besteht darin, Befehle zu entschlüsseln und
deren Ausführung zu steuern. Dazu kann er sich folgender Register bedienen:
1) Der aktuell bearbeitete Befehl befindet sich im Befehlsregister (Instruction
Register (IR)).
2) Die Adresse des Speicherplatzes, welcher als nächstes anzusprechen ist, ist
im Memory Adress Register (MAR) abgelegt.
3) Die Adresse des nächsten auszuführenden Befehls wird im Befehlszähler
(Program Counter (PC)) gespeichert.
Die Entschlüsselung eines Befehls erfolgt durch einen separaten Befehls-Decodierer,
die Steuerung der Ausführung schließlich durch die Operationensteuerung. Oftmals
wird diese auch separat als Steuerwerk bezeichnet.
Die nachfolgende Abbildung 12 zeigt die genannten Funktionseinheiten und
verdeutlicht, welche Einheiten miteinander kommunizieren.
Die Bearbeitung eines speziellen Problems erfolgt gemäß einem Programm, also
anhand einer Folge von Instruktionen.
Vor Beginn der Bearbeitung steht dieses zusammen mit den Daten, die es benötigt,
im Speicher. Daraus leiten sich die wichtigsten Merkmale des Von-NeumannRechners ab:
47
Zentralprozessor mit Daten- und Befehlsprozessor als vereinfachte funktionale Darstellung
1) Zu jedem Zeitpunkt führt die CPU genau einen Befehl aus.
Dieser Befehl kann (höchstens) einen Datenwert bearbeiten (SISD = Single
Instruction, Singe Data)
2) Alle Speicherworte (d.h. Inhalte der Speicherzellen) sind als Daten, Befehle
oder Adressen verwendbar. Die jeweilige Verwendung eines Speicherinhaltes
richtet sich nach dem momentanen Kontext.
3) Da also Daten und Programme nicht in getrennten Speichern untergebracht
werden, besteht grundsätzlich keine Möglichkeit, die Daten vor
ungerechtfertigtem Zugriff zu schützen.
Von Neumann Zyklus - Ausführung von Instruktionen
Der Prozeß der Befehlsverarbeitung bei Von-Neumann-Rechnern wird VonNeumann-Zyklus genannt und besteht aus den folgenden fünf nacheinander
ablaufenden Teilschritten:
1) FETCH
2) DECODE
3) FETCH OPERANDS
4) EXECUTE
5) UPDATE PROGRAM COUNTER (PC)
zu 1)
Beim FETCH-Schritt wird aus dem Speicher der nächste zu bearbeitende Befehl
geholt. Dazu wird der Inhalt von PC nach MAR gebracht und der Inhalt dieser
48
Adresse über das MBR aus dem Speicher geholt und im IR gespeichert.
(Da in der Fetch-Phase nur Befehle verarbeitet werden, geht der Rechner
automatisch davon aus, dass es sich bei der geholten Bitfolge um einen Befehl
handelt.)
zu 2)
Beim DECODE-Schritt wird der geholte Befehl durch den Decodierer in
Schaltinstruktionen für die Hardware aufgelöst.
zu 3)
Bei FETCH-OPERANDS werden nun die Operanden, also die Werte, die durch den
Befehl verändert werden sollen bzw. die als Parameter verwendet werden, also etwa
die beiden Operanden einer Addition, aus dem Speicher geholt
zu 4)
Bei EXECUTE wird die Operation von der ALU ausgeführt
zu 5)
Bei UPDATE PROGRAM COUNTER wird der Befehlszähler erhöht, damit der
Rechner weiß, an welcher Stelle des Programms er sich gerade befindet. Dies
geschieht parallel zum DECODE und FETCH OPERANDS.
Bei EXECUTE kann der PC wieder verändert werden (z.B. durch einen
Sprungbefehl).
Anschließend kann der Zyklus von vorn beginnen und der nächste Schritt des
Programms kann ausgeführt werden.
Bedingte und unbedingte Sprünge
Eine Folge von Befehlen stellt ein Programm für einen Rechner dar. Ausgeführt
werden die Befehle eines Programms im Allgemeinen in der Reihenfolge, in der sie
(hintereinander) im Speicher abgelegt sind (und welche durch den Programmierer
bestimmt wird).
Dazu wird im UPDATE-PROGRAM-COUNTER-Schritt der Inhalt des PC, der die
Adresse des nächsten auszuführenden Befehls angibt, lediglich um eins (bzw. um
die Anzahl der Bytes, die der aktuelle Befehl benötigt) erhöht.
Eine Ausnahme bilden (bedingte oder unbedingte) Sprungbefehle (z.B. bei
Schleifenenden oder Unterprogramm-Sprüngen).
In diesen Fällen ist der Inhalt des PC neu zu laden.
49
Die Beschreibung der Fetch-Phase lässt sich wie folgt zusammenfassen:
PC --> MAR
MAR --> MBR
MBR --> IR
decodiere IR
falls (kein Sprungbefehl) dann
{stelle Operanden bereit;
PC = PC + 1;
}
sonst {
PC = Sprungziel-Adresse;
}
Inhalt des PC ins MAR
Inhalt des MAR ins MBR
Inhalt des MBR ins IR
Befehls-Decodierung
Updaten des PC
Setzen des PC auf Sprungziel
3.6 Einteilung von Rechnerarchitekturen nach Flynn
Flynn teilt Rechnerarchitekturen nach der Art der Befehlsausführung in die vier
folgenden Kategorien ein:
SISD
Ein nach dem SISD-Prinzip (Single Instruction Single Data) aufgebauter Rechner
kann Befehle ausschließlich sequentiell, also nacheinander, abarbeiten. In einem
Bearbeitungsschritt wird auf das entsprechende Datenelement bzw. den Operanden
genau ein Befehl angewendet.
Die Von-Neumann-Architektur folgt diesem Prinzip und stellt damit einen SISDRechner dar.
SIMD
Ein nach dem SIMD-Prinzip (Single Instruction Multiple Data) aufgebauter Rechner
kann einen Befehl mehr oder weniger simultan auf verschiedene Datenelemente
bzw. Operanden anwenden. Entsprechende Prozessoren werden auch als
Vektorprozessoren (vector processor, array processor) oder Vektorrechner
bezeichnet.
Mit einem SIMD-Rechner können Berechnungen mit Vektoren und Matrizen sehr
effizient realisiert werden, was besonders für die grafische Datenverarbeitung, die
Bildverarbeitung und die Verarbeitung von Multimedia-Datenströmen wichtig ist.
Der erste Vektorrechner war der Gray-Supercomputer in den 70er Jahren.
Heute findet man SIMD-Instruktionen bei vielen gängigen Rechnerarchitekturen, wie
bspw. die MMX, SSE, SSE2, SSE3 bei Intel-Prozessoren oder 3DNow! bei AMDProzessoren.
MMX ... Multimedia Extension für ganzzahlige Werte
SSE ... Streaming SIMD Extension für Gleitkommawerte
50
MIMD
Ein nach dem MIMD-Prinzip (Multiple Instruction Multiple Data) aufgebauter Rechner
kann gleichzeitig mehrere Befehle auf mehreren Datenelementen bzw. Operanden
ausführen. Entsprechende Architekturen finden bei Mehrprozessorsystemen
Anwendung, bei denen die einzelnen Prozessoren unabhängig voneinander
Berechnungen ausführen können.
Im weiteren Sinne sind praktisch alle PCs, die Hilfs- bzw. Spezialprozessoren
verwenden, Rechnersysteme, die nach dem MIMD-Prinzip aufgebaut sind.
Eine aktuelle Entwicklung stellen Prozessoren mit mehrfachen Prozessorkernen (z.B.
dual core) dar. Hier werden innerhalb des eigentlichen Prozessorchips mehrere
Prozessoren emuliert, sodass das damit für das Betriebssystem ein
Mehrprozessorsystem vorliegt.
Die Klasse der MIMD-Architekturen lässt sich noch weiter hinsichtlich der Kopplung
der Zentralprozessoren unterteilen.
Bei einem eng gekoppelten Mehrprozessorsystem greifen meist wenige
Zentralprozessoren auf einen gemeinsamen Arbeitsspeicher zu (shared memory).
Die Prozessoren befinden sich physisch innerhalb desselben Rechners und
benutzen einen gemeinsamen Kommunikationskanal (z.B. Bus), um auf den
Arbeitsspeicher zuzugreifen.
Ein lose gekoppeltes Mehrprozessorsystem besteht aus Prozessoren, die jeweils
über einen eigenen lokalen Speicher verfügen. Man spricht auf von verteilten
Speicherstrukturen (distributed memory). Die Kommunikation erfolgt hier
typischerweise durch Nachrichten (messages), die meist über ein Rechnernetz
versendet werden. Daher rührt auch der Begriff des nachrichtengekoppelten
Mehrprozessorsystems.
Harvard-Architektur
Die Harvard-Architektur bezeichnet in der Informatik ein Schaltungskonzept zur
Realisierung besonders schneller CPUs und Signalprozessoren. Der Befehlsspeicher
ist physisch vom Datenspeicher getrennt und beide werden über getrennte Busse
angesteuert. Der Vorteil dieser Architektur besteht darin, dass Befehle und Daten
gleichzeitig geladen, bzw. geschrieben werden können. Bei einer klassischen VonNeumann-Architektur sind hierzu mindestens zwei aufeinander folgende Buszyklen
notwendig.
Zudem sorgt die physikalische Trennung von Daten und Programm dafür, dass bei
Softwarefehlern kein Programmcode überschrieben werden kann. Nachteilig ist
allerdings, dass nicht benötigter Datenspeicher nicht als Programmspeicher genutzt
werden kann.
Die Harvard-Architektur wurde zunächst überwiegend in RISC-Prozessoren
konsequent umgesetzt. Moderne Prozessoren in Harvard-Architektur sind in der
Lage, parallel mehrere Rechenwerke gleichzeitig mit Daten und Befehlen zu füllen.
Bei Signalprozessoren der C6x-Familie von Texas Instruments ist dies
beispielsweise für bis zu acht Rechenwerke möglich.
51
Ein weiterer Vorteil der Trennung ist, dass die Datenwortbreite (die kleinste
adressierbare Einheit) und Befehlswortbreite unabhängig festgelegt werden kann.
Damit kann auch, wenn erforderlich, die Effizienz des Programmspeicherbedarfs
verbessert werden, da sie nicht direkt von den Datenbusbreiten abhängig ist,
sondern ausschließlich vom Befehlssatz. Dies kann z.B. in eingebetteten Systemen
oder kleinen Microcontroller-Systemen von Interesse sein.
Als besonders bekannte Vertreter sollten hier auch die Produkte der Firma Microchip
Technology Inc. erwähnt werden, die ebenso auf dieser Architektur aufbauen
(PICmicro). Ebenso basieren die Mikrocontroller der AVR-Reihe von Atmel auf der
Harvard Architektur.
Eine bedeutende Erweiterung der Harvard-Architektur wurde von der amerikanischen
Firma Analog Devices Anfang der 1990er Jahre durch die Einführung der SHARC(Super-Harvard-Architecture)-Technologie vorgenommen, bei der die genannten
Speichersegmente als Dual-Port-RAMs ausgeführt sind, die kreuzweise zwischen
den Programm- und Daten-Bussen liegen.
Viele moderne Prozessoren verwenden eine Mischform aus Harvard- und vonNeumann-Architektur, bei der innerhalb des Prozessorchips Daten und Programm
voneinander getrennt verwaltet werden, eigene Caches und MMUs haben und über
getrennte interne Busse laufen, extern jedoch in einem gemeinsamen Speicher
liegen.
Einer der ersten bedeutenden Prozessoren, die die Harvard-Architektur intern
einsetzten, war der Motorola 68030.
52
4 Betriebssysteme
4.1 Die ISA-Ebene
Bevor wir uns die Betriebssystemebene anschauen, werfen wir einen kurzen Blick
darauf, wie durch Software auf die Maschine oder Hardware zugegriffen werden
kann.
Die Sprache der ISA-Ebene wird gebildet aus der Instruktionsmenge, die von der
Maschine, oder genauer von der CPU und den dazugehörigen HardwareSchaltungen ausgeführt werden kann.
Diese Instruktionsmenge nennt man auch Mikroprogramm.
Das Mikroprogramm besteht aus Mikrobefehlen. Das sind Bitfolgen, die wie
andere Daten auch in einem Speicher abgelegt werden können.
Ein solcher Mikrobefehlsspeicher ist Teil der CPU.
Er ist als ROM (Read Only Memory) ausgeführt, d.h. er kann nur gelesen, aber nicht
verändert werden. Ansonsten ist das ROM wie jeder andere Speicher aufgebaut,
insbesondere besitzt es ein Adressregister, in dem die Adresse eines
Speicherwertes abgelegt wird, und ein Datenregister, in dem der dort befindliche
Datenwert zurückgegeben wird.
Mikrobefehle sind jedoch für den Menschen nicht besonders gut lesbar. Die
Vorstellung, größere Programme in Mikrocode programmieren zu müssen, ist sehr
abschreckend:
Als Programmierer sollte man sich nicht damit plagen müssen, Schalter in
Datenwegen zu betätigen, Daten mühsam via Adress- und Datenregister aus dem
Speicher zu lesen, Code-Adressen in Code-Adress-Register zu schreiben öder
ähnliche lästige Dinge festzulegen.
Die Details der Benutzung der Busse sollen dem Programmierer ebenfalls verborgen
(erspart) bleiben.
Daher benötigen Programmierer eine Maschinensprache, die besser lesbar ist (so
genannte mnemonische Befehle enthält) und eine abstraktere Sicht der CPU
bietet. Eine solche Sprache ist die Assemblersprache.
4.2 Assemblerprogrammierung
Eine Assemblersprache ist eine Sammlung von Befehlen, die dem Programmierer
für den direkten Zugriff auf die CPU zur Verfügung steht.
Eine reine Assemblersprache produziert von jeder Anweisung genau eine
Maschineninstruktion. Anders ausgedrückt: Es gibt eine Eins-zu-EinsEntsprechung zwischen den Maschineninstruktionen und den Anweisungen im
Assemblerprogramm.
53
Assemblersprache ist also eine symbolischere Form der Maschinensprache, d.h.
sie verwendet symbolische Namen und Adressen anstelle von binären.
Somit lässt sich in Assembler wesentlich leichter programmieren als in
Maschinensprache.
Ein weiterer Vorteil in der Verwendung von Assembler liegt darin, dass man in
Assembler eine sehr genaue Kontrolle über die Ausführungszeiten der
verschiedenen Befehle hat. Man kann zeitkritische Programmteile sehr effizient
in Aktionen der CPU umsetzen.
Trotzdem ist Assemblerprogrammierung sehr schwierig und nichts für Leute mit
schwachen Nerven. Außerdem dauert das Schreiben eines Programms in
Assemblersprache viel länger als in einer Hochsprache, nicht zuletzt, weil auch
das Debugging viel länger dauert.
Außerdem ist die Wartung und Pflege eines Assemblerprogramms sehr viel
aufwendiger.
Zusammengefasst gibt es also zwei gute Gründe für die Verwendung von
Assembler:
1. Direkter Hardwarezugriff auf alle Funktionen der CPU und der
angeschlossenen Geräte.
2. Assemblerprogramme sind meist kompakter und schneller, als Programme
einer Hochsprache.
Als Faustregel kann man sagen, dass 10% des Programm 90% der
Ausführungszeit in Anspruch nehmen!
Eine empfehlenswerte Vorgehensweise ist demnach, zunächst ein Programm
in einer höheren Programmiersprache zu entwickeln, anschließend die
zeitkritischen Stellen, oder die Stellen, die direkten Hardwarezugriff
erfordern, zu identifizieren und diese dann gezielt in Assemblersprache
umzuschreiben.
Jede Computerarchitektur hat ihre eigenen Instruktionen, so dass sich die
Assemblersprachen unterscheiden.
Das heißt, ein Assemblerprogramm ist nur auf dem System, für das es
geschrieben wurde, lauffähig.
Assemblersprache – Maschinensprache und Assembler
Jeder Maschinenbefehl besteht zunächst aus einer Bitfolge.
In reiner Maschinensprache hat jeder Befehl eine Nummer, OpCode genannt.
Die Bedeutung der einzelnen OpCodes müsste man im Grunde jedes Mal in einer
Tabelle nachschlagen.
Deshalb gibt es eine deutlich lesbarere Form von Maschinenbefehlen und ihren
Opcodes: Die Assemblersprache oder kurz Assembler (Assembler bezeichnet
außerdem ein Programm, das Assemblerbefehle in Maschinensprache umwandelt).
54
Es gibt für jeden Maschinenbefehl eine Assembleranweisung. Diese Anweisung hat
den Vorteil, dass man sich die Abkürzungen um einiges leichter merken kann, als
den OpCode dieses Befehls.
Die folgende Abbildung zeigt einige Assemblerbefehle sowie deren entsprechende
Maschinensprachebefehle:
Glücklicherweise besitzt Assembler noch mehr Fähigkeiten, als "nur" für einen
Assemblerbefehl den entsprechenden Maschinenbefehl aus einer Tabelle zu
holen.
Der Assembler erlaubt, symbolische Namen für Speicherplätze (Variablen),
symbolische Sprungadressen (Labels) und Daten (Konstanten) zu verwenden.
Außerdem steht ein einfaches Prozedurkonzept zur Verfügung, das es erlaubt,
häufig verwendete Programmteile über einen zugewiesenen Namen zu
referenzieren.
Darüber hinaus sorgen so genannte Makros für übersichtlicheren Code, da sie es
erlauben, komplexe Programmteile durch einen kurzen Namen zu ersetzen und
diese an beliebigen Stellen im Programm aufzurufen.
 Der Unterschied zu Prozeduren besteht darin, dass der Code für eine
Prozedur nur einmal im Programm existiert, ein Aufruf verzweigt an diese Stelle.
Bei Makros wird der kurze Name des Makros jedes Mal durch den wirklichen
Programmtext ersetzt (-->Expansion), d.h. der Code existiert hier mehrmals.
55
Die obige Abbildung zeigt ein kleines Assembler-Programm, das die Zahlen von 1...N
aufaddiert.
Zunächst wird hier der Inhalt der Speicheradresse 0 in Register A geladen und B
mit dem Wert 0 initialisiert.
Ab dem mit der Marke nochmal gekennzeichneten Befehl wird A zu B addiert und A
um eins heruntergezählt.
Ist A ≠ 0 wird zur Marke nochmal gesprungen und der Code erneut ausgeführt.
4.3 Von der Hardware zum Betriebssystem
Bisher haben wir die Hardware und die Möglichkeiten der Datenrepräsentation
behandelt.
Ohne Programme ist beides aber nutzlos. Die Programme, die einen sinnvollen
Betrieb eines Rechners erst möglich machen, nennt man Software.
Man kann verschiedene Schichten von Software identifizieren. Sie unterscheiden
sich durch ihren Abstand zum menschlichen Benutzer bzw. zur Hardware des
Computers.
Zur Verdeutlichung stellen wir uns zunächst einen "blanken" Computer, d.h. eine
CPU auf einem Motherboard mit Speicher und Verbindung zu Peripheriegeräten
wie Drucker und Laufwerken, aber ohne jegliche Software vor.
Die CPU kann in dieser Situation nicht viel mehr als:




Speicherinhalte in Register laden
Registerinhalte im Speicher ablegen
Registerinhalte logisch oder arithmetisch verknüpfen
mit IN- und OUT-Befehlen Register in Peripheriegeräten lesen und schreiben.
In Zusammenarbeit mit den Peripheriegeräten (Tastatur, Bildschirm, Laufwerke,
Soundkarte) kann man auf diese Weise bereits:




ein Zeichen von der Tastatur einlesen
ein Zeichen an einer beliebigen Position des Textbildschirms ausgeben
einen Sektor einer bestimmten Spur der Diskette oder Festplatte lesen oder
schreiben
einen Ton einer bestimmten Frequenz und Dauer erzeugen.
Alle diese Tätigkeiten bewegen sich auf einer sehr niedrigen Ebene, z.B. auf der
ISA-Ebene oder der darunter liegenden Mikroarchitekturebene.
Wollte man einen Rechner auf dieser Basis bedienen, müsste man sich genauestens
mit den technischen Details jedes einzelnen der Peripheriegeräte auskennen.
Niemand würde einen Rechner benutzen, wenn er sich bei jedem Tastendruck
überlegen müsste, wie ein auf der Tastatur eingegebenes Zeichen in die CPU
gelangt und anschließend auf dem Bildschirm als Text dargestellt wird.
Gar nicht auszumalen, wenn dann auch noch alle Zeichen des bereits auf dem
56
Bildschirm dargestellten Textes verschoben werden müssten, um dem eingefügten
Zeichen Platz zu machen!
Zwischen dem von einem Anwender intuitiv zu bedienenden Rechner und den
Fähigkeiten der Hardware klafft also eine gewaltige Lücke.
Diese Lücke füllt das Betriebssystem aus.
4.4 Aufgaben des Betriebssystems
Ein Betriebsystem ist ein Programm, das dem Benutzer und den
Anwendungsprogrammen elementare Dienste bereitstellt.
Der Nutzer eines Betriebssystems ist nicht notwendigerweise ein Programmierer,
sondern möglicherweise jemand, der vom funktionieren des Rechners keine Ahnung
hat.
Für einen solchen Benutzer präsentiert sich der Rechner über das Betriebssystem.
Die Dienste, die es bereitstellt, sind das, was der Rechner in den Augen eines
solchen Nutzers kann.
Seitdem Rechner in viele Bereiche unseres Lebens Einzug gehalten haben, gibt es
immer mehr Menschen, die mit einem Computer arbeiten müssen.
Daher muss das Betriebssystem immer einfacher zu benutzen sein.
Erst den graphischen Betriebssystemsoberflächen (GUI = Graphical User
Interface) ist es zu verdanken, dass heute jeder einen Rechner irgendwie
bedienen kann und dass es verhältnismäßig leicht ist, mit einem bisher
unbekannten Programm zu arbeiten, ohne vorher umfangreiche Handbücher wälzen
zu müssen.
Der Rechner mit seinen Peripheriegeräten stellt eine Fülle von Ressourcen zur
Verfügung, auf die Benutzerprogramme zugreifen.
Zu diesen Ressourcen gehören:





CPU (Rechenzeit)
Hauptspeicher
Plattenspeicherplatz
interne Geräte (Erweiterungskarten, Onboard-Sound u.ä.)
externe Geräte (Drucker, Scanner, etc.)
Die Verwaltung dieser Ressourcen ist eine schwierige Aufgabe, da viele Benutzer
und deren Programme auf diese Ressourcen gleichzeitig zugreifen wollen. Die
zentralen Bestandteile eines Betriebssystems sind entsprechend seiner zentralen
Aufgaben also die



Dateiverwaltung
Prozessverwaltung
Speicherverwaltung
57
4.4.1 Dateiverwaltung
Eine wichtige Aufgabe des Betriebssystems ist die Dateiverwaltung. Damit ein
Benutzer sich nicht darum kümmern muss, in welchem Bereich der Festplatte noch
Platz ist, um den gerade geschriebenen Text zu speichern, oder wo die Version von
gestern gespeichert war, stellt das Betriebssystem das Konzept der Datei als
Behälter für Daten aller Art zur Verfügung.
Die Übersetzung von Dateien und ihren Namen in bestimmte Bereiche der Festplatte
nimmt das Dateisystem als Bestandteil des Betriebssystems vor.
Moderne Dateisysteme sind hierarchisch aufgebaut. Mehrere Dateien können in
einem Ordner (folder) zusammengefasst werden.
Andere Bezeichnungen für Ordner sind Katalog, Verzeichnis, Unterverzeichnis
(directory, subdirectory).
Da Ordner sowohl Dateien als auch andere Ordner enthalten können, entsteht eine
hierarchische (baumähnlich verzweigte) Struktur.
In Wirklichkeit ist ein Ordner eine Datei, die Namen und einige Zusatzinformationen
von anderen Dateien enthält.
Dateien können sich auf allen Stufen befinden. Von oben gesehen beginnt die
Hierarchie mit einem Wurzelordner (root directory), dieser enthält wieder Dateien
und Ordner, und so fort.
Der linke Teil der folgenden Abbildung zeigt einen Dateibaum, wie er unter Windows
XP dargestellt wird.
Das Wurzelverzeichnis ist F. Dieser enthält unter anderem die Ordner COMEDY,
HÖRSPIELE, MUSIK.
Der Ordner MUSIK enthält den Unterordner MP3 und dieser wiederum diverse
weitere Unterordner.
In der rechten Hälfte des Bildes sieht man die Dateien, die sich im Unterordner
"Frank Sinatra - My Way" befinden.
58
4.4.1.1 Dateinamen und Pfade
Jede Datei erhält einen Namen, unter der sie gespeichert und wiedergefunden
werden kann. Der Dateiname ist im Prinzip beliebig, er kann sich aus Buchstaben,
Ziffern und einigen erlaubten Sonderzeichen zusammensetzen.
Allerdings hat sich als Konvention etabliert, Dateinamen aus zwei Teilen, nämlich
dem eigentlichen Namen und der Erweiterung zu bilden. Beide Bestandteile
werden durch einen Punkt "." voneinander getrennt.
Die letzte Abbildung zeigte die Datei "01-My Way.mp3". Anhand des Namens macht
man den Inhalt der Datei kenntlich, anhand der Erweiterung die Art bzw. das Format
des Inhalts. Von letzterem ist nämlich abhängig, mit welchem Programm die Datei
geöffnet werden kann.
In diesem Falle zeigt die Erweiterung".mp3", dass es sich um eine Datei handelt, die
z.B. mit dem Programm "Winamp" geöffnet werden kann.
Obwohl theoretisch auch Dateinamen ohne Dateierweiterung möglich sind, ist es
sinnvoll, sich an die Konvention zu halten, da auch die Anwenderprogramme von
diesem Normalfall (default) ausgehen.
Ein Anwendungsprogramm wie z.B. Word wird beim ersten Abspeichern einer neuen
Datei als default die Endung ".doc" vorgeben.
Es kann vorkommen, dass zwei Dateien, die sich in verschiedenen Ordnern
befinden, den gleichen Namen besitzen.
Dies ist kein Problem, da das Betriebssystem eine Datei auch über ihre Lage im
Dateisystem identifiziert. Diese Lage ist in einer baumartigen Struktur wie dem
Dateisystem immer eindeutig durch den Pfad bestimmt, den man ausgehend von der
Wurzel traversieren muss, um zu der gesuchten Datei zu gelangen. Den Pfad
kennzeichnet man durch die Folge der dabei traversierten Unterverzeichnisse.
Der Pfad zum Verzeichnis der letzten Abbildung ist demnach:
59
o
F:\MUSIK\MP3\Frank Sinatra - My Way - The Best of\
Man erkennt, dass die einzelnen Unterordner durch das Trennzeichen "\" (backslash)
getrennt werden.
In den Betriebssystemen der UNIX-Familie (LINUX, SunOS, Fedora) wird
stattdessen der "/" (slash) verwendet.

Der Pfad, zusammen mit dem Dateinamen (incl. der Erweiterung), muss eine
Datei eindeutig kennzeichnen.
Die MP3-Datei aus unserem Beispiel hat also den vollständig qualifizierten
Dateinamen
F:\MUSIK\MP3\Frank Sinatra - My Way - The Best of\01-My Way.mp3
4.4.1.2 Das Dateisystem
Viele Speichergeräte arbeiten blockweise, indem sie Daten als Blöcke fester Größe
(je nach Dateisystem zwischen 512 Bytes und 64 KBytes) in Bereiche eines
Datenträgers speichern.
Die Hardware bietet somit dem System eine Menge von Blöcken an, die eindeutig
adressierbar sind.
Das Betriebssystem verwaltet alle diese Blöcke in einem Dateisystem und enthält
Routinen zum Lesen und Schreiben von Blöcken für die jeweils verwendeten
Gerätetypen, die so genannten Gerätetreiber.
Das vom Betriebssystem verwaltete Dateisystem erspart dem Benutzer so das
Hantieren mit lästigen Details, wie z.B. das Ausrichten des Schreib-/Lesekopfes
einer Festplatte beim Zugriff auf eine Datei.
Für einen Benutzer ist es viel einfacher und intuitiver, seine Daten in Dateien
(files) zu organisieren.
Eine Datei entspricht intuitiv einer Akte und diese können in Ordnern
zusammengefasst werden.
Jede Datei hat einen Namen und einen Inhalt. Dieser kann aus einer beliebigen
Folge von Bytes bestehen.
Das Betriebssystem muss eine Übersetzung zwischen den von der Hardware
angebotenen Blöcken und den vom Benutzer gewünschten Dateien
gewährleisten.
Das Dateisystem, als zuständiger Teil des Betriebssystems, verwaltet eine Datei als
Folge von Blöcken.
Selbst wenn sie nur ein Byte enthält, verbraucht eine Datei mindestens den
Speicherplatz eines Blockes.
60
Die Dateien eines Dateisystems werden in speziellen Dateien organisiert, den sog.
Ordnern oder Verzeichnissen.
In einem Ordner oder auch Verzeichnis findet sich für jede in ihm enthaltene Datei
ein Eintrag mit Informationen folgender Art:






Dateiname (dazu gehört ggf. auch die Erweiterung)
Dateityp (Normaldatei, ausführbare Datei, Verzeichnisdatei)
Länge in Bytes
zugehörige Blöcke (meist reicht ein Verweis auf den ersten Block der Datei)
Zugriffsrechte (Besitzer, ggf. Passwort, Schreib- und Leserechte)
Datum (Erstellung, Änderung)
Unter Windows ist jedes Laufwerk die Wurzel eines eigenen Dateibaums, die mit
einem "Laufwerksbuchstaben" benannt wird.
Unter UNIX sind die Dateisysteme aller Laufwerke Unterbäume eines globalen
Dateibaums, dessen Wurzel root heißt.
Ein systemweites Dateisystem hat Vorteile, wenn viele Festplatten vorhanden sind
und der Benutzer gar nicht wissen will, auf welchen Geräten sich die Daten befinden.
Es hat aber Nachteile, wenn Geräte mit auswechselbaren Datenträgern (z.B.
Disketten oder CD-ROMS) betrieben werden, da bei jedem Medienwechsel
entsprechende Teile des Gesamt-Katalogs geändert werden müssen.
Außerdem muss das Betriebssystem eine Pseudodatei verwalten, die aus allen
freien (also noch verfügbaren) Blöcken des Datenträgers besteht.
Eine weitere Pseudodatei besteht aus allen Blöcken, die als unzuverlässig gelten,
weil ihre Bearbeitung zu Hardwareproblemen geführt hat. Diese werden dann nicht
mehr für Dateien genutzt. Es gibt also:



belegte Blöcke
freie Blöcke
unzuverlässige Blöcke
Während der Bearbeitung der Dateien ändern sich die Listen dynamisch.
4.4.1.3 Datei-Operationen
Das Dateisystem bietet dem Anwenderprogramm mindestens folgende Operationen
zur Verwaltung von Dateien:

"Neu":
Anlegen einer noch leeren Datei in einem bestimmten Verzeichnis; die
Parameter dieser Operation sind Dateiname und Dateityp.

"Löschen":
Die Datei wird entfernt und damit unzugänglich. Meist wird hier aber nur der
Verweis auf den ersten Block der Datei gelöscht, so dass man die Datei häufig
wiederherstellen kann.
61

"Kopieren":
Dabei kann implizit eine neue Datei erzeugt oder eine bestehende
überschrieben oder verlängert werden.

"Umbenennen":
Änderung des Dateinamens oder anderer Verzeichniseinträge einer Datei.

"Verschieben":
Die Datei wird aus einem Verzeichnis entfernt und einem anderen
hinzugefügt.
Um eine Datei bearbeiten zu können, muss man sie vorher öffnen.
Dabei wird eine Verbindung zwischen der Datei und ihrem Verzeichnis, zwischen der
Zugriffsmethode (lesen/schreiben) und einem Anwenderprogramm, welches den
Zugriff veranlasst hat, hergestellt.
Nach dem Bearbeiten muß die Datei wieder geschlossen werden.
Wenn beispielsweise ein Anwender eine Textdatei editiert, dann muss das
Betriebssystem aus dem Dateinamen die Liste der Blöcke bestimmen, in denen
der Datei-Inhalt gespeichert ist.
Meist ist dazu nur die Kenntnis des ersten Blockes notwendig. Dieser enthält dann
einen Verweis auf den nächsten Block uns so fort.
Wird die editierte Datei gespeichert, so müssen möglicherweise neue Blöcke an
die Liste angehängt werden oder einige Blöcke können entfernt und der Liste der
freien Blöcke (s. Dateisystem) übergeben werden.
Das Betriebssystem muss also Operationen des Anwendungsprogramms wie z.B.
"Datei lesen" und "Datei speichern" umsetzen in elementare Operationen, sog.
Systemaufrufe (system calls), die die Hardware ausführen kann. Dazu gehören:


Lesen eines oder mehrerer Blöcke
Schreiben eines oder mehrerer Blöcke
Die Systemaufrufe Neu oder Löschen führen lediglich dazu, dass Blöcke der Liste
der freien Blöcke entnommen, oder zurückgegeben werden. Der Inhalt der Blöcke
muß nicht gelöscht werden. Aus diesem Grund können "gelöschte" Dateien mit
spezieller Software häufig wieder hergestellt werden, da sie sich noch physisch auf
der Festplatte befinden. Was gelöscht wurde, war lediglich der Verweis auf den
ersten Block der Datei. Sobald man den Anfang wiederfindet, kann man die Datei
lesen.
Dies funktioniert aber nur, solange keine Blöcke der Datei von anderen Dateien
verwendet und damit überschrieben wurden.
Das Dateisystem verwaltet eine Datei als Folge von Blöcken. Eine Datei, die nur
ein Byte enthält, verbraucht mindestens den Speicherplatz eines Blockes.
Für ein Anwenderprogramm wie einen Texteditor besteht eine Datei aus einer
Folge von Bytes (!) . Der Texteditor muss in der Lage sein, ein bestimmtes Byte zu
schreiben, zu löschen oder an einer bestimmten Stelle ein Byte einzufügen.
Die Repräsentation einer Datei als eine solche Folge von Bytes ist Aufgabe des
62
Betriebssystems. Es stellt daher Systemaufrufe zur Verfügung, um Dateien
byteweise zu lesen und zu schreiben.
Selbst der Programmierer des Texteditors muss nichts von der blockweisen
Organisation der Dateien wissen.
Für ihn ist die Abbildung von der Bytefolge in die Blockfolge unsichtbar.
4.4.2 Prozessverwaltung
Ein auf einem Rechner ablauffähiges oder im Ablauf befindliches Programm,
zusammen mit all seinen benötigten Ressourcen wird zusammenfassend als
Prozess oder Task bezeichnet.
Auf einem Rechner mit nur einer CPU ist es nicht wirklich möglich, dass mehrere
Prozesse gleichzeitig laufen.
Wenn man allerdings mehrere Prozesse abwechselnd immer für eine kurze Zeit
(einige Millisekunden) arbeiten lässt, so entsteht der Eindruck, als würden diese
Prozesse gleichzeitig laufen.
Die zur Verfügung stehende Zeit wird in kurze Intervalle unterteilt. In jedem Intervall
steht die CPU einem anderen Prozess zur Verfügung. Dazwischen findet ein
Taskwechsel statt, wobei der bisherige Prozess suspendiert und ein anderer
Prozess
(re-) aktiviert wird.
Ein Prozess kann sich, nachdem er gestartet wurde, in verschiedenen Zuständen
befinden:





Nach dem Start ist er zunächst rechenbereit und wartet auf die Zuteilung von
Prozessorzeit.
Wird er dann vom Betriebssystem zur Ausführung ausgewählt, ist er rechnend.
Ist er nach einer bestimmten Zeit nicht beendet, wird er vom Betriebssystem
suspendiert und ein anderer Prozess erhält den Prozessor zugeteilt.
Unser Prozess ist dann erneut rechenbereit.
Es kann aber auch der Fall eintreten, dass der Prozess auf eine Ressource
wartet (z.B. auf einen Drucker oder auf eine Dateioperation). Dann wird er
blockiert und erst wieder als rechenbereit eingestuft, falls das Signal kommt,
dass die benötigten Ressourcen bereitstehen. In der Zwischenzeit können die
andern Prozesse den Prozessor nutzen.
63
Abb.: Zustandsdiagramm eines Prozesses
Hat ein Prozessor genau eine CPU, so ist höchstens ein Prozess zu jedem
Zeitpunkt aktiv. Dieser wird dann als laufender Prozess bezeichnet.
4.4.2.1 Bestandteile eines Prozesses
Ein Prozess ist eine Instanz eines in Ausführung befindlichen Programms. Jeder
Prozess bekommt einen eigenen Adressbereich zugewiesen.
Wenn er deaktiviert wird, müssen alle notwendigen Informationen gespeichert
werden, um ihn später im exakt gleichen Zustand reaktivieren zu können. Zu
diesen Informationen gehören:




der Programmcode des Prozesses (bzw. dessen Programms)
seine im Arbeitsspeicher befindlichen Daten
der Inhalt der CPU-Register einschließlich des Befehlszählers
eine Tabelle aller geöffneten Dateien mit ihrem aktuellen
Bearbeitungszustand
Abb.: Speicherabbild eines Prozesses
Wenn ein Prozess unterbrochen werden soll, muss der Inhalt der CPU-Register in
den vorgesehenen Adressbereich gerettet werden.
Wenn ein wartender Prozess aktiviert werden soll, muss der Inhalt der Register, so
wie er bei seiner letzten Unterbrechung gesichert wurde, wieder geladen werden.
64
4.4.2.2 Threads
Jeder Prozess besitzt seinen eigenen Speicherbereich. Demgegeüber sind Threads
(Thread = Faden) Prozesse, die keinen eigenen Speicherbereich besitzen. Man
nennt sie daher auch leichtgewichtige Prozesse (lightweight process).
Der Laufzeit-Overhead zur Erzeugung und Verwaltung von Threads ist deutlich
geringer als bei Prozessen. Gewöhnlich laufen innerhalb eines Prozesses mehrere
Threads ab, die den gemeinsamen Speicherbereich nutzen.
Threads sind in den letzten Jahren immer beliebter geworden. Moderne Sprachen,
wie Java, haben Threads in die Sprache integriert.
Computerspiele nutzen Threads zunehmend, um die einzelnen Kerne von MehrkernProzessoren besser auszulasten. So kann z.B. in einem Thread von einem CPUKern die Spielphysik berechnet werden, während ein anderer die KI (Künstliche
Intelligenz) der Computergegner berechnet.
4.4.2.3 Multitasking
a) Prioritätsabhängige Verwaltung / kooperatives Multitasking
Für die Verwaltung der Prozesse hat das Betriebssystem verschiedene
Möglichkeiten. Die einfachste Methode besteht darin, Prozessen eine Priorität
zuzuordnen und dem jeweils bereiten Prozess höchster Priorität die CPU zu
überlassen, so lange bis dieser Prozess die CPU nicht mehr benötigt oder ein
anderer Prozess höherer Priorität bereit ist.
Eine allein durch Prioritäten gesteuerte Verwaltung begünstigt also den Prozess
mit höchster Priorität.
Zeitpunkt und Dauer der Ausführung von Prozessen geringerer Priorität sind nicht
vorhersehbar.
Diese Form des Multitasking ist das von älteren Windows-Versionen und Mac OS
bis Version 9 bekannte kooperative Multitasking.
Dabei ist es jedem Prozess selbst überlassen, wann er die Kontrolle an das
Betriebssystem zurückgibt.
Dies hat den Nachteil, dass Programme, die nicht kooperieren, bzw. die Fehler
enthalten, das gesamte System zum Stillstand bringen können.
b) Zeitscheibenverfahren / präemptives Multitasking
Eine bessere Methode besteht darin, die Zuteilung des Betriebsmittels CPU nicht
allein von der Priorität eines Prozesses abhängig zu machen, sondern jedem
bereiten Prozess eine sogenannte Zeitscheibe zuzuteilen. Diese Methode nennt
man Zeitscheibenverfahren oder präemptives Multitasking.
Das Betriebssystem führt eine neue CPU-Zuteilung durch, wenn der laufende
Prozess entweder
o
eine bestimmte Zeit gerechnet hat, oder
65
o
wenn er auf ein Ereignis warten muss.
Ein solches Ereignis könnte die Ankunft einer Nachricht von einem anderen Prozess
sein oder die Freigabe eines Betriebsmittels wie Laufwerk, Drucker, Modem, das der
Prozess zur Weiterarbeit benötigt. Je nach System werden als Dauer einer
Zeitscheibe 1 Millisekunde, 10 Millisekunden oder mehr gewählt.
Die meisten Betriebssysteme führen allerdings nur eine sehr einfache
Zeitscheibenzuteilung für die bereiten Prozesse durch.
Dieses Verfahren wird round robin (Ringelreihen) genannt und besteht darin, alle
Prozesse, die bereit sind, in einer zyklischen Liste anzuordnen.
Die bereiten Prozesse kommen in einem bestimmten Turnus an die Reihe und
erhalten jeweils eine Zeitscheibe.
Prozesse, die nicht mehr bereit sind, werden aus der Liste entfernt, solche, die
soeben bereit geworden sind, werden an einer bestimmten Stelle in der Liste
eingehängt.
Die Verwaltung der Prozesse erfolgt durch einen Teil des Betriebssystems, den
sogenannten Scheduler, der selbst als einer der Prozesse in der Liste betrieben
wird. Er wird einmal pro Rundendurchlauf aktiv und kann den Ablauf der anderen
Prozesse planen.
4.4.3 Speicherverwaltung
Eine der Aufgaben des Betriebssystems besteht in der Versorgung der Prozesse mit
dem Betriebsmittel Arbeitsspeicher.
Dabei sollen Prozesse vor gegenseitiger Beeinträchtigung durch fehlerhafte
Adressierung gemeinsam benutzter Speicherbereiche geschützt werden.
Die wesentlichen Verfahren zur Speicherverwaltung sind:
o
o
Paging
Swapping
4.4.3.1 Virtueller Speicher
Vor langer Zeit stießen Programmierer zum ersten Mal auf das Problem, dass die
Programme zu groß für den verfügbaren Speicher wurden.
Normalerweise lösten Sie dieses Problem, indem sie die Programme in mehrere
Teile aufspalteten, so genannte Overlays. Zunächst wurde Overlay 0 ausgefügrt,
das dann, sobald es fertig war, das nächste Overlay 1 aufrief, welches dann Overlay
2 lud, usw.
Die einzelnen Overlays wurden auf der Festplatte gespeichert und nach Bedarf vom
Betriebssystem dynamisch ein- und ausgelagert .
Obwohl die Overlays vom Betriebssystem verwaltet wurden, mußte der
Programmierer das Programm selbst aufteilen.
Große Programme in kleine, modulare Teile aufzuspalten, war eine zeitaufwändige
66
und langweilige Arbeit.
Es dauerte also nicht lange, bis sich jemand etwas ausdachte, um auch diese
Aufgabe durch den Computer erledigen zu lassen.
Die Methode wurde als virtueller Speicher bekannt. Die Grundidee dahinter war, zu
erlauben, dass der Programmcode, die Daten und der Stack zusammen größer
sind als der verfügbare Hauptspeicher.
Das Betriebssystem hält die Teile des Programms, die gerade gebraucht werden, im
Hauptspeicher und den Rest auf der Festplatte. Beispielsweise kann man ein 16 MB
großes Programm auf einer 4 MB-Maschine ausführen, indem man die 4 MB, die
im Speicher liegen, zu jedem Zeitpunkt sorgfältig auswählt und Teile des Programms
nach Bedarf ein- und auslagert.
4.4.3.2 Swapping
Eine weitere Methode zur Speicherverwaltung ist das so genannte Swapping.
Hierbei befinden sich zu einem gegebenen Zeitpunkt einige Segmentmengen im
Speicher.
Bei einem Aufruf eines Segmentes, das sich momentan nicht im Speicher befindet,
wird dieses geholt.
Ist kein Platz dafür vorhanden, müssen eines oder mehrere Segmente zuerst auf die
Platte ausgelagert werden.
In dieser Hinsicht ist das Swapping von Segmenten mit dem Paging vergleichbar:
Segmente werden nach Bedarf geholt oder ausgelagert.
Die Segmentierung wird beim Swapping aber anders als beim Paging
implementiert. Swapping hat hier einen entscheidenden Nachteil:
Seiten (--> Paging) haben eine feste Größe, Swapping-Segmente nicht.
67
Die Folgen dieses Nachteils werden deutlich, wenn wir die obige Abbildung
betrachten. Sie zeigt das Abbild eines physikalischen Speichers, der anfangs fünf
Segmente enthält.
Man betrachte, was passiert, wenn in




(a) Segment 1 ausgelagert und das kleinere Segment 7 an seine Stelle
platziert wird. Dies zeigt (b).
(b) Zwischen Segment 7 und Segment 2 liegt ein ungenutzter Bereich, also
ein Loch.
(c) Segment 4 wird durch Segment 5 ersetzt
(d) Segment 3 wird durch Segment 6 ersetzt.
Nachdem das System eine Weile lief, wird der Speicher in Stücke aufgeteilt, von
denen einige Segmente und andere Löcher enthalten.
Dieses Phänomen nennt man externe Fragmentierung, weil außerhalb der
Segmente, in den dazwischen liegenden Löchern, Platz verschwendet wird.
Diese externe Fragmentierung wird beim Paging vermieden, weil sowohl die
Seiten des virtuellen Speichers, als auch die Seitenrahmen des physikalischen
Speichers die gleiche Größe haben.
4.4.3.3 Paging
Das als virtueller Speicher beschriebene Konzept basiert auf der Trennung
zwischen dem (technisch möglichen) Adressraum eines Computers (bei einem 32Bit-System sind das 4 GByte) und den tatsächlich verfügbaren Speicherstellen
(z.B. 1 GByte RAM).
Man unterscheidet also den virtuellen Adressraum und den physikalischen
Adressraum.
Beim Paging wird der virtuelle Adressraum in eine Reihe von Seiten gleicher
Größe gegliedert.
Ebenso wird der physikalische Adressraum in Segmente aufgeteilt, die genauso
groß sind wie die Seiten.
Jedes Stück Arbeitsspeicher kann also genau eine Seite aufnehmen.
Diese Segmente des Arbeitsspeichers (physikalischer Speicher) nennt man
deshalb auch Seitenrahmen.
Das Speicherabbild eines Prozesses wird also in einzelne Seiten aufgeteilt.
Nur die wirklich benötigten Speicherseiten müssen im Arbeitsspeicher geladen
sein, während ein Prozess läuft.
Ein Prozess, der gestartet werden soll, muss dem Betriebssystem mitteilen, wie viel
virtueller Hauptspeicher benötigt wird. Für diesen virtuellen Speicherbereich muß
ein Schattenspeicher in einem speziellen Bereich des Dateisystems reserviert
werden.
Diese Paging Area liegt auf der Festplatte (das Pagefile unter Windows).
68
Ihre Größe begrenzt letztlich den virtuellen Hauptspeicher, der jedem Prozess
zugeordnet werden kann.
Prozesse können den theoretisch adressierbaren Bereich von 4 GB also nur
verwenden, wenn die Festplatte groß genug ist.
4.4.3.4 MMU (Memory Management Unit)
Wenn eine nicht geladene Seite adressiert wird, muss dieser Vorgang von der
Hardware entdeckt werden, dies übernimmt die so genannte MMU oder Memory
Management Unit, bei heutigen Rechnern Bestandteil der CPU, die dann die
virtuelle Adresse (die der nicht geladenen Seite) auf die physische Adresse
abbildet.
Die angeforderte Seite wird dann durch das Betriebssystem von der Festplatte in
den Arbeitsspeicher geladen.
4.4.3.5 Ablauf
Wenn nun eine Adresse angefragt wird, die sich nicht im Hauptspeicher befindet,
geschieht folgendes:
1) Der Inhalt des Arbeitsspeichers wird auf die Platte gespeichert
2) Die Speicherseite mit der gewünschten Adresse wird auf der Platte ausfindig
gemacht.
3) Die gefundene Speicherseite wird in den Arbeitsspeicher geladen.
4) Die Abbildung der virtuellen Adressen auf die physikalisch vorhandenen wird
angepasst, da die Speicherseite nicht mehr auf der Platte liegt, sondern im
Hauptspeicher.
5) Die Ausführung wird fortgesetzt, als wäre nichts Ungewöhnliches passiert.
Die Zuordnung von virtuellen Adressen zu physikalischen Adressen wird über die
sogenannte Seitentabelle verwaltet.
69
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement