Einführung und Historie der INTEL
Prozessoren
INTEL®,
der derzeitige führende Hersteller im Bereich der PC-Prozessoren, brachte 1978
den 16-Bit
Mikroprozessor 'Intel 8086' und im darauffolgenden Jahr die Variante 8088
auf den Markt.Die Leistungsfähigkeit
dieser Prozessoren lag um das Fünf- bis Zehnfache
höher als die der 8-Bit Vorläufer
8080 (1974) und 8085 (1976). Wichtige neue
Merkmale waren der größere Adreßraum, der es möglich machte
1 MByte statt nur 64 KByte zu adressieren, als auch die
neuen 16-Bit breiten internen Datenwege,
die erheblich zur Leistungsteigerung beitrugen. Die Überlegenheit des 8086 gegenüber dem 8088
liegt
in dem
16-Bit breiten externen Datenbus. Intel hatte mit dem 8088 ein Bindeglied zwischen
den bis
dahin üblichen 8-Bit und den kommenden 16-Bit Chips geschaffen. Intern sollte der 8088 Mikroprozessor
wie der 8086 Mikroprozessor eine 16-Bit Strukur aufweisen und nach außen möglichst
umstandslos mit der
8-Bit Peripherie zusammenpassen. Somit war es dem 8088 nur möglich, mit einem
Buszyklus 8-Bit
an Arbeitsspeicher oder E/A Geräte zu übertragen, wobei der 8086 16-Bit
schaffte. In nahezu jeder anderen
Hinsicht sind die beiden Prozessoren jedoch identisch,
d.h. Programme, die für ein 8086-gestütztes System
geschrieben wurden, sind auch auf einem
8088-System lauffähig und umgekehrt.
Dem Wunsch nach höherer Leistung kam Intel schon im Jahr 1982 mit der
Ankündigung drei neuer
Mikroprozessoren engegen. Es handelte sich um dem 80186, 80188 und 80286.
Der 80186 stellt einer höher integrierte Version des 8086er Prozessors dar und
enthält auf dem Prozessorchip
einige neue Funktionen, für die zuvor eigene Chips nötig waren. Der 80186 ist
jedoch voll kompatibel zum
8086er Prozessor und verfügt über die gleiche Daten- und Adreßbustruktur wie
der 8086 und kann somit ebefalls
1 MByte physischen Speicher adressieren. Sein Registersatz und Adreßmodi
entsprechen voll dem 8086er.
Er arbeitet mit dem gleichen Maschinenbefehlssatz, darüber hinaus verfügt er
über einige zusätzliche
erweiterte Befehle. Der 80188 dient wiederrum nur zur kompatiblität mit 8-Bit
Peripherie und ist nahezu jeder
Hinsicht mit dem 80188 identisch.
Der 80286 ist voll kompatibel zum 8086-Mikroprozessor, stellt gegenüber diesem
jedoch einen größeren
Entwicklungssprung als die 80186/80188 Prozessoren dar. Gekennzeichnet ist der
80286 vor allem dadurch,
daß in seiner Architektur bereits Erfordernisse für Multiuser- und
Multitasking Betriebssysteme berücksicht
wurden. Durch seinen 24-Bit breiten Adreßbus bestand nun die Möglichkeit einen
auf 16 MByte erweiterten
physikalischen ansprechen zu können und Programme im Vergleich zum 8086 ca.
sechsmal schneller
abzuarbeiten.
1985 etablierten sich die ersten 386-CPUs auf dem Markt. Ein bis zwei Jahre
später folgten die ersten PC's
mit diesen Prozessoren und sorgten mit höheren Taktfrequenzen , erweiterten
Busleitungen und neuen
Funktionen für noch schnelleren Aufwind im PC Bereich. Der Adreßbus wurde nun
auf 32-Bit erhöht, wodurch
maximal adressierbare physische Speicher auf 4 GByte anwuchs. Die
Datenbusleitungen wurden ebenfalls auf
32-Bit erhöht, also genau das doppelte der vorherigen Mikroprozessoren. Es
besteht ebenfalls wieder
kompatiblität zu den 8086 sowie 80186 und 80286 Prozessoren.
1989 folgten auf den 80386 die ersten 80486 DX CPU's. Vorteil dieses
Prozessors ist, daß die für Fließkomma
notwendige Floating-Point Unit (FPU) erstmals direkt in den Mikroprozessor
integriert wurde.
Somit bestand die Möglichkeit ebenfalls auf den integrierten Datencache
zuzugreifen.
Der 80386, sowie der der 80486 weisen eine Multitasking-Hardware und einen
Schutzmechanismus,
Protected Mode, über vier Ebenen auf, der den Zugriff eines Anwenderprogramms
auf das Betriebssystem
verhindert. Der neu eingeführte Virtual-8086 Mode erlaubt es mehrere 8086er in
der ungeschützen
Betriebsart zu simulieren, wobei jeder ausgeführte Prozeß einen 8086 mit einem
Adreßraum von 1 MByte sieht.
Die Anzahl der auszuführenden Prozesse hängt nun von der Menge an verfügbarem
Arbeitsspeicher ab.
Weiterhin wird eine vituelle Speicherverwaltung unterstützt, sodaß mehr als
nur 1 MByte Speicher zur
Verfügung steht. (Segmentierung im Protected Mode)
1993 brachte Intel den Pentium-Mikroprozessor auf den Markt. 3,1
Millionen Transistoren wurden auf dem
Chip untergebracht. Eingeführt wurde er mit 60 MHz. Bei 66 MHz ist es möglich,
Anwendungsprogramme
bis zu fünfmal schneller als ein 486er auszuführen. Es besteht wieder
Kompatiblitöt zu allen Vorgängermodellen.
Die Datenbusleituntungen wurden auf 64-Bit erhöht und der Pentium beinhaltet
ebenso eine verbesserte
Floating-Point Unit. Die Verbessrungen lagen soweit darin, daß die drei
Grundrechenarten Addition, Multiplikation
und Division durch spezielle Hardwareeinheiten realisiert wurden. Dadurch konnte
bei rechenintensiven
Anwendungen eine bis zu fünfmal schnellere Abarbeitung erfolgen.
Architektur des Intel Pentium
Die Prozessorarchitektur wurde überarbeitet und eine mit dem
Begriff Superskalare Mikroarchitektur
bezeichnete Bauweise ermöglicht es, Einheiten innerhalb des Prozessors so
auszulegen, daß sie gleichzeitig
arbeiten können. Die parallele Abarbeitung von Befehlen wurde ebenso
verbessert, sofern zwischen ihnen
keine Abhängigkeiten bestehen. Die Ausführung erfolgt in den U- V-Pipelines,
wobei die Befehle bestimmte
Bedingungen erfüllen müssen, daß Konflikte verhindert werden. Dadurch wird
vermieden, daß ein
Nachfolgender Befehl auf Informationen des vorigen Befehles zugreifen muss. Die
U-Pipeline kann alle
Befehle ausführen, V-Pipeline jedoch nur die Einfachen.

Die interne Struktur des Pentiums
Buseinheit (BU):
Diese Einheit ist für den Transfer zwischen den externen Einheiten und dem
internen Cache
zuständig und gibt die externen Anforderungssignale priorisiert an die inerne
Steuereinheit
weiter.
Cacheeinheit (CU): Sie
besteht aus einem Daten- und einem Befehlscache zu je 8 KByte, wobei der
Datencache
in den Hauptspeicher zurückschreiben kann, der Befehlscache jedoch nicht. Durch
die 64-Bit
Datenbusstruktur kann eine komplette Cacheline (2*64 Bit = 16 Byte) übertragen
werden.
Branch-Prediction (BP): oder auch
"Verzweigungsvorhersage" besteht aus einem kleinen Cache, in dem
die zuletzt
aufgeführten Sprungbefehle mit ihren Adressen, sowie statistische
Informationen
(Häufigkeit der letzten Sprünge) gespeichert werden. Die BP vergleicht nun
ständig mit den
Befehlen im "Instruktionsdekoder". Wird letztendlich eine
Übereinstimmung festgestellt und
der erwartete Sprung soll ausgeführt werden, kann die BP die Sprungadresse
sofort liefern.
Die Taktzyklen für das Einholen der Adresse entfallen, was zur schnelleren
Abarbeitung führt.
Instruktionseinheit (IU): Diese Einheit sorgt für einen ständig
gefüllten Cache und verhindert somit, daß dieser während
Wartezeiten nicht untätig ist. Der "Instruktionsdekoder"
entnimmt dieser Warteschlange
einzelne Bytes und dekodiert diese.
Ausführungseinheit: Die
Ausführungseinheit führt den von der Instruktionseinheit kommenden
Maschinencode aus.
Sie steht darüber hinaus mit allen anderen Einheiten über den Steuerbus in
direkter Verbindung.
Adressierungseinheit: Sie berechnet
gemäß dem Segmentkonzept die effektive Adresse.
Fließkommaeinheit: Die
Fließkommaeinheit übernimmt die Berechnung von Fließkommabefehlen.
Register des Intel Pentium
Die Register des Pentium sind 32-Bit breit
man unterscheidet im allgemeinen fünf verschiedene Funktionsgruppen
allgemeine Register: [E]AX = Akkumulator, [E]BX = Base
Register, [E]CX = Count Register, [E]DX= Data Register
Die Ausführung arithmetischer und logischer Operationen ist in jedem dieser
Register
möglich. Sie werden auch intern von Befehlsoperationen benutzt, so z.B. [E]AX
bei
MUL, DIV (Multiplikation, Division) oder [E]CX bei
Schleifenoperationen.
Bei einigen Befehlen führt die Nutzung des [E]AX Registers zum kompakteren
Maschinencode, wodurch sich die Ausführungszeit verringert.
Die ersten 16-Bit der allgemeinen Register unterteilen sich jeweils noch in
einen
High- bzw. Low-Anteil.

Pointerregister: SP
= Stack Pointer, BP = Base Pointer
Die Pointerregister unterstützen die Adressierung in einem Stapelsegment
und beinhalten ein Offset bezüglich des SS (Stapelsegmentregister)
Indexregister:
SI = Source-Indexregister, DI = Destination-Indexregister
Beide Register unterstützen die Adressierung in Datensegmenten
Ihr Inhalt ist im Regelfall ein Offset bezüglich des DS (Datensegmentregister)
und des ES (Extrasegmentregister).
Segmentregister: CS =
Codesegmentregister, DS = Datensegmentregister, ES =
Extrasegmentregister
SS = Stapelsegmentregister
Instruction Pointer: Der Instruction Pointer
adressiert mit dem CS den nächsten Befehl.der von IU
gefetch werden soll und wird nach dem Fetchzyklus um die entsprechenden
Bytes
erhöht.
Desweiteren existiert ein Flagregister, welches Flags (Bits) enthält, die
bestimmte Zustände ausdrücken.

Zustand '0' = trifft nicht zu, Zustand '1' = trifft zu. Die Flags werden vom
Prozessor als auch vom
Programmierer benutzt.Mit Hilfe dieser Flags kann man bestimmte
Verarbeitungszustände festhalten oder
in Abhängigkeit von Zuständen verzweigen, um mit jeweils anderen Befehlsfolgen
weiterzuarbeiten.
3 Möglichkeiten der Informationsübergabe :
- Prozessor zum Programm
- Programm zum Prozessor
- Programm zum Programm
Segmentkonzept (8086 Mode)
Programme für die 8086/8088 Prozessoren betrachten den maxmimal 1 MByte
großen physikalischen
Adreßraum als eine Gruppe logischer Segmente. Bei diesen Segmenten handelt es
sich um logische
Speicherblöcke, von 16 Bytes bis maximal 64 KBytes. Speicherstellen können von
Programmen
nur angesprochen werden, wenn sie innerhalb eines Segmentes liegen und zum
Zeitpunkt des Zugriffs ein
Segmentregister die Anfangsadresse des Segments enthält. Da die Segmentregister
beim 8086/8088 nur
16 Bit breit sind kann ein Segment nicht an jeder beliebigen physikalischen
20-Bit-Adresse beginnen,
da sonst auch die Anfangsadresse eines Segments eine 20-Bit Größe sein
müßte.
es gelten für die Anfangadressen der Segmente folgende Regeln:
- Eine physikalische Segmentanfangsadresse muß ohne Rest durch
16 teilbar sein; dh., die vier
niederwertigen Bits einer physikalischen
Segmentanfangsadresse sind stets 0, worauf zurückgeführt wird,
daß der kleinste Abstand zwischen zwei
Segmentanfangsadressen 10h = 16 Bytes beträgt.
- Die 16 höherwertigen Bits der Segmentanfangsadresse werden als
Paragraphennummer bezeichnet.
Jedes Datensegmentregister enthält eine solche
Paragraphennummer.
Die logische Adresse besteht aus der 16-Bit Paragraphennummer und einer
16-Bit Distanzadresse (Offset)
innerhalb des Segments. Wennd die BIU (Busverbindungseinheit) einen Zugriff auf
den Arbeitsspeicher
ausführt, um z.B. Daten zu holen (READ-Zyklus), zu speichern (WRITE-Zyklus)
oder einen Maschinenbefehl
zu holen (FETCH-Zyklus) muß aus der logischen Adresse die physikalische 20-Bit
Adresse berechnet werden.
Dazu wird die Paragraphennummer in ein spezielles 20-Bit Register der BIU
geholt, 4-Bit nach links geshiftet
und das Offset addiert.
Für Programme und deren Programmier ist es sinvoller mit solchen logischen
Adressen zu arbeiten, da
keine Rücksicht genommen werden muß, in welchen physikalischen Speicherstellen
Programm und
Daten landen.
Protected Mode
Dieser Betriebsmodus, der seine Anfänge im 80286 hat, dient vor allem zum
Schutz von konkurienten
Tasks und unerlaubten Zugriffen von Anwenderprogramme in die Betriebsystemebene.
Jedes Programm,
hat ein bestimmtes Privileglevel, womit Zugriffe auf eine höherwertige
Privilegebene ausgeschlossen
werden können.
Bsp:

Anhand dieser Grafik, wird das Ebenenmodell verdeutlicht. Auf Ebene 0
befindet sich das Betriebssystem.
Auf Ebene 1 und 2 sind die Treiber für die Peripheriegeräte und auf Ebene 3
die Anwenderprogramme
angeordnet.
Weitere wichtige Eigenschaften des Protected Mode:
Visual Memory Paging: Hierbei wird dem Betriebssytem
ermöglicht, das Adressen, die von Programmen
angefordert werden in andere Speicherbereiche oder sogar Festplatte umzuleiten.
IO
Protection:
Programme müssen priviligiert genug sein, um auf Hardware zugreifen zu
dürfen.
Task
Switching:
Beim Taskwechsel werden alle Register gesichert, bevor auf den nächsten
Task
umgeschalten wird.
Segmentkonzept im Protected Mode
Das Segmentkonzept im Protected Mode unterscheidet sich zum Segmentkonzept
des 8086 Mode.
Segmente können nun die Attribute READonly, WRITE + READ und EXEConly besitzen.
Die Segmente
enthalten nun ebenfalls Informationen, ob zugegriffen wurde oder nicht und ob
sich dieses Segment im
physikalischen Speicher oder in einer Auslagerungsdatei befindet.
Im Speicher existiert nun eine Descriptortabelle. Man unterscheidet zwei
Arten , global und lokal.
Im DS (Datensegmentregister) steht nun ein Selector, der auf einen
Descriptor in der Descriptortabelle
verweist. Jeder Descriptor enthält Informationen, wie Startadresse des
zu verwendeten Speicherblocks
im physikalischen Speicher, sowie Größe und andere Anttribute.

G : Granularität,
bedeuted, daß 4 KByte Pages verwendet werden und somit die Größe mindestens
4 Kbyte oder maximal 4 GByte sein kann.
D/B: Jenachdem ob dieses Bit
gesetzt ist, handelt es sich um 16-Bit oder 32-Bit Codesegment.
Im Stacksegment gibt dieses Bit die Obergrenze des Expand-Down Stacks an.
AVL: ist ein Bit, daß frei für das
Betriebssystem verwendbar ist.
P: 'Segment
Present' , daß Segment befindet sich im Speicher
Wird nun versucht, einen definierterten Speicherbereich zu überschreiten,
wird ein Interrupt ausgelöst.
Genauer gesehen, wäre die eine 'Allgemeine Schutzverletzung'. Durch
diesen Interrupt wird
der Task, der diese Schutzverletzung verursachte, durch eine
Betriebssystemroutine beendet.
Es muss jedoch nicht bei jedem Fehler der Task beendet werden, wobei die
Möglichkeit besteht, dass
das Betriebssystem Fehler auch beheben kann.
Beispiele:
- 'Segment Not Present' , das Segment befindet sich nicht im
Hauptspeicher, sondern ist ausgelagert
demzufolge wird das Segent in den Hauptspeicher geladen.
- 'Invalid Opcode' ,der Prozessor kennt einer Befehl nicht, jedoch ist
der dem Betriebssystem bekannt
somit kann der Befehl emuliert werden.
-'Stack Fault' , Stapel voll -> Betriebssystem erweitert den
Stapelspeicher
Quellen: 80x86/Pentium Assembler
(Bertram Wohak / Reinhold Maurus)
Intel Architecture ' Software Developers Manual Vol. 1 (Basic Architecture) '
Intel Architekture ' Software Developers Manual Vol. 3 (System Programming
Guide) '
Glen Masgai
email: masgai@cs.uni-magdeburg.de
|