0% fanden dieses Dokument nützlich (0 Abstimmungen)
2K Ansichten1.317 Seiten

RSB WS19

Das Dokument beschreibt die Vorlesung Rechnerstrukturen und Betriebssysteme. Es enthält Informationen zur Geschichte und Entwicklung von Computern, den Unterschieden zwischen Hardware und Software sowie den ständigen technischen Fortschritten in der Mikroelektronik.

Hochgeladen von

Anna Nguyen
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
2K Ansichten1.317 Seiten

RSB WS19

Das Dokument beschreibt die Vorlesung Rechnerstrukturen und Betriebssysteme. Es enthält Informationen zur Geschichte und Entwicklung von Computern, den Unterschieden zwischen Hardware und Software sowie den ständigen technischen Fortschritten in der Mikroelektronik.

Hochgeladen von

Anna Nguyen
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

MIN-Fakultät

Fachbereich Informatik

64-040 Modul InfB-RSB


Rechnerstrukturen und Betriebssysteme
[Link]
lectures/2019ws/vorlesung/rsb

Andreas Mäder
Universität Hamburg
Fakultät für Mathematik, Informatik und Naturwissenschaften
Fachbereich Informatik
Technische Aspekte Multimodaler Systeme

Wintersemester 2019/2020

A. Mäder 1
Gliederung
64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung

A. Mäder 2
Gliederung (cont.)
64-040 Rechnerstrukturen und Betriebssysteme

14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 3
Gliederung
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
von-Neumann Konzept
Exkurs: Geschichte
Personal Computer
Moore’s Law
System on a chip
Roadmap und Grenzen des Wachstums
Literatur
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung

A. Mäder 4
Gliederung (cont.)
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 5
Informatik
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

Brockhaus-Enzyklopädie: „Informatik“
Die Wissenschaft von der systematischen Verarbeitung von
Informationen, besonders der automatischen Verarbeitung mit Hilfe
von Digitalrechnern (→ Computer). . . .

A. Mäder 6
Informatik
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

Brockhaus-Enzyklopädie: „Informatik“
Die Wissenschaft von der systematischen Verarbeitung von
Informationen, besonders der automatischen Verarbeitung mit Hilfe
von Digitalrechnern (→ Computer). . . .

system. Verarbeitung: von-Neumann Konzept


I Wie löst eine Folge elementarer Befehle (Programm) ein Problem?
⇒ Softwareentwicklung, Programmierung

A. Mäder 6
Informatik
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

Brockhaus-Enzyklopädie: „Informatik“
Die Wissenschaft von der systematischen Verarbeitung von
Informationen, besonders der automatischen Verarbeitung mit Hilfe
von Digitalrechnern (→ Computer). . . .

system. Verarbeitung: von-Neumann Konzept


I Wie löst eine Folge elementarer Befehle (Programm) ein Problem?
⇒ Softwareentwicklung, Programmierung

Digitalrechner: das technische System dazu (Rechnerarchitektur)


I Wie wird Information (Zahlen, Zeichen) repräsentiert/codiert?
I Wie werden Befehle effizient auf der Hardware abgearbeitet?
⇒ Hardwareentwicklung

A. Mäder 6
Trennung von Hardware und Software
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

unterschiedliche Paradigmen
I SW: Hardware ist „notwendiges Übel“
I Abstraktion von der Hardware
I Entwicklung in Hochsprachen (Produktivität)
I HW: Optimierungsziel sind technische Werte
= Taktfrequenz, Latenz, Durchsatz, Leistungsaufnahme etc.
I Maschinenbefehl wird auf Hardwarearchitektur ausgeführt
I technische Entwicklung: Moore’s Law

...

A. Mäder 7
Trennung von Hardware und Software
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

unterschiedliche Paradigmen
I SW: Hardware ist „notwendiges Übel“
I Abstraktion von der Hardware
I Entwicklung in Hochsprachen (Produktivität)
I HW: Optimierungsziel sind technische Werte
= Taktfrequenz, Latenz, Durchsatz, Leistungsaufnahme etc.
I Maschinenbefehl wird auf Hardwarearchitektur ausgeführt
I technische Entwicklung: Moore’s Law

I dies funktioniert seit Jahren! . . .

A. Mäder 7
Trennung von Hardware und Software
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

unterschiedliche Paradigmen
I SW: Hardware ist „notwendiges Übel“
I Abstraktion von der Hardware
I Entwicklung in Hochsprachen (Produktivität)
I HW: Optimierungsziel sind technische Werte
= Taktfrequenz, Latenz, Durchsatz, Leistungsaufnahme etc.
I Maschinenbefehl wird auf Hardwarearchitektur ausgeführt
I technische Entwicklung: Moore’s Law

I dies funktioniert seit Jahren . . . bis Ende 2017

...

A. Mäder 7
Trennung von Hardware und Software
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

unterschiedliche Paradigmen
I SW: Hardware ist „notwendiges Übel“
I Abstraktion von der Hardware
I Entwicklung in Hochsprachen (Produktivität)
I HW: Optimierungsziel sind technische Werte
= Taktfrequenz, Latenz, Durchsatz, Leistungsaufnahme etc.
I Maschinenbefehl wird auf Hardwarearchitektur ausgeführt
I technische Entwicklung: Moore’s Law

I dies funktioniert seit Jahren . . . bis Ende 2017

Problem
... verschiedene Sichtweisen

⇒ Vorlesung RSB: Wie funktioniert ein Digitalrechner?

A. Mäder 7
Motivation
Wie funktioniert ein Digitalrechner?
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

Warum ist das überhaupt wichtig?


I Informatik ohne Digitalrechner undenkbar
I Grundverständnis der Interaktion von SW und HW
I für „performante“ Software
I Sicherheitsaspekte
I ...
I Systemsicht/Variantenvielfalt von Mikroprozessorsystemen
I Supercomputer, Server, Workstations, PCs . . .
I Medienverarbeitung, Mobile Geräte . . .
I RFID-Tags, Wegwerfcomputer . . .

⇒ Informatik Basiswissen
⇒ Bewertung von Trends und Perspektiven
⇒ Chancen und Grenzen der Miniaturisierung

A. Mäder 8
Fortschritt
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

1. ständige technische Fortschritte in Mikro- und Optoelektronik


mit einem weiterhin exponentiellen Wachstum (50 % . . . 100 % pro Jahr)
I Rechenleistung von Prozessoren („Performanz“)
I Speicherkapazität Hauptspeicher (DRAM, SRAM, FLASH)
I Speicherkapazität Langzeitspeicher (Festplatten, FLASH)
I Bandbreite (Netzwerke)
2. neue Entwurfsparadigmen und -werkzeuge
⇒ Möglichkeiten und Anwendungsfelder
⇒ Produkte und Techniken

A. Mäder 9
Fortschritt (cont.)
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

Instr./sec.
Kriterien / Maßgrößen
Verbmobil Spracherkennung
I Rechenleistung: MIPS HDTV/DVR-Video

1G
I MBytes (RAM, HDD) MPEG1 VCD
DVD-Video

MIDI-Synth

I Mbps MP3
Audio-CD
1M
I MPixel JPEG

1 Seite ASCII

1K

Zuse Z1
Athlon/P4
Pentium/90

⇒ jede Rechnergeneration
Apple2 Atari ST

erlaubt neue Anwendungen 1K 1M 1G 1T Speicher

A. Mäder 10
vor 50 Jahren
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel: Apollo 11 (1969)

I [Link]/[Link]

I [Link]/office/pao/History/computers/[Link]

I [Link]/wiki/Apollo_Guidance_Computer

I [Link]/wiki/IBM_System/360

A. Mäder 11
vor 50 Jahren (cont.)
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

1. Bordrechner: AGC (Apollo Guidance Computer)

I Dimension 61 × 32 × 15,0 cm 31,7 kg


20 × 20 × 17,5 cm 8,0 kg
I Taktfrequenz: 1,024 MHz
I Addition 20 —s
I 16-bit Worte, nur Festkomma
I Speicher ROM 36 KWorte 72 KByte Zykluszeit 11,7 ms (85 Hz)
RAM 2 KWorte 4 KByte

A. Mäder 12
vor 50 Jahren (cont.)
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

2. mehrere Großrechner: IBM System/360 Model 75s

A. Mäder 13
vor 50 Jahren (cont.)
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

I je nach Ausstattung: Anzahl der „Schränke“


I Taktfrequenz: bis 5 MHz
I 32-bit Worte, 24-bit Adressraum (16 MByte)
I Speicherhierarchie: bis 1 MByte Hauptspeicher
(1,3 MHz Zykluszeit)
I (eigene) Fließkomma Formate
I Rechenleistung: 0,7 Dhrystone MIPS

A. Mäder 14
vor 50 Jahren (cont.)
1 Einführung 64-040 Rechnerstrukturen und Betriebssysteme

I je nach Ausstattung: Anzahl der „Schränke“


I Taktfrequenz: bis 5 MHz
I 32-bit Worte, 24-bit Adressraum (16 MByte)
I Speicherhierarchie: bis 1 MByte Hauptspeicher
(1,3 MHz Zykluszeit)
I (eigene) Fließkomma Formate
I Rechenleistung: 0,7 Dhrystone MIPS
I . . . und 2016
CPU Cores [DMIPS] Fclk [GHz]
Smartphone Exynos 8890 8 47 840 2,3
Desktop PC Core i7 6950X 10 317 900 3,0

A. Mäder 14
von-Neumann Konzept
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

I J. Mauchly, J.P. Eckert, J. von-Neumann 1945


I Abstrakte Maschine mit minimalem Hardwareaufwand
I System mit Prozessor, Speicher, Peripheriegeräten
I die Struktur ist unabhängig von dem Problem, das Problem wird
durch austauschbaren Speicherinhalt (Programm) beschrieben
I gemeinsamer Speicher für Programme und Daten
I fortlaufend adressiert
I Programme können wie Daten manipuliert werden
I Daten können als Programm ausgeführt werden
I Befehlszyklus: Befehl holen, decodieren, ausführen
⇒ enorm flexibel
I alle aktuellen Rechner basieren auf diesem Prinzip
I aber vielfältige Architekturvarianten, Befehlssätze usw.

A. Mäder 15
von-Neumann Rechner: IAS Computer
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

John von Neumann, R. J. Oppenheimer, IAS Computer Princeton [Link]

A. Mäder 16
Programmverarbeitung
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

Programm als Sequenz elementarer


Programmanfang
I
Anweisungen (Befehle) ersten Befehl aus
dem Speicher holen

I als Bitvektoren im Speicher codiert


I Interpretation (Operanden, Befehle Befehl in das Befehls-
register bringen
und Adressen) ergibt sich aus dem
Kontext (der Adresse) Ausführung eventueller
Adressänderungen und ggf.
Auswertung weiterer Angaben

zeitsequenzielle Ausführung der


im Befehl
I
Instruktionen eventuell Operanden aus
dem Speicher holen
nächsten Befehl aus
dem Speicher holen

Umsetzen des Operationscodes


in Steueranweisungen

Operation ausführen,
Befehlszähler um 1 erhöhen
oder Sprungadresse laden

Programmende?
Nein

Ja
Ende

A. Mäder 17
von-Neumann Rechner
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

Fünf zentrale Komponenten:


I Prozessor mit Steuerwerk und Rechenwerk (ALU, Register)
I Speicher, gemeinsam genutzt für Programme und Daten
I Eingabe- und Ausgabewerke
I verbunden durch Bussystem

A. Mäder 18
Hardwareaufbau / Rechnerarchitektur
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

I Verschaltung der Hardwarekomponenten für alle mögl.


Datentransfers
I abhängig vom Befehl werden nur bestimmte Pfade aktiv
I Ausführungszyklus
Befehl holen decodieren PC inkrementieren
BR AR BR AR BR AR
D D D D D D
ENA ENA ENA ENA ENA ENA

0 0 0
A A A

INCR INCR INCR


CLK CLK CLK CLK CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN NR 00_H
Q
NR 00_H
Q Y A B CIN NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU OPC
ALU OPC
ALU
A1 A0 COUT Y A1 A0 COUT Y A1 A0 COUT Y

S 2:1 Y
S 2:1 Y
S 2:1 Y

PC AKKU PC AKKU PC AKKU


D D D D D D
ENA ENA ENA ENA ENA ENA

CLK CLK CLK CLK CLK CLK

NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q

STW STW STW


A1 A0 A1 A0 A1 A0

2:1 2:1 2:1


Befehl alu_function Befehl alu_function Befehl alu_function
AkkuInhalt enable_pc S AkkuInhalt enable_pc S AkkuInhalt enable_pc S
Y DIN Y DIN Y DIN
Overflow select_pcmux Overflow select_pcmux Overflow select_pcmux

0 0 0
select_addr_mux select_addr_mux select_addr_mux

enable_breg nCS enable_breg nCS enable_breg nCS

clock
RAM clock
RAM clock
RAM
CLK enable_areg A CLK enable_areg A CLK enable_areg A

nRESET enable_akku nWE nRESET enable_akku nWE nRESET enable_akku nWE

enable_ram_write enable_ram_write enable_ram_write

switch switch_in overflow_flag switch switch_in overflow_flag switch switch_in overflow_flag


DOUT DOUT DOUT

cycle3_execute cycle3_execute cycle3_execute

cycle2_address execute cycle2_address execute cycle2_address execute


cycle1_fetch address cycle1_fetch address cycle1_fetch address
fetch fetch fetch

BR AR BR AR BR AR
D D D D D D
ENA ENA ENA ENA ENA ENA

0 0 0
A A A

INCR INCR INCR


CLK CLK CLK CLK CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN NR 00_H
Q
NR 00_H
Q Y A B CIN NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU OPC
ALU OPC
ALU
A1 A0 COUT Y A1 A0 COUT Y A1 A0 COUT Y

S 2:1 Y
S 2:1 Y
S 2:1 Y

PC AKKU PC AKKU PC AKKU


D D D D D D
ENA ENA ENA ENA ENA ENA

CLK CLK CLK CLK CLK CLK

NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q

STW STW STW


A1 A0 A1 A0 A1 A0

2:1 2:1 2:1


Befehl alu_function Befehl alu_function Befehl alu_function
AkkuInhalt enable_pc S AkkuInhalt enable_pc S AkkuInhalt enable_pc S
Y DIN Y DIN Y DIN
Overflow select_pcmux Overflow select_pcmux Overflow select_pcmux

0 0 0
select_addr_mux select_addr_mux select_addr_mux

enable_breg nCS enable_breg nCS enable_breg nCS

clock
RAM clock
RAM clock
RAM
CLK enable_areg A CLK enable_areg A CLK enable_areg A

nRESET enable_akku nWE nRESET enable_akku nWE nRESET enable_akku nWE

enable_ram_write enable_ram_write enable_ram_write

switch switch_in overflow_flag switch switch_in overflow_flag switch switch_in overflow_flag


DOUT DOUT DOUT

cycle3_execute cycle3_execute cycle3_execute

cycle2_address execute cycle2_address execute cycle2_address execute


cycle1_fetch address cycle1_fetch address cycle1_fetch address
fetch fetch fetch

rechnen speichern springen


A. Mäder 19
Beispiel: PRIMA (die primitive Maschine)
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

I ein (minimaler) 8-bit von-Neumann Rechner

BR AR
D D
ENA ENA

0
A

INCR
CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU
A1 A0 COUT Y

S 2:1 Y

PC AKKU
D D
ENA ENA

CLK CLK

NR 00_H
Q
NR 00_H
Q

STW
A1 A0

2:1
Befehl alu_function

AkkuInhalt enable_pc S
Y DIN
Overflow select_pcmux

0
select_addr_mux
enable_breg nCS

RAM
clock CLK enable_areg A

nRESET enable_akku nWE

enable_ram_write

switch switch_in overflow_flag


DOUT

cycle3_execute

cycle2_address execute
cycle1_fetch
address
fetch

[HenHA] Hades Demo: 50-rtlib/90-prima/prima

A. Mäder 20
PRIMA: Befehl holen
BR = RAM[PC]
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

BR AR
D D
ENA ENA

0
A

INCR
CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU
A1 A0 COUT Y

S 2:1 Y

PC AKKU
D D
ENA ENA

CLK CLK

NR 00_H
Q
NR 00_H
Q

STW
A1 A0

2:1
Befehl alu_function

AkkuInhalt enable_pc S
Y DIN
Overflow select_pcmux

0
select_addr_mux
enable_breg nCS

RAM
clock CLK enable_areg A

nRESET enable_akku nWE

enable_ram_write

switch switch_in overflow_flag


DOUT

cycle3_execute

cycle2_address execute
cycle1_fetch
address
fetch

A. Mäder 21
PRIMA: decodieren
Steuersignale = decode(BR)
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

BR AR
D D
ENA ENA

0
A

INCR
CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU
A1 A0 COUT Y

S 2:1 Y

PC AKKU
D D
ENA ENA

CLK CLK

NR 00_H
Q
NR 00_H
Q

STW
A1 A0

2:1
Befehl alu_function

AkkuInhalt enable_pc S
Y DIN
Overflow select_pcmux

0
select_addr_mux
enable_breg nCS

RAM
clock CLK enable_areg A

nRESET enable_akku nWE

enable_ram_write

switch switch_in overflow_flag


DOUT

cycle3_execute

cycle2_address execute
cycle1_fetch
address
fetch

A. Mäder 22
PRIMA: PC inkrementieren
PC = PC+1
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

BR AR
D D
ENA ENA

0
A

INCR
CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU
A1 A0 COUT Y

S 2:1 Y

PC AKKU
D D
ENA ENA

CLK CLK

NR 00_H
Q
NR 00_H
Q

STW
A1 A0

2:1
Befehl alu_function

AkkuInhalt enable_pc S
Y DIN
Overflow select_pcmux

0
select_addr_mux
enable_breg nCS

RAM
clock CLK enable_areg A

nRESET enable_akku nWE

enable_ram_write

switch switch_in overflow_flag


DOUT

cycle3_execute

cycle2_address execute
cycle1_fetch
address
fetch

A. Mäder 23
PRIMA: rechnen
Akku = Akku + RAM[AR]
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

BR AR
D D
ENA ENA

0
A

INCR
CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU
A1 A0 COUT Y

S 2:1 Y

PC AKKU
D D
ENA ENA

CLK CLK

NR 00_H
Q
NR 00_H
Q

STW
A1 A0

2:1
Befehl alu_function

AkkuInhalt enable_pc S
Y DIN
Overflow select_pcmux

0
select_addr_mux
enable_breg nCS

RAM
clock CLK enable_areg A

nRESET enable_akku nWE

enable_ram_write

switch switch_in overflow_flag


DOUT

cycle3_execute

cycle2_address execute
cycle1_fetch
address
fetch

A. Mäder 24
PRIMA: speichern
RAM[AR] = Akku
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

BR AR
D D
ENA ENA

0
A

INCR
CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU
A1 A0 COUT Y

S 2:1 Y

PC AKKU
D D
ENA ENA

CLK CLK

NR 00_H
Q
NR 00_H
Q

STW
A1 A0

2:1
Befehl alu_function

AkkuInhalt enable_pc S
Y DIN
Overflow select_pcmux

0
select_addr_mux
enable_breg nCS

RAM
clock CLK enable_areg A

nRESET enable_akku nWE

enable_ram_write

switch switch_in overflow_flag


DOUT

cycle3_execute

cycle2_address execute
cycle1_fetch
address
fetch

A. Mäder 25
PRIMA: springen
PC = AR
1.1 Einführung - von-Neumann Konzept 64-040 Rechnerstrukturen und Betriebssysteme

BR AR
D D
ENA ENA

0
A

INCR
CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU
A1 A0 COUT Y

S 2:1 Y

PC AKKU
D D
ENA ENA

CLK CLK

NR 00_H
Q
NR 00_H
Q

STW
A1 A0

2:1
Befehl alu_function

AkkuInhalt enable_pc S
Y DIN
Overflow select_pcmux

0
select_addr_mux
enable_breg nCS

RAM
clock CLK enable_areg A

nRESET enable_akku nWE

enable_ram_write

switch switch_in overflow_flag


DOUT

cycle3_execute

cycle2_address execute
cycle1_fetch
address
fetch

später dazu mehr. . .


A. Mäder 26
Timeline: Vorgeschichte
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

???? Abakus als erste Rechenhilfe


1642 Pascal: Addierer/Subtrahierer
1671 Leibniz: Vier-Operationen-Rechenmaschine
1837 Babbage: Analytical Engine

1937 Zuse: Z1 (mechanisch)


1939 Zuse: Z3 (Relais, Gleitkomma)
1941 Atanasoff & Berry: ABC (Röhren, Magnettrommel)
1944 Mc-Culloch Pitts (Neuronenmodell)
1946 Eckert & Mauchly: ENIAC (Röhren)
1949 Eckert, Mauchly, von Neumann: EDVAC
(erster speicherprogrammierter Rechner)
1949 Manchester Mark-1 (Indexregister)

A. Mäder 27
Abakus
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

Wert in Spalte 8 0 0 5 14 2 5 2 10 7 0

Kugel = 5

Kugel = 1

Zehnerpotenz
der Spalte 1010 10 9 10 8 10 7 10 6 10 5 10 4 10 3 10 2 10 1 10 0

A. Mäder 28
Mechanische Rechenmaschinen
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

1623 Schickard: Sprossenrad, Addierer/Subtrahierer


1642 Pascal: „Pascalene“
1673 Leibniz: Staffelwalze, Multiplikation/Division
1774 Philipp Matthäus Hahn: erste gebrauchsfähige
„4-Spezies“-Maschine

A. Mäder 29
Difference Engine
Charles Babbage 1822: Berechnung nautischer Tabellen
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

Original von 1832 und Nachbau von 1989, London Science Museum

A. Mäder 30
Analytical Engine
Charles Babbage 1837-1871: frei programmierbar, Lochkarten, unvollendet
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 31
Zuse Z1
Konrad Zuse 1937: 64 Register, 22-bit, mechanisch, Lochfilm
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 32
Zuse Z3
Konrad Zuse 1941, 64 Register, 22-bit, 2000 Relays, Lochfilm
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 33
Atanasoff-Berry Computer (ABC)
[Link] 1942: 50-bit Festkomma, Röhren und Trommelspeicher,
fest programmiert
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 34
ENIAC – Electronic Numerical Integrator and Computer
Mauchly & Eckert, 1946: Röhren, Steckbrett-Programm
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 35
First computer bug
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 36
EDVAC
Mauchly, Eckert & von Neumann, 1949: Röhren, speicherprogrammiert
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 37
Manchester Mark-1
Williams & Kilburn, 1949: Trommelspeicher, Indexregister
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 38
Manchester EDSAC
Wilkes 1951: Mikroprogrammierung, Unterprogramme, speicherprogrammiert
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 39
erste Computer, ca. 1950
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

I zunächst noch kaum Softwareunterstützung


I nur zwei Schichten:
1. Programmierung in elementarer Maschinensprache (ISA level)
2. Hardware in Röhrentechnik (device logic level)
− Hardware kompliziert und unzuverlässig

Mikroprogrammierung (Maurice Wilkes, Cambridge, 1951):


I Programmierung in komfortabler Maschinensprache
I Mikroprogramm-Steuerwerk (Interpreter)
I einfache, zuverlässigere Hardware
I Grundidee der sog. CISC-Rechner (68000, 8086, VAX)

A. Mäder 40
erste Betriebssysteme
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

I erste Rechner jeweils nur von einer Person benutzt


I Anwender = Programmierer = Operator
I Programm laden, ausführen, Fehler suchen usw.

⇒ Maschine wird nicht gut ausgelastet


⇒ Anwender mit lästigen Details überfordert

Einführung von Betriebssystemen


I „system calls“
I Batch-Modus: Programm abschicken, warten
I Resultate am nächsten Tag abholen

A. Mäder 41
zweite Generation: Transistoren
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

I Erfindung des Transistors 1948 J. Bardeen, W. Brattain, W. Shockley

I schneller, zuverlässiger, sparsamer als Röhren


I Miniaturisierung und dramatische Kostensenkung

I Beispiel Digital Equipment Corporation PDP-1 (1961)


I 4Ki Speicher (4096 Worte á 18-bit)
I 200 KHz Taktfrequenz
I 120 000 $
I Grafikdisplay: erste Computerspiele
I Nachfolger PDP-8: 16 000 $
I erstes Bussystem
I 50 000 Stück verkauft

A. Mäder 42
Festplatten
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

Massenspeicher bei frühen Computern


I Lochkarten
I Lochstreifen
I Magnetband

I Magnettrommel
I Festplatte
IBM 350 RAMAC (1956)
5 MByte, 600 ms Zugriffszeit

[Link]
A. Mäder 43
dritte Generation: ICs
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

I Erfindung der integrierten Schaltung 1958 (Noyce, Kilby)


I Dutzende. . . Hunderte. . . Tausende Transistoren auf einem Chip

I IBM Serie-360: viele Maschinen, ein einheitlicher Befehlssatz


I volle Softwarekompatibilität
Eigenschaft Model 30 Model 40 Model 50 Model 65
Rel. Leistung [Model 30] 1 3,5 10 21
Zykluszeit [ns] 1 000 625 500 250
Max. Speicher [KiB] 64 256 256 512
Pro Zyklus gelesene Byte 1 2 4 16
Max. Anzahl von Datenkanälen 3 3 4 6

A. Mäder 44
vierte Generation: VLSI
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

I VLSI = Very Large Scale Integration


I ab 10 000 Transistoren pro Chip

I gesamter Prozessor passt auf einen Chip


I steigende Integrationsdichte erlaubt immer mehr Funktionen

1972 Intel 4004: erster Mikroprozessor


1975 Intel 8080, Motorola 6800, MOS 6502 . . .
1981 IBM PC („personal computer“) mit Intel 8088
...

I Massenfertigung erlaubt billige Prozessoren (< 1$)


I Miniaturisierung ermöglicht mobile Geräte

A. Mäder 45
Xerox Alto: first workstation
1.2 Einführung - Exkurs: Geschichte 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 46
Personal Computer: Aufbau des IBM PC (1981)
1.3 Einführung - Personal Computer 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I Intel 8086/8088, 512 KByte RAM, Betriebssystem MS-DOS


I alle Komponenten über den zentralen (ISA-) Bus verbunden
I Erweiterung über Einsteckkarten

A. Mäder 47
PC Prototyp (1981) und Hauptplatine
1.3 Einführung - Personal Computer 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 48
Aufbau mit PCI-Bus (2000)
1.3 Einführung - Personal Computer 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

A. Mäder 49
Hauptplatine (2005)
1.3 Einführung - Personal Computer 64-040 Rechnerstrukturen und Betriebssysteme

[Link]/wiki/Computerhardware_für_Anfänger

A. Mäder 50
Aufbau (2010)
1.3 Einführung - Personal Computer 64-040 Rechnerstrukturen und Betriebssysteme

Intel® Core™2 Duo Processor


Intel® Core™2 Quad Processor

Display support for 10.6 GB/s


HDMI, DVI, HDCP, MEC, ADD2

Intel® Graphics Media DDR2 or DDR3


Accelerator 3100 with 6.4 GB/s or 8.5 GB/s
Intel® Clear Video G33
Technology GMCH DDR2 or DDR3
6.4 GB/s or 8.5 GB/s
PCI Express 8
x16 Graphics GB/s

2 GB/s DMI
12 Hi Speed USB 2.0 Ports; 480 Mb/s Intel® High
Dual EHCI; USB Port Disable each x2 Definition Audio

Intel® Quiet System


500 ICH9 Technology
6 PCI Express* x1
MB/s
ICH9DH
ICH9R 3 6 Serial ATA Ports; eSATA;
each x1
Gb/s Port Disable
each
Intel® Integrated
10/100/1000 MAC Intel® Matrix
LPC or SPI Storage Technology
GLCI LCI
Intel® Gigabit LAN Connect BIOS Support Intel® Turbo Memory

Optional

Intel [Link]

I Mehrkern-Prozessoren („dual-/quad-/octa-core“)
I schnelle serielle Direktverbindungen statt PCI/ISA Bus

A. Mäder 51
Aufbau (2017)
1.3 Einführung - Personal Computer 64-040 Rechnerstrukturen und Betriebssysteme

1x16 lanes PCI Express* 3.0


Graphics or Intel SSD
OR 9th and 8th Gen DDR4 2xDIMMs per Channel
2x8 lanes PCI Express* 3.0 Intel® Core™ Up to 2666 MHz1
Graphics and Intel SSD Processors

OR DDR4 2xDIMMs per Channel


Intel® UHD Graphics Up to 2666 MHz1
1x8 and 2x4 lanes
PCI Express* 3.0 Graphics
and Intel SSD

Three Independent
DP/HDMI Display Support DMI 3.0

Intel® Optane™ Memory


Up to 24 x PCI Express* 3.0 Support3
8 Gb/s each x 1
Intel® Smart Sound
6 x SATA 6 Gb/s Ports;
Technology1
SATA Port Disable
Up to
6 Gb/s Intel® Z370
Intel® High
Up to 10 x USB 3.1 Gen 1 Chipset
Definition Audio1
Ports; 14 x USB 2.0 Ports;
USB Port Disable
Intel® Rapid Storage
SPI Technology with RAID1
Intel® Integrated
10/100/1000 MAC
Intel® Rapid Storage
Intel® ME 11 Firmware Technology for PCI
PCIe* x 1 SMBus
Express* Storage1
Intel® Platform Trust
Intel® Ethernet Connection
Technology1

Intel® Extreme Tuning


Optional
Utility Support
Intel [Link]


I Speichercontroller und externe Anbindung (PCI Express) in CPU

I Grafikprozessor in CPU

A. Mäder 52
Rechner-Spektrum
1.3 Einführung - Personal Computer 64-040 Rechnerstrukturen und Betriebssysteme

I Anzahl an Systemen / Prozessoren – weltweit


System Anzahl (geschätzt!)
PCs, Workstation, Server 2 Milliarden
Tablets 1,3 Milliarden
Smartphones 4,8 Milliarden
„Embedded Systems“ 75-100 Milliarden

I Preis des Prozessors


Typ Preis [$] Beispielanwendung
Wegwerfcomputer 0,5 Glückwunschkarten
Mikrocontroller 5 Uhren, Geräte, Autos
Mobile Computer und 50 Smartphones, Tablets, Heimvideospiele
Spielkonsolen
Personalcomputer 500 Desktop- oder Notebook-Computer
Server 5 000 Netzwerkserver
Workstation Verbund 50 000 – 500 000 Abteilungsrechner (Minisupercomp.)
Großrechner (Mainframe) 5 Millionen Batch-Verarbeitung in einer Bank
Supercomputer > 50 Millionen Klimamodelle, Simulationen

A. Mäder 53
Moore’s Law
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

I bessere Technologie ermöglicht immer kleinere Transistoren


I Materialkosten sind proportional zur Chipfläche

⇒ bei gleicher Funktion kleinere und billigere Chips


⇒ bei gleicher Größe leistungsfähigere Chips

Moore’s Law Gordon Moore, Mitgründer von Intel, 1965

Speicherkapazität von ICs vervierfacht sich alle drei Jahre

⇒ schnelles exponentielles Wachstum


I klares Kostenoptimum bei hoher Integrationsdichte
I trifft auch auf Prozessoren zu

A. Mäder 54
Moore’s Law (cont.)
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

Gordon Moore, 1965, [Moo65]:


Cramming more components onto integrated circuits

Wird das so weitergehen?


I Vorhersage gilt immer noch
I „IRDS“ Prognosen bis zum Jahr 2034 [IRDS18]

A. Mäder 55
Moore’s Law: Transistoren pro Speicherchip
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I Vorhersage: 60% jährliches Wachstum der Transistoranzahl pro IC

A. Mäder 56
Moore’s Law: Evolution der Prozessoren
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

A. Mäder 57
Moore’s Law: Evolution der Prozessoren
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

Modell Typ Jahr # Trans.


Xeon Platinum 8180 Intel CPU 2017 8,0 Mrd.

A. Mäder 57
Moore’s Law: Evolution der Prozessoren
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

Modell Typ Jahr # Trans.


Xeon Platinum 8180 Intel CPU 2017 8,0 Mrd.
A12X Bionic Apple SOC 2018 10,0 Mrd.

A. Mäder 57
Moore’s Law: Evolution der Prozessoren
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

Modell Typ Jahr # Trans.


Xeon Platinum 8180 Intel CPU 2017 8,0 Mrd.
A12X Bionic Apple SOC 2018 10,0 Mrd.
GV100 Volta Nvidia GPU 2017 21,1 Mrd.

A. Mäder 57
Moore’s Law: Evolution der Prozessoren
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

Modell Typ Jahr # Trans.


Xeon Platinum 8180 Intel CPU 2017 8,0 Mrd.
A12X Bionic Apple SOC 2018 10,0 Mrd.
GV100 Volta Nvidia GPU 2017 21,1 Mrd.
Versal VC1902 Xilinx FPGA 2019 37,0 Mrd.
A. Mäder 57
Moore’s Law: Evolution der Prozessoren (cont.)
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

16-Core SPARC T3
Transistor count Six-Core Core i7
2,600,000,000 Six-Core Xeon 7400 10-Core Xeon Westmere-EX
Dual-Core Itanium 2 8-core POWER7
Quad-core z196
AMD K10
1,000,000,000 POWER6
Quad-Core Itanium Tukwila
8-Core Xeon Nehalem-EX
Itanium 2 with 9MB cache Six-Core Opteron 2400
AMD K10 Core i7 (Quad)
Core 2 Duo
Itanium 2 Cell

100,000,000 AMD K8

Barton Atom
Pentium 4
AMD K7
AMD K6-III
curve shows transistor
AMD K6
10,000,000 count doubling every Pentium III
two years Pentium II
AMD K5
Pentium

80486
1,000,000

80386

80286
100,000
68000
80186

8086 8088

8085
10,000 6800 6809
8080 Z80

8008 MOS 6502


2,300 4004 RCA 1802

Date of introduction 1971 1980 1990 2000 2011

A. Mäder 58
Moore’s Law: Kosten pro Komponente
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

Originalskizze von G. Moore [Intel]

A. Mäder 59
Moore’s Law: Formel und Beispiele
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

L(t) = L(0) · 2t=18


mit: L(t) = Leistung zum Zeitpunkt t,
L(0) = Leistung zum Zeitpunkt 0,
und Zeit t in Monaten.

Einige Formelwerte: Jahr 1: 1,5874


Jahr 2: 2,51984
Jahr 3: 4
Jahr 5: 10,0794
Jahr 6: 16
Jahr 7: 25,3984
Jahr 8: 40,3175

A. Mäder 60
Leistungssteigerung der Spitzenrechner seit 1993
[Link] [Link]/wiki/Supercomputer
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

Jahr Rechner CPU Linpack [TFlop/s] Prozessoren


1993 TMC CM-5/1024 (SuperSparc 32MHz) 0,0597 1 024
1994 Intel XP/S140 (80860 50MHz) 0,1434 3 680
1995 Fujitsu NWT (105 MHz) 0,17 140
1996 Hitachi SR2201/1024 (HARP-1E 120MHz) 0,2204 1 024
1997 Intel ASCI Red (Pentium Pro 200MHz) 1,068 7 264
1999 Intel ASCI Red (Pentium Pro 333MHz) 2,121 9 472
2001 IBM ASCI White (Power3 375MHz) 7,226 8 192
2002 NEC Earth Simulator (NEC 1GHz) 35,86 5 120
2005 IBM BlueGene/L (PowerPC 440 2C 700MHz) 136,8 65 536
2006 IBM BlueGene/L (PowerPC 440 2C 700MHz) 280,6 131 072
2008 IBM Roadrunner (Opteron 2C 1,8GHz + IBM Cell 9C 3,2 GHz) 1 026,0 122 400
2010 Cray XT5-HE Jaguar (Opteron 6C 2,6GHz) 1 759,0 224 162
2011 Fujitsu K computer (SPARC64 VIIIfx 2.0GHz) 8 162,0 548 352
2012 IBM SuperMUC (Xeon E5-2680 8C 2,7GHz) 2 897,0 147 456
2012 IBM BlueGene/Q Sequoia (Power BQC 16C 1,6GHz) 16 324,8 1 572 864
2013 IBM BlueGene/Q JUQUEEN (Power BQC 16C 1,6GHz) 5 008,9 458 752
2013 NUDT Tianhe-2 (Xeon E5-2692 12C 2,2 GHz + Xeon Phi 31S1P) 33 862,7 3 120 000
2016 Sunway TaihuLight (Sunway SW26010 260C 1,45 GHz) 93 014,6 10 649 600
2018 SuperMUC-NG (Xeon Platinum 8174 24C 3,1GHz) 19 476,6 305 856
2018 Summit (IBM Power 9 22C 3,07 GHz + NVIDIA GV100) 148 600,0 2 414 592

A. Mäder 61
Leistungssteigerung der Spitzenrechner seit 1993
[Link] [Link]/wiki/Supercomputer
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

Jahr Rechner CPU Linpack [TFlop/s] Prozessoren Power [KW]


1993 TMC CM-5/1024 (SuperSparc 32MHz) 0,0597 1 024
1994 Intel XP/S140 (80860 50MHz) 0,1434 3 680
1995 Fujitsu NWT (105 MHz) 0,17 140
1996 Hitachi SR2201/1024 (HARP-1E 120MHz) 0,2204 1 024
1997 Intel ASCI Red (Pentium Pro 200MHz) 1,068 7 264
1999 Intel ASCI Red (Pentium Pro 333MHz) 2,121 9 472
2001 IBM ASCI White (Power3 375MHz) 7,226 8 192
2002 NEC Earth Simulator (NEC 1GHz) 35,86 5 120 3 200
2005 IBM BlueGene/L (PowerPC 440 2C 700MHz) 136,8 65 536 716
2006 IBM BlueGene/L (PowerPC 440 2C 700MHz) 280,6 131 072 1 433
2008 IBM Roadrunner (Opteron 2C 1,8GHz + IBM Cell 9C 3,2 GHz) 1 026,0 122 400 2 345
2010 Cray XT5-HE Jaguar (Opteron 6C 2,6GHz) 1 759,0 224 162 6 950
2011 Fujitsu K computer (SPARC64 VIIIfx 2.0GHz) 8 162,0 548 352 9 899
2012 IBM SuperMUC (Xeon E5-2680 8C 2,7GHz) 2 897,0 147 456 3 423
2012 IBM BlueGene/Q Sequoia (Power BQC 16C 1,6GHz) 16 324,8 1 572 864 7 890
2013 IBM BlueGene/Q JUQUEEN (Power BQC 16C 1,6GHz) 5 008,9 458 752 2 301
2013 NUDT Tianhe-2 (Xeon E5-2692 12C 2,2 GHz + Xeon Phi 31S1P) 33 862,7 3 120 000 17 808
2016 Sunway TaihuLight (Sunway SW26010 260C 1,45 GHz) 93 014,6 10 649 600 15 371
2018 SuperMUC-NG (Xeon Platinum 8174 24C 3,1GHz) 19 476,6 305 856
2018 Summit (IBM Power 9 22C 3,07 GHz + NVIDIA GV100) 148 600,0 2 414 592 10 096

A. Mäder 61
Leistungssteigerung der Spitzenrechner seit 1993 (cont.)
[Link] [Link]/wiki/Supercomputer
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

10 EFlop/s

1 EFlop/s

100 PFlop/s

10 PFlop/s

1 PFlop/s
Performance

100 TFlop/s

10 TFlop/s

1 TFlop/s

100 GFlop/s

10 GFlop/s

1 GFlop/s

100 MFlop/s
1995 2000 2005 2010 2015 2020

Sum #1 #500 Lists


A. Mäder 62
Moore’s Law: Aktuelle Trends
1.4 Einführung - Moore’s Law 64-040 Rechnerstrukturen und Betriebssysteme

I Miniaturisierung schreitet weiter fort


I aber Taktraten erreichen physikalisches Limit
I steigender Stromverbrauch, zwei Effekte:
1. Leckströme
2. proportional zu Taktrate
Entwicklungen
I > 4 GByte Hauptspeicher sind Standard
I 64-bit Adressierung

⇒ seit 2011: CPU plus Grafikeinheit


⇒ Integration mehrerer CPUs auf einem Chip (2-. . . 32-Cores)
⇒ Cache Speicher (SRAM) auf dem Die
⇒ Integration von Peripheriegeräten (Speicherinterface, PCIe, . . . )
⇒ SoC: „System on a chip“

A. Mäder 63
SoC: System on a chip
1.5 Einführung - System on a chip 64-040 Rechnerstrukturen und Betriebssysteme

Gesamtes System auf einem Chip integriert:


I ein oder mehrere Prozessoren, z.T. verschiedene Typen
hohe Rechenleistung
I

energieeffizient
I

⇒ z.B. ARM mit [Link] Konzept


I Cache Hierarchie: 1-Level D- und I-Cache / 2-Level
I dedizierte Prozessoren: Grafik, Video(de)codierung, DSP . . .
I Hauptspeicher (evtl. auch extern), Speichercontroller
I weitere Speicher für Medien/Netzwerkoperationen

A. Mäder 64
SoC: System on a chip (cont.)
1.5 Einführung - System on a chip 64-040 Rechnerstrukturen und Betriebssysteme

I Peripherieblöcke nach Kundenwunsch konfiguriert:


I Displayansteuerung: DP, HDMI . . .
I A/V-Schnittstellen: Kamera, Mikrofone, Audio . . .
I serielle und parallele Schnittstellen, SPI, I/O-Pins . . .
I Feldbusse: I2 C, CAN . . .
I PC-like: USB, Firewire, SATA . . .
I Netzwerk kabelgebunden (Ethernet)
I Funkschnittstellen: WLAN, Bluetooth, 4G . . .
I Smartphones, Tablet-Computer, Medien-/DVD-Player,
WLAN-Router, NAS-/Home-Server . . .

A. Mäder 65
SoC Beispiele
1.5 Einführung - System on a chip 64-040 Rechnerstrukturen und Betriebssysteme

I Bluetooth-Controller (2000)
[Fur00]

Prozess 0,25 —m
Metall 3-Layer
VDD 2,5 V
Transistoren 4,3 Mill.
Chipfläche 20 mm2
Taktrate 0 . . . 13 MHz
MIPS 12
Power 75 mW
MIPS/W 160

A. Mäder 66
SoC Beispiele (cont.)

1.5 Einführung - System on a chip 64-040 Rechnerstrukturen und Betriebssysteme

I Texas Instruments OMAP 5430 (2011) [TI]

SD 3.0
NAND/NOR USB SS/HS
LPDDR2 LPDDR2 Flash host/target
eMMC SSD

2x MIPI® HSI EMIF 1 EMIF 2 GPMC MMC/SD SATA 2.0 USB 3.0 OTG
3x USB 2.0 USB HS
host target
MIPI LLI
OMAP5430 (ULPI/TLL/HSIC)
TI C2C Companion
3G/4G MIPI LLI/
modem USB/HSIC Dynamic memory manager ARM ARM UniPortSM-M device
L2 cache Cortex-M4 Cortex-M4 MIPI CSI-3
UART/SPI Up to
four
SDIO ARM® ARM POWERVR™ mini- IVA-HD 3x MIPI CSI-2 +
cameras
Cortex™-A15 Cortex-A15 SGX544-MPx C64x video CPI
McBSP MPCore MPCore 3D graphics DSP accelerator Camera control

(up to 2 GHz) (up to 2 GHz) 2D Image signal DIG MIC


WiLink™ I2C/SPI
graphics processor
TWL6041 32 kHz Crystal
wireless SDIO
connectivity L3 Network-on-chip interconnect Audio In/Out
UART
Timers, Int Controller, Mailboxes, I2C Headset
McBSP System DMA Audio processor Speakers
PDM
Boot/Secure ROM, L3 RAM Vibrators
TWL SLIMbus®
M-Shield™ system security technology: SHA-1/SHA-2/MD5, Amplifiers HF speakers
Main Power IC
2
battery
DES/3DES, RNG, AES, PKA, secure WDT, keys, crypto DMA Micro Handset
Monitor Multi-pipe microphone
L4 peripherals display sub-system MIPI DSI LCD
HDQ/1-Wire (DSS) MIPI DSI LCD
Clocks REF/CLK MIPI DBI-B/DPI LCD
Debug & trace
Serial devices (4) UARTs cJTAG/STP/PTM UART GPIO Keypad I2C/SPI HDMI 1.4a Up to
four
displays

Emulator Trace GPIO Keypad Touch TPD12S015 3D


pod analyzer screen HDTV
Fast controller
IrDA

A. Mäder 67
SoC Beispiele (cont.)
1.5 Einführung - System on a chip 64-040 Rechnerstrukturen und Betriebssysteme

I Samsung Exynos-5422 (2014) [Samsung]

A. Mäder 68
SoC Beispiele (cont.)
1.5 Einführung - System on a chip 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel: Odroid XU4 [HK]

I vollständiger 8-Kern Microcomputer


I Betriebssystem: Android oder Linux

A. Mäder 69
Grenzen des Wachstums
1.6 Einführung - Roadmap und Grenzen des Wachstums 64-040 Rechnerstrukturen und Betriebssysteme

I Jeder exponentielle Verlauf stößt irgendwann an natürliche oder


wirtschaftliche Grenzen
I Beispiel: physikalische Limits
I Eine DRAM-Speicherzelle speichert etwa 200 Elektronen (2012)
Skalierung: es werden mit jeder neuen Technologiestufe weniger
I Offensichtlich ist die Grenze spätestens dann erreicht, wenn nur
noch ein einziges Elektron gespeichert würde
I Ab diesem Zeitpunkt gibt es bessere Performanz nur noch durch
bessere Algorithmen / Architekturen!
⇒ Annahme: 50 % Skalierung pro Jahr, 200 Elektronen/Speicherzelle
gesucht: x =Jahre
b Fortschritt
⇒ 200=(1; 5x ) ≥ 1 ab = exp(b · ln a)
x = ln(200)= ln(1; 5) ≈ 13 Jahre

A. Mäder 70
Roadmap: IRDS
1.6 Einführung - Roadmap und Grenzen des Wachstums 64-040 Rechnerstrukturen und Betriebssysteme

IEEE International Roadmap for Devices and Systems


[Link]
I IEEE: Institute of Electrical and Electronics Engineers
I Beteiligung von
I Halbleiterherstellern
I Geräte-Herstellern
I Universitäten und Forschungsinstituten
I Fachverbänden aus USA, Europa, Asien
I Publikation von langjährigen Vorhersagen
I Zukünftige Entwicklung der Halbleitertechnologie
I Prognosen zu Fertigungsprozessen, Modellierung, Simulation,
Entwurf etc.
I für Chips (Speicher, Prozessoren, SoC . . . ) und Systeme

A. Mäder 71
Roadmap: IRDS (cont.)
1.6 Einführung - Roadmap und Grenzen des Wachstums 64-040 Rechnerstrukturen und Betriebssysteme

Table MM01 – More Moore – Logic Core Device Technology Roadmap (Ausschnitt, 2017)
YEAR OF PRODUCTION 2017 2019 2021 2024 2027 2030 2033
P54M36 P48M28 P42M24 P36M21 P32M14 P32M14T2 P32M14T4
Logic industry "Node Range" Labeling (nm) "10" "7" "5" "3" "2.1" "1.5" "1.0"
IDM-Foundry node labeling i10-f7 i7-f5 i5-f3 i3-f2.1 i2.1-f1.5 i1.5-f1.0 i1.0-f0.7
finFET finFET LGAA LGAA LGAA VGAA, LGAA VGAA, LGAA
Logic device structure options
FDSOI LGAA finFET VGAA VGAA 3DVLSI 3DVLSI
Logic device mainstream device finFET finFET LGAA LGAA LGAA VGAA VGAA
DEVICE STRUCTURES

LOGIC TECHNOLOGY ANCHORS


193i, High-NA 193i, High-NA 193i, High-NA 193i, High-NA
Patterning technology inflection for Mx interconnect 193i, EUV 193i, EUV DP 193i, EUV DP
EUV EUV+(DSA) EUV+(DSA) EUV+(DSA)
Ge, IIIV Ge, IIIV (TFET?), Ge, IIIV (TFET?), Ge, IIIV (TFET?),
Channel material technology inflection Si SiGe25% SiGe50%
(TFET?), 2D Mat 2D Mat 2D Mat 2D Mat
Conformal
Conformal Stacked-device Stacked-device
Process technogy inflection Doping, Channel, RMG Steep-SS, 3D Steep-SS, 3D
deposition Non-Cu Mx Non-Cu Mx
Contact
3D-stacking: 3D-device: 3D-device: 3D-device: 3D-device:
Stacking generation inflection 2D 2D W2W P-over-N Mem-on-Logic Mem-on-Logic Logic-on-Logic
D2W Hetero Hetero Hetero Hetero
LOGIC TECHNOLOGY INTEGRATION CAPACITY
Design scaling factor for standard cell - 0,98 1,09 0,96 1,03 2,00 1,00

...
Design scaling factor for SRAM (111) bitcell - 1,00 1,00 1,00 1,00 1,25 1,00

POWER AND PERFORMANCE SCALING FACTORS


Vdd (V) 0,75 0,70 0,65 0,65 0,65 0,60 0,55
Physical gate length for HP Logic (nm) 20,0 18,0 16,0 14,0 12,0 12,0 12,0

...
Datapath speed improvement at Vdd - relative 1,00 1,19 1,21 1,34 1,56 1,60 1,70

Power density of logic path cube at fmax - relative 1,00 1,20 1,21 1,82 2,69 4,49 8,00
fmax of a single CPU core at Vdd (GHz) 2,5 3,0 3,0 3,3 3,9 4,0 4,2
favg at constant power density and Vdd (GHz) 2,50 2,48 2,51 1,84 1,45 0,89 0,53

...
CPU SiP throughput at fmax (TFLOPS/sec)

INTERCONNECT TECHNOLOGY
0,16 0,27 0,46 0,79 1,34 2,27 3,86

Conductor Cu, non-Cu Cu, non-Cu Cu, non-Cu Cu, non-Cu Cu, non-Cu Cu, non-Cu Cu, non-Cu

...
Number of wiring layers 14 16 18 20 20 20 20

A. Mäder 72
Moore’s Law
Beispiel für die Auswirkung von Moore’s Law
1.6 Einführung - Roadmap und Grenzen des Wachstums 64-040 Rechnerstrukturen und Betriebssysteme

Angenommen die Lösung einer Rechenaufgabe dauert derzeit vier


Jahre und die Rechenleistung wächst jedes Jahr um 60 %.
Wie lösen wir das Problem ?

A. Mäder 73
Moore’s Law: Schöpferische Pause
Beispiel für die Auswirkung von Moore’s Law
1.6 Einführung - Roadmap und Grenzen des Wachstums 64-040 Rechnerstrukturen und Betriebssysteme

Angenommen die Lösung einer Rechenaufgabe dauert derzeit vier


Jahre und die Rechenleistung wächst jedes Jahr um 60 %.
Ein mögliches Vorgehen ist dann das folgende:
I Wir warten drei Jahre, kaufen dann einen neuen Rechner und
erledigen die Rechenaufgabe in einem Jahr.
I Wie das ?

A. Mäder 73
Moore’s Law: Schöpferische Pause
Beispiel für die Auswirkung von Moore’s Law
1.6 Einführung - Roadmap und Grenzen des Wachstums 64-040 Rechnerstrukturen und Betriebssysteme

Angenommen die Lösung einer Rechenaufgabe dauert derzeit vier


Jahre und die Rechenleistung wächst jedes Jahr um 60 %.
Ein mögliches Vorgehen ist dann das folgende:
I Wir warten drei Jahre, kaufen dann einen neuen Rechner und
erledigen die Rechenaufgabe in einem Jahr.
⇒ Nach einem Jahr können wir einen Rechner kaufen, der um den
Faktor 1,6 Mal schneller ist, nach zwei Jahren bereits 1,6 · 1,6
Mal schneller, und nach drei Jahren (also am Beginn des
vierten Jahres) gilt (1 + 60 %)3 = 4,096.
I Wir sind also sogar ein bisschen schneller fertig, als wenn wir
den jetzigen Rechner die ganze Zeit durchlaufen lassen.

A. Mäder 73
Wie geht es jetzt weiter?
1.6 Einführung - Roadmap und Grenzen des Wachstums 64-040 Rechnerstrukturen und Betriebssysteme

Ab jetzt erst mal ein bottom-up Vorgehen:


Start mit grundlegenden Aspekten
I Informationsverarbeitung und -repräsentation
I Darstellung von Zahlen und Zeichen
I arithmetische und logische Operationen
I Schaltnetze, Schaltwerke, endliche Automaten

dann Kennenlernen aller Basiskomponenten des Digitalrechners


I Gatter, Flipflops . . .
I Register, ALU, Speicher . . .

und Konstruktion eines Rechners (HW)


mit seinen Betriebsmitteln (SW)
I Befehlssatz, -abarbeitung, Assembler
I Pipelining, Speicherhierarchie
I Dateisystem, Ein- / Ausgabe
I Prozesskontrolle, Locking, Interrrupts
I ...
A. Mäder 74
Literatur
1.7 Einführung - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –


Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5
[HenHA] N. Hendrich: HADES — HAmburg DEsign System.
Universität Hamburg, FB Informatik, Lehrmaterial.
[Link]/applets/hades/webdemos
[Fur00] S. Furber: ARM System-on-Chip Architecture.
2nd edition, Pearson Education Limited, 2000.
ISBN 978–0–201–67519–1
[Moo65] G.E. Moore: Cramming More Components Onto
Integrated Circuits. in: Electronics 38 (1965), April 19, Nr. 8

A. Mäder 75
Literatur (cont.)
1.7 Einführung - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[IRDS18] International Roadmap for Devices and Systems (IRDS)


2018 Edition. IEEE International Roadmap for Devices and
Systems, 2018. [Link]/editions/2018
[Intel] Intel Corp.; Santa Clara, CA.
[Link]
[Link]/content/www/us/en/history/
[Link]
[TI] Texas Instruments Inc.; Dallas, TX. [Link]
[Samsung] Samsung Electronics Co., Ltd.; Suwon, Südkorea.
[Link]
[HK] Hardkernel co., Ltd.; AnYang, Südkorea.
[Link]

A. Mäder 76
Gliederung
2 Informationsverarbeitung 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
Semantic Gap
Abstraktionsebenen
Beispiel: HelloWorld
Definitionen und Begriffe
Informationsübertragung
Zeichen
Literatur
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung

A. Mäder 77
Gliederung (cont.)
2 Informationsverarbeitung 64-040 Rechnerstrukturen und Betriebssysteme

8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 78
Definition: Digitalrechner
2 Informationsverarbeitung 64-040 Rechnerstrukturen und Betriebssysteme

Tanenbaum, Austin: Rechnerarchitektur [TA14]


Ein Computer oder Digitalrechner ist eine Maschine, die Probleme
für den Menschen lösen kann, indem sie die ihr gegebenen Befehle
ausführt. Eine Befehlssequenz, die beschreibt, wie eine bestimmte
Aufgabe auzuführen ist, nennt man Programm.
Die elektronischen Schaltungen eines Computers verstehen eine
begrenzte Menge einfacher Befehle, in die alle Programme
konvertiert werden müssen, bevor sie sich ausführen lassen. . . .

I Probleme lösen: durch Abarbeiten einfacher Befehle


I Abfolge solcher Befehle ist ein Programm
I Maschine versteht nur ihre eigene Maschinensprache

A. Mäder 79
Befehlssatz und Semantic Gap
. . . verstehen eine begrenzte Menge einfacher Befehle . . .
2.1 Informationsverarbeitung - Semantic Gap 64-040 Rechnerstrukturen und Betriebssysteme

Typische Beispiele für solche Befehle:


I addiere die zwei Zahlen in Register R1 und R2
I überprüfe, ob das Resultat Null ist
I kopiere ein Datenwort von Adresse 13 ins Register R4
⇒ extrem niedriges Abstraktionsniveau

I natürliche Sprache immer mit Kontextwissen


Beispiel: „vereinbaren Sie einen Termin mit dem Steuerberater“

I Semantic gap:
Diskrepanz zu einfachen elementaren Anweisungen
I Vermittlung zwischen Mensch und Computer erfordert
zusätzliche Abstraktionsebenen und Software

A. Mäder 80
Rechnerarchitektur bzw. -organisation
2.1 Informationsverarbeitung - Semantic Gap 64-040 Rechnerstrukturen und Betriebssysteme

I Definition solcher Abstraktionsebenen bzw. Schichten


I mit möglichst einfachen und sauberen Schnittstellen
I jede Ebene definiert eine neue (mächtigere) Sprache

I diverse Optimierungs-Kriterien/Möglichkeiten:
I Performanz, Größe, Leistungsaufnahme . . .
I Kosten: Hardware, Software, Entwurf . . .
I Zuverlässigkeit, Wartungsfreundlichkeit, Sicherheit . . .

Achtung / Vorsicht:
I Gesamtverständnis erfordert Kenntnisse auf allen Ebenen
I häufig Rückwirkung von unteren auf obere Ebenen

A. Mäder 81
Rückwirkung von unteren Ebenen: Arithmetik
2.1 Informationsverarbeitung - Semantic Gap 64-040 Rechnerstrukturen und Betriebssysteme

public class Overflow {


...
public static void main( String [] args ) {
printInt ( 0 ); // 0
printInt ( 1 ); // 1
printInt ( -1 ); // -1
printInt ( 2+(3*4) ); // 14
printInt ( 100*200*300 ); // 6000000
printInt ( 100*200*300*400 ); // -1894967296 (!)
printDouble ( 1.0 ); // 1.0
printDouble ( 0.3 ); // 0.3
printDouble ( 0.1 + 0.1 + 0.1 ); // 0.300000000000004 (!)
printDouble ( (0.3) - (0.1+0.1+0.1) ); // -5.5E -17 (!)
}
}

A. Mäder 82
Rückwirkung von unteren Ebenen: Performanz
2.1 Informationsverarbeitung - Semantic Gap 64-040 Rechnerstrukturen und Betriebssysteme

public static double sumRowCol ( double [][] matrix ) {


int rows = matrix . length ;
int cols = matrix [0]. length ;
double sum = 0.0;
for( int r = 0; r < rows; r++ ) {
for( int c = 0; c < cols; c++ ) {
sum += matrix [r][c];
}
}
return sum;
}

Matrix creation (5000×5000) 2105 ms


Matrix row-col summation 75 ms
Matrix col-row summation 383 ms ⇒ 5 × langsamer
Sum = 600,8473695346258 / 600,8473695342268 ⇒ andere Werte

A. Mäder 83
Maschine mit mehreren Ebenen
2.2 Informationsverarbeitung - Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

Tanenbaum: Structured Computer Organization [TA14]

A. Mäder 84
Abstraktionsebenen und Sprachen
2.2 Informationsverarbeitung - Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

I jede Ebene definiert eine neue (mächtigere) Sprache


I Abstraktionsebene ⇐⇒ Sprache
I L0 < L1 < L2 < L3 < . . .
Software zur Übersetzung zwischen den Ebenen
I Compiler:
Erzeugen eines neuen Programms, in dem jeder L1 Befehl
durch eine zugehörige Folge von L0 Befehlen ersetzt wird
I Interpreter:
direkte Ausführung der L0 Befehlsfolgen zu jedem L1 Befehl

A. Mäder 85
Virtuelle Maschine
2.2 Informationsverarbeitung - Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

I für einen Interpreter sind L1 Befehle einfach nur Daten


I die dann in die zugehörigen L0 Befehle umgesetzt werden

⇒ dies ist gleichwertig mit einer:


Virtuellen Maschine M1 für die Sprache L1
I ein Interpreter erlaubt es, jede beliebige Maschine zu simulieren
I und zwar auf jeder beliebigen (einfacheren) Maschine M0
I Programmierer muss sich nicht um untere Schichten kümmern
I Nachteil: die virtuelle Maschine ist meistens langsamer als die
echte Maschine M1
I Maschine M0 kann wiederum eine virtuelle Maschine sein (!)
I unterste Schicht ist jeweils die Hardware

A. Mäder 86
Übliche Einteilung der Ebenen
2.2 Informationsverarbeitung - Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

Anwendungsebene Hochsprachen (Java, Smalltalk . . . )


Assemblerebene low-level Anwendungsprogrammierung
Betriebssystemebene Betriebssystem, Systemprogrammierung

Rechnerarchitektur Schnittstelle zwischen SW und HW,


Befehlssatz, Datentypen
Mikroarchitektur Steuerwerk und Operationswerk:
Register, ALU, Speicher . . .
Logikebene Grundschaltungen: Gatter, Flipflops . . .
Transistorebene Elektrotechnik, Transistoren, Chip-Layout
Physikalische Ebene Geometrien, Chip-Fertigung

A. Mäder 87
Beispiel: Sechs Ebenen
2.2 Informationsverarbeitung - Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

Java, C, Ruby, ...

PE, ELF, ...

Microsoft Windows, Linux

Intel x86

Instruktions-Cache

Chip Hardware

A. Mäder 88
Hinweis: Ebenen vs. Vorlesungen im BSc-Studiengang
2.2 Informationsverarbeitung - Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

Anwendungsebene: SE1+SE2, AD . . .

Assemblerebene: RSB
Betriebssystemebene: RSB, VSS

Rechnerarchitektur: RSB
Mikroarchitektur: RSB
Logikebene: RSB
Device-Level: –

A. Mäder 89
HelloWorld: Anwendungsebene Quellcode
2.3 Informationsverarbeitung - Beispiel: HelloWorld 64-040 Rechnerstrukturen und Betriebssysteme

/* HelloWorld .c - print a welcome message */

# include <stdio .h>

int main( int argc , char ** argv ) {


printf ( "Hello , world !\n" );
return 0;
}

Übersetzung
gcc -S HelloWorld .c
gcc -c HelloWorld .c
gcc -o HelloWorld .exe HelloWorld .c

A. Mäder 90
HelloWorld: Assemblerebene cat HelloWorld.s
2.3 Informationsverarbeitung - Beispiel: HelloWorld 64-040 Rechnerstrukturen und Betriebssysteme

.file " HelloWorld.c "


.section .rodata
.LC0:
.string "Hello , world!"
.text
.globl main
.type main , @function
main:
.LFB0 :
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp , %rbp
.cfi_def_cfa_register 6
subq $16 , %rsp
movl %edi , -4(% rbp)
movq %rsi , -16(% rbp)
movl $.LC0 , %edi
call puts
movl $0 , %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0 :
.size main , .-main
.ident "GCC: ( Ubuntu 5.4.0 -6 ubuntu1 ~16 .04.10 ) 5.4.0 20160609 "
.section .[Link] -stack ,"",@progbits

A. Mäder 91
HelloWorld: Objectcode od -x HelloWorld.o
2.3 Informationsverarbeitung - Beispiel: HelloWorld 64-040 Rechnerstrukturen und Betriebssysteme

0000000 457f 464c 0102 0001 0000 0000 0000 0000


0000020 0001 003e 0001 0000 0000 0000 0000 0000
0000040 0000 0000 0000 0000 02b0 0000 0000 0000
0000060 0000 0000 0040 0000 0000 0040 000d 000a
0000100 4855 e589 8348 10ec 7d89 48fc 7589 bff0
0000120 0000 0000 00e8 0000 b800 0000 0000 c3c9
0000140 6548 6c6c 2c6f 7720 726f 646c 0021 4700
0000160 4343 203a 5528 7562 746e 2075 2e35 2e34
0000200 2d30 7536 7562 746e 3175 317e 2e36 3430
0000220 312e 2930 3520 342e 302e 3220 3130 3036
0000240 3036 0039 0000 0000 0014 0000 0000 0000
0000260 7a01 0052 7801 0110 0c1b 0807 0190 0000
0000300 001c 0000 001c 0000 0000 0000 0020 0000
0000320 4100 100e 0286 0d43 5b06 070c 0008 0000
0000340 0000 0000 0000 0000 0000 0000 0000 0000
0000360 0000 0000 0000 0000 0001 0000 0004 fff1
...

A. Mäder 92
HelloWorld: Disassemblieren objdump -d HelloWorld.o
2.3 Informationsverarbeitung - Beispiel: HelloWorld 64-040 Rechnerstrukturen und Betriebssysteme

HelloWorld.o : Dateiformat elf64 -x86 -64

Disassembly of section .text:

0000000000000000 <main >:


0: 55 push %rbp
1: 48 89 e5 mov %rsp ,% rbp
4: 48 83 ec 10 sub $0x10 ,% rsp
8: 89 7d fc mov %edi ,-0x4(% rbp)
b: 48 89 75 f0 mov %rsi ,-0 x10 (% rbp)
f: bf 00 00 00 00 mov $0x0 ,% edi
14: e8 00 00 00 00 callq 19 <main +0x19 >
19: b8 00 00 00 00 mov $0x0 ,% eax
1e: c9 leaveq
1f: c3 retq

A. Mäder 93
HelloWorld: Maschinencode od -x [Link]
2.3 Informationsverarbeitung - Beispiel: HelloWorld 64-040 Rechnerstrukturen und Betriebssysteme

0000000 457f 464c 0102 0001 0000 0000 0000 0000


0000020 0002 003e 0001 0000 0430 0040 0000 0000
0000040 0040 0000 0000 0000 19e0 0000 0000 0000
0000060 0000 0000 0040 0038 0009 0040 001f 001c
0000100 0006 0000 0005 0000 0040 0000 0000 0000
0000120 0040 0040 0000 0000 0040 0040 0000 0000
0000140 01f8 0000 0000 0000 01f8 0000 0000 0000
0000160 0008 0000 0000 0000 0003 0000 0004 0000
0000200 0238 0000 0000 0000 0238 0040 0000 0000
0000220 0238 0040 0000 0000 001c 0000 0000 0000
0000240 001c 0000 0000 0000 0001 0000 0000 0000
0000260 0001 0000 0005 0000 0000 0000 0000 0000
0000300 0000 0040 0000 0000 0000 0040 0000 0000
0000320 070c 0000 0000 0000 070c 0000 0000 0000
0000340 0000 0020 0000 0000 0001 0000 0006 0000
0000360 0e10 0000 0000 0000 0e10 0060 0000 0000
...

A. Mäder 94
Hardware: „Versteinerte Software“
2.3 Informationsverarbeitung - Beispiel: HelloWorld 64-040 Rechnerstrukturen und Betriebssysteme

I eine virtuelle Maschine führt L1 Software aus


I und wird mit Software oder Hardware realisiert

⇒ Software und Hardware sind logisch äquivalent


„Hardware is just petrified Software“ Karen Panetta Lentz

– jedenfalls in Bezug auf L1 Programmausführung

Entscheidung für Software- oder Hardwarerealisierung?


I abhängig von vielen Faktoren, u.a.
I Kosten, Performanz, Zuverlässigkeit
I Anzahl der (vermuteten) Änderungen und Updates
I Sicherheit gegen Kopieren . . .

A. Mäder 95
Information
2.4 Informationsverarbeitung - Definitionen und Begriffe 64-040 Rechnerstrukturen und Betriebssysteme

I Information ∼ abstrakter Gehalt einer Aussage

I Die Aussage selbst, mit der die Information dargestellt bzw.


übertragen wird, ist eine Repräsentation der Information
I im Kontext der Informationsverarbeitung / -übertragung:
Nachricht

I Das Ermitteln der Information aus einer Repräsentation heißt


Interpretation

I Das Verbinden einer Information mit ihrer Bedeutung in der


realen Welt heißt Verstehen

A. Mäder 96
Repräsentation: Beispiele
2.4 Informationsverarbeitung - Definitionen und Begriffe 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel: Mit der Information „25“ sei die abstrakte Zahl gemeint,
die sich aber nur durch eine Repräsentation angeben lässt:
I Text deutsch: fünfundzwanzig
I Text englisch: twentyfive
...
I Zahl römisch: XXV
I Zahl dezimal: 25
I Zahl binär: 11001
I Zahl Dreiersystem: 221
...
I Morse-Code: • • −−− •••••

A. Mäder 97
Interpretation: Information vs. Repräsentation
2.4 Informationsverarbeitung - Definitionen und Begriffe 64-040 Rechnerstrukturen und Betriebssysteme

I Wo auch immer Repräsentationen auftreten, meinen wir


eigentlich die Information, z.B.:

5 · (2 + 3) = 25

I Die Information selbst kann man überhaupt nicht notieren (!)


I Es muss immer Absprachen geben über die verwendete
Repräsentation. Im obigen Beispiel ist implizit die
Dezimaldarstellung gemeint, man muss also die Dezimalziffern
und das Stellenwertsystem kennen.

I Repräsentation ist häufig mehrstufig, z.B.


Zahl: Dezimalzahl 347
Ziffer: 4-bit binär 0011 0100 0111 (BCD)
Bit: elektrische Spannung 0,1V 0,1V 2,5V 2,5V . . .

A. Mäder 98
Repräsentation: Ebenen
2.4 Informationsverarbeitung - Definitionen und Begriffe 64-040 Rechnerstrukturen und Betriebssysteme

In jeder (Abstraktions-) Ebene gibt es beliebig viele Alternativen


der Repräsentation
I Auswahl der jeweils effizientesten Repräsentation
I unterschiedliche Repräsentationen je nach Ebene

I Beispiel: Repräsentation der Zahl ı = 3; 1415 : : : im


I x86 Prozessor 80-bit Binärdaten, Spannungen
I Hauptspeicher 64-bit Binärdaten, Spannungen
I Festplatte codierte Zahl, magnetische Bereiche
I CD-ROM codierte Zahl, Land/Pits-Bereiche
I Papier Text, „3,14159265. . . “
I ...

A. Mäder 99
Repräsentation: digitale und analoge Welt
2.4 Informationsverarbeitung - Definitionen und Begriffe 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel: Binärwerte in
2,5 V CMOS-Technologie

K. von der Heide [Hei05]


Interaktives Skript T1, demobitrep

I Spannungsverlauf des Signals ist kontinuierlich


I Abtastung zu bestimmten Zeitpunkten
I Quantisierung über abgegrenzte Wertebereiche:
I 0; 0 V ≤ v (t) ≤ 0; 7 V : Interpretation als 0
I 1; 7 V ≤ v (t) ≤ 2; 5 V : Interpretation als 1
I außerhalb und innerhalb: ungültige Werte

A. Mäder 100
Information vs. Nachricht
2.4 Informationsverarbeitung - Definitionen und Begriffe 64-040 Rechnerstrukturen und Betriebssysteme

I Aussagen
N1 Er besucht General Motors
N2 Unwetter am Alpenostrand
N3 Sie nimmt ihren Hut

I Alle Aussagen sind aber doppel/mehrdeutig:


N1 Firma? Militär?
N2 Alpen-Ostrand? Alpeno-Strand?
N3 tatsächlich oder im übertragenen Sinn?

⇒ Interpretation: Es handelt sich um drei Nachrichten, die


jeweils zwei verschiedene Informationen enthalten

A. Mäder 101
Information vs. Nachricht (cont.)
2.4 Informationsverarbeitung - Definitionen und Begriffe 64-040 Rechnerstrukturen und Betriebssysteme

I Information: Wissen um oder Kenntnis über Sachverhalte


und Vorgänge – als Begriff nicht informationstheoretisch
abgestützt, sondern an umgangssprachlicher Bedeutung
orientiert
I Nachricht: Zeichen oder Funktionen, die Informationen zum
Zweck der Weitergabe aufgrund bekannter oder unterstellter
Abmachungen darstellen (DIN 44 300)

I Beispiel für eine Nachricht:


Temperaturangabe in Grad Celsius oder Fahrenheit
I Die Nachricht ist also eine Darstellung von Informationen und
nicht der Übermittlungsvorgang

A. Mäder 102
Modell der Informationsübertragung
2.5 Informationsverarbeitung - Informationsübertragung 64-040 Rechnerstrukturen und Betriebssysteme

Information wird in
Nachricht überführt Nachricht wird interpretiert
-1
I1 N1 N2 I2
α α

Abmachung über Bedeutung

Beschreibung der Informationsübermittlung:


I Abbildung ¸−1 erzeugt Nachricht N1 aus Information I1
I Übertragung der Nachricht an den Zielort
I Interpretation ¸ der Nachricht N2 liefert die Information I2

A. Mäder 103
Modell der Informationsübertragung (cont.)
2.5 Informationsverarbeitung - Informationsübertragung 64-040 Rechnerstrukturen und Betriebssysteme

Nachrichtentechnisches Modell: Störungen bei der Übertragung


Informations- Sender und Übertragungs- Empfänger Informations-
Quelle Kanalcodierung kanal und Decoder Senke

Störungen
und Rauschen

Beispiele
I Bitfehler beim Speichern
I Störungen beim Funkverkehr
I Schmutz oder Kratzer auf einer CD/DVD
I usw.

A. Mäder 104
Verarbeitung von Information
2.5 Informationsverarbeitung - Informationsübertragung 64-040 Rechnerstrukturen und Betriebssysteme

Repräsentation
natürlicher Zahlen
durch Stellenwert-
systeme

K. von der Heide [Hei05]


Interaktives Skript T1,
inforepres

A. Mäder 105
Informationstreue
2.5 Informationsverarbeitung - Informationsübertragung 64-040 Rechnerstrukturen und Betriebssysteme

Ergibt ¸ gefolgt von ff dasselbe wie  gefolgt von ¸0 ,


dann heißt  informationstreu ff(¸(r )) = ¸0 ((r ))
I ¸0 ist die Interpretation des Resultats der Operation 
häufig sind ¸ und ¸0 gleich, aber nicht immer

I ist ff injektiv, so nennen wir  eine Umschlüsselung


durch die Verarbeitung ff geht keine Information verloren
I ist  injektiv, so nennen wir  eine Umcodierung
I wenn ff innere Verknüpfung der Menge J und  innere
Verknüpfung der Menge R, dann ist ¸ ein Homomorphismus
der algebraischen Strukturen (J ; ff) und (R; )
I ist ff bijektiv, liegt ein Isomorphismus vor

A. Mäder 106
Informationstreue (cont.)
2.5 Informationsverarbeitung - Informationsübertragung 64-040 Rechnerstrukturen und Betriebssysteme

Welche mathematischen Eigenschaften gelten bei der


Informationsverarbeitung, in der gewählten Repräsentation?

Beispiele
I Gilt x 2 ≥ 0?
I float: ja
I signed integer: nein

I Gilt (x + y ) + z = x + (y + z)?
I integer: ja
I float: nein
1.0E20 + (-1.0E20 + 3.14) = 0

I Details folgen später

A. Mäder 107
Beschreibung von Information durch Zeichen
2.6 Informationsverarbeitung - Zeichen 64-040 Rechnerstrukturen und Betriebssysteme

I Zeichen: engl. character


Element z aus einer zur Darstellung von Information
vereinbarten, einer Abmachung unterliegenden, endlichen
Menge Z von Elementen

I Die Menge Z heißt Zeichensatz oder Zeichenvorrat


engl. character set

I Beispiele
I Z1 = {0; 1}
I Z2 = {0; 1; 2; : : : ; 9; A; B; C; D; E; F}
I Z3 = {¸; ˛; ‚; : : : ; !}
I Z4 = {CR; LF}

A. Mäder 108
Beschreibung von Information durch Zeichen (cont.)
2.6 Informationsverarbeitung - Zeichen 64-040 Rechnerstrukturen und Betriebssysteme

I Numerischer Zeichensatz: Zeichenvorrat aus Ziffern


und/oder Sonderzeichen zur Darstellung von Zahlen
I Alphanumerischer Zeichensatz: Zeichensatz aus
(mindestens) den Dezimalziffern und den Buchstaben des
gewöhnlichen Alphabets, meistens auch mit Sonderzeichen
(Leerzeichen, Punkt, Komma usw.)

A. Mäder 109
Binärzeichen
2.6 Informationsverarbeitung - Zeichen 64-040 Rechnerstrukturen und Betriebssysteme

I Binärzeichen: engl. binary element, binary digit, bit


Jedes der Zeichen aus einem Vorrat / aus einer Menge von
zwei Symbolen

I Beispiele
I Z1 = {0; 1}
I Z2 = {high; low}
I Z3 = {rot, grün}
I Z4 = {+; −}

A. Mäder 110
Alphabet
2.6 Informationsverarbeitung - Zeichen 64-040 Rechnerstrukturen und Betriebssysteme

I Alphabet: engl. alphabet


Ein in vereinbarter Reihenfolge geordneter Zeichenvorrat A = Z

I Beispiele
I A1 = {0; 1; 2; : : : ; 9}
I A2 = {Mo; Di; Mi; Do; Fr; Sa; So}
I A3 = {A; B; C; : : : ; Z}

A. Mäder 111
Zeichenkette
2.6 Informationsverarbeitung - Zeichen 64-040 Rechnerstrukturen und Betriebssysteme

I Zeichenkette: engl. string


Eine Folge von Zeichen
I Wort: engl. word
Eine Folge von Zeichen, die in einem gegebenen
Zusammenhang als Einheit bezeichnet wird
I Worte mit 8 bit werden als Byte bezeichnet
I Stelle: engl. position
Die Lage/Position eines Zeichens innerhalb einer Zeichenkette

I Beispiel
I s=H e l l o , w o r l d !

A. Mäder 112
Zahlen- und Zeichendarstellung in RSB
2.6 Informationsverarbeitung - Zeichen 64-040 Rechnerstrukturen und Betriebssysteme

3. Natürliche Zahlen engl. integer numbers


Festkommazahlen engl. fixed point numbers
Gleitkommazahlen engl. floating point numbers

4. Arithmetik

5. Aspekte der Textcodierung


Ad-hoc Codierungen
ASCII und ISO-8859-1
Unicode

13. Pointer (Referenzen, Maschinenadressen)

A. Mäder 113
Literatur
2.7 Informationsverarbeitung - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –


Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5
[Hei05] K. von der Heide: Vorlesung: Technische Informatik 1 —
interaktives Skript. Universität Hamburg, FB Informatik, 2005.
[Link]/lectures/2004ws/
vorlesung/t1

A. Mäder 114
Gliederung
3 Ziffern und Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
Konzept der Zahl
Stellenwertsystem
Umrechnung zwischen verschiedenen Basen
Zahlenbereich und Präfixe
Festkommazahlen
Darstellung negativer Zahlen
Gleitkomma und IEEE 754
Maschinenworte
Literatur
4. Arithmetik
5. Zeichen und Text

A. Mäder 115
Gliederung (cont.)
3 Ziffern und Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 116
Konzept der Zahl
3.1 Ziffern und Zahlen - Konzept der Zahl 64-040 Rechnerstrukturen und Betriebssysteme

„Das Messen ist der Ursprung der Zahl als Abstraktion der Anzahl
von Objekten die man abzählen kann. . . “ [Ifr10]

Abstraktion zum:
I Zählen
I Speichern
I Rechnen

A. Mäder 117
Eigenschaften eines Zahlensystems
3.1 Ziffern und Zahlen - Konzept der Zahl 64-040 Rechnerstrukturen und Betriebssysteme

I Zahlenbereich: kleinste und größte darstellbare Zahl?


I Darstellung negativer Werte?
I –"– gebrochener Werte?
I –"– sehr großer Werte?

I Unterstützung von Rechenoperationen?


Addition, Subtraktion, Multiplikation, Division etc.
I Abgeschlossenheit unter diesen Operationen?

I Methode zur dauerhaften Speicherung/Archivierung?


I Sicherheit gegen Manipulation gespeicherter Werte?

A. Mäder 118
Abstraktion: Verschiedene Symbole für eine Zahl
3.1 Ziffern und Zahlen - Konzept der Zahl 64-040 Rechnerstrukturen und Betriebssysteme

[Ifr10]

A. Mäder 119
Zählen mit den Fingern („digits“)
3.1 Ziffern und Zahlen - Konzept der Zahl 64-040 Rechnerstrukturen und Betriebssysteme

[Ifr10]

A. Mäder 120
Speicherung
3.1 Ziffern und Zahlen - Konzept der Zahl 64-040 Rechnerstrukturen und Betriebssysteme

Tonbörse: 15. Jh. v. Chr. Kerbhölzer

Knotenschnüre [Ifr10]

A. Mäder 121
Rechnen: Römische Ziffern
3.1 Ziffern und Zahlen - Konzept der Zahl 64-040 Rechnerstrukturen und Betriebssysteme

I Ziffern: I=1, V=5, X=10, L=50, C=100, D=500, M=1000


I Werte eins bis zehn: I, II, III, IV, V, VI, VII, VIII, IX, X
I Position der Ziffern ist signifikant:
I nach Größe der Ziffernsymbole sortiert, größere stehen links
I andernfalls Abziehen der kleineren von der größeren Ziffer
I IV=4, VI=6, XL=40, LXX=70, CM=900

I heute noch in Gebrauch: Jahreszahlen, Seitennummern usw.


Beispiele: MDCCCXIII=1813, MMIX=2009

− keine Symbole zur Darstellung großer Zahlen


− Rechenoperationen so gut wie unmöglich

A. Mäder 122
Babylon: Einführung der Null, 3 Jh. v. Chr.
3.1 Ziffern und Zahlen - Konzept der Zahl 64-040 Rechnerstrukturen und Betriebssysteme

[Ifr10]
A. Mäder 123
Babylon: Sexagesimalsystem
3.1 Ziffern und Zahlen - Konzept der Zahl 64-040 Rechnerstrukturen und Betriebssysteme

I vor ungefähr 4 000 Jahren, erstes Stellenwertsystem


I Basis 60
I zwei Symbole: | = 1 und < = 10
I Einritzen gerader und gewinkelter Striche auf Tontafeln
I Null bekannt, aber nicht mitgeschrieben
Leerzeichen zwischen zwei Stellen
I Beispiele
I ||||| 5
I <<||| 23
I | <<< 90 = 1 · 60 + 3 · 10
I | <<| 3 621 = 1 · 3 600 + 0 · 60 + 2 · 10 + 1
I für Zeitangaben und Winkeleinteilung heute noch in Gebrauch

A. Mäder 124
Dezimalsystem
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I das im Alltag gebräuchliche Zahlensystem


I Einer, Zehner, Hunderter, Tausender usw.
I Zehntel, Hundertstel, Tausendstel usw.

A. Mäder 125
Stellenwertsystem („Radixdarstellung“)
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I Wahl einer geeigneten Zahlenbasis b („Radix“)


I 10: Dezimalsystem
I 16: Hexadezimalsystem (Sedezimalsystem)
I 2: Dualsystem
I Menge der entsprechenden Ziffern {0; 1; : : : ; b − 1}
I inklusive einer besonderen Ziffer für den Wert Null
I Auswahl der benötigten Anzahl n von Stellen
n−1
X
|z| = ai · b i
i=0

b Basis ai Koeffizient an Stelle i


I universell verwendbar, für beliebig große Zahlen

A. Mäder 126
Dualsystem
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I Stellenwertsystem zur Basis 2


I braucht für gegebene Zahl ca. dreimal mehr Stellen als Basis 10
I für Menschen daher unbequem
besser Oktal- oder Hexadezimalschreibweise, s.u.

I technisch besonders leicht zu implementieren weil nur zwei


Zustände unterschieden werden müssen
z.B. zwei Spannungen, Ströme, Beleuchtungsstärken
siehe: 2.6 Informationsverarbeitung – Binärzeichen, Folie 110

+ robust gegen Rauschen und Störungen


+ einfache und effiziente Realisierung von Arithmetik

A. Mäder 127
Dualsystem: Potenztabelle
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

Stelle Wert im Dualsystem Wert im Dezimalsystem


20 1 1
21 10 2
22 100 4
23 1000 8
24 1 0000 16
25 10 0000 32
26 100 0000 64
27 1000 0000 128
28 1 0000 0000 256
29 10 0000 0000 512
210 100 0000 0000 1 024
211 1000 0000 0000 2 048
212 1 0000 0000 0000 4 096
... ... ...
A. Mäder 128
Dualsystem: Beispiele
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I Basis 2
I Zeichensatz ist {0; 1}
I Beispiele:
02 = 010
12 = 110
112 = 310 21 + 2 0
11 01002 = 5210 25 + 2 4 + 2 2
1111 11102 = 25410 28 + 2 7 + : : : + 2 2 + 2 1

A. Mäder 129
Addition im Dualsystem
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I funktioniert genau wie im Dezimalsystem


I Addition mehrstelliger Zahlen erfolgt stellenweise
I Additionsmatrix:
+ 0 1
0 0 1
1 1 10

I Beispiel
1011 0011 = 179
+ 0011 1001 = 57
Ü 11 11 11
1110 1100 = 236

A. Mäder 130
Multiplikation im Dualsystem
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I funktioniert genau wie im Dezimalsystem


I p = a · b mit Multiplikator a und Multiplikand b
I Multiplikation von a mit je einer Stelle des Multiplikanten b
I Addition der Teilterme

I Multiplikationsmatrix ist sehr einfach:


· 0 1
0 0 0
1 0 1

A. Mäder 131
Multiplikation im Dualsystem (cont.)
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel
10110011 · 1101 = 179 · 13 = 2327
10110011 1 = 1001 0001 0111
10110011 1 = 0x917
00000000 0
10110011 1
Ü 11101111
100100010111

A. Mäder 132
Oktalsystem
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I Basis 8
I Zeichensatz ist {0; 1; 2; 3; 4; 5; 6; 7}
I C-Schreibweise mit führender 0 als Präfix:
0001 = 110
I

0013 = 1110 = 1·8 + 3


0375 = 25310 = 3 · 64 + 7 · 8 + 5
usw.
⇒ Hinweis: führende 0 in C für Dezimalzahlen unmöglich!
I für Menschen leichter lesbar als Dualzahlen
I Umwandlung aus/vom Dualsystem durch Zusammenfassen
bzw. Ausschreiben von je drei Bits:
00 = 000; 01 = 001; 02 = 010; 03 = 011;
04 = 100; 05 = 101; 06 = 110; 07 = 111

A. Mäder 133
Hexadezimalsystem
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I Basis 16
I Zeichensatz ist {0; 1; 2; : : : ; 9; A; B; C; D; E; F }
I C-Schreibweise mit Präfix 0x – Klein- oder Großbuchstaben
I 0x00000001 = 110
0x000000f e = 25410 = 15 · 16 + 14
0x0000f f f f = 65 53510 = 15 · 4 096 + 15 · 256 + 15 · 16 + 15
0xca f ebabe = : : : erstes Wort in Java Class-Dateien
usw.
I viel leichter lesbar als entsprechende Dualzahl
I Umwandlung aus/vom Dualsystem durch Zusammenfassen
bzw. Ausschreiben von je vier Bits:
0x0 = 0000; 0x1 = 0001; 0x2 = 0010; : : : ; 0x9 = 1001,
0xA = 1010; 0xB = 1011; 0xC = 1100;
0xD = 1101; 0xE = 1110; 0xF = 1111

A. Mäder 134
Beispiel: Darstellungen der Zahl 2019
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

Binär
1 1 1 1 1 1 0 0 0 1 1
1 · 210 + 1 · 29 + 1 · 28 + 1 · 27 + 1 · 26 + 1 · 25 + 0 · 24 + 0 · 23 + 0 · 22 + 1 · 21 + 1 · 20
1 024 + 512 + 256 + 128 + 64 + 32 + 0 + 0 + 0 + 2 + 1

Oktal 3 7 4 3
3 · 83 + 7 · 82 + 4 · 81 + 3 · 80
1 536 + 448 + 32 + 3

Dezimal 2 0 1 9
2 · 103 + 0 · 102 + 1 · 101 + 9 · 100
2 000 + 0 + 10 + 9

Hexadezimal 7 E 3
7 · 162 + E · 161 + 3 · 160
1 792 + 224 + 3

A. Mäder 135
Umrechnung Dual-/Oktal-/Hexadezimalsystem
3.2 Ziffern und Zahlen - Stellenwertsystem 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiele
Hexadezimal 1 9 4 8 . B 6
z }| { z }| { z }| { z }| { z }| { z }| {
Binär 0001100101001000.101101100
| {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z }
Oktal 1 4 5 1 0 . 5 5 4

Hexadezimal 7 B A 3 . B C 4
z }| { z }| { z }| { z }| { z }| { z }| { z }| {
Binär 0111101110100011.101111000100
| {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z }
Oktal 7 5 6 4 3 . 5 7 0 4

I Gruppieren von jeweils 3 bzw. 4 Bits


I bei Festkomma vom Dezimalpunkt aus nach außen

A. Mäder 136
Umrechnung zwischen verschiedenen Basen
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Menschen rechnen im Dezimalsystem


I Winkel- und Zeitangaben auch im Sexagesimalsystem Basis: 60

I Digitalrechner nutzen (meistens) Dualsystem

I Algorithmen zur Umrechnung notwendig


I Exemplarisch Vorstellung von drei Varianten:

1. vorberechnete Potenztabellen
2. Divisionsrestverfahren
3. Horner-Schema

A. Mäder 137
Umwandlung über Potenztabellen
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

Vorgehensweise für Integerzahlen


1.a Subtraktion des größten Vielfachen einer Potenz des
Zielsystems von der umzuwandelnden Zahl
– gemäß der vorberechneten Potenztabelle
1.b Notation dieses größten Vielfachen (im Zielsystem)
I solange der der Rest der Zahl 6= 0, dann Wiederhole:
2.a Subtraktion wiederum des größten Vielfachen vom
verbliebenen Rest
2.b Addition dieses Vielfachen (im Zielsystem)

A. Mäder 138
Potenztabellen Dual/Dezimal
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

Stelle2 Wert10 Stelle10 Wert2


20 1 100 1
21 2 101 1010
22 4 102 110 0100
23 8 103 11 1110 1000
24 16 104 10 0111 0001 0000
25 32 105 0x1 86A0
26 64 106 0xF 42 40
27 128 107 0x98 96 80
28 256 108 0x5 F5 E1 00
29 512 109 0x3B9ACA00
210 1 024 1010 0x2 54 0BE4 00
211 2 048 1011 0x17 48 76 E8 00
212 4 096 1012 0xE8D4A5 10 00
::: :::
A. Mäder 139
Potenztabellen: Beispiel
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dezimal- in Dualzahl


Z = (163)10
163
− 128 27 1000 0000
35
− 32 25 + 10 0000
3
− 2 21 + 10
1
− 1 20 + 1
0 1010 0011
Z = (163)10 ↔ (1010 0011)2

A. Mäder 140
Potenztabellen: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1010 0011)2
1010 0011
− 110 0100 1 · 102 100
0011 1111
− 11 1100 6 · 101 + 60
11
− 11 3 · 100 + 3
0 163
Z = (1010 0011)2 ↔ (163)10

A. Mäder 141
Divisionsrestverfahren
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Division der umzuwandelnden Zahl im Ausgangssystem durch


die Basis des Zielsystems
I Erneute Division des ganzzahligen Ergebnisses (ohne Rest)
durch die Basis des Zielsystems, bis kein ganzzahliger
Divisionsrest mehr bleibt
I Beispiel 163 : 2 = 81 Rest 1 20
81 : 2 = 40 Rest 1 ...
40 : 2 = 20 Rest 0
20 : 2 = 10 Rest 0
10 : 2 = 5 Rest 0
5 : 2 = 2 Rest 1 ↑ Leserichtung
2 : 2 = 1 Rest 0 ...
1 : 2 = 0 Rest 1 27
(163)10 ↔ (1010 0011)2

A. Mäder 142
Divisionsrestverfahren: Beispiel
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1010 0011)2
(1010 0011)2 : (1010)2 = 1 0000 Rest (11)2 =b 3 100
(1 0000)2 : (1010)2 = 1 Rest (110)2 =
b 6 101
(1)2 : (1010)2 = 0 Rest (1)2 = b 1 102
Z = (1010 0011)2 ↔ (163)10
Hinweis: Division in Basis b folgt

A. Mäder 143
Divisionsrestverfahren: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dezimal- in Dualzahl


Z = (1492)10
1492 : 2 = 746 Rest 0 20
746 : 2 = 373 Rest 0 ..
.

373 : 2 = 186 Rest 1


186 : 2 = 93 Rest 0
93 : 2 = 46 Rest 1
46 : 2 = 23 Rest 0
23 : 2 = 11 Rest 1
11 : 2 = 5 Rest 1
5 : 2 = 2 Rest 1 ↑ Leserichtung
2 : 2 = 1 Rest 0 ..
.

1 : 2 = 0 Rest 1 2 10

Z = (1492)10 ↔ (101 1101 0100)2

A. Mäder 144
Divisionsrestverfahren: Algorithmus
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

K. von der Heide [Hei05]


Interaktives Skript T1
stellen2stellen

A. Mäder 145
Horner-Schema
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Darstellung einer Potenzsumme durch ineinander verschachtelte


Faktoren
n−1
X
|z| = ai · b i = (: : : ((an−1 · b+an−2 ) · b+an−3 ) · b+: : :+a1 ) · b+a0
i=0

Vorgehensweise:
I Darstellung der umzuwandelnden Zahl im Horner-Schema
I Durchführung der auftretenden Multiplikationen und
Additionen im Zielsystem

A. Mäder 146
Horner-Schema: Beispiel
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dezimal- in Dualzahl


1. Darstellung als Potenzsumme
Z = (163)10 = (1 · 10 + 6) · 10 + 3

2. Faktoren und Summanden im Zielzahlensystem


(10)10 ↔ (1010)2
(6)10 ↔ (110)2
(3)10 ↔ (11)2
(1)10 ↔ (1)2

3. Arithmetische Operationen
1 · 1010 = 1010
+ 110
1 0000 · 1010 = 1010 0000
+ 11
1010 0011

A. Mäder 147
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


1. Darstellung als Potenzsumme
Z = (1010 0011)2 =
((((((1 · 102 + 0) · 102 + 1) · 102 + 0) · 102 + 0) · 102 + 0) · 102 + 1) · 102 + 1

2. Faktoren und Summanden im Zielzahlensystem


(10)2 ↔ (2)10
(1)2 ↔ (1)10
(0)2 ↔ (0)10

A. Mäder 148
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

3. Arithmetische Operationen
1 · 2=2
+0
2 · 2=4
+1
5 · 2 = 10
+ 0
10 · 2 = 20
+ 0
20 · 2 = 40
+ 0
40 · 2 = 80
+ 1
81 · 2 = 162
+ 1
163

A. Mäder 149
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Horner-Schema: Beispiel (cont.)
3.3 Ziffern und Zahlen - Umrechnung zwischen verschiedenen Basen 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandlung Dual- in Dezimalzahl


Z = (1011 1011 0111)2 = (2 999)10
101110110111
1 + 2·0 = 1
0 + 2·1 = 2
1 + 2·2 = 5
1 + 2 · 5 = 11
1 + 2 · 11 = 23
0 + 2 · 23 = 46
1 + 2 · 46 = 93
1 + 2 · 93 = 187
0 + 2 · 187 = 374
1 + 2 · 374 = 749
1 + 2 · 749 = 1 499
1 + 2 · 1 499 = 2 999

A. Mäder 150
Zahlenbereich bei fester Wortlänge
3.4 Ziffern und Zahlen - Zahlenbereich und Präfixe 64-040 Rechnerstrukturen und Betriebssysteme

Anzahl der Bits Zahlenbereich jeweils von 0 bis (2n − 1)


4-bit 24 = 16
8-bit 28 = 256
10-bit 210 = 1 024
12-bit 212 = 4 096
16-bit 216 = 65 536
20-bit 220 = 1 048 576
24-bit 224 = 16 777 216
32-bit 232 = 4 294 967 296
48-bit 248 = 281 474 976 710 656
64-bit 264 = 18 446 744 073 709 551 616

A. Mäder 151
Präfixe
3.4 Ziffern und Zahlen - Zahlenbereich und Präfixe 64-040 Rechnerstrukturen und Betriebssysteme

Für die vereinfachte Schreibweise von großen bzw. sehr kleinen


Werten ist die Präfixangabe als Abkürzung von Zehnerpotenzen
üblich. Beispiele:
I Lichtgeschwindigkeit: 300 000 Km/s = 30 cm/ns
I Ruheenergie des Elektrons: 0,51 MeV
I Strukturbreite heutiger Mikrochips: 12 nm
I usw.

Es gibt entsprechende Präfixe auch für das Dualsystem.


Dazu werden Vielfache von 210 = 1024 ≈ 1000 verwendet.

A. Mäder 152
Präfixe für Einheiten im Dezimalsystem
3.4 Ziffern und Zahlen - Zahlenbereich und Präfixe 64-040 Rechnerstrukturen und Betriebssysteme

Faktor Name Symbol Faktor Name Symbol


1024 yotta Y 10−24 yocto y
1021 zetta Z 10−21 zepto z
1018 exa E 10−18 atto a
1015 peta P 10−15 femto f
1012 tera T 10−12 pico p
109 giga G 10−9 nano n
106 mega M 10−6 micro —
103 kilo K 10−3 milli m
102 hecto h 10−2 centi c
101 deka da 10−1 dezi d

A. Mäder 153
Präfixe für Einheiten im Dualsystem
3.4 Ziffern und Zahlen - Zahlenbereich und Präfixe 64-040 Rechnerstrukturen und Betriebssysteme

Faktor Name Symbol Langname


280 yobi Yi yottabinary
270 zebi Zi zettabinary
260 exbi Ei exabinary
250 pebi Pi petabinary
240 tebi Ti terabinary
230 gibi Gi gigabinary
220 mebi Mi megabinary
210 kibi Ki kilobinary

Beispiele: 1 kibibit = 1 024 bit


1 kilobit = 1 000 bit
1 megibit = 1 048 576 bit
1 gibibit = 1 073 741 824 bit
IEC-60027-2, Letter symbols to be used in electrical technology

A. Mäder 154
Präfixe für Einheiten im Dualsystem
3.4 Ziffern und Zahlen - Zahlenbereich und Präfixe 64-040 Rechnerstrukturen und Betriebssysteme

In der Praxis werden die offiziellen Präfixe nicht immer sauber


verwendet. Meistens ergibt sich die Bedeutung aber aus dem
Kontext. Bei Speicherbausteinen sind Zweierpotenzen üblich,
bei Festplatten dagegen die dezimale Angabe.
I DRAM-Modul mit 4 GB Kapazität: gemeint sind 232 Bytes
I Flash-Speicherkarte 32 GB Kapazität: gemeint sind 235 Bytes

I Festplatte mit Angabe 2 TB Kapazität: typisch 2 · 1012 Bytes


I die tatsächliche angezeigte verfügbare Kapazität ist oft
geringer, weil das jeweilige Dateisystem Platz für seine eigenen
Verwaltungsinformationen belegt.

A. Mäder 155
Festkommadarstellung
3.5 Ziffern und Zahlen - Festkommazahlen 64-040 Rechnerstrukturen und Betriebssysteme

Darstellung von gebrochenen Zahlen als Erweiterung des


Stellenwertsystems durch Erweiterung des Laufindex zu
negativen Werten:
n−1
X i=−1
X
|z| = ai · b i + ai · b i
i=0 i=−∞
n−1
X
= ai · b i
i=−∞

mit ai ∈ N und 0 ≤ ai < b.


I Der erste Summand bezeichnet den ganzzahligen Anteil,
während der zweite Summand für den gebrochenen Anteil steht.

A. Mäder 156
Nachkommastellen im Dualsystem
3.5 Ziffern und Zahlen - Festkommazahlen 64-040 Rechnerstrukturen und Betriebssysteme

I 2−1 = 0,5
2−2 = 0,25
2−3 = 0,125
2−4 = 0,0625
2−5 = 0,03125
2−6 = 0,015625
2−7 = 0,0078125
2−8 = 0,00390625
...
I alle Dualbrüche sind im Dezimalsystem exakt darstellbar
(d.h. mit endlicher Wortlänge)
I dies gilt umgekehrt nicht

A. Mäder 157
Nachkommastellen im Dualsystem (cont.)
3.5 Ziffern und Zahlen - Festkommazahlen 64-040 Rechnerstrukturen und Betriebssysteme

I gebrochene Zahlen können je nach Wahl der Basis evtl. nur als
unendliche periodische Brüche dargestellt werden
I insbesondere erfordern viele endliche Dezimalbrüche im
Dualsystem unendliche periodische Brüche
I Beispiel: Dezimalbrüche, eine Nachkommastelle
B=10 B=2 B=2 B=10
0,1 0; 00011 0,001 0,125
0,2 0; 0011 0,010 0,25
0,3 0; 01001 0,011 0,375
0,4 0; 0110 0,100 0,5
0,5 0; 1 0,101 0,625
0,6 0; 1001 0,110 0,75
0,7 0; 10110 0,111 0,875
0,8 0; 1100
0,9 0; 11100

A. Mäder 158
Umrechnung: Dezimalbruch nach Dual
3.5 Ziffern und Zahlen - Festkommazahlen 64-040 Rechnerstrukturen und Betriebssysteme

Potenztabelle zur Umrechnung


I Potenztabelle 2−1 = 0,5 2−7 = 0,0078125
2−2 = 0,25 2−8 = 0,00390625
2−3 = 0,125 2−9 = 0,001953125
2−4 = 0,0625 2−10 = 0,0009765625
2−5 = 0,03125 2−11 = 0,00048828125
2−6 = 0,015625 2−12 = 0,000244140625

I Beispiel: Dezimal 0,3


Berechnung durch Subtraktion der Werte
(0; 3)10 = 0 · 2−1 + 1 · 2−2 + 0 · 2−3 + 0 · 2−4 + 1 · 2−5 + 1 · 2−6 + : : :
= 2−2 + 2−5 + 2−6 + 2−9 + : : :
= (0; 01001)2

A. Mäder 159
Umrechnung: Dezimalbruch nach Dual (cont.)
3.5 Ziffern und Zahlen - Festkommazahlen 64-040 Rechnerstrukturen und Betriebssysteme

Divisionsrestverfahren
I statt Division: bei Nachkommastellen Multiplikation · 2
I man nimmt den Dezimalbruch immer mit 2 mal
I Resultat < 1: eine 0 an den Dualbruch anfügen
–"– ≥ 1: eine 1 –"–
und den ganzzahligen Anteil streichen: −1,0
I Ende, wenn Ergebnis 1,0 (wird zu 0)
–"– wenn Rest sich wiederholt ⇒ Periode
I Beispiel: Dezimal 0,59375
2 · 0; 59375 = 1; 1875 → 1 2−1
2 · 0; 1875 = 0; 375 →0 ..
.

2 · 0; 375 = 0; 75 →0 ↓ Leserichtung
2 · 0; 75 = 1; 5 →1 ..
.

2 · 0; 5 = 1; 0 →1 2 −5

(0; 59375)10 ↔ (0; 10011)2

A. Mäder 160
Darstellung negativer Zahlen
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

Drei gängige Varianten zur Darstellung negativer Zahlen


1. Betrag und Vorzeichen
2. Exzess-Codierung (Offset-basiert)
3. Komplementdarstellung
I Integerrechnung häufig im Zweierkomplement
I Gleitkommadarstellung mit Betrag und Vorzeichen
I –"– Exponent als Exzess-Codierung

A. Mäder 161
Betrag und Vorzeichen
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

I Auswahl eines Bits als Vorzeichenbit


I meistens das MSB (engl. most significant bit)
I restliche Bits als Dualzahl interpretiert
I Beispiel für 4-bit Wortbreite:
0000 +0 1000 −0
0001 +1 1001 −1
0010 +2 1010 −2
0011 +3 1011 −3
0100 +4 1100 −4
0101 +5 1101 −5
0110 +6 1110 −6
0111 +7 1111 −7
− doppelte Codierung der Null: +0, −0
− Rechenwerke für Addition/Subtraktion aufwändig

A. Mäder 162
Exzess-Codierung (Offset-basiert)
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

I einfache Um-Interpretation der Binärcodierung

z = c − of f set

I z vorzeichenbehafteter Wert (Zahlenwert)


I c binäre Ganzzahl (Code)
I beliebig gewählter Offset

− Null wird also nicht mehr durch 000 . . . 0 dargestellt


+ Größenvergleich zweier Zahlen bleibt einfach

I Anwendung: Exponenten im IEEE 754 Gleitkommaformat


I und für einige Audioformate

A. Mäder 163
Exzess-Codierung: Beispiele
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

Bitmuster Binärcode Exzess-8 Exzess-6 z = c − of f set


0000 0 -8 -6
0001 1 -7 -5
0010 2 -6 -4
0011 3 -5 -3
0100 4 -4 -2
0101 5 -3 -1
0110 6 -2 0
0111 7 -1 1
1000 8 0 2
1001 9 1 3
1010 10 2 4
1011 11 3 5
1100 12 4 6
1101 13 5 7
1110 14 6 8
1111 15 7 9

A. Mäder 164
b-Komplement
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

Definition: das b-Komplement einer Zahl z ist

Kb (z) = b n − z; für z 6= 0
= 0; für z = 0

I b: die Basis (des Stellenwertsystems)


I n: Anzahl der zu berücksichtigenden Vorkommastellen
I mit anderen Worten: Kb (z) + z = b n

I Stellenwertschreibweise
n−2
X
z = −an−1 · b n−1 + ai · b i
i=−m

I Dualsystem: 2-Komplement
I Dezimalsystem: 10-Komplement
A. Mäder 165
b-Komplement: Beispiele
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

b = 10 n=4 K10 (3 763)10 = 104 − 3 763 = 6 23710


n=2 K10 (0; 3763)10 = 102 − 0; 3763 = 99; 623710
n=0 K10 (0; 3763)10 = 100 − 0; 3763 = 0; 623710

b=2 n=2 K2 (10; 01)2 = 22 − 10; 012 = 01; 112


n=8 K2 (10; 01)2 = 28 − 10; 012 = 1111 1101; 112

A. Mäder 166
(b − 1)-Komplement
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

Definition: das (b − 1)-Komplement einer Zahl z ist

Kb−1 (z) = b n − z − b −m ; für z 6= 0


= 0; für z = 0

I b: die Basis des Stellenwertsystems


I n: Anzahl der zu berücksichtigenden Vorkommastellen
I m: Anzahl der Nachkommastellen
I mit anderen Worten: Kb−1 (z) + z + b −m = b n

I Dualsystem: 1-Komplement
I Dezimalsystem: 9-Komplement

A. Mäder 167
(b − 1)-Komplement / b-Komplement: Trick
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

Kb−1 (z) = b n − b −m − z; für z 6= 0


I im Fall m = 0 gilt offenbar Kb (z) = Kb−1 (z) + 1
⇒ das (b − 1)-Komplement kann sehr einfach berechnet werden:
es werden einfach die einzelnen Bits/Ziffern invertiert.
I Dualsystem: 1-Komplement 1100 1001
alle Bits invertieren 0011 0110
I Dezimalsystem: 9-Komplement 24 453
alle Ziffern invertieren 75 546
0↔9 1↔8 2↔7 3↔6 4↔5
Summe: 99 999 = 100 000 − 1
⇒ das b-Komplement kann sehr einfach berechnet werden:
es werden einfach die einzelnen Bits/Ziffern invertiert
und 1 an der niedrigsten Stelle aufaddiert.

A. Mäder 168
(b − 1)-Komplement / b-Komplement: Trick (cont.)
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

I Dualsystem: 2-Komplement 1100 1001


Bits invertieren +1 0011 0111
Summe: 1 0000 0000
I Dezimalsystem: 10-Komplement 24 453
Ziffern invertieren +1 75 547
0↔9 1↔8 2↔7 3↔6 4↔5
Summe: 100 000

A. Mäder 169
Subtraktion mit b-Komplement
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

I bei Rechnung mit fester Stellenzahl n gilt:

Kb (z) + z = b n =0

weil b n gerade nicht mehr in n Stellen hineinpasst


I also gilt für die Subtraktion auch:

x − y = x + Kb (y )

⇒ Subtraktion kann also durch Addition des b-Komplements


ersetzt werden
I und für Integerzahlen gilt außerdem

x − y = x + Kb−1 (y ) + 1

A. Mäder 170
Subtraktion mit Einer- und Zweierkomplement
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

I Subtraktion ersetzt durch Addition des Komplements


Dezimal 1-Komplement 2-Komplement
10 0000 1010 0000 1010
+(-3) 1111 1100 1111 1101
+7 1 0000 0110 1 0000 0111
Übertrag: addieren +1 verwerfen
0000 0111 0000 0111

A. Mäder 171
Veranschaulichung: Zahlenkreis
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel für 4-bit Zahlen


0000 0000 0000
1111 0001 1111 0001 1111 0001

1110
-1 0 1
0010 1110 0 1
0010 1110
-7 0 1
0010

-2 2 -1 2 -6 2
1101 0011 1101 0011 1101 0011
-3 3 -2 3 -5 3
1100 -4 4 0100 1100 -3 4 0100 1100 -4 4 0100

-5 5 -4 5 -3 5
1011 0101 1011 0101 1011 0101
-6 6 -5 6 -2 6
1010
-7 -8 7 0110 1010
-6 -7 7 0110 1010
-1 -0 7 0110

1001 0111 1001 0111 1001 0111


1000 1000 1000

2-Komplement 1-Komplement Betrag+Vorzeichen

I Komplement-Arithmetik als Winkeladdition(siehe 4 Arithmetik)


I Web-Anwendung: Visualisierung im Zahlenkreis
(JavaScript, see: [Kor16])

A. Mäder 172
Darstellung negativer Zahlen: Beispiele
3.6 Ziffern und Zahlen - Darstellung negativer Zahlen 64-040 Rechnerstrukturen und Betriebssysteme

N +N -N -N -N -N
Dezimal Binär VZ+Betrag 1-Komplement 2-Komplement Exzess-128
1 0000 0001 1000 0001 1111 1110 1111 1111 0111 1111
2 0000 0010 1000 0010 1111 1101 1111 1110 0111 1110
3 0000 0011 1000 0011 1111 1100 1111 1101 0111 1101
4 0000 0100 1000 0100 1111 1011 1111 1100 0111 1100
5 0000 0101 1000 0101 1111 1010 1111 1011 0111 1011
6 0000 0110 1000 0110 1111 1001 1111 1010 0111 1010
7 0000 0111 1000 0111 1111 1000 1111 1001 0111 1001
8 0000 1000 1000 1000 1111 0111 1111 1000 0111 1000
9 0000 1001 1000 1001 1111 0110 1111 0111 0111 0111
10 0000 1010 1000 1010 1111 0101 1111 0110 0111 0110
20 0001 0100 1001 0100 1110 1011 1110 1100 0110 1100
30 0001 1110 1001 1110 1110 0001 1110 0010 0110 0010
40 0010 1000 1010 1000 1101 0111 1101 1000 0101 1000
50 0011 0010 1011 0010 1100 1101 1100 1110 0100 1110
60 0011 1100 1011 1100 1100 0011 1100 0100 0100 0100
70 0100 0110 1100 0110 1011 1001 1011 1010 0011 1010
80 0101 0000 1101 0000 1010 1111 1011 0000 0011 0000
90 0101 1010 1101 1010 1010 0101 1010 0110 0010 0110
100 0110 0100 1110 0100 1001 1011 1001 1100 0001 1100
127 0111 1111 1111 1111 1000 0000 1000 0001 0000 0001
128 — — — 1000 0000 0000 0000
MSB 0 1 1 1 0

A. Mäder 173
Gleitkommaformat
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

Wie kann man „wissenschaftliche“ Zahlen darstellen?


I Masse der Sonne 1; 989 · 1030 Kg
I Ladung eines Elektrons 0,000 000 000 000 000 000 16 C
I Anzahl der Atome pro Mol 602 300 000 000 000 000 000 000
...
Darstellung im Stellenwertsystem?
I gleichzeitig sehr große und sehr kleine Zahlen notwendig
I entsprechend hohe Zahl der Vorkomma- und Nachkommastellen
I durchaus möglich (Java3D: 256-bit Koordinaten)
I aber normalerweise sehr unpraktisch
I typische Messwerte haben nur ein paar Stellen Genauigkeit

A. Mäder 174
Gleitkomma: Motivation
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

Grundidee: halblogarithmische Darstellung einer Zahl


I Vorzeichen (+1 oder −1)
I Mantisse als normale Zahl im Stellenwertsystem
I Exponent zur Angabe der Größenordnung

z = sig n · mantisse · basis exponent

I handliche Wertebereiche für Mantisse und Exponent


I arithmetische Operationen sind effizient umsetzbar
I Wertebereiche für ausreichende Genauigkeit wählen

Hinweis: rein logarithmische Darstellung wäre auch möglich,


aber Addition/Subtraktion sind dann sehr aufwändig.

A. Mäder 175
Gleitkomma: Dezimalsystem
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

z = (−1)s · m · 10e

I s Vorzeichenbit
I m Mantisse als Festkomma-Dezimalzahl
I e Exponent als ganze Dezimalzahl

I Schreibweise in C/Java: hVorzeicheni hMantissei E hExponenti


6.023E23 6; 023 · 1023 Avogadro-Zahl
1.6E-19 1; 6 · 10−19 Elementarladung des Elektrons

A. Mäder 176
Gleitkomma: Beispiel für Zahlenbereiche
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

Stellen Zahlenbereich
Mantisse Exponent 0← →∞
3 1 10−12 10 9

3 2 10−102 1099
3 3 10−1002 10999
3 4 10−10002 109999
4 1 10−13 109
4 2 10−103 1099
4 3 10−1003 10999
4 4 10−10003 109999
5 1 10−14 109
5 2 10−104 1099
5 3 10−1004 10999
5 4 10−10004 109999
10 3 10−1009 10999
20 3 10−1019 10999
A. Mäder 177
Gleitkomma: Historie
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I 1937 Zuse: Z1 mit 22-bit Gleitkomma-Datenformat


I 195x Verbreitung von Gleitkomma-Darstellung
für numerische Berechnungen
I 1980 Intel 8087: erster Koprozessor-Chip,
ca. 45 000 Transistoren, ca. 50K FLOPS/s
I 1985 IEEE 754 Standard für Gleitkomma
I 1989 Intel 486 mit integriertem Koprozessor
I 1995 Java-Spezifikation fordert IEEE 754
I 1996 ASCI-RED: 1 TFLOPS ( 9 152 Pentium Pro)
I 2008 Roadrunner: 1 PFLOPS (12 960 Cell)
I 2018 Summit: 148,6 PFLOPS
...
FLOPS := Floating-Point Operations Per Second

A. Mäder 178
Gleitkomma: Zahlenbereiche
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I Darstellung üblicherweise als Betrag+Vorzeichen


I negative und positive Zahlen gleichberechtigt (symmetrisch)
I separate Darstellung für den Wert Null
I sieben Zahlenbereiche: siehe Grafik
I relativer Abstand benachbarter Zahlen bleibt ähnlich
(vgl. dagegen Integer: 0/1, 1/2, 2/3, . . . , 65 535/65 536, . . . )

A. Mäder 179
Gleitkomma: Normalisierte Darstellung
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

z = (−1)s · m · 10e

I diese Darstellung ist bisher nicht eindeutig:


123 · 100 = 12; 3 · 101 = 1; 23 · 102 = 0; 123 · 103 = :::

normalisierte Darstellung
I Exponent anpassen, bis Mantisse im Bereich 1 ≤ m < b liegt
⇒ Darstellung ist dann eindeutig
⇒ im Dualsystem: erstes Vorkommabit ist dann 1
und muss nicht explizit gespeichert werden

I evtl. zusätzlich sehr kleine Zahlen nicht-normalisiert

A. Mäder 180
IEEE 754 Standard
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

bis 1985 ein Wildwuchs von Gleitkomma-Formaten:


I unterschiedliche Anzahl Bits in Mantisse und Exponent
I Exponent mit Basis 2, 10, oder 16
I diverse Algorithmen zur Rundung
I jeder Hersteller mit eigener Variante
− Numerische Algorithmen nicht portabel

1985: Publikation des Standards IEEE 754 zur Vereinheitlichung


I klare Regeln, auch für Rundungsoperationen
I große Akzeptanz, mittlerweile der universale Standard
I 2008: IEEE 754-2008 mit 16- und 128-bit Formaten
Details: unter anderem in [Link]/wiki/IEEE_754 oder in Goldberg [Gol91]

A. Mäder 181
IEEE 754: float und double
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I 32-bit Format: einfache Genauigkeit (single precision, float)


Bits 1 8 23
V Exponent Mantisse

I 64-bit Format: doppelte Genauigkeit (double precision, double)


Bits 1 11 52
V Exponent Mantisse

I Mantisse als normalisierte Dualzahl: 1 ≤ m < 2


I Exponent in Exzess-127 bzw. Exzess-1023 Codierung
Exp.-Bits: 00 : : : 001 bis 11 : : : 110
I einige Sonderwerte: Null (+0, −0), NaN, Infinity
Exp.-Bits: 00 : : : 000 und 11 : : : 111

A. Mäder 182
IEEE 754: Zahlenbereiche
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

Eigenschaft einfache doppelte Genauigkeit


Bits im Vorzeichen 1 1
Bits im Exponenten 8 11
Bits in der Mantisse 23 52
Bits insgesamt 32 64
Exponentensystem Exzess-127 Exzess-1023
Exponentenbereich −126 : : : + 127 −1022 : : : + 1023
kleinste normalisierte Zahl 2−126 2−1022
größte –"– ≈ 2128 ≈ 21024
b Dezimalbereich
= ≈ 10−38 : : : 1038 ≈ 10−308 : : : 10308
kleinste nicht normalisierte Zahl ≈ 10−45 ≈ 10−324

A. Mäder 183
Matlab-Demo: demoieee754
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I Zahlenformat wählen (float=short real, double=long real)


I Dezimalzahl in oberes Textfeld eingeben
I Mantisse/Exponent/Vorzeichen in unteres Textfeld eingeben
I andere Werte werden jeweils aktualisiert
K. von der Heide [Hei05], Interaktives Skript T1, demoieee754

A. Mäder 184
Matlab-Demo: demoieee754 (cont.)
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I Genauigkeit bei float: 23+1 bits, ca. 6 . . . 7 Dezimalstellen


I Genauigkeit bei double: 52+1 bits, ca. 16 Dezimalstellen
Erinnerung: log2 (10) = ln(10)= ln(2) ≈ 3; 322

A. Mäder 185
Beispiele: float
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I 1-bit Vorzeichen 8-bit Exponent (Exzess-127), 23-bit Mantisse


z = (−1)s · 2(eeee eeee−127) · 1; mmmm mmmm mmmm : : : mmm

I 1 1000 0000 1110 0000 0000 0000 0000 000


z = −1 · 2(128−127) · (1 + 0; 5 + 0; 25 + 0; 125 + 0)
= −1 · 2 · 1; 875 = −3; 750

I 0 1111 1110 0001 0011 0000 0000 0000 000


z = +1 · 2(254−127) · (1 + 2−4 + 2−7 + 2−8 )
= 2127 · 1; 07421875 = 1; 8276885 · 1038

A. Mäder 186
Beispiele: float (cont.)
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

z = (−1)s · 2(eeee eeee−127) · 1; mmmm mmmm mmmm : : : mmm

I 1 0000 0001 0000 0000 0000 0000 0000 000


z = −1 · 2(1−127) · (1 + 0 + 0 + : : : + 0)
= −1 · 2−126 · 1; 0 = −1; 17549435 · 10−38

I 0 0111 1111 0000 0000 0000 0000 0000 001


z = +1 · 2(127−127) · (1 + 2−23 )
= 1 · (1 + 0; 00000012) = 1; 00000012

A. Mäder 187
Gleitkomma: Addition, Subtraktion
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

Addition von Gleitkommazahlen y = a1 + a2


I Skalierung des betragsmäßig kleineren Summanden
I Erhöhen des Exponenten, bis e1 = e2 gilt
I gleichzeitig entsprechendes Skalieren der Mantisse ⇒ schieben
I Achtung: dabei verringert sich die effektive Genauigkeit des
kleineren Summanden

I anschließend Addition/Subtraktion der Mantissen


I ggf. Normalisierung des Resultats

I Beispiele in den Übungen

A. Mäder 188
Gleitkomma-Addition: Beispiel
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

a = 9; 725 · 107 b = 3; 016 · 106

y = (a + b)
= (9; 725 · 107 + 0; 3016 · 107 ) Angleichung der Exponenten
= (9; 725 + 0; 3016) · 107 Distributivgesetz
= (10; 0266) · 107 Addition der Mantissen
= 1; 00266 · 108 Normalisierung

= 1; 003 · 108 Runden bei fester Stellenzahl

I normalerweise nicht informationstreu !

A. Mäder 189
Achtung: Auslöschung
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

Probleme bei Subtraktion/Addition zweier Gleitkommazahlen

Fall 1 Exponenten stark unterschiedlich


I kleinere Zahl wird soweit skaliert, dass von der Mantisse
(fast) keine gültigen Bits übrigbleiben
I kleinere Zahl geht verloren, bzw. Ergebnis ist sehr ungenau
I Beispiel: 1.0E20 + 3.14159 = 1.0E20

Fall 2 Exponenten gleich, Mantissen fast gleich


I fast alle Bits der Mantisse löschen sich aus
I Resultat hat nur noch wenige Bits effektiver Genauigkeit

A. Mäder 190
Gleitkomma: Multiplikation, Division
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

Multiplikation von Gleitkommazahlen y = a1 · a2


I Multiplikation der Mantissen und Vorzeichen

Anmerkung: Vorzeichen si ist hier −1sBit


Berechnung als sBit = sBit1 XOR sBit2
I Addition der Exponenten
I ggf. Normalisierung des Resultats

y = (s1 · s2 ) · (m1 · m2 ) · b e1 +e2

Division entsprechend:
I Division der Mantissen und Vorzeichen

I Subtraktion der Exponenten

I ggf. Normalisierung des Resultats

y = (s1 =s2 ) · (m1 =m2 ) · b e1 −e2

A. Mäder 191
IEEE 754: Infinity Inf , Not-a-Number NaN, ±0
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I schnelle Verarbeitung großer Datenmengen


I Statusabfrage nach jeder einzelnen Operation unbequem
I trotzdem Hinweis auf aufgetretene Probleme wichtig

⇒ Inf (infinity): spezieller Wert für plus/minus Unendlich


Beispiele: 2=0; −3=0; ar ctan(ı) usw.

⇒ NaN (not-a-number): spezieller Wert für ungültige Operation



Beispiele: −1; ar csin(2; 0); Inf =Inf usw.

A. Mäder 192
IEEE 754: Infinity Inf , Not-a-Number NaN, ±0 (cont.)
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

normalisiert V 0 < Exp < Max jedes Bitmuster

denormalisiert V 0 0. . . 0 jedes Bitmuster 6= 0 0. . . 0

0 V 0 0. . . 0 0 0. . . 0

Inf V 1 1. . . 1 0 0. . . 0

NaN V 1 1. . . 1 jedes Bitmuster 6= 0 0. . . 0

I Rechnen mit Inf funktioniert normal: 0=Inf = 0


I NaN für undefinierte Werte: sqrt(-1), arcsin(2.0) . . .
I jede Operation mit NaN liefert wieder NaN

A. Mäder 193
IEEE 754: Infinity Inf , Not-a-Number NaN, ±0 (cont.)
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiele
0 / 0 = NaN
1 / 0 = Infinity
-1 / 0 = -Infinity
1 / Infinity = 0.0
Infinity + Infinity = Infinity
Infinity + -Infinity = NaN
Infinity * -Infinity = -Infinity
Infinity + NaN = NaN
Infinity * 0 = NaN
sqrt (2) = 1 .4142135623730951
sqrt ( -1) = NaN
0 + NaN = NaN
NaN == NaN = false Achtung
Infinity > NaN = false Achtung

A. Mäder 194
ULP: Unit in the last place
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I die Differenz zwischen den beiden Gleitkommazahlen,


die einer gegebenen Zahl am nächsten liegen
I diese beiden Werte unterscheiden sich im niederwertigsten Bit
der Mantisse ⇒ Wertigkeit des LSB
I daher ein Maß für die erreichbare Genauigkeit

I IEEE 754 fordert eine Genauigkeit von 0,5 ULP für die
elementaren Operationen: Addition, Subtraktion,
Multiplikation, Division, Quadratwurzel
= der bestmögliche Wert
I gute Mathematik-Software garantiert ≤ 1 ULP auch für höhere
Funktionen: Logarithmus, Sinus, Cosinus usw.
I [Link]ützung, z.B. [Link]( double d )

A. Mäder 195
Rundungsfehler
3.7 Ziffern und Zahlen - Gleitkomma und IEEE 754 64-040 Rechnerstrukturen und Betriebssysteme

I sorgfältige Behandlung von Rundungsfehlern essenziell


I teilweise Berechnung mit zusätzlichen Schutzstellen
I dadurch Genauigkeit ±1 ULP für alle Funktionen
I ziemlich komplexe Sache

I in dieser Vorlesung nicht weiter vertieft


I beim Einsatz von numerischen Algorithmen essenziell

A. Mäder 196
Datentypen in der Praxis: Maschinenworte
3.8 Ziffern und Zahlen - Maschinenworte 64-040 Rechnerstrukturen und Betriebssysteme

I die meisten Rechner sind für eine Wortlänge optimiert


I 8-bit, 16-bit, 32-bit, 64-bit . . . Maschinen
I die jeweils typische Länge eines Integerwertes
I und meistens auch von Speicheradressen
I zusätzlich Teile oder Vielfache der Wortlänge unterstützt

I 32-bit Rechner
I Wortlänge für Integerwerte ist 32-bit
I adressierbarer Speicher ist 232 Bytes (4 GiB)
I bereits zu knapp für speicherhungrige Applikationen
I inzwischen sind 64-bit Rechner bei PCs/Laptops Standard
I kleinere Wortbreiten: embedded-Systeme (Steuerungsrechner),
Mobilgeräte etc.

A. Mäder 197
Datentypen auf Maschinenebene
3.8 Ziffern und Zahlen - Maschinenworte 64-040 Rechnerstrukturen und Betriebssysteme

I gängige Prozessoren unterstützen mehrere Datentypen


I entsprechend der elementaren Datentypen in C, Java . . .
I void* ist ein Pointer (Referenz, Speicheradresse)
I Beispiel für die Anzahl der Bytes:
C Datentyp DEC Alpha typ. 32-bit Intel IA-32 (x86)
int 4 4 4
long int 8 4 4
char 1 1 1
short 2 2 2
float 4 4 4
double 8 8 8
long double 8 8 10/12
void * 8 4 4

A. Mäder 198
Datentypen auf Maschinenebene (cont.)
3.8 Ziffern und Zahlen - Maschinenworte 3 Data representation 64-040 Rechnerstrukturen und Betriebssysteme
Table 1. Data sizes

Abhängigkeiten (!) segment word size


compiler
16 bit 32 bit 64 bit

Microsoft

Borland

Watcom

Microsoft

Intel Windows

Borland

Watcom

Gnu v.3.x

Intel Linux

Microsoft

Intel Windows

Gnu

Intel Linux
I Prozessor
I Betriebssystem
bool 2 1 1 1 1 1 1 1 1 1 1 1 1
I Compiler char
wchar_t
1 1
2
1 1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
4
1
4
short int 2 2 2 2 2 2 2 2 2 2 2 2 2
int 2 2 2 4 4 4 4 4 4 4 4 4 4
long int 4 4 4 4 4 4 4 4 4 4 4 8 8
__int64 8 8 8 8 8 8 8 8
enum 2 2 1 4 4 4 4 4 4 4 4 4 4
float 4 4 4 4 4 4 4 4 4 4 4 4 4
double 8 8 8 8 8 8 8 8 8 8 8 8 8
long double 10 10 8 8 16 10 8 12 12 8 16 16 16
__m64 8 8 8 8 8 8
__m128 16 16 16 16 16 16 16
__m256 32 32 32 32
pointer 2 2 2 4 4 4 4 4 4 8 8 8 8
far pointer 4 4 4
function pointer 2 2 2 4 4 4 4 4 4 8 8 8 8
data member pointer 2 4 6 4 4 8 4 4 4 4 4 8 8
(min)
data member pointer 4 6 12 12 8 12 4 4 12 12 8 8
(max)
member function 2 12 6 4 4 12 4 8 8 8 8 16 16
pointer (min)
[Link]/optimize/ member function 12 6 16 16 12 16 8 8 24 24 16 16
calling_conventions.pdf pointer (max)

Table 1 shows how many bytes of storage various objects use for different compilers.

Differences in data representation can cause problems when exchanging binary data files
between programs, when exchanging data with a DLL compiled with a different compiler,
and when porting C++ code that relies on a specific data format.
A. Mäder 199
Literatur
3.9 Ziffern und Zahlen - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BO15] R.E. Bryant, D.R. O’Hallaron:


Computer systems – A programmers perspective.
3rd global ed., Pearson Education Ltd., 2015.
ISBN 978–1–292–10176–7. [Link]
[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –
Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5
[Ifr10] G. Ifrah: Universalgeschichte der Zahlen.
Tolkemitt bei Zweitausendeins, 2010.
ISBN 978–3–942048–31–6
[Kor16] Laszlo Korte: TAMS Tools for eLearning.
Uni Hamburg, FB Informatik, 2016, BSc Thesis. tams.
[Link]/research/software/tams-tools

A. Mäder 200
Literatur (cont.)
3.9 Ziffern und Zahlen - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Gol91] D. Goldberg: What every computer scientist should know


about floating-point. in: ACM Computing Surveys
23 (1991), March, Nr. 1, S. 5–48.
[Link]/goldberg/[Link]
[Knu08] D.E. Knuth: The Art of Computer Programming,
Volume 4, Fascicle 0, Introduction to Combinatorial
Algorithms and Boolean Functions.
Addison-Wesley Professional, 2008. ISBN 978–0–321–53496–5
[Knu09] D.E. Knuth: The Art of Computer Programming,
Volume 4, Fascicle 1, Bitwise Tricks & Techniques;
Binary Decision Diagrams.
Addison-Wesley Professional, 2009. ISBN 978–0–321–58050–4

A. Mäder 201
Literatur (cont.)
3.9 Ziffern und Zahlen - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Hei05] K. von der Heide: Vorlesung: Technische Informatik 1 —


interaktives Skript. Universität Hamburg, FB Informatik, 2005.
[Link]/lectures/2004ws/
vorlesung/t1
Float/Double-Demonstration: demoieee754
[Omo94] A.R. Omondi: Computer Arithmetic Systems –
Algorithms, Architecture and Implementations. Prentice-Hall
International, 1994. ISBN 0–13–334301–4
[Kor01] I. Koren: Computer Arithmetic Algorithms.
2nd edition, CRC Press, 2001. ISBN 978–1–568–81160–4.
[Link]/ece/koren/arith
[Spa76] O. Spaniol: Arithmetik in Rechenanlagen.
B. G. Teubner, 1976. ISBN 3–519–02332–6

A. Mäder 202
Gliederung
4 Arithmetik 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
Addition und Subtraktion
Multiplikation
Division
Höhere Funktionen
Mathematische Eigenschaften
Literatur
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen

A. Mäder 203
Gliederung (cont.)
4 Arithmetik 64-040 Rechnerstrukturen und Betriebssysteme

9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 204
Wiederholung: Stellenwertsystem („Radixdarstellung“)
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I Wahl einer geeigneten Zahlenbasis b („Radix“)


I 10: Dezimalsystem
I 16: Hexadezimalsystem (Sedezimalsystem)
I 2: Dualsystem
I Menge der entsprechenden Ziffern {0; 1; : : : ; b − 1}
I inklusive einer besonderen Ziffer für den Wert Null
I Auswahl der benötigten Anzahl n von Stellen
n−1
X
|z| = ai · b i
i=0

b Basis ai Koeffizient an Stelle i


I universell verwendbar, für beliebig große Zahlen

A. Mäder 205
Integer-Datentypen in C und Java
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

C:
I Zahlenbereiche definiert in Headerdatei
/usr/include/limits.h
LONG_MIN, LONG_MAX, ULONG_MAX etc.
I Zweierkomplement (signed), Ganzzahl (unsigned)
I die Werte sind plattformabhängig (!)

Java:
I 16-bit, 32-bit, 64-bit Zweierkomplementzahlen
I Wrapper-Klassen Short, Integer, Long
Short. MAX_VALUE = 32767
Integer . MIN_VALUE = -2147483648
Integer . MAX_VALUE = 2147483647
Long. MIN_VALUE = -9223372036854775808 L
...
I Werte sind für die Sprache fest definiert

A. Mäder 206
Addition im Dualsystem
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I funktioniert genau wie im Dezimalsystem


I Addition mehrstelliger Zahlen erfolgt stellenweise
I Additionsmatrix:
+ 0 1
0 0 1
1 1 10

I Beispiel
1011 0011 = 179
+ 0011 1001 = 57
Ü 11 11 11
1110 1100 = 236

A. Mäder 207
unsigned Addition: Visualisierung
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

Integer addition

32

28

24

20

16
14
12 12
10
8
8
4
6
0 4
0
2 2
4
6
8 0
10
12
14 [BO15]

I Wortbreite der Operanden ist w , hier 4-bit


I Zahlenbereich der Operanden x, y ist 0 : : : (2w − 1)
I Zahlenbereich des Resultats s ist 0 : : : (2w +1 − 2)

A. Mäder 208
unsigned Addition: Visualisierung (cont.)
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

Unsigned addition (4-bit word)

Overflow

16

14 Normal
12

10

8
14
6 12
4 10
8
2
6
0 4
0
2 2
4
6
8 0
10
12
14 [BO15]

I Wortbreite der Operanden und des Resultats ist w


⇒ Überlauf, sobald das Resultat größer als (2w − 1)
⇒ oberstes Bit geht verloren

A. Mäder 209
unsigned Addition: Überlauf
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

x +y
2w+1 Overflow

x +u y
2w

0
I Wortbreite ist w
I Zahlenbereich der Operanden x, y ist 0 : : : (2w − 1)
I Zahlenbereich des Resultats s ist 0 : : : (2w +1 − 2)
I Werte s ≥ 2w werden in den Bereich 0 : : : 2w − 1 abgebildet

A. Mäder 210
Subtraktion im Dualsystem
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I Subtraktion mehrstelliger Zahlen erfolgt stellenweise


I (Minuend - Subtrahend), Überträge berücksichtigen

I Beispiel
1011 0011 = 179
- 0011 1001 = 57
Ü 1111
111 1010 = 122

I Alternative: Ersetzen der Subtraktion durch Addition


des b-Komplements

A. Mäder 211
Subtraktion mit b-Komplement
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I bei Rechnung mit fester Stellenzahl n gilt:

Kb (z) + z = b n =0

weil b n gerade nicht mehr in n Stellen hineinpasst


I also gilt für die Subtraktion auch:

x − y = x + Kb (y )

⇒ Subtraktion kann also durch Addition des b-Komplements


ersetzt werden
I und für Integerzahlen gilt außerdem

x − y = x + Kb−1 (y ) + 1

A. Mäder 212
signed Addition: Visualisierung 2-Komplement
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

Two's complement addition (4-bit word)

Normal
Negative
overflow Positive
8 overflow
6

0
6
-2 4
-4 2
0
-6
-2
-8 -4
-8
-6 -6
-4
-2
0 -8
2
4
6 [BO15]

Wortbreite der Operanden ist w , hier 4-bit


I
I Zahlenbereich der Operanden x, y ist −2w −1 : : : (2w −1 − 1)
I Zahlenbereich des Resultats s ist −2w : : : (2w − 2)
⇒ Überlauf in beide Richtungen möglich
A. Mäder 213
signed Addition: Überlauf
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

x +y
+2w Positive overflow
Case 4 x +t y
+2w –1 +2w –1
Case 3
0 0
Case 2
–2w –1 –2w –1
Case 1
Negative overflow
–2w
I Wortbreite des Resultats ist w : Bereich −2w −1 : : : (2w −1 − 1)
I Überlauf positiv wenn Resultat ≥ 2w −1 : Summe negativ
–"– negativ –"– < −2w −1 : Summe positiv

A. Mäder 214
Überlauf: Erkennung
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I Erkennung eines Überlaufs bei der Addition?


I wenn beide Operanden das gleiche Vorzeichen haben
und sich das Vorzeichen des Resultats unterscheidet

I Java-Codebeispiel
int a, b, sum; // operands and sum
boolean ovf; // ovf flag indicates overflow

sum = a + b;
ovf = ((a < 0) == (b < 0)) && ((a < 0) != (sum < 0));

A. Mäder 215
Subtraktion mit Einer- und Zweierkomplement
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I Subtraktion ersetzt durch Addition des Komplements


Dezimal 1-Komplement 2-Komplement
10 0000 1010 0000 1010
+(-3) 1111 1100 1111 1101
+7 1 0000 0110 1 0000 0111
Übertrag: addieren +1 verwerfen
0000 0111 0000 0111
I das b-Komplement einer Zahl z ist
Kb (z) = b n − z; für z 6= 0
= 0; für z = 0
I das (b − 1)-Komplement einer Zahl z ist
Kb−1 (z) = b n − z − b −m ; für z 6= 0
= 0; für z = 0

A. Mäder 216
Veranschaulichung: Zahlenkreis
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel für 4-bit Zahlen


0000 0000 0000
1111 0001 1111 0001 1111 0001

1110
-1 0 1
0010 1110 0 1
0010 1110
-7 0 1
0010

-2 2 -1 2 -6 2
1101 0011 1101 0011 1101 0011
-3 3 -2 3 -5 3
1100 -4 4 0100 1100 -3 4 0100 1100 -4 4 0100

-5 5 -4 5 -3 5
1011 0101 1011 0101 1011 0101
-6 6 -5 6 -2 6
1010
-7 -8 7 0110 1010
-6 -7 7 0110 1010
-1 -0 7 0110

1001 0111 1001 0111 1001 0111


1000 1000 1000

2-Komplement 1-Komplement Betrag+Vorzeichen

I Komplement-Arithmetik als Winkeladdition

A. Mäder 217
Zahlenkreis: Addition, Subtraktion
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

2-Kompl. 0010+0100=0110
0100+0101=1001
0110-0010=0100
0000
1111 0001

1110
-1 0 1
0010

-2 2
1101 0011
-3 3
1100 -4 4 0100

-5 5
1011 0101
-6 6
1010
-7 -8 7 0110

1001 0111
1000 0010 1110
0100
0101
0110

A. Mäder 218
Zahlenkreis: Addition, Subtraktion (cont.)
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

2-Kompl. 1110+1101=1011
1110+1001=0111
1110+0110=0100
0000
1111 0001

1110
-1 0 1
0010

-2 2
1101 0011
-3 3
1100 -4 4 0100

-5 5
1011 0101
-6 6
1010
-7 -8 7 0110

1001 0111
1000 1110
1101
1001
0110

A. Mäder 219
Zahlenkreis: Addition, Subtraktion (cont.)
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

1-Kompl. 0010+0100=0110
0100+0101=1001
0110+1101+1=0100
0000
1111 0001

1110 0 1
0010

-1 2
1101 0011
-2 3
1100 -3 4 0100

-4 5
1011 0101
-5 6
1010
-6 -7 7 0110

1001 0111
1000 0010 1101
0100
0101
0110

A. Mäder 220
Zahlenkreis: Addition, Subtraktion (cont.)
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

1-Kompl. 1101+1100+1=1010
1101+1000=0101
1101+0110+1=0100
0000
1111 0001

1110 0 1
0010

-1 2
1101 0011
-2 3
1100 -3 4 0100

-4 5
1011 0101
-5 6
1010
-6 -7 7 0110

1001 0111
1000 1101
1100
1000
0110

A. Mäder 221
in C: unsigned Zahlen
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I für hardwarenahe Programme und Treiber


I für modulare Arithmetik („multi-precision arithmetic“)
I aber evtl. ineffizient (vom Compiler schlecht unterstützt)

I Vorsicht vor solchen Fehlern


unsigned int i, cnt = ...;
for( i = cnt -2; i >= 0; i-- ) {
a[i] += a[i+1];
}

A. Mäder 222
in C: Casting-Regeln
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I Bit-Repräsentation wird nicht verändert


I kein Effekt auf positiven Zahlen
I Negative Werte als (große) positive Werte interpretiert
short int x = 15213;
unsigned short int ux = ( unsigned short) x; // 15213

short int y = -15213;


unsigned short int uy = ( unsigned short) y; // 50323

I Schreibweise für Konstanten:


I ohne weitere Angabe: signed
I Suffix „U“ für unsigned: 0U, 4294967259U

A. Mäder 223
in C: unsigned / signed Interpretation
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

2w

2w–1 +2w–1
Unsigned
Two’s
0 0 complement

–2w–1
2w

+2w–1 2w–1 Unsigned

Two’s
complement 0 0

–2w–1
A. Mäder 224
in C: Vorsicht bei Typumwandlung
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I Arithmetische Ausdrücke:
bei gemischten Operanden: Auswertung als unsigned
I

auch für die Vergleichsoperationen <, >, ==, <=, >=


I
I Beispiele für Wortbreite 32-bit:

Konstante 1 Relation Konstante 2 Auswertung Resultat


0 == 0U unsigned 1
-1 < 0 signed 1
-1 < 0U unsigned 0
2147483647 > -2147483648 signed 1
2147483647U > -2147483648 unsigned 0
2147483647 > (int) 2147483648U signed 1
-1 > -2 signed 1
(unsigned) -1 > -2 unsigned 1
Fehler

A. Mäder 225
Sign-Extension
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I Gegeben: w -bit Integer x


I Umwandeln in w + k-bit Integer x 0 mit gleichem Wert?

I Sign-Extension: Vorzeichenbit kopieren

x 0 = xw −1 ; : : : xw −1 ; xw −1 ; xw −2 ; : : : x0

I Zahlenbeispiele
0110 4-bit signed: +6
0000 0110 8-bit signed: +6
0000 0000 0000 0110 16-bit signed: +6

1110 4-bit signed: -2


1111 1110 8-bit signed: -2
1111 1111 1111 1110 16-bit signed: -2
A. Mäder 226
Java Puzzlers No.5
J. Bloch, N. Gafter: Java Puzzlers: Traps, Pitfalls, and Corner Cases. Addison-Wesley, 2005
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

public static void main( String [] args ) {


System .out. println (
Long. toHexString ( 0 x100000000L + 0 xcafebabe ));
}

I Programm addiert zwei Konstanten, Ausgabe in Hex-Format


I Was ist das Resultat der Rechnung?
0xf f f f f f f f ca f ebabe (sign-extension!)
0x0000000100000000
Ü 11111110
00000000ca f ebabe

A. Mäder 227
Ariane-5 Absturz
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 228
Ariane-5 Absturz (cont.)
4.1 Arithmetik - Addition und Subtraktion 64-040 Rechnerstrukturen und Betriebssysteme

I Erstflug der Ariane-5 („V88“) am 04. Juni 1996


I Kurskorrektur wegen vermeintlich falscher Fluglage
I Selbstzerstörung der Rakete nach 36,7 Sekunden
I Schaden ca. 635 M¤ (teuerster Softwarefehler der Geschichte?)

I bewährte Software von Ariane-4 übernommen


I aber Ariane-5 viel schneller als Ariane-4
I 64-bit Gleitkommawert für horizontale Geschwindigkeit
I Umwandlung in 16-bit Integer: dabei Überlauf

I [Link]

A. Mäder 229
Multiplikation im Dualsystem
4.2 Arithmetik - Multiplikation 64-040 Rechnerstrukturen und Betriebssysteme

I funktioniert genau wie im Dezimalsystem


I p = a · b mit Multiplikator a und Multiplikand b
I Multiplikation von a mit je einer Stelle des Multiplikanten b
I Addition der Teilterme

I Multiplikationsmatrix ist sehr einfach:


· 0 1
0 0 0
1 0 1

A. Mäder 230
Multiplikation im Dualsystem (cont.)
4.2 Arithmetik - Multiplikation 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel
10110011 · 1101 = 179 · 13 = 2327
10110011 1 = 1001 0001 0111
10110011 1 = 0x917
00000000 0
10110011 1
Ü 11101111
100100010111

A. Mäder 231
unsigned Multiplikation
4.2 Arithmetik - Multiplikation 64-040 Rechnerstrukturen und Betriebssysteme

I bei Wortbreite w bit


I Zahlenbereich der Operanden: 0 : : : (2w − 1)
I Zahlenbereich des Resultats: 0 : : : (2w − 1)2 = 22w − 2w +1 + 1
⇒ bis zu 2w bits erforderlich

I C: Resultat enthält nur die unteren w bits


I Java: keine unsigned Integer
I Hardware: teilweise zwei Register high, low für
die oberen und unteren Bits des Resultats

A. Mäder 232
signed Multiplikation 2-Komplement
4.2 Arithmetik - Multiplikation 64-040 Rechnerstrukturen und Betriebssysteme

I Zahlenbereich der Operanden: −2w −1 : : : (2w −1 − 1)


I Zahlenbereich des Resultats: −2w −1 · (2w −1 − 1) : : : (22w −2 )
⇒ bis zu 2w bits erforderlich

I C, Java: Resultat enthält nur die unteren w bits


I Überlauf wird ignoriert
int i = 100*200*300*400; // -1894967296

I Repräsentation der unteren Bits des Resultats entspricht der


unsigned Multiplikation
⇒ kein separater Algorithmus erforderlich
Beweis: siehe Bryant, O’Hallaron: Abschnitt 2.3.5 [BO15]

A. Mäder 233
Java Puzzlers No. 3
J. Bloch, N. Gafter: Java Puzzlers: Traps, Pitfalls, and Corner Cases. Addison-Wesley, 2005
4.2 Arithmetik - Multiplikation 64-040 Rechnerstrukturen und Betriebssysteme

public static void main( String args [] ) {


final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
System .out. println ( MICROS_PER_DAY / MILLIS_PER_DAY );
}

I druckt den Wert 5, nicht 1000!


I MICROS_PER_DAY mit 32-bit berechnet, dabei Überlauf
I Konvertierung nach 64-bit long erst bei Zuweisung
I long-Konstante schreiben: 24L * 60 * 60 * 1000 * 1000

A. Mäder 234
Division im Dualsystem
4.3 Arithmetik - Division 64-040 Rechnerstrukturen und Betriebssysteme

I d = a=b mit Dividend a und Divisor b

I funktioniert genau wie im Dezimalsystem


I schrittweise Subtraktion des Divisors
I Berücksichtigen des „Stellenversetzens“

I in vielen Prozessoren nicht (oder nur teilweise)


durch Hardware unterstützt
I daher deutlich langsamer als Multiplikation

A. Mäder 235
Division im Dualsystem (cont.)
4.3 Arithmetik - Division 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiele
10010 =310 = 110 01002 =112 = 10 00012

1100100 / 11 = 0100001
1 0
11 1
−11
0 0
0 0
1 0
10 0
100 1
−11
1 1 (Rest)

A. Mäder 236
Division im Dualsystem (cont.)
4.3 Arithmetik - Division 64-040 Rechnerstrukturen und Betriebssysteme

9110 =1310 = 101 10112 =11012 = 1112

1011011 / 1101 = 0111


1011 0
10110 1
−1101
10011 1
−1101
01101 1
−1101
0

A. Mäder 237
Höhere mathematische Funktionen
4.4 Arithmetik - Höhere Funktionen 64-040 Rechnerstrukturen und Betriebssysteme


Berechnung von x, log x, exp x, sin x . . . ?

I Approximation über Polynom (Taylor-Reihe) bzw.


Approximation über rationale Funktionen
I vorberechnete Koeffizienten für höchste Genauigkeit
I Ausnutzen mathematischer Identitäten für Skalierung

I Sukzessive Approximation über iterative Berechnungen


I Beispiele: Quadratwurzel und Reziprok-Berechnung
I häufig schnelle (quadratische) Konvergenz

I Berechnungen erfordern nur die Grundrechenarten

A. Mäder 238
Reziprokwert: Iterative Berechnung von 1=x
4.4 Arithmetik - Höhere Funktionen 64-040 Rechnerstrukturen und Betriebssysteme

I Berechnung des Reziprokwerts y = 1=x über

yi+1 = yi · (2 − x · yi )

I geeigneter Startwert y0 als Schätzung erforderlich

I Beispiel x = 3, y0 = 0; 5:
y1 = 0; 5 · (2 − 3 · 0; 5) = 0; 25
y2 = 0; 25 · (2 − 3 · 0; 25) = 0; 3125
y3 = 0; 3125 · (2 − 3 · 0; 3125) = 0; 33203125
y4 = 0; 3332824
y5 = 0; 3333333332557231
y6 = 0; 3333333333333333

A. Mäder 239

Quadratwurzel: Heron-Verfahren für x
Babylonisches Wurzelziehen
4.4 Arithmetik - Höhere Funktionen 64-040 Rechnerstrukturen und Betriebssysteme


I Sukzessive Approximation von y = x gemäß

yn + x=yn
yn+1 =
2
I quadratische Konvergenz in der Nähe der Lösung
I Anzahl der gültigen Stellen verdoppelt sich mit jedem Schritt

I aber langsame Konvergenz fernab der Lösung


I Lookup-Tabelle und Tricks für brauchbare Startwerte y0

A. Mäder 240
Informationstreue
4.5 Arithmetik - Mathematische Eigenschaften 64-040 Rechnerstrukturen und Betriebssysteme

Welche mathematischen Eigenschaften gelten bei der


Informationsverarbeitung, in der gewählten Repräsentation?

Beispiele:
I Gilt x 2 ≥ 0?
I float: ja
I signed integer: nein

I Gilt (x + y ) + z = x + (y + z)?
I integer: ja
I float: nein
1.0E20 + (-1.0E20 + 3.14) = 0

A. Mäder 241
Festkomma Addition
4.5 Arithmetik - Mathematische Eigenschaften 64-040 Rechnerstrukturen und Betriebssysteme

unsigned Arithmetik
I Wortbreite auf w begrenzt
I kommutative Gruppe / Abel’sche Gruppe
I Abgeschlossenheit 0 ≤ a ⊕uw b ≤ 2w − 1
I Kommutativgesetz a ⊕uw b = b ⊕uw a
I Assoziativgesetz a ⊕uw (b ⊕uw c) = (a ⊕uw b) ⊕uw c
I neutrales Element a ⊕uw 0 = a
I Inverses a ⊕uw a = 0; a = 2w − a

A. Mäder 242
Festkomma Addition (cont.)
4.5 Arithmetik - Mathematische Eigenschaften 64-040 Rechnerstrukturen und Betriebssysteme

signed Arithmetik 2-Komplement


I Wortbreite auf w begrenzt
I signed und unsigned Addition sind auf Bit-Ebene identisch
a ⊕sw b = U2S(S2U(a) ⊕uw S2U(b))
⇒ isomorphe Algebra zu ⊕uw
I kommutative Gruppe / Abel’sche Gruppe
I Abgeschlossenheit −2w −1 ≤ a ⊕sw b ≤ 2w −1 − 1
I Kommutativgesetz a ⊕sw b = b ⊕sw a
I Assoziativgesetz a ⊕sw (b ⊕sw c) = (a ⊕sw b) ⊕sw c
I neutrales Element a ⊕sw 0 = a
I Inverses a ⊕sw a = 0; a = −a, a 6= −2w −1
a, a = −2w −1

A. Mäder 243
Festkomma Multiplikation
4.5 Arithmetik - Mathematische Eigenschaften 64-040 Rechnerstrukturen und Betriebssysteme

unsigned Arithmetik
I Wortbreite auf w begrenzt
I Modulo-Arithmetik a ⊗uw b = (a · b) mod 2w
I ⊗uw und ⊕uw bilden einen kommutativen Ring
I ⊕uw ist eine kommutative Gruppe
I Abgeschlossenheit 0 ≤ a ⊗uw b ≤ 2w − 1
I Kommutativgesetz a ⊗uw b = b ⊗uw a
I Assoziativgesetz a ⊗uw (b ⊗uw c) = (a ⊗uw b) ⊗uw c
I neutrales Element a ⊗uw 1 = a
I Distributivgesetz a ⊗uw (b ⊕uw c) = (a ⊗uw b) ⊕uw (a ⊗uw c)

A. Mäder 244
Festkomma Multiplikation (cont.)
4.5 Arithmetik - Mathematische Eigenschaften 64-040 Rechnerstrukturen und Betriebssysteme

signed Arithmetik
I signed und unsigned Multiplikation sind auf Bit-Ebene identisch
I ...

isomorphe Algebren
I unsigned Addition und Multiplikation; Wortbreite w
I signed Addition und Multiplikation; Wortbreite w 2-Kompl.
I isomorph zum Ring der ganzen Zahlen modulo 2w

I Ordnungsrelation im Ring der ganzen Zahlen


I a>0 −→ a + b > b
I a > 0; b > 0 −→ a · b > 0
I diese Relationen gelten nicht bei Rechnerarithmetik! Überlauf

A. Mäder 245
Gleitkomma Addition
Vergleich mit kommutativer Gruppe
4.5 Arithmetik - Mathematische Eigenschaften 64-040 Rechnerstrukturen und Betriebssysteme

I Abgeschlossen? Ja
I Kommutativ? Ja
I Assoziativ? Nein
(Überlauf, Rundungsfehler)
I Null ist neutrales Element? Ja
I Inverses Element existiert? Fast
(außer für NaN und Infinity)

I Monotonie? a ≥ b −→ (a + c) ≥ (b + c) Fast
(außer für NaN und Infinity)

A. Mäder 246
Gleitkomma Multiplikation
Vergleich mit kommutativem Ring
4.5 Arithmetik - Mathematische Eigenschaften 64-040 Rechnerstrukturen und Betriebssysteme

I Abgeschlossen? Ja
(aber Infinity oder NaN möglich)
I Kommutativ? Ja
I Assozativ? Nein
(Überlauf, Rundungsfehler)
I Eins ist neutrales Element? Ja
I Distributivgesetz? Nein

I Monotonie? a ≥ b; c ≥ 0 −→ (a · c) ≥ (b · c) Fast
(außer für NaN und Infinity)

A. Mäder 247
Literatur
4.6 Arithmetik - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BO15] R.E. Bryant, D.R. O’Hallaron:


Computer systems – A programmers perspective.
3rd global ed., Pearson Education Ltd., 2015.
ISBN 978–1–292–10176–7. [Link]
[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –
Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5

A. Mäder 248
Literatur (cont.)
4.6 Arithmetik - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Omo94] A.R. Omondi: Computer Arithmetic Systems –


Algorithms, Architecture and Implementations. Prentice-Hall
International, 1994. ISBN 0–13–334301–4
[Kor01] I. Koren: Computer Arithmetic Algorithms.
2nd edition, CRC Press, 2001. ISBN 978–1–568–81160–4.
[Link]/ece/koren/arith
[Spa76] O. Spaniol: Arithmetik in Rechenanlagen.
B. G. Teubner, 1976. ISBN 3–519–02332–6

A. Mäder 249
Gliederung
5 Zeichen und Text 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
Ad-Hoc Codierungen
ASCII und ISO-8859
Unicode
Tipps und Tricks
Base64-Codierung
Literatur
6. Logische Operationen
7. Codierung
8. Schaltfunktionen

A. Mäder 250
Gliederung (cont.)
5 Zeichen und Text 64-040 Rechnerstrukturen und Betriebssysteme

9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 251
Wiederholung: Zeichen
5 Zeichen und Text 64-040 Rechnerstrukturen und Betriebssysteme

I Zeichen: engl. character


Element z aus einer zur Darstellung von Information
vereinbarten, einer Abmachung unterliegenden, endlichen
Menge Z von Elementen
I Die Menge Z heißt Zeichensatz oder Zeichenvorrat
engl. character set
I Binärzeichen: engl. binary element, binary digit, bit
Jedes der Zeichen aus einem Vorrat / aus einer Menge von
zwei Symbolen
I Numerischer Zeichensatz: Zeichenvorrat aus Ziffern
und/oder Sonderzeichen zur Darstellung von Zahlen
I Alphanumerischer Zeichensatz: Zeichensatz aus
(mindestens) den Dezimalziffern und den Buchstaben des
gewöhnlichen Alphabets, meistens auch mit Sonderzeichen
(Leerzeichen, Punkt, Komma usw.)
A. Mäder 252
Wiederholung: Zeichen (cont.)
5 Zeichen und Text 64-040 Rechnerstrukturen und Betriebssysteme

I Alphabet: engl. alphabet


Ein in vereinbarter Reihenfolge geordneter Zeichenvorrat
I Zeichenkette: engl. string
Eine Folge von Zeichen
I Wort: engl. word
Eine Folge von Zeichen, die in einem gegebenen
Zusammenhang als Einheit bezeichnet wird
I Worte mit 8 bit werden als Byte bezeichnet
I Stelle: engl. position
Die Lage/Position eines Zeichens innerhalb einer Zeichenkette

A. Mäder 253
Flaggen-Signale
5.1 Zeichen und Text - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

A/1 B/2 C/3 D/4 E/5 F/6 G/7 H/8

I/9 J / A...Z K/0 L M N O P

Q R S T U V W X

Y Z Ready 0...9 del Error

[Link]/wiki/Winkeralphabet

A. Mäder 254
Flaggen-Alphabet
5.1 Zeichen und Text - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

A B C D E F G

H I J K L M N

O P Q R S T U

V W X Y Z

[Link]/wiki/Flaggenalphabet

A. Mäder 255
Braille: Blindenschrift
5.1 Zeichen und Text - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

A/1 B/2 C/3 D/4 E/5 F/6 G/7 H/8 I/9 J/0

I Symbole als 2x3 Matrix (geprägte Punkte)


I Erweiterung auf 2x4 Matrix (für Computer)
I bis zu 64 (256) mögliche Symbole
I diverse Varianten
I ein Symbol pro Buchstabe
I ein Symbol pro Silbe
I Kurzschrift/Steno

A. Mäder 256
Morse-Code
5.1 Zeichen und Text - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

Codetabelle • kurzer Ton −langer Ton


A •− S ••• . •−•−•− S-Start − • − • −
B −• • • T − , −− • • −− Verst. • • •−•
C −•−• U • •− ? • • −− • • S-Ende • − • − •
D −• • V • • •− ´ • −−−− • V-Ende • • • − • −
E • W • −− ! − • − • −− Error ••••••••
F • •−• X −• •− / −• •−•
G −− • Y − • −− ( − • −− • Ä •−•−
H •••• Z −− • • ) − • −− • − À • −− • −
I •• 0 −−−−− & •−• • • É • •−• •
J • −−− 1 • −−−− : −−− • • • È •−• •−
K −•− 2 • • −−− ; −•−•−• Ö −−− •
L •−• • 3 • • • −− = −• • •− Ü • • −−
M −− 4 • • • •− + •−•−• ß • • • −− • •
N −• 5 ••••• - −• • • •− CH −−−−
O −−− 6 −• • • • _ • • −− • − Ñ −− • −−
P • −− • 7 −− • • • " •−• •−• ...
Q −− • − 8 −−− • • $ • • •−• •−
R •−• 9 −−−− • @ • −− • − • SOS • • • −−− • • •

A. Mäder 257
Morse-Code (cont.)
5.1 Zeichen und Text - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

I Eindeutigkeit Codewort: • • • • •−•


E •
I ••
N −•
R •−•
S •••
I bestimmte Morse-Sequenzen sind mehrdeutig
I Pause zwischen den Symbolen notwendig

I Codierung
I Häufigkeit der Buchstaben = 1 / Länge des Codewortes
I Effizienz: kürzere Codeworte
I Darstellung als Codebaum

A. Mäder 258
Morse-Code: Baumdarstellung (Ausschnitt)
5.1 Zeichen und Text - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

I Anordnung der Symbole entsprechend ihrer Codierung

A. Mäder 259
ASCII
American Standard Code for Information Interchange
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

I eingeführt 1967, aktualisiert 1986: ANSI X3.4-1986


I viele Jahre der dominierende Code für Textdateien
I alle Zeichen einer typischen Schreibmaschine
I Erweiterung des früheren 5-bit Fernschreiber-Codes
(Murray-Code)

I 7-bit pro Zeichen, 128 Zeichen insgesamt


I 95 druckbare Zeichen: Buchstaben, Ziffern, Sonderzeichen
(Codierung im Bereich 21 . . . 7E)
I 33 Steuerzeichen (engl: control characters) (0 . . . 1F, 7F)

A. Mäder 260
ASCII: Codetabelle
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

Code …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
0… NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
1… DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2… SP ! " # $ % & ' ( ) * + , - . /
3… 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4… @ A B C D E F G H I J K L M N O
5… P Q R S T U V W X Y Z [ \ ] ^ _
6… ` a b c d e f g h i j k l m n o
7… p q r s t u v w x y z { | } ~ DEL

I SP = Leerzeichen, CR = carriage-return, LF = line-feed


I ESC = escape, DEL = delete, BEL = bell usw.
[Link]

A. Mäder 261
ISO-8859 Familie
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

I Erweiterung von ASCII um Sonderzeichen und Umlaute


I 8-bit Codierung: bis max. 256 Zeichen darstellbar

I Latin-1: Westeuropäisch
I Latin-2: Mitteleuropäisch
I Latin-3: Südeuropäisch
I Latin-4: Baltisch
I Latin-5: Kyrillisch
I Latin-6: Arabisch
I Latin-7: Griechisch
I usw.

I immer noch nicht für mehrsprachige Dokumente geeignet

A. Mäder 262
ISO-8859-1: Codetabelle (1)
Erweiterung von ASCII für westeuropäische Sprachen
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

Code …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
0…
nicht belegt
1…
2… SP ! " # $ % & ' ( ) * + , - . /
3… 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4… @ A B C D E F G H I J K L M N O
5… P Q R S T U V W X Y Z [ \ ] ^ _
6… ` a b c d e f g h i j k l m n o
7… p q r s t u v w x y z { | } ~
8…
nicht belegt
9…
A… NBSP ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ SHY ® ¯
B… ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
C… À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
D… Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
E… à á â ã ä å æ ç è é ê ë ì í î ï
F… ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ

A. Mäder 263
ISO-8859-1: Codetabelle (2)
Sonderzeichen gemeinsam für alle 8859 Varianten
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

Code …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
0… NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
1… DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2…
3…
4… wie ISO/IEC 8859, Windows-125X und US-ASCII
5…
6…
7… DEL
8… PAD HOP BPH NBH IND NEL SSA ESA HTS HTJ VTS PLD PLU RI SS2 SS3
9… DCS PU1 PU2 STS CCH MW SPA EPA SOS SGCI SCI CSI ST OSC PM APC
A…
B…
C…
wie ISO/IEC 8859-1 und Windows-1252
D…
E…
F…

A. Mäder 264
ISO-8859-2
Erweiterung von ASCII für slawische Sprachen
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

Code …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
0… NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
1… DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2… SP ! " # $ % & ' ( ) * + , - . /
3… 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4… @ A B C D E F G H I J K L M N O
5… P Q R S T U V W X Y Z [ \ ] ^ _
6… ` a b c d e f g h i j k l m n o
7… p q r s t u v w x y z { | } ~ DEL
8… PAD HOP BPH NBH IND NEL SSA ESA HTS HTJ VTS PLD PLU RI SS2 SS3
9… DCS PU1 PU2 STS CCH MW SPA EPA SOS SGCI SCI CSI ST OSC PM APC
A… NBSP Ą ˘ Ł ¤ Ľ Ś § ¨ Š Ş Ť Ź SHY Ž Ż
B… ° ą ˛ ł ´ ľ ś ˇ ¸ š ş ť ź ˝ ž ż
C… Ŕ Á Â Ă Ä Ĺ Ć Ç Č É Ę Ë Ě Í Î Ď
D… Đ Ń Ň Ó Ô Ő Ö × Ř Ů Ú Ű Ü Ý Ţ ß
E… ŕ á â ă ä ĺ ć ç č é ę ë ě í î ď
F… đ ń ň ó ô ő ö ÷ ř ů ú ű ü ý ţ ˙

A. Mäder 265
ISO-8859-15
Modifizierte ISO-8859-1 mit ¤ (0xA4)
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

Code …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
0… NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
1… DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2… SP ! " # $ % & ' ( ) * + , - . /
3… 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4… @ A B C D E F G H I J K L M N O
5… P Q R S T U V W X Y Z [ \ ] ^ _
6… ` a b c d e f g h i j k l m n o
7… p q r s t u v w x y z { | } ~ DEL
8… PAD HOP BPH NBH IND NEL SSA ESA HTS HTJ VTS PLD PLU RI SS2 SS3
9… DCS PU1 PU2 STS CCH MW SPA EPA SOS SGCI SCI CSI ST OSC PM APC
A… NBSP ¡ ¢ £ € ¥ Š § š © ª « ¬ SHY ® ¯
B… ° ± ² ³ Ž µ ¶ · ž ¹ º » Œ œ Ÿ ¿
C… À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
D… Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
E… à á â ã ä å æ ç è é ê ë ì í î ï
F… ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ

A. Mäder 266
Microsoft: Codepages 437, 850, 1252
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

I Zeichensatz des IBM-PC ab 1981


I Erweiterung von ASCII auf einen 8-bit Code
I einige Umlaute (westeuropäisch)
I Grafiksymbole

I [Link]
I verbesserte Version: Codepage 850, 858 (¤-Symbol an 0xD5)
I Codepage 1252 entspricht (weitgehend) ISO-8859-1
I Sonderzeichen liegen an anderen Positionen als bei ISO-8859

A. Mäder 267
Microsoft: Codepage 850
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

Code …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
0… ☺ ☻ ♥ ♦ ♣ ♠ • ◘ ○ ◙ ♂ ♀ ♪ ♫ ☼
1… ► ◄ ↕ ‼ ¶ § ▬ ↨ ↑ ↓ → ← ∟ ↔ ▲ ▼
2… ! " # $ % & ' ( ) * + , - . /
3… 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4… @ A B C D E F G H I J K L M N O
5… P Q R S T U V W X Y Z [ \ ] ^ _
6… ` a b c d e f g h i j k l m n o
7… p q r s t u v w x y z { | } ~ ⌂
8… Ç ü é â ä à å ç ê ë è ï î ì Ä Å
9… É æ Æ ô ö ò û ù ÿ Ö Ü ø £ Ø × ƒ
A… á í ó ú ñ Ñ ª º ¿ ® ¬ ½ ¼ ¡ « »
B… ░ ▒ ▓ │ ┤ Á Â À © ╣ ║ ╗ ╝ ¢ ¥ ┐
C… └ ┴ ┬ ├ ─ ┼ ã Ã ╚ ╔ ╩ ╦ ╠ ═ ╬ ¤
D… ð Ð Ê Ë È ı Í Î Ï ┘ ┌ █ ▄ ¦ Ì ▀
E… Ó ß Ô Ò õ Õ µ þ Þ Ú Û Ù ý Ý ¯ ´
F… ± ‗ ¾ ¶ § ÷ ¸ ° ¨ · ¹ ³ ² ■

A. Mäder 268
Austausch von Texten?
5.2 Zeichen und Text - ASCII und ISO-8859 64-040 Rechnerstrukturen und Betriebssysteme

I die meisten gängigen Codes (abwärts-) kompatibel mit ASCII


I unterschiedliche Codierung für Umlaute (soweit vorhanden)
I unterschiedliche Codierung der Sonderzeichen

I Systemspezifische Konventionen für Zeilenende


I abhängig von Rechner- und Betriebssystem
I Konverter-Tools: dos2unix, unix2dos, iconv
Betriebssystem Zeichensatz Abkürzung Hex-Code Escape
Unix, Linux, Mac OS X, AmigaOS, BSD ASCII LF 0A \n
Windows, DOS, OS/2, CP/M, TOS (Atari) ASCII CR LF 0D 0A \r \n
Mac OS bis Version 9, Apple II ASCII CR 0D \r
AIX OS, OS 390 EBCDIC NEL 15

A. Mäder 269
Unicode: Motivation
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

I zunehmende Vernetzung und Globalisierung


I internationaler Datenaustausch?
I Erstellung mehrsprachiger Dokumente?
I Unterstützung orientalischer oder asiatischer Sprachen?

I ASCII oder ISO-8859-1 reicht nicht aus


I temporäre Lösungen konnten sich nicht durchsetzen, z.B:
ISO-2022: Umschaltung zwischen mehreren Zeichensätzen
durch Spezialbefehle (Escapesequenzen).

⇒ Unicode als System zur Codierung aller Zeichen aller


bekannten (lebenden oder toten) Schriftsysteme

A. Mäder 270
Unicode: Versionen und History
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

I auch abgekürzt als UCS: Universal Character Set


I zunehmende Verbreitung (Betriebssysteme, Applikationen)
I Darstellung erfordert auch entsprechende Schriftarten
I [Link]
[Link]

I 1991 1.0.0: europäisch, nahöstlich, indisch


I 1992 1.0.1: ostasiatisch (Han)
I 1993 akzeptiert als ISO/IEC-10646 Standard
I ...
I 2019 12.1.0: inzwischen 137 929 Zeichen
I Sprachzeichen, Hieroglyphen etc.
I Symbole: Satzzeichen, Währungen ($ . . . B), Pfeile,
mathematisch, technisch, Braille, Noten etc.
I Emojis (3 187 aktuell) / Kombinationen

[Link], [Link]/[Link], [Link]/wiki/Unicode, [Link]/de


A. Mäder 271
Unicode: Schreibweise
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

I ursprüngliche Version nutzt 16-bit pro Zeichen


I die sogenannte „Basic Multilingual Plane“
I Schreibweise hexadezimal als U+xxxx
I Bereich von U+0000 . . . U+FFFF
I Schreibweise in Java-Strings: \uxxxx
z.B. \u03A9 für Ω, \u20AC für das ¤-Symbol

I mittlerweile mehr als 216 Zeichen


I Erweiterung um „Extended Planes“
I U+10000 . . . U+10FFFF

A. Mäder 272
Unicode: in Webseiten (HTML)
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

I HTML-Header informiert über verwendeten Zeichensatz


I Unterstützung und Darstellung abhängig vom Browser
I Demo [Link]

<html >
<head >
<META http -equiv="Content -Type" content ="text/html;
charset =utf -8">
<title >UTF -8 Sampler </title >

<META ...
</head >
...

A. Mäder 273
Unicode: Demo
[Link]
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

1. English: The quick brown fox jumps over the lazy dog.
2. Jamaican: Chruu, a kwik di kwik brong fox a jomp huova di liezi daag de, yu no siit?
3. Irish: "An ḃfuil do ċroí ag bualaḋ ó ḟai�os an ġrá a ṁeall lena ṗóg éada ó ṡlí do leasa ṫú?" "D'ḟuascail Íosa Úrṁac na hÓiġe Beannaiṫe pór Éava agus Áḋaiṁ."
4. Dutch: Pa's wijze lynx bezag vroom het fikse aquaduct.
5. German: Falsches Üben von Xylophonmusik quält jeden größeren Zwerg. (1)
6. German: Im finſteren Jagdſchloß am offenen Felsquellwaſſer patzte der affig-fla�erha�e kauzig-höfliche Bäcker über ſeinem verſi�en kniffligen C-Xylophon. (2)
7. Norwegian: Blåbærsyltetøy ("blueberry jam", includes every extra le�er used in Norwegian).
8. Swedish: Flygande bäckasiner söka strax hwila på mjuka tuvor.
9. Icelandic: Sævör grét áðan því úlpan var ónýt.
10. Finnish: (5) Törkylempijävongahdus (This is a perfect pangram, every le�er appears only once. Transla�ng it is an art on its own, but I'll say "rude lover's yelp". :-D)
11. Finnish: (5) Albert os� fago�n ja töräy� puhkuvan melodian. (Albert bought a bassoon and hooted an impressive melody.)
12. Finnish: (5) On sangen hauskaa, e�ä polkupyörä on maanteiden jokapäiväinen ilmiö. (It's pleasantly amusing, that the bicycle is an everyday sight on the roads.)
13. Polish: Pchnąć w tę łódź jeża lub osiem skrzyń fig.
14. Czech: Příliš žluťoučký kůň úpěl ďábelské ódy.
15. Slovak: Starý kôň na hŕbe kníh žuje �ško povädnuté ruže, na stĺpe sa ďateľ učí kvákať novú ódu o živote.
16. Slovenian: Šerif bo za domačo vajo spet kuhal žgance.
17. Greek (monotonic): ξεσκεπάζω την ψυχοφθόρα βδελυγμία
18. Greek (polytonic): ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία
19. Russian: Съешь же ещё этих мягких французских булок да выпей чаю.
20. Russian: В чащах юга жил-был цитрус? Да, но фальшивый экземпляр! ёъ.
21. Bulgarian: Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон.
22. Sami (Northern): Vuol Ruoŧa geđggiid leat máŋga luosa ja čuovžža.
23. Hungarian: Árvíztűrő tükörfúrógép.
24. Spanish: El pingüino Wenceslao hizo kilómetros bajo exhaus�va lluvia y frío, añoraba a su querido cachorro.
25. Spanish: Volé cigüeña que jamás cruzó París, exhibe flor de kiwi y atún.
26. Portuguese: O próximo vôo à noite sobre o Atlân�co, põe freqüentemente o único médico. (3)
27. French: Les naïfs ægithales hâ�fs pondant à Noël où il gèle sont sûrs d'être déçus en voyant leurs drôles d'œufs abîmés.
28. Esperanto: Eĥoŝanĝo ĉiuĵaŭde.
29. Hebrew: .‫זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן‬
30. Japanese (Hiragana):

いろはにほへど ちりぬるを
わがよたれぞ つねならむ
うゐのおくやま けふこえて
あさきゆめみじ ゑひもせず (4)

A. Mäder 274
Unicode: Demo (cont.)
[Link]
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

Šota Rustaveli's VepŸxis T•qŸaosani, •;Th, The Knight in the Tiger's Skin (Georgian):

­¬¶Æ°¹ º¿¨µ¹¨´° Àµ¯¨ ¸»¹¯¨­¬²°

¾³¬¸¯¹° À¬³­¬«¸¬, ´»¯» ±­²¨ «¨³Æ¹´¨¹ ¹µ¼²°¹¨ À¸µ³¨¹¨, Â¬ÂÆ²¹, Ä¿¨²¹¨ «¨ ³°Ä¨¹¨,
Ȩ¬¸¯¨ ¯¨´¨ ³¸µ³¨¹¨; ³µ³Â´¬¹ ¼¸¯¬´° «¨ ¨¾­¼¸°´«¬, ³°­ÈÆ­«¬ ³¨¹ Á¬³¹¨ ´«µ³¨¹¨, «¾°¹°¯
«¨ ¾¨³°¯ ­ÈƬ«­°«¬ ³®°¹¨ ¬²­¨¯¨ ±¸¯µ³¨¨¹¨.

Tamil poetry of Subramaniya Bharathiyar: ˜~OMHŽN LXOIYNX (1882-1921):

NXMPY|I ]MXSYBR^Q IMY…]MXSY ^LXƒ 8KIXT¢ <u” BX^HX,


LXMOOX€ TŽQu”BRX€, :QB_K{¢ 8B…vDY]DXQ~ LX}_M ]Byž,
JXMM¢ IMYS]OKt ]BXzž 8u” TX…|IYžIƒ J}^PX? ]DXƒQ‘ !
^IM¢O{ IMY^SX_D :QB]MQX LOºT_B ]D€Iƒ ^Tzž.

A. Mäder 275
Unicode: Latin-Zeichen
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

I Zeichen im Bereich U+0000 bis U+007F wie ASCII


[Link]/charts/PDF/[Link]

I Bereich von U+0100 bis U+017F für Latin-A


Europäische Umlaute und Sonderzeichen
[Link]/charts/PDF/[Link]

I viele weitere Sonderzeichen ab U+0180


Latin-B, Latin-C usw.

A. Mäder 276
Unicode: Mathematische Symbole und Operatoren
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

Vielfältige Auswahl von Symbolen und Operatoren


I griechisch [Link]/charts/PDF/[Link]
I letterlike Symbols [Link]/charts/PDF/[Link]

I Pfeile [Link]/charts/PDF/[Link]
I Operatoren [Link]/charts/PDF/[Link]
I ...

I Dingbats [Link]/charts/PDF/[Link]

A. Mäder 277
Unicode: Asiatische Sprachen
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

Chinesisch (traditional/simplified), Japanisch, Koreanisch


I U+3400 bis U+4DBF
[Link]/charts/PDF/[Link]
I U+4E00 bis U+9FCF
[Link]/charts/PDF/[Link]

A. Mäder 278
Unicode: Java2D Fontviewer
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

Oracle [JavaD]: JDK demos and samples . . . /demo/jfc/Font2DTest

A. Mäder 279
Unicode: Repräsentation?
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

I 16-bit für jedes Zeichen, bis zu 65 536 Zeichen


I schneller Zugriff auf einzelne Zeichen über Arrayzugriffe (Index)
I aber: doppelter Speicherbedarf gegenüber ASCII/ISO-8859-1
I Verwendung u.a. in Java: Datentyp char

I ab Unicode 3.0 mehrere Planes zu je 65 536 Zeichen


I direkte Repräsentation aller Zeichen erfordert 32-bit/Zeichen
I vierfacher Speicherbedarf gegenüber ISO-8859-1

I bei Dateien ist möglichst kleine Dateigröße wichtig


⇒ Codierung als UTF-8 oder UTF-16

A. Mäder 280
UTF-8
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

Zeichen Unicode Unicode binär UTF-8 binär UTF-8 hexadezimal

Buchstabe y U+0079 00000000 01111001 01111001 79

Buchstabe ä U+00E4 00000000 11100100 11000011 10100100 C3 A4

Zeichen für eingetragene Marke ® U+00AE 00000000 10101110 11000010 10101110 C2 AE

Eurozeichen € U+20AC 00100000 10101100 11100010 10000010 10101100 E2 82 AC

Violinschlüssel 𝄞 U+1D11E 00000001 11010001 00011110 11110000 10011101 10000100 10011110 F0 9D 84 9E

[Link]

I effiziente Codierung von „westlichen“ Unicode-Texten


I Zeichen werden mit variabler Länge codiert, 1 . . . 4-Bytes
I volle Kompatibilität mit ASCII

A. Mäder 281
UTF-8: Algorithmus
5.3 Zeichen und Text - Unicode 64-040 Rechnerstrukturen und Betriebssysteme

Unicode-Bereich UTF-Codierung Anzahl


(hexadezimal) (binär) (benutzt)
0000 0000 - 0000 007F 0∗∗∗ ∗∗∗∗ 128
0000 0080 - 0000 07FF 110∗ ∗∗∗∗ 10∗∗ ∗∗∗∗ 1 920
0000 0800 - 0000 FFFF 1110 ∗∗∗∗ 10∗∗ ∗∗∗∗ 10∗∗ ∗∗∗∗ 63 488
0001 0000 - 0010 FFFF 1111 0∗∗∗ 10∗∗ ∗∗∗∗ 10∗∗ ∗∗∗∗ 10∗∗ ∗∗∗∗ bis 221

I untere 128 Zeichen kompatibel mit ASCII


I Sonderzeichen westlicher Sprachen je zwei Bytes
I führende Eins markiert Multi-Byte Zeichen
I Anzahl der führenden Einsen gibt Anz. Bytegruppen an
I Zeichen ergibt sich als Bitstring aus den ∗∗∗ . . . ∗
I theoretisch bis zu sieben Folgebytes a 6-bit: max. 242 Zeichen

A. Mäder 282
Sprach-Einstellungen: Locale
5.4 Zeichen und Text - Tipps und Tricks 64-040 Rechnerstrukturen und Betriebssysteme

Locale: die Sprach-Einstellungen und Parameter


I auch: i18n („internationalization“)
I Sprache der Benutzeroberfläche
I Tastaturlayout/-belegung
I Zahlen-, Währungs-, Datums-, Zeitformate

I Linux/POSIX: Einstellung über die Locale-Funktionen der


Standard C-Library (Befehl locale)
Java: [Link]
Windows: Einstellung über System/Registry-Schlüssel

A. Mäder 283
dos2unix, unix2dos
5.4 Zeichen und Text - Tipps und Tricks 64-040 Rechnerstrukturen und Betriebssysteme

I Umwandeln von ASCII-Texten (z.B. Programm-Quelltexte)


zwischen DOS/Windows und Unix/Linux Maschinen

I Umwandeln von [Link] in Ausgabedatei [Link]:


dos2unix -c ascii -n [Link] [Link]
dos2unix -c iso -n [Link] [Link]
dos2unix -c mac -n [Link] [Link]

I Umwandeln von Unix nach DOS/Windows, Codepage 850:


unix2dos -850 -n [Link] [Link]

A. Mäder 284
iconv
5.4 Zeichen und Text - Tipps und Tricks 64-040 Rechnerstrukturen und Betriebssysteme

Das „Schweizer-Messer“ zur Umwandlung von Textcodierungen


I Optionen
I -l Liste der unterstützten Codierungen ausgeben

I -f hencodingi Codierung der Eingabedatei


I -t hencodingi Codierung der Ausgabedatei
I -o hfilenamei Name der Ausgabedatei

I Beispiel
iconv -f iso-8859-1 -t utf-8 -o [Link] [Link]

A. Mäder 285
Base64-Codierung
5.5 Zeichen und Text - Base64-Codierung 64-040 Rechnerstrukturen und Betriebssysteme

Übertragung von (Binär-) Dateien zwischen verschiedenen


Rechnern?

I SMTP (Internet Mail-Protokoll) verwendet 7-bit ASCII


I bei Netzwerk-Übertragung müssen alle Rechner/Router den
verwendeten Zeichensatz unterstützen

⇒ Verfahren zur Umcodierung der Datei in 7-bit ASCII notwendig


⇒ etabliert ist das Base64 Verfahren (RFC 2045)

I alle E-Mail Dateianhänge und 8-bit Textdateien


I Umcodierung benutzt nur Buchstaben, Ziffern und
drei Sonderzeichen
I Daten werden byteweise in ASCII Symbole umgesetzt

A. Mäder 286
Base64-Codierung: Prinzip
5.5 Zeichen und Text - Base64-Codierung 64-040 Rechnerstrukturen und Betriebssysteme

1. Codierung von drei Bytes als vier 6-bit Zeichen


Byte 1 Byte 2 Byte 3 I 3 × 8-bit ⇔ 4 × 6-bit
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
I 6-bit Binärwerte: 0 . . . 63
I nutzen 64 (von 128)
5 4 3 2 1 0 5 4 3 2 1 0 5 4 3 2 1 0 5 4 3 2 1 0 7-bit ASCII Symbolen
Zeichen 1 Zeichen 2 Zeichen 3 Zeichen 4

2. Zahl ASCII Zuordnung der ASCII-Zeichen


0 . . . 25 A...Z
26 . . . 51 a...z
52 . . . 61 0...9
62 +
63 /
= Füllzeichen, falls Anz. Bytes nicht durch 3 teilbar
CR Zeilenumbruch (opt.), meistens nach 76 Zeichen

A. Mäder 287
Base64-Codierung: Prinzip (cont.)
5.5 Zeichen und Text - Base64-Codierung 64-040 Rechnerstrukturen und Betriebssysteme

Text content M a n
ASCII 77 97 110
Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Index 19 22 5 46
Base64-encoded T W F u

I drei 8-bit Zeichen, neu gruppiert als vier 6-bit Blöcke


I Zuordnung des jeweiligen Buchstabens/Ziffer
I ggf. =, == am Ende zum Auffüllen
I Übertragung dieser Zeichenfolge ist 7-bit kompatibel
I resultierende Datei ca. 33% größer als das Original

A. Mäder 288
Base64-Codierung: Java
5.5 Zeichen und Text - Base64-Codierung 64-040 Rechnerstrukturen und Betriebssysteme

I in neueren Java Versionen (> 1.8) im JDK enthalten


Module [Link], Package [Link]:
Base64Encoder, bzw. Base64Decoder

I diverse andere Packages


I Apache Commons Codec [Link]

[Link].Base64InputStream
[Link].Base64OutputStream
I JAXB (Java Architecture for XML Binding)
in [Link]
parseBase64Binary, printBase64Binary
Beispiel in Java ist auch eine Insel [Ull18]
[Link]/javainsel/04_008.html#u4.7.4

I ...

A. Mäder 289
Literatur
5.6 Zeichen und Text - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Uni] The Unicode Consortium; Mountain View, CA.


[Link], [Link]/[Link]
[JavaI] Oracle Corporation; Redwood Shores, CA.
The Java Tutorials – Trail: Internationalization.
[Link]/javase/tutorial/i18n
[JavaD] Oracle Corporation: Java SE Downloads.
[Link]/technetwork/java/javase/downloads
[Ull18] C. Ullenboom: Java ist auch eine Insel – Einführung,
Ausbildung, Praxis. 14. Auflage, Rheinwerk Verlag GmbH,
2018. ISBN 978–3–8362–6721–2
12. Auflage (Java 8) unter
[Link]/javainsel, bzw.
[Link]/javabuch

A. Mäder 290
Gliederung
6 Logische Operationen 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
Boole’sche Algebra
Boole’sche Operationen
Bitweise logische Operationen
Schiebeoperationen
Anwendungsbeispiele
Literatur
7. Codierung
8. Schaltfunktionen

A. Mäder 291
Gliederung (cont.)
6 Logische Operationen 64-040 Rechnerstrukturen und Betriebssysteme

9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 292
Nutzen einer (abstrakten) Algebra?!
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

Analyse und Beschreibung von


I gemeinsamen, wichtigen Eigenschaften
I mathematischer Operationen
I mit vielfältigen Anwendungen

Spezifiziert durch
I die Art der Elemente (z.B. ganze Zahlen, Aussagen usw.)
I die Verknüpfungen (z.B. Addition, Multiplikation)
I zentrale Elemente (z.B. Null-, Eins-, inverse Elemente)

Anwendungen: Computerarithmetik → Datenverarbeitung


Fehlererkennung/-korrektur → Datenübertragung
Codierung → Repräsentation
...

A. Mäder 293
Boole’sche Algebra
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

I George Boole, 1850: Untersuchung von logischen Aussagen mit


den Werten true (wahr) und false (falsch)
I Definition einer Algebra mit diesen Werten
I drei grundlegende Funktionen:
I NEGATION (NOT) Schreibweisen: ¬a, a, ~a
I UND –"– a ∧ b, a & b
I ODER –"– a ∨ b, a | b
B XOR –"– a ⊕ b, a ˆ b

I Claude Shannon, 1937: Realisierung der Boole’schen Algebra


mit Schaltfunktionen (binäre digitale Logik)

A. Mäder 294
Grundverknüpfungen
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

I zwei Werte: wahr (true, 1) und falsch (false, 0)


I drei grundlegende Verknüpfungen:
NOT(x) AND(x; y ) OR(x; y ) XOR(x; y )
x x
y 0 1 x
y 0 1 x
y 0 1
0 1 0 0 0 0 0 1 0 0 1
1 0 1 0 1 1 1 1 1 1 0

I alle logischen Operationen lassen sich mit diesen Funktionen


darstellen
⇒ vollständige Basismenge

A. Mäder 295
Anzahl der binären Funktionen
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

I insgesamt 4 Funktionen mit einer Variable


f0 (x) = 0, f1 (x) = 1, f2 (x) = x, f3 (x) = ¬x

I insgesamt 16 Funktionen zweier Variablen (s. Beispiel)


allgemein Funktionen von n Variablen
n
I 22

I später noch viele Beispiele

A. Mäder 296
Anzahl der binären Funktionen (cont.)
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

x= 0 1 0 1
y= 0 0 1 1 Bezeichnung Notation alternativ Java / C
0 0 0 0 Nullfunktion 0 0
0 0 0 1 AND x ∩y x ∧y x&&y
0 0 1 0 Inhibition x <y x<y
0 0 1 1 Identität y y y
0 1 0 0 Inhibition x >y x>y
0 1 0 1 Identität x x x
0 1 1 0 XOR x ⊕y x 6= y x!=y
0 1 1 1 OR x ∪y x ∨y x||y
1 0 0 0 NOR ¬(x ∪ y ) x ∨y !(x||y)
1 0 0 1 Äquivalenz ¬(x ⊕ y ) x =y x==y
1 0 1 0 NICHT x ¬x x !x
1 0 1 1 Implikation x ≤y x →y x<=y
1 1 0 0 NICHT y ¬y y !y
1 1 0 1 Implikation x ≥y x ←y x>=y
1 1 1 0 NAND ¬(x ∩ y ) x ∧y !(x&&y)
1 1 1 1 Einsfunktion 1 1
A. Mäder 297
Boole’sche Algebra - formale Definition
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

I 6-Tupel h{0; 1}; ∨; ∧; ¬; 0; 1i bildet eine Algebra

I {0; 1} Menge mit zwei Elementen


I ∨ ist die „Addition“
I ∧ ist die „Multiplikation“
I ¬ ist das „Komplement“ (nicht das Inverse!)
I 0 (false) ist das Nullelement der Addition
I 1 (true) ist das Einselement der Multiplikation

A. Mäder 298
Rechenregeln: Ring / Algebra
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

Eigenschaft Ring der ganzen Zahlen Boole’sche Algebra


Kommutativgesetz a+b = b+a a∨b=b∨a
a · b=b · a a∧b=b∧a
Assoziativgesetz (a + b) + c = a + (b + c) (a ∨ b) ∨ c = a ∨ (b ∨ c)
(a · b) · c = a · (b · c) (a ∧ b) ∧ c = a ∧ (b ∧ c)
Distributivgesetz a · (b+c) = (a · b)+(a · c) a∧(b ∨c) = (a∧b)∨(a∧c)
Identitäten a+0 = a a∨0=a
a · 1=a a∧1=a
Vernichtung a · 0=0 a∧0=0
Auslöschung −(−a) = a ¬(¬a) = a
Inverses a + (−a) = 0 —
Distributivgesetz — a∨(b ∧c) = (a∨b)∧(a∨c)
Komplement — a ∨ ¬a = 1
— a ∧ ¬a = 0
Idempotenz — a∨a=a
— a∧a=a
Absorption — a ∨ (a ∧ b) = a
— a ∧ (a ∨ b) = a
De Morgan Regeln — ¬(a ∨ b) = ¬a ∧ ¬b
— ¬(a ∧ b) = ¬a ∨ ¬b
A. Mäder 299
De Morgan Regeln
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

¬(a ∨ b) = ¬a ∧ ¬b ¬(a ∧ b) = ¬a ∨ ¬b
a a
b b
a b a b

1. Ersetzen von UND durch ODER und umgekehrt


⇒ Austausch der Funktion
2. Invertieren aller Ein- und Ausgänge

Verwendung
I bei der Minimierung logischer Ausdrücke
I beim Entwurf von Schaltungen
I siehe Kapitel 8 Schaltfunktionen und 9 Schaltnetze

A. Mäder 300
XOR: Exklusiv-Oder / Antivalenz
6.1 Logische Operationen - Boole’sche Algebra 64-040 Rechnerstrukturen und Betriebssysteme

⇒ entweder a oder b (ausschließlich)


a ungleich b (⇒ Antivalenz)

I a ⊕ b = (¬a ∧ b) ∨ (a ∧ ¬b)
genau einer von den Termen a und b ist wahr

I a ⊕ b = (a ∨ b) ∧ ¬(a ∧ b)
entweder a ist wahr, oder b ist wahr, aber nicht beide
gleichzeitig

I a⊕a = 0

A. Mäder 301
Logische Operationen in Java und C
6.2 Logische Operationen - Boole’sche Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I Datentyp für Boole’sche Logik


I Java: Datentyp boolean
I C: implizit für alle Integertypen

I Vergleichsoperationen
I Logische Grundoperationen
I Bitweise logische Operationen
= parallele Berechnung auf Integer-Datentypen

I Auswertungsreihenfolge
I Operatorprioritäten
I Auswertung von links nach rechts
I (optionale) Klammerung

A. Mäder 302
Vergleichsoperationen
6.2 Logische Operationen - Boole’sche Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I a == b wahr, wenn a gleich b


a != b wahr, wenn a ungleich b
a >= b wahr, wenn a größer oder gleich b
a > b wahr, wenn a größer b
a < b wahr, wenn a kleiner b
a <= b wahr, wenn a kleiner oder gleich b

I Vergleich zweier Zahlen, Ergebnis ist logischer Wert


I Java: Integerwerte alle im Zweierkomplement
C: Auswertung berücksichtigt signed/unsigned-Typen

A. Mäder 303
Logische Operationen in C
6.2 Logische Operationen - Boole’sche Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I zusätzlich zu den Vergleichsoperatoren <, <=, ==, !=, >, >=


I drei logische Operatoren:
! logische Negation
&& logisches UND
|| logisches ODER

Interpretation der Integerwerte:


I
der Zahlenwert 0 ⇔ logische 0 (false)
alle anderen Werte ⇔ logische 1 (true)
⇒ völlig andere Semantik als in der Mathematik Achtung!
⇒ völlig andere Funktion als die bitweisen Operationen

A. Mäder 304
Logische Operationen in C (cont.)
6.2 Logische Operationen - Boole’sche Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I verkürzte Auswertung von links nach rechts (shortcut)


I Abbruch, wenn Ergebnis feststeht

+ kann zum Schutz von Ausdrücken benutzt werden


− kann aber auch Seiteneffekte haben, z.B. Funktionsaufrufe

I Beispiele
I (a > b) || ((b != c) && (b <= d))
I Ausdruck Wert
!0x41 0x00
!0x00 0x01
!!0x00 0x00
0x69 && 0x55 0x01
0x69 || 0x55 0x01

A. Mäder 305
Logische Operationen in C: Logisch vs. Bitweise
6.2 Logische Operationen - Boole’sche Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I der Zahlenwert 0 ⇔ logische 0 (false)


alle anderen Werte ⇔ logische 1 (true)

I Beispiel: x = 0x66 und y = 0x93


bitweise Operation logische Operation
Ausdruck Wert Ausdruck Wert
x 0110 0110 x 0000 0001
y 1001 0011 y 0000 0001
x & y 0000 0010 x && y 0000 0001
x | y 1111 0111 x || y 0000 0001
~x | ~y 1111 1101 !x || !y 0000 0000
x & ~y 0110 0100 x && !y 0000 0000

A. Mäder 306
Logische Operationen in C: verkürzte Auswertung
6.2 Logische Operationen - Boole’sche Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I logische Ausdrücke werden von links nach rechts ausgewertet


I Klammern werden natürlich berücksichtigt
I Abbruch, sobald der Wert eindeutig feststeht (shortcut)
I Vor- oder Nachteile möglich (codeabhängig)
+ (a && 5/a) niemals Division durch Null. Der Quotient wird
nur berechnet, wenn der linke Term ungleich Null ist.
+ (p && *p++) niemals Nullpointer-Zugriff. Der Pointer wird nur
verwendet, wenn p nicht Null ist.

Ternärer Operator
I hconditioni ? htrue-expressioni : hfalse-expressioni
I Beispiel: (x < 0) ? -x : x Absolutwert von x

A. Mäder 307
Logische Operationen in Java
6.2 Logische Operationen - Boole’sche Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I Java definiert eigenen Datentyp boolean


I elementare Werte false und true
I alternativ [Link] und [Link]
I keine Mischung mit Integer-Werten wie in C

I Vergleichsoperatoren <, <=, ==, !=, >, >=


I verkürzte Auswertung von links nach rechts (shortcut)

Ternärer Operator
I hconditioni ? htrue-expressioni : hfalse-expressioni
I Beispiel: (x < 0) ? -x : x Absolutwert von x

A. Mäder 308
Bitweise logische Operationen
6.3 Logische Operationen - Bitweise logische Operationen 64-040 Rechnerstrukturen und Betriebssysteme

Integer-Datentypen doppelt genutzt:


1. Zahlenwerte (Ganzzahl, Zweierkomplement, Gleitkomma)
arithmetische Operationen: Addition, Subtraktion usw.

2. Binärwerte mit w einzelnen Bits (Wortbreite w )


Boole’sche Verknüpfungen, bitweise auf allen w Bits
I Grundoperationen: Negation, UND, ODER, XOR
I Schiebe-Operationen: shift-left, rotate-right usw.

A. Mäder 309
Bitweise logische Operationen (cont.)
6.3 Logische Operationen - Bitweise logische Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I Integer-Datentypen interpretiert als Menge von Bits


⇒ bitweise logische Operationen möglich

I in Java und C sind vier Operationen definiert:


Negation ~x Invertieren aller einzelnen Bits
UND x&y Logisches UND aller einzelnen Bits
OR x|y –"– ODER –"–
XOR x^y –"– XOR –"–

I alle anderen Funktionen können damit dargestellt werden


es gibt insgesamt 22 Operationen mit n Operanden
n

A. Mäder 310
Bitweise logische Operationen: Beispiel
6.3 Logische Operationen - Bitweise logische Operationen 64-040 Rechnerstrukturen und Betriebssysteme

x = 0010 1110
y = 1011 0011

~x = 1101 0001 alle Bits invertiert


~y = 0100 1100 alle Bits invertiert

x & y = 0010 0010 bitweises UND


x | y = 1011 1111 bitweises ODER
x ^ y = 1001 1101 bitweises XOR

A. Mäder 311
Schiebeoperationen
6.4 Logische Operationen - Schiebeoperationen 64-040 Rechnerstrukturen und Betriebssysteme

I Ergänzung der bitweisen logischen Operationen


I für alle Integer-Datentypen verfügbar

I fünf Varianten
Shift-Left shl
Logical Shift-Right srl
Arithmetic Shift-Right sra
Rotate-Left rol
Rotate-Right ror

I Schiebeoperationen in Hardware leicht zu realisieren


I auf fast allen Prozessoren im Befehlssatz

A. Mäder 312
Shift-Left (shl)
6.4 Logische Operationen - Schiebeoperationen 64-040 Rechnerstrukturen und Betriebssysteme

I Verschieben der Binärdarstellung von x um n bits nach links


I links herausgeschobene n bits gehen verloren
I von rechts werden n Nullen eingefügt

0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1

0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 0

I in Java und C direkt als Operator verfügbar: x << n


I shl um n bits entspricht der Multiplikation mit 2n

A. Mäder 313
Logical Shift-Right (srl)
6.4 Logische Operationen - Schiebeoperationen 64-040 Rechnerstrukturen und Betriebssysteme

I Verschieben der Binärdarstellung von x um n bits nach rechts


I rechts herausgeschobene n bits gehen verloren
I von links werden n Nullen eingefügt

0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1

0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1

I in Java direkt als Operator verfügbar: x >>> n


in C nur für unsigned-Typen definiert: x >> n
für signed-Typen nicht vorhanden

A. Mäder 314
Arithmetic Shift-Right (sra)
6.4 Logische Operationen - Schiebeoperationen 64-040 Rechnerstrukturen und Betriebssysteme

I Verschieben der Binärdarstellung von x um n bits nach rechts


I rechts herausgeschobene n bits gehen verloren
I von links wird n-mal das MSB (Vorzeichenbit) eingefügt
I Vorzeichen bleibt dabei erhalten (gemäß Zweierkomplement)

1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1

1 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1

I in Java direkt als Operator verfügbar: x >> n


in C nur für signed-Typen definiert: x >> n
I sra um n bits ist ähnlich der Division durch 2n

A. Mäder 315
Arithmetic Shift-Right: Beispiel
6.4 Logische Operationen - Schiebeoperationen 64-040 Rechnerstrukturen und Betriebssysteme

I x >> 1 aus 0x10D3 (4 307) wird 0x0869 (2 153)


0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1

0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1

I x >> 3 aus 0x90D3 (-28 460) wird 0xF21A (-3 558)


1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1

1 1 1 1 0 0 1 0 0 0 0 1 1 0 1 0

A. Mäder 316
Arithmetic Shift-Right: Division durch Zweierpotenzen?
6.4 Logische Operationen - Schiebeoperationen 64-040 Rechnerstrukturen und Betriebssysteme

I positive Werte: x >> n entspricht Division durch 2n


I negative Werte: x >> n ähnlich Division durch 2n
aber Ergebnis ist zu klein!

I gerundet in Richtung negativer Werte statt in Richtung Null:


1111 1011 (-5)
1111 1101 (-3)
1111 1110 (-2)
1111 1111 (-1)

I in C: Kompensation durch Berechnung von (x + (1<<k)-1) >> k


Details: Bryant, O’Hallaron [BO15]

A. Mäder 317
Rotate-Left (rol)
6.4 Logische Operationen - Schiebeoperationen 64-040 Rechnerstrukturen und Betriebssysteme

I Rotation der Binärdarstellung von x um n bits nach links


I herausgeschobene Bits werden von rechts wieder eingefügt

0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1

0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 0

I in Java und C nicht als Operator verfügbar


I Java: [Link]( int x, int distance )

A. Mäder 318
Rotate Right (ror)
6.4 Logische Operationen - Schiebeoperationen 64-040 Rechnerstrukturen und Betriebssysteme

I Rotation der Binärdarstellung von x um n bits nach rechts


I herausgeschobene Bits werden von links wieder eingefügt

0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1

1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1

I in Java und C nicht als Operator verfügbar


I Java: [Link]( int x, int distance )

A. Mäder 319
Shifts statt Integer-Multiplikation
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

I Integer-Multiplikation ist auf vielen Prozessoren langsam


oder evtl. gar nicht als Befehl verfügbar

I Add./Subtraktion und logische Operationen: typisch 1 Takt


Shift-Operationen: meistens 1 Takt

⇒ eventuell günstig, Multiplikation mit Konstanten durch


entsprechende Kombination aus shifts+add zu ersetzen
I Beispiel: 9 · x = (8 + 1) · x ersetzt durch (x << 3) + x
I viele Compiler erkennen solche Situationen

A. Mäder 320
Beispiel: bit-set, bit-clear
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

Bits an Position p in einem Integer setzen oder löschen?


I Maske erstellen, die genau eine 1 gesetzt hat
I dies leistet (1 << p), mit 0 ≤ p ≤ w bei Wortbreite w

public int bit_set ( int x, int pos ) {


return x | (1 << pos ); // mask = 0...010...0
}

public int bit_clear ( int x, int pos ) {


return x & ~(1 << pos ); // mask = 1...101...1
}

A. Mäder 321
Beispiel: Byte-Swapping network to/from host
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

Linux: /usr/include/bits/byteswap.h (distributionsabhängig)


...
/* Swap bytes in 32 bit value. */
# define __bswap_32 (x) \
((((x) & 0 xff000000 ) >> 24) | (((x) & 0 x00ff0000 ) >> 8) |\
(((x) & 0 x0000ff00 ) << 8) | (((x) & 0 x000000ff ) << 24))
...

Linux: /usr/include/netinet/in.h
...
# if __BYTE_ORDER == __LITTLE_ENDIAN
# define ntohl(x) __bswap_32 (x)
# define ntohs(x) __bswap_16 (x)
# define htonl(x) __bswap_32 (x)
# define htons(x) __bswap_16 (x)
# endif
...

A. Mäder 322
Beispiel: RGB-Format für Farbbilder
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

Farbdarstellung am Monitor / Bildverarbeitung?


I Matrix aus w × h Bildpunkten
I additive Farbmischung aus Rot, Grün, Blau
I pro Farbkanal typischerweise 8-bit, Wertebereich 0 . . . 255
I Abstufungen ausreichend für (untrainiertes) Auge

I je ein 32-bit Integer pro Bildpunkt


I typisch: 0x00RRGGBB oder 0xAARRGGBB
I je 8-bit für Alpha/Transparenz, rot, grün, blau

I [Link](TYPE_INT_ARGB)

A. Mäder 323
Beispiel: RGB-Rotfilter
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

public BufferedImage redFilter ( BufferedImage src ) {


int w = src. getWidth ();
int h = src. getHeight ();
int type = BufferedImage . TYPE_INT_ARGB ;
BufferedImage dest = new BufferedImage ( w, h, type );

for( int y=0; y < h; y++ ) { // alle Zeilen


for( int x=0; x < w; x++ ) { // von links nach rechts
int rgb = src. getRGB ( x, y ); // Pixelwert bei (x,y)
// rgb = 0 xAARRGGBB
int red = (rgb & 0 x00FF0000 ); // Rotanteil maskiert
dest. setRGB ( x, y, red );
}
}
return dest;
}

A. Mäder 324
Beispiel: RGB-Graufilter
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

public BufferedImage grayFilter ( BufferedImage src ) {


...
for( int y=0; y < h; y++ ) { // alle Zeilen
for( int x=0; x < w; x++ ) { // von links nach rechts
int rgb = src. getRGB ( x, y ); // Pixelwert
int red = (rgb & 0 x00FF0000 ) >>>16; // Rotanteil
int green = (rgb & 0 x0000FF00 ) >>> 8; // Grü nanteil
int blue = (rgb & 0 x000000FF ); // Blauanteil

int gray = (red + green + blue) / 3; // Mittelung

dest. setRGB ( x, y, (gray < <16)|( gray < <8)| gray );


}
}
...
}

A. Mäder 325
Beispiel: Bitcount – while-Schleife
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

Anzahl der gesetzten Bits in einem Wort?


I Anwendung z.B. für Kryptalgorithmen (Hamming-Abstand)
I Anwendung für Medienverarbeitung
public static int bitcount ( int x ) {
int count = 0;

while( x != 0 ) {
count += (x & 0 x00000001 ); // unterstes bit addieren
x = x >>> 1; // 1-bit rechts - schieben
}

return count;
}

A. Mäder 326
Beispiel: Bitcount – parallel, tree
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

I Algorithmus mit Schleife ist einfach aber langsam


I schnelle parallele Berechnung ist möglich
int BitCount ( unsigned int u)
{ unsigned int uCount ;
uCount = u - ((u >> 1) & 033333333333)
- ((u >> 2) & 011111111111);
return (( uCount + ( uCount >> 3)) & 030707070707) % 63;
}

I [Link]()
public static int bitCount (int i) {
// HD , Figure 5-2
i = i - ((i >>> 1) & 0 x55555555 );
i = (i & 0 x33333333 ) + ((i >>> 2) & 0 x33333333 );
i = (i + (i >>> 4)) & 0 x0f0f0f0f ;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
A. Mäder 327
Beispiel: Bitcount – parallel, tree (cont.)
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

I viele Algorithmen: bit-Maskierung und Schieben


I [Link]
I [Link]
I [Link]
I D. E. Knuth: The Art of Computer Programming: Volume 4A,
Combinational Algorithms: Part1, Abschnitt 7.1.3 [Knu09]
I viele neuere Prozessoren/DSPs: eigener bitcount-Befehl

A. Mäder 328
Tipps & Tricks: Rightmost bits
D. E. Knuth: The Art of Computer Programming, Vol 4.1 [Knu09]
6.5 Logische Operationen - Anwendungsbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

Grundidee: am weitesten rechts stehenden 1-Bits / 1-Bit Folgen


erzeugen Überträge in arithmetischen Operationen
I Integer x, mit x = (¸ 0 [1]a 1 [0]b )2
beliebiger Bitstring ¸, eine Null, dann a + 1 Einsen und
b Nullen, mit a ≥ 0 und b ≥ 0.
I Ausnahmen: x = −2b und x = 0
⇒ x = (¸ 0 [1]a 1 [0]b )2
x = (¸ 1 [0]a 0 [1]b )2
x −1 = (¸ 0 [1]a 0 [1]b )2
−x = (¸ 1 [0]a 1 [0]b )2
⇒ x + 1 = −x = x − 1

A. Mäder 329
Literatur
6.6 Logische Operationen - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BO15] R.E. Bryant, D.R. O’Hallaron:


Computer systems – A programmers perspective.
3rd global ed., Pearson Education Ltd., 2015.
ISBN 978–1–292–10176–7. [Link]
[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –
Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5

A. Mäder 330
Literatur (cont.)
6.6 Logische Operationen - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Knu09] D.E. Knuth: The Art of Computer Programming,


Volume 4, Fascicle 1, Bitwise Tricks & Techniques;
Binary Decision Diagrams.
Addison-Wesley Professional, 2009. ISBN 978–0–321–58050–4
[Hei05] K. von der Heide: Vorlesung: Technische Informatik 1 —
interaktives Skript. Universität Hamburg, FB Informatik, 2005.
[Link]/lectures/2004ws/
vorlesung/t1

A. Mäder 331
Gliederung
7 Codierung 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
Grundbegriffe
Ad-Hoc Codierungen
Einschrittige Codes
Quellencodierung
Symbolhäufigkeiten
Informationstheorie
Entropie

A. Mäder 332
Gliederung (cont.)
7 Codierung 64-040 Rechnerstrukturen und Betriebssysteme

Kanalcodierung
Fehlererkennende Codes
Zyklische Codes
Praxisbeispiele
Literatur
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 333
Definition: Codierung
7.1 Codierung - Grundbegriffe 64-040 Rechnerstrukturen und Betriebssysteme

Unter Codierung versteht man das Umsetzen einer vorliegenden


Repräsentation A in eine andere Repräsentation B

I häufig liegen beide Repräsentationen A und B in derselben


Abstraktionsebene

I die Interpretation von B nach A muss eindeutig sein


I eine Umcodierung liegt vor, wenn die Interpretation
umkehrbar eindeutig ist

A. Mäder 334
Code, Codewörter
7.1 Codierung - Grundbegriffe 64-040 Rechnerstrukturen und Betriebssysteme

I Codewörter: die Wörter der Repräsentation B aus einem


Zeichenvorrat Z
I Code: die Menge aller Codewörter
I Blockcode: alle Codewörter haben dieselbe Länge

I Binärzeichen: der Zeichenvorrat z enthält genau zwei Zeichen


I Binärwörter: Codewörter aus Binärzeichen
I Binärcode: alle Codewörter sind Binärwörter

A. Mäder 335
Gründe für den Einsatz von Codes
7.1 Codierung - Grundbegriffe 64-040 Rechnerstrukturen und Betriebssysteme

I effiziente Darstellung und Verarbeitung von Information


I Datenkompression, -reduktion
I Sicherheitsaspekte

I Übertragung von Information


I Verkleinerung der zu übertragenden Datenmenge
I Anpassung an die Technik des Übertragungskanals
I Fehlererkennende und -korrigierende Codes

I Sicherheit von Information


I Geheimhaltung, z.B. Chiffrierung in der Kryptologie
I Identifikation, Authentifikation

A. Mäder 336
Wichtige Aspekte
7.1 Codierung - Grundbegriffe 64-040 Rechnerstrukturen und Betriebssysteme

Unterteilung gemäß der Aufgabenstellung


I Quellencodierung: Anpassung an Sender/Quelle
I Kanalcodierung: Anpassung an Übertragungsstrecke
I Verarbeitungscodierung: im Rechner

I sehr unterschiedliche Randbedingungen und Kriterien für diese


Teilbereiche: zum Beispiel sind fehlerkorrigierende Codes bei
der Nachrichtenübertragung essenziell, im Rechner wegen der
hohen Zuverlässigkeit weniger wichtig

A. Mäder 337
Darstellung von Codes
7.1 Codierung - Grundbegriffe 64-040 Rechnerstrukturen und Betriebssysteme

I Wertetabellen
I jede Zeile enthält das Urbild (zu codierende Symbol) und das
zugehörige Codewort
I sortiert, um das Auffinden eines Codeworts zu erleichtern
I technische Realisierung durch Ablegen der Wertetabelle im
Speicher, Zugriff über Adressierung anhand des Urbilds
I Codebäume
I Anordnung der Symbole als Baum
I die zu codierenden Symbole als Blätter
I die Zeichen an den Kanten auf dem Weg von der Wurzel zum
Blatt bilden das Codewort
I Logische Gleichungen
I Algebraische Ausdrücke

A. Mäder 338
Codierung von Text
7.2 Codierung - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

I siehe letzte Woche


I Text selbst als Reihenfolge von Zeichen
I ASCII, ISO-8859 und Varianten, Unicode, UTF-8

Für geschriebenen (formatierten) Text:


I Trennung des reinen Textes von seiner Formatierung
I Formatierung: Schriftart, Größe, Farbe usw.
I diverse applikationsspezifische Binärformate
I Markup-Sprachen (SGML, HTML)

A. Mäder 339
Codierungen für Dezimalziffern
7.2 Codierung - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

BCD Gray Exzess-3 Aiken biquinär 1-aus-10 2-aus-5


0 0000 0000 0011 0000 000001 0000000001 11000
1 0001 0001 0100 0001 000010 0000000010 00011
2 0010 0011 0101 0010 000100 0000000100 00101
3 0011 0010 0110 0011 001000 0000001000 00110
4 0100 0110 0111 0100 010000 0000010000 01001
5 0101 0111 1000 1011 100001 0000100000 01010
6 0110 0101 1001 1100 100010 0001000000 01100
7 0111 0100 1010 1101 100100 0010000000 10001
8 1000 1100 1011 1110 101000 0100000000 10010
9 1001 1101 1100 1111 110000 1000000000 10100

I alle Codes der Tabelle sind Binärcodes


I alle Codes der Tabelle sind Blockcodes
I jede Spalte der Tabelle listet alle Codewörter eines Codes

A. Mäder 340
Codierungen für Dezimalziffern (cont.)
7.2 Codierung - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

I jede Wandlung von einem Code der Tabelle in einen anderen


Code ist eine Umcodierung
I aus den Codewörtern geht nicht hervor, welcher Code vorliegt

I Dezimaldarstellung in Rechnern unüblich, die obigen Codes


werden also kaum noch verwendet

A. Mäder 341
Begriffe für Binärcodes
7.2 Codierung - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

I Minimalcode: alle N = 2n Codewörter bei Wortlänge n


werden benutzt
I Redundanter Code: nicht alle möglichen Codewörter werden
benutzt
I Gewicht: Anzahl der Einsen in einem Codewort
I komplementär: zu jedem Codewort c existiert ein gülti-
ges Codewort c
I einschrittig: aufeinanderfolgende Codewörter unter-
scheiden sich nur an einer Stelle
I zyklisch (einschr.): bei n geordneten Codewörtern ist c0 = cn

A. Mäder 342
Dualcode
7.2 Codierung - Ad-Hoc Codierungen 64-040 Rechnerstrukturen und Betriebssysteme

I der Name für Codierung der Integerzahlen im Stellenwertsystem


I Codewort
n−1
X
c= ai · 2i ; ai ∈ {0; 1}
i=0

I alle Codewörter werden genutzt: Minimalcode


I zu jedem Codewort existiert ein komplementäres Codewort
I bei fester Wortbreite ist c0 gleich cn ⇒ zyklisch
I nicht einschrittig

A. Mäder 343
Einschrittige Codes
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

I möglich für Mengen mit Ordnungsrelation


I Elemente der Menge werden durch Binärwörter codiert
I einschrittiger Code: die Codewörter für benachbarte
Elemente der Menge unterscheiden sich in genau einer Stelle
I zyklisch einschrittig: das erste und letzte Wort des Codes
unterscheiden sich ebenfalls genau in einer Stelle

I Einschrittige Codes werden benutzt, wenn ein Ablesen der Bits


auch beim Wechsel zwischen zwei Codeworten möglich ist
(bzw. nicht verhindert werden kann)
z.B.: Winkelcodierscheiben oder digitale Schieblehre
I viele interessante Varianten möglich (s. Knuth: AoCP [Knu11])

A. Mäder 344
Einschrittige Codes: Matlab-Demo
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Ablesen eines Wertes mit leicht gegeneinander verschobenen


Übergängen der Bits [Hei05], Kapitel 1.4
I demoeinschritt(0:59) normaler Dualcode
I demoeinschritt(einschritt(60)) einschrittiger Code

I maximaler Ablesefehler
I 2n−1 beim Dualcode
I 1 beim einschrittigen Code

I Konstruktion eines einschrittigen Codes


I rekursiv
I als ununterbrochenen Pfad im KV-Diagramm (s.u.)

A. Mäder 345
Ablesen des Wertes aus Dualcode
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 346
Ablesen des Wertes aus einschrittigem Code
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 347
Gray-Code: Prinzip eines Winkeldrehgebers
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 348
Gray-Code: mehrstufiger Drehgeber
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 349
Gray-Code: 5-bit Codierscheibe
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

[Link]/technik/mechatronik/[Link]

A. Mäder 350
Gray-Code: 10-bit Codierscheibe
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 351
Einschrittiger Code: rekursive Konstruktion
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Starte mit zwei Codewörtern: 0 und 1

I Gegeben: Einschrittiger Code C mit n Codewörtern


I Rekursion: Erzeuge Code C2 mit (bis zu) 2n Codewörtern
1. hänge eine führende 0 vor alle vorhandenen n Codewörter
2. hänge eine führende 1 vor die in umgekehrter Reihenfolge
notierten Codewörter

{ 0, 1 }
{ 00, 01, 11, 10 }
{ 000, 001, 011, 010, 110, 111, 101, 100 }
...

⇒ Gray-Code
A. Mäder 352
Karnaugh-Veitch Diagramm
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 x1 x0
x3 x2 00 01 11 10 x3 x2 00 01 11 10
00 0 1 3 2 00 0000 0001 0011 0010

01 4 5 7 6 01 0100 0101 0111 0110

11 12 13 15 14 11 1100 1101 1111 1110

10 8 9 11 10 10 1000 1001 1011 1010

I 2D-Diagramm mit 2n = 2ny × 2nx Feldern


I gängige Größen sind: 2×2, 2×4, 4×4
darüber hinaus: mehrere Diagramme der Größe 4×4
I Anordnung der Indizes ist im einschrittigen-Code / Gray-Code
⇒ benachbarte Felder unterscheiden sich gerade um 1 Bit

A. Mäder 353
Einschrittiger Code: KV-Diagramm
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 x1 x0
x3 x2 00 01 11 10 x3 x2 00 01 11 10
00 0 1 3 2 00 0 1 3 2

01 4 5 7 6 01 4 5 7 6

11 12 13 15 14 11 12 13 15 14

10 8 9 11 10 10 8 9 11 10

I Pfade
0,1,3,2,6,7,5,13,15,14,10,11,9,8,12,4 1,3,7,6,14,15,11,9,13,12,4,5
I jeder Pfad entspricht einem einschrittigen Code
I geschlossener Pfad: zyklisch einschrittiger Code

A. Mäder 354
Einschrittiger Code: KV-Diagramm (cont.)
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 x1 x0
x3 x2 00 01 11 10 x3 x2 00 01 11 10
00 0 1 3 2 00 0 1 3 2

01 4 5 7 6 01 4 5 7 6

11 12 13 15 14 11 12 13 15 14

10 8 9 11 10 10 8 9 11 10

I Pfade
4,5,13,15,7,6,14,10,8,12 2,6,14,10
linke und rechte Spalte unterscheiden sich um 1 Bit
I
obere und untere Zeile unterscheiden sich um 1 Bit
⇒ KV-Diagramm als „außen zusammengeklebt“ denken
⇒ Pfade können auch „außen herum“ geführt werden
A. Mäder 355
Gray-Code: Umwandlung in/von Dualcode
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

Umwandlung: Dual- in Graywort


1. MSB des Dualworts wird MSB des Grayworts
2. von links nach rechts: bei jedem Koeffizientenwechsel im
Dualwort wird das entsprechende Bit im Graywort 1, sonst 0
I Beispiele 0011 → 0010, 1110 → 1001, 0110 → 0101 usw.

I gray(x) = x ^ (x >>> 1)

I in Hardware einfach durch paarweise XOR-Operationen


[HenHA] Hades Demo: 10-gates/15-graycode/dual2gray

A. Mäder 356
Gray-Code: Umwandlung in/von Dualcode (cont.)
7.3 Codierung - Einschrittige Codes 64-040 Rechnerstrukturen und Betriebssysteme

Umwandlung: Gray- in Dualwort


1. MSB wird übernommen
2. von links nach rechts: wenn das Graywort eine Eins aufweist,
wird das vorhergehende Bit des Dualworts invertiert in die
entsprechende Stelle geschrieben, sonst wird das Zeichen der
vorhergehenden Stelle direkt übernommen
I Beispiele 0010 → 0011, 1001 → 1110, 0101 → 0110 usw.

I in Hardware einfach durch Kette von XOR-Operationen

A. Mäder 357
Optimalcodes: Codes variabler Länge
7.4 Codierung - Quellencodierung 64-040 Rechnerstrukturen und Betriebssysteme

I Einsatz zur Quellencodierung


I Minimierung der Datenmenge durch Anpassung an die
Symbolhäufigkeiten
I häufige Symbole bekommen kurze Codewörter,
seltene Symbole längere Codewörter

I anders als bei Blockcodes ist die Trennung zwischen


Codewörtern nicht durch Abzählen möglich
⇒ Einhalten der Fano-Bedingung notwendig
oder Einführen von Markern zwischen den Codewörtern

A. Mäder 358
Fano-Bedingung
7.4 Codierung - Quellencodierung 64-040 Rechnerstrukturen und Betriebssysteme

Eindeutige Decodierung eines Codes mit variabler Wortlänge?


Fano-Bedingung
Kein Wort aus einem Code bildet den Anfang eines anderen
Codeworts

I die sogenannte Präfix-Eigenschaft


I nach R. M. Fano (1961)

I ein Präfix-Code ist eindeutig decodierbar


I Blockcodes sind Präfix-Codes

A. Mäder 359
Fano-Bedingung: Beispiele
7.4 Codierung - Quellencodierung 64-040 Rechnerstrukturen und Betriebssysteme

I Telefonnummern: das Vorwahlsystem gewährleistet die


Fano-Bedingung

110, 112 : Notrufnummern


42883 2502 : Ortsnetz (keine führende Null)
040 42883 2502 : nationales Netz
0049 40 42883 2502 : internationale Rufnummer

I Morse-Code: Fano-Bedingung verletzt

A. Mäder 360
Morse-Code
7.4 Codierung - Quellencodierung 64-040 Rechnerstrukturen und Betriebssysteme

Codetabelle • kurzer Ton −langer Ton


A •− S ••• . •−•−•− S-Start − • − • −
B −• • • T − , −− • • −− Verst. • • •−•
C −•−• U • •− ? • • −− • • S-Ende • − • − •
D −• • V • • •− ´ • −−−− • V-Ende • • • − • −
E • W • −− ! − • − • −− Error ••••••••
F • •−• X −• •− / −• •−•
G −− • Y − • −− ( − • −− • Ä •−•−
H •••• Z −− • • ) − • −− • − À • −− • −
I •• 0 −−−−− & •−• • • É • •−• •
J • −−− 1 • −−−− : −−− • • • È •−• •−
K −•− 2 • • −−− ; −•−•−• Ö −−− •
L •−• • 3 • • • −− = −• • •− Ü • • −−
M −− 4 • • • •− + •−•−• ß • • • −− • •
N −• 5 ••••• - −• • • •− CH −−−−
O −−− 6 −• • • • _ • • −− • − Ñ −− • −−
P • −− • 7 −− • • • " •−• •−• ...
Q −− • − 8 −−− • • $ • • •−• •−
R •−• 9 −−−− • @ • −− • − • SOS • • • −−− • • •

A. Mäder 361
Morse-Code (cont.)
7.4 Codierung - Quellencodierung 64-040 Rechnerstrukturen und Betriebssysteme

I Eindeutigkeit Codewort: • • • • •−•


E •
I ••
N −•
R •−•
S •••
I bestimmte Morse-Sequenzen sind mehrdeutig
I Pause zwischen den Symbolen notwendig

I Codierung
I Häufigkeit der Buchstaben = 1 / Länge des Codewortes
I Effizienz: kürzere Codeworte
I Darstellung als Codebaum

A. Mäder 362
Morse-Code: Codebaum (Ausschnitt)
7.4 Codierung - Quellencodierung 64-040 Rechnerstrukturen und Betriebssysteme

I Symbole als Knoten oder Blätter


I Knoten: Fano-Bedingung verletzt
I Codewort am Pfad von Wurzel zum Knoten/Blatt ablesen

A. Mäder 363
Morse-Code: Umschlüsselung
7.4 Codierung - Quellencodierung 64-040 Rechnerstrukturen und Betriebssysteme

Umschlüsselung des Codes für binäre Nachrichtenübertragung


I 110 als Umschlüsselung des langen Tons −
10 als Umschlüsselung des kurzen Tons •
0 als Trennzeichen zwischen Morse-Codewörtern

I der neue Code erfüllt die Fano-Bedingung


jetzt eindeutig decodierbar: 101010011011011001010100 (SOS)

I viele andere Umschlüsselungen möglich, z.B.:


1 als Umschlüsselung des langen Tons −
01 als Umschlüsselung des kurzen Tons •
00 als Trennzeichen zwischen Morse-Codewörtern

A. Mäder 364
Codierung nach Fano (Shannon-Fano Codierung)
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Gegeben: die zu codierenden Urwörter ai


und die zugehörigen Wahrscheinlichkeiten p(ai )
I Ordnung der Urwörter anhand ihrer Wahrscheinlichkeiten
p(a1 ) ≥ p(a2 ) ≥ : : : ≥ p(an )
I Einteilung der geordneten Urwörter in zwei Gruppen mit
möglichst gleicher Gesamtwahrscheinlichkeit: a1 : : : ai und
ai+1 : : : an . Eine Gruppe bekommt als erste Codewortstelle
eine 0, die andere eine 1
I Diese Teilgruppen werden erneut geteilt und den Hälften wieder
eine 0, bzw. eine 1, als nächste Codewortstelle zugeordnet
I Das Verfahren wird wiederholt, bis jede Teilgruppe nur noch
ein Element enthält
I bessere Codierung, je größer die Anzahl der Urwörter
I nicht eindeutig

A. Mäder 365
Codierung nach Fano: Beispiel
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Urbildmenge {A; B; C; D} und zugehörige


Wahrscheinlichkeiten {0:45; 0:1; 0:15; 0:3}
0. Sortierung nach Wahrscheinlichkeiten ergibt {A; D; C; B}
1. Gruppenaufteilung ergibt {A} und {D; C; B}
Codierung von A mit 0 und den anderen Symbolen als 1∗
2. weitere Teilung ergibt {D} und {C; B}
3. letzte Teilung ergibt {C} und {B}
⇒ Codewörter sind A = 0, D = 10, C = 110 und B = 111

mittlere Codewortlänge L
I L= 0:45 · 1 + 0:3 · 2 + 0:15 · 3 + 0:1 · 3 = 1:8
I zum Vergleich: Blockcode mit 2 Bits benötigt L= 2

A. Mäder 366
Codierung nach Fano: Deutsche Großbuchstaben
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Buchstabe ai Wahrscheinlichkeit p(ai ) Code (Fano) Bits


Leerzeichen 0.15149 000 3
E 0.14700 001 3
N 0.08835 010 3
R 0.06858 0110 4
I 0.06377 0111 4
S 0.05388 1000 4
... ... ... ...
Ö 0.00255 111111110 9
J 0.00165 1111111110 10
Y 0.00017 11111111110 11
Q 0.00015 111111111110 12
X 0.00013 111111111111 12
Ameling: Fano-Code der Buchstaben der deutschen Sprache, 1992

A. Mäder 367
Codierung nach Huffman
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Gegeben: die zu codierenden Urwörter ai


und die zugehörigen Wahrscheinlichkeiten p(ai )
I Ordnung der Urwörter anhand ihrer Wahrscheinlichkeiten
p(a1 ) ≤ p(a2 ) ≤ : : : ≤ p(an )
I in jedem Schritt werden die zwei Wörter mit der geringsten
Wahrscheinlichkeit zusammengefasst und durch ein neues ersetzt
I das Verfahren wird wiederholt, bis eine Menge mit nur noch
zwei Wörtern resultiert
I rekursive Codierung als Baum (z.B.: links 0, rechts 1)
I ergibt die kleinstmöglichen mittleren Codewortlängen
I Abweichungen zum Verfahren nach Fano sind aber gering
I vielfältiger Einsatz (u.a. bei JPEG, MPEG . . . )

A. Mäder 368
Codierung nach Huffman: Beispiel
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Urbildmenge {A; B; C; D} und zugehörige


Wahrscheinlichkeiten {0:45; 0:1; 0:15; 0:3}
0. Sortierung nach Wahrscheinlichkeiten ergibt {B; C; D; A}
1. Zusammenfassen von B und C als neues Wort E,
Wahrscheinlichkeit von E ist dann p(E) = 0:1 + 0:15 = 0:25
2. Zusammenfassen von E und D als neues Wort F mit
p(F ) = 0:55
3. Zuordnung der Bits entsprechend der Wahrscheinlichkeiten
I F = 0 und A = 1
I Split von F in D = 00 und E = 01
I Split von E in C = 010 und B = 011
⇒ Codewörter sind A = 1, D = 00, C = 010 und B = 011

A. Mäder 369
Bildung eines Huffman-Baums
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

I Alphabet = {E; I; N; S; D; L; R}
I relative Häufigkeiten
E = 18; I = 10; N = 6; S = 7; D = 2; L = 5; R = 4

I Sortieren anhand der Häufigkeiten


I Gruppierung (rekursiv)
I Aufbau des Codebaums
I Ablesen der Codebits

A. Mäder 370
Bildung eines Huffman-Baums (cont.)
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

D R L N S I E
2 4 5 6 7 10 18

6 21

D R L N S I E I 11 13 E
2 4 5 6 7 10 18 10 18

11 31

L N 6 S I E 13 E 21
5 6 7 10 18 18

13 52

6 S I 11 E 21 31
7 10 18

A. Mäder 371
Bildung eines Huffman-Baums (cont.)
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

52
0 1

21 31
1 0 1
0

I 11 13
E I 00
10
0 1 0 1 18
L 010
L N 6 N 011
S
5 6 0 1 D 1000
7
R 1001
S 101
D R
E 11
2 4

1001 00 11 101 11
R I E S E
A. Mäder 372
Codierung nach Huffman: Deutsche Großbuchstaben
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Zeichen Code Zeichen Code


Leerzeichen 001 O 000110
E 010 B 100010
N 111 Z 100011
R 0110 W 100110
I 0111 F 100111
S 1010 K 0001011
T 1100 V 0001111
D 1101 Ü 00010100
H 00000 P 00010101
A 00001 Ä 00011100
U 10000 Ö 000111010
L 10010 J 0001110110
C 10110 Y 00011101111
G 10111 Q 000111011100
M 000100 X 000111011101
A. Mäder 373
Codierung nach Huffman: Codebaum
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

0 1

E N

R I S T D
H A U L C G
M O B Z W F
K V

Ü P Ä

Ö
J

Y
ca. 4.5 Bits/Zeichen,
Q X 1.7-Mal besser als ASCII

A. Mäder 374
Codierung nach Huffman: Minimale Codelänge
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Beweis der Minimalität


I Sei C ein Huffman-Code mit durchschnittlicher Codelänge L
I Sei D ein weiterer Präfix-Code mit durchschnittlicher
Codelänge M, mit M < L und M minimal
I Berechne die C und D zugeordneten Decodierbäume A und B
I Betrachte die beiden Endknoten für Symbole kleinster
Wahrscheinlichkeit:
I Weise dem Vorgängerknoten das Gewicht ps−1 + ps zu
I streiche die Endknoten
I mittlere Codelänge reduziert sich um ps−1 + ps

I Fortsetzung führt dazu, dass Baum C sich auf Baum mit


durchschnittlicher Länge 1 reduziert und D auf Länge < 1.
Dies ist aber nicht möglich

A. Mäder 375
Codierung nach Huffman: Symbole mit p ≥ 0:5
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Was passiert, wenn ein Symbol eine Häufigkeit p0 ≥ 0:5 aufweist?


I die Huffman-Codierung müsste weniger als ein Bit zuordnen,
dies ist jedoch nicht möglich
⇒ Huffman- (und Fano-) Codierung ist in diesem Fall ineffizient

I Beispiel: Bild mit einheitlicher Hintergrundfarbe codieren


I andere Ideen notwendig
I Lauflängencodierung (Fax, GIF, PNG)
I Cosinustransformation (JPEG) usw.

A. Mäder 376
Dynamic Huffman Coding
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

was tun, wenn


I die Symbolhäufigkeiten nicht vorab bekannt sind?
I die Symbolhäufigkeiten sich ändern können?

Dynamic Huffman Coding (Knuth 1985)


I Encoder protokolliert die (bisherigen) Symbolhäufigkeiten
I Codebaum wird dynamisch aufgebaut und ggf. umgebaut

I Decoder arbeitet entsprechend:


Codebaum wird mit jedem decodierten Zeichen angepasst
I Symbolhäufigkeiten werden nicht explizit übertragen
D. E. Knuth: Dynamic Huffman Coding, 1985 [Knu85]

A. Mäder 377
Kraft-Ungleichung
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

I Leon G. Kraft, 1949


[Link]

I Eine notwendige und hinreichende Bedingung für die Existenz


eines eindeutig decodierbaren s-elementigen Codes C mit
Codelängen l1 ≤ l2 ≤ l3 ≤ : : : ≤ ls über einem q-nären
Zeichenvorrat F ist:
s
X 1
≤1
q li
i=1
I Beispiel
{1; 00; 01; 11} ist nicht eindeutig decodierbar,
denn 21 + 3 · 14 = 1:25 > 1

A. Mäder 378
Kraft-Ungleichung: Beispiel
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

I Sei F = {0; 1; 2} (ternäres Alphabet)


I Seien die geforderten Längen der Codewörter: 1,2,2,2,2,2,3,3,3

I Einsetzen in die Ungleichung: 1


3 + 5 · 312 + 3 · 313 = 1
⇒ Also existiert ein passender Präfixcode.

I Konstruktion entsprechend des Beweises


0 10 11 12 20 21 220 221 222

A. Mäder 379
Kraft-Ungleichung: Beweisidee
7.5 Codierung - Symbolhäufigkeiten 64-040 Rechnerstrukturen und Betriebssysteme

Sei ls = m und seien ui die Zahl der Codewörter der Länge i


I Wir schreiben
s m m
X 1 X uj 1 X
= = uj · q m−j ≤ 1
q li qj qm
i=1 j=1 j=1

m−1
X
um + uj · q m−j ≤ q m (∗)
j=1

Jedes Codewort der Länge i


I Tiefe des Baums

„verbraucht“ q m−i Wörter aus F m m i

I Summe auf der linken Seite von (∗) q ...

ist die Zahl der durch den Code C


benutzten Wörter von F m
⇒ erfüllt C die Präfix-Bedingung,
dann gilt (∗) max. qm Knoten
A. Mäder 380
Informationsbegriff
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

I n mögliche sich gegenseitig ausschließende Ereignisse Ai


die zufällig nacheinander mit Wahrscheinlichkeiten pi eintreten
I stochastisches Modell W {Ai } = pi

I angewendet auf Informationsübertragung:


das Symbol ai wird mit Wahrscheinlichkeit pi empfangen

I Beispiel
I pi = 1 und pj = 0 ∀j 6= i
I dann wird mit Sicherheit das Symbol Ai empfangen
I der Empfang bringt keinen Informationsgewinn

⇒ Informationsgewinn („Überraschung“) wird größer, je kleiner pi

A. Mäder 381
Geeignetes Maß für die Information?
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

I Wir erhalten die Nachricht A mit der Wahrscheinlichkeit pA


und anschließend die unabhängige Nachricht B mit der
Wahrscheinlichkeit pB
I Wegen der Unabhängigkeit ist die Wahrscheinlichkeit beider
Ereignisse gegeben durch das Produkt pA · pB
I Informationsgewinn („Überraschung“) größer, je kleiner pi
I Wahl von 1=p als Maß für den Informationsgewinn?
I möglich, aber der Gesamtinformationsgehalt zweier (mehrerer)
Ereignisse wäre das Produkt der einzelnen Informationsgehalte
I additive Größe wäre besser ⇒ Logarithmus von 1=p bilden

A. Mäder 382
Erinnerung: Logarithmus
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

I Umkehrfunktion zur Exponentialfunktion


I formal: für gegebenes a und b ist der Logarithmus
die Lösung der Gleichung a = b x
I falls die Lösung existiert, gilt: x = logb (a)

I Beispiel 3 = log2 (8), denn 23 = 8

I Rechenregeln
I log (x · y ) = log (x) + log (y ) (Addition statt Multiplikation)
I b logb (x)
=x und x
logb (b ) = x
I logb (x) = loga (x)
loga (b)
I log2 (x) = ln(x)= ln(2) = ln(x)=0; 693141718

A. Mäder 383
Definition: Informationsgehalt
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

Informationsgehalt eines Ereignisses Ai mit Wahrscheinlichkeit pi ?


I als messbare und daher additive Größe
I durch Logarithmierung (Basis 2) der Wahrscheinlichkeit:
`1´
I(Ai ) = log2 = −log2 (pi )
pi

I Informationsgehalt I (oder Information) von Ai


auch Entscheidungsgehalt genannt

I Beispiel: zwei Nachrichten A und B


1 1 1
I(A) + I(B) = log2 ( ) = log2 ( ) + log2 ( )
pA · pB pA pB

A. Mäder 384
Einheit Bit
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

I(Ai ) = log2 ( p1i ) = −log2 (pi )


I Wert von I ist eine reelle Größe
I gemessen in der Einheit 1 Bit

I Beispiel: nur zwei mögliche Symbole 0 und 1 mit gleichen


Wahrscheinlichkeiten p0 = p1 = 21
Der Informationsgehalt des Empfangs einer 0 oder 1 ist dann
I(0) = I(1) = log2 (1= 21 ) = 1 Bit

„Bit“ Verwechslungsgefahr
Bit: als Maß für den Informationsgehalt Maßeinheit
bit : Anzahl der Binärstellen –"–
Bit : Binärzeichen, Symbol 0 oder 1 (Kap. „5 Zeichen und Text“)

A. Mäder 385
Ungewissheit, Überraschung, Information
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

I Vor dem Empfang einer Nachricht gibt es Ungewissheit über


das Kommende
Beim Empfang gibt es die Überraschung
Und danach hat man den Gewinn an Information

I Alle drei Begriffe in der oben definierten Einheit Bit messen


I Diese Quantifizierung der Information ist zugeschnitten
auf die Nachrichtentechnik

I umfasst nur einen Aspekt des umgangssprachlichen Begriffs


Information

A. Mäder 386
Informationsgehalt: Beispiele
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

Meteorit
I die Wahrscheinlichkeit, an einem Tag von einem Meteor
getroffen zu werden, sei pM = 10−16

I Kein Grund zur Sorge, weil die Ungewissheit von


I = log2 (1=(1 − pM )) ≈ 3; 2 · 10−16 sehr klein ist
Ebenso klein ist die Überraschung, wenn das Unglück nicht
passiert ⇒ Informationsgehalt der Nachricht „Ich wurde nicht
vom Meteor erschlagen“ ist sehr klein

I Umgekehrt wäre die Überraschung groß: log2 (1=pM ) = 53; 15

A. Mäder 387
Informationsgehalt: Beispiele (cont.)
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

Würfeln
I bei vielen Spielen hat die 6 eine besondere Bedeutung
I hier betrachten wir aber zunächst nur die Wahrscheinlichkeit
von Ereignissen, nicht deren Semantik

I die Wahrscheinlichkeit, eine 6 zu würfeln, ist 1


6
I I(6) = log2 (1= 16 ) = 2; 585

A. Mäder 388
Informationsgehalt: Beispiele (cont.)
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

Information eines Buchs


I Gegeben seien zwei Bücher
1. deutscher Text
2. mit Zufallsgenerator mit Gleichverteilung aus Alphabet mit
80-Zeichen erzeugt
I Informationsgehalt in beiden Fällen?
1. Im deutschen Text abhängig vom Kontext!
Beispiel: Empfangen wir als deutschen Text „Der Begrif“,
so ist „f“ als nächstes Symbol sehr wahrscheinlich
2. beim Zufallstext liefert jedes neue Symbol die zusätzliche
Information I = log2 (1= 801
)
⇒ der Zufallstext enthält die größtmögliche Information

A. Mäder 389
Informationsgehalt: Beispiele (cont.)
7.6 Codierung - Informationstheorie 64-040 Rechnerstrukturen und Betriebssysteme

Einzelner Buchstabe
I die Wahrscheinlichkeit, in einem Text an einer gegebenen Stelle
das Zeichen „A“ anzutreffen sei W {A} = p = 0; 01

I Informationsgehalt I(A) = log2 (1=0; 01) = 6; 6439


I wenn der Text in ISO-8859-1 codiert vorliegt, werden 8
Binärstellen zur Repräsentation des „A“ benutzt
I der Informationsgehalt ist jedoch geringer

A. Mäder 390
Entropie
7.7 Codierung - Entropie 64-040 Rechnerstrukturen und Betriebssysteme

Obige Definition der Information lässt sich nur jeweils auf den
Empfang eines speziellen Zeichens anwenden
I Was ist die durchschnittliche Information bei Empfang
eines Symbols?
I diesen Erwartungswert bezeichnet man als Entropie des
Systems (auch mittlerer Informationsgehalt)

I Wahrscheinlichkeiten aller möglichen Ereignisse Ai seien


W {Ai } = pi
I da
P jeweils eines der möglichen Symbole eintrifft, gilt
i pi = 1

A. Mäder 391
Entropie (cont.)
7.7 Codierung - Entropie 64-040 Rechnerstrukturen und Betriebssysteme

I dann berechnet sich die Entropie H als Erwartungswert

H = E{I(Ai )}
X
= pi · I(Ai )
i
X 1
= pi · log2 ( )
pi
i
X
=− pi · log2 (pi )
i

I als Funktion der Symbol-Wahrscheinlichkeiten nur abhängig


vom stochastischen Modell

A. Mäder 392
Entropie: Beispiele
7.7 Codierung - Entropie 64-040 Rechnerstrukturen und Betriebssysteme

1. drei mögliche Ereignisse mit Wahrscheinlichkeiten { 12 ; 13 ; 16 }


I dann berechnet sich die Entropie zu
H = −( 21 log2 ( 21 ) + 31 log2 ( 13 ) + 16 log2 ( 16 )) = 1; 4591

2. Empfang einer Binärstelle mit den Wahrscheinlichkeiten


p0 = q und p1 = (1 − q).
I für q = 2 erhält man
1

H= −( 2 log2 ( 21 ) + (1
1
− 12 ) log2 (1 − 12 )) = 1:0
I mittlerer Informationsgehalt beim Empfang einer Binärstelle mit
gleicher Wahrscheinlichkeit für beide Symbole ist genau 1 Bit

A. Mäder 393
Entropie: Diagramm
7.7 Codierung - Entropie 64-040 Rechnerstrukturen und Betriebssysteme

Entropie des binären Kanals


1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Wahrscheinlichkeit der "0"

Entropie bei Empfang einer Binärstelle mit den Wahrscheinlichkeiten p0 = q und p1 = (1 − q)

A. Mäder 394
Entropie: Symbolverteilung
7.7 Codierung - Entropie 64-040 Rechnerstrukturen und Betriebssysteme

I mittlerer Informationsgehalt einer Binärstelle nur dann 1 Bit,


wenn beide möglichen Symbole gleich wahrscheinlich

I entsprechendes gilt auch für größere Symbolmengen


I Beispiel: 256 Symbole (8-bit), gleich wahrscheinlich
1 1
) = 8 Bit
P
H = i pi log2 (1=pi ) = 256 · 256 · log2 (1= 256

A. Mäder 395
Entropie: einige Eigenschaften
7.7 Codierung - Entropie 64-040 Rechnerstrukturen und Betriebssysteme

1. H(p1 ; p2 ; : : : ; pn ) ist maximal, falls pi = 1=n (1 ≤ i ≤ n)


2. H ist symmetrisch, für jede Permutation ı von 1; 2; : : : ; n gilt:
H(p1 ; p2 ; : : : ; pn ) = H(pı(1) ; pı(2) ; : : : ; pı(n) )
3. H(p1 ; p2 ; : : : ; pn ) ≥ 0 mit H(0; 0 : : : 0; 1; 0 : : : 0; 0) = 0
4. H(p1 ; p2 ; : : : ; pn ; 0) = H(p1 ; p2 ; : : : ; pn )
5. H(1=n; 1=n; : : : ; 1=n) ≤ H(1=(n + 1); 1=(n + 1); : : : ; 1=(n + 1))
6. H ist stetig in seinen Argumenten
7. Additivität: seien n; m ∈ N +
H( n ·1m ; n ·1m ; : : : ; n ·1m ) = H( n1 ; n1 ; : : : ; n1 ) + H( m1 ; m1 ; : : : ; m1 )

A. Mäder 396
Möglicher Informationsgehalt
7.7 Codierung - Entropie 64-040 Rechnerstrukturen und Betriebssysteme

I möglicher Informationsgehalt H0 ist durch Symbolcodierung


festgelegt (entspricht mittlerer Codewortlänge l)
X
H0 = pi · log2 (q li )
i

I stochastisches Modell W {Ai } = pi


(Wahrscheinlichkeiten von Ereignissen Ai )
I Codierung der Ereignisse (der Symbole) C(Ai ) durch Code
der Länge li über einem q-nären Alphabet

für Binärcodes gilt


X
I H0 = pi · li
i
I binäre Blockcodes mit Wortlänge N bits: H0 = N

A. Mäder 397
Redundanz
7.7 Codierung - Entropie 64-040 Rechnerstrukturen und Betriebssysteme

I Redundanz (engl. code redundancy):


die Differenz zwischen dem möglichen und dem tatsächlich
genutzten Informationsgehalt R = H0 − H
I möglicher Informationsgehalt H0 ist durch Symbolcodierung
festgelegt = mittlere Codewortlänge
I tatsächliche Informationsgehalt ist die Entropie H

I relative Redundanz: r = H0 −H
H0

I binäre Blockcodes mit Wortlänge N bits: H0 = N


gegebener Code mit m Wörtern ai und p(ai ):
„ X m «
R = H0 − H = H0 − − p(ai ) · log2 (p(ai ))
i=1
m
X
=N+ p(ai ) · log2 (p(ai ))
i=1
A. Mäder 398
Kanalkapazität
7.8 Codierung - Kanalcodierung 64-040 Rechnerstrukturen und Betriebssysteme

Informationstheorie ursprünglich entwickelt zur


I formalen Behandlung der Übertragung von Information
I über reale, nicht fehlerfreie Kanäle
I deren Verhalten als stochastisches Modell formuliert
werden kann

I zentrales Resultat ist die Kanalkapazität C


des binären symmetrischen Kanals
I der maximal pro Binärstelle übertragbare Informationsgehalt

C = 1 − H(F )

mit H(F ) der Entropie des Fehlerverhaltens

A. Mäder 399
Erinnerung: Modell der Informationsübertragung
7.8 Codierung - Kanalcodierung 64-040 Rechnerstrukturen und Betriebssysteme

Informations- Sender und Übertragungs- Empfänger Informations-


Quelle Kanalcodierung kanal und Decoder Senke

Störungen
und Rauschen

I Informationsquelle
I Sender mit möglichst effizienter Kanalcodierung
I gestörter und verrauschter Übertragungskanal
I Empfänger mit Decodierer und Fehlererkennung/-korrektur
I Informationssenke und -verarbeitung

A. Mäder 400
Binärer symmetrischer Kanal
7.8 Codierung - Kanalcodierung 64-040 Rechnerstrukturen und Betriebssysteme

I Wahrscheinlichkeit der beiden Symbole 0 und 1 ist gleich ( 12 )

I Wahrscheinlichkeit P , dass bei Übertragungsfehlern aus einer 0


eine 1 wird = Wahrscheinlichkeit, dass aus einer 1 eine 0 wird
I Wahrscheinlichkeit eines Fehlers an Binärstelle i ist unabhängig
vom Auftreten eines Fehlers an anderen Stellen

I Entropie des Fehlerverhaltens

H(F ) = P · log2 (1=P ) + (1 − P ) · log2 (1=(1 − P ))

I Kanalkapazität ist C = 1 − H(F )

A. Mäder 401
Kanalkapazität: Diagramm
7.8 Codierung - Kanalcodierung 64-040 Rechnerstrukturen und Betriebssysteme

Kapazität des binären symmetrischen Kanals


1

0.9

0.8

0.7
Bits pro Binärstelle

0.6

0.5

0.4

0.3

0.2

0.1

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Bitfehlerwahrscheinlichkeit

A. Mäder 402
Kanalkapazität: Konsequenzen
7.8 Codierung - Kanalcodierung 64-040 Rechnerstrukturen und Betriebssysteme

I bei P = 0; 5 ist die Kanalkapazität C = 0


⇒ der Empfänger kann die empfangenen Daten nicht von einer
zufälligen Sequenz unterscheiden

I bei P > 0; 5 steigt die Kapazität wieder an


(rein akademischer Fall: Invertieren aller Bits)

Die Kanalkapazität ist eine obere Schranke


I wird in der Praxis nicht erreicht (Fehler)
I Theorie liefert keine Hinweise, wie die fehlerfreie Übertragung
praktisch durchgeführt werden kann

A. Mäder 403
Shannon-Theorem
C. E. Shannon: Communication in the Presence of Noise; Proc. IRE, Vol.37,
No.1, 1949
7.8 Codierung - Kanalcodierung 64-040 Rechnerstrukturen und Betriebssysteme

Gegeben:
binärer symmetrischer Kanal mit der Störwahrscheinlichkeit P
und der Kapazität C(P )

Shannon-Theorem
Falls die Übertragungsrate R kleiner als C(P ) ist,
findet man zu jedem › > 0 einen Code C mit
der Übertragungsrate R(C) und C(P ) ≥ R(C) ≥ R und
der Fehlerdecodierwahrscheinlichkeit < ›

auch: C. E. Shannon: A Mathematical Theory of Communication [Link]/~ctm/

home/text/others/shannon/entropy/[Link]

A. Mäder 404
Shannon-Theorem (cont.)
C. E. Shannon: Communication in the Presence of Noise; Proc. IRE, Vol.37,
No.1, 1949
7.8 Codierung - Kanalcodierung 64-040 Rechnerstrukturen und Betriebssysteme

⇒ Wenn die Übertragungsrate kleiner als die Kanalkapazität ist,


existieren Codes, die beliebig zuverlässig sind
. . . und deren Signalübertragungsraten beliebig nahe der
Kanalkapazität liegen

I leider liefert die Theorie keine Ideen zur Realisierung


I die Nachrichten müssen sehr lang sein
I der Code muss im Mittel sehr viele Fehler in jeder Nachricht
korrigieren
I mittlerweile sehr nah am Limit: Turbo-Codes, LDPC-Codes usw.

A. Mäder 405
Fehlererkennende / -korrigierende Codes
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

Motivation
I Informationstheorie
I Kanalkapazität
I Shannon-Theorem

I zuverlässige Datenübertragung ist möglich


I aber (bisher) keine Ideen für die Realisierung

⇒ fehlererkennende Codes
⇒ fehlerkorrigierende Codes

A. Mäder 406
Fehlertypen
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

diverse mögliche Fehler bei der Datenübertragung


I Verwechslung eines Zeichens a→b
I Vertauschen benachbarter Zeichen ab → ba
I Vertauschen entfernter Zeichen abc → cba
I Zwillings-/Bündelfehler aa → bb
I usw.

I abhängig von der Technologie / der Art der Übertragung


I Bündelfehler durch Kratzer auf einer CD
I Bündelfehler bei Funk durch längere Störimpulse
I Buchstabendreher beim „Eintippen“ eines Textes

A. Mäder 407
Begriffe zur Fehlerbehandlung
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Block-Code: k-Informationsbits werden in n-Bits codiert


I Faltungscodes: ein Bitstrom wird in einen Codebitstrom
höherer Bitrate codiert
I Bitstrom erzeugt Folge von Automatenzuständen
I Decodierung über bedingte Wahrscheinlichkeiten bei
Zustandsübergängen
I im Prinzip linear, Faltungscodes passen aber nicht in
Beschreibung unten

I linearer (n; k)-Code: ein k-dimensionaler Unterraum des GF (2)n


I modifizierter Code: eine oder mehrere Stellen eines linearen
Codes werden systematisch verändert (d.h. im GF (2) invertiert)
Null- und Einsvektor gehören nicht mehr zum Code
I nichtlinearer Code: weder linear noch modifiziert

A. Mäder 408
Einschub: GF (2), GF (2)n
[Link]/wiki/Endlicher_Körper
[Link]/wiki/GF(2)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

Boole’sche Algebra Details: Mathe-Skript, Wikipedia, v.d. Heide [Hei05]

I basiert auf: UND, ODER, Negation


I UND ≈ Multiplikation
ODER ≈ Addition
I aber: kein inverses Element für die ODER-Operation
⇒ kein Körper

Galois-Feld mit zwei Elementen: GF(2)


I Körper, zwei Verknüpfungen: UND und XOR
I UND als Multiplikation
XOR als Addition mod 2
I additives Inverses existiert: x ⊕ x = 0

A. Mäder 409
Begriffe zur Fehlerbehandlung (cont.)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I systematischer Code: wenn die zu codierende Information


direkt (als Substring) im Codewort enthalten ist

I zyklischer Code
ein Block-Code (identische Wortlänge aller Codewörter)
I

für jedes Codewort gilt: auch alle zyklischen Verschiebungen


I

(Rotationen, z.B. rotate-left) sind Codeworte


⇒ bei serieller Übertragung erlaubt dies die Erkennung/Korrektur
von Bündelfehlern

A. Mäder 410
Verfahren zur Fehlerbehandlung
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Automatic Repeat Request (ARQ): der Empfänger erkennt


ein fehlerhaftes Symbol und fordert dies vom Sender erneut an
I bidirektionale Kommunikation erforderlich
I unpraktisch bei großer Entfernung / Echtzeitanforderungen

I Vorwärtsfehlerkorrektur (Forward Error Correction, FEC):


die übertragene Information wird durch zusätzliche Redundanz
(z.B. Prüfziffern) gesichert
I der Empfänger erkennt fehlerhafte Codewörter und kann diese
selbständig korrigieren

I je nach Einsatzzweck sind beide Verfahren üblich


I auch kombiniert

A. Mäder 411
Hamming-Abstand
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Hamming-Abstand: die Anzahl der Stellen, an denen sich


zwei Binärcodewörter der Länge w unterscheiden
I Hamming-Gewicht: Hamming-Abstand eines Codeworts
vom Null-Wort

I Beispiel
a = 0110 0011
b = 1010 0111
⇒ Hamming-Abstand von a und b ist 3
Hamming-Gewicht von b ist 5

I Java: [Link]( a ^ b )

A. Mäder 412
Fehlererkennende und -korrigierende Codes
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Zur Fehlererkennung und Fehlerkorrektur ist eine Codierung


mit Redundanz erforderlich
I Repräsentation enthält mehr Bits, als zur reinen Speicherung
nötig wären

I Codewörter so wählen, dass sie alle paarweise mindestens den


Hamming-Abstand d haben
dieser Abstand heißt dann Minimalabstand d

⇒ Fehlererkennung bis zu (d − 1) fehlerhaften Stellen


Fehlerkorrektur bis zu ((d − 1)=2) –"–

A. Mäder 413
Fehlererkennende und -korrigierende Codes (cont.)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Hamming-Abstand 2 3
110 111 110 111 110 111

010 011 010 011 010 011

100 101 100 101 100 101

000 001 000 001 000 001

A. Mäder 414
Fehlererkennende und -korrigierende Codes (cont.)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

00000 00001
00010 00011 00100 00101
00110 00111
01000 01001
01010 01011 01100 01101
01110 01111 10000 10001
10010 10011 10100 10101
10110 10111
11000 11001
11010 11011 11100 11101
11110 11111

Hamming-Abstand 0 1 2 3 4 5

Fehlererkennung 4-bit

Fehlerkorrektur 2-bit 2-bit

A. Mäder 415
Prüfinformation
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

Man fügt den Daten Prüfinformation hinzu, oft Prüfsumme genannt


I zur Fehlererkennung
I zur Fehlerkorrektur
I zur Korrektur einfacher Fehler, Entdeckung schwerer Fehler

verschiedene Verfahren
I Prüfziffer, Parität
I Summenbildung
I CRC-Verfahren (cyclic-redundancy check)
I BCH-Codes (Bose, Ray-Chauduri, Hocquengham)
I RS-Codes (Reed-Solomon)

A. Mäder 416
Paritätscode
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I das Anfügen eines Paritätsbits an ein Binärcodewort


z = (z1 ; : : : ; zn ) ist die einfachste Methode zur Erkennung
von Einbitfehlern
I die Parität wird berechnet als
„X n «
p= zi mod 2
i=1

I gerade Parität (even parity): yev en = (z1 ; : : : ; zn ; p)


p(yev en ) = ( i yi ) mod 2 = 0
P

ungerade Parität (odd parity): yodd = (z1 ; : : : ; zn ; p)


p(yodd ) = ( i yi ) mod 2 = 1
P

A. Mäder 417
Paritätscode: Eigenschaften
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I in der Praxis meistens Einsatz der ungeraden Parität:


pro Codewort yodd mindestens eine Eins ⇒ elektr. Verbindung

I Hamming-Abstand zweier Codewörter im Paritätscode ist


mindestens 2, weil sich bei Ändern eines Nutzbits jeweils auch
die Parität ändert: d = 2

I Erkennung von Einbitfehlern möglich:


Berechnung der Parität im Empfänger und Vergleich mit
der erwarteten Parität
I Erkennung von (ungeraden) Mehrbitfehlern

A. Mäder 418
Zweidimensionale Parität
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Anordnung der Daten / Informations-Bits als Matrix


I Berechnung der Parität für alle Zeilen und Spalten
I optional auch für Zeile/Spalte der Paritäten

I entdeckt 1-bit Fehler in allen Zeilen und Spalten


I erlaubt Korrektur von allen 1-bit und vielen n-bit Fehlern

I natürlich auch weitere Dimensionen möglich


n-dimensionale Anordnung und Berechnung von n Paritätsbits

A. Mäder 419
Zweidimensionale Parität: Beispiel
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

H 100 1000 0 Fehlerfall 100 1000 0


A 100 0001 0 100 0101 0
M 100 1101 0 110 1101 0
M 100 1101 0 100 1101 0
I 100 1001 1 000 1001 1
N 100 1110 0 100 1110 0
G 100 0111 0 100 0111 0
100 1001 1 100 1000 1
I Symbol: 7 ASCII-Zeichen, gerade Parität (even)
64 bits pro Symbol (49 für Nutzdaten und 15 für Parität)
I links: Beispiel für ein Codewort und Paritätsbits
I rechts: empfangenes Codewort mit vier Fehlern,
davon ein Fehler in den Paritätsbits

A. Mäder 420
Zweidimensionale Parität: Einzelfehler
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

H 100 1000 0 Fehlerfall 100 1000 0


A 100 0001 0 100 0101 01
M 100 1101 0 100 1101 0
M 100 1101 0 100 1101 0
I 100 1001 1 100 1001 1
N 100 1110 0 100 1110 0
G 100 0111 0 100 0111 0
100 1001 1 100 1001 1
1
I Empfänger: berechnet Parität und vergleicht mit gesendeter P.
I Einzelfehler: Abweichung in je einer Zeile und Spalte
⇒ Fehler kann daher zugeordnet und korrigiert werden
I Mehrfachfehler: nicht alle, aber viele erkennbar (korrigierbar)

A. Mäder 421
Zweidimensionale Parität: Dezimalsystem
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Parität als Zeilen/Spaltensumme mod 10 hinzufügen

I Daten Parität Fehlerfall


3 7 4 3 7 4 4 3 7 4 4
5 4 8 5 4 8 7 5 4 3 72
1 3 5 1 3 5 9 1 3 5 9
9 4 7 0 9 4 7 0
2

A. Mäder 422
International Standard Book Number
ISBN-10 (1970), ISBN-13
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I an EAN (European Article Number) gekoppelt


I Codierung eines Buches als Tupel
1. Präfix (nur ISBN-13)
2. Gruppennummer für den Sprachraum als Fano-Code:
0 − 7, 80 − 94, 950 − 995, 9960 − 9989, 99900 − 99999
I 0; 1: englisch – AUS, UK, USA . . .
I 2: französisch – F . . .
I 3: deutsch – A, DE, CH
I ...
3. Verlag, Nummer als Fano-Code:
00 − 19 (1 Mio Titel), 20 − 699 (100 000 Titel) usw.
4. verlagsinterne Nummer
5. Prüfziffer

A. Mäder 423
ISBN-10: Prüfverfahren
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I ISBN-10 Zahl: z1 ; z2 ; : : : ; z10


I Prüfsumme berechnen, Symbol X steht für Ziffer 10
9
X ` ´
i · zi mod 11 = z10
i=1

I ISBN-Zahl zulässig, genau dann wenn


10
X ` ´
i · zi mod 11 = 0
i=1

I Beispiel: 1-292-10176-8 Bryant, O’Hallaron [BO15]


1 · 1 + 2 · 2 + 3 · 9 + 4 · 2 + 5 · 1 + 6 · 0 + 7 · 1 + 8 · 7 + 9 · 6 = 162
162 mod 11 = 8
162 + 10 · 8 = 242 242 mod 11 = 0

A. Mäder 424
ISBN: Fehlertypen
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Prüfziffer schützt gegen Verfälschung einer Ziffer


–"– Vertauschung zweier Ziffern
–"– „Falschdopplung“ einer Ziffer

I Beispiel: vertausche i-te und j-te Ziffer (mit i 6= j)


Prüfsumme: hkorrekti - hfalschi
= i · zi + j · zj − j · zi − i · zj = (i − j) · (zi − zj ) mit zi 6= zj .

A. Mäder 425
3-fach Wiederholungscode / (3,1)-Hamming-Code
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I dreifache Wiederholung jedes Datenworts 0 1


1
I (3,1)-Hamming-Code: Generatormatrix ist G = @1A
1
I Codewörter ergeben sich als Multiplikation von G mit dem
Informationsvektor u (jeweils ein Bit)
u=0: x = (111)T · (0) = (000)
u=1: x = (111)T · (1) = (111)

I Verallgemeinerung als n-fach Wiederholungscode


I systematischer Code mit Minimalabstand D = n
I Decodierung durch Mehrheitsentscheid: 1-bit Fehlerkorrektur
− Nachteil: geringe Datenrate

A. Mäder 426
Hamming-Code
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Hamming-Abstand 3
I korrigiert 1-bit Fehler, erkennt (viele) 2-bit und 3-bit Fehler

(N; n)-Hamming-Code
I Datenwort n-bit (d1 ; d2 ; : : : ; dn )
um k-Prüfbits ergänzen (p1 ; p2 ; : : : ; pk )
⇒ Codewort mit N = n + k bit

I Fehlerkorrektur gewährleisten: 2k ≥ N + 1
I 2k Kombinationen mit k-Prüfbits
I 1 fehlerfreier Fall
I N zu markierende Bitfehler

A. Mäder 427
Hamming-Code (cont.)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

1. bestimme kleinstes k mit n ≤ 2k − k − 1


2. Prüfbits an Bitpositionen: 20 ; 21 ; : : : ; 2k−1
Originalbits an den übrigen Positionen
0 0 0 0 0 0 0 1 1
0 0 0 1 1 1 1 0 0

Position 1 2 3 4 5 6 7 8 9 ...
0 1 1 0 0 1 1 0 0
1 0 1 0 1 0 1 0 1

Bit p1 p2 d1 p3 d2 d3 d4 p4 d5 ...

3. berechne Prüfbit i als mod 2-Summe der Bits (XOR),


deren Positionsnummer ein gesetztes i-bit enthält
p1 = d1 ⊕ d2 ⊕ d4 ⊕ d5 ⊕ : : :
p2 = d1 ⊕ d3 ⊕ d4 ⊕ d6 ⊕ : : :
p3 = d2 ⊕ d3 ⊕ d4 ⊕ d8 ⊕ : : :
p4 = d5 ⊕ d6 ⊕ d7 ⊕ d8 ⊕ : : :
...

A. Mäder 428
Hamming-Code (cont.)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

Schema: 2 . . . 5 Prüfbits

0 1 2 3 4
22 2 2 2
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31
p1p2 d1p3 d2 d3 d4p4 d5 d6d7 d8 d9 d10d11 p5 d12d13d14 d15d16 d17d18d19 d20 d21d22 d23 d24 d25d26

(7,4)-Hamming-Code (15,11)-Hamming-Code
I p1 = d1 ⊕ d2 ⊕ d4 I p1 = d1 ⊕ d2 ⊕ d4 ⊕ d5 ⊕ d7 ⊕ d9 ⊕ d11
p2 = d1 ⊕ d3 ⊕ d4 p2 = d1 ⊕ d3 ⊕ d4 ⊕ d6 ⊕ d7 ⊕ d10 ⊕ d11
p3 = d2 ⊕ d3 ⊕ d4 p3 = d2 ⊕ d3 ⊕ d4 ⊕ d8 ⊕ d9 ⊕ d10 ⊕ d11
p4 = d5 ⊕ d6 ⊕ d7 ⊕ d8 ⊕ d9 ⊕ d10 ⊕ d11

A. Mäder 429
(7,4)-Hamming-Code
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I sieben Codebits für je vier Datenbits


I linearer (7,4)-Block-Code
I Generatormatrix ist
1 1 0 1
0 1
B1 0 1 1C
B C
B1 0 0 0C
B C
B0
G=B 1 1 1C
C
B0 1 0 0C
B C
@0 0 1 0A
0 0 0 1

I Codewort c = G · d

A. Mäder 430
(7,4)-Hamming-Code (cont.)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Prüfmatrix H orthogonal zu gültigen Codewörtern: H · c = 0


0 1
1 0 1 0 1 0 1
H= 0 @ 1 1 0 0 1 1A
0 0 0 1 1 1 1

für ungültige Codewörter H · c 6= 0


⇒ „Fehlersyndrom“ liefert Information über Fehlerposition / -art

Fazit: Hamming-Codes
+ größere Wortlangen: besseres Verhältnis von Nutz- zu Prüfbits
+ einfaches Prinzip, einfach decodierbar
− es existieren weit bessere Codes

A. Mäder 431
(7,4)-Hamming-Code: Beispiel
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Codieren von d = (0; 1; 1; 0)

1 1 0 1 1
0 1 0 1
B1 0 1 1C 0 1 B1C
B
B1
C 0 B C
B 0 0 C B1C B0C
0C B C
B0
c = G ·d = B 1 1 B0C
1C · @ A = B
C B C C
B0 1
1 0 0C
C
B1C
B C
B
@0 0
0 1 0A @1A
0 0 0 1 0

A. Mäder 432
(7,4)-Hamming-Code: Beispiel (cont.)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Prüfung von Codewort c = (1; 1; 0; 0; 1; 1; 0)

1
0 1
B1C
0 1 B C 0 1
1 0 1 0 1 0 1 B0C
B C 0
H · c = 0 1 1 0 0 1 1 · B0C = 0A
@ A B C @
0 0 0 1 1 1 1 B1C
B C 0
@1A
0

A. Mäder 433
(7,4)-Hamming-Code: Beispiel (cont.)
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I im Fehlerfall c = (1; 1; 1; 0; 1; 1; 0)

1
0 1
B1C
0 1 B C 0 1
1 0 1 0 1 0 1 B1C
B C 1
H · c = @0 1 1 0 0 1 1 A · B0
B C
C = @1A
0 0 0 1 1 1 1 B1C
B C 0
@1A
0

⇒ Fehlerstelle:
` ´
1 1 1 0 1 1 0
0 1
1 0 1 0 1 0 1
@0 1 1 0 0 1 1A
0 0 0 1 1 1 1
Index: 1 2 3 4 5 6 7
A. Mäder 434
Fehlerrate
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

I (n; k)-Code: k-Informationsbits werden in n-Bits codiert


I Minimalabstand d der Codewörter voneinander
I ermöglicht Korrektur von r Bitfehlern r ≤ (d − 1)=2

⇒ nicht korrigierbar sind: r + 1; r + 2; : : : ; n Bitfehler

I Übertragungskanal hat Bitfehlerwahrscheinlichkeit


⇒ Wortfehlerwahrscheinlichkeit: Summe der Wahrscheinlichkeiten
nicht korrigierbarer Bitfehler

A. Mäder 435
Fehlerrate: (7,4)-Hamming-Code
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

[Hei05]

A. Mäder 436
Fehlerrate: (23,12)-Golay-Code
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

[Hei05]

A. Mäder 437
Fehlerrate: (2048,8)-Randomcode
7.9 Codierung - Fehlererkennende Codes 64-040 Rechnerstrukturen und Betriebssysteme

[Hei05]

A. Mäder 438
Binärpolynome
7.10 Codierung - Zyklische Codes 64-040 Rechnerstrukturen und Betriebssysteme

I jedem n-bit Wort (d1 ; d2 ; : : : ; dn ) lässt sich ein Polynom über


dem Körper {0; 1} zuordnen
I Beispiel, mehrere mögliche Zuordnungen

100 1101 = 1 · x 6 + 0 · x 5 + 0 · x 4 + 1 · x 3 + 1 · x 2 + 0 · x 1 + 1 · x 0
= x6 + x3 + x2 + x0
= x0 + x3 + x4 + x6
= x 0 + x −3 + x −4 + x −6
:::

I mit diesen Polynomen kann „gerechnet“ werden:


Addition, Subtraktion, Multiplikation, Division
I Theorie: Galois-Felder

A. Mäder 439
Zyklische Codes (CRC)
7.10 Codierung - Zyklische Codes 64-040 Rechnerstrukturen und Betriebssysteme

CRC (Cyclic Redundancy Check)


I Polynomdivision als Basis für CRC-Codes erzeugt Prüfbits
I zyklisch: Codewörter werden durch Schieben und Modifikation
(mod 2 Summe) ineinander überführt

I Familie von Codes zur Fehlererkennung


insbesondere auch zur Erkennung von Bündelfehlern

I in sehr vielen Codes benutzt


I Polynom 0x04C11DB7 (CRC-32) in Ethernet, ZIP, PNG . . .
I weitere CRC-Codes in USB, ISDN, GSM, openPGP . . .

A. Mäder 440
Zyklische Codes (CRC) (cont.)
7.10 Codierung - Zyklische Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Sehr effiziente Software- oder Hardwarerealisierung


I rückgekoppelte Schieberegister und XOR
LFSR (Linear Feedback Shift Register)
I Beispiel x 5 + x 4 + x 2 + 1
Takt

p5 p4 p3 p2 p1 di

I Codewort erstellen
I Datenwort di um k 0-bits verlängern, Grad des Polynoms: k
I bitweise in CRC-Check schieben
I Divisionsrest bildet Registerinhalt pi
I Prüfbits pi an ursprüngliches Datenwort anhängen

A. Mäder 441
Zyklische Codes (CRC) (cont.)
7.10 Codierung - Zyklische Codes 64-040 Rechnerstrukturen und Betriebssysteme

I Test bei Empfänger


I übertragenes Wort bitweise in CRC-Check schieben
gleiches Polynom / Hardware wie bei Codierung
I fehlerfrei, wenn Divisionsrest/Registerinhalt = 0

I je nach Polynom (# Prüfbits) unterschiedliche Güte


I Galois-Felder als mathematische Grundlage

I [Link]/wiki/Cyclic_redundancy_check
[Link]/wiki/Computation_of_CRC
[Link]/wiki/Zyklische_Redundanzprüfung
[Link]/wiki/LFSR

A. Mäder 442
Praxisbeispiel: EAN-13 Produktcode
[Link]/wiki/European_Article_Number
7.11 Codierung - Praxisbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

Kombination diverser Codierungen:


I Land, Unternehmen, Artikelnummer,
Prüfsumme
I 95-stelliges Bitmuster
I schwarz =b 1, weiss =
b 0
I max. vier aufeinanderfolgende
weisse/schwarze Bereiche
I Randzeichen: 101
Trennzeichen in der Mitte: 01010
I 13 Ziffern: 7 links, 6 rechts
I jede Ziffer mit 7 bit codiert, je zwei Linien und Freiräume
I 3 Varianten pro Ziffer: links ungerade/gerade, rechts
I 12 Ziffern Code, 11 Ziffern direkt codiert
I 1. Ziffer über Abfolge von u/g Varianten
I 13. Ziffer als Prüfsumme

A. Mäder 443
Compact Disc
Audio-CD und CD-ROM
7.11 Codierung - Praxisbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

I Polycarbonatscheibe, spiralförmige geprägte Datenspur

I spiralförmige Spur, ca. 16000 Windungen, Start innen


I geprägte Vertiefungen pits, dazwischen lands
I Wechsel pit/land oder land/pit codiert 1, dazwischen 0
I Auslesen durch Intensität von reflektiertem Laserstrahl
I 650 MiB Kapazität, Datenrate ≈ 150 KiB/sec (1x speed)

A. Mäder 444
Compact Disc (cont.)
Audio-CD und CD-ROM
7.11 Codierung - Praxisbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

I von Anfang an auf billigste Fertigung ausgelegt


I mehrstufige Fehlerkorrekturcodierung fest vorgesehen
I Kompensation von Fertigungsmängeln und -toleranzen
I Korrektur von Staub und Kratzern etc.

I Audio-CD: Interpolation nicht korrigierbarer Fehler


I Daten-CD: geschachtelte weitere Codierung
I Bitfehlerrate ≤ 1011

A. Mäder 445
Compact Disc: Mehrstufige Codierung
7.11 Codierung - Praxisbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

I Daten in Frames à 24 Bytes aufteilen


I 75 Sektoren mit je 98 Frames pro Sekunde
I Sektor enthält 2 352 Bytes Nutzdaten (und 98 Bytes Subcode)

I pro Sektor 784 Byte Fehlerkorrektur hinzufügen


I Interleaving gegen Burst-Fehler (z.B. Kratzer)
I Code kann bis 7 000 fehlende Bits korrigieren

I eight-to-fourteen Modulation: 8-Datenbits in 14-Codebits


2 . . . 10 Nullen zwischen zwei Einsen (pit/land Übergang)

I Daten-CD zusätzlich mit äußerem 2D Reed-Solomon Code


I pro Sektor 2 048 Bytes Nutzdaten, 276 Bytes RS-Fehlerschutz

A. Mäder 446
Farbbilder: JPEG
7.11 Codierung - Praxisbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

Joint Picture Experts Group Bildformat (1992)


I für die Speicherung von Fotos / Bildern
I verlustbehaftet

mehrere Codierungsschritte
1. Farbraumkonvertierung: RGB nach YUV verlustbehaftet
2. Aufteilung in Blöcke zu je 8x8 Pixeln verlustfrei
3. DCT (discrete cosinus transformation) verlustfrei
4. Quantisierung (einstellbar) verlustbehaftet
5. Huffman-Codierung verlustfrei

A. Mäder 447
Video: MPEG
7.11 Codierung - Praxisbeispiele 64-040 Rechnerstrukturen und Betriebssysteme

Motion Picture Experts Group: Sammelname der Organisation und


diverser aufeinander aufbauender Standards

Codierungsschritte für Video


1. Einzelbilder wie JPEG (YUV, DCT, Huffman)
2. Differenzbildung mehrerer Bilder (Bewegungskompensation)
3. Group of Pictures (I-Frames, P -Frames, B-Frames)
4. Zusammenfassung von Audio, Video, Metadaten im
sogenannten PES (Packetized Elementary Stream)
5. Transport-Stream Format für robuste Datenübertragung

A. Mäder 448
Literatur
7.12 Codierung - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Ham87] R.W. Hamming: Information und Codierung.


VCH, 1987. ISBN 3–527–26611–9
[Hei05a] K. von der Heide: Vorlesung: Technische Informatik 1 —
interaktives Skript. Universität Hamburg, FB Informatik, 2005.
[Link]/lectures/2004ws/
vorlesung/t1
[Hei05b] K. von der Heide: Vorlesung: Digitale Datenübertragung.
Universität Hamburg, FB Informatik, 2005, Vorlesungsskript.
[Link]/lectures/2005ss/
vorlesung/Digit
[HenHA] N. Hendrich: HADES — HAmburg DEsign System.
Universität Hamburg, FB Informatik, Lehrmaterial.
[Link]/applets/hades/webdemos

A. Mäder 449
Literatur (cont.)
7.12 Codierung - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[RL09] W.E. Ryan, S. Lin: Channel codes: classical and modern.


Cambridge University Press, 2009. ISBN 0–521–84868–7
[Knu85] D.E. Knuth: Dynamic Huffman Coding.
in: J. of Algorithms 6 (1985), Nr. 2, S. 163–180
[Knu11] D.E. Knuth: The Art of Computer Programming,
Volume 4A, Combinatorial Algorithms, Part 1.
Addison-Wesley Professional, 2011. ISBN 978–0–201–03804–0

A. Mäder 450
Gliederung
8 Schaltfunktionen 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
Definition
Darstellung
Normalformen
Entscheidungsbäume und OBDDs
Realisierungsaufwand und Minimierung
Minimierung mit KV-Diagrammen

A. Mäder 451
Gliederung (cont.)
8 Schaltfunktionen 64-040 Rechnerstrukturen und Betriebssysteme

Literatur
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 452
Schaltfunktionen
8.1 Schaltfunktionen - Definition 64-040 Rechnerstrukturen und Betriebssysteme

I Schaltfunktion: eine eindeutige Zuordnungsvorschrift f , die


jeder Wertekombination (b1 ; b2 ; : : : ; bn ) von Schaltvariablen
einen Wert zuweist:

y = f (b1 ; b2 ; : : : ; bn ) ∈ {0; 1}

I Schaltvariable: eine Variable, die nur endlich viele Werte


annehmen kann – typisch sind binäre Schaltvariablen
I Ausgangsvariable: die Schaltvariable am Ausgang der
Funktion, die den Wert y annimmt
I bereits bekannt: elementare Schaltfunktionen (AND, OR usw.)
wir betrachten jetzt Funktionen von n Variablen

A. Mäder 453
Beschreibung von Schaltfunktionen
8.2 Schaltfunktionen - Darstellung 64-040 Rechnerstrukturen und Betriebssysteme

I textuelle Beschreibungen
formale Notation, Schaltalgebra, Beschreibungssprachen

I tabellarische Beschreibungen
Funktionstabelle, KV-Diagramme . . .

I graphische Beschreibungen
Kantorovic-Baum (Datenflussgraph), Schaltbild . . .

I Verhaltensbeschreibungen ⇒ „was“
I Strukturbeschreibungen ⇒ „wie“

A. Mäder 454
Funktionstabelle
8.2 Schaltfunktionen - Darstellung 64-040 Rechnerstrukturen und Betriebssysteme

I Tabelle mit Eingängen xi und Ausgangswert y = f (x)


I Zeilen im Binärcode sortiert
I zugehöriger Ausgangswert eingetragen

x3 x2 x1 f (x)
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0

A. Mäder 455
Funktionstabelle (cont.)
8.2 Schaltfunktionen - Darstellung 64-040 Rechnerstrukturen und Betriebssysteme

I Kurzschreibweise: nur die Funktionswerte notiert


f (x2 ; x1 ; x0 ) = {0; 0; 1; 1; 0; 0; 1; 0}

I n Eingänge: Funktionstabelle umfasst 2n Einträge


I Speicherbedarf wächst exponentiell mit n
z.B.: 233 Bit für 16-bit Addierer (16+16+1 Eingänge)
⇒ daher nur für kleine Funktionen geeignet

I Erweiterung auf don’t-care Terme, s.u.

A. Mäder 456
Verhaltensbeschreibung
8.2 Schaltfunktionen - Darstellung 64-040 Rechnerstrukturen und Betriebssysteme

I Beschreibung einer Funktion als Text über ihr Verhalten

I Problem: umgangssprachliche Formulierungen oft mehrdeutig

I logische Ausdrücke in Programmiersprachen


I Einsatz spezieller (Hardware-) Beschreibungssprachen
z.B.: Verilog, VHDL, SystemC

A. Mäder 457
umgangssprachlich: Mehrdeutigkeit
8.2 Schaltfunktionen - Darstellung 64-040 Rechnerstrukturen und Betriebssysteme

„Das Schiebedach ist ok (y ), wenn der Öffnungskontakt (x0 ) oder


der Schließkontakt (x1 ) funktionieren oder beide nicht aktiv sind
(Mittelstellung des Daches)“
K. Henke, H.-D. Wuttke: Schaltsysteme [WH03]

zwei mögliche Missverständnisse


I oder : als OR oder XOR?
I beide nicht: x1 und x0 nicht, oder x1 nicht und x0 nicht?

⇒ je nach Interpretation völlig unterschiedliche Schaltung

A. Mäder 458
Strukturbeschreibung
8.2 Schaltfunktionen - Darstellung 64-040 Rechnerstrukturen und Betriebssysteme

I Strukturbeschreibung: eine Spezifikation der konkreten


Realisierung einer Schaltfunktion

I vollständig geklammerte algebraische Ausdrücke


f = x1 ⊕ (x2 ∨ x3 )
I Datenflussgraphen
I Schaltpläne mit Gattern (s.u.)
I PLA-Format für zweistufige AND-OR Schaltungen (s.u.)
I ...

A. Mäder 459
Funktional vollständige Basismenge
8.2 Schaltfunktionen - Darstellung 64-040 Rechnerstrukturen und Betriebssysteme

I Menge M von Verknüpfungen über GF (2) heißt funktional


vollständig, wenn die Funktionen f ; g ∈ T2 :

f (x1 ; x2 ) = x1 ⊕ x2
g (x1 ; x2 ) = x1 ∧ x2

allein mit den in M enthaltenen Verknüpfungen geschrieben


werden können

I Boole’sche Algebra: { AND, OR, NOT }


I Reed-Muller Form: { AND, XOR, 1 }
I technisch relevant: { NAND }, { NOR }

A. Mäder 460
Normalformen
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I Jede Funktion kann auf beliebig viele Arten beschrieben werden

Suche nach Standardformen


I in denen man alle Funktionen darstellen kann
I Darstellung mit universellen Eigenschaften
I eindeutige Repräsentation ⇒ einfache Überprüfung,
ob (mehrere) gegebene Funktionen übereinstimmen

I Beispiel: Darstellung ganzrationaler Funktionen

ai : Koeffizienten
n
X
f (x) = ai x i
x i : Basisfunktionen
i=0

A. Mäder 461
Normalformen (cont.)
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

Normalform einer Boole’schen Funktion


I analog zur Potenzreihe
I als Summe über Koeffizienten {0; 1} und Basisfunktionen
2n

fˆi B̂i ; fˆi ∈ GF(2)


X
f =
i=1

mit B̂1 ; : : : ; B̂2n einer Basis des T n

A. Mäder 462
Definition: Normalform
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I funktional vollständige Menge V der Verknüpfungen von {0; 1}


I Seien ⊕; ⊗ ∈ V und assoziativ

I Wenn sich alle f ∈ T n in der Form

f = (fˆ1 ⊗ B̂1 ) ⊕ : : : ⊕ (fˆ2n ⊗ B̂2n )

schreiben lassen, so wird die Form als Normalform und die


Menge der B̂i als Basis bezeichnet.

I Menge von 2n Basisfunktionen B̂i


Menge von 22 möglichen Funktionen f
n

A. Mäder 463
Disjunktive Normalform (DNF)
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I Minterm: die UND-Verknüpfung aller Schaltvariablen einer


Schaltfunktion, die Variablen dürfen dabei negiert oder nicht
negiert auftreten

I Disjunktive Normalform: die disjunktive Verknüpfung aller


Minterme m mit dem Funktionswert 1
2n

fˆi · m(i);
_
f = mit m(i) : Minterm(i)
i=1

auch: kanonische disjunktive Normalform


sum-of-products (SOP)

A. Mäder 464
Disjunktive Normalform: Minterme
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel: alle 23 Minterme für drei Variablen


I jeder Minterm nimmt nur für eine Belegung der
Eingangsvariablen den Wert 1 an

x3 x2 x1 Minterme
0 0 0 x3 ∧ x2 ∧ x1
0 0 1 x3 ∧ x2 ∧ x1
0 1 0 x3 ∧ x2 ∧ x1
0 1 1 x3 ∧ x2 ∧ x1
1 0 0 x3 ∧ x2 ∧ x1
1 0 1 x3 ∧ x2 ∧ x1
1 1 0 x3 ∧ x2 ∧ x1
1 1 1 x3 ∧ x2 ∧ x1

A. Mäder 465
Disjunktive Normalform: Beispiel
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

x3 x2 x1 f (x)
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0

I Funktionstabelle: Minterm 0 ≡ xi 1 ≡ xi
I für f sind nur drei Koeffizienten der DNF gleich 1
⇒ DNF: f (x) = (x3 ∧ x2 ∧ x1 ) ∨ (x3 ∧ x2 ∧ x1 ) ∨ (x3 ∧ x2 ∧ x1 )

A. Mäder 466
Allgemeine disjunktive Form
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I disjunktive Form (sum-of-products): die disjunktive


Verknüpfung (ODER) von Termen. Jeder Term besteht aus der
UND-Verknüpfung von Schaltvariablen, die entweder direkt
oder negiert auftreten können
I entspricht dem Zusammenfassen („Minimierung“) von Termen
aus der disjunktiven Normalform
I disjunktive Form ist nicht eindeutig (keine Normalform)

I Beispiel
DNF f (x) = (x3 ∧ x2 ∧ x1 ) ∨ (x3 ∧ x2 ∧ x1 ) ∨ (x3 ∧ x2 ∧ x1 )
minimierte disjunktive Form f (x) = (x3 ∧ x2 ) ∨ (x3 ∧ x2 ∧ x1 )

A. Mäder 467
Allgemeine disjunktive Form
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I disjunktive Form (sum-of-products): die disjunktive


Verknüpfung (ODER) von Termen. Jeder Term besteht aus der
UND-Verknüpfung von Schaltvariablen, die entweder direkt
oder negiert auftreten können
I entspricht dem Zusammenfassen („Minimierung“) von Termen
aus der disjunktiven Normalform
I disjunktive Form ist nicht eindeutig (keine Normalform)

I Beispiel
DNF f (x) = (x3 ∧ x2 ∧ x1 ) ∨ (x3 ∧ x2 ∧ x1 ) ∨ (x3 ∧ x2 ∧ x1 )
minimierte disjunktive Form f (x) = (x3 ∧ x2 ) ∨ (x3 ∧ x2 ∧ x1 )
f (x) = (x2 ∧ x1 ) ∨ (x3 ∧ x2 ∧ x1 )

A. Mäder 467
Konjunktive Normalform (KNF)
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I Maxterm: die ODER-Verknüpfung aller Schaltvariablen einer


Schaltfunktion, die Variablen dürfen dabei negiert oder nicht
negiert auftreten

I Konjunktive Normalform: die konjunktive Verknüpfung aller


Maxterme — mit dem Funktionswert 0
2n

fˆi · —(i);
^
f = mit —(i) : Maxterm(i)
i=1

auch: kanonische konjunktive Normalform


product-of-sums (POS)

A. Mäder 468
Konjunktive Normalform: Maxterme
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel: alle 23 Maxterme für drei Variablen


I jeder Maxterm nimmt nur für eine Belegung der
Eingangsvariablen den Wert 0 an

x3 x2 x1 Maxterme
0 0 0 x3 ∨ x2 ∨ x1
0 0 1 x3 ∨ x2 ∨ x1
0 1 0 x3 ∨ x2 ∨ x1
0 1 1 x3 ∨ x2 ∨ x1
1 0 0 x3 ∨ x2 ∨ x1
1 0 1 x3 ∨ x2 ∨ x1
1 1 0 x3 ∨ x2 ∨ x1
1 1 1 x3 ∨ x2 ∨ x1

A. Mäder 469
Konjunktive Normalform: Beispiel
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

x3 x2 x1 f(x)
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0

I Funktionstabelle: Maxterm 0 ≡ xi 1 ≡ xi
I für f sind fünf Koeffizienten der KNF gleich 0
⇒ KNF: f (x) = (x3 ∨ x2 ∨ x1 ) ∧ (x3 ∨ x2 ∨ x1 ) ∧ (x3 ∨ x2 ∨ x1 ) ∧
(x3 ∨ x2 ∨ x1 ) ∧ (x3 ∨ x2 ∨ x1 )

A. Mäder 470
Allgemeine konjunktive Form
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I konjunktive Form (product-of-sums): die konjunktive


Verknüpfung (UND) von Termen. Jeder Term besteht aus der
ODER-Verknüpfung von Schaltvariablen, die entweder direkt
oder negiert auftreten können
I entspricht dem Zusammenfassen („Minimierung“) von Termen
aus der konjunktiven Normalform
I konjunktive Form ist nicht eindeutig (keine Normalform)

I Beispiel
KNF f (x) = (x3 ∨ x2 ∨ x1 ) ∧ (x3 ∨ x2 ∨ x1 ) ∧ (x3 ∨ x2 ∨ x1 ) ∧
(x3 ∨ x2 ∨ x1 ) ∧ (x3 ∨ x2 ∨ x1 )
minimierte konjunktive Form
f (x) = (x3 ∨ x2 ) ∧ (x2 ∨ x1 ) ∧ (x3 ∨ x1 )

A. Mäder 471
Reed-Muller Form
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I Reed-Muller Form: die additive Verknüpfung aller


Reed-Muller-Terme mit dem Funktionswert 1
2n

fˆi · RM(i)
M
f =
i=1

I mit den Reed-Muller Basisfunktionen RM(i)

I Erinnerung: Addition im GF(2) ist die XOR-Operation

A. Mäder 472
Reed-Muller Form: Basisfunktionen
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I Basisfunktionen sind:
{1}, (0 Variablen)
{1; x1 }, (1 Variable )
{1; x1 ; x2 ; x2 x1 }, (2 Variablen)
{1; x1 ; x2 ; x2 x1 ; x3 ; x3 x1 ; x3 x2 ; x3 x2 x1 }, (3 Variablen)
...
{RM(n − 1); xn · RM(n − 1)} (n Variablen)

I rekursive Bildung: bei n bit alle Basisfunktionen von (n − 1)-bit


und zusätzlich das Produkt von xn mit den Basisfunktionen von
(n − 1)-bit

A. Mäder 473
Reed-Muller Form: Umrechnung
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

Umrechnung von gegebenem Ausdruck in Reed-Muller Form?


I Ersetzen der Negation: a =a⊕1
Ersetzen der Disjunktion: a ∨ b = a ⊕ b ⊕ ab
Ausnutzen von: a⊕a =0

I Beispiel
f (x1 ; x2 ; x3 ) = (x1 ∨ x2 )x3
= (x1 ⊕ x2 ⊕ x1 x2 )x3
= ((1 ⊕ x1 ) ⊕ x2 ⊕ (1 ⊕ x1 )x2 )x3
= (1 ⊕ x1 ⊕ x2 ⊕ x2 ⊕ x1 x2 )x3
= x3 ⊕ x1 x3 ⊕ x1 x2 x3

A. Mäder 474
Reed-Muller Form: Transformationsmatrix
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I lineare Umrechnung zwischen Funktion f , bzw. der


Funktionstabelle (disjunktive Normalform), und RMF
I Transformationsmatrix A kann rekursiv definiert werden
(wie die RMF-Basisfunktionen)
I Multiplikation von A mit f ergibt Koeffizientenvektor r
der RMF
r = A · f und f = A · r
gilt wegen: r = A · f und A · A = I, also f = A · r !

A0 = (1)
„ «
1 0
A1 =
1 1

A. Mäder 475
Reed-Muller Form: Transformationsmatrix (cont.)
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme
0 1
1 0 0 0
B1 1 0 0C
A2 = B
@1
C
0 1 0A
1 1 1 1
1 0 0 0 0 0 0 0
0 1
B1 1 0 0 0 0 0 0C
B C
B1 0 1 0 0 0 0 0C
B C
B1 1 1 1 0 0 0 0C
A3 = B
B1
C
B 0 0 0 1 0 0 0C
C
B1 1 0 0 1 1 0 0C
B C
@1 0 1 0 1 0 1 0A
1 1 1 1 1 1 1 1
...
„ «
An−1 0
An =
An−1 An−1
A. Mäder 476
Reed-Muller Form: Beispiel
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

x3 x2 x1 f (x)
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0

I Berechnung durch Rechenregeln der Boole’schen Algebra oder


Aufstellen von A3 und Ausmultiplizieren: f (x) = x2 ⊕ x3 x2 x1
I häufig kompaktere Darstellung als DNF oder KNF

A. Mäder 477
Reed-Muller Form: Beispiel (cont.)
8.3 Schaltfunktionen - Normalformen 64-040 Rechnerstrukturen und Betriebssysteme

I f (x3 ; x2 ; x1 ) = {0; 0; 1; 1; 0; 0; 1; 0} (Funktionstabelle)


I Aufstellen von A3 und Ausmultiplizieren

1 0 0 0 0 0 0 0 0 0
0 1 0 1 0 1
B1 1 0 0 0 0 0 0C B0C B0C
B C B C B C
B1 0 1 0 0 0 0 0C
C B1C B1C
B C B C
B
B1 1 1 1 0 0 0 0C B 1CC = B0C
C B C
r = A3 · f = B
B1 0 0 0 1 0 0 ·B
B 0C B0C B
C B C
B0C
C
B1 1 0 0 1 1 0 0C
C B0C B0C
B C B C
B
@1 0 1 0 1 0 1 0A @1A @0A
1 1 1 1 1 1 1 1 0 1

Basisfunktionen: {1; x1 ; x2 ; x2 x1 ; x3 ; x3 x1 ; x3 x2 ; x3 x2 x1 }
führt zur gesuchten RMF:
f (x3 ; x2 ; x1 ) = r · RM(3) = x2 ⊕ x3 x2 x1

A. Mäder 478
Grafische Darstellung: Entscheidungsbäume
8.4 Schaltfunktionen - Entscheidungsbäume und OBDDs 64-040 Rechnerstrukturen und Betriebssysteme

I Darstellung einer Schaltfunktion als Baum/Graph


I jeder Knoten ist einer Variablen zugeordnet
jede Verzweigung entspricht einer if-then-else-Entscheidung

I vollständige Baum realisiert Funktionstabelle


+ einfaches Entfernen/Zusammenfassen redundanter Knoten

I Beispiel: Multiplexer
f (a; b; c) = (a ∧ c) ∨ (b ∧ c)

A. Mäder 479
Entscheidungsbaum: Beispiel
8.4 Schaltfunktionen - Entscheidungsbäume und OBDDs 64-040 Rechnerstrukturen und Betriebssysteme

I f (a; b; c) = (a ∧ c) ∨ (b ∧ c)

I rot: 0-Zweig
grün: 1-Zweig

A. Mäder 480
Entscheidungsbaum: Beispiel (cont.)
8.4 Schaltfunktionen - Entscheidungsbäume und OBDDs 64-040 Rechnerstrukturen und Betriebssysteme

I f (a; b; c) = (a ∧ c) ∨ (b ∧ c)

⇒ Knoten entfernt

I rot: 0-Zweig
grün: 1-Zweig

A. Mäder 481
Reduced Ordered Binary-Decision Diagrams (ROBDD)
Binäres Entscheidungsdiagramm
8.4 Schaltfunktionen - Entscheidungsbäume und OBDDs 64-040 Rechnerstrukturen und Betriebssysteme

I Variante des Entscheidungsbaums


I vorab gewählte Variablenordnung (ordered )
I redundante Knoten werden entfernt (reduced)
I ein ROBDD ist eine Normalform für eine Funktion

I viele praxisrelevante Funktionen sehr kompakt darstellbar


O(n) : : : O(n2 ) Knoten bei n Variablen
I wichtige Ausnahme: n-bit Multiplizierer ist O(2n )
I derzeit das Standardverfahren zur Manipulation von
(großen) Schaltfunktionen
R. E. Bryant: Graph-Based Algorithms for Boolean Function Manipulation, [Bry86]

A. Mäder 482
ROBDD vs. Entscheidungsbaum
8.4 Schaltfunktionen - Entscheidungsbäume und OBDDs 64-040 Rechnerstrukturen und Betriebssysteme

Entscheidungsbaum ROBDD
f = (a b c) ∨ (a b) ∨ (a b) ∨ (a b c)
a
0 1
a
0 1
b b

b b

c c

c c c c

1 0 1 1 1 1 0 1 1 0

A. Mäder 483
ROBDD: Beispiele
8.4 Schaltfunktionen - Entscheidungsbäume und OBDDs 64-040 Rechnerstrukturen und Betriebssysteme

f (x) = x g = (a b) ∨ c Parität p = x1 ⊕ x2 ⊕ : : : xn
x a x1
0 1 0 1 0 1

0 1 b x2 x2

c x3 x3

0 1

xn xn

0 1

A. Mäder 484
ROBDD: Problem der Variablenordnung
8.4 Schaltfunktionen - Entscheidungsbäume und OBDDs 64-040 Rechnerstrukturen und Betriebssysteme

I Anzahl der Knoten oft stark abhängig von der Variablenordnung


f = x1 x2 ∨ x3 x4 ∨ x5 x6 g = x1 x4 ∨ x2 x5 ∨ x3 x6
x1 x1
0 1 0 1

x2 x2 x2

x3 x3 x3 x3 x3

x4 x4 x4 x4 x4

x5 x5 x5

x6 x6

0 1 0 1

A. Mäder 485
Minimierung von Schaltfunktionen
8.5 Schaltfunktionen - Realisierungsaufwand und Minimierung 64-040 Rechnerstrukturen und Betriebssysteme

I mehrere (beliebig viele) Varianten zur Realisierung einer


gegebenen Schaltfunktion bzw. eines Schaltnetzes

Minimierung des Realisierungsaufwandes:


I diverse Kriterien, technologieabhängig

I Hardwarekosten Anzahl der Gatter


I Hardwareeffizienz z.B. NAND statt XOR
I Geschwindigkeit Anzahl der Stufen, Laufzeiten
I Testbarkeit Erkennung von Produktionsfehlern
I Robustheit z.B. ionisierende Strahlung

A. Mäder 486
Algebraische Minimierungsverfahren
8.5 Schaltfunktionen - Realisierungsaufwand und Minimierung 64-040 Rechnerstrukturen und Betriebssysteme

I Vereinfachung der gegebenen Schaltfunktionen durch


Anwendung der Gesetze der Boole’schen Algebra

I im Allgemeinen nur durch Ausprobieren


I ohne Rechner sehr mühsam
I keine allgemeingültigen Algorithmen bekannt

I Heuristische Verfahren
I Suche nach Primimplikanten ( = kürzeste Konjunktionsterme)
I Quine-McCluskey-Verfahren und Erweiterungen

A. Mäder 487
Algebraische Minimierung: Beispiel
8.5 Schaltfunktionen - Realisierungsaufwand und Minimierung 64-040 Rechnerstrukturen und Betriebssysteme

I Ausgangsfunktion in DNF
y (x) = x3 x2 x1 x0 ∨ x3 x2 x1 x0
∨ x3 x2 x1 x0 ∨ x3 x2 x1 x0
∨ x3 x2 x1 x0 ∨ x3 x2 x1 x0
∨ x3 x2 x1 x0 ∨ x3 x2 x1 x0
I Zusammenfassen benachbarter Terme liefert
y (x) = x3 x2 x1 ∨ x3 x2 x0 ∨ x3 x2 x1 ∨ x3 x2 x0 ∨ x3 x2 x1
I aber bessere Lösung ist möglich (weiter Umformen)
y (x) = x2 x1 ∨ x3 x0 ∨ x3 x1

A. Mäder 488
Grafische Minimierungsverfahren
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

I Darstellung einer Schaltfunktion im KV-Diagramm


I Interpretation als disjunktive Normalform (konjunktive NF)

I Zusammenfassen benachbarter Terme durch Schleifen


I alle 1-Terme mit möglichst wenigen Schleifen abdecken
(alle 0-Terme –"– ≡ konjunktive Normalform)
I Ablesen der minimierten Funktion, wenn keine weiteren
Schleifen gebildet werden können

I beruht auf der menschlichen Fähigkeit, benachbarte Flächen


auf einen Blick zu „sehen“
I bei mehr als 6 Variablen nicht mehr praktikabel

A. Mäder 489
Erinnerung: Karnaugh-Veitch Diagramm
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 x1 x0
x3 x2 00 01 11 10 x3 x2 00 01 11 10
00 0 1 3 2 00 0000 0001 0011 0010

01 4 5 7 6 01 0100 0101 0111 0110

11 12 13 15 14 11 1100 1101 1111 1110

10 8 9 11 10 10 1000 1001 1011 1010

I 2D-Diagramm mit 2n = 2ny × 2nx Feldern


I gängige Größen sind: 2×2, 2×4, 4×4
darüber hinaus: mehrere Diagramme der Größe 4×4
I Anordnung der Indizes ist im einschrittigen-Code / Gray-Code
⇒ benachbarte Felder unterscheiden sich gerade um 1 Bit

A. Mäder 490
KV-Diagramme: 2 . . . 4 Variable (2×2, 2×4, 4×4)
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x0 x1 x0
x1 0 1 x3 x2 00 01 11 10
0 00 01 00 0000 0001 0011 0010

1 10 11 01 0100 0101 0111 0110

11 1100 1101 1111 1110

x1 x0 10 1000 1001 1011 1010


x2 00 01 11 10
0 000 001 011 010

1 100 101 111 110

A. Mäder 491
KV-Diagramm für Schaltfunktionen
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

I Funktionswerte in zugehöriges Feld im KV-Diagramm eintragen


I Werte 0 und 1
Don’t-Care „∗“ für nicht spezifizierte Werte wichtig!
I 2D-Äquivalent zur Funktionstabelle

I praktikabel für 3 . . . 6 Eingänge


I fünf Eingänge: zwei Diagramme à 4×4 Felder
sechs Eingänge: vier Diagramme à 4×4 Felder

I viele Strukturen „auf einen Blick“ erkennbar

A. Mäder 492
KV-Diagramm: Zuordnung zur Funktionstabelle
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 y=f(x)
x0
0 0 f(0 0) 0 1
x1
0 1 f(0 1)
0 00 01
1 0 f(1 0)
1 1 f(1 1) 1 10 11

x2 x1 x0 y=f(x)

0 0 0 f(0 0 0)
0 0 1 f(0 0 1) x1 x0
x2 00 01 11 10
0 1 0 f(0 1 0)
0 1 1 f(0 1 1) 0 000 001 011 010
1 0 0 f(1 0 0) 1 100 101 111 110
1 0 1 f(1 0 1)
1 1 0 f(1 1 0)
1 1 1 f(1 1 1)

A. Mäder 493
KV-Diagramm: Eintragen aus Funktionstabelle
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 y=f(x)
x0
0 0 0
x1 0 1
0 1 0
0 0 0
1 0 1
1 1 1 1 1 1

x2 x1 x0 y=f(x)

0 0 0 0
0 0 1 0 x1 x0
x2 00 01 11 10
0 1 0 1
0 1 1 1 0 0 0 1 1
1 0 0 0 1 0 0 0 1
1 0 1 0
1 1 0 1
1 1 1 0

A. Mäder 494
KV-Diagramm: Beispiel
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 x1 x0
x3 x2 00 01 11 10 x3 x2 00 01 11 10
00 0 1 3 2 00 1 0 0 1

01 4 5 7 6 01 0 0 0 0

11 12 13 15 14 11 0 0 1 0

10 8 9 11 10 10 0 0 1 0

I Beispielfunktion in DNF mit vier Termen:


f (x) = (x3 x2 x1 x0 ) ∨ (x3 x2 x1 x0 ) ∨ (x3 x2 x1 x0 ) ∨ (x3 x2 x1 x0 )
I Werte aus Funktionstabelle an entsprechender Stelle ins
Diagramm eintragen

A. Mäder 495
Schleifen: Zusammenfassen benachbarter Terme
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

I benachbarte Felder unterscheiden sich um 1-Bit


I falls benachbarte Terme beide 1 sind ⇒ Funktion hängt
an dieser Stelle nicht von der betroffenen Variable ab
I zugehörige (Min-) Terme können zusammengefasst werden

I Erweiterung auf vier benachbarte Felder (4x1 1x4 2x2)


–"– auf acht –"– (4x2 2x4) usw.
I aber keine Dreier- Fünfergruppen usw. (Gruppengröße 2i )

I Nachbarschaft auch „außen herum“


I mehrere Schleifen dürfen sich überlappen

A. Mäder 496
Schleifen: Ablesen der Schleifen
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 y=f(x) f (x1 ; x0 ) = x1
x0
0 0 0
x1 0 1
0 1 0
0 0 0
1 0 1
1 1 1 1 1 1

x2 x1 x0 y=f(x)
f (x2 ; x1 ; x0 ) = x2 x1 ∨ x1 x0
0 0 0 0
0 0 1 0 x1 x0
x2 00 01 11 10
0 1 0 1
0 1 1 1 0 0 0 1 1
1 0 0 0 1 0 0 0 1
1 0 1 0
1 1 0 1
1 1 1 0

A. Mäder 497
Schleifen: Ablesen der Schleifen (cont.)
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 x1 x0
x3 x2 00 01 11 10 x3 x2 00 01 11 10
00 1 0 0 1 00 1 0 0 1

01 0 0 0 0 01 0 0 0 0

11 0 0 1 0 11 0 0 1 0

10 0 0 1 0 10 0 0 1 0

I insgesamt zwei Schleifen möglich


I grün entspricht (x3 x2 x0 ) = (x3 x2 x1 x0 ) ∨ (x3 x2 x1 x0 )
blau entspricht (x3 x1 x0 ) = (x3 x2 x1 x0 ) ∨ (x3 x2 x1 x0 )
I minimierte disjunktive Form f (x) = (x3 x2 x0 ) ∨ (x3 x1 x0 )

A. Mäder 498
Schleifen: interaktive Demonstration
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

I Minimierung mit KV-Diagrammen [Kor16]


[Link]/research/software/
tams-tools/[Link]
I Auswahl der Funktionalität: Edit function, Edit loops
I Explizite Eingabe: Open Diagram - From Expressions Tipp!
1 Funktion: Maustaste ändert Werte
2 Schleifen: Auswahl und Aufziehen mit Maustaste
I Anzeige des zugehörigen Hardwareaufwands und der Schaltung

I Applet zur Minimierung mit KV-Diagrammen [HenKV]


[Link]/applets/kvd
I Auswahl der Funktionalität: Edit function, Add loop . . .
I Ändern der Ein-/Ausgänge: File - Examples - User define dialog
1 Funktion: Maustaste ändert Werte
2 Schleifen: Maustaste, shift+Maus, ctrl+Maus
I Anzeige des zugehörigen Hardwareaufwands und der Schaltung
I Achtung: andere Anordnung der Eingangsvariablen als im Skript

⇒ andere Anordnung der Terme im KV-Diagramm


A. Mäder 499
KV-Diagramm Editor: Screenshots
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x2 x1 x0 x3
O1

Edit function

Inputs: 4 Outputs: 1

O1

x0

1 0 1 0

1 1 1 0
x2

1 1 1 0
x3

1 0 0 0

x1
Costs: 10 gates with 45 inputs

Eingabe der Schaltfunktion

A. Mäder 500
KV-Diagramm Editor: Screenshots (cont.)
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x2 x1 x0 x3
O1

Edit loops

Inputs: 4 Outputs: 1

O1

DNF KNF

x0

1 0 1 0

1 1 1 0
x2

1 1 1 0
x3

1 0 0 0

x1
Costs: 6 gates with 22 inputs

Minimierung durch Schleifenbildung

A. Mäder 501
KV-Diagramm Editor: Screenshots (cont.)
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x2 x1 x0 x3
O1

Edit loops

Inputs: 4 Outputs: 1

O1

DNF KNF

x0

1 0 1 0

1 1 1 0
x2

1 1 1 0
x3

1 0 0 0

x1
Costs: 4 gates with 10 inputs

I Hardware-Kosten: # Gatter, Eingänge

A. Mäder 502
KV-Diagramm Editor: Screenshots (cont.)
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x2 x1 x0 x3
O1

Edit loops

Inputs: 4 Outputs: 1

O1

DNF KNF

x0

1 0 1 0

1 1 1 0
x2

1 1 1 0
x3

1 0 0 0

x1
Costs: 4 gates with 11 inputs

Konjunktive Form

A. Mäder 503
Don’t-Care Terme
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

I in der Praxis: viele Schaltfunktionen unvollständig definiert


weil bestimmte Eingangskombinationen nicht vorkommen
I zugehörige Terme als Don’t-Care markieren
typisch: Sternchen „∗“ in Funktionstabelle/KV-Diagramm

I solche Terme bei Minimierung nach Wunsch auf 0/1 setzen


I Schleifen dürfen Don’t-Cares enthalten
I Schleifen möglichst groß

A. Mäder 504
KV-Diagramm Editor: 6 Variablen, Don’t-Cares
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x4 x5 x2 x1 x0 x3
O1

Edit function

Inputs: 6 Outputs: 1

O1

x4

x0 x0

0 1 0 0 0 0 0 0

0 1 1 * * 0 * *
x2 x2
0 * 0 0 0 0 * 0
x3 x3
1 1 0 * 1 0 0 *
x1 x1

x0 x0

* 1 * * * * * *

0 0 * * 0 0 * *
x5 x2 x2
* 0 0 0 0 * 0 0
x3 x3
* 0 0 * * 0 * 1
x1 x1
Costs: 9 gates with 56 inputs

A. Mäder 505
KV-Diagramm Editor: 6 Variablen, Don’t-Cares (cont.)
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

x4 x5 x2 x1 x0 x3
O1

Edit loops

Inputs: 6 Outputs: 1

O1

DNF KNF

x4

x0 x0

0 1 0 0 0 0 0 0

0 1 1 * * 0 * *
x2 x2
0 * 0 0 0 0 * 0
x3 x3
1 1 0 * 1 0 0 *
x1 x1

x0 x0

* 1 * * * * * *

0 0 * * 0 0 * *
x5 x2 x2
* 0 0 0 0 * 0 0
x3 x3
* 0 0 * * 0 * 1
x1 x1
Costs: 5 gates with 17 inputs

A. Mäder 506
Quine-McCluskey-Algorithmus
8.6 Schaltfunktionen - Minimierung mit KV-Diagrammen 64-040 Rechnerstrukturen und Betriebssysteme

I Algorithmus zur Minimierung einer Schaltfunktion


I Notation der Terme in Tabellen, n Variablen
I Prinzip entspricht der Minimierung im KV-Diagramm
aber auch geeignet für mehr als sechs Variablen
I Grundlage gängiger Minimierungsprogramme

I Sortieren der Terme nach Hamming-Abstand


I Erkennen der unverzichtbaren Terme („Primimplikanten“)
I Aufstellen von Gruppen benachbarter Terme (mit Distanz 1)
I Zusammenfassen geeigneter benachbarter Terme

Becker, Molitor: Technische Informatik – eine einführende Darstellung [BM08]

Schiffmann, Schmitz: Technische Informatik I [SS04]

A. Mäder 507
Literatur
8.7 Schaltfunktionen - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BM08] B. Becker, P. Molitor: Technische Informatik –


eine einführende Darstellung. 2. Auflage, Oldenbourg, 2008.
ISBN 978–3–486–58650–3
[SS04] W. Schiffmann, R. Schmitz: Technische Informatik 1 –
Grundlagen der digitalen Elektronik.
5. Auflage, Springer-Verlag, 2004. ISBN 978–3–540–40418–7
[WH03] H.D. Wuttke, K. Henke: Schaltsysteme –
Eine automatenorientierte Einführung.
Pearson Studium, 2003. ISBN 978–3–8273–7035–8
[Bry86] R.E. Bryant: Graph-Based Algorithms for Boolean
Function Manipulation. in: IEEE Trans. Computers 35 (1986),
Nr. 8, S. 677–691

A. Mäder 508
Literatur (cont.)
8.7 Schaltfunktionen - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Kor16] Laszlo Korte: TAMS Tools for eLearning.


Universität Hamburg, FB Informatik, 2016, BSc Thesis. tams.
[Link]/research/software/tams-tools
[HenKV] N. Hendrich: KV-Diagram Simulation.
Universität Hamburg, FB Informatik, Lehrmaterial.
[Link]/applets/kvd
[Hei05] K. von der Heide: Vorlesung: Technische Informatik 1 —
interaktives Skript. Universität Hamburg, FB Informatik, 2005.
[Link]/lectures/2004ws/
vorlesung/t1

A. Mäder 509
Gliederung
9 Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
Definition
Schaltsymbole und Schaltpläne
Hades: Editor und Simulator
Logische Gatter
Inverter, AND, OR

A. Mäder 510
Gliederung (cont.)
9 Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

XOR und Parität


Multiplexer
Einfache Schaltnetze
Siebensegmentanzeige
Schaltnetze für Logische und Arithmetische Operationen
Addierer
Multiplizierer
Prioritätsencoder
Barrel-Shifter
ALU (Arithmetisch-Logische Einheit)
Zeitverhalten von Schaltungen
Hazards
Literatur
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture

A. Mäder 511
Gliederung (cont.)
9 Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 512
Schaltnetze: Definition
9.1 Schaltnetze - Definition 64-040 Rechnerstrukturen und Betriebssysteme

I Schaltnetz oder auch


kombinatorische Schaltung (combinational logic circuit):
ein digitales System mit n Eingängen (b1 ; b2 ; : : : ; bn ) und
m-Ausgängen (y1 ; y2 ; : : : ; ym ), dessen Ausgangsvariablen
zu jedem Zeitpunkt nur von den aktuellen Werten der
Eingangsvariablen abhängen

Beschreibung als Vektorfunktion ~y = F (~b)

I Bündel von Schaltfunktionen (mehrere SF)


I ein Schaltnetz darf keine Rückkopplungen enthalten

A. Mäder 513
Schaltnetze: Definition (cont.)
9.1 Schaltnetze - Definition 64-040 Rechnerstrukturen und Betriebssysteme

I Begriff: „Schaltnetz“
I technische Realisierung von Schaltfunktionen / Funktionsbündeln
I Struktur aus einfachen Gatterfunktionen:
triviale Funktionen mit wenigen (2 . . . 4) Eingängen
I in der Praxis können Schaltnetze nicht statisch betrachtet
werden: Gatterlaufzeiten spielen eine Rolle

A. Mäder 514
Elementare digitale Schaltungen
9.2 Schaltnetze - Schaltsymbole und Schaltpläne 64-040 Rechnerstrukturen und Betriebssysteme

I Schaltsymbole
I Grundgatter (Inverter, AND, OR usw.)
I Kombinationen aus mehreren Gattern

I Schaltnetze (mehrere Ausgänge)


I Beispiele

I Arithmetisch/Logische Operationen

A. Mäder 515
Schaltpläne (schematics)
9.2 Schaltnetze - Schaltsymbole und Schaltpläne 64-040 Rechnerstrukturen und Betriebssysteme

I standardisierte Methode zur Darstellung von Schaltungen


I genormte Symbole für Komponenten
I Spannungs- und Stromquellen, Messgeräte
I Schalter und Relais
I Widerstände, Kondensatoren, Spulen
I Dioden, Transistoren (bipolar, MOS)
I Gatter: logische Grundoperationen (UND, ODER usw.)
I Flipflops: Speicherglieder
I Verbindungen
I Linien für Drähte (Verbindungen)
I Anschlusspunkte für Drahtverbindungen
I dicke Linien für n-bit Busse, Anzapfungen usw.
I komplexe Bausteine, hierarchisch zusammengesetzt

A. Mäder 516
Schaltsymbole
9.2 Schaltnetze - Schaltsymbole und Schaltpläne 64-040 Rechnerstrukturen und Betriebssysteme

Schaltzeichen Benennung
DIN 40700
..
(ab 1976) Fruher in USA

UND - Glied
&
(AND)

ODER - Glied
>
_1
(OR)

NICHT - Glied
1
(NOT)

Exklusiv-Oder - Glied
=1
(Exclusive-OR, XOR)

Aquivalenz - Glied
=
(Logic identity)

UND - Glied mit negier-


&
tem Ausgang (NAND)

ODER - Glied mit negier-


>
_1
tem Ausgang (NOR)

Negation eines Eingangs

Negation eines Ausgangs


Schiffmann, Schmitz:
Technische Informatik 1 [SS04]

A. Mäder 517
Logische Gatter
9.2 Schaltnetze - Schaltsymbole und Schaltpläne 64-040 Rechnerstrukturen und Betriebssysteme

I Logisches Gatter (logic gate): die Bezeichnung für die


Realisierung einer logischen Grundfunktion als gekapselte
Komponente (in einer gegebenen Technologie)

I 1 Eingang: Treiberstufe/Verstärker und Inverter (Negation)


I 2 Eingänge: AND/OR, NAND/NOR, XOR, XNOR
I 3 und mehr Eingänge: AND/OR, NAND/NOR, Parität
I Multiplexer

I vollständige Basismenge erforderlich (mindestens 1 Gatter)


I in Halbleitertechnologie sind NAND/NOR besonders effizient

A. Mäder 518
Schaltplan-Editor und -Simulator
9.3 Schaltnetze - Hades: Editor und Simulator 64-040 Rechnerstrukturen und Betriebssysteme

Spielerischer Zugang zu digitalen Schaltungen:


I mit Experimentierkasten oder im Logiksimulator
I interaktive Simulation erlaubt direktes Ausprobieren
I Animation und Visualisierung der logischen Werte
I „entdeckendes Lernen“

I Diglog: [Link]/chipmunk [Laz]


I Hades: [HenHA]
[Link]/applets/hades/webdemos
[Link]/applets/hades/webdemos/[Link]
I Demos laufen im Browser (Java erforderlich)
I Grundschaltungen, Gate-Level Circuits . . .
einfache Prozessoren . . .

A. Mäder 519
Hades: Grundkomponenten
9.3 Schaltnetze - Hades: Editor und Simulator 64-040 Rechnerstrukturen und Betriebssysteme

I Vorführung des Simulators


Hades Demo: 00-intro/00-welcome/chapter

I Eingang: Schalter + Anzeige („Ipin“)


I Ausgang: Anzeige („Opin“)
I Taktgenerator
I PowerOnReset BUFFER
INVERTER

I Anzeige / Leuchtdiode i3
A Y
i13 i16 i22

I Siebensegmentanzeige
...
AND (2 inputs) NAND (2 inputs)
A A
i5 i19
Y Y
i11 i21
B B
i6 i20

OR (2 inputs) NOR (2 inputs)


A A
i8 i9
Y Y
i24 i23
[HenHA] Hades Demo: 10-gates/00-gates/basic i7
B
i14
B

A. Mäder 520
Hades: glow-mode Visualisierung
9.3 Schaltnetze - Hades: Editor und Simulator 64-040 Rechnerstrukturen und Betriebssysteme

I Farbe einer Leitung codiert den logischen Wert


I Einstellungen sind vom Benutzer konfigurierbar

I Defaultwerte
blau glow-mode ausgeschaltet
hellgrau logisch 0
rot logisch 1
orange tri-state Z ⇒ kein Treiber (bidirektionale Busse)
magenta undefined X ⇒ Kurzschluss, ungültiger Wert
cyan unknown U ⇒ nicht initialisiert

A. Mäder 521
Hades: Bedienung
9.3 Schaltnetze - Hades: Editor und Simulator 64-040 Rechnerstrukturen und Betriebssysteme

I Menü: Anzeigeoptionen, Edit-Befehle usw.

I Editorfenster mit Popup-Menü für häufige Aktionen


I Rechtsklick auf Komponenten öffnet Eigenschaften/Parameter
(property-sheets)
I optional „tooltips“ (enable im Layer-Menü)

I Simulationssteuerung: run, pause, rewind


I Anzeige der aktuellen Simulationszeit

I Details siehe Hades-Webseite: Kurzreferenz, Tutorial


[Link]/applets/hades/webdemos/[Link]

A. Mäder 522
Gatter: Verstärker, Inverter, AND, OR
9.4.1 Schaltnetze - Logische Gatter - Inverter, AND, OR 64-040 Rechnerstrukturen und Betriebssysteme

BUFFER
INVERTER

i3 i13 i16 i22

AND (2 inputs) NAND (2 inputs)

i5 i19
i11 i21
i6 i20

OR (2 inputs) NOR (2 inputs)

i8 i9
i24 i23
i7 i14

[HenHA] Hades Demo: 10-gates/00-gates/basic

A. Mäder 523
Grundschaltungen: De Morgan Regel
9.4.1 Schaltnetze - Logische Gatter - Inverter, AND, OR 64-040 Rechnerstrukturen und Betriebssysteme

AND (2 inputs)

s
AND
d

f
AND_deMorgan
g

OR (2 inputs)

w
OR
e

r
OR_deMorgan
t

[HenHA] Hades Demo: 10-gates/00-gates/de-morgan

A. Mäder 524
Gatter: AND/NAND mit zwei, drei, vier Eingängen
9.4.1 Schaltnetze - Logische Gatter - Inverter, AND, OR 64-040 Rechnerstrukturen und Betriebssysteme

BUFFER
INVERTER

i3 BUF i16 INV

AND (2 inputs) NAND (2 inputs)

i5 i19
AND2 NAND2
i6 i20

AND (3 inputs) NAND (3 inputs)


i8 i9

i7 AND3 i14 NAND3

i28 i21

AND (4 inputs) NAND (4 inputs)


i29 i33

i30 AND4 i34 NAND4

i31 i35

i32 i36
[HenHA] Hades Demo: 10-gates/00-gates/and

A. Mäder 525
Gatter: AND mit zwölf Eingängen
9.4.1 Schaltnetze - Logische Gatter - Inverter, AND, OR 64-040 Rechnerstrukturen und Betriebssysteme

A0 B0

A1 B1

A2 B2

A3 B3

A4 B4

A5 B5
Y Z
A6 B6

A7 B7

A8 B8

A9 B9

A10 B10

A11 B11
[HenHA] Hades Webdemo:
10-gates/00-gates/andbig

AND3-AND4 NAND3-NOR4 (De Morgan)

I in der Regel max. 4 Eingänge pro Gatter


Grund: elektrotechnische Nachteile

A. Mäder 526
Gatter: OR/NOR mit zwei, drei, vier Eingängen
9.4.1 Schaltnetze - Logische Gatter - Inverter, AND, OR 64-040 Rechnerstrukturen und Betriebssysteme

BUFFER
INVERTER

i3 BUF i16 INV

OR (2 inputs) NOR (2 inputs)

i5 i19
OR2 NOR2
i6 i20

OR (3 inputs) NOR (3 inputs)


i8 i9

i7 OR3 i14 NOR3

i28 i21

OR (4 inputs) NOR (4 inputs)


i29 i33

i30 OR4 i34 NOR4

i31 i35

i32 i36
[HenHA] Hades Demo: 10-gates/00-gates/or

A. Mäder 527
Komplexgatter
9.4.1 Schaltnetze - Logische Gatter - Inverter, AND, OR 64-040 Rechnerstrukturen und Betriebssysteme

AOI21 (And-Or-Invert) OAI21 (Or-And-Invert)

A1 A1
a f

A2 A2
s g
Y
AOI21 OAI21
B1 B1
d h

AOI33 (And-Or-Invert) OAI32 (Or-And-Invert)

1 y

A1 A1
2 u
A2 A2

A3 A3
3 i
Y Y
AOI33 OAI32
B1 B1
4 o
B2
B3 B2
5 p

6
[HenHA] Hades Demo: 10-gates/00-gates/complex

I in CMOS-Technologie besonders günstig realisierbar


entsprechen vom Aufwand nur einem Gatter

A. Mäder 528
Gatter: XOR und XNOR
9.4.2 Schaltnetze - Logische Gatter - XOR und Parität 64-040 Rechnerstrukturen und Betriebssysteme

BUFFER
INVERTER

A i13 B i22

AND (2 inputs) XOR (2 inputs)

S F
i11 i21
D G

OR (2 inputs) XNOR (2 inputs)

W R
i24 i23
E T

[HenHA] Hades Demo: 10-gates/00-gates/xor

A. Mäder 529
XOR und drei Varianten der Realisierung
9.4.2 Schaltnetze - Logische Gatter - XOR und Parität 64-040 Rechnerstrukturen und Betriebssysteme
a

Symbol
XOR_ab
I b

XOR_cd

I AND-OR d

NAND-NAND
XOR_ef

I
f

g
XOR_gh

I mit Multiplexer h

[HenHA] Hades Demo: 10-gates/11-xor/xor-variants

A. Mäder 530
XOR zur Berechnung der Parität
9.4.2 Schaltnetze - Logische Gatter - XOR und Parität 64-040 Rechnerstrukturen und Betriebssysteme

I Parität, siehe „Codierung – Fehlererkennende Codes“

I 4-bit Parität: d3 ⊕ d2 ⊕ d1 ⊕ d0
d3

d2

d1

d0

[HenHA] Hades Demo: 10-gates/12-parity/parity4

A. Mäder 531
XOR zur Berechnung der Parität (cont.)
9.4.2 Schaltnetze - Logische Gatter - XOR und Parität 64-040 Rechnerstrukturen und Betriebssysteme

I 8-bit, bzw. 10-bit: Umschaltung odd/even


Kaskadierung über c-Eingang
d0

d1

d2

d3

d4

d5

d6
o
d7

odd

[HenHA] Hades Demo: 10-gates/12-parity/parity8

A. Mäder 532
2:1-Multiplexer
9.4.3 Schaltnetze - Logische Gatter - Multiplexer 64-040 Rechnerstrukturen und Betriebssysteme

Umschalter zwischen zwei Dateneingängen („Wechselschalter“)


I ein Steuereingang: s
zwei Dateneingänge: a1 und a0
ein Datenausgang: y
I wenn s = 1 wird a1 zum Ausgang y durchgeschaltet
wenn s = 0 wird a0 –"–
s a1 a0 y
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 1

A. Mäder 533
2:1-Multiplexer (cont.)
9.4.3 Schaltnetze - Logische Gatter - Multiplexer 64-040 Rechnerstrukturen und Betriebssysteme

I kompaktere Darstellung der Funktionstabelle durch


Verwendung von ∗ (don’t care) Termen

s a1 a0 y
0 * 0 0
0 * 1 1
1 0 * 0
1 1 * 1

s a1 a0 y
0 * a0 a0
1 a1 * a1

I wenn s = 0 hängt der Ausgangswert nur von a0 ab


wenn s = 1 –"– a1 ab

A. Mäder 534
n:1-Multiplexer
9.4.3 Schaltnetze - Logische Gatter - Multiplexer 64-040 Rechnerstrukturen und Betriebssysteme

Umschalten zwischen mehreren Dateneingängen


I dlog2 (n)e Steuereingänge: sm ; : : : ; s0
n Dateneingänge: an−1 ; : : : ; a0
ein Datenausgang: y
s1 s0 a3 a2 a1 a0 y
0 0 * * * 0 0
0 0 * * * 1 1
0 1 * * 0 * 0
0 1 * * 1 * 1
1 0 * 0 * * 0
1 0 * 1 * * 1
1 1 0 * * * 0
1 1 1 * * * 1

A. Mäder 535
2:1 und 4:1 Multiplexer
9.4.3 Schaltnetze - Logische Gatter - Multiplexer 64-040 Rechnerstrukturen und Betriebssysteme

[f] A1 MUX 2:1


1

Y10 Y
[d] A0
0

SEL

[s] Select

[6] B3

MUX 4:1
[5] B2
3

Y3210
B1 Y
[4]
0
SEL
[3] B0

[2] Select1

Select0
[1] [HenHA] Hades Demo: 10-gates/40-mux-demux/mux21-mux41

I keine einheitliche Anordnung der Dateneingänge in Schaltplänen:


höchstwertiger Eingang manchmal oben, manchmal unten
A. Mäder 536
Multiplexer und Demultiplexer
9.4.3 Schaltnetze - Logische Gatter - Multiplexer 64-040 Rechnerstrukturen und Betriebssysteme

MUX 2:1
clk-1Hz
1

Y
SlowOrFast
0
clk-0.25Hz
SEL

Select

MUX 4:1
1 3

Selection

Y
0
0
SEL
Select1

Select0

Y3
DEMUX 1:4
Y2

Y1
D

Y0

SelectDemux1 SEL

SelectDemux0

[HenHA] Hades Demo: 10-gates/40-mux-demux/mux-demux

A. Mäder 537
8-bit Multiplexer: Integrierte Schaltung 74151
9.4.3 Schaltnetze - Logische Gatter - Multiplexer 64-040 Rechnerstrukturen und Betriebssysteme

STROBE

[s]

[0] D0

[1] D1

[2] D2

[3] D3

[4] D4

[5] D5

[6] D6

[HenHA] Hades Webdemo:


10-gates/40-mux-demux/SN74151
[7] D7

I Schaltplan aus Gattern


drei Steuereingänge: a, b, c
[a] A

I
[b] B
acht Dateneingänge: d7 ; : : : ; d0
[c] C ein Kontrollsignal (Maskierung)

A. Mäder 538
16-bit Demultiplexer: Integrierte Schaltung 74154
9.4.3 Schaltnetze - Logische Gatter - Multiplexer 64-040 Rechnerstrukturen und Betriebssysteme

G1/
I vier Steuereingänge: a, b, c, d
ein Dateneingang: g1 ⊕ g2
G2/

A
16 Datenausgänge: y0 , . . . , y15

Y0 Y1 Y2 Y3

Y4 Y5 Y6 Y7

Y8 Y9 Y10 Y11

Y12 Y13 Y14 Y15

[HenHA] Hades Demo: 10-gates/40-mux-demux/SN74154

A. Mäder 539
16-bit Demultiplexer: 74154 als Adressdecoder
9.4.3 Schaltnetze - Logische Gatter - Multiplexer 64-040 Rechnerstrukturen und Betriebssysteme

0 1 2 3 [d]
[a] 4 5 6 7
8 9 A B
data
C D E F
- +

Y15

Y14

Y13

Y12

Y11

'154 Y10

Y9

Y8

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

[HenHA] Hades Demo: 10-gates/40-mux-demux/demo74154

A. Mäder 540
Beispiele für Schaltnetze
9.5 Schaltnetze - Einfache Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

I Schaltungen mit mehreren Ausgängen


I Bündelminimierung der einzelnen Funktionen

ausgewählte typische Beispiele


I „Würfel“-Decoder
I Umwandlung vom Dual-Code in den Gray-Code
I (7,4)-Hamming-Code: Encoder und Decoder
I Siebensegmentanzeige

A. Mäder 541
Beispiel: „Würfel“-Decoder
9.5 Schaltnetze - Einfache Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

Visualisierung eines Würfels mit sieben LEDs


u u u u u u uuu x1 x2 x 3
u u u x4
u u u u u u uuu x5 x6 x7

I Eingabewert von 0 . . . 6
I Anzeige ein bis sechs Augen: eingeschaltet
Wert b2 b1 b0 x1 x2 x3 x4 x5 x6 x7
0 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 1 0 0 0
2 0 1 0 1 0 0 0 0 0 1
3 0 1 1 1 0 0 1 0 0 1
4 1 0 0 1 0 1 0 1 0 1
5 1 0 1 1 0 1 1 1 0 1
6 1 1 0 1 1 1 0 1 1 1

A. Mäder 542
Beispiel: „Würfel“-Decoder (cont.)
9.5 Schaltnetze - Einfache Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

[d] b2

[s] b1

[a] b0

[HenHA] Hades Demo: 10-gates/10-wuerfel/wuerfel

I Anzeige wie beim Würfel: ein bis sechs Augen


I Minimierung ergibt:
x1 = x7 = b2 ∨ b1 links oben, rechts unten
x2 = x6 = b2 ∧ b1 mitte oben, mitte unten
x3 = x5 = b2 rechts oben, links unten
x4 = b0 Zentrum

A. Mäder 543
Beispiel: Umwandlung vom Dualcode in den Graycode
XOR benachbarter Bits
9.5 Schaltnetze - Einfache Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

G3

B3

0 1 2 3
4 5 6 7 G2
8 9 A B
C D E F
- + B2

[a] G1

B1

G0

B0

binary code 4-bit dual to Gray Gray code


code converter

[HenHA] Hades Demo: 10-gates/15-graycode/dual2gray

A. Mäder 544
Beispiel: Umwandlung vom Graycode in den Dualcode
XOR-Kette
9.5 Schaltnetze - Einfache Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

G3

B3

0 1 2 3
4 5 6 7 G2
8 9 A B
C D E F
- + B2

[a] G1

B1

G0

B0

Gray-Code 4-bit Gray- to dual- Dual-Code


code converter

[HenHA] Hades Demo: 10-gates/15-graycode/gray2dual

A. Mäder 545
(7,4)-Hamming-Code: Encoder und Decoder
9.5 Schaltnetze - Einfache Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

I Encoder linke Seite


I vier Eingabebits
I Hamming-Encoder erzeugt drei Paritätsbits
I Übertragungskanal Mitte
I Übertragung von sieben Codebits
I Einfügen von Übertragungsfehlern durch
Invertieren von Codebits mit XOR-Gattern
I Decoder und Fehlerkorrektur rechte Seite
I Decoder liest die empfangenen sieben Bits
I Syndrom-Berechnung mit XOR-Gattern und
Anzeige erkannter Fehler
I Korrektur gekippter Bits rechts oben

A. Mäder 546
(7,4)-Hamming-Code: Encoder und Decoder (cont.)
9.5 Schaltnetze - Einfache Schaltnetze 64-040 Rechnerstrukturen und Betriebssysteme

Inputs (4 bit) Set channel faults Channel (7 bits) Outputs (4 bit)


i0

i21 I1

i1

i25 I2

i2

i26 I3

i3

i27 I4

i28

i29

i30

Encoder

Decoder with status LEDs

[HenHA] Hades Demo: 10-gates/50-hamming/hamming

A. Mäder 547
Siebensegmentanzeige
9.6 Schaltnetze - Siebensegmentanzeige 64-040 Rechnerstrukturen und Betriebssysteme

I sieben einzelne Leuchtsegmente (z.B. Leuchtdioden)


a
I Anzeige stilisierter Ziffern von 0 bis 9 f
g b
I auch für Hex-Ziffern: A, b, C, d, E, F
e
d c

I sieben Schaltfunktionen, je eine pro Ausgang


I Umcodierung von 4-bit Dualwerten in geeignete Ausgangswerte
I Segmente im Uhrzeigersinn: a (oben) bis f , g innen

I eingeschränkt auch als alphanumerische Anzeige für Ziffern und


(einige) Buchstaben
− gemischt Groß- und Kleinbuchstaben
− Probleme mit M, N usw.

A. Mäder 548
Siebensegmentanzeige: Funktionen
9.6 Schaltnetze - Siebensegmentanzeige 64-040 Rechnerstrukturen und Betriebssysteme

I Funktionen für Hex-Anzeige, 0 . . . F


a
0123456789AbCdEF f
a = 1011011111100011 g b

b = 1111100111100100 e
c
d
c = 1101111111110100
d = 1011011011011110
e = 1010001010111111
f = 1000111111110011
g = 0011111011111111

I für Ziffernanzeige mit Don’t Care-Termen


a = 1011011111∗∗∗∗∗∗
b = usw.

A. Mäder 549
Siebensegmentanzeige: Bündelminimierung
9.6 Schaltnetze - Siebensegmentanzeige 64-040 Rechnerstrukturen und Betriebssysteme

I zum Beispiel mit sieben KV-Diagrammen . . .


I dabei versuchen, gemeinsame Terme zu finden und zu nutzen

Minimierung als Übungsaufgabe?


I nächste Folie zeigt Lösung aus Schiffmann, Schmitz [SS04]

I als mehrstufige Schaltung ist günstigere Lösung möglich


Knuth: AoCP, Volume 4, Fascicle 0, 7.1.2, Seite 112ff [Knu08]

A. Mäder 550
Siebensegmentdecoder: Ziffern 0 . . . 9
9.6 Schaltnetze - Siebensegmentanzeige 64-040 Rechnerstrukturen und Betriebssysteme

A3
[f]
A2
[d]
A1
[s]
A0
[a]

(A3..A0)

[HenHA] Hades Demo: 10-gates/20-sevensegment/sevensegment

A. Mäder 551
Siebensegmentdecoder: Integrierte Schaltung 7449
9.6 Schaltnetze - Siebensegmentanzeige 64-040 Rechnerstrukturen und Betriebssysteme

[k] ndark

[f] A3
'49
[d] A2

[s] A1

[a] A0

(A3..A0)

[HenHA] Hades Demo: 10-gates/20-sevensegment/SN7449-demo

I Beispiel für eine integrierte Schaltung (IC)


I Anzeige von 0 . . . 9, Zufallsmuster für A . . . F, „Dunkeltastung“

A. Mäder 552
Siebensegmentanzeige: mehrstufige Realisierung
9.6 Schaltnetze - Siebensegmentanzeige 64-040 Rechnerstrukturen und Betriebssysteme

Minimale Anzahl der Gatter für die Schaltung?


I Problem vermutlich nicht optimal lösbar (nicht tractable)
I Heuristik basierend auf „häufig“ verwendeten Teilfunktionen
I Eingänge x1 ; x2 ; x3 ; x4 , Ausgänge a; : : : ; g
x5 = x2 ⊕ x3 x13 = x1 ⊕ x7 a = x20 = x14 ∧ x19
x6 = x1 ∧ x4 x14 = x5 ⊕ x6 b = x21 = x7 ⊕ x12
x7 = x3 ∧ x6 x15 = x7 ∨ x12 c = x22 = x8 ∧ x15
x8 = x1 ⊕ x2 x16 = x1 ∨ x5 d = x23 = x9 ∧ x13
x9 = x4 ⊕ x5 x17 = x5 ∨ x6 e = x24 = x6 ∨ x18
x10 = x7 ∧ x8 x18 = x9 ∧ x10 f = x25 = x8 ∧ x17
x11 = x9 ⊕ x10 x19 = x3 ∧ x9 g = x26 = x7 ∨ x16
x12 = x5 ∧ x11
D. E. Knuth: AoCP, Volume 4, Fascicle 0, Kap 7.1.2, Seite 113 [Knu08]

A. Mäder 553
Logische und arithmetische Operationen
9.7 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I Halb- und Volladdierer


I Addierertypen
I Ripple-Carry
I Carry-Lookahead

I Multiplizierer
I Quadratwurzel

I Barrel-Shifter
I ALU

A. Mäder 554
Halbaddierer
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I Halbaddierer: berechnet 1-bit Summe s und Übertrag co


(carry-out) von zwei Eingangsbits a und b

a b co s
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
co = a ∧ b
s = a⊕b

A. Mäder 555
Volladdierer
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I Volladdierer: berechnet 1-bit Summe s und Übertrag co (carry-out)


von zwei Eingangsbits a, b sowie Eingangsübertrag ci (carry-in)
a b ci co s
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
co = ab ∨ aci ∨ bci = (ab) ∨ (a ∨ b)ci
s = a ⊕ b ⊕ ci

A. Mäder 556
Schaltbilder für Halb- und Volladdierer
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

1-bit half-adder: (COUT,S) = (A+B)

cout

b
s
a

1-bit full-adder: (COUT,S) = (A+B+Cin)

COUT

A S

CIN

[HenHA] Hades Demo: 20-arithmetic/10-adders/halfadd-fulladd

A. Mäder 557
n-bit Addierer
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I Summe: sn = an ⊕ bn ⊕ cn
s 0 = a0 ⊕ b 0
s 1 = a1 ⊕ b 1 ⊕ c 1
s 2 = a2 ⊕ b 2 ⊕ c 2
...
sn = an ⊕ bn ⊕ cn

I Übertrag: cn+1 = (an bn ) ∨ (an ∨ bn )cn


c1 = (a0 b0 )
c2 = (a1 b1 ) ∨ (a1 ∨ b1 )c1
c3 = (a2 b2 ) ∨ (a2 ∨ b2 )c2
...
cn+1 = (an bn ) ∨ (an ∨ bn )cn

A. Mäder 558
n-bit Addierer (cont.)
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I n-bit Addierer theoretisch als zweistufige Schaltung realisierbar


I direkte und negierte Eingänge, dann AND-OR Netzwerk
I Aufwand steigt exponentiell mit n an,
für Ausgang n sind 2(2n−1) Minterme erforderlich
⇒ nicht praktikabel

I Problem: Übertrag (carry)


cn+1 = (an bn ) ∨ (an ∨ bn )cn
rekursiv definiert

A. Mäder 559
n-bit Addierer (cont.)
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

Diverse gängige Alternativen für Addierer


I Ripple-Carry
lineare Struktur
I

+ klein, einfach zu implementieren


− langsam, Laufzeit O(n)
I Carry-Lookahead (CLA)
I Baumstruktur

+ schnell
− teuer (Flächenbedarf der Hardware)
I Mischformen: Ripple-block CLA, Block CLA, Parallel Prefix
I andere Ideen: Carry-Select, Conditional Sum, Carry-Skip
...

A. Mäder 560
Ripple-Carry Adder
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I Kaskade aus n einzelnen Volladdierern


I Carry-out von Stufe i treibt Carry-in von Stufe i + 1
I Gesamtverzögerung wächst mit der Anzahl der Stufen als O(n)

I Addierer in Prozessoren häufig im kritischen Pfad


I möglichst hohe Performanz ist essenziell
I Ripple-Carry in CMOS-Technologie bis ca. 10-bit geeignet
I bei größerer Wortbreite gibt es effizientere Schaltungen

I Überlauf-Erkennung: co (n) 6= co (n − 1)

A. Mäder 561
Ripple-Carry Adder: 4-bit
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

A3

A2

A1

A0

VA

VA

VA

B3 VA
B2

B1

B0

Schiffmann, Schmitz: Technische Informatik I [SS04]

A. Mäder 562
Ripple-Carry Adder: Hades-Beispiel mit Verzögerungen
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I Kaskade aus acht einzelnen Volladdierern


B7 B6 B5 B4 B3 B2 B1 B0 CIN

A7 A6 A5 A4 A3 A2 A1 A0

A B A B A B A B A B A B A B A B
ADD ADD ADD ADD ADD ADD ADD ADD
CO CI CO CI CO CI CO CI CO CI CO CI CO CI CO CI
SUM SUM SUM SUM SUM SUM SUM SUM

COUT S7 S6 S5 S4 S3 S2 S1 S0

[HenHA] Hades Demo: 20-arithmetic/10-adders/ripple

I Gatterlaufzeiten in der Simulation bewusst groß gewählt


I Ablauf der Berechnung kann interaktiv beobachtet werden
I alle Addierer arbeiten parallel
I aber Summe erst fertig, wenn alle Stufen durchlaufen sind

A. Mäder 563
Subtrahierer
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

Zweierkomplement
I (A − B) ersetzt durch Addition des 2-Komplements von B
I 2-Komplement: Invertieren aller Bits und Addition von Eins
I Carry-in Eingang des Addierers bisher nicht benutzt

Subtraktion quasi „gratis“ realisierbar


I normalen Addierer verwenden
I Invertieren der Bits von B (1-Komplement)
I Carry-in Eingang auf 1 setzen (Addition von 1)
I Resultat ist A + B + 1 = A − B

A. Mäder 564
Subtrahierer: Beispiel 7483 – 4-bit Addierer
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

A3

Cout
A2

A1
Out3
A0
Out2

B3 Out1

B2
=1 '83 Out0

B1

=1
B0

Cmpl Cin F
=1 0 0 A+B
0 1 A+B+1 (A++)
1 0 A-B-1 (A--)
1 1 A-B
=1

cmpl

Cin

Schiffmann, Schmitz: Technische Informatik I [SS04]

A. Mäder 565
Schnelle Addierer
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I Addierer in Prozessoren häufig im kritischen Pfad


I möglichst hohe Performanz ist essenziell
⇒ bestimmt Taktfrequenz

I Carry-Select Adder: Gruppen von Ripple-Carry


I Carry-Lookahead Adder: Baumstruktur zur Carry-Berechnung
I ...

I über 10 Addierer „Typen“ (für 2 Operanden)


I Addition mehrerer Operanden
I Typen teilweise technologieabhängig
I Übersicht beispielsweise auf
[Link]/arith/mg/[Link]

A. Mäder 566
Carry-Select Adder: Prinzip
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

Ripple-Carry Addierer muss auf die Überträge warten (O(n))


I Aufteilen des n-bit Addierers in mehrere Gruppen mit je mi -bits
I für jede Gruppe
I jeweils zwei mi -bit Addierer
I einer rechnet mit ci = 0 (a + b), der andere mit ci = 1 (a + b + 1)
I 2:1-Multiplexer mit mi -bit wählt die korrekte Summe aus

I Sobald der Wert von ci bekannt ist (Ripple-Carry), wird über


den Multiplexer die benötigte Zwischensumme ausgewählt
I Das berechnete Carry-out co der Gruppe ist das Carry-in ci der
folgenden Gruppe

⇒ Verzögerung reduziert sich auf die Verzögerung eines


m-bit Addierers plus die Verzögerungen der Multiplexer

A. Mäder 567
Carry-Select Adder: Beispiel
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

8-Bit Carry-Select Adder (4 + 3 + 1 bit blocks)

4-bit Carry-Select Adder block 3-bit Carry-Select Adder block


CIN

B7 B6 B5 B4 B3 B2 B1 B0

A7 A6 A5 A4 A3 A2 A1 A0

A B A B A B A B A B A B A B
ADD ADD ADD ADD ADD ADD ADD
CO CI CO CI CO CI CO CI
0 CO CI CO CI CO CI
0
SUM SUM SUM SUM SUM SUM SUM

A B
A B A B A B A B A B A B A B ADD
2:1 2:1
ADD ADD ADD ADD ADD ADD ADD CO CI
CO CI CO CI CO CI CO CI
1 CO CI CO CI CO CI
1 SUM
SUM SUM SUM SUM SUM SUM SUM

2:1 2:1 2:1 2:1 2:1 2:1 2:1

COUT S7 S6 S5 S4 S3 S2 S1 S0

[HenHA] Hades Demo: 20-arithmetic/20-carryselect/adder_carryselect

I drei Gruppen: 1-bit, 3-bit, 4-bit


I Gruppengrößen so wählen, dass Gesamtverzögerung minimal

A. Mäder 568
Carry-Select Adder: Beispiel ARM v6
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

a,b[3:0] a,b[31:28]

+ +, +1 +, +1
c s s+1

mux

mux

mux

sum[3:0] sum[7:4] sum[15:8] sum[31:16]


S. Furber: ARM System-on-Chip Architecture [Fur00]

A. Mäder 569
Carry-Lookahead Adder: Prinzip
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I cn+1 = (an bn ) ∨ (an ∨ bn )cn

I Einführung von Hilfsfunktionen


gn = (an bn ) „generate carry“
pn = (an ∨ bn ) „propagate carry“
cn+1 = gn ∨ pn cn

I generate: Carry-out erzeugen, unabhängig von Carry-in


propagate: Carry-out weiterleiten / Carry-in maskieren

I Berechnung der gn und pn in einer Baumstruktur


Tiefe des Baums ist log2 N ⇒ entsprechend schnell

A. Mäder 570
Carry-Lookahead Adder: SUM-Funktionsblock
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

cin

si

gi
bin

ain
pi

[HenHA] Hades Demo: 20-arithmetic/30-cla/sum

I 1-bit Addierer, s = ai ⊕ bi ⊕ ci
I keine Berechnung des Carry-out
I Ausgang gi = ai ∧ bi liefert generate carry
pi = ai ∨ bi –"– propagate carry

A. Mäder 571
Carry-Lookahead Adder: CLA-Funktionsblock
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

A1
Pin_ij

A2
Gin_ij
cout_j+1
B1

cin_i cout_i

Pout_ik
Pin_j+1k

A1

A2

Gout_ik
B1
Gin_j+1k

[HenHA] Hades Demo: 20-arithmetic/30-cla/cla


I Eingänge
I propagate/generate Signale von zwei Stufen
I carry-in Signal
I Ausgänge
I propagate/generate Signale zur nächsthöheren Stufe
I carry-out Signale: Durchleiten und zur nächsthöheren Stufe
A. Mäder 572
Carry-Lookahead Adder: 16-bit Addierer
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

outputs
SUM:15 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0 SUM:0

inputs
A:15 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 A:0

B:15 B15 B14 B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 B:0

adders

CLA tree

CARRY_IN

G P C CIN

(j+1,k) G
(i,j) P
(i,k)
C
G P C

[HenHA] Hades Demo: 20-arithmetic/30-cla/adder16

A. Mäder 573
Addition mehrerer Operanden
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I Addierer-Bäume
I Beispiel: Bitcount

i11

ADD
i10

ADD2
i9

i8

ADD
i7

ADD3
i6

i5

ADD
i4

ADD2
i3

i2

ADD
i1

i0

[HenHA] Hades Demo: 20-arithmetic/80-bitcount/bitcount

A. Mäder 574
Addierer: Zusammenfassung
9.7.1 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Addierer 64-040 Rechnerstrukturen und Betriebssysteme

I Halbaddierer (a ⊕ b)
I Volladdierer (a ⊕ b ⊕ ci )

I Ripple-Carry
I Kaskade aus Volladdierern, einfach und billig
I aber manchmal zu langsam, Verzögerung: O(n)
I Carry-Select Prinzip

I Verzögerung O( n)
I Carry-Lookahead Prinzip
I Verzögerung O(ln n)

I Subtraktion durch Zweierkomplementbildung


erlaubt auch Inkrement (A++) und Dekrement (A--)

A. Mäder 575
Multiplizierer
9.7.2 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Multiplizierer 64-040 Rechnerstrukturen und Betriebssysteme

I Teilprodukte als UND-Verknüpfung des Multiplikators mit


je einem Bit des Multiplikanden
I Aufaddieren der Teilprodukte mit Addierern
I Realisierung als Schaltnetz erfordert:
n2 UND-Gatter (bitweise eigentliche Multiplikation)
n2 Volladdierer (Aufaddieren der Teilprodukte)
I abschließend ein n-bit Addierer für die Überträge
I in heutiger CMOS-Technologie kein Problem

I alternativ: Schaltwerke (Automaten) mit sukzessiver


Berechnung des Produkts in mehreren Takten durch
Addition und Schieben

A. Mäder 576
2x2-bit Multiplizierer – als zweistufiges Schaltnetz
9.7.2 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Multiplizierer 64-040 Rechnerstrukturen und Betriebssysteme

(B1,B0) Y3
Y3
[f] B1

[d] B0

Y2
Y2

[s] A1

[a] A0

(A1,A0) Y1
Y1

Y0 Y0

[HenHA] Hades Demo: 10-gates/13-mult2x2/mult2x2

A. Mäder 577
4x4-bit Multiplizierer – Array
9.7.2 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Multiplizierer 64-040 Rechnerstrukturen und Betriebssysteme

X3 X2 X1 X0

Pin Cin

X 0
Y

Y Y0 X*Y X*Y X*Y X*Y


COUT ADD

X Pout 0

Y1 X*Y X*Y X*Y X*Y

0
Y2 X*Y X*Y X*Y X*Y

Y3 X*Y X*Y X*Y X*Y

ADD ADD ADD ADD

P7 P6 P5 P4 P3 P2 P1 P0

[HenHA] Hades Demo: 20-arithmetic/60-mult/mult4x4


A. Mäder 578
4x4-bit Quadratwurzel
9.7.2 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Multiplizierer 64-040 Rechnerstrukturen und Betriebssysteme

B A
X_7:4 X_3:0

0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7
8 9 A B 8 9 A B P XOR P
sqrt( X )
C D E F C D E F
- + - +

ADD
Co Ci

Sum/Diff B

CAS CAS

CAS CAS CAS CAS

CAS CAS CAS CAS CAS CAS

CAS CAS CAS CAS CAS CAS CAS CAS

i12 i11 i10 i9 i8 i7 i6 i5

[HenHA] Hades Demo: 20-arithmetic/90-sqrt/sqrt4

A. Mäder 579
Multiplizierer
9.7.2 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Multiplizierer 64-040 Rechnerstrukturen und Betriebssysteme

weitere wichtige Themen aus Zeitgründen nicht behandelt

I Carry-Save Adder zur Summation der Teilprodukte


I Booth-Codierung (effiziente Multiplikation)
I Multiplikation von Zweierkomplementzahlen
I Multiplikation von Gleitkommazahlen

I CORDIC-Algorithmen
I Multiplikation, Division
I iterative Berechnung höherer Funktionen: Exponentialfunktion,
Logarithmus, trigonometrische Funktionen

I bei Interesse: Literatur anschauen [Omo94, Kor01, Spa76]

A. Mäder 580
Priority Encoder
9.7.3 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Prioritätsencoder
64-040 Rechnerstrukturen und Betriebssysteme

I Anwendung u.a. für Interrupt-Priorisierung


I Schaltung konvertiert n-bit Eingabe in eine Dualcodierung
I Wenn Bit n aktiv ist, werden alle niedrigeren Bits
(n − 1); : : : ; 0 ignoriert
x3 x2 x1 x0 y1 y0
1 * * * 1 1
0 1 * * 1 0
0 0 1 * 0 1
0 0 0 * 0 0

I unabhängig von niederwertigstem Bit ⇒ x0 kann entfallen

A. Mäder 581
4:2 Prioritätsencoder
9.7.3 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Prioritätsencoder
64-040 Rechnerstrukturen und Betriebssysteme

X3
Y1

X2

Y0

X1

X0
[HenHA] Hades Demo: 10-gates/45-priority/priority42

I zweistufige Realisierung (Inverter ignoriert)


I aktive höhere Stufe blockiert alle niedrigeren Stufen

A. Mäder 582
4:2 Prioritätsencoder: Kaskadierung
9.7.3 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Prioritätsencoder
64-040 Rechnerstrukturen und Betriebssysteme

X3
Y1

X2

Y0

X1

X0

A. Mäder 583
8:3 Prioritätsencoder
9.7.3 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Prioritätsencoder
64-040 Rechnerstrukturen und Betriebssysteme

X7

X6

Y2

X5

Y1

X4

Y0

X3

X2

X1

X0

[HenHA] Hades Demo: 10-gates/45-priority/priority83


A. Mäder 584
Shifter: zweistufig, shift-left um 0 . . . 3 Bits
9.7.4 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Barrel-Shifter 64-040 Rechnerstrukturen und Betriebssysteme

D3
I n-Dateneingänge Di
Q3

n-Datenausgänge Qi
D2

Q2

I 2:1 Multiplexer Kaskade


I Stufe 0: benachbarte Bits D1

I Stufe 1: übernächste Bits Q1

I usw. D0

Q0

I von rechts 0 nachschieben 0


SHL_1

SHL_2

A. Mäder 585
8-bit Barrel-Shifter
9.7.4 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Barrel-Shifter 64-040 Rechnerstrukturen und Betriebssysteme

D7

Q7

D6

Q6

D5

Q5

D4

Q4

D3

Q3

D2

Q2

D1

Q1

D0

Q0

0
SHL_1

SHL_2
[HenHA] Hades Webdemo:
SHL_4 10-gates/60-barrel/shifter8

A. Mäder 586
Shift-Right, Rotate etc.
9.7.4 Schaltnetze - Schaltnetze für Logische und Arithmetische Operationen - Barrel-Shifter 64-040 Rechnerstrukturen und Betriebssysteme

I Prinzip der oben vorgestellten Schaltungen gilt auch


für alle übrigen Shift- und Rotate-Operationen

I Logic shift right: von links Nullen nachschieben


Arithmetic shift right: oberstes Bit nachschieben

I Rotate left / right: außen herausgeschobene Bits auf der


anderen Seite wieder hineinschieben

+ alle Operationen typischerweise in einem Takt realisierbar


− Problem: Hardwareaufwand bei großen Wortbreiten und
beliebigem Schiebe-/Rotate-Argument

A. Mäder 587
Arithmetisch-Logische Einheit (ALU)
9.8 Schaltnetze - ALU (Arithmetisch-Logische Einheit) 64-040 Rechnerstrukturen und Betriebssysteme

Arithmetisch-logische Einheit ALU (Arithmetic Logic Unit)


I kombiniertes Schaltnetz für arithmetische und logische Operationen
I das zentrale Rechenwerk in Prozessoren

Funktionsumfang variiert von Typ zu Typ


I Addition und Subtraktion 2-Komplement
I bitweise logische Operationen Negation, UND, ODER, XOR
I Schiebeoperationen shift, rotate
I evtl. Multiplikation

I Integer-Division selten verfügbar (separates Rechenwerk)

A. Mäder 588
ALU: Addierer und Subtrahierer
9.8 Schaltnetze - ALU (Arithmetisch-Logische Einheit) 64-040 Rechnerstrukturen und Betriebssysteme

I Addition (A + B) mit normalem Addierer

I XOR-Gatter zum Invertieren von Operand B


I Steuerleitung sub aktiviert das Invertieren und den Carry-in ci
I wenn aktiv, Subtraktion als (A − B) = A + B + 1
I ggf. auch Inkrement (A + 1) und Dekrement (A − 1)

I folgende Folien: 7483 ist IC mit 4-bit Addierer

A. Mäder 589
ALU: Addierer und Subtrahierer
9.8 Schaltnetze - ALU (Arithmetisch-Logische Einheit) 64-040 Rechnerstrukturen und Betriebssysteme

A3

Cout
A2

A1
Out3
A0
Out2

B3 Out1

B2
=1 '83 Out0

B1

=1
B0

Cmpl Cin F
=1 0 0 A+B
0 1 A+B+1 (A++)
1 0 A-B-1 (A--)
1 1 A-B
=1

cmpl

Cin

Schiffmann, Schmitz: Technische Informatik I [SS04]

A. Mäder 590
ALU: Addierer und bitweise Operationen
9.8 Schaltnetze - ALU (Arithmetisch-Logische Einheit) 64-040 Rechnerstrukturen und Betriebssysteme

Cout

=1 =1 =1 =1

XOR

Out3
1 1 1 1
Out2

OR Out1

Out0

& & & &

AND
A3

A2 ADDER

A1

A0
Komplement
B3
=1 '83
B2

B1
=1
B0

S1 S0 Cmpl Cin F
=1 0 0 0 0 A+B
cmpl 0 0 0 1 A+B+1 (A++)
0 0 1 0 A-B-1 (A--)
Cin =1 0 0 1 1 A-B
0 1 x x A AND B
S1 1 0 x x A OR B
1 1 x x A XOR B
S0

Schiffmann, Schmitz: Technische Informatik I [SS04]

A. Mäder 591
ALU: Prinzip
9.8 Schaltnetze - ALU (Arithmetisch-Logische Einheit) 64-040 Rechnerstrukturen und Betriebssysteme

vorige Folie zeigt die „triviale“ Realisierung einer ALU


I mehrere parallele Rechenwerke für die m einzelnen Operationen
n-bit Addierer, n-bit Komplement, n-bit OR usw.
I Auswahl des Resultats über n-bit m : 1-Multiplexer

nächste Folie: Realisierung in der Praxis (IC 74181)


I erste Stufe für bitweise logische Operationen und Komplement
I zweite Stufe als Carry-Lookahead Addierer
I weniger Gatter und schneller

A. Mäder 592
ALU: 74181 – Aufbau
9.8 Schaltnetze - ALU (Arithmetisch-Logische Einheit) 64-040 Rechnerstrukturen und Betriebssysteme

S3..S0 (function) Y
A Y

A
A
B
Y Y
C Y
B
D
S3
A

B Y
S2
C

S1 A
B

CN+4/
Y
S0 C

selection logic functions arithmetic functions


D

A
A Y
CN+4/
A B Y B
B Y C

C A A

S3 S2 S1 S0 M =1 M =0 Cn = 1 (no carry)
Y B Y

X
A B C

B Y
A
C
B
Y
C X
B3 D

0 0 0 0 F = !A F=A
A
Y

F3
B

B3, A3
A
A A Y A

F = !(A or B) F = A or B
Y B Y B Y
F3
B C
A

B Y
B

0 0 0 1
A Y C
A3
A

F = !A and B F = A or !B
B Y

A
C

A
0 0 1 0
B
Y B
C Y
C

F = !A and B F = -1
D
D

B Y
A
B Y
0 0 1 1
C A C
Y

A B A

0 1 0 0 F=0 F = A + (A and !B)


B Y Y

C B

B2

F = !B F = (A or B) + (A and !B)
A

B
Y

F2 0 1 0 1
B2, A2
A
A A Y A
Y B Y B Y
F2

F = A xor B F=A-B-1
B C B

A Y
A

B
Y
0 1 1 0
A2 C
D

F = A and !B F = (A and !B) - 1


A A

C
Y B

C
Y
0 1 1 1
A

Y A=B
F = !A or B F = A + (A and B)
A
A B
B
C
Y

A
B

C
D
Y
A=B 1 0 0 0
Y
A B
B Y

1 0 0 1 F = A xnor B F=A+B
C

B1

F1 F=B F = (A or !B) + (A and B)


Y

B1, A1
B

A A
A
Y A
1 0 1 0
Y B Y B Y
F1
B C B

A1
A Y
A

B
C
Y
A
1 0 1 1 F = A and B F = (A and B) - 1
Y

A B

F=1 F=A+A
Y
B
1 1 0 0
A

1 1 0 1 F = A or !B F = (A or B) + A
B Y

C A

Y
A B
B Y

F = A or B F = (A or !B) + A
C

B0 1 1 1 0
A

F0
Y

F=A F=A-1
B

B0, A0 1 1 1 1
A
A A Y A
Y B Y B Y
F0
B C B

F+1 Cn = 0 (carry in)


A Y Y
A0
B

M M

CN/ CN/

[HenHA] Hades Demo: 20-arithmetic/50-74181/SN74181

A. Mäder 593
ALU: 74181 – Funktionstabelle
9.8 Schaltnetze - ALU (Arithmetisch-Logische Einheit) 64-040 Rechnerstrukturen und Betriebssysteme

selection logic functions arithmetic functions


Function
0 1 2 3
3 S3 S2 S1 S0 M =1 M =0 Cn = 1 (no carry)
2
4 5 6 7
1
8 9 A B
C D E F
0 0 0 0 0 F = !A F=A
- +
0 0 0 1 F = !(A or B) F = A or B
Operand A S3 S2 S1 S0
0 0 1 0 F = !A and B F = A or !B
3
A3
Carry Out
0 1 2 3
4 5 6 7
2
A2 CN+4/ c_out 0 0 1 1 F = !A and B F = -1
1
8 9 A B
C D E F
0 A1
Result 0 1 0 0 F=0 F = A + (A and !B)
- +
A0 F3
3 0 1 0 1 F = !B F = (A or B) + (A and !B)
Operand B F2
2
1
0 1 1 0 F = A xor B F=A-B-1
3 0
0 1 2 3 B3 F1

4 5 6 7
2

1
'181 0 1 1 1 F = A and !B F = (A and !B) - 1
8 9 A B B2 F0
0
C D E F
- + B1
A=B Flag 1 0 0 0 F = !A or B F = A + (A and B)

B0 A=B A=B 1 0 0 1 F = A xnor B F=A+B


Carry In Y
1 0 1 0 F=B F = (A or !B) + (A and B)
c_in CN/ X

Y 1 0 1 1 F = A and B F = (A and B) - 1
M

M
X
1 1 0 0 F=1 F=A+A

1=logic/0=arithmetic CLA Generation 1 1 0 1 F = A or !B F = (A or B) + A

1 1 1 0 F = A or B F = (A or !B) + A

1 1 1 1 F=A F=A-1

F+1 Cn = 0 (carry in)

[HenHA] Hades Demo: 20-arithmetic/50-74181/demo-74181-ALU

A. Mäder 594
ALU: 74181 und 74182 CLA
12-bit ALU mit Carry-Lookahead Generator 74182
9.8 Schaltnetze - ALU (Arithmetisch-Logische Einheit) 64-040 Rechnerstrukturen und Betriebssysteme

F3,F0
0 1 2 3
4 5 6 7
8 9 A B
C D E F
- +
C_OUT
i2

A11,A8 A7,A4 A3,A0


0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 A B 8 9 A B 8 9 A B
C D E F C D E F C D E F
- + - + - +

B11,B8 B7,B4 B3,B0


0 1 2 3 '181 0 1 2 3 '181 0 1 2 3 '181
4 5 6 7 4 5 6 7 4 5 6 7
8 9 A B 8 9 A B 8 9 A B
C D E F C D E F C D E F
- + - + - + '182

CN_in

0 0 C_IN 0

[HenHA] Hades Demo: 20-arithmetic/50-74181/demo-74182-ALU-CLA

A. Mäder 595
Zeitverhalten einer Schaltung: Modellierung
9.9 Schaltnetze - Zeitverhalten von Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

Wie wird das Zeitverhalten eines Schaltnetzes modelliert?

Gängige Abstraktionsebenen mit zunehmendem Detaillierungsgrad


1. algebraische Ausdrücke: keine zeitliche Abhängigkeit
2. „fundamentales Modell“: Einheitsverzögerung des algebraischen
Ausdrucks um eine Zeit fi
3. individuelle Gatterverzögerungen
I mehrere Modelle, unterschiedlich detailliert
I Abstraktion elektrischer Eigenschaften
4. Gatterverzögerungen + Leitungslaufzeiten (geschätzt, berechnet)
5. Differentialgleichungen für Spannungen und Ströme
(verschiedene „Ersatzmodelle“)

A. Mäder 596
Gatterverzögerung vs. Leitungslaufzeiten
9.9 Schaltnetze - Zeitverhalten von Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

0.3 sec each


wire-delay S

0.7 sec

A
gate-delay
B

0.7 sec

X
wire- and
gate-delay
Y

[HenHA] Hades Demo: 12-gatedelay/10-delaydemo/gate-vs-wire-delay

I früher: Gatterverzögerungen  Leitungslaufzeiten


I Schaltungen modelliert durch Gatterlaufzeiten
I aktuelle „Submicron“-Halbleitertechnologie:
Leitungslaufzeiten  Gatterverzögerungen

A. Mäder 597
Gatterverzögerung vs. Leitungslaufzeiten (cont.)
9.9 Schaltnetze - Zeitverhalten von Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I Leitungslaufzeiten
lokale Leitungen: schneller (weil Strukturen kleiner)
I

globale Leitungen: langsamer


I

− nicht mehr alle Punkte des Chips in einem Taktzyklus erreichbar

SIA’97 [Link]

A. Mäder 598
Zeitverhalten
9.9 Schaltnetze - Zeitverhalten von Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I alle folgenden Schaltungsbeispiele werden mit


Gatterverzögerungen modelliert (einfacher Handhabbar)
I Gatterlaufzeiten als Vielfache einer Grundverzögerung (fi )
I aber Leitungslaufzeiten ignoriert

I mögliche Verfeinerungen
I gatterabhängige Schaltzeiten für INV, NAND, NOR, XOR etc.
I unterschiedliche Schaltzeiten für Wechsel: 0→1 und 1→0
I unterschiedliche Schaltzeiten für 2-, 3-, 4-Input Gatter
I Schaltzeiten sind abhängig von der Anzahl nachfolgender
Eingänge (engl. fanout)

A. Mäder 599
Exkurs: Lichtgeschwindigkeit und Taktraten
9.9 Schaltnetze - Zeitverhalten von Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I Lichtgeschwindigkeit im Vakuum: c ≈ 300 000 km/sec


≈ 30 cm/ns
I in Metallen und Halbleitern langsamer: c ≈ 20 cm/ns
⇒ bei 1 Gigahertz Takt: Ausbreitung um ca. 20 Zentimeter

Abschätzungen:
I Prozessor: ca. 3 cm Diagonale < 10 GHz Taktrate
I Platine: ca. 20 cm Kantenlänge < 1 GHz Takt
⇒ prinzipiell kann (schon heute) ein Signal innerhalb eines Takts
nicht von einer Ecke des ICs zur Anderen gelangen

A. Mäder 600
Impulsdiagramme
9.9 Schaltnetze - Zeitverhalten von Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I Impulsdiagramm (engl. waveform): Darstellung der logischen


Werte einer Schaltfunktion als Funktion der Zeit

I als Abstraktion des tatsächlichen Verlaufs


I Zeit läuft von links nach rechts
I Schaltfunktion(en): von oben nach unten aufgelistet

I Vergleichbar den Messwerten am Oszilloskop (analoge Werte)


bzw. den Messwerten am Logic-State-Analyzer (digitale Werte)
I ggf. Darstellung mehrerer logischer Werte (z.B. 0,1,Z,U,X)

A. Mäder 601
Impulsdiagramm: Beispiel
9.9 Schaltnetze - Zeitverhalten von Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

1
A
0

1
B
0

1
A B
0

1
A B
0

1
A
0

1
A A
0

t 2t 3t 4t 5t 6t 7t ...

I im Beispiel jeweils eine „Zeiteinheit“ Verzögerung für jede


einzelne logische Operation
I Ergebnis einer Operation nur, wenn die Eingaben definiert sind
I im ersten Zeitschritt noch undefinierte Werte
A. Mäder 602
Hazards
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

I Hazard: die Eigenschaft einer Schaltfunktion, bei bestimmten


Kombinationen der individuellen Verzögerungen ihrer
Verknüpfungsglieder ein Fehlverhalten zu zeigen
I engl. auch Glitch

I Hazardfehler: das aktuelle Fehlverhalten einer realisierten


Schaltfunktion aufgrund eines Hazards

A. Mäder 603
Hazards: Klassifikation
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

nach der Erscheinungsform am Ausgang


I statisch: der Ausgangswert soll unverändert sein,
es tritt aber ein Wechsel auf
I dynamisch: der Ausgangswert soll (einmal) wechseln,
es tritt aber ein mehrfacher Wechsel auf

nach den Eingangsbedingungen, unter denen der Hazard auftritt


I Strukturhazard: bedingt durch die Struktur der Schaltung,
auch bei Umschalten eines einzigen Eingangswertes
I Funktionshazard: bedingt durch die Funktion der Schaltung

A. Mäder 604
Hazards: statisch vs. dynamisch
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

erwarteter Signalverlauf Verlauf mit Hazard

statischer 0-Hazard

statischer 1-Hazard

dynamischer 0-Hazard

dynamischer 1-Hazard

! Begriffsbildung in der Literatur nicht einheitlich:


0 / 1 als „richtiger Wert“
–"– „fehlerhafter Wert“
I 0-Hazard wenn der Wert 0 ausgegeben werden soll,
zwichenzeitlich aber 1 erscheint (und umgekehrt)
I statisch oder dynamisch (dann auch 1-0, bzw. 0-1 Hazard)
I es können natürlich auch mehrfache Hazards auftreten
A. Mäder 605
Hazards: Strukturhazard
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

I Strukturhazard wird durch die gewählte Struktur der


Schaltung verursacht
I auch, wenn sich nur eine Variable ändert
I Beispiel: f (a) = a ∨ (a ∧ a)
a schaltet schneller ab, als (a ∧ a) einschaltet

I Hazard kann durch Modifikation der Schaltung beseitigt werden


im Beispiel mit: f (a) = 1

A. Mäder 606
Strukturhazards: Beispiele
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

t= 0.3 sec t= 0.1 sec 0-hazard t= 0.3 sec t= 0.1 sec 1-hazard

0-Hazard 1-Hazard
A B

t= 0.3 sec t= 0.3 sec t= 0.3 sec t= 0.3 sec t= 0.3 sec
...
t= 0.1 sec

Y
C

[HenHA] Hades Demo: 12-gatedelay/30-hazards/padding

I logische Funktion ist (a ∧ a) = 0 bzw. (a ∨ a) = 1


I aber ein Eingang jeweils durch Inverter verzögert
⇒ kurzer Impuls beim Umschalten von 0→1 bzw. 1→0

A. Mäder 607
Strukturhazards: Beispiele (cont.)
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

I Schaltung (a ∧ a) = 0 erzeugt (statischen-0) Hazard


I Länge des Impulses abhängig von Verzögerung im Inverter
I Kette von Invertern erlaubt Einstellung der Pulslänge

A. Mäder 608
Strukturhazards extrem: NAND-Kette
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

out

in

[HenHA] Hades Demo: 12-gatedelay/30-hazards/nandchain

I alle NAND-Gatter an Eingang in angeschlossen


I in = 0 erzwingt yi = 1
I Übergang in von 0 auf 1 startet Folge von Hazards

A. Mäder 609
Strukturhazards extrem: NAND-Kette (cont.)
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

I Schaltung erzeugt Folge von (statischen-1) Hazards


I Anzahl der Impulse abhängig von Anzahl der Gatter

A. Mäder 610
Strukturhazards im KV-Diagramm
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 x1 x0
x2 00 01 11 10 x2 00 01 11 10
0 0 0 1 0 0 0 0 1 0

1 1 1 1 0 1 1 1 1 0

I Funktion f = (x2 x1 ) ∨ (x1 x0 )


I realisiert in disjunktiver Form mit 2 Schleifen

Strukturhazard beim Übergang von (x2 x1 x0 ) nach (x2 x1 x0 )


I Gatter (x2 x1 ) schaltet ab, Gatter (x1 x0 ) schaltet ein
I Ausgang evtl. kurz 0, abhängig von Verzögerungen

A. Mäder 611
Strukturhazards im KV-Diagramm (cont.)
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

X0
X0
X1.X0

X1
X1
f
i3

X2./X1
X2
X2

A. Mäder 612
Strukturhazards beseitigen
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

x1 x0 x1 x0
x2 00 01 11 10 x2 00 01 11 10
0 0 0 1 0 0 0 0 1 0

1 1 1 1 0 1 1 1 1 0

I Funktion f = (x2 x1 ) ∨ (x1 x0 )


I realisiert in disjunktiver Form mit 3 Schleifen
f = (x2 x1 ) ∨ (x1 x0 ) ∨ (x2 x0 )

+ Strukturhazard durch zusätzliche Schleife beseitigt


− aber höhere Hardwarekosten als bei minimierter Realisierung

A. Mäder 613
Strukturhazards beseitigen (cont.)
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

X0
X0
X1.X0

X1
X1
f
i3

X2./X1

X2
X2

X2.X0

A. Mäder 614
Hazards: Funktionshazard
9.10 Schaltnetze - Hazards 64-040 Rechnerstrukturen und Betriebssysteme

I Funktionshazard kann bei gleichzeitigem Wechsel mehrerer


Eingangswerte als Eigenschaft der Schaltfunktion entstehen
I Problem: Gleichzeitigkeit an Eingängen
⇒ Funktionshazard kann nicht durch strukturelle Maßnahmen
verhindert werden

I Beispiel: Übergang von (x2 x1 x0 ) nach (x2 x1 x0 )


x1 x0 x1 x0
x2 00 01 11 10 x2 00 01 11 10
0 0 0 1 0 0 0 0 1 0

1 1 1 1 0 1 1 1 1 0

A. Mäder 615
Literatur
9.11 Schaltnetze - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Knu08] D.E. Knuth: The Art of Computer Programming,


Volume 4, Fascicle 0, Introduction to Combinatorial
Algorithms and Boolean Functions.
Addison-Wesley Professional, 2008. ISBN 978–0–321–53496–5
[Knu09] D.E. Knuth: The Art of Computer Programming,
Volume 4, Fascicle 1, Bitwise Tricks & Techniques;
Binary Decision Diagrams.
Addison-Wesley Professional, 2009. ISBN 978–0–321–58050–4
[SS04] W. Schiffmann, R. Schmitz: Technische Informatik 1 –
Grundlagen der digitalen Elektronik.
5. Auflage, Springer-Verlag, 2004. ISBN 978–3–540–40418–7
[Weg87] I. Wegener: The Complexity of Boolean Functions.
John Wiley & Sons, 1987. ISBN 3–519–02107–2.
[Link]/monographs/bluebook

A. Mäder 616
Literatur (cont.)
9.11 Schaltnetze - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BM08] B. Becker, P. Molitor: Technische Informatik –


eine einführende Darstellung. 2. Auflage, Oldenbourg, 2008.
ISBN 978–3–486–58650–3
[Fur00] S. Furber: ARM System-on-Chip Architecture.
2nd edition, Pearson Education Limited, 2000.
ISBN 978–0–201–67519–1
[Omo94] A.R. Omondi: Computer Arithmetic Systems –
Algorithms, Architecture and Implementations. Prentice-Hall
International, 1994. ISBN 0–13–334301–4
[Kor01] I. Koren: Computer Arithmetic Algorithms.
2nd edition, CRC Press, 2001. ISBN 978–1–568–81160–4.
[Link]/ece/koren/arith
[Spa76] O. Spaniol: Arithmetik in Rechenanlagen.
B. G. Teubner, 1976. ISBN 3–519–02332–6

A. Mäder 617
Interaktives Lehrmaterial
9.11 Schaltnetze - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Hei05] K. von der Heide: Vorlesung: Technische Informatik 1 —


interaktives Skript. Uni. Hamburg, FB Informatik, 2005. tams.
[Link]/lectures/2004ws/vorlesung/t1
[HenHA] N. Hendrich: HADES — HAmburg DEsign System.
Universität Hamburg, FB Informatik, Lehrmaterial.
[Link]/applets/hades/webdemos
[HenKV] N. Hendrich: KV-Diagram Simulation.
Universität Hamburg, FB Informatik, Lehrmaterial.
[Link]/applets/kvd
[Kor16] Laszlo Korte: TAMS Tools for eLearning.
Universität Hamburg, FB Informatik, 2016, BSc Thesis. tams.
[Link]/research/software/tams-tools
[Laz] J. Lazarro: Chipmunk design tools (AnaLog, DigLog).
UC Berkeley, Berkeley, CA. [Link]/chipmunk

A. Mäder 618
Gliederung
10 Schaltwerke 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
Definition und Modelle
Asynchrone (ungetaktete) Schaltungen
Synchrone (getaktete) Schaltungen

A. Mäder 619
Gliederung (cont.)
10 Schaltwerke 64-040 Rechnerstrukturen und Betriebssysteme

Flipflops
RS-Flipflop
D-Latch
D-Flipflop
JK-Flipflop
Hades
Zeitbedingungen
Taktschemata
Beschreibung von Schaltwerken
Entwurf von Schaltwerken
Beispiele
Ampelsteuerung
Zählschaltungen
verschiedene Beispiele
Literatur
11. Rechnerarchitektur I

A. Mäder 620
Gliederung (cont.)
10 Schaltwerke 64-040 Rechnerstrukturen und Betriebssysteme

12. Instruction Set Architecture


13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 621
Schaltwerke
10.1 Schaltwerke - Definition und Modelle 64-040 Rechnerstrukturen und Betriebssysteme

I Schaltwerk: Schaltung mit Rückkopplungen und Verzögerungen

I fundamental andere Eigenschaften als Schaltnetze


I Ausgangswerte nicht nur von Eingangswerten abhängig
sondern auch von der Vorgeschichte
⇒ interner Zustand repräsentiert „Vorgeschichte“

I ggf. stabile Zustände ⇒ Speicherung von Information


I bei unvorsichtigem Entwurf: chaotisches Verhalten

I Definition mit Rückkopplungen


I Widerspruch: x = x
I Mehrdeutigkeit: x = (x)
I Beispiel mit zwei Variablen: x = (a ∧ y ) y = (b ∧ x)

A. Mäder 622
Schaltwerke: Blockschaltbild
10.1 Schaltwerke - Definition und Modelle 64-040 Rechnerstrukturen und Betriebssysteme

Eingangsvariablen x Ausgangsvariablen y
Schaltnetz

Aktueller Zustand z Folgezustand z+


τ bzw.
Speicherglieder

Taktsignal

I Eingangsvariablen x und Ausgangsvariablen y


I Aktueller Zustand z
I Folgezustand z+
I Rückkopplung läuft über Verzögerungen fi / Speicherglieder

A. Mäder 623
Schaltwerke: Blockschaltbild (cont.)
10.1 Schaltwerke - Definition und Modelle 64-040 Rechnerstrukturen und Betriebssysteme

Eingangsvariablen x Ausgangsvariablen y
Schaltnetz

Aktueller Zustand z Folgezustand z+


τ bzw.
Speicherglieder

Taktsignal

zwei prinzipielle Varianten für die Zeitglieder


1. nur (Gatter-) Verzögerungen: asynchrone oder
nicht getaktete Schaltwerke
2. getaktete Zeitglieder: synchrone oder getaktete Schaltwerke

A. Mäder 624
Synchrone und Asynchrone Schaltwerke
10.1 Schaltwerke - Definition und Modelle 64-040 Rechnerstrukturen und Betriebssysteme

I synchrone Schaltwerke: die Zeitpunkte, an denen das


Schaltwerk von einem stabilen Zustand in einen stabilen
Folgezustand übergeht, werden explizit durch ein Taktsignal
(clock) vorgegeben

I asynchrone Schaltwerke: hier fehlt ein Taktgeber,


Änderungen der Eingangssignale wirken sich unmittelbar aus
(entsprechend der Gatterverzögerungen fi )
I potenziell höhere Arbeitsgeschwindigkeit
I aber sehr aufwändiger Entwurf
I fehleranfälliger (z.B. leicht veränderte Gatterverzögerungen
durch Bauteil-Toleranzen, Spannungsschwankungen usw.)

A. Mäder 625
Theorie: Endliche Automaten
10.1 Schaltwerke - Definition und Modelle 64-040 Rechnerstrukturen und Betriebssysteme

FSM – Finite State Machine


I Deterministischer Endlicher Automat mit Ausgabe
I 2 äquivalente Modelle
I Mealy: Ausgabe hängt von Zustand und Eingabe ab
I Moore: –"– nur vom Zustand ab
I 6-Tupel hZ; Σ; ∆; ‹; –; z0 i
I Z Menge von Zuständen
I Σ Eingabealphabet
I ∆ Ausgabealphabet
I ‹ Übergangsfunktion ‹ : Z × Σ → Z
I – Ausgabefunktion – : Z × Σ → ∆ Mealy-Modell
–:Z →∆ Moore- –"–
I z0 Startzustand

A. Mäder 626
Mealy-Modell und Moore-Modell
10.1 Schaltwerke - Definition und Modelle 64-040 Rechnerstrukturen und Betriebssysteme

I Mealy-Modell: die Ausgabe hängt vom Zustand z und vom


momentanen Input x ab
I Moore-Modell: die Ausgabe des Schaltwerks hängt nur vom
aktuellen Zustand z ab

I Ausgabefunktion: y = –(z; x) Mealy


y = –(z) Moore
I Überführungsfunktion: z += ‹(z; x) Moore und Mealy

I Speicherglieder oder Verzögerung fi im Rückkopplungspfad

A. Mäder 627
Mealy-Modell und Moore-Modell (cont.)
10.1 Schaltwerke - Definition und Modelle 64-040 Rechnerstrukturen und Betriebssysteme

I Mealy-Automat Moore-Automat

λ y λ y

x x
z
δ z+ z
δ z+

τ τ

A. Mäder 628
Asynchrone Schaltungen: Beispiel Ringoszillator
10.2 Schaltwerke - Asynchrone (ungetaktete) Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

click to start/stop odd number of inverting gates

external test equipment

value 1

000008284

reset-counter

[HenHA] Hades Demo: 12-gatedelay/20-ringoscillator/ringoscillator

I stabiler Zustand, solange der Eingang auf 0 liegt


I instabil sobald der Eingang auf 1 wechselt (Oszillation)

A. Mäder 629
Asynchrone Schaltungen: Beispiel Ringoszillator (cont.)
10.2 Schaltwerke - Asynchrone (ungetaktete) Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I Rückkopplung: ungerade Anzahl n invertierender Gatter (n ≥ 3)


I Start/Stop über steuerndes NAND-Gatter
I Oszillation mit maximaler Schaltfrequenz
z.B.: als Testschaltung für neue (Halbleiter-) Technologien

A. Mäder 630
Asynchrone Schaltungen: Probleme
10.2 Schaltwerke - Asynchrone (ungetaktete) Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I das Schaltwerk kann stabile und nicht-stabile Zustände


enthalten
I die Verzögerungen der Bauelemente sind nicht genau bekannt
und können sich im Betrieb ändern
I Variation durch Umweltparameter
z.B. Temperatur, Versorgungsspannung, Alterung

⇒ sehr schwierig, die korrekte Funktion zu garantieren


z.B. mehrstufige Handshake-Protokolle

I in der Praxis überwiegen synchrone Schaltwerke


I Realisierung mit Flipflops als Zeitgliedern

A. Mäder 631
Synchrone Schaltungen
10.3 Schaltwerke - Synchrone (getaktete) Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I alle Rückkopplungen der Schaltung laufen über spezielle


Zeitglieder: „Flipflops“
I diese definieren / speichern einen stabilen Zustand, unabhängig
von den Eingabewerten und Vorgängen im ‹-Schaltnetz

I Hinzufügen eines zusätzlichen Eingangssignals: „Takt“


I die Zeitglieder werden über das Taktsignal gesteuert
verschiedene Möglichkeiten: Pegel- und Flankensteuerung,
Mehrphasentakte (s.u.)

⇒ synchrone Schaltwerke sind wesentlich einfacher zu entwerfen


und zu analysieren als asynchrone Schaltungen

A. Mäder 632
Zeitglieder / Flipflops
10.3 Schaltwerke - Synchrone (getaktete) Schaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I Zeitglieder: Bezeichnung für die Bauelemente, die den


Zustand des Schaltwerks speichern können
I bistabile Bauelemente (Kippglieder) oder Flipflops

I zwei stabile Zustände ⇒ speichert 1 Bit


1 – Setzzustand
0 – Rücksetzzustand

I Übergang zwischen Zuständen durch geeignete Ansteuerung

A. Mäder 633
Flipflops
10.4 Schaltwerke - Flipflops 64-040 Rechnerstrukturen und Betriebssysteme

I Name für die elementaren Schaltwerke


I mit genau zwei Zuständen Z0 und Z1
I Zustandsdiagramm hat zwei Knoten und vier Übergänge (s.u.)

I Ausgang als Q bezeichnet und dem Zustand gleichgesetzt


I meistens auch invertierter Ausgang Q verfügbar

I Flipflops sind selbst nicht getaktet


I sondern „sauber entworfene“ asynchrone Schaltwerke
I Anwendung als Verzögerungs-/Speicherelemente in
getakteten Schaltwerken

A. Mäder 634
Flipflops: Typen
10.4 Schaltwerke - Flipflops 64-040 Rechnerstrukturen und Betriebssysteme

I Basis-Flipflop „Reset-Set-Flipflop“
I getaktetes RS-Flipflop

I pegelgesteuertes D-Flipflop „D-Latch“


I flankengesteuertes D-Flipflop „D-Flipflop“

I JK-Flipflop
I weitere. . .

A. Mäder 635
RS-Flipflop: NAND- und NOR-Realisierung
10.4.1 Schaltwerke - Flipflops - RS-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

/S /S /R Q NQ NAND
Q

0 0 1 1 forbidden
0 1 1 0
1 0 0 1
NQ 1 1 Q* NQ* store
/R

R
Q S R Q NQ NOR

0 0 Q* NQ* store
0 1 0 1
1 0 1 0
NQ
S 1 1 0 0 forbidden

[HenHA] Hades Demo: 16-flipflops/10-srff/srff

A. Mäder 636
RS-Flipflop: Varianten des Schaltbilds
10.4.1 Schaltwerke - Flipflops - RS-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

/S
_Q

_NQ
/R

_Q1
/S1

_NQ1
/R1

[HenHA] Hades Demo: 16-flipflops/10-srff/srff2

A. Mäder 637
NOR RS-Flipflop: Zustandsdiagramm und Flusstafel
10.4.1 Schaltwerke - Flipflops - RS-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

Eingabe [S R]
00 01 11 10
Zustand Folgezustand [Q Q]
11
00 11 01 00 10
01 01 01 00 00
00 11 00 00 00 00
10 01
10 10 00 00 10
stabiler Zustand
00
*0 0*
*1 1*

10 01

**

11

A. Mäder 638
RS-Flipflop mit Takt
10.4.1 Schaltwerke - Flipflops - RS-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

I RS-Basisflipflop mit zusätzlichem Takteingang C


I Änderungen nur wirksam, während C aktiv ist

I Struktur
R C S R Q NQ NOR
Q
0 X X Q* NQ* store

C 1 0 0 Q* NQ* store
1 0 1 0 1
NQ 1 1 0 1 0
S
1 1 1 0 0 forbidden

[HenHA] Hades Demo: 16-flipflops/10-srff/clocked-srff

I Q = (NQ ∨ (R ∧ C))
NQ = (Q ∨ (S ∧ C))
A. Mäder 639
RS-Flipflop mit Takt (cont.)
10.4.1 Schaltwerke - Flipflops - RS-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

I Impulsdiagramm
S

NQ

I Q = (NQ ∨ (R ∧ C))
NQ = (Q ∨ (S ∧ C))

A. Mäder 640
Pegelgesteuertes D-Flipflop (D-Latch)
10.4.2 Schaltwerke - Flipflops - D-Latch 64-040 Rechnerstrukturen und Betriebssysteme

I Takteingang C
I Dateneingang D
I aktueller Zustand Q, Folgezustand Q+
C D Q+
0 0 Q
0 1 Q
1 0 0
1 1 1
I Wert am Dateneingang wird durchgeleitet, wenn das Taktsignal
1 ist ⇒ high-aktiv
0 ist ⇒ low-aktiv

A. Mäder 641
Pegelgesteuertes D-Flipflop (D-Latch) (cont.)
10.4.2 Schaltwerke - Flipflops - D-Latch 64-040 Rechnerstrukturen und Betriebssysteme

I Realisierung mit getaktetem RS-Flipflop und einem Inverter


S = D, R = D
I minimierte NAND-Struktur
D

NQ

I Symbol

[HenHA] Hades Demo: 16-flipflops/20-dlatch/dlatch

A. Mäder 642
D-Latch: Zustandsdiagramm und Flusstafel
10.4.2 Schaltwerke - Flipflops - D-Latch 64-040 Rechnerstrukturen und Betriebssysteme

Eingabe [C D]
10
00 01 11 10
0*
Zustand [Q] Folgezustand [Q+ ]
0 0 0 0 1 0
1 1 1 1 0
11 stabiler Zustand

10

1
11
0*

A. Mäder 643
Flankengesteuertes D-Flipflop
10.4.3 Schaltwerke - Flipflops - D-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

I Takteingang C
I Dateneingang D
I aktueller Zustand Q, Folgezustand Q+
C D Q+
0 ∗ Q
1 ∗ Q
↑ 0 0
↑ 1 1
I Wert am Dateneingang wird gespeichert, wenn das Taktsignal
sich von 0 auf 1 ändert ⇒ Vorderflankensteuerung
–"– 1 auf 0 ändert ⇒ Rückflankensteuerung
I Realisierung als Master-Slave Flipflop oder direkt

A. Mäder 644
Master-Slave D-Flipflop
10.4.3 Schaltwerke - Flipflops - D-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

I zwei kaskadierte D-Latches


I hinteres Latch erhält invertierten Takt
I vorderes „Master“-Latch: low-aktiv (transparent bei C = 0)
hinteres „Slave“-Latch: high-aktiv (transparent bei C = 1)
I vorderes Latch speichert bei Wechsel auf C = 1
I wenig später (Gatterverzögerung im Inverter der Taktleitung)
übernimmt das hintere Slave-Latch diesen Wert
I anschließend Input für das Slave-Latch stabil
I Slave-Latch speichert, sobald Takt auf C = 0 wechselt

⇒ dies entspricht effektiv einer Flankensteuerung:


Wert an D nur relevant, kurz bevor Takt auf C = 1 wechselt

A. Mäder 645
Master-Slave D-Flipflop (cont.)
10.4.3 Schaltwerke - Flipflops - D-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

NQ

[HenHA] Hades Demo: 16-flipflops/20-dlatch/dff

I zwei kaskadierte pegel-gesteuerte D-Latches


C=0 Master aktiv (transparent)
Slave hat (vorherigen) Wert gespeichert
C=1 Master speichert Wert
Slave transparent, leitet Wert von Master weiter

A. Mäder 646
Vorderflanken-gesteuertes D-Flipflop
10.4.3 Schaltwerke - Flipflops - D-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

NQ
D

I Dateneingang D wird nur durch Takt-Vorderflanke ausgewertet


I Gatterlaufzeiten für Funktion essenziell
I Einhalten der Vorlauf- und Haltezeiten vor/nach der Taktflanke
(s.u. Zeitbedingungen)

A. Mäder 647
JK-Flipflop
10.4.4 Schaltwerke - Flipflops - JK-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

I Takteingang C
I Steuereingänge J („jump“) und K („kill“)
I aktueller Zustand Q, Folgezustand Q+
C J K Q+ Funktion
∗ ∗ ∗ Q Wert gespeichert
↑ 0 0 Q Wert gespeichert
↑ 0 1 0 Rücksetzen
↑ 1 0 1 Setzen
↑ 1 1 Q Invertieren
I universelles Flipflop, sehr flexibel einsetzbar
I in integrierten Schaltungen nur noch selten verwendet
(höherer Hardware-Aufwand als Latch/D-Flipflop)

A. Mäder 648
JK-Flipflop: Realisierung mit D-Flipflop
10.4.4 Schaltwerke - Flipflops - JK-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

clk

[HenHA] Hades Demo: 16-flipflops/40-jkff/jkff-prinzip

A. Mäder 649
JK-Flipflop: Realisierung als Master-Slave Schaltung
10.4.4 Schaltwerke - Flipflops - JK-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

J
Q

NQ
K

[HenHA] Hades Demo: 16-flipflops/40-jkff/jkff

I Achtung: Schaltung wegen Rückkopplungen schwer zu initialisieren

A. Mäder 650
JK-Flipflop: tatsächliche Schaltung im IC 7476
10.4.4 Schaltwerke - Flipflops - JK-Flipflop 64-040 Rechnerstrukturen und Betriebssysteme

Q /Q

nPRESET

CLOCK

nCLEAR

[HenHA] Hades Demo: 16-flipflops/40-jkff/SN7476-single

A. Mäder 651
Flipflop-Typen: Komponenten/Symbole in Hades
10.4.5 Schaltwerke - Flipflops - Hades 64-040 Rechnerstrukturen und Betriebssysteme

D-type latches D-type flipflops

D1 Q1 D3 Q3

CLK1 NQ1 CLK3 NQ3

nSET4

D2 Q2 D4 Q4

CLK2 NQ2 CLK4 NQ4

NR2 nRESET4

JK flipflop

J5

nCLK5 Q5

K5 NQ5

nRESET5

metastable D-Latch (don't use!) metastable D-flipflop (don't use!)

D8 Q8 D9 Q9

CLK8 NQ8 CLK9 NQ9

[HenHA] Hades Demo: 16-flipflops/50-ffdemo/flipflopdemo

A. Mäder 652
Flipflop-Typen: Impulsdiagramme
10.4.5 Schaltwerke - Flipflops - Hades 64-040 Rechnerstrukturen und Betriebssysteme

1
C
0

1
D
0

1
Q (D-Latch)
0

1
Q (D-FF)
0

I pegel- und vorderflankengesteuertes Flipflop


I beide Flipflops hier mit jeweils einer Zeiteinheit Verzögerung
I am Ende undefinierte Werte im Latch
I gleichzeitiger Wechsel von C und D
I Verletzung der Zeitbedingungen
I in der Realität wird natürlich ein Wert 0 oder 1 gespeichert,
abhängig von externen Parametern (Temperatur,
Versorgungsspannung etc.) kann er sich aber ändern
A. Mäder 653
Flipflops: Zeitbedingungen
10.5 Schaltwerke - Zeitbedingungen 64-040 Rechnerstrukturen und Betriebssysteme

I Flipflops werden entwickelt, um Schaltwerke einfacher


entwerfen und betreiben zu können
I Umschalten des Zustandes durch das Taktsignal gesteuert

I aber: jedes Flipflop selbst ist ein asynchrones Schaltwerk


mit kompliziertem internem Zeitverhalten
I Funktion kann nur garantiert werden, wenn (typ-spezifische)
Zeitbedingungen eingehalten werden

⇒ Daten- und Takteingänge dürfen sich nicht gleichzeitig ändern


Welcher Wert wird gespeichert?
⇒ „Vorlauf- und Haltezeiten“ (setup- / hold-time)

A. Mäder 654
Flipflops: Vorlauf- und Haltezeit
10.5 Schaltwerke - Zeitbedingungen 64-040 Rechnerstrukturen und Betriebssysteme

I ts Vorlaufzeit (engl. setup-time): Zeitintervall, innerhalb dessen


das Datensignal vor dem nächsten Takt stabil anliegen muss
I th Haltezeit (engl. hold-time ): Zeitintervall, innerhalb dessen
das Datensignal nach einem Takt noch stabil anliegen muss
I tF F Ausgangsverzögerung
C

⇒ Verletzung der Zeitbedingungen D


„falscher“ Wert an Q

ts th
tFF

A. Mäder 655
Zeitbedingungen: Eingangsvektor
10.5 Schaltwerke - Zeitbedingungen 64-040 Rechnerstrukturen und Betriebssysteme

λ y
thold tsetup
τδmin
x τδ
τδmax
z δ z+
Takt t1 t2
tFF

Takt

A. Mäder 656
Zeitbedingungen: Eingangsvektor (cont.)
10.5 Schaltwerke - Zeitbedingungen 64-040 Rechnerstrukturen und Betriebssysteme

I Änderungen der Eingangswerte x werden beim Durchlaufen von


‹ mindestens um fi‹min , bzw. maximal um fi‹max verzögert
I um die Haltezeit der Zeitglieder einzuhalten, darf x sich nach
einem Taktimpuls frühestens zum Zeitpunkt (t1 + thold − fi‹min )
wieder ändern
I um die Vorlaufzeit vor dem nächsten Takt einzuhalten, muss x
spätestens zum Zeitpunkt (t2 − tsetup − fi‹max ) wieder stabil sein

⇒ Änderungen dürfen nur im grün markierten Zeitintervall erfolgen


thold tsetup
τδmin
τδmax
Takt t1 t2

A. Mäder 657
Zeitbedingungen: interner Zustand
10.5 Schaltwerke - Zeitbedingungen 64-040 Rechnerstrukturen und Betriebssysteme

τδmax
λ y
tFF
τδmin
x δ
thold tsetup
z τδ z+
Takt t1 t2
tFF

Takt

A. Mäder 658
Zeitbedingungen: interner Zustand (cont.)
10.5 Schaltwerke - Zeitbedingungen 64-040 Rechnerstrukturen und Betriebssysteme

I zum Zeitpunkt t1 wird ein Taktimpuls ausgelöst


I nach dem Taktimpuls vergeht die Zeit tFF , bis die Zeitglieder
(Flipflops) ihren aktuellen Eingangswert z + übernommen
haben und als neuen Zustand z am Ausgang bereitstellen
I die neuen Werte von z laufen durch das ‹-Schaltnetz, der
schnellste Pfad ist dabei fi‹min und der langsamste ist fi‹max
⇒ innerhalb der Zeitintervalls (tFF + fi‹min ) bis (tFF + fi‹max )
ändern sich die Werte des Folgezustands z + = grauer Bereich
τδmax
tFF
τδmin
thold tsetup
Takt t1 t2

A. Mäder 659
Zeitbedingungen: interner Zustand (cont.)
10.5 Schaltwerke - Zeitbedingungen 64-040 Rechnerstrukturen und Betriebssysteme

I die Änderungen dürfen frühestens zum Zeitpunkt (t1 + thold )


beginnen, ansonsten würde Haltezeit verletzt
ggf. muss fi‹min vergrößert werden, um diese Bedingung
einhalten zu können (zusätzliche Gatterverzögerungen)
I die Änderungen müssen sich spätestens bis zum Zeitpunkt
(t2 − tsetup ) stabilisiert haben (der Vorlaufzeit der Flipflops vor
dem nächsten Takt)

τδmax
tFF
τδmin
thold tsetup
Takt t1 t2

A. Mäder 660
Maximale Taktfrequenz einer Schaltung
10.5 Schaltwerke - Zeitbedingungen 64-040 Rechnerstrukturen und Betriebssysteme

I aus obigen Bedingungen ergibt sich sofort die maximal


zulässige Taktfrequenz einer Schaltung
I Umformen und Auflösen nach dem Zeitpunkt des nächsten
Takts ergibt zwei Bedingungen

∆t ≥ (tFF + fi‹max + tsetup ) und


∆t ≥ (thold + tsetup )

I falls diese Bedingung verletzt wird („Übertakten“), kann es


(datenabhängig) zu Fehlfunktionen kommen

A. Mäder 661
Taktsignal: Prinzip
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

0
t

0
t
Periode

I periodisches digitales Signal, Frequenz f bzw. Periode fi


I oft symmetrisch
I asymmetrisch für Zweiphasentakt (s.u.)

A. Mäder 662
Taktsignal: Varianten
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

I Pegelsteuerung: Schaltung reagiert, während das Taktsignal


den Wert 1 (bzw. 0) aufweist

I Flankensteuerung: Schaltung reagiert nur, während das


Taktsignal seinen Wert wechselt
I Vorderflankensteuerung: Wechsel von 0 nach 1
I Rückflankensteuerung: –"– von 1 nach 0

I Zwei- und Mehrphasentakte

A. Mäder 663
Taktsignal: Varianten (cont.)
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

0
t

1
Pegelsteuerung
0
t

1
Vorderflanke
0
t

1
Rückflanke
0
t
A. Mäder 664
Taktsignal: Prinzip und Realität
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

0
t

0
t

0
t
I Werteverläufe in realen Schaltungen stark gestört
I Überschwingen/Übersprechen benachbarter Signale
I Flankensteilheit nicht garantiert (bei starker Belastung)
ggf. besondere Gatter („Schmitt-Trigger“)
A. Mäder 665
Problem mit Pegelsteuerung
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

I während des aktiven Taktpegels werden Eingangswerte direkt


übernommen
I falls invertierende Rückkopplungspfade in ‹ vorliegen, kommt es
dann zu instabilen Zuständen (Oszillationen)

I einzelne pegelgesteuerte Zeitglieder (D-Latches) garantieren


keine stabilen Zustände
⇒ Verwendung von je zwei pegelgesteuerten Zeitgliedern und
Einsatz von Zweiphasentakt oder
⇒ Verwendung flankengesteuerter D-Flipflops

A. Mäder 666
Zweiphasentakt
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

I pegelgesteuertes D-Latch ist bei aktivem Takt transparent


I rück-gekoppelte Werte werden sofort wieder durchgelassen
I Oszillation bei invertierten Rückkopplungen

I Reihenschaltung aus jeweils zwei D-Latches


I zwei separate Takte Φ1 und Φ2
I bei Takt Φ1 übernimmt vorderes Flipflop den Wert
erst bei Takt Φ2 übernimmt hinteres Flipflop
I vergleichbar Master-Slave Prinzip bei D-FF aus Latches

A. Mäder 667
Zweiphasentakt (cont.)
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

0
t
1

0
t

Φ1 D Q
0
t
1

0
Φ2 Φ1 Φ2
t
I nicht überlappender Takt mit Phasen Φ1 und Φ2
I vorderes D-Latch übernimmt Eingangswert D während Φ1
bei Φ2 übernimmt das hintere D-Latch und liefert Q
A. Mäder 668
Zweiphasentakt: Erzeugung
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

t_delay = 5 nsec.
CLK
PHI1

PHI2

t_delay = 0.2 sec


t_delay = 0.2 sec
CLK1
PHI3

PHI4

t_delay = 0.2 sec


t_delay = 0.2 sec

[HenHA] Hades Demo: 12-gatedelay/40-tpcg/two-phase-clock-gen

A. Mäder 669
Zweiphasentakt: Erzeugung (cont.)
10.6 Schaltwerke - Taktschemata 64-040 Rechnerstrukturen und Betriebssysteme

I Verzögerungen geeignet wählen


I Eins-Phasen der beiden Takte c1 und c2 sauber getrennt
⇒ nicht-überlappende Taktimpulse zur Ansteuerung von
Schaltungen mit 2-Phasen-Taktung

A. Mäder 670
Beschreibung von Schaltwerken
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I viele verschiedene Möglichkeiten


I graphisch oder textuell

I algebraische Formeln/Gleichungen
I Flusstafel und Ausgangstafel

I Zustandsdiagramm
I State-Charts (hierarchische Zustandsdiagramme)

I Programme (Hardwarebeschreibungssprachen)

A. Mäder 671
Flusstafel und Ausgangstafel
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I entspricht der Funktionstabelle von Schaltnetzen

I Flusstafel: Tabelle für die Folgezustände als Funktion des


aktuellen Zustands und der Eingabewerte
= beschreibt das ‹-Schaltnetz

I Ausgangstafel: Tabelle für die Ausgabewerte als Funktion des


aktuellen Zustands (und der Eingabewerte [Mealy-Modell])
= beschreibt das –-Schaltnetz

A. Mäder 672
Beispiel: Ampel
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I vier Zustände: {rot, rot-gelb, grün, gelb}


I Codierung beispielsweise als 2-bit Vektor (z1 ; z0 )

I Flusstafel
Zustand Codierung Folgezustand
z1 z0 z1+ z0+
rot 0 0 0 1
rot-gelb 0 1 1 0
grün 1 0 1 1
gelb 1 1 0 0

A. Mäder 673
Beispiel: Ampel (cont.)
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I Ausgangstafel
Zustand Codierung Ausgänge
z1 z0 rt ge gr
rot 0 0 1 0 0
rot-gelb 0 1 1 1 0
grün 1 0 0 0 1
gelb 1 1 0 1 0

I Funktionstabelle für drei Schaltfunktionen


I Minimierung z.B. mit KV-Diagrammen

A. Mäder 674
Zustandsdiagramm
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I Zustandsdiagramm: Grafische Darstellung eines Schaltwerks


I je ein Knoten für jeden Zustand
I je eine Kante für jeden möglichen Übergang

I Knoten werden passend benannt


I Kanten werden mit den Eingabemustern gekennzeichnet,
bei denen der betreffende Übergang auftritt

I Moore-Schaltwerke: Ausgabe wird zusammen mit dem Namen


im Knoten notiert
I Mealy-Schaltwerke: Ausgabe hängt vom Input ab
und wird an den Kanten notiert
siehe auch [Link]/wiki/State_diagram

A. Mäder 675
Zustandsdiagramm: Moore-Automat
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

x B
Zustand
A 100
x 1 Name
000
Ausgangs-
werte

y y C Übergang
D 110
Bedingung
100 x x

I Ausgangswerte hängen nur vom Zustand ab


I können also im jeweiligen Knoten notiert werden
I Übergänge werden als Pfeile mit der Eingangsbelegung notiert,
die den Übergang aktiviert
I ggf. Startzustand markieren (z.B. Segment, doppelter Kreis)

A. Mäder 676
Zustandsdiagramm: Mealy-Automat
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

x / 100
B Zustand

A x / 111 1 / 110
Name

y / 100 y / 001 Übergang


C
D Bedingung / Ausgangswerte
x / 000 x / 101

I Ausgangswerte hängen nicht nur vom Zustand sondern


auch von den Eingabewerten ab
I Ausgangswerte an den zugehörigen Kanten notieren
I übliche Notation: Eingangsbelegung / Ausgangswerte

A. Mäder 677
„State-Charts“
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I erweiterte Zustandsdiagramme
1. Hierarchien, erlauben Abstraktion
I Knoten repräsentieren entweder einen Zustand
I oder einen eigenen (Unter-) Automaten
I History-, Default-Mechanismen
2. Nebenläufigkeit, parallel arbeitende FSMs
3. Timer, Zustände nach max. Zeit verlassen

I beliebte Spezifikation für komplexe Automaten,


eingebettete Systeme, Kommunikationssysteme, Protokolle etc.

I David Harel, Statecharts – A visual formalism for complex


systems, CS84-05, Department of Applied Mathematics,
The Weizmann Institute of Science, 1984 [Har87]
[Link]/~dharel/[Link]/[Link]

A. Mäder 678
„State-Charts“ (cont.)
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel Digitaluhr

A. Mäder 679
Endliche Automaten
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I eines der gängigen Konzepte der Informatik


I Modellierung, Entwurf und Simulation
I zeitliche Abfolgen interner Systemzustände
I bedingte Zustandswechsel
I Reaktionen des Systems auf „Ereignisse“
I Folgen von Aktionen
I ...
I weitere „spezielle“ Anwendungsszenarien
I verteilte Systeme (Client-Server etc.)
I Echtzeitsysteme, ggf. mit Erweiterungen
I eingebettete Systeme
I ...
zahlreiche Beispiele

A. Mäder 680
Endliche Automaten (cont.)
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I in der Programmierung . . .
Erkennung des Worts: „a b a“

a b a

S0 S1 S2 S3

b
a

b
S4

a,b

A. Mäder 681
Endliche Automaten (cont.)
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

Game-Design: Verhalten eines Bots

[Link]/tutorials/
finite-state-machines-theory-and-implementation--gamedev-11867

A. Mäder 682
Endliche Automaten (cont.)
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I Beschreibung von Protokollen


I Verhalten verteilter Systeme: Client-Server Architektur
Server State Transitions
Receive Goal

Accept setSucceeded
PENDING ACTIVE SUCCEEDED
setRejected
setAborted
CancelRequest CancelRequest
REJECTED
setSucceeded

setRejected
RECALLING PREEMPTING ABORTED
Accept setAborted

setCancelled setCancelled
Client Triggered

Server Triggered

RECALLED PREEMPTED Terminal State

[Link]/actionlib/DetailedDescription

A. Mäder 683
Endliche Automaten (cont.)
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

Client State Transitions


Send Goal

WAITING FOR
GOAL ACK

[PENDING] [ACTIVE]
Client Triggered

Cancel Goal Server Triggered


PENDING [ACTIVE] ACTIVE
Terminal State

Cancel Goal Cancel Goal [PREEMPTING]


[PREEMPTED]
[ABORTED]
WAITING FOR [SUCCEEDED]
[PREEMPTING] PREEMPTING DONE
CANCEL ACK
[PREEMPTED]
[ABORTED] Receive
[RECALLING] [PREEMPTING] [SUCCEEDED] Result Msg

[PREEMPTED]
WAITING FOR
RECALLING [RECALLED]
[REJECTED] RESULT

[Link]/actionlib/DetailedDescription

A. Mäder 684
Endliche Automaten (cont.)
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I Unterstützung durch Bibliotheken und Werkzeuge


State-Chart Bibliothek: Beispiel Digitalkamera

[Link]/doc/libs/1_71_0/libs/statechart/doc

A. Mäder 685
Endliche Automaten (cont.)
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

FSM Editor / Code-Generator

[Link]/pnp-software/fwprofile, [Link]/fwprofile

⇒ beliebig viele weitere Beispiele . . .


„Endliche Automaten“ werden in RSB nur hardwarenah genutzt

A. Mäder 686
Hardwarebeschreibungssprachen
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

I Beschreibung eines Schaltwerks als Programm:

I normale Hochsprachen C, Java


I spezielle Bibliotheken für normale Sprachen SystemC, Hades
I spezielle Hardwarebeschreibungssprachen Verilog, VHDL

I Hardwarebeschreibungssprachen unterstützen Modellierung


paralleler Abläufe und des Zeitverhaltens einer Schaltung
I wird hier nicht vertieft
I lediglich zwei Beispiele: D-Flipflop in Verilog und VHDL

A. Mäder 687
D-Flipflop in Verilog
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

module dff (clock , reset , din , dout ); // Black -Box Beschreibung


input clock , reset , din; // Ein - und Ausgänge
output dout; //

reg dout; // speicherndes Verhalten

always @( posedge clock or reset) // Trigger für Code


begin //
if ( reset) // async. Reset
dout = 1’b0; //
else // implizite Taktvorderflanke
dout = din; //
end //
endmodule

I Deklaration eines Moduls mit seinen Ein- und Ausgängen


I Deklaration der speichernden Elemente („reg“)
I Aktivierung des Codes bei Signalwechseln („posedge clock“)

A. Mäder 688
D-Flipflop in VHDL
Very High Speed Integrated Circuit Hardware Description Language
10.7 Schaltwerke - Beschreibung von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

library ieee;
use ieee. std_logic_1164 .all;

entity dff is -- Black -Box Beschreibung


port ( clock : in std_logic ; -- Ein - und Ausgänge
reset : in std_logic ; --
din : in std_logic ; --
dout : out std_logic ); --
end entity dff;

architecture behav of dff is -- Verhaltensmodell


begin --
dff_p : process (reset , clock) is -- Trigger für Prozess
begin --
if reset = ’1’ then -- async. Reset
dout <= ’0’; --
elsif rising_edge (clock) then -- Taktvorderflanke
dout <= din; --
end if; --
end process dff_p; --
end architecture behav;

A. Mäder 689
Entwurf von Schaltwerken: sechs Schritte
10.8 Schaltwerke - Entwurf von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

1. Spezifikation (textuell oder graphisch, z.B. Zustandsdiagramm)


2. Aufstellen einer formalen Übergangstabelle
3. Reduktion der Zahl der Zustände
4. Wahl der Zustandscodierung und Aufstellen der Übergangstabelle
5. Minimierung der Schaltnetze
6. Überprüfung des realisierten Schaltwerks

ggf. mehrere Iterationen

A. Mäder 690
Entwurf von Schaltwerken: Zustandscodierung
10.8 Schaltwerke - Entwurf von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

Vielfalt möglicher Codierungen


I binäre Codierung: minimale Anzahl der Zustände
I einschrittige Codes
I one-hot Codierung: ein aktives Flipflop pro Zustand
I applikationsspezifische Zwischenformen

I es gibt Entwurfsprogramme zur Automatisierung


I gemeinsame Minimierung des Realisierungsaufwands von
Ausgangsfunktion, Übergangsfunktion und Speichergliedern

A. Mäder 691
Entwurf von Schaltwerken: Probleme
10.8 Schaltwerke - Entwurf von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

Entwurf ausgehend von Funktionstabellen problemlos


I alle Eingangsbelegungen und Zustände werden berücksichtigt
I don’t-care Terme können berücksichtigt werden

zwei typische Fehler bei Entwurf ausgehend vom Zustandsdiagramm


I mehrere aktive Übergänge bei bestimmten Eingangsbelegungen
⇒ Widerspruch
I keine Übergänge bei bestimmten Eingangsbelegungen
⇒ Vollständigkeit

A. Mäder 692
Überprüfung der Vollständigkeit
10.8 Schaltwerke - Entwurf von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

p Zustände, Zustandsdiagramm mit Kanten hij (x):


Übergang von Zustand i nach Zustand j unter Belegung x

I für jeden Zustand überprüfen:


kommen alle (spezifizierten) Eingangsbelegungen auch
tatsächlich in Kanten vor?
p −1
2_
∀i : hij (x) = 1
j=0

A. Mäder 693
Überprüfung der Widerspruchsfreiheit
10.8 Schaltwerke - Entwurf von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

p Zustände, Zustandsdiagramm mit Kanten hij (x):


Übergang von Zustand i nach Zustand j unter Belegung x

I für jeden Zustand überprüfen:


kommen alle (spezifizierten) Eingangsbelegungen nur
einmal vor?
p−1
2_
` ´
∀i : hij (x) ∧ hik (x) = 0
j;k=0; j6=k

A. Mäder 694
Vollständigkeit und Widerspruchsfreiheit: Beispiel
10.8 Schaltwerke - Entwurf von Schaltwerken 64-040 Rechnerstrukturen und Betriebssysteme

x1
B
A x1 x0

x1

C
D

I Zustand A, Vollständigkeit: x1 ∨ x1 x0 ∨ x1 = 1 vollständig


I Zustand A, Widerspruchsfreiheit: alle Paare testen
x1 ∧ x1 x0 = 0 ok
x1 ∧ x1 = 0 ok
x1 x0 ∧ x1 6= 0 für x1 = 0 und x0 = 1 beide Übergänge aktiv
A. Mäder 695
Schaltwerke: Beispiele
10.9 Schaltwerke - Beispiele 64-040 Rechnerstrukturen und Betriebssysteme

I Verkehrsampel
I drei Varianten mit unterschiedlicher Zustandscodierung

I Zählschaltungen
I einfacher Zähler, Zähler mit Enable (bzw. Stop),
I Vorwärts-Rückwärts Zähler, Realisierung mit JK-Flipflops und
D-Flipflops

I Digitaluhr
I BCD Zähler
I DCF77 Protokoll
I Siebensegment-Anzeige

A. Mäder 696
Schaltwerksentwurf: Ampel
10.9.1 Schaltwerke - Beispiele - Ampelsteuerung 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel Verkehrsampel:
I drei Ausgänge: {rot, gelb, grün}
I vier Zustände: {rot, rot-gelb, grün, gelb}
I zunächst kein Eingang, feste Zustandsfolge wie oben

I Aufstellen des Zustandsdiagramms


I Wahl der Zustandscodierung
I Aufstellen der Tafeln für ‹- und –-Schaltnetz
I anschließend Minimierung der Schaltnetze
I Realisierung (je 1 D-Flipflop pro Zustandsbit) und Test

A. Mäder 697
Schaltwerksentwurf: Ampel – Variante 1
10.9.1 Schaltwerke - Beispiele - Ampelsteuerung 64-040 Rechnerstrukturen und Betriebssysteme

I vier Zustände, Codierung als 2-bit Vektor (z1 ; z0 )


I Fluss- und Ausgangstafel für binäre Zustandscodierung
Zustand Codierung Folgezustand Ausgänge
z1 z0 z1+ z0+ rt ge gr
rot 0 0 0 1 1 0 0
rot-gelb 0 1 1 0 1 1 0
grün 1 0 1 1 0 0 1
gelb 1 1 0 0 0 1 0
I resultierende Schaltnetze
z1+ = (z1 ∧ z0 ) ∨ (z1 ∧ z0 ) = z1 ⊕ z0
z0+ = z0
rt = z1
ge = z0
gr = (z1 ∧ z0 )

A. Mäder 698
Schaltwerksentwurf: Ampel – Variante 1 (cont.)
10.9.1 Schaltwerke - Beispiele - Ampelsteuerung 64-040 Rechnerstrukturen und Betriebssysteme

clk

[HenHA] Hades Demo: 18-fsm/10-trafficlight/ampel_41

A. Mäder 699
Schaltwerksentwurf: Ampel – Variante 2
10.9.1 Schaltwerke - Beispiele - Ampelsteuerung 64-040 Rechnerstrukturen und Betriebssysteme

I 4+1 Zustände, Codierung als 3-bit Vektor (z2 ; z1 ; z0 )


Reset-Zustand: alle Lampen aus
I Zustandsbits korrespondieren mit den aktiven Lampen:
g r = z2 , g e = z1 und r t = z0
Zustand Codierung Folgezustand
z2 z1 z0 z2+ z1+ z0+
reset 0 0 0 0 0 1
rot 0 0 1 0 1 1
rot-gelb 0 1 1 1 0 0
grün 1 0 0 0 1 0
gelb 0 1 0 0 0 1
I benutzt 1-bit zusätzlich für die Zustände
I Ausgangsfunktion – minimal: entfällt
I Übergangsfunktion ‹ : z2+ = (z1 ∧ z0 ) z1+ = z2 ∨ (z1 ∧ z0 )
z0+ = (z2 ∧ z0 ) ∨ (z1 ∧ z0 )
A. Mäder 700
Schaltwerksentwurf: Ampel – Variante 2 (cont.)
10.9.1 Schaltwerke - Beispiele - Ampelsteuerung 64-040 Rechnerstrukturen und Betriebssysteme

clk

[HenHA] Hades Demo: 18-fsm/10-trafficlight/ampel_42

A. Mäder 701
Schaltwerksentwurf: Ampel – Variante 3
10.9.1 Schaltwerke - Beispiele - Ampelsteuerung 64-040 Rechnerstrukturen und Betriebssysteme

I vier Zustände, Codierung als 4-bit one-hot Vektor (z3 ; z2 ; z1 ; z0 )


I Beispiel für die Zustandscodierung
Zustand Codierung Folgezustand
z3 z2 z1 z0 z3+ z2+ z1+ z0+
rot 0 0 0 1 0 0 1 0
rot-gelb 0 0 1 0 0 1 0 0
grün 0 1 0 0 1 0 0 0
gelb 1 0 0 0 0 0 0 1

I 4-bit statt minimal 2-bit für die Zustände


I Übergangsfunktion ‹ minimal: Rotate-Left um 1
⇒ Automat sehr schnell, hohe Taktrate möglich
I Ausgangsfunktion – sehr einfach:
g r = z2 g e = z3 ∨ z1 r t = z1 ∨ z0

A. Mäder 702
Schaltwerksentwurf: Ampel – Variante 3 (cont.)
10.9.1 Schaltwerke - Beispiele - Ampelsteuerung 64-040 Rechnerstrukturen und Betriebssysteme

1
clk

[HenHA] Hades Demo: 18-fsm/10-trafficlight/ampel_44

A. Mäder 703
Schaltwerksentwurf: Ampel – Zusammenfassung
10.9.1 Schaltwerke - Beispiele - Ampelsteuerung 64-040 Rechnerstrukturen und Betriebssysteme

I viele Möglichkeiten der Zustandscodierung

I Dualcode: minimale Anzahl der Zustände


I applikations-spezifische Codierungen
I One-Hot Encoding: viele Zustände, einfache Schaltnetze
I ...

I Kosten/Performanz des Schaltwerks abhängig von Codierung


I Heuristiken zur Suche nach (relativem) Optimum

A. Mäder 704
Zählschaltungen
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

I diverse Beispiele für Zählschaltungen

I Zustandsdiagramme und Flusstafeln


I Schaltbilder

I n-bit Vorwärtszähler
I n-bit Zähler mit Stop und/oder Reset
I Vorwärts-/Rückwärtszähler
I synchrone und asynchrone Zähler
I Beispiel: Digitaluhr (BCD Zähler)

A. Mäder 705
2-bit Zähler: Zustandsdiagramm
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

00
1

11 01

1
10

I Zähler als „trivialer“ endlicher Automat

A. Mäder 706
2-bit Zähler mit Enable: Zustandsdiagramm, Flusstafel
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

Eingabe e e
e
00
Zustand Folgezustand
e 00 01 00
e e
01 10 01
10 11 10
11 01
e
11 00 11
e

e
10
e

A. Mäder 707
3-bit Zähler mit Enable, Vor-/Rückwärts
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

e Eingabe ev ev e∗
e v
000
e v Zustand Folgezustand
e e
000 001 111 000
111
e v e v
001
001 010 000 001
e v e v 010 011 001 010
e v e v
011 100 010 011
e 110 010 e
100 101 011 100
101 110 100 101
e v e v
110 111 101 110
e v e v
111 000 110 111
e v e v
101 011
e e
100
e v e v

A. Mäder 708
5-bit Zähler mit Reset: Zustandsdiagramm und Flusstafel
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

Eingabe 1: stop, 2: zählen, 3: rückwärts zählen, 4: Reset nach A

A. Mäder 709
4-bit Binärzähler mit JK-Flipflops
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

Z0 Z1 Z2 Z3

clock

[HenHA] Hades Demo: 30-counters/30-sync/sync

I J0 = K0 = 1: Ausgang z0 wechselt bei jedem Takt


I Ji = Ki = (z0 z1 : : : zi−1 ): Ausgang zi wechselt,
wenn alle niedrigeren Stufen 1 sind

A. Mäder 710
4-bit Binärzähler mit D-Flipflops (kaskadierbar)
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

carry_in

carry_out

Q0 Q1 Q2 Q3

clk

[HenHA] Hades Demo: 30-counters/30-sync/sync-dff

I D0 = Q0 ⊕ cin wechselt bei Takt, wenn cin aktiv ist


I Di = Qi ⊕ (cin Q0 Q1 : : : Qi−1 ) wechselt, wenn alle niedrigeren
Stufen und Carry-in cin 1 sind

A. Mäder 711
Asynchroner n-bit Zähler/Teiler mit D-Flipflops
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

f/2 f/4 f/8 f/16 f/32 f/64 f/128 f/256

clkin/256

[HenHA] Hades Demo: 30-counters/20-async/counter-dff

I Di = Qi : jedes Flipflop wechselt bei seinem Taktimpuls


I Takteingang C0 treibt nur das vorderste Flipflop
I Ci = Qi−1 : Ausgang der Vorgängerstufe als Takt von Stufe i

I erstes Flipflop wechselt bei jedem Takt ⇒ Zählrate C0 =2


zweites Flipflop bei jedem zweiten Takt ⇒ Zählrate C0 =4
n-tes Flipflop bei jedem n-ten Takt ⇒ Zählrate C0 =2n
I sehr hohe maximale Taktrate
− Achtung: Flipflops schalten nacheinander, nicht gleichzeitig

A. Mäder 712
Asynchrone 4-bit Vorwärts- und Rückwärtszähler
10.9.2 Schaltwerke - Beispiele - Zählschaltungen 64-040 Rechnerstrukturen und Betriebssysteme

Z0 Z1 Z2 Z3

CLK_UP

Y0 Y1 Y2 Y3

CLK_DOWN

[HenHA] Hades Demo: 30-counters/20-async/counter


A. Mäder 713
Digitaluhr mit BCD Zählern
10.9.3 Schaltwerke - Beispiele - verschiedene Beispiele 64-040 Rechnerstrukturen und Betriebssysteme

CLK-1kHz

CLK-1Hz

fast-or-slow

slow/fast

BCD-Counter BCD-Counter BCD-Counter BCD-Counter BCD-Counter BCD-Counter

[HenHA] Hades Demo: 30-counters/80-digiclock/digiclock

I Stunden Minuten Sekunden (hh:mm:ss)


I async. BCD Zähler mit Takt (rechts) und Reset (links unten)
I Übertrag 1er- auf 10er-Stelle jeweils beim Übergang 9 → 0
I Übertrag und Reset der Zehner beim Auftreten des Wertes 6
A. Mäder 714
Funkgesteuerte DCF 77 Uhr
10.9.3 Schaltwerke - Beispiele - verschiedene Beispiele 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel für komplexe Schaltung


I mehrere einfache Komponenten
I gekoppelte Automaten, Zähler etc.

I DCF 77 Zeitsignal
I Langwelle 77,5 KHz
I Sender nahe Frankfurt
I ganz Deutschland abgedeckt
I pro Sekunde wird ein Bit übertragen
I Puls mit abgesenktem Signalpegel: „Amplitudenmodulation“
I Pulslänge: 100 ms entspricht Null, 200 ms entspricht Eins
I Pulsbeginn ist Sekundenbeginn
I pro Minute werden 59 Bits übertragen
I Uhrzeit hh:mm (implizit Sekunden), MEZ/MESZ
I Datum dd:mm:yy, Wochentag
I Parität
I fehlender 60ster Puls markiert Ende einer Minute
A. Mäder 715
Funkgesteuerte DCF 77 Uhr (cont.)
10.9.3 Schaltwerke - Beispiele - verschiedene Beispiele 64-040 Rechnerstrukturen und Betriebssysteme

Sek. Bit Wert Bedeutung Beispiel

I Decodierung der Bits aus DCF 77 Protokoll 0


1
..
.
0

Minutenbeginn
nicht belegt, i.A. wird 0 gesendet
0
0

mit entsprechend entworfenem Schaltwerk 14


15
16

0/1
0/1
– s.o. –
1: Reserveantenne an
1: Stundensprung folgt (z.B. Sommerzeit)
0
0
0
17 0/1 2 Zeitzonenbits: geben die Abweichung von der 1
Sekundenbeginn '0' 18 0/1 1 Weltzeit in Stunden an (MEZ = 1, MESZ = 2) 0
19 0/1 1: Schaltsekunde folgt 0
20 1 Start der Zeitcodierung 1
21 0/1 1 Minuten – Stelle 1 1
22 0/1 2 – s.o. – 0
23 0/1 4 – s.o. – 1
24 0/1 8 – s.o. – 0 =5
'1'
25 0/1 10 Minuten – Stelle 10 1
26 0/1 20 – s.o. – 1
27 0/1 40 – s.o. – 0 =3
t [ms] 0 100 200 1000 28 0/1 Prüfbit zu 21 . . . 27 (even) 0
29 0/1 1 Stunden – Stelle 1 1
30 0/1 2 – s.o. – 0
sec. fehlt Minutenbeginn 31 0/1 4 – s.o. – 0
32 0/1 8 – s.o. – 1 =9
33 0/1 10 Stunden – Stelle 10 1
34 0/1 20 – s.o. – 0 =1
35 0/1 Prüfbit zu 29 . . . 34 (even) 1
36 0/1 1 Kalendertag – Stelle 1 0
37 0/1 2 – s.o. – 1
38 0/1 4 – s.o. – 0
39 0/1 8 – s.o. – 0 =2
40 0/1 10 Kalendertag – Stelle 10 0
t [ms] 0 100 200 1000 2000 41 0/1 20 – s.o. – 0 =0
42 0/1 1 Wochentag 1
43 0/1 2 – s.o. – 0

I siehe z.B.: [Link]/wiki/DCF77 44


45
46
0/1
0/1
0/1
4
1
2
– s.o. –
Kalendermonat – Stelle 1
– s.o. –
0
0
1
= 1 (Mo)

47 0/1 4 – s.o. – 0
48 0/1 8 – s.o. – 0 =2
49 0/1 10 Kalendermonat – Stelle 10 1 =1
50 0/1 1 Kalenderjahr – Stelle 1 1
51 0/1 2 – s.o. – 0
52 0/1 4 – s.o. – 0
53 0/1 8 – s.o. – 1 =9
54 0/1 10 Kalenderjahr – Stelle 10 1
55 0/1 20 – s.o. – 0
56 0/1 40 – s.o. – 0
57 0/1 80 – s.o. – 0 =1
58 0/1 Prüfbit zu 36 . . . 57 (even) 1
59 – Marke fehlt, weder 0 noch 1 wird gesendet
Beispiel: Mo. 02.12.19: 19.35

A. Mäder 716
Funkgesteuerte DCF 77 Uhr: Gesamtsystem
10.9.3 Schaltwerke - Beispiele - verschiedene Beispiele 64-040 Rechnerstrukturen und Betriebssysteme

i16

reset decoder-FSM wait-counter

clocks mins_1
shifter

mins_10

DCF-77 sender
dcf_in
hrs_1

[Link]
5/9/97

i15

hrs_10

[HenHA] Hades Demo: 45-misc/80-dcf77/dcf77

A. Mäder 717
Multiplex-Siebensegment-Anzeige
10.9.3 Schaltwerke - Beispiele - verschiedene Beispiele 64-040 Rechnerstrukturen und Betriebssysteme

Ansteuerung mehrstelliger Siebensegment-Anzeigen?


I direkte Ansteuerung erfordert 7 · n Leitungen für n Ziffern
I und je einen Siebensegment-Decoder pro Ziffer

Zeit-Multiplex-Verfahren benötigt nur 7 + n Leitungen


I die Anzeigen werden nacheinander nur ganz kurz eingeschaltet
I ein gemeinsamer Siebensegment-Decoder
Eingabe wird entsprechend der aktiven Ziffer umgeschaltet
I das Auge sieht die leuchtenden Segmente und „mittelt“
I ab ca. 100 Hz Frequenz erscheint die Anzeige ruhig

A. Mäder 718
Multiplex-Siebensegment-Anzeige (cont.)
10.9.3 Schaltwerke - Beispiele - verschiedene Beispiele 64-040 Rechnerstrukturen und Betriebssysteme

Hades-Beispiel: Kombination mehrerer bekannter einzelner


Schaltungen zu einem komplexen Gesamtsystem
I vierstellige Anzeige
I darzustellende Werte sind im RAM (74219) gespeichert
I Zähler-IC (74590) erzeugt 2-bit Folge {00, 01, 10, 11}
I 3:8-Decoder-IC (74138) erzeugt daraus die Folge
{1110, 1101, 1011, 0111} um nacheinander je eine
Anzeige zu aktivieren (low-active)
I Siebensegment-Decoder-IC (7449) treibt die sieben
Segmentleitungen

A. Mäder 719
Multiplex-Siebensegment-Anzeige (cont.)
10.9.3 Schaltwerke - Beispiele - verschiedene Beispiele 64-040 Rechnerstrukturen und Betriebssysteme

7-segment decoder

1 0

'49
RAM

'219

1
0
'590
1:n decoder
3:8
counter

[HenHA] Hades Demo: 45-misc/50-displays/multiplexed-display

A. Mäder 720
Literatur
10.10 Schaltwerke - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[SS04] W. Schiffmann, R. Schmitz: Technische Informatik 1 –


Grundlagen der digitalen Elektronik.
5. Auflage, Springer-Verlag, 2004. ISBN 978–3–540–40418–7
[Rei98] N. Reifschneider: CAE-gestützte IC-Entwurfsmethoden.
Prentice Hall, 1998. ISBN 3–8272–9550–5
[WE94] N.H.E. Weste, K. Eshraghian:
Principles of CMOS VLSI design – A systems perspective.
2nd edition, Addison-Wesley, 1994. ISBN 0–201–53376–6
[Har87] D. Harel: Statecharts: A visual formalism for complex
systems. in: Sci. Comput. Program. 8 (1987), Juni, Nr. 3,
S. 231–274. ISSN 0167–6423

A. Mäder 721
Interaktives Lehrmaterial
10.10 Schaltwerke - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[HenHA] N. Hendrich: HADES — HAmburg DEsign System.


Universität Hamburg, FB Informatik, Lehrmaterial.
[Link]/applets/hades/webdemos
[Hei05] K. von der Heide: Vorlesung: Technische Informatik 1 —
interaktives Skript. Universität Hamburg, FB Informatik, 2005.
[Link]/lectures/2004ws/
vorlesung/t1

A. Mäder 722
Gliederung
11 Rechnerarchitektur I 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
Motivation
von-Neumann Rechner

A. Mäder 723
Gliederung (cont.)
11 Rechnerarchitektur I 64-040 Rechnerstrukturen und Betriebssysteme

Beschreibungsebenen
Software
HW Abstraktionsebenen
Hardwarestruktur
Speicherbausteine
Busse
Mikroprogrammierung
Beispielsystem: ARM
Wie rechnet ein Rechner?
Literatur
12. Instruction Set Architecture
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 724
Was ist Rechnerarchitektur?
11.1 Rechnerarchitektur I - Motivation 64-040 Rechnerstrukturen und Betriebssysteme

Definitionen
1. The term architecture is used here to describe the attributes of a system as
seen by the programmer, i.e., the conceptual structure and functional
behaviour, as distinct from the organization and data flow and control, the
logical and the physical implementation. [Amdahl, Blaauw, Brooks]

2. The study of computer architecture is the study of the organization and


interconnection of components of computer systems. Computer architects
construct computers from basic building blocks such as memories,
arithmetic units and buses.

A. Mäder 725
Was ist Rechnerarchitektur? (cont.)
11.1 Rechnerarchitektur I - Motivation 64-040 Rechnerstrukturen und Betriebssysteme

From these building blocks the computer architect can construct anyone of
a number of different types of computers, ranging from the smallest
hand-held pocket-calculator to the largest ultra-fast super computer. The
functional behaviour of the components of one computer are similar to that
of any other computer, whether it be ultra-small or ultra-fast.
By this we mean that a memory performs the storage function, an adder
does addition, and an input/output interface passes data from a processor
to the outside world, regardless of the nature of the computer in which
they are embedded. The major differences between computers lie in the
way of the modules are connected together, and the way the computer
system is controlled by the programs. In short, computer architecture is the
discipline devoted to the design of highly specific and individual computers
from a collection of common building blocks. [Stone]

A. Mäder 726
Rechnerarchitektur: zwei Aspekte
11.1 Rechnerarchitektur I - Motivation 64-040 Rechnerstrukturen und Betriebssysteme

1. Operationsprinzip:
das funktionelle Verhalten der Architektur Befehlssatz
= Programmierschnittstelle
= ISA – Instruction Set Architecture
Befehlssatzarchitektur
= Maschinenorganisation: Wie werden Befehle abgearbeitet?

→ folgt ab Kapitel 12 Instruction Set Architecture

2. Hardwarearchitektur:
der strukturelle Aufbau des Rechnersystems Mikroarchitektur
= Art und Anzahl der Hardware-Betriebsmittel +
die Verbindungs- / Kommunikationseinrichtungen
= (technische) Implementierung

A. Mäder 727
Wdh. von-Neumann Konzept
11.2 Rechnerarchitektur I - von-Neumann Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I J. Mauchly, J.P. Eckert, J. von-Neumann 1945


I Abstrakte Maschine mit minimalem Hardwareaufwand
I System mit Prozessor, Speicher, Peripheriegeräten
I die Struktur ist unabhängig von dem Problem, das Problem wird
durch austauschbaren Speicherinhalt (Programm) beschrieben
I gemeinsamer Speicher für Programme und Daten
I fortlaufend adressiert
I Programme können wie Daten manipuliert werden
I Daten können als Programm ausgeführt werden
I Befehlszyklus: Befehl holen, decodieren, ausführen
⇒ enorm flexibel
I alle aktuellen Rechner basieren auf diesem Prinzip
I aber vielfältige Architekturvarianten, Befehlssätze usw.

A. Mäder 728
Wdh. Programmverarbeitung
11.2 Rechnerarchitektur I - von-Neumann Rechner 64-040 Rechnerstrukturen und Betriebssysteme

Programm als Sequenz elementarer


Programmanfang
I
Anweisungen (Befehle) ersten Befehl aus
dem Speicher holen

I als Bitvektoren im Speicher codiert


I Interpretation (Operanden, Befehle Befehl in das Befehls-
register bringen
und Adressen) ergibt sich aus dem
Kontext (der Adresse) Ausführung eventueller
Adressänderungen und ggf.
Auswertung weiterer Angaben

zeitsequenzielle Ausführung der


im Befehl
I
Instruktionen eventuell Operanden aus
dem Speicher holen
nächsten Befehl aus
dem Speicher holen

Umsetzen des Operationscodes


in Steueranweisungen

Operation ausführen,
Befehlszähler um 1 erhöhen
oder Sprungadresse laden

Programmende?
Nein

Ja
Ende

A. Mäder 729
Wdh. Programmverarbeitung (cont.)
11.2 Rechnerarchitektur I - von-Neumann Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I Ausführungszyklus

Instruction
Befehl aus Programmspeicher holen
Fetch

Instruction auszuführende Aktionen und Länge der


Decode Instruktion bestimmen, ggf. Worte nachladen

Operand
Operanden ermitteln und laden
Fetch

Execute Ergebnis der Operation berechnen


bzw. Status ermitteln
Result
Ergebnisse für später abspeichern
Store

Next
Folgeoperation ermitteln
Instruction

A. Mäder 730
Wdh. von-Neumann Rechner
11.2 Rechnerarchitektur I - von-Neumann Rechner 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

Fünf zentrale Komponenten:


I Prozessor mit Steuerwerk und Rechenwerk (ALU, Register)
I Speicher, gemeinsam genutzt für Programme und Daten
I Eingabe- und Ausgabewerke
I verbunden durch Bussystem

A. Mäder 731
Wdh. von-Neumann Rechner (cont.)
11.2 Rechnerarchitektur I - von-Neumann Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I Prozessor (CPU) = Steuerwerk + Operationswerk


I Steuerwerk: zwei zentrale Register
I Befehlszähler (program counter PC)
I Befehlsregister (instruction register IR)
I Operationswerk (Datenpfad, data-path)
I Rechenwerk (arithmetic-logic unit ALU)
I Universalregister (mind. 1 Akkumulator, typisch 8 . . . 64 Register)
I evtl. Register mit Spezialaufgaben
I Speicher (memory)
I Hauptspeicher/RAM: random-access memory
I Hauptspeicher/ROM: read-only memory zum Booten
I Externspeicher: Festplatten, CD/DVD, Magnetbänder
I Peripheriegeräte (Eingabe/Ausgabe, I/O)

A. Mäder 732
Wdh. Hardwareaufbau / Rechnerarchitektur
11.2 Rechnerarchitektur I - von-Neumann Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I Verschaltung der Hardwarekomponenten für alle mögl.


Datentransfers
I abhängig vom Befehl werden nur bestimmte Pfade aktiv
I Ausführungszyklus
Befehl holen decodieren PC inkrementieren
BR AR BR AR BR AR
D D D D D D
ENA ENA ENA ENA ENA ENA

0 0 0
A A A

INCR INCR INCR


CLK CLK CLK CLK CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN NR 00_H
Q
NR 00_H
Q Y A B CIN NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU OPC
ALU OPC
ALU
A1 A0 COUT Y A1 A0 COUT Y A1 A0 COUT Y

S 2:1 Y
S 2:1 Y
S 2:1 Y

PC AKKU PC AKKU PC AKKU


D D D D D D
ENA ENA ENA ENA ENA ENA

CLK CLK CLK CLK CLK CLK

NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q

STW STW STW


A1 A0 A1 A0 A1 A0

2:1 2:1 2:1


Befehl alu_function Befehl alu_function Befehl alu_function
AkkuInhalt enable_pc S AkkuInhalt enable_pc S AkkuInhalt enable_pc S
Y DIN Y DIN Y DIN
Overflow select_pcmux Overflow select_pcmux Overflow select_pcmux

0 0 0
select_addr_mux select_addr_mux select_addr_mux

enable_breg nCS enable_breg nCS enable_breg nCS

clock
RAM clock
RAM clock
RAM
CLK enable_areg A CLK enable_areg A CLK enable_areg A

nRESET enable_akku nWE nRESET enable_akku nWE nRESET enable_akku nWE

enable_ram_write enable_ram_write enable_ram_write

switch switch_in overflow_flag switch switch_in overflow_flag switch switch_in overflow_flag


DOUT DOUT DOUT

cycle3_execute cycle3_execute cycle3_execute

cycle2_address execute cycle2_address execute cycle2_address execute


cycle1_fetch address cycle1_fetch address cycle1_fetch address
fetch fetch fetch

BR AR BR AR BR AR
D D D D D D
ENA ENA ENA ENA ENA ENA

0 0 0
A A A

INCR INCR INCR


CLK CLK CLK CLK CLK CLK

NR 00_H
Q
NR 00_H
Q Y A B CIN NR 00_H
Q
NR 00_H
Q Y A B CIN NR 00_H
Q
NR 00_H
Q Y A B CIN

OPC
ALU OPC
ALU OPC
ALU
A1 A0 COUT Y A1 A0 COUT Y A1 A0 COUT Y

S 2:1 Y
S 2:1 Y
S 2:1 Y

PC AKKU PC AKKU PC AKKU


D D D D D D
ENA ENA ENA ENA ENA ENA

CLK CLK CLK CLK CLK CLK

NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q
NR 00_H
Q

STW STW STW


A1 A0 A1 A0 A1 A0

2:1 2:1 2:1


Befehl alu_function Befehl alu_function Befehl alu_function
AkkuInhalt enable_pc S AkkuInhalt enable_pc S AkkuInhalt enable_pc S
Y DIN Y DIN Y DIN
Overflow select_pcmux Overflow select_pcmux Overflow select_pcmux

0 0 0
select_addr_mux select_addr_mux select_addr_mux

enable_breg nCS enable_breg nCS enable_breg nCS

clock
RAM clock
RAM clock
RAM
CLK enable_areg A CLK enable_areg A CLK enable_areg A

nRESET enable_akku nWE nRESET enable_akku nWE nRESET enable_akku nWE

enable_ram_write enable_ram_write enable_ram_write

switch switch_in overflow_flag switch switch_in overflow_flag switch switch_in overflow_flag


DOUT DOUT DOUT

cycle3_execute cycle3_execute cycle3_execute

cycle2_address execute cycle2_address execute cycle2_address execute


cycle1_fetch address cycle1_fetch address cycle1_fetch address
fetch fetch fetch

rechnen speichern springen


A. Mäder 733
Beschreibungsebenen
11.3 Rechnerarchitektur I - Beschreibungsebenen 64-040 Rechnerstrukturen und Betriebssysteme

I Schichten-Ansicht: Software – Hardware


Application programs
Software
Operating system
Processor Main memory I/O devices Hardware

[BO15]

I Abstraktionen durch Betriebssystem


Processes

Virtual memory

Files

Processor Main memory I/O devices


[BO15]

A. Mäder 734
Das Compilierungssystem
11.3.1 Rechnerarchitektur I - Beschreibungsebenen - Software 64-040 Rechnerstrukturen und Betriebssysteme

printf.o

Pre-
hello.c hello.i Compiler hello.s Assembler hello.o Linker hello
processor
(cc1) (as) (ld)
(cpp)
Source Modified Assembly Relocatable Executable
program source program object object
(text) program (text) programs program
(text) (binary) (binary)

[BO15]

I verschiedene Repräsentationen des Programms


I Hochsprache
I Assembler
I Maschinensprache
I Ausführung der Maschinensprache
I von-Neumann Zyklus: Befehl holen, decodieren, ausführen
I reale oder virtuelle Maschine

A. Mäder 735
Das Compilierungssystem (cont.)
11.3.1 Rechnerarchitektur I - Beschreibungsebenen - Software 64-040 Rechnerstrukturen und Betriebssysteme

temp = v[k];
High Level Language
Program v[k] = v[k+1];
v[k+1] = temp;
Compiler
lw $15, 0($2)
Assembly Language lw $16, 4($2)
Program sw $16, 0($2)
sw $15, 4($2)
Assembler
0000 1001 1100 0110 1010 1111 0101 1000
Machine Language 1010 1111 0101 1000 0000 1001 1100 0110
Program 1100 0110 1010 1111 0101 1000 0000 1001
0101 1000 0000 1001 1100 0110 1010 1111

Machine Interpretation

Control Signal
Specification ALUOP[0:3] <= InstReg[9:11] & MASK

[PH16b]

A. Mäder 736
Abstraktion im VLSI-Entwurf
11.3.2 Rechnerarchitektur I - Beschreibungsebenen - HW Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

Hardware Abstraktionsebenen
− keine einheitliche Bezeichnung in der Literatur
I Architekturebene
I Funktion/Verhalten Leistungsanforderungen
I Struktur Netzwerk
aus Prozessoren, Speicher, Busse, Controller . . .
I Nachrichten Programme, Prokolle
I Geometrie Systempartitionierung

I/O
CPU Speicher
Control

Datenbus
Adressbus

A. Mäder 737
Abstraktion im VLSI-Entwurf (cont.)
11.3.2 Rechnerarchitektur I - Beschreibungsebenen - HW Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

I Hauptblockebene (Algorithmenebene, funktionale Ebene)


I Funktion/Verhalten Algorithmen, formale Funktionsmodelle
I Struktur Blockschaltbild
aus Hardwaremodule, Busse . . .
I Nachrichten Prokolle
I Geometrie Cluster

flags
OPW control STW CPU

DB
AB

A. Mäder 738
Abstraktion im VLSI-Entwurf (cont.)
11.3.2 Rechnerarchitektur I - Beschreibungsebenen - HW Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

I Register-Transfer Ebene
I Funktion/Verhalten Daten- und Kontrollfluss, Automaten . . .
I Struktur RT-Diagramm
aus Register, Multiplexer, ALUs . . .
I Nachrichten Zahlencodierungen, Binärworte . . .
I Geometrie Floorplan

OPW
ALU aluOp

Res

ldAccu enDB
Accu
DB

A. Mäder 739
Abstraktion im VLSI-Entwurf (cont.)
11.3.2 Rechnerarchitektur I - Beschreibungsebenen - HW Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

I Logikebene (Schaltwerkebene)
I Funktion/Verhalten Boole’sche Gleichungen
I Struktur Gatternetzliste, Schematic
aus Gatter, Flipflops, Latches . . .
I Nachrichten Bit
I Geometrie Moduln

ALU

A. Mäder 740
Abstraktion im VLSI-Entwurf (cont.)
11.3.2 Rechnerarchitektur I - Beschreibungsebenen - HW Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

I elektrische Ebene (Schaltkreisebene)


I Funktion/Verhalten Differentialgleichungen
I Struktur elektrisches Schaltbild
aus Transistoren, Kondensatoren . . .
I Nachrichten Ströme, Spannungen
I Geometrie Polygone, Layout → physikalische Ebene
vdd

o
i1

i2
gnd

A. Mäder 741
Abstraktion im VLSI-Entwurf (cont.)
11.3.2 Rechnerarchitektur I - Beschreibungsebenen - HW Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

I physikalische Ebene (geometrische Ebene)


I Funktion/Verhalten partielle DGL
I Struktur Dotierungsprofile

A. Mäder 742
Y-Diagramm
11.3.2 Rechnerarchitektur I - Beschreibungsebenen - HW Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

Architektur

Algorithmisch

Verhalten Struktur
Funktional
Systemspezifikation CPU, Speicher Netzwerk

Algorithmen Logik Modul Blockschaltbild

Register-Transfer ALU, Register RT-Schematic


Schaltkreis
Boole'sche Gleichungen Gatter, FF Netzliste, Schematic

Differenzialgleichungen Transistoren elektrisches Schaltbild

Polygone

Moduln

Floorplan

Cluster

Systempartitionierung
D. Gajski, R. Kuhn 1983:
Geometrie „New VLSI Tools“ [GK83]

A. Mäder 743
Y-Diagramm (cont.)
11.3.2 Rechnerarchitektur I - Beschreibungsebenen - HW Abstraktionsebenen 64-040 Rechnerstrukturen und Betriebssysteme

drei unterschiedliche Aspekte/Dimensionen:


1 Verhalten
2 Struktur (logisch)
3 Geometrie (physikalisch)

I Start möglichst abstrakt, z.B. als Verhaltensbeschreibung


I Ende des Entwurfsprozesses ist vollständige IC Geometrie
für die Halbleiterfertigung (Planarprozess)

I Entwurfsprogramme („EDA“, Electronic Design Automation)


unterstützen den Entwerfer: setzen Verhalten in Struktur und
Struktur in Geometrien um

A. Mäder 744
Systemmodellierung
11.4 Rechnerarchitektur I - Hardwarestruktur 64-040 Rechnerstrukturen und Betriebssysteme

Modellierung eines digitalen Systems als Schaltung aus


I speichernden Komponenten
I Registern Flipflops, Register, Registerbank
I Speichern SRAM, DRAM, ROM, PLA
I funktionalen Schaltnetzen
I Addierer, arithmetische Schaltungen
I logische Operationen
I „random-logic“ Schaltnetzen
I Verbindungsleitungen
I Busse / Leitungsbündel
I Multiplexer und Tri-state Treiber

A. Mäder 745
Rechnerarchitektur: Hardwarestruktur
11.4 Rechnerarchitektur I - Hardwarestruktur 64-040 Rechnerstrukturen und Betriebssysteme

I bisher:
I Gatter und Schaltnetze
I Flipflops als einzelne Speicherglieder
I Schaltwerke zur Ablaufsteuerung

I weitere Komponenten: Register-Transfer- und Hauptblockebene


I Speicher
I Busse, Bustiming
I Mikroprogrammierung zur Ablaufsteuerung

A. Mäder 746
Speicher
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

I System zur Speicherung von Information


I als Feld von N Adressen mit je m-bit Speicherworten
I typischerweise mit n-bit Adressen und N = 2n
I Kapazität also 2n · m Bits

I Klassifikation
I Speicherkapazität?
I Schreibzugriffe möglich?
I Schreibzugriffe auf einzelne Bits/Bytes oder nur Blöcke?
I Information flüchtig oder dauerhaft gespeichert?
I Zugriffszeiten beim Lesen und Schreiben
I Technologie

A. Mäder 747
Speicherbausteine: Varianten
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

byte- Typische
Typ Kategorie Löschen adressierbar flüchtig Anwendung
SRAM Lesen/Schreiben elektrisch ja ja Level-2 Cache
DRAM Lesen/Schreiben elektrisch ja ja Hauptspeicher
(alt)
SDRAM Lesen/Schreiben elektrisch ja ja Hauptspeicher
ROM nur Lesen — nein nein Geräte in großen
Stückzahlen
PROM nur Lesen — nein nein Geräte in kleinen
Stückzahlen
EPROM vorw. Lesen UV-Licht nein nein Prototypen
EEPROM vorw. Lesen elektrisch ja nein Prototypen
Flash Lesen/Schreiben elektrisch nein nein Speicherkarten,
Mobile Geräte,
SSDs

A. Mäder 748
ROM: Read-Only Memory
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

ROM (16x8 bits) pullups


bitline 7 bitline 0

address input
A3 wordline 15
0 1 2 3
4 5 6 7 A2 wordline 14
8 9 A B
C D E F A1 wordline 13
- +
A0 . . .

[a]

memory matrix

4:16

wordline 1

wordline 0
address-decoder
bitline 7 bitline 0

output buffers
[HenHA] Hades Webdemo:
40-memories/20-rom/rom
D7 D6 D5 D4 D3 D2 D1 D0

A. Mäder 749
RAM: Random-Access Memory
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

Speicher, der im Betrieb gelesen und geschrieben werden kann


I Arbeitsspeicher des Rechners
I für Programme und Daten
I keine Abnutzungseffekte
I benötigt Spannungsversorgung zum Speichern

I Aufbau als Matrixstruktur


I n Adressbits, konzeptionell 2n Wortleitungen
I m Bits pro Wort
I Realisierung der einzelnen Speicherstellen?
I statisches RAM: 6-Transistor Zelle SRAM
I dynamisches RAM: 1-Transistor Zelle DRAM

A. Mäder 750
RAM: Blockschaltbild
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

data inputs DI3 DI2 DI1 DI0

write
nWriteEnable buffers
bitline 0 (in)
wordline 3

latch latch latch latch

A1

A0

wordline 2
Addr.
Decoder latch latch latch latch
nWriteEnable

2:4

wordline 1

4 × 4 bit latch latch latch latch

2-bit Adresse
4-bit Datenwort wordline 0

latch latch latch latch

bitline 0 (out)
output
nChipSelect buffers

data outputs DO3 DO2 DO1 DO0

[HenHA] Hades Demo: 40-memories/40-ram/ram


A. Mäder 751
RAM: RAS/CAS-Adressdecodierung
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

ras

decoder
array of

latch
memory
cells

A[n:0]
latch

mux

data
cas out
Furber: ARM SoC Architecture [Fur00]

I Aufteilen der Adresse in zwei Hälften


I r as „row address strobe“ wählt „Wordline“
cas „column address strobe“ –"– „Bitline“
I je ein 2(n=2) -bit Decoder/Mux statt ein 2n -bit Decoder

A. Mäder 752
SRAM: statisches RAM
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

I Inhalt bleibt gespeichert solange Betriebsspannung anliegt

I sechs-Transistor Zelle zur Speicherung


I weniger Platzverbrauch als Latches/Flipflops
I kompakte Realisierung in CMOS-Technologie (s.u.)
I zwei rückgekoppelte Inverter zur Speicherung
I zwei n-Kanal Transistoren zur Anbindung an die Bitlines

I schneller Zugriff: Einsatz für Caches


I deutlich höherer Platzbedarf als DRAMs

A. Mäder 753
SRAM: Sechs-Transistor Speicherstelle („6T“)
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

DATA_IN data_in

/write_enable
nENA_BITLINE

wordline (address)
WORDLINE

bitline /bitline

[HenHA] Hades Demo: 05-switched/40-cmos/sramcell


A. Mäder 754
SRAM: Hades Demo
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

Datenwort 0x801B
in Adresse 0x006

andere Speicherworte
noch ungültig

I nur aktiv wenn nCS = 0 (chip select)


I Schreiben wenn nW E = 0 (write enable)
I Ausgabe wenn nOE = 0 (output enable)
[HenHA] Hades Demo: 50-rtlib/40-memory/ram

A. Mäder 755
SRAM: Beispiel IC 6116
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

I integrierte Schaltung, 16 Ki bit Kapazität


I Organisation als 2 Ki Worte mit je 8-bit

I 11 Adresseingänge (A10 . . . A0)


I 8 Anschlüsse für gemeinsamen Daten-Eingang/-Ausgang
I 3 Steuersignale

I CS chip-select: Speicher nur aktiv wenn CS = 0


I W E write-enable: Daten an gewählte Adresse schreiben
I OE output-enable: Inhalt des Speichers ausgeben

I interaktive Hades-Demo zum Ausprobieren [HenHA]


I Hades Demo: 40-memories/40-ram/demo-6116
I Hades Demo: 40-memories/40-ram/two-6116

A. Mäder 756
DRAM: dynamisches RAM
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

I Information wird in winzigen Kondensatoren gespeichert


I pro Bit je ein Transistor und Kondensator

I jeder Lesezugriff entlädt den Kondensator


I Leseverstärker zur Messung der Spannung auf der Bitline
Schwellwertvergleich zur Entscheidung logisch 0/1

− Information muss anschließend neu geschrieben werden


− auch ohne Lese- oder Schreibzugriff ist regelmäßiger Refresh
notwendig, wegen Selbstentladung (Millisekunden)
− 10 × langsamer als SRAM
+ DRAM für hohe Kapazität optimiert, minimaler Platzbedarf

A. Mäder 757
SRAM vs. DRAM
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

data-in /data-in data-in

ena ena ena

wordline wordline

T
T T

2 Inverter = 4T C

bitline /bitline Masse bitline

VCC
...

sense-amp

data-out
GND

I 6 Transistoren/bit I 1 Transistor/bit
I statisch (kein refresh) I C = 5 fF ≈ 47 000 Elektronen
I schnell I langsam (sense-amp)
I 10 . . . 50 × DRAM Fläche I minimale Fläche
A. Mäder 758
DRAM: Stacked- und Trench-Zelle
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

data-in

ena

wordline

Masse bitline

...

sense-amp

data-out

Siemens 1 Gbit DRAM IBM CMOS-6X embedded DRAM


I zwei Bauformen: „stacked“ und „trench“
I Kondensatoren
I möglichst kleine Fläche
I Kapazität gerade ausreichend
A. Mäder 759
DRAM: Layout
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

Bitline n Bitline n+1 ~1024/Bank


~256/Sense-Amp
Bitline /n Bitline /n+1
Wordline n
Row address decoder and mux.

Wordline n+1
Row Address

2λ 2λ
Wordline n+2

Wordline n+3

8 λ2
... ... ...

/RAS
Sense- Sense-
...
Amp n Amp n+1

/CAS I/O
Column address decoder / Latch / Mux. data
Treiber

Column Address

A. Mäder 760
DRAM: Varianten
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

I veraltete Varianten
I FPM: fast-page mode
I EDO: extended data-out
I ...

I heute gebräuchlich
I SDRAM: Ansteuerung synchron zu Taktsignal
I DDR-SDRAM: double-data rate Ansteuerung wie SDRAM
Daten werden mit steigender und fallender Taktflanke übertragen
I DDR2 . . . DDR5: Varianten mit höherer Taktrate
aktuelle Übertragungsraten bis 51,2 GByte/sec pro Speicherkanal
I GDDR3 . . . GDDR6 (Graphics Double Data Rate)
derzeit bis 128 GByte/sec
I HBM . . . HBM3 (High Bandwidth Memory)
derzeit bis 512 GByte/sec
I HMC . . . HMC2 (Hybrid Memory Cube)
derzeit bis 480 GByte/sec
A. Mäder 761
SDRAM: Lesezugriff auf sequenzielle Adressen
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

mclk

A[31:0] A A+4 A+8

seq

wait
ras
cas

D[31:0]
N cycle S cycle S cycle
[Fur00]

A. Mäder 762
Flash
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

I ähnlich kompakt und kostengünstig wie DRAM


I nichtflüchtig (non-volatile): Information bleibt beim
Ausschalten erhalten
Floating Gate
Control Gate
Oxidschicht

I spezielle floating-gate Transistoren Source Drain

I das floating-gate ist komplett nach außen isoliert n n

I einmal gespeicherte Elektronen sitzen dort fest p

I Auslesen beliebig oft möglich, schnell


I Schreibzugriffe problematisch
I intern hohe Spannung erforderlich (Gate-Isolierung überwinden)
I Schreibzugriffe einer „0“ nur blockweise
I pro Zelle nur einige 10 000 . . . 100 M Schreibzugriffe möglich

A. Mäder 763
Typisches Speichersystem
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

ROM0e

control
RAMwe3 RAMwe2 RAMwe1 RAMwe0
A[31:0]
various

RAMoe

A[n+2:2] A[n+2:2] A[n+2:2] A[n+2:2]

we

we
we

A[n:0]
we

oe

A[n:0]
A[n:0]

oe
oe
A[n:0]
oe
A[31:0]
32-bit ARM Proz.
ARM
SRAM SRAM SRAM SRAM 4 × 8-bit SRAMs
D[31:0] D[7:0] D[7:0] D[7:0] D[7:0] 4 × 8-bit ROMs

D[31:0] D[31:24] D[23:16] D[15:8] D[7:0]


D[7:0] D[7:0] D[7:0] D[7:0]

ROM ROM ROM A[m:0] ROM

A[m:0]
A[m:0]
A[m:0]

oe

oe
oe
oe

A[m+2:2] A[m+2:2] A[m+2:2] A[m+2:2]


[Fur00]

A. Mäder 764
Typisches Speichersystem: Adressdecodierung
11.4.1 Rechnerarchitektur I - Hardwarestruktur - Speicherbausteine 64-040 Rechnerstrukturen und Betriebssysteme

mas[0] mas[1]
A[0]A[1]

mclk

RAMwe0

RAMwe1

RAMwe2

RAMwe3

RAMoe
r/w

ROMoe

A[31] [Fur00]

A. Mäder 765
Bussysteme
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

I Bus: elektrische (und logische) Verbindung


I mehrere Geräte
I mehrere Blöcke innerhalb einer Schaltung
I Bündel aus Daten- und Steuersignalen
I mehrere Quellen (und mehrere Senken [lesende Zugriffe])
I spezielle elektrische Realisierung:
Tri-State-Treiber oder Open-Drain
I Bus-Arbitrierung: wer darf, wann, wie lange senden?
I Master-Slave
I gleichberechtigte Knoten, Arbitrierungsprotokolle
I synchron: mit globalem Taktsignal vom „Master“-Knoten
asynchron: Wechsel von Steuersignalen löst Ereignisse aus

A. Mäder 766
Bussysteme (cont.)
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

I typische Aufgaben
I Kernkomponenten (CPU, Speicher . . . ) miteinander verbinden
I Verbindungen zu den Peripherie-Bausteinen
I Verbindungen zu Systemmonitor-Komponenten
I Verbindungen zwischen I/O-Controllern und -Geräten
I ...

Address bus

Data bus

CPU Control bus

RAM ROM I/O Other

A. Mäder 767
Bussysteme (cont.)
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

I viele unterschiedliche Typen, standardisiert


mit sehr unterschiedlichen Anforderungen
I High-Performance
I einfaches Protokoll, billige Komponenten
I Multi-Master-Fähigkeit, zentrale oder dezentrale Arbitrierung
I Echtzeitfähigkeit, Daten-Streaming
I wenig Leitungen bis zu Zweidraht-Bussen:
I2 C, SPI, System-Management-Bus . . .
I lange Leitungen: EIA-485, RS-232, Ethernet . . .
B Funkmedium: WLAN, Bluetooth (logische Verbindung)

A. Mäder 768
Bus: Mikroprozessorsysteme
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

typisches n-bit Mikroprozessor-System:


I n Adress-Leitungen, also Adressraum 2n Bytes Adressbus
I n Daten-Leitungen Datenbus

I Steuersignale Control
I clock: Taktsignal
I read/write: Lese-/Schreibzugriff (aus Sicht des Prozessors)
I wait: Wartezeit/-zyklen für langsame Geräte
I ...
I um Leitungen zu sparen, teilweise gemeinsam genutzte
Leitungen sowohl für Adressen als auch Daten.
Zusätzliches Steuersignal zur Auswahl Adressen/Daten

A. Mäder 769
Adressbus: Evolution beim Intel x86
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I 20-bit: 1 MiByte Adressraum


24-bit: 16 MiByte
32-bit: 4 GiByte
I alle Erweiterungen abwärtskompatibel
I 64-bit Architekturen: 48-, 56-, 64-bit Adressraum
A. Mäder 770
Synchroner Bus: Timing
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I alle Zeiten über Taktsignal Φ gesteuert


I MREQ-Signal zur Auswahl Speicher oder I/O-Geräte
I RD signalisiert Lesezugriff
I Wartezyklen, solange der Speicher W AIT aktiviert
A. Mäder 771
Synchroner Bus: Timing (cont.)
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

I typische Parameter
Symbol [ns] Min Max
TAD Adressausgabeverzögerung 4
TML Adresse ist vor MREQ stabil 2
TM MREQ-Verzögerung nach fallender Flanke von Φ in T1 3
TRL RD-Verzögerung nach fallender Flanke von Φ in T1 3
TDS Setup-Zeit vor fallender Flanke von Φ 2
TMH MREQ-Verzögerung nach fallender Flanke von Φ in T3 3
TRH RD-Verzögerung nach fallender Flanke von Φ in T3 3
TDH Hold-Zeit nach der Deaktivierung von RD 0

A. Mäder 772
Asynchroner Bus: Lesezugriff
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I Steuersignale MSY N: Master fertig


SSY N: Slave fertig
I flexibler für Geräte mit stark unterschiedlichen Zugriffszeiten

A. Mäder 773
Bus Arbitrierung
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

I mehrere Komponenten wollen Übertragung initiieren


immer nur ein Transfer zur Zeit möglich
I der Zugriff muss serialisiert werden
1. zentrale Arbitrierung
I Arbiter gewährt Bus-Requests
I Strategien
I Prioritäten für verschiedene Geräte
I „round-robin“ Verfahren
I „Token“-basierte Verfahren
I usw.
2. dezentrale Arbitrierung
I protokollbasiert
I Beispiel
I Komponenten sehen ob Bus frei ist
I beginnen zu senden
I Kollisionserkennung: gesendete Daten lesen
I ggf. Übertragung abbrechen
I „später“ erneut versuchen
A. Mäder 774
Bus Arbitrierung (cont.)
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

I I/O-Geräte oft höher priorisiert als die CPU


I I/O-Zugriffe müssen schnell/sofort behandelt werden
I Benutzerprogramm kann warten

[TA14]

A. Mäder 775
Bus Bandbreite
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

I Menge an (Nutz-) Daten, die pro Zeiteinheit übertragen


werden kann
I zusätzlicher Protokolloverhead ⇒ Brutto- / Netto-Datenrate
I RS-232 50 bit/sec . . . 460 Kbit/sec
I2 C 100 Kbit/sec (Std.) . . . 3,4 Mbit/sec (High Speed)
USB 1,5 Mbit/sec (1.x) . . . 40 Gbit/sec (4.0)
ISA 128 Mbit/sec ...
PCI 1 Gbit/sec (2.0) . . . 4,3 Gbit/sec (3.0)
AGP 2,1 Gbit/sec (1x) . . . 34,1 Gbit/sec (8x 64-bit)
PCI Express 250 MByte/sec (1.x) . . . 63,0 GByte/sec (5.0) x16
HyperTransport 3,2 GByte/sec (1.0) . . . 51,2 GByte/sec (3.1)
NVLink 80,0 GByte/sec (1.0) . . . 150,0 GByte/sec (2.0)

I [Link]/wiki/List_of_interface_bit_rates

A. Mäder 776
Beispiel: PCI-Bus
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

Peripheral Component Interconnect (Intel 1991)


I 33 MHz Takt optional 66 MHz Takt
I 32-bit Bus-System optional auch 64-bit
I gemeinsame Adress-/Datenleitungen
I Arbitrierung durch Bus-Master CPU

I Abwärtskompatibilität
I PCI-Bus als logische Verbindung (SW-Layer) zu Komponenten
I technisch: PCIe

I Auto-Konfiguration
I angeschlossene Geräte werden automatisch erkannt
I eindeutige Hersteller- und Geräte-Nummern
I Betriebssystem kann zugehörigen Treiber laden
I automatische Zuweisung von Adressbereichen und IRQs
A. Mäder 777
PCI-Bus: Peripheriegeräte
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

[ maeder@tams165 ]~> lspci -v


00:00.0 Host bridge : Intel Corporation Sky Lake Host Bridge /DRAM Registers (rev 08)
Subsystem : Dell Device 06dc
Flags : bus master , fast devsel , latency 0
Capabilities : <access denied >

00:02.0 VGA compatible controller : Intel Corporation Sky Lake Integrated Graphics (rev 07)
Subsystem : Dell Device 06dc
Flags : bus master , fast devsel , latency 0, IRQ 134
Memory at e0000000 (64-bit , non - prefetchable ) [size =16M]
Memory at d0000000 (64-bit , prefetchable ) [size =256M]
I/O ports at f000 [size =64]
Expansion ROM at <unassigned > [ disabled ]
Capabilities : <access denied >
Kernel driver in use: i915_bpo

00:04.0 Signal processing controller : Intel Corporation Device 1903 (rev 08)
Subsystem : Dell Device 06dc
Flags : bus master , fast devsel , latency 0, IRQ 16
Memory at e1340000 (64-bit , non - prefetchable ) [size =32K]
Capabilities : <access denied >
Kernel driver in use: proc_thermal

00:14.0 USB controller : Intel Corporation Device 9d2f (rev 21) (prog -if 30 [XHCI ])
Subsystem : Dell Device 06dc
Flags : bus master , medium devsel , latency 0, IRQ 125
Memory at e1330000 (64-bit , non - prefetchable ) [size =64K]
...

A. Mäder 778
PCI-Bus: Peripheriegeräte (cont.)
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 779
PCI-Bus: Leitungen („mindestens“)
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

Signal Leitungen Master Slave Beschreibung


CLK 1 Takt (33 oder 66 MHz)
AD 32 × × Gemultiplexte Adress- und Datenleitungen
PAR 1 × Adress- oder Datenparitätsbit
C/BE 4 × Busbefehl/Bitmap für Byte Enable
(zeigt gültige Datenbytes an)
FRAME# 1 × Kennzeichnet, dass AD und C/BE aktiviert sind
IRDY# 1 × Lesen: Master wird akzeptieren
Schreiben: Daten liegen an
IDSEL 1 × Wählt Konfigurationsraum statt Speicher
DEVSEL# 1 × Slave hat seine Adresse decodiert und ist in Bereitschaft
TRDY# 1 × Lesen: Daten liegen an
Schreiben: Slave wird akzeptieren
STOP# 1 × Slave möchte Transaktion sofort abbrechen
PERR# 1 Empfänger hat Datenparitätsfehler erkannt
SERR# 1 Adressparätätsfehler oder Systemfehler erkannt
REQ# 1 Bus-Arbitration: Anforderung des Busses
GNT# 1 –"– Zuteilung des Busses
RST# 1 Setzt das System und alle Geräte zurück

A. Mäder 780
PCI-Bus: Transaktionen
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

A. Mäder 781
RS-232: Serielle Schnittstelle
11.4.2 Rechnerarchitektur I - Hardwarestruktur - Busse 64-040 Rechnerstrukturen und Betriebssysteme

t
bi
ity
it

op
tb

r
d0
d1
d2

d3
d4

d5
d6

d7
pa
ar

st
+12V

st
-12V

s 1 1 0 0 1 0 0 0 stop = 00010011

I Baudrate 300, 600, . . . , 19 200, 38 400, 115 200 bits/sec


Anzahl Datenbits 5, 6, 7, 8
Anzahl Stopbits 1, 2
Parität none, odd, even
I minimal drei Leitungen: GND, TX, RX (Masse, Transmit, Receive)
I oft weitere Leitungen für erweitertes Handshake

A. Mäder 782
Ablaufsteuerung mit Mikroprogramm
11.4.3 Rechnerarchitektur I - Hardwarestruktur - Mikroprogrammierung 64-040 Rechnerstrukturen und Betriebssysteme

I als Alternative zu direkt entworfenen Schaltwerken

I Mikroprogrammzähler —P C: Register für aktuellen Zustand


I —P C adressiert den Mikroprogrammspeicher —ROM
I —ROM konzeptionell in mehrere Felder eingeteilt
I die verschiedenen Steuerleitungen
I ein oder mehrere Felder für Folgezustand
I ggf. zusätzliche Logik und Multiplexer zur Auswahl unter
mehreren Folgezuständen
I ggf. Verschachtelung und Aufruf von Unterprogrammen:
„nanoProgramm“

I siehe „Praktikum Rechnerstrukturen und Betriebssysteme“

A. Mäder 783
Mikroprogramm: Beispiel Ampel
11.4.3 Rechnerarchitektur I - Hardwarestruktur - Mikroprogrammierung 64-040 Rechnerstrukturen und Betriebssysteme

µROM
addr next outputs comment
0 1 0 0 1 rot

2 1 2 0 1 1 rot-gelb
µPC
2 3 1 0 0 grün
clk
3 0 0 1 0 gelb
nreset

2
rot
gelb
next grün
rot-gelb

I —P C adressiert das —ROM


rot grün
I next-Ausgang liefert Folgezustand
I andere Ausgänge steuern die Schaltung
gelb
= die Lampen der Ampel

A. Mäder 784
Mikroprogramm: Beispiel zur Auswahl des Folgezustands
11.4.3 Rechnerarchitektur I - Hardwarestruktur - Mikroprogrammierung 64-040 Rechnerstrukturen und Betriebssysteme

µROM
nextA select nextA nextB outputs comment

µMUX.s=10 && xs=0


00 1 1 0 0 1 ... rot
µMUX.s=00
nextB
8 01 2 2 0 1 1 ... rot-gelb
µPC
10 3 3 1 0 0 ... grün
µMUX.s=01 clk
current µMUX.s=10 && xs=1 ... ... ... ... ... ... ... ...
nreset
µMUX.s=11
8 2 8 8

rot
extern µMUX.s gelb
0 grün

µMUX
0
4:1
2:1
xa 3
1

xs

I Multiplexer erlaubt Auswahl des —P C Werts


I nextA, nextB aus dem —ROM, externer xa Wert
I xs Eingang für bedingte Sprünge

A. Mäder 785
Praktikum RSB: D·CORE
11.4.3 Rechnerarchitektur I - Hardwarestruktur - Mikroprogrammierung 64-040 Rechnerstrukturen und Betriebssysteme

Steuerwerk
µPC

IR

µMUX
4:1
DECODER 2:1

C-Flag

...BUF
Reg

OFFSET4 IMM4 [Link] / [Link] / [Link] IMM12

nWE
nWE

[Link] ADD nOE


nOE
R0 .. R15 Regbank.X

2 1 0
Y X PC_MUX
Adressbus RAM / ROM
MAR A 15..0
PC +2
ADD4 ALU

carry result MDR_BUF


MDR
ADDR_BUF ALU_BUF RX_BUF PC_BUF
Datenbus
D 15..0
BUS MRR
C zum STW MRR_BUF
Adresse für
LDW/STW Datenpfad PC Bus-Interface

aktuelle Architekturen: weniger Mikroprogrammierung


I

⇒ Pipelining (folgt in 14 Rechnerarchitektur II – Pipelining)


A. Mäder 786
Mikroprogramm: Befehlsdecoder des ARM 7 Prozessors
11.4.3 Rechnerarchitektur I - Hardwarestruktur - Mikroprogrammierung 64-040 Rechnerstrukturen und Betriebssysteme

instruction

coprocessor

multiply
control
decode cycle
PLA count
load/store
multiple

address register ALU shifter


control control control control
[Fur00]

A. Mäder 787
typisches ARM SoC System
11.4.4 Rechnerarchitektur I - Hardwarestruktur - Beispielsystem: ARM 64-040 Rechnerstrukturen und Betriebssysteme

test i/f ctrl


ARM on-chip
core/CPU RAM

external
bus
interface
AHB or ASB

bridge UART
DMA
controller

timer
APB

parallel i/f

S. Furber: ARM System-on-Chip Architecture [Fur00]


A. Mäder 788
RT-Ebene: ALU des ARM 6 Prozessors
11.4.4 Rechnerarchitektur I - Hardwarestruktur - Beispielsystem: ARM 64-040 Rechnerstrukturen und Betriebssysteme

A operand latch B operand latch


invert A invert B
XOR gates XOR gates

function C in
logic functions adder C
V

logic/arithmetic
result mux
N

zero detect Z

result [Fur00]

I Register für die Operanden A und B


I Addierer und separater Block für logische Operationen
A. Mäder 789
Multi-Port-Registerbank: Zelle
11.4.4 Rechnerarchitektur I - Hardwarestruktur - Beispielsystem: ARM 64-040 Rechnerstrukturen und Betriebssysteme

read read
write A B
ALU bus
A bus
B bus

[Fur00]

I Prinzip wie 6T-SRAM: rückgekoppelte Inverter


I mehrere (hier zwei) parallele Lese-Ports
I mehrere Schreib-Ports möglich, aber kompliziert

A. Mäder 790
Multi-Port Registerbank: Floorplan/Chiplayout
11.4.4 Rechnerarchitektur I - Hardwarestruktur - Beispielsystem: ARM 64-040 Rechnerstrukturen und Betriebssysteme

A bus read decoders


B bus read decoders
Vdd write decoders

Vss

ALU ALU
bus bus
PC PC
bus register cells
A bus
INC
B bus
bus

[Fur00]

A. Mäder 791
Kompletter Prozessor: ARM 3
11.4.4 Rechnerarchitektur I - Hardwarestruktur - Beispielsystem: ARM 64-040 Rechnerstrukturen und Betriebssysteme

Registerbank (inkl. Program Counter)


A[31:0] control
I

Inkrementer
address register
I

Adress-Register
P
I C incrementer

PC
register
bank

I ALU, Multiplizierer, Shifter instruction


decode
A multiply &
L register

Speicherinterface (Data-In / -Out)


U control
I A B
b
u b b
s u u
s barrel s
shifter

I Steuerwerk
ALU
I bis ARM 7: 3-stufige Pipeline
fetch, decode, execute
data out register data in register

[Fur00] D[31:0]

A. Mäder 792
ARM Datentransfer: Register-Operationen
11.4.4 Rechnerarchitektur I - Hardwarestruktur - Beispielsystem: ARM 64-040 Rechnerstrukturen und Betriebssysteme

address register address register

increment increment

Rd PC Rd PC
registers registers
Rn Rm Rn

mult mult

as ins. as ins.

as instruction as instruction
[7:0]

data out data in i. pipe data out data in i. pipe

(a) register – register operations (b) register – immediate operations [Fur00]


A. Mäder 793
ARM Datentransfer: Store-Befehl
11.4.4 Rechnerarchitektur I - Hardwarestruktur - Beispielsystem: ARM 64-040 Rechnerstrukturen und Betriebssysteme

address register address register

increment increment

PC Rn PC
registers registers
Rn Rd

mult mult

lsl #0 shifter

=A / A+ B / A- B =A + B /A - B
[11:0]

data out data in i. pipe byte? data in i. pipe

(a) 1st cycle - compute address (b) 2nd cycle – store & auto-index [Fur00]
A. Mäder 794
ARM Datentransfer: Funktionsaufruf/Sprungbefehl
11.4.4 Rechnerarchitektur I - Hardwarestruktur - Beispielsystem: ARM 64-040 Rechnerstrukturen und Betriebssysteme

address register address register

increment increment

R14
registers registers
PC PC

mult mult

lsl #2 shifter

=A+ B =A

[23:0]

data out data in i. pipe data out data in i. pipe

(a) 1st cycle - compute branch target (b) 2nd cycle - save return address [Fur00]
A. Mäder 795
Wie rechnet ein Rechner?
11.5 Rechnerarchitektur I - Wie rechnet ein Rechner? 64-040 Rechnerstrukturen und Betriebssysteme

I „Choreografie“ der Funktionseinheiten?


I Wie kommuniziert man mit Rechnern?
I Was passiert beim Einschalten des Rechners?

I Erweiterungen des von-Neumann Konzepts


I parallele, statt sequenzieller Befehlsabarbeitung
⇒ Pipelining
I mehrere Ausführungseinheiten
⇒ superskalare Prozessoren, Mehrkern-Architekturen
I dynamisch veränderte Abarbeitungsreihenfolge
⇒ „out-of-order execution“
I getrennte Daten- und Instruktionsspeicher
⇒ Harvard-Architektur
I Speicherhierarchie, Caches etc.

→ siehe Kapitel 14 Rechnerarchitektur II

A. Mäder 796
Hardwareorganisation eines typischen Systems
11.5 Rechnerarchitektur I - Wie rechnet ein Rechner? 64-040 Rechnerstrukturen und Betriebssysteme

CPU
Register file

PC ALU
System bus Memory bus

I/O Main
Bus interface
bridge memory

I/O bus Expansion slots for


other devices such
USB Graphics Disk as network adapters
controller adapter controller

Mouse Keyboard Display


Disk
[BO15]
A. Mäder 797
Programmausführung: 1. Benutzereingabe
11.5 Rechnerarchitektur I - Wie rechnet ein Rechner? 64-040 Rechnerstrukturen und Betriebssysteme

CPU
Register file

PC ALU
System bus Memory bus

I/O Main "hello"


Bus interface
bridge memory

I/O bus Expansion slots for


other devices such
USB Graphics Disk as network adapters
controller adapter controller

Mouse Keyboard Display


User types Disk hello executable
"hello" stored on disk
[BO15]
A. Mäder 798
Programmausführung: 2. Programm laden
11.5 Rechnerarchitektur I - Wie rechnet ein Rechner? 64-040 Rechnerstrukturen und Betriebssysteme

CPU
Register file

PC ALU
System bus Memory bus

I/O Main "hello, world\n"


Bus interface
bridge memory
hello code

I/O bus Expansion slots for


other devices such
USB Graphics Disk as network adapters
controller adapter controller

Mouse Keyboard Display


Disk hello executable
stored on disk
[BO15]
A. Mäder 799
Programmausführung: 3. Programmlauf
11.5 Rechnerarchitektur I - Wie rechnet ein Rechner? 64-040 Rechnerstrukturen und Betriebssysteme

CPU
Register file

PC ALU
System bus Memory bus

I/O Main "hello, world\n"


Bus interface
bridge memory
hello code

I/O bus Expansion slots for


other devices such
USB Graphics Disk as network adapters
controller adapter controller

Mouse Keyboard Display


"hello, world\n" Disk hello executable
stored on disk
[BO15]
A. Mäder 800
Boot-Prozess
Was passiert beim Einschalten des Rechners?
11.5 Rechnerarchitektur I - Wie rechnet ein Rechner? 64-040 Rechnerstrukturen und Betriebssysteme

I Chipsatz erzeugt Reset-Signale für alle ICs


I Reset für die zentralen Prozessor-Register (PC . . . )
I PC wird auf Startwert initialisiert (z.B. 0xFFFF FFEF)
I Befehlszyklus wird gestartet
I Prozessor greift auf die Startadresse zu
dort liegt ein ROM mit dem Boot-Programm
I Initialisierung und Selbsttest des Prozessors
I Löschen und Initialisieren der Caches
I Konfiguration des Chipsatzes
I Erkennung und Initialisierung von I/O-Komponenten
I Laden des Betriebssystems

A. Mäder 801
Literatur
11.6 Rechnerarchitektur I - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BO15] R.E. Bryant, D.R. O’Hallaron:


Computer systems – A programmers perspective.
3rd global ed., Pearson Education Ltd., 2015.
ISBN 978–1–292–10176–7. [Link]
[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –
Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5
[Fur00] S. Furber: ARM System-on-Chip Architecture.
2nd edition, Pearson Education Limited, 2000.
ISBN 978–0–201–67519–1
[GK83] D.D. Gajski, R.H. Kuhn: Guest Editors’ Introduction:
New VLSI Tools. in: IEEE Computer 16 (1983), December,
Nr. 12, S. 11–14. ISSN 0018–9162

A. Mäder 802
Literatur (cont.)
11.6 Rechnerarchitektur I - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[PH17] D.A. Patterson, J.L. Hennessy: Computer Organization


and Design – The Hardware Software Interface – RISC-V
Edition.
Morgan Kaufmann Publishers Inc., 2017.
ISBN 978–0–12–812275–4
[PH16b] D.A. Patterson, J.L. Hennessy: Rechnerorganisation
und Rechnerentwurf – Die Hardware/Software-Schnittstelle.
5. Auflage, Oldenbourg, 2016. ISBN 978–3–11–044605–0
[Mäd11] A. Mäder: Vorlesung: Rechnerarchitektur und
Mikrosystemtechnik. Universität Hamburg,
FB Informatik, 2011, Vorlesungsfolien. [Link].
[Link]/lectures/2011ws/vorlesung/ram

A. Mäder 803
Literatur (cont.)
11.6 Rechnerarchitektur I - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[HenHA] N. Hendrich: HADES — HAmburg DEsign System.


Universität Hamburg, FB Informatik, Lehrmaterial.
[Link]/applets/hades/webdemos

A. Mäder 804
Gliederung
12 Instruction Set Architecture 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
Speicherorganisation

A. Mäder 805
Gliederung (cont.)
12 Instruction Set Architecture 64-040 Rechnerstrukturen und Betriebssysteme

Befehlssatz
Befehlsformate
Adressierungsarten
Intel x86-Architektur
Befehlssätze
Literatur
13. Assembler-Programmierung
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 806
Rechnerstrukturen und Betriebssysteme – Einordnung
12 Instruction Set Architecture 64-040 Rechnerstrukturen und Betriebssysteme

Application

Operating System
Softwareentwicklung
Compiler Firmware
Instruction Set
Architecture
Vorlesung RSB Instr. Set Proc. I/O system
Datapath & Control
Digital Design
Circuit Design
Layout [PH16b]

A. Mäder 807
Befehlssatzarchitektur – ISA
12 Instruction Set Architecture 64-040 Rechnerstrukturen und Betriebssysteme

ISA – Instruction Set Architecture


⇒ alle für den Programmierer sichtbaren Attribute eines Rechners
CPU
Register file

der (konzeptionellen) Struktur


PC ALU

I System bus Memory bus

Funktionseinheiten der Hardware:


I/O Main
Bus interface
bridge memory
I

Recheneinheiten, Speicher, Verbindungssysteme USB Graphics


I/O bus

Disk
Expansion slots for
other devices such
as network adapters
controller adapter controller

Mouse Keyboard Display


Disk

I des Verhaltens
I Organisation des programmierbaren Speichers
I Datentypen und Datenstrukturen: Codierungen und Darstellungen
I Befehlssatz
I Befehlsformate
I Modelle für Befehls- und Datenzugriffe
I Ausnahmebedingungen

A. Mäder 808
Befehlssatzarchitektur – ISA (cont.)
12 Instruction Set Architecture 64-040 Rechnerstrukturen und Betriebssysteme

I Befehlssatz: die zentrale Schnittstelle

software

instruction set

hardware

[PH16b]

A. Mäder 809
Merkmale der Instruction Set Architecture
12 Instruction Set Architecture 64-040 Rechnerstrukturen und Betriebssysteme

I Speichermodell Wortbreite, Adressierung . . .

I Rechnerklasse Stack-/Akku-/Registermaschine
I Registersatz Anzahl und Art der Rechenregister

I Befehlssatz Definition aller Befehle


I Art, Zahl der Operanden Anzahl/Wortbreite/Reg./Speicher
I Ausrichtung der Daten Alignment/Endianness

I Ein- und Ausgabe, Unterbrechungsstruktur (Interrupts)


I Systemsoftware Loader, Assembler,
Compiler, Debugger

A. Mäder 810
Beispiele für charakteristische ISA
12 Instruction Set Architecture 64-040 Rechnerstrukturen und Betriebssysteme

in dieser Vorlesung bzw. im Praktikum angesprochen


I MIPS klassischer 32-bit RISC
I D·CORE „Demo Rechner“, 16-bit
I x86 / x86-64 (x64) / amd64 CISC, Verwendung in PCs

I Assemblerprogrammierung, Kontrollstrukturen und


Datenstrukturen werden am Beispiel der x86-Architektur
vorgestellt

I viele weitere Architekturen (z.B. Mikrocontroller) werden


aus Zeitgründen nicht weiter behandelt

A. Mäder 811
Artenvielfalt vom „Embedded Architekturen“
12 Instruction Set Architecture 64-040 Rechnerstrukturen und Betriebssysteme

Prozessor 1 —C 1 —C 1 ASIC 1 —P, DSPs 1 —P, 1 —P, ≈100 —C, 1 —P,


ASIP 3 DSP DSP —P, DSP ASIP

[bit] 4 . . . 32 8 — 16 . . . 32 32 32 32 8 . . . 64 16 . . . 32

Speicher 1K...1M < 8K < 1K 1 . . . 64 M 1 . . . 64 M < 512 M 8 . . . 64 M 1 K . . . 10 M < 64 M

Netzwerk cardIO — RS-232 diverse GSM MIDI V.90 CAN . . . I2 C . . .

Echtzeit — — soft soft hard soft hard hard hard

Sicherheit keine mittel keine gering gering gering gering hoch hoch

I riesiges Spektrum: 4 . . . 64 bit Prozessoren, DSPs, digitale/analoge ASICs . . .


I Sensoren/Aktoren: Tasten, Displays, Druck, Temperatur, Antennen, CCD . . .
I sehr unterschiedliche Anforderungen:
Echtzeit, Sicherheit, Zuverlässigkeit, Leistungsaufnahme, Abwärme,
Temperaturbereich, Störstrahlung, Größe, Kosten etc.

A. Mäder 812
Speicherorganisation
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Adressierung
I Wortbreite, Speicherkapazität
I „Big Endian“ / „Little Endian“
I „Alignment“
I „Memory-Map“
I Beispiel: PC mit Windows

I spätere Themen
I Cache-Organisation für schnelleren Zugriff
I Virtueller Speicher für Multitasking
I Synchronisation in Multiprozessorsystemen (z.B. MESI-Protokoll)

A. Mäder 813
Aufbau und Adressierung des Speichers
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Abspeichern von Zahlen, Zeichen, Strings?


I kleinster Datentyp üblicherweise ein Byte (8-bit)
I andere Daten als Vielfache: 16-bit, 32-bit, 64-bit . . .

I Organisation und Adressierung des Speichers?


I Adressen typisch in Bytes angegeben
I erlaubt Adressierung einzelner ASCII-Zeichen usw.

I aber Maschine/Prozessor arbeitet wortweise


I Speicher daher ebenfalls wortweise aufgebaut
I typischerweise 32-bit oder 64-bit

A. Mäder 814
Hauptspeicherorganisation
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

3 Organisationsformen eines 96-bit Speichers: 12 × 8, 8 × 12, 6 × 16 Bits

I diverse Varianten möglich


I Speicherkapazität:
#Worte × #Bits/Wort
[TA14] I meist Byte-adressiert
A. Mäder 815
Wortbreite
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Speicherwortbreiten historisch wichtiger Computer


Computer Bits/Speicherzelle
Burroughs B1700 1
IBM PC 8
DEC PDP-8 12
IBM 1130 16
DEC PDP-15 18
XDS 940 24
Electrologica X8 27
XDS Sigma 9 32
Honeywell 6180 36
CDC 3600 48
CDC Cyber 60

I heute dominieren 8/16/32/64-bit Systeme


I erlaubt 8-bit ASCII, 16-bit Unicode, 32-/64-bit Floating-Point
I Beispiel x86: „byte“, „word“, „double word“, „quad word“
A. Mäder 816
Wort-basierte Organisation des Speichers
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Speicher Wort-orientiert 32-bit 64-bit Bytes Addr.


Words Words
I Adressierung Byte-orientiert 0000
I die Adresse des ersten Bytes im Wort Addr
0001
Adressen aufeinanderfolgender Worte
=
I 0000
?? 0002
unterscheiden sich um 4 (32-bit Wort) Addr
0003
oder 8 (64-bit)
=
0000
?? 0004
Addr
= 0005
I Adressen normalerweise Vielfache 0004
?? 0006
der Wortlänge 0007
I verschobene Adressen „in der Mitte“ 0008
eines Worts oft unzulässig Addr
= 0009
0008
??
Addr
0010
= 0011
0008
?? 0012
Addr
= 0013
0012
?? 0014
[BO15] 0015

A. Mäder 817
Wdh. Datentypen auf Maschinenebene
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I gängige Prozessoren unterstützen mehrere Datentypen


I entsprechend der elementaren Datentypen in C, Java . . .
I void* ist ein Pointer (Referenz, Speicheradresse)
I Beispiel für die Anzahl der Bytes:
C Datentyp DEC Alpha typ. 32-bit Intel IA-32 (x86)
int 4 4 4
long int 8 4 4
char 1 1 1
short 2 2 2
float 4 4 4
double 8 8 8
long double 8 8 10/12
void * 8 4 4

A. Mäder 818
Wdh. Datentypen auf Maschinenebene (cont.)
3 Data
12.1 Instruction Set Architecture - Speicherorganisation representation 64-040 Rechnerstrukturen und Betriebssysteme
Table 1. Data sizes

Abhängigkeiten (!) segment word size


compiler
16 bit 32 bit 64 bit

Microsoft

Borland

Watcom

Microsoft

Intel Windows

Borland

Watcom

Gnu v.3.x

Intel Linux

Microsoft

Intel Windows

Gnu

Intel Linux
I Prozessor
I Betriebssystem
bool 2 1 1 1 1 1 1 1 1 1 1 1 1
I Compiler char
wchar_t
1 1
2
1 1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
4
1
4
short int 2 2 2 2 2 2 2 2 2 2 2 2 2
int 2 2 2 4 4 4 4 4 4 4 4 4 4
long int 4 4 4 4 4 4 4 4 4 4 4 8 8
__int64 8 8 8 8 8 8 8 8
enum 2 2 1 4 4 4 4 4 4 4 4 4 4
float 4 4 4 4 4 4 4 4 4 4 4 4 4
double 8 8 8 8 8 8 8 8 8 8 8 8 8
long double 10 10 8 8 16 10 8 12 12 8 16 16 16
__m64 8 8 8 8 8 8
__m128 16 16 16 16 16 16 16
__m256 32 32 32 32
pointer 2 2 2 4 4 4 4 4 4 8 8 8 8
far pointer 4 4 4
function pointer 2 2 2 4 4 4 4 4 4 8 8 8 8
data member pointer 2 4 6 4 4 8 4 4 4 4 4 8 8
(min)
data member pointer 4 6 12 12 8 12 4 4 12 12 8 8
(max)
member function 2 12 6 4 4 12 4 8 8 8 8 16 16
pointer (min)
[Link]/optimize/ member function 12 6 16 16 12 16 8 8 24 24 16 16
calling_conventions.pdf pointer (max)

Table 1 shows how many bytes of storage various objects use for different compilers.

Differences in data representation can cause problems when exchanging binary data files
between programs, when exchanging data with a DLL compiled with a different compiler,
and when porting C++ code that relies on a specific data format.
A. Mäder 819
Byte-Order
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Wie sollen die Bytes innerhalb eines Wortes angeordnet werden?


I Speicher wort-basiert ⇔ Adressierung byte-basiert

Zwei Möglichkeiten / Konventionen:


I Big Endian: Sun, Mac usw.
das MSB (most significant byte) hat die kleinste Adresse
das LSB (least significant byte) hat die höchste –"–

I Little Endian: Alpha, x86


das MSB hat die höchste, das LSB die kleinste Adresse

satirische Referenz auf Gulliver’s Reisen (Jonathan Swift)

A. Mäder 820
Big- vs. Little Endian
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I Anordnung einzelner Bytes in einem Wort (hier 32 bit)


I Big Endian (n : : : n + 3): MSB . . . LSB „String“-Reihenfolge
I Little Endian (n : : : n + 3): LSB . . . MSB „Zahlen“-Reihenfolge
I beide Varianten haben Vor- und Nachteile
I ggf. Umrechnung zwischen beiden Systemen notwendig

A. Mäder 821
Byte-Order: Beispiel
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

Dezimal: 15213
int A = 15213;
int B = -15213; Binär: 0011 1011 0110 1101
long int C = 15213; Hex: 3 B 6 D

Linux/Alpha A Sun A Linux C Alpha C Sun C


6D 00 6D 6D 00
3B 00 3B 3B 00
00 3B 00 00 3B
00 6D 00 00 6D
00
Linux/Alpha B Sun B 00
00
93 FF 2-Komplement 00
C4 FF
Big Endian
FF C4
FF 93 Little Endian

[BO15]

A. Mäder 822
Byte-Order: Beispiel Datenstruktur
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

/* JimSmith .c - example record for byte -order demo */

typedef struct employee {


int age;
int salary ;
char name [12];
} employee_t ;

static employee_t jimmy = {


23, // 0x0017
50000 , // 0xc350
"Jim Smith", // J=0 x4a i=0 x69 usw.
};

A. Mäder 823
Byte-Order: Beispiel x86 und SPARC
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

tams12 > objdump -s JimSmith .x86.o


JimSmith .x86.o: file format elf32 -i386

Contents of section .data:


0000 17000000 50 c30000 4 a696d20 536 d6974 ....P... Jim Smit
0010 68000000 h...

tams12 > objdump -s JimSmith .sparc.o


JimSmith . sparc.o: file format elf32 -sparc

Contents of section .data:


0000 00000017 0000 c350 4 a696d20 536 d6974 ....... PJim Smit
0010 68000000 h...

A. Mäder 824
Netzwerk Byte-Order
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Byte-Order muss bei Datenübertragung zwischen Rechnern


berücksichtigt und eingehalten werden

I Internet-Protokoll (IP) nutzt ein Big Endian Format


⇒ auf x86-Rechnern müssen alle ausgehenden und ankommenden
Datenpakete umgewandelt werden

I zugehörige Hilfsfunktionen / Makros in netinet/in.h


I inaktiv auf Big Endian, byte-swapping auf Little Endian
I ntohl(x): network-to-host-long
I htons(x): host-to-network-short
I ...

A. Mäder 825
Beispiel: Byte-Swapping network to/from host
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

Linux: /usr/include/bits/byteswap.h (distributionsabhängig)


...
/* Swap bytes in 32 bit value. */
# define __bswap_32 (x) \
((((x) & 0 xff000000 ) >> 24) | (((x) & 0 x00ff0000 ) >> 8) |\
(((x) & 0 x0000ff00 ) << 8) | (((x) & 0 x000000ff ) << 24))
...

Linux: /usr/include/netinet/in.h
...
# if __BYTE_ORDER == __LITTLE_ENDIAN
# define ntohl(x) __bswap_32 (x)
# define ntohs(x) __bswap_16 (x)
# define htonl(x) __bswap_32 (x)
# define htons(x) __bswap_16 (x)
# endif
...

A. Mäder 826
Programm zum Erkennen der Byte-Order
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Programm gibt Daten byteweise aus


I C-spezifische Typ- (Pointer-) Konvertierung
I Details: Bryant, O’Hallaron: 2.1.4 (Abb. 2.3, 2.4) [BO15]
void show_bytes ( byte_pointer start , int len ) {
int i;
for( i=0; i < len; i++ ) {
printf ( " %.2x", start[i] );
}
printf ( "\n" );
}

void show_double ( double x ) {


show_bytes ( ( byte_pointer ) &x, sizeof ( double ));
}
...

A. Mäder 827
„Misaligned“ Zugriff
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I Beispiel: 8-Byte-Wort in Little Endian Speicher


I „aligned“ bezüglich Speicherwort
I „non aligned“ an Byte-Adresse 12
Speicher wird (meistens) Byte-weise adressiert
I
aber Zugriffe lesen/schreiben jeweils ein ganzes Wort
⇒ was passiert bei „krummen“ (misaligned) Adressen?
I automatische Umsetzung auf mehrere Zugriffe (x86)
I Programmabbruch (SPARC)

A. Mäder 828
Memory Map
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

CPU kann im Prinzip alle möglichen Adressen ansprechen


I

in der Regel: kein voll ausgebauter Speicher


I
32 bit Adresse entsprechen 4 GiB Hauptspeicher, 64 bit . . .
⇒ „Memory Map“

I Adressdecoder als Hardwareeinheit


I Aufteilung in read-write- und read-only-Bereiche
I ROM zum Booten notwendig
I Read-only in eingebetteten Systemen: Firmware, OS, Programme
I zusätzliche Speicherbereiche für „memory mapped“ I/O

I Adressabbildung in Betriebssystemen (Windows, Linux etc.)


I Zuordnung von Adressen zu „realem“ Speicher
I alle Hardwarekomponenten (+ Erweiterungskarten)
Ein-/Ausgabekanäle
Interrupts
I Verwaltung über Treiber
A. Mäder 829
Adressabbildung Hardware: ARM
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

ROM0e

control
RAMwe3 RAMwe2 RAMwe1 RAMwe0
A[31:0]
various

RAMoe

A[n+2:2] A[n+2:2] A[n+2:2] A[n+2:2]

we

we
we

A[n:0]
we

oe

A[n:0]
A[n:0]

oe
oe
A[n:0]
oe
A[31:0]
32-bit ARM Proz.
ARM
SRAM SRAM SRAM SRAM 4 × 8-bit SRAMs
D[31:0] D[7:0] D[7:0] D[7:0] D[7:0] 4 × 8-bit ROMs

D[31:0] D[31:24] D[23:16] D[15:8] D[7:0]


D[7:0] D[7:0] D[7:0] D[7:0]

ROM ROM ROM A[m:0] ROM

A[m:0]
A[m:0]
A[m:0]

oe

oe
oe
oe

A[m+2:2] A[m+2:2] A[m+2:2] A[m+2:2]


[Fur00]

A. Mäder 830
Adressabbildung Hardware: ARM (cont.)
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

mas[0] mas[1]
A[0]A[1]
Adressdecoder Hardware
mclk

RAMwe0

RAMwe1

RAMwe2

RAMwe3

RAMoe
r/w

ROMoe

A[31] [Fur00]

A. Mäder 831
Adressabbildung in Betriebssystemen
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Windows 95 (32-bit System)


FFFFFFFFh

gemeinsam
genutzter 1 GiB I Kernel, Treiber usw. im oberen
Systembereich 1 GiB-Bereich

C0000000h

gemeinsam
genutzt für 1GiB I Systembibliotheken (DLLs)
Anwendungen

80000000h

privater
Adressbereich knapp 2 GiB I 2 GiB für Anwendungen
Anwendungen

00400000h I DOS-Bereich (real-mode)


ungenutzt 4 MiB immer noch für Boot + Geräte
0010FFF0h „untere“ 20-bit
V86 Bereich 1 MiB
00000000h
A. Mäder 832
Adressabbildung in Betriebssystemen (cont.)
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Windows 95 (32-bit System)


I 32-bit Adressen, 4 GiByte Adressraum
I Aufteilung 2 GiB für Programme, obere 1+1 GiB für Windows
I unabhängig von physikalischem Speicher
I Beispiel der Zuordnung, diverse Bereiche für I/O reserviert

I x86 I/O-Adressraum gesamt nur 64 KiByte


I je nach Zahl der I/O-Geräte evtl. fast voll ausgenutzt
I Adressen vom BIOS zugeteilt

A. Mäder 833
Adressabbildung in Betriebssystemen (cont.)
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Windows 10 (64-bit System)

⇒ Adressbereich
A. Mäder 834
Adressabbildung in Betriebssystemen (cont.)
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

mehrstufige Abbildung:
1. alle Hardwarekomponenten, Ein-/Ausgabeeinheiten und
Interrupts ⇒ Adressbereich
2. Adressbereich ⇒ physikalischer Speicher

I Linux ausprobieren: lshw, kinfocenter, sysinfo etc.

A. Mäder 835
Speicherhierarchie
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

L0:
Regs CPU registers hold words retrieved
from the L1 cache.
L1: L1 cache
Smaller, faster, (SRAM) L1 cache holds cache lines retrieved
and costlier from the L2 cache.
(per byte) L2: L2 cache
storage (SRAM) L2 cache holds cache lines retrieved
devices from L3 cache.
L3: L3 cache
(SRAM)
L3 cache holds cache lines retrieved
from main memory.
Larger, slower,
and cheaper L4: Main memory
(per byte) (DRAM)
storage Main memory holds disk blocks
devices retrieved from local disks.

L5: Local secondary storage


(local disks)
Local disks hold files
retrieved from disks
on remote servers.
L6: Remote secondary storage
(e.g., Web servers)
[BO15]

später mehr . . .
A. Mäder 836
Speicherhierarchie: Cache
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

CPU chip

L1 Register file
cache
(SRAM) ALU
Cache bus System bus Memory bus

Main
L2 cache Memory
Bus interface memory
(SRAM) bridge
(DRAM)

[BO15]

I schneller Zwischenspeicher: überbrückt Geschwindigkeits-


unterschied zwischen CPU und Hauptspeicher

I Cache Strategien
I Welche Daten sollen in Cache?
I Welche werden aus (vollem) Cache entfernt?
I Cache Abbildung: direct-mapped, n-fach assoz., voll assoziativ
I Cache Organisation: Größe, Wortbreite etc.
A. Mäder 837
Speicher ist wichtig!
12.1 Instruction Set Architecture - Speicherorganisation 64-040 Rechnerstrukturen und Betriebssysteme

I Speicher ist nicht unbegrenzt


I muss zugeteilt und verwaltet werden
I viele Anwendungen werden vom Speicher dominiert
I besondere Sorgfalt beim Umgang mit Speicher
I Fehler sind besonders gefährlich und schwer zu Debuggen
I Auswirkungen sind sowohl zeitlich als auch räumlich entfernt
I Speicherleistung ist nicht gleichbleibend
Wechselwirkungen: Speichersystem ⇔ Programme
I „Cache“- und „Virtual“-Memory Auswirkungen können
Performanz/Programmleistung stark beeinflussen
I Anpassung des Programms an das Speichersystem kann
Geschwindigkeit bedeutend verbessern

→ siehe 14 Rechnerarchitektur II – Speicherhierarchie

A. Mäder 838
ISA-Merkmale des Prozessors
12.2 Instruction Set Architecture - Befehlssatz 64-040 Rechnerstrukturen und Betriebssysteme

I Befehlszyklus
I Befehlsklassen
I Registermodell
I n-Adress Maschine
I Adressierungsarten

A. Mäder 839
Befehlszyklus
12.2 Instruction Set Architecture - Befehlssatz 64-040 Rechnerstrukturen und Betriebssysteme

I Prämisse: von-Neumann Prinzip


I Daten und Befehle im gemeinsamen Hauptspeicher
I Abarbeitung des Befehlszyklus in Endlosschleife
I Programmzähler PC adressiert den Speicher
I gelesener Wert kommt in das Befehlsregister IR
I Befehl decodieren
I Befehl ausführen
I nächsten Befehl auswählen
I benötigte Register
Steuerwerk
PC Program Counter Adresse des Befehls
IR Instruction Register aktueller Befehl
Rechenwerk
R0 . . . R31 Registerbank Rechenregister (Operanden)
ACC Akkumulator = Minimalanforderung

A. Mäder 840
Instruction Fetch
„Befehl holen“ Phase im Befehlszyklus
12.2 Instruction Set Architecture - Befehlssatz 64-040 Rechnerstrukturen und Betriebssysteme

1. Programmzähler (PC) liefert Adresse für den Speicher


2. Lesezugriff auf den Speicher
3. Resultat wird im Befehlsregister (IR) abgelegt
4. Programmzähler wird inkrementiert (ggf. auch später)
I Beispiel für 32 bit RISC mit 32 bit Befehlen
I IR = MEM[PC]
I PC = PC + 4
I bei CISC-Maschinen evtl. weitere Zugriffe notwendig,
abhängig von der Art (und Länge) des Befehls

A. Mäder 841
Instruction Decode
„Befehl decodieren“ Phase im Befehlszyklus
12.2 Instruction Set Architecture - Befehlssatz 64-040 Rechnerstrukturen und Betriebssysteme

B Befehl steht im Befehlsregister IR


1. Decoder entschlüsselt Opcode und Operanden
2. leitet Steuersignale an die Funktionseinheiten

Operand Fetch
I wird meist zu anderen Phasen hinzugezählt
RISC: Teil von Instruction Decode
CISC: –"– Instruction Execute
1. Operanden holen

A. Mäder 842
Instruction Execute
„Befehl ausführen“ Phase im Befehlszyklus
12.2 Instruction Set Architecture - Befehlssatz 64-040 Rechnerstrukturen und Betriebssysteme

B Befehl steht im Befehlsregister IR


B Decoder hat Opcode und Operanden entschlüsselt
B Steuersignale liegen an Funktionseinheiten
1. Ausführung des Befehls durch Aktivierung der
Funktionseinheiten
2. ggf. Programmzähler setzen/inkrementieren

I Details abhängig von der Art des Befehls


I Ausführungszeit –"–
I Realisierung
I fest verdrahtete Hardware
I mikroprogrammiert

A. Mäder 843
Welche Befehle braucht man?
12.2 Instruction Set Architecture - Befehlssatz 64-040 Rechnerstrukturen und Betriebssysteme

Befehlsklassen Beispiele
I arithmetische Operationen add, sub, inc, dec, mult, div
logische Operationen and, or, xor
schiebe Operationen shl, sra, srl, ror
I Vergleichsoperationen cmpeq, cmpgt, cmplt
I Datentransfers load, store, I/O
I Programm-Kontrollfluss jump, jmpeq, branch, call, return
I Maschinensteuerung trap, halt, (interrupt)

⇒ Befehlssätze und Computerarchitekturen (Details später)


CISC – Complex Instruction Set Computer
RISC – Reduced Instruction Set Computer

A. Mäder 844
Befehls-Decodierung
12.2 Instruction Set Architecture - Befehlssatz 64-040 Rechnerstrukturen und Betriebssysteme

B Befehlsregister IR enthält den aktuellen Befehl


B z.B. einen 32-bit Wert
01001110111111100000000000001000
31 0

Wie soll die Hardware diesen Wert interpretieren?


I direkt in einer Tabelle nachschauen (Mikrocode-ROM)
I Problem: Tabelle müsste 232 Einträge haben

⇒ Aufteilung in Felder: Opcode und Operanden


⇒ Decodierung über mehrere, kleine Tabellen
⇒ unterschiedliche Aufteilung für unterschiedliche Befehle:
Befehlsformate

A. Mäder 845
Befehlsformate
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

unbenutzt

Zielregister
Opcode Immediate-Wert

01001110111111100000000000001000
31 0

I Befehlsformat: Aufteilung in mehrere Felder


I Opcode eigentlicher Befehl
I ALU-Operation add/sub/incr/shift/usw.
I Register-Indizes Operanden / Resultat
I Speicher-Adressen für Speicherzugriffe
I Immediate-Operanden Werte direkt im Befehl
I Lage und Anzahl der Felder abhängig vom Befehlssatz

A. Mäder 846
Befehlsformat: drei Beispielarchitekturen
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

I MIPS: Beispiel für 32-bit RISC Architekturen


I alle Befehle mit 32-bit codiert
I nur 3 Befehlsformate (R, I, J)

I D·CORE: Beispiel für 16-bit Architektur


I siehe Praktikum RSB (64-042) für Details

I Intel x86: Beispiel für CISC-Architekturen


I irreguläre Struktur, viele Formate
I mehrere Codierungen für einen Befehl
I 1-Byte . . . 36-Bytes pro Befehl

A. Mäder 847
Befehlsformat: Beispiel MIPS
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

I festes Befehlsformat
I alle Befehle sind 32 Bit lang
I Opcode-Feld ist immer 6-bit breit
I codiert auch verschiedene Adressierungsmodi
wenige Befehlsformate
I R-Format
I Register-Register ALU-Operationen
I I-/J-Format
I Lade- und Speicheroperationen
I alle Operationen mit unmittelbaren Operanden
I Jump-Register
I Jump-and-Link-Register

A. Mäder 848
MIPS: Übersicht
„Microprocessor without Interlocked Pipeline Stages“
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

I entwickelt an der Univ. Stanford, seit 1982


I Einsatz: eingebettete Systeme, SGI Workstations/Server

I klassische 32-bit RISC Architektur


I 32-bit Wortbreite, 32-bit Speicher, 32-bit Befehle
I 32 Register: R0 ist konstant Null, R1 . . . R31 Universalregister
I Load-Store Architektur, nur base+offset Adressierung

I sehr einfacher Befehlssatz, 3-Adress Befehle


I keinerlei HW-Unterstützung für „komplexe“ SW-Konstrukte
I SW muss sogar HW-Konflikte („Hazards“) vermeiden
I Koprozessor-Konzept zur Erweiterung

A. Mäder 849
MIPS: Registermodell
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

I 32 Register, R0 . . . R31, jeweils 32-bit


I R1 bis R31 sind Universalregister
I R0 ist konstant Null (ignoriert Schreiboperationen)
I R0 Tricks R5 = -R5 sub R5, R0, R5
R4 = 0 add R4, R0, R0
R3 = 17 addi R3, R0, 17
if (R2 != 0) bne R2, R0, label
I keine separaten Statusflags
I Vergleichsoperationen setzen Zielregister auf 0 bzw. 1
R1 = (R2 < R3) slt R1, R2, R3

A. Mäder 850
MIPS: Befehlssatz
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

I Übersicht und Details: [PH17, PH16b]


David A. Patterson, John L. Hennessy: Computer Organization and
Design – The Hardware/Software Interface
I dort auch hervorragende Erläuterung der Hardwarestruktur

I klassische fünf-stufige Befehlspipeline


I Instruction-Fetch Befehl holen
I Decode Decodieren und Operanden holen
I Execute ALU-Operation oder Adressberechnung
I Memory Speicher lesen oder schreiben
I Write-Back Resultat in Register speichern

A. Mäder 851
MIPS: Hardwarestruktur
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

0
M
u
x
1

IF/ID ID/EX EX/MEM MEM/WB

Add

4 Add
Add result

Shift
left 2

Read
Instruction

PC Address register 1 Read


Read data 1
register 2 Zero
Instruction
Registers Read ALU ALU
memory Write 0 Read
data 2 result Address 1
register M data
u M
Data u
Write x memory
data x
1
0
Write
data
16 32
Sign
extend

[PH16b]

PC Register ALUs Speicher


I-Cache (R0 . . . R31) D-Cache

A. Mäder 852
MIPS: Befehlsformate
Befehl im R-Format
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

00000010111111100001100000100010
31 0

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

op rs rt rd shift funct

op:
I Opcode Typ des Befehls 0 = „alu-op“
rs: source register 1 erster Operand 23 = „r23“
rt: source register 2 zweiter Operand 30 = „r30“
rd: destination register Zielregister 3 = „r3“
shift: shift amount (optionales Shiften) 0 = „0“
funct: ALU function Rechenoperation 34 = „sub“
⇒ r3 = r23 - r30 sub r3, r23, r30

A. Mäder 853
MIPS: Befehlsformate
Befehl im I-Format
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

10001101000001010000000000000110
31 0

6 bits 5 bits 5 bits 16 bits

op rs rt address

op:
I Opcode Typ des Befehls 35 = „lw“
rs: base register Basisadresse 8 = „r8“
rt: destination register Zielregister 5 = „r5“
addr: address offset Offset 6 = „6“
⇒ r5 = MEM[r8+6] lw r5, 6(r8)

A. Mäder 854
Befehlsformat: Beispiel M·CORE
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

I 32-bit RISC Architektur, Motorola 1998


I besonders einfaches Programmiermodell
I Program Counter PC
I 16 Universalregister R0 . . . R15
I Statusregister C („carry flag“)
I 16-bit Befehle (um Programmspeicher zu sparen)
I Verwendung
I Mikrocontroller für eingebettete Systeme
z.B. „Smart Cards“
I siehe [Link]/wiki/[Link]

A. Mäder 855
D·CORE
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

I ähnlich M·CORE
I gleiches Registermodell, aber nur 16-bit Wortbreite
I Program Counter PC
I 16 Universalregister R0 . . . R15
I Statusregister C („carry flag“)

I Subset der Befehle, einfachere Codierung


I vollständiger Hardwareaufbau in Hades verfügbar
I [HenHA] Hades Demo: 60-dcore/t3/chapter
oder Simulator mit Assembler
I [Link]/publications/onlineDoc
( [Link] / [Link] )

A. Mäder 856
D·CORE: Registermodell
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

15 0 15 0

R0 (SP) PC IR
R1
R2 C - Befehlsregister
R3
R4 - 16 Universalregister

R5 - Programmzähler MAR
R6 - 1 Carry-Flag

R7 MDR
R8
R9 MRR
R10
R11 nWE

R12
R13 nOE

R14
R15 (Link) - Bus-Interface

I sichtbar für Programmierer: R0 . . . R15, PC und C


A. Mäder 857
D·CORE: Befehlssatz
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

Befehl Funktion
mov move register
addu, addc Addition (ohne, mit Carry)
subu Subtraktion
and, or, xor logische Operationen
lsl, lsr, asr logische, arithmetische Shifts
cmpe, cmpne . . . Vergleichsoperationen
movi, addi . . . Operationen mit Immediate-Operanden
ldw, stw Speicherzugriffe, load/store
br, jmp unbedingte Sprünge
bt, bf bedingte Sprünge
jsr Unterprogrammaufruf
trap Software interrupt
rfi return from interrupt

A. Mäder 858
D·CORE: Befehlsformate
12.3 Instruction Set Architecture - Befehlsformate 64-040 Rechnerstrukturen und Betriebssysteme

15 12 8 4 0 15 12 8 4 0

OPC sub-opc RY RX ALU IR

15 12 8 4 0 IR<11:0> IMM12
OPC sub-opc imm4 RX Immediate

[Link]
15 0

OPC offset4 RY RX Load/Store [Link]

[Link]
15 0

OPC 12-bit immediate Branch [Link]

I 4-bit Opcode, 4-bit Registeradressen


I einfaches Zerlegen des Befehls in die einzelnen Felder

A. Mäder 859
Adressierungsarten
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

I Woher kommen die Operanden / Daten für die Befehle?


I Hauptspeicher, Universalregister, Spezialregister

I Wie viele Operanden pro Befehl?


I 0- / 1- / 2- / 3-Adress Maschinen

I Wie werden die Operanden adressiert?


I immediate / direkt / indirekt / indiziert / autoinkrement / usw.

⇒ wichtige Unterscheidungsmerkmale für Rechnerarchitekturen

I Zugriff auf Hauptspeicher: ≈ 100 × langsamer als Registerzugriff


I möglichst Register statt Hauptspeicher verwenden (!)
I „load/store“-Architekturen

A. Mäder 860
Beispiel: Add-Befehl
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

B Rechner soll „rechnen“ können


B typische arithmetische Operation nutzt 3 Variablen
Resultat, zwei Operanden: X = Y + Z
add r2, r4, r5 reg2 = reg4 + reg5
„addiere den Inhalt von R4 und R5
und speichere das Resultat in R2“
I woher kommen die Operanden?
I wo soll das Resultat hin?
I Speicher
I Register
I entsprechende Klassifikation der Architektur

A. Mäder 861
Beispiel: Datenpfad
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

I Register (-bank)
I liefern Operanden
I speichern Resultate

I interne Hilfsregister

I ALU, typ. Funktionen:


I add, add-carry, sub
I and, or, xor
I shift, rotate
I compare
I (floating point ops.)
[TA14]

A. Mäder 862
Woher kommen die Operanden?
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

I typische Architektur addr1


I von-Neumann Prinzip: alle Daten im Hauptspeicher
data1
I 3-Adress Befehle: zwei Operanden, ein Resultat addr2
Speicher
data2

⇒ „Multiport-Speicher“ mit drei Ports ? addr3

I sehr aufwändig, extrem teuer, trotzdem langsam data1

⇒ Register im Prozessor zur Zwischenspeicherung !


I Datentransfer zwischen Speicher und Registern
Load reg = MEM[addr] Regs Speicher
Store MEM[addr] = reg
I RISC: Rechenbefehle arbeiten nur mit Registern
I CISC: gemischt, Operanden in Registern oder im Speicher

A. Mäder 863
n-Adress Maschine n = {3 . . . 0}
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

3-Adress Format I X=Y+Z


I sehr flexibel, leicht zu programmieren
I Befehl muss 3 Adressen codieren
2-Adress Format I X=X+Z
I eine Adresse doppelt verwendet:
für Resultat und einen Operanden
I Format wird häufig verwendet

1-Adress Format I ACC = ACC + Z


I alle Befehle nutzen das Akkumulator-Register
I häufig in älteren / 8-bit Rechnern

0-Adress Format I TOS = TOS + NOS


I Stapelspeicher: top of stack, next of stack
I Adressverwaltung entfällt
I im Compilerbau beliebt
A. Mäder 864
Beispiel: n-Adress Maschine
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel: Z = (A-B) / (C + D*E) Hilfsregister: T

3-Adress Maschine 1-Adress Maschine 0-Adress Maschine


sub Z, A, B load D push E
mul T, D, E mul E push D
add T, C, T add C mul
div Z, Z, T stor Z push C
load A add
2-Adress Maschine sub B push B
mov Z, A div Z push A
sub Z, B stor Z sub
mov T, D div
mul T, E pop Z
add T, C
div Z, T

A. Mäder 865
Beispiel: Stack-Maschine / 0-Adress Maschine
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel: Z = (A-B) / (C + D*E)

0-Adress Maschine TOS NOS Stack


push E E

push D D E

mul D*E

push C C D*E

add C+D*E

push B B C+D*E

push A A B C+D*E

sub A-B C+D*E

div (A-B)/(C+D*E)

pop Z

A. Mäder 866
Adressierungsarten
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

I „immediate“
I Operand steht direkt im Befehl
I kein zusätzlicher Speicherzugriff
I aber Länge des Operanden beschränkt
I „direkt“
I Adresse des Operanden steht im Befehl
I keine zusätzliche Adressberechnung
I ein zusätzlicher Speicherzugriff
I Adressbereich beschränkt
I „indirekt“
I Adresse eines Pointers steht im Befehl
I erster Speicherzugriff liest Wert des Pointers
I zweiter Speicherzugriff liefert Operanden
I sehr flexibel (aber langsam)

A. Mäder 867
Adressierungsarten (cont.)
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

I „register“
I wie Direktmodus, aber Register statt Speicher
I 32 Register: benötigen 5 bit im Befehl
I genug Platz für 2- oder 3-Adress Formate
I „register-indirekt“
I Befehl spezifiziert ein Register
I mit der Speicheradresse des Operanden
I ein zusätzlicher Speicherzugriff
I „indiziert“
I Angabe mit Register und Offset
I Inhalt des Registers liefert Basisadresse
I Speicherzugriff auf (Basisadresse+offset)
I ideal für Array- und Objektzugriffe
I Hauptmodus in RISC-Rechnern (auch: „Versatz-Modus“)

A. Mäder 868
Immediate Adressierung
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

opcode regs immediate16 1-Wort Befehl


31 15 0

opcode regs unused 2-Wort Befehl


immediate32

I Operand steht direkt im Befehl, kein zusätzlicher


Speicherzugriff
I Länge des Operanden < (Wortbreite - Opcodebreite)
I Darstellung größerer Zahlenwerte
I 2-Wort Befehle (x86)
zweites Wort für Immediate-Wert
I mehrere Befehle (MIPS, SPARC)
z.B. obere/untere Hälfte eines Wortes
I Immediate-Werte mit zusätzlichem Shift (ARM)

A. Mäder 869
Direkte Adressierung
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

Registers

31 15 0

opcode regs unused load

addr32

Memory
I Adresse des Operanden steht im Befehl
I keine zusätzliche Adressberechnung
I ein zusätzlicher Speicherzugriff: z.B. R3 = MEM[addr32]
I Adressbereich beschränkt, oder 2-Wort Befehl (wie Immediate)

A. Mäder 870
Indirekte Adressierung
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

Registers

31 15 0

opcode regs unused 4 load

addr32
3
tmp
2

I Adresse eines Pointers steht im Befehl


I keine zusätzliche Adressberechnung Memory

I zwei zusätzliche Speicherzugriffe:


z.B. tmp = MEM[addr32] R3 = MEM[tmp]
I typische CISC-Adressierungsart, viele Taktzyklen
I kommt bei RISC-Rechnern nicht vor
A. Mäder 871
Indizierte Adressierung
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

Indexaddressing
op rs rt rd ...
Memory
Register
Word
Register

Updateaddressing
op rs rt Address Memory
1.

Register Word
2.

I indizierte Adressierung, z.B. für Arrayzugriffe


I addr = hSourceregister i + hBasisregister i
I addr = hSourceregister i + offset;
Sourceregister = addr

A. Mäder 872
Beispiel: MIPS Adressierungsarten
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

1. Immediate addressing
op rs rt Immediate
immediate
2. Register addressing
op rs rt rd ... funct Registers

Register register

3. Base addressing
op rs rt Address Memory

Register Byte Halfword Word index + offset


4. PC-relative addressing
op rs rt Address Memory

PC Word PC + offset
5. Pseudodirect addressing
op Address Memory

PC & Word PC (31..28) & address

A. Mäder 873
typische Adressierungsarten
12.4 Instruction Set Architecture - Adressierungsarten 64-040 Rechnerstrukturen und Betriebssysteme

welche Adressierungsarten / -Varianten sind üblich?


I 0-Adress (Stack-) Maschine Java virtuelle Maschine
I 1-Adress (Akkumulator) Maschine 8-bit Mikrocontroller
einige x86 Befehle
I 2-Adress Maschine 16-bit Rechner
einige x86 Befehle
I 3-Adress Maschine 32-bit RISC

I CISC Rechner unterstützen diverse Adressierungsarten


I RISC meistens nur indiziert mit Offset
I siehe [Link]/wiki/Addressing_mode

A. Mäder 874
Intel x86-Architektur
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

I übliche Bezeichnung für die Intel-Prozessorfamilie


I von 8086, 80286, 80386, 80486, Pentium . . . Pentium 4,
Core 2, Core-i . . .
I eigentlich „IA-32“ (Intel architecture, 32-bit) . . . „IA-64“

I irreguläre Struktur: CISC


I historisch gewachsen: diverse Erweiterungen (MMX, SSE . . . )
I Abwärtskompatibilität: IA-64 mit IA-32 Emulation
I ab 386 auch wie reguläre 8-Register Maschine verwendbar

Hinweis: niemand erwartet, dass Sie sich alle Details merken

A. Mäder 875
Intel x86: Evolution
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

Chip Datum MHz Transistoren Speicher Anmerkungen


4004 4/1971 0,108 2 300 640 B erster Mikroprozessor auf einem Chip
8008 4/1972 0,108 3 500 16 KiB erster 8-bit Mikroprozessor
8080 4/1974 2 6 000 64 KiB „general-purpose“ CPU auf einem Chip
8086 6/1978 5–10 29 000 1 MiB erste 16-bit CPU auf einem Chip
8088 6/1979 5–8 29 000 1 MiB Einsatz im IBM-PC
80286 2/1982 8–12 134 000 16 MiB „Protected-Mode“
80386 10/1985 16–33 275 000 4 GiB erste 32-bit CPU
80486 4/1989 25-100 1,2M 4 GiB integrierter 8K Cache
Pentium 3/1993 60–233 3,1M 4 GiB zwei Pipelines, später MMX
Pentium Pro 3/1995 150–200 5,5M 4 GiB integrierter first und second-level Cache
Pentium II 5/1997 233–400 7,5M 4 GiB Pentium Pro plus MMX
Pentium III 2/1999 450–1 400 9,5–44M 4 GiB SSE-Einheit
Pentium 4 11/2000 1 300–3 600 42–188M 4 GiB Hyperthreading
Core-2 5/2007 1 600–3 200 143–410M 4 GiB 64-bit Architektur, Mehrkernprozessoren
Core-i. . . 11/2008 2,500–3,600 > 700M 64 GiB Speichercontroller, Taktanpassung
... GPU, I/O-Contr., Spannungsregelung . . .
Befehlssatz: AVX . . .

A. Mäder 876
Beispiel: Core i9-9980XE Prozessor
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

Taktfrequenz 3,0 GHz (max. 4,4 GHz)


Anzahl der Cores 18 (× 2 Hyperthreading)
L1 Cache 18 × 32 KiB I + 32KiB D
L2 Cache 18 × 1 MiB (I+D)
L3 Cache 24,75 MiB (I+D)
Memory Controller 4 × 19,89 GiB/s
DMI Durchsatz 8 GT/s
Verbindung zu Chipsatz
Bus Interface 64 Bits
Prozess 14 nm
Versorgungsspannung 0,7 - 1,2 V
Wärmeabgabe ∼ 165 W
Quellen: [Link]
[Link]
[Link]

A. Mäder 877
x86: Speichermodell
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

Bit-Offset
31 23 15 8 7 0

28

24

20

16

12

Byte 3 Byte 2 Byte 1 Byte 0 0 kleinste Adresse

Byte-Offset

I „Little Endian“: LSB eines Wortes bei der kleinsten Adresse

A. Mäder 878
x86: Speichermodell (cont.)
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

I Speicher voll byte-adressierbar


I misaligned Zugriffe langsam

I Beispiel 4EH FH

12H EH
[IA64]
7AH DH

Word at Address BH FEH CH


Doubleword at Address AH
Contains FE06H 06H BH Contains 7AFE0636H

36H AH
Byte at Address 9H
1FH 9H
Contains 1FH Quadword at Address 6H
A4H 8H Contains
7AFE06361FA4230BH
Word at Address 6H 23H 7H
Contains 230BH 0BH 6H

45H 5H
67H 4H
Word at Address 2H
Contains 74CBH 74H 3H
CBH 2H Double quadword at Address 0H
Word at Address 1H Contains
Contains CB31H 31H 1H 4E127AFE06361FA4230B456774CB3112
12H 0H

A. Mäder 879
x86: Register
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

63 31 15 0
8086
RAX EAX AX AH AL accumulator
E... ab 386
RBX EBX BX BH BL base addr
R... x86-64
RCX ECX CX CH CL count: String, Loop

RDX EDX DX DH DL data, multiply/divide

RSI ESI SI index, string src


79 0
RDI EDI DI index, string dst
FPR0
RSP ESP SP stackptr

RBP EBP BP base of stack segment

CS code segment

SS stack segment

DS data segment

ES extra data segment

FS
FPR7
GS

RIP EIP IP PC
FP Status
EFLAGS status

64-bit Mode 32-bit Mode 16-bit Mode

R8 ... R15 ...D ...W ...L

A. Mäder 880
x86: EFLAGS Register
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
I
V V
I I I A V R 0 N O O D I T S Z A P C
0 0 0 0 0 0 0 0 0 0 T F F F F F F 0 F 0 F 1 F
D C M F P
P F
L

X ID Flag (ID)
X Virtual Interrupt Pending (VIP)
X Virtual Interrupt Flag (VIF)
X Alignment Check / Access Control (AC)
X Virtual-8086 Mode (VM)
X Resume Flag (RF)
X Nested Task (NT)
X I/O Privilege Level (IOPL)
S Overflow Flag (OF)
C Direction Flag (DF)
X Interrupt Enable Flag (IF)
X Trap Flag (TF)
S Sign Flag (SF)
S Zero Flag (ZF)
S Auxiliary Carry Flag (AF)
S Parity Flag (PF)
S Carry Flag (CF)

S Indicates a Status Flag


C Indicates a Control Flag Reserved bit positions. DO NOT USE.
X Indicates a System Flag Always set to values previously read.
[IA64]

A. Mäder 881
x86: Datentypen
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

bytes 15

word 31
high low

doubleword 63
high word low word

quadword high doubleword low doubleword

integer (2-complement b/w/dw/qw)


ordinal (unsigned b/w/dw/qw)
BCD (one digit per byte, multiple bytes) b

packed BCD (two digits per byte, multiple bytes) b b

near pointer (32 bit offset)


far pointer (16 bit segment + 32 bit offset)
bit field
bit string 2**32-1 bits

byte string 2**32 -1 bytes

79 63 32 31 0

float / double / extended


Adressen: N+4 N+3 N+2 N+1 N

A. Mäder 882
x86: Befehlssatz
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

Funktionalität
Datenzugriff mov, xchg
Stack-Befehle push, pusha, pop, popa
Typumwandlung cwd, cdq, cbw (byte→word), movsx . . .
Binärarithmetik add, adc, inc, sub, sbb, dec, cmp, neg . . .
mul, imul, div, idiv . . .
Dezimalarithmetik (packed/unpacked BCD) daa, das, aaa . . .
Logikoperationen and, or, xor, not, sal, shr, shr . . .
Sprungbefehle jmp, call, ret, int, iret, loop, loopne . . .
String-Operationen ovs, cmps, scas, load, stos . . .
„high-level“ enter (create stack frame) . . .
diverses lahf (load AH from flags) . . .
Segment-Register far call, far ret, lds (load data pointer)

I CISC: zusätzlich diverse Ausnahmen/Spezialfälle

A. Mäder 883
x86: Befehlsformate
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

I außergewöhnlich komplexes Befehlsformat


1. prefix repeat / segment override / etc.
2. opcode eigentlicher Befehl
3. register specifier Ziel / Quellregister
4. address mode specifier diverse Varianten
5. scale-index-base Speicheradressierung
6. displacement Offset
7. immediate operand

I außer dem Opcode alle Bestandteile optional


I unterschiedliche Länge der Befehle, von 1 . . . 36 Bytes

⇒ extrem aufwändige Decodierung


⇒ CISC – Complex Instruction Set Computer

A. Mäder 884
x86: Befehlsformat-Modifier („prefix“)
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

I alle Befehle können mit Modifiern ergänzt werden

segment override Adresse aus angewähltem Segmentregister


address size Umschaltung 16/32/64-bit Adresse
operand size Umschaltung 16/32/64-bit Operanden

repeat Stringoperationen: für alle Elemente


lock Speicherschutz bei Multiprozessorsystemen

A. Mäder 885
x86 Befehlscodierung: Beispiele
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

a. JE EIP + displacement
[PH16b]
4 4 8
JE Condition Displacement

b. CALL
8 32
CALL Offset

c. MOV EBX, [EDI + 45]


6 1 1 8 8
MOV d w
r-m
postbyte Displacement I 1 Byte . . . 36 Bytes
d. PUSH ESI
I vollkommen irregulär
5 3 I w: Auswahl 16/32 bit
PUSH Reg

e. ADD EAX, #6765


4 3 1 32
ADD Reg w Immediate

f. TEST EDX, #42


7 1 8 32

TEST w Postbyte Immediate

A. Mäder 886
x86 Befehlscodierung: Beispiele (cont.)
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

Instruction Function
If equal (CC) {EIP=name};
JE name
EIP–128 name < EIP+128

JMP name {EIP=name};

CALL name SP=SP–4; M[SP]=EIP+5; EIP=name;

MOVW EBX,[EDI + 45] EBX=M[EDI+45]

PUSH ESI SP=SP–4; M[SP]=ESI

POP EDI EDI=M[SP]; SP=SP+4

ADD EAX,#6765 EAX=EAX+6765

TEST EDX,#42 Set condition codes (flags) with EDX & 42

M[EDI]=M[ESI];
MOVSL
EDI=EDI+4; ESI=ESI+4

[PH16b]

A. Mäder 887
x86: Assembler-Beispiel print( . . . )
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

Addr Opcode Assembler C Quellcode


-------------------------------------------------------------------------------
.file " hello.c "
.text
0000 48656 C6C .string "Hello x86 !\\n"
6 F207838
36210 A00
.text
print:
0000 55 pushl %ebp | void print( char* s ) {
0001 89 E5 movl %esp ,% ebp
0003 53 pushl %ebx
0004 8 B5D08 movl 8(% ebp ),% ebx
0007 803 B00 cmpb $0 ,(% ebx) | while( *s != 0 ) {
000a 7418 je .L18
.align 4
.L19:
000c A100000000 movl stdout ,% eax | putc( *s, stdout );
0011 50 pushl %eax
0012 0 FBE03 movsbl (% ebx ),% eax
0015 50 pushl %eax
0016 E8FCFFFFFF call _IO_putc
001b 43 incl %ebx | s++;
001c 83 C408 addl $8 ,% esp | }
001f 803 B00 cmpb $0 ,(% ebx)
0022 75 E8 jne .L19
.L18:
0024 8 B5DFC movl -4(% ebp ),% ebx | }
0027 89 EC movl %ebp ,% esp
0029 5D popl %ebp
002a C3 ret

A. Mäder 888
x86: Assembler-Beispiel main( . . . )
12.5 Instruction Set Architecture - Intel x86-Architektur 64-040 Rechnerstrukturen und Betriebssysteme

Addr Opcode Assembler C Quellcode


-------------------------------------------------------------------------------
.Lfe1:
.Lscope0 :
002b 908 D7426 .align 16
00
main:
0030 55 pushl %ebp | int main( int argc , char ** argv ) {
0031 89 E5 movl %esp ,% ebp
0033 53 pushl %ebx

0034 BB00000000 movl $.LC0 ,% ebx | print( "Hello x86 !\\n" );


0039 803 D0000 cmpb $0 ,.LC0
000000
0040 741A je .L26
0042 89 F6 .align 4
.L24:
0044 A100000000 movl stdout ,% eax
0049 50 pushl %eax
004a 0 FBE03 movsbl (% ebx ),% eax
004d 50 pushl %eax
004e E8FCFFFFFF call _IO_putc
0053 43 incl %ebx
0054 83 C408 addl $8 ,% esp
0057 803 B00 cmpb $0 ,(% ebx)
005a 75 E8 jne .L24
.L26:
005c 31 C0 xorl %eax ,% eax | return 0;
005e 8 B5DFC movl -4(% ebp ),% ebx | }
0061 89 EC movl %ebp ,% esp
0063 5D popl %ebp
0064 C3 ret
A. Mäder 889
Bewertung der ISA
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

Kriterien für einen guten Befehlssatz


I vollständig: alle notwendigen Instruktionen verfügbar
I orthogonal: keine zwei Instruktionen leisten das Gleiche
I symmetrisch: z.B. Addition ⇔ Subtraktion
I adäquat: technischer Aufwand entsprechend zum Nutzen
I effizient: kurze Ausführungszeiten

A. Mäder 890
Bewertung der ISA (cont.)
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

Statistiken zeigen: Dominanz der einfachen Instruktionen


I x86-Prozessor
Anweisung Ausführungshäufigkeit %
1. load 22 %
2. conditional branch 20 %
3. compare 16 %
4. store 12 %
5. add 8%
6. and 6%
7. sub 5%
8. move reg-reg 4%
9. call 1%
10. return 1%
Total 96 %

A. Mäder 891
Bewertung der ISA (cont.)
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

Instruction compress eqntott espresso gcc (cc1) li Int. average


load 20.8% 18.5% 21.9% 24.9% 23.3% 22%
store 13.8% 3.2% 8.3% 16.6% 18.7% 12%
add 10.3% 8.8% 8.15% 7.6% 6.1% 8%
sub 7.0% 10.6% 3.5% 2.9% 3.6% 5%
mul 0.1% 0%
div 0%
compare 8.2% 27.7% 15.3% 13.5% 7.7% 16%
mov reg-reg 7.9% 0.6% 5.0% 4.2% 7.8% 4%
load imm 0.5% 0.2% 0.6% 0.4% 0%
cond. branch 15.5% 28.6% 18.9% 17.4% 15.4% 20%
uncond. branch 1.2% 0.2% 0.9% 2.2% 2.2% 1%
call 0.5% 0.4% 0.7% 1.5% 3.2% 1%
return, jmp indirect 0.5% 0.4% 0.7% 1.5% 3.2% 1%
shift 3.8% 2.5% 1.7% 1%
and 8.4% 1.0% 8.7% 4.5% 8.4% 6%
or 0.6% 2.7% 0.4% 0.4% 1%
other (xor, not, . . .) 0.9% 2.2% 0.1% 1%
load FP 0%
store FP 0%
add FP 0%
sub FP 0%
mul FP 0%
div FP 0%
compare FP 0%
mov reg-reg FP 0%
other (abs, sqrt, . . .) 0%
[HP17]
Figure D.15 80x86 instruction mix for five SPECint92 programs.

A. Mäder 892
Bewertung der ISA (cont.)
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

I MIPS-Prozessor [HP17]

store int 2% applu art equake lucas swim


compare int 2%
and/or/xor 4%
call/return 3% gap gcc gzip mcf perl cond branch 4%
compare 5% 7%
store FP
store 10% mul FP 8%
cond branch 12% add/sub FP 10%
add/sub 13% load FP 15%

and/or/xor 16% add/sub int 20%


load 37% load int 26%

0% 5% 10% 15% 20% 25% 30% 35% 40% 0% 5% 10% 15% 20% 25% 30% 35% 40%

SPECint2000 (96%) SPECfp2000 (97%)


ca. 80 % der Berechnungen eines typischen Programms
I
verwenden nur ca. 20 % der Instruktionen einer CPU
I am häufigsten gebrauchten Instruktionen sind einfache
Instruktionen: load, store, add . . .
⇒ Motivation für RISC
A. Mäder 893
CISC – Complex Instruction Set Computer
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

Rechnerarchitekturen mit irregulärem, komplexem Befehlssatz und


(unterschiedlich) langer Ausführungszeit
I aus der Zeit der ersten Großrechner, 60er Jahre
I Programmierung auf Assemblerebene
I Komplexität durch sehr viele (mächtige) Befehle umgehen

typische Merkmale
I Instruktionssätze mit mehreren hundert Befehlen (> 300)
I unterschiedlich lange Instruktionsformate: 1 . . . n-Wort Befehle
I komplexe Befehlscodierung
I mehrere Schreib- und Lesezugriffe pro Befehl
I viele verschiedene Datentypen

A. Mäder 894
CISC – Complex Instruction Set Computer (cont.)
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

I sehr viele Adressierungsarten, -Kombinationen


I fast alle Befehle können auf Speicher zugreifen
I Mischung von Register- und Speicheroperanden
I komplexe Adressberechnung
I Unterprogrammaufrufe: über Stack
I Übergabe von Argumenten
I Speichern des Programmzählers
I explizite „Push“ und „Pop“ Anweisungen
I Zustandscodes („Flags“)
I implizit gesetzt durch arithmetische und logische Anweisungen

A. Mäder 895
CISC – Complex Instruction Set Computer (cont.)
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

Vor- / Nachteile
+ nah an der Programmiersprache, einfacher Assembler
+ kompakter Code: weniger Befehle holen, kleiner I-Cache
− Befehlssatz vom Compiler schwer auszunutzen
− Ausführungszeit abhängig von: Befehl, Adressmodi . . .
− Instruktion holen schwierig, da variables Instruktionsformat
− Speicherhierarchie schwer handhabbar: Adressmodi
− Pipelining schwierig

Beispiele
I Intel x86 / IA-64, Motorola 68 000, DEC Vax

A. Mäder 896
CISC – Mikroprogrammierung
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

I ein Befehl kann nicht in einem Takt abgearbeitet werden


⇒ Unterteilung in Mikroinstruktionen (? 5 . . . 7)

I Ablaufsteuerung durch endlichen Automaten


I meist als ROM (RAM) implementiert, das
Mikroprogrammworte beinhaltet

1. horizontale Mikroprogrammierung horizontale Mikroprog.

I langes Mikroprogrammwort (ROM-Zeile)


I steuert direkt alle Operationen
I Spalten entsprechen: Kontrollleitungen und Folgeadressen

A. Mäder 897
CISC – Mikroprogrammierung (cont.)
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

2. vertikale Mikroprogrammierung vertikale Mikroprog.

I kurze Mikroprogrammworte
I Spalten enthalten Mikrooperationscode
I mehrstufige Decodierung für Kontrollleitungen

+ CISC-Befehlssatz mit wenigen Mikrobefehlen realisieren


+ —-Programm im RAM: Mikrobefehlssatz austauschbar
− (mehrstufige) ROM/RAM Zugriffe: zeitaufwändig

⇒ wird inzwischen nur noch benutzt, um CISC Befehle in


RISC-artige Sequenzen umzusetzen (x86)

A. Mäder 898
horizontale Mikroprogrammierung
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

µ Instr.
Load µ-Programmsteuerwerk
MUX

µPC

CS ROM

horizontales
next
address
WCS RAM µ Programmwort
field

Bs Bo
nextPC Control Vector
next PC
Logic
RE
WE
End ALU Logical Unit MUL RF
Bi +- & or not *
CC

VN
Execution Unit

Mikroprogrammierung
A. Mäder 899
vertikale Mikroprogrammierung
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

Mikroprogrammierung

A. Mäder 900
RISC – Reduced Instruction Set Computer
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

oft auch: „Regular Instruction Set Computer“


I Grundidee: Komplexitätsreduktion in der CPU
I seit den 80er Jahren: „RISC-Boom“
I internes Projekt bei IBM
I von Hennessy (Stanford) und Patterson (Berkeley) publiziert
I Hochsprachen und optimierende Compiler
⇒ kein Bedarf mehr für mächtige Assemblerbefehle
⇒ pro Assemblerbefehl muss nicht mehr „möglichst viel“ lokal
in der CPU gerechnet werden (CISC Mikroprogramm)
Beispiele
I IBM 801, MIPS, SPARC, DEC Alpha, ARM
typische Merkmale
I reduzierte Anzahl einfacher Instruktionen (z.B. 128)
I benötigen in der Regel mehr Anweisungen für eine Aufgabe
I werden aber mit kleiner, schneller Hardware ausgeführt
A. Mäder 901
RISC – Reduced Instruction Set Computer (cont.)
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

I reguläre Struktur, z.B. 32-bit Wortbreite, 32-bit Befehle


I nur ein-Wort Befehle
I alle Befehle in gleicher Zeit ausführbar ⇒ Pipeline-Verarbeitung
I Speicherzugriff nur durch „Load“ und „Store“ Anweisungen
I alle anderen Operationen arbeiten auf Registern
I keine Speicheroperanden
I Register-orientierter Befehlssatz
I viele universelle Register, keine Spezialregister (≥ 32)
I oft mehrere (logische) Registersätze: Zuordnung zu
Unterprogrammen, Tasks etc.
I Unterprogrammaufrufe: über Register
I Register für Argumente, „Return“-Adressen, Zwischenergebnisse
I keine Zustandscodes („Flags“)
I spezielle Testanweisungen
I speichern Resultat direkt im Register
I optimierende Compiler statt Assemblerprogrammierung
A. Mäder 902
RISC – Reduced Instruction Set Computer (cont.)
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

Vor- / Nachteile
+ fest-verdrahtete Logik, kein Mikroprogramm
+ einfache Instruktionen, wenige Adressierungsarten
+ Pipelining gut möglich
+ Cycles per Instruction = 1
in Verbindung mit Pipelining: je Takt (mind.) ein neuer Befehl
− längerer Maschinencode
− viele Register notwendig
I optimierende Compiler nötig / möglich
I High-performance Speicherhierarchie notwendig

A. Mäder 903
CISC vs. RISC
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

ursprüngliche Debatte
I streng geteilte Lager
I pro CISC: einfach für den Compiler; weniger Code Bytes
I pro RISC: besser für optimierende Compiler;
schnelle Abarbeitung auf einfacher Hardware
aktueller Stand
I Grenzen verwischen
I RISC-Prozessoren werden komplexer
I CISC-Prozessoren weisen RISC-Konzepte oder gar RISC-Kern auf
I für Desktop Prozessoren ist die Wahl der ISA kein Thema
I Code-Kompatibilität ist sehr wichtig!
I mit genügend Hardware wird alles schnell ausgeführt
I eingebettete Prozessoren: eindeutige RISC-Orientierung
+ kleiner, billiger, weniger Leistungsverbrauch

A. Mäder 904
ISA Design heute
12.6 Instruction Set Architecture - Befehlssätze 64-040 Rechnerstrukturen und Betriebssysteme

I Restriktionen durch Hardware abgeschwächt


I Code-Kompatibilität leichter zu erfüllen
I Emulation in Firm- und Hardware
I Intel bewegt sich weg von IA-32
I erlaubt nicht genug Parallelität
hat IA-64 eingeführt („Intel Architecture 64-bit“)
⇒ neuer Befehlssatz mit expliziter Parallelität (EPIC)
⇒ 64-bit Wortgrößen (überwinden Adressraumlimits)
⇒ benötigt hoch entwickelte Compiler

A. Mäder 905
Literatur
12.7 Instruction Set Architecture - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BO15] R.E. Bryant, D.R. O’Hallaron:


Computer systems – A programmers perspective.
3rd global ed., Pearson Education Ltd., 2015.
ISBN 978–1–292–10176–7. [Link]
[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –
Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5

A. Mäder 906
Literatur (cont.)
12.7 Instruction Set Architecture - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[PH17] D.A. Patterson, J.L. Hennessy: Computer Organization


and Design – The Hardware Software Interface – RISC-V
Edition.
Morgan Kaufmann Publishers Inc., 2017.
ISBN 978–0–12–812275–4
[PH16b] D.A. Patterson, J.L. Hennessy: Rechnerorganisation
und Rechnerentwurf – Die Hardware/Software-Schnittstelle.
5. Auflage, Oldenbourg, 2016. ISBN 978–3–11–044605–0
[HP17] J.L. Hennessy, D.A. Patterson:
Computer architecture – A quantitative approach.
6th edition, Morgan Kaufmann Publishers Inc., 2017.
ISBN 978–0–12–811905–1

A. Mäder 907
Literatur (cont.)
12.7 Instruction Set Architecture - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Fur00] S. Furber: ARM System-on-Chip Architecture.


2nd edition, Pearson Education Limited, 2000.
ISBN 978–0–201–67519–1
[HenHA] N. Hendrich: HADES — HAmburg DEsign System.
Universität Hamburg, FB Informatik, Lehrmaterial.
[Link]/applets/hades/webdemos
[IA64] Intel 64 and IA-32 Architectures Software Developer’s
Manual – Volume 1: Basic Architecture.
Intel Corp.; Santa Clara, CA.
[Link]/en-us/articles/intel-sdm

A. Mäder 908
Gliederung
13 Assembler-Programmierung 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung

A. Mäder 909
Gliederung (cont.)
13 Assembler-Programmierung 64-040 Rechnerstrukturen und Betriebssysteme

Motivation
Grundlagen der Assemblerebene
x86 Assembler
Elementare Befehle + Adressierung
Operationen
Kontrollfluss
Sprungbefehle und Schleifen
Mehrfachverzweigung (Switch)
Funktionsaufrufe und Stack
Speicherverwaltung
Elementare Datentypen
Arrays
Strukturen
Linker und Loader
Literatur
14. Rechnerarchitektur II
15. Betriebssysteme

A. Mäder 910
Wdh. Compilierungssystem
13.1 Assembler-Programmierung - Motivation 64-040 Rechnerstrukturen und Betriebssysteme

printf.o

Pre-
hello.c hello.i Compiler hello.s Assembler hello.o Linker hello
processor
(cc1) (as) (ld)
(cpp)
Source Modified Assembly Relocatable Executable
program source program object object
(text) program (text) programs program
(text) (binary) (binary)

[BO15]

I verschiedene Repräsentationen des Programms


I Hochsprache
I Assembler
I Maschinensprache
I Ausführung der Maschinensprache
I von-Neumann Zyklus: Befehl holen, decodieren, ausführen
I reale oder virtuelle Maschine

A. Mäder 911
Warum Assembler?
13.1 Assembler-Programmierung - Motivation 64-040 Rechnerstrukturen und Betriebssysteme

Programme werden nur noch selten in Assembler geschrieben


I Programmentwicklung in Hochsprachen weit produktiver
I Compiler/Tools oft besser als handcodierter Assembler

aber Grundwissen bleibt trotzdem unverzichtbar


I Verständnis des Ausführungsmodells auf der Maschinenebene
I Programmverhalten bei Fehlern / Debugging
I das High-Level Sprachmodell ist dort nicht anwendbar
I Programmleistung verstärken
I Ursachen für Programm-Ineffizienz verstehen
I effiziente „maschinengerechte“ Datenstrukturen / Algorithmen
I Systemsoftware implementieren
I Compilerbau: Maschinencode als Ziel
I Betriebssysteme implementieren (Prozesszustände verwalten)
I Gerätetreiber schreiben
A. Mäder 912
Assembler in RSB
13.1 Assembler-Programmierung - Motivation 64-040 Rechnerstrukturen und Betriebssysteme

I Beschränkung auf wesentliche Konzepte


I GNU Assembler für x86-64 (Linux, 64-bit)
I nur ein Datentyp: 64-bit Integer (long)
I nur kleiner Subset des gesamten Befehlssatzes

I diverse nicht behandelte Themen


I Makros
I Implementierung eines Assemblers (2-pass)
I Tipps für effizientes Programmieren
I Befehle für die Systemprogrammierung (supervisor mode)
I x86 Gleitkommabefehle
I ...

A. Mäder 913
Assemblersicht des Programmierers
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

[BO15]

beobachtbare Zustände
I Programmzähler (Instruction Pointer) x86-64 rip Register
I Adresse der nächsten Anweisung
I Registerbank rax . . . rbp Register
I häufig benutzte Programmdaten r8 . . . r15 Register
I Zustandscodes EFLAGS Register
I gespeicherte Statusinformationen über die letzte
arithmetische Operation
I für bedingte Sprünge benötigt (Conditional Branch)

A. Mäder 914
Assemblersicht des Programmierers (cont.)
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

I Speicher
I byteweise adressierbares Array
I Code, Nutzerdaten, (einige) OS Daten
I beinhaltet Kellerspeicher für Unterprogrammaufrufe „Stack“
I –"– dynamischen Adressraum „Heap“

A. Mäder 915
Umwandlung von C in Objektcode
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

[BO15]

A. Mäder 916
Compilieren zu Assemblercode: Funktion sum()
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

sum.c sum.s

[BO15]

I Befehl gcc -Og -S sum.c


I Erzeugt sum.s

A. Mäder 917
Assemblercode: sum.s
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

! "#
$"#
% !

% & '

! (

!
)
* $

A. Mäder 918
Assemblercode: sum.s
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

! "#
$"#
% ! % !

% & ' % & '

! (

!
)
* $

I alles was mit „.“ beginnt: Label, Anweisungen für Linker


A. Mäder 918
Assembler: Charakteristika
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

I hardwarenahe Programmierung: Zugriff auf kompletten


Befehlssatz und alle Register einer Maschine

I je ein Befehl pro Zeile


I Mnemonics für die einzelnen Maschinenbefehle
I Konstanten als Dezimalwerte oder Hex-Werte
I eingängige Namen für alle Register
I Adressen für alle verfügbaren Adressierungsarten
I Konvention bei gcc/as x86: Ziel einer Operation steht rechts

I symbolische Label für Sprungadressen


I Verwendung in Sprungbefehlen
I globale Label definieren Einsprungpunkte für den Linker/Loader

A. Mäder 919
Assembler: Datentypen
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

I nur die von der Maschine unterstützten „primitiven“ Daten


I keine Aggregattypen wie Arrays, Strukturen, oder Objekte
I nur fortlaufend adressierbare Bytes im Speicher

I Ganzzahl-Daten, z.B. 1, 2, 4, oder 8 Bytes 8 . . . 64 bits


I Datenwerte für Variablen int/long/long long
I positiv oder vorzeichenbehaftet signed/unsigned
I Textzeichen (ASCII, Unicode) char
I Gleitkomma-Daten mit 4 oder 8 Bytes float/double
I Adressen bzw. „Pointer“ untypisierte Adressverweise

A. Mäder 920
Assembler: Befehle/Operationen
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

I arithmetische/logische Funktionen auf Registern und Speicher


I Addition/Subtraktion, Multiplikation usw.
I bitweise logische und Schiebe-Operationen
I Datentransfer zwischen Speicher und Registern
I Daten aus Speicher in Register laden
I Registerdaten im Speicher ablegen
I ggf. auch Zugriff auf Spezial-/OS-register
I Kontrolltransfer
I unbedingte / bedingte Sprünge
I Unterprogrammaufrufe: Sprünge zu/von Prozeduren
I Interrupts, Exceptions, System-Calls

I Makros: Folge von Assemblerbefehlen

A. Mäder 921
Objektcode: Funktion sumstore()
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

I 14 Bytes Programmcode
I x86-Instruktionen mit 1-, 3- oder 5 Bytes
Erklärung s.u.

I Startadresse: 0x400595
I vom Compiler/Assembler gewählt

A. Mäder 922
Assembler und Linker
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

Assembler
I übersetzt .s zu .o
I binäre Codierung jeder Anweisung
I (fast) vollständiges Bild des ausführbaren Codes
I keine Verknüpfungen zu Code aus anderen Dateien /
zu Bibliotheksfunktionen

Linker / Binder
I löst Referenzen zwischen Dateien auf
I kombiniert mit statischen Laufzeit-Bibliotheken
I z.B. Code für malloc, printf
I manche Bibliotheken sind dynamisch verknüpft
I Verknüpfung wird beim Laden in Speicher bzw.
zur Laufzeit erstellt

A. Mäder 923
Beispiel: Maschinenbefehl für Speichern
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

I C-Code
I speichert Wert t nach Adresse aus dest

I Assembler
I Kopiere einen 8-Byte Wert in den Hauptspeicher
I Quad-Worte in x86-64 Terminologie
I Operanden
t: Register %rax
dest: Register %rbx
*dest: Speicher M[%rbx]

I Objektcode (x86-Befehlssatz)
I 3-Byte Befehl
I an Speicheradresse 0x40059e

A. Mäder 924
Objektcode Disassembler: objdump
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

! "
#

[BO15]

I objdump -d . . .
I Werkzeug zur Untersuchung des Objektcodes
I rekonstruiert aus Binärcode den Assemblercode
I kann auf vollständigem, ausführbaren Programm ([Link])
oder einer .o Datei ausgeführt werden

A. Mäder 925
Was kann „disassembliert“ werden?
13.2 Assembler-Programmierung - Grundlagen der Assemblerebene 64-040 Rechnerstrukturen und Betriebssysteme

! " "
# ! $

%%%&%%% ' $ (
%%%&%%% )) *
%%%&%%& # + ,
%%%&%% * -%$
%%%&%%) .% &% %% % * -%$ %%%&%.%
%%%&%% .& # /# % * -%$ %/# #.&

[BO15]

I alles, was als ausführbarer Code interpretiert werden kann


I Disassembler untersucht Bytes und rekonstruiert
Assemblerquelle (soweit wie möglich)

A. Mäder 926
x86 Assemblerprogrammierung
13.3 Assembler-Programmierung - x86 Assembler 64-040 Rechnerstrukturen und Betriebssysteme

I Adressierungsarten
I arithmetische Operationen
I Statusregister
I Umsetzung von Programmstrukturen
Einschränkungen
I Beispiele nutzen nur die 64-bit Datentypen
long bei Linux (unter Windows nur 4-Byte!)
I x86-64 wird wie 16-Register 64-bit Maschine benutzt (=RISC)
I CISC Komplexität und Tricks bewusst vermieden
I Beispiele nutzen gcc/as Syntax (vs. Microsoft, Intel)

Grafiken und Beispiele dieses Abschnitts sind aus R.E. Bryant,


D.R. O’Hallaron: Computer systems – A programmers perspective [BO15],
bzw. dem zugehörigen Foliensatz

A. Mäder 927
Datentransfer „move“
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

I Format: movq hsrci , hdsti


I transferiert ein 8-Byte „long“ Wort
I sehr häufige Instruktion

I Typ der Operanden


I Immediate: Konstante, ganzzahlig
I wie C-Konstante, aber mit dem Präfix $
I z.B.: $0x400, $-533
I codiert mit 1, 2 oder 4 Bytes
I Register: 16 Ganzzahl-Register
I %rsp (ggf. auch %rbp) für spezielle
Aufgaben reserviert
I z.T. Spezialregister für andere Anweisungen
I Speicher: 8 konsekutive Speicherbytes
I zahlreiche Adressmodi

A. Mäder 928
movq Operanden-Kombinationen
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

I Mem-Mem Kombination nicht möglich

A. Mäder 929
movq: Operanden/Adressierungsarten
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

I Immediate: $x → x
I positiver (oder negativer) Integerwert

I Register: %R → Reg[R]
I Inhalt eines der 16 Universalregister rax . . . r15

I Normal: (R) → Mem[Reg[R]]


I Register R spezifiziert die Speicheradresse
I Beispiel: movq (%rcx), %rax

I Displacement: D(R) → Mem[Reg[R]+D]


I Register R
I Konstantes „Displacement“ D spezifiziert den „offset“
I Beispiel: movl 8(%rbp), %rdx

A. Mäder 930
Beispiel: Funktion swap()
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

Register Funktion
%rdi Argument xp
%rsi Argument yp
%rax t0
%rdx t1

A. Mäder 931
Funktionsweise von swap()
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

Register Speicher

A. Mäder 932
Funktionsweise von swap()
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

Register Speicher

A. Mäder 932
Funktionsweise von swap()
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

Register Speicher

A. Mäder 932
Funktionsweise von swap()
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

Register Speicher

A. Mäder 932
Funktionsweise von swap()
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

Register Speicher

A. Mäder 932
Indizierte Adressierung
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

I allgemeine Form
I Imm(Rb,Ri,S) → Mem[Reg[Rb]+S*Reg[Ri]+Imm]
I hImmi Offset
I hRbi Basisregister: eines der 16 Integer-Register
I hRii Indexregister: jedes außer %rsp
%rbp grundsätzlich möglich, jedoch unwahrscheinlich
I hSi Skalierungsfaktor 1, 2, 4 oder 8

I gebräuchlichste Fälle
I (Rb) → Mem[Reg[Rb]]
I Imm(Rb) → Mem[Reg[Rb] + Imm]
I (Rb,Ri) → Mem[Reg[Rb] + Reg[Ri]]
I Imm(Rb,Ri) → Mem[Reg[Rb] + Reg[Ri] + Imm]
I (Rb,Ri,S) → Mem[Reg[Rb] + S*Reg[Ri]]

A. Mäder 933
Beispiel: Adressberechnung
13.3.1 Assembler-Programmierung - x86 Assembler - Elementare Befehle + Adressierung 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 934
Arithmetische Operationen
13.3.2 Assembler-Programmierung - x86 Assembler - Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I binäre Operatoren
Format Berechnung
addq hsrci , hdsti hdsti = hdsti+hsrci
subq hsrci , hdsti hdsti = hdsti-hsrci
imulq hsrci , hdsti hdsti = hdsti*hsrci
salq hsrci , hdsti hdsti = hdsti<<hsrci auch shlq
sarq hsrci , hdsti hdsti = hdsti>>hsrci arithmetisch
shrq hsrci , hdsti hdsti = hdsti>>hsrci logisch
xorq hsrci , hdsti hdsti = hdsti^hsrci
andq hsrci , hdsti hdsti = hdsti&hsrci
orq hsrci , hdsti hdsti = hdsti|hsrci

A. Mäder 935
Arithmetische Operationen (cont.)
13.3.2 Assembler-Programmierung - x86 Assembler - Operationen 64-040 Rechnerstrukturen und Betriebssysteme

I unäre Operatoren
Format Berechnung
incq hdsti hdsti = hdsti+1
decq hdsti hdsti = hdsti-1
negq hdsti hdsti = -hdsti
notq hdsti hdsti = ~hdsti

I leaq-Befehl: load effective address


leaq hsrci , hdsti
I Adressberechnung für (späteren) Ladebefehl
I Speichert die Adressausdruck hsrci in Register hdsti

Imm(Rb,Ri,S) → Reg[Rb]+S*Reg[Ri]+Imm
I wird oft von Compilern für arithmetische Berechnung genutzt

s. Beispiele

A. Mäder 936
Beispiel: arithmetische Operationen
13.3.2 Assembler-Programmierung - x86 Assembler - Operationen 64-040 Rechnerstrukturen und Betriebssysteme

arith:
leaq (%rdi,%rsi), %rax # t1
long
long arith
arith addq %rdx, %rax # t2
(long
(long x,
x, long
long y,y, long
long z)z) leaq (%rsi,%rsi,2), %rdx
{
{ salq $4, %rdx # t4
long
long t1
t1 == x+y;
x+y; leaq 4(%rdi,%rdx), %rcx # t5
long
long t2
t2 == z+t1;
z+t1; imulq %rcx, %rax # rval
long
long t3
t3 == x+4;
x+4; ret
long
long t4
t4 == y
y ** 48;
48;
long
long t5
t5 == t3
t3 ++ t4;
t4;
long
long rval
rval == t2
t2 *
* t5;
t5; Register Funktion
return
return rval;
}
rval; %rdi Argument x
}
%rsi Argument y
%rdx Argument z, t4
%rax t1, t2, rval
%rcx t5

A. Mäder 937
Kontrollfluss / Programmstrukturen
13.3.3 Assembler-Programmierung - x86 Assembler - Kontrollfluss 64-040 Rechnerstrukturen und Betriebssysteme

I Zustandscodes
I Setzen
I Testen

I Ablaufsteuerung
I Verzweigungen: „If-then-else“
I Schleifen: „Loop“-Varianten
I Mehrfachverzweigungen: „Switch“

A. Mäder 938
x86: EFLAGS Register
13.3.3 Assembler-Programmierung - x86 Assembler - Kontrollfluss 64-040 Rechnerstrukturen und Betriebssysteme

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
I
V V
I I I A V R 0 N O O D I T S Z A P C
0 0 0 0 0 0 0 0 0 0 T F F F F F F 0 F 0 F 1 F
D C M F P
P F
L

X ID Flag (ID)
X Virtual Interrupt Pending (VIP)
X Virtual Interrupt Flag (VIF)
X Alignment Check / Access Control (AC)
X Virtual-8086 Mode (VM)
X Resume Flag (RF)
X Nested Task (NT)
X I/O Privilege Level (IOPL)
S Overflow Flag (OF)
C Direction Flag (DF)
X Interrupt Enable Flag (IF)
X Trap Flag (TF)
S Sign Flag (SF)
S Zero Flag (ZF)
S Auxiliary Carry Flag (AF)
S Parity Flag (PF)
S Carry Flag (CF)

S Indicates a Status Flag


C Indicates a Control Flag Reserved bit positions. DO NOT USE.
X Indicates a System Flag Always set to values previously read. [IA64]

I x86-64: RFLAGS =
b EFLAGS, mit „0“ erweitert
A. Mäder 939
Prozessor aus Sicht des Programmierers
13.3.3 Assembler-Programmierung - x86 Assembler - Kontrollfluss 64-040 Rechnerstrukturen und Betriebssysteme

I temporäre Daten
%rax, . . .
I Top of Stack
%rsp
I Programmzähler
%rip
I Flag-Bits
CF, ZF, SF, OF

A. Mäder 940
Zustandscodes
13.3.3 Assembler-Programmierung - x86 Assembler - Kontrollfluss 64-040 Rechnerstrukturen und Betriebssysteme

I vier relevante „Flags“ im Statusregister EFLAGS/RFLAGS


I CF Carry Flag
I ZF Zero Flag
I SF Sign Flag
I OF Overflow Flag

1. implizite Aktualisierung durch arithmetische Operationen


I Beispiel: addq hsrci , hdsti in C: t=a+b

I CF höchstwertiges Bit generiert Übertrag: Unsigned-Überlauf


I ZF wenn t = 0
I SF wenn t < 0
I OF wenn das Zweierkomplement überläuft
(a > 0 && b > 0 && t < 0) || (a < 0 && b < 0 && t ≥ 0)

A. Mäder 941
Zustandscodes (cont.)
13.3.3 Assembler-Programmierung - x86 Assembler - Kontrollfluss 64-040 Rechnerstrukturen und Betriebssysteme

2. explizites Setzen durch Vergleichsoperation


I Beispiel: cmpq hsrc2i , hsrc1i
wie Berechnung von hsrc1i - hsrc2i (subq hsrc2i , hsrc1i )
jedoch ohne Abspeichern des Resultats

I CF höchstwertiges Bit generiert Übertrag


I ZF setzen wenn sr c1 = sr c2
I SF setzen wenn (sr c1 − sr c2) < 0
I OF setzen wenn das Zweierkomplement überläuft
(a > 0 && b < 0 && (a − b) < 0) ||
(a < 0 && b > 0 && (a − b) ≥ 0)

A. Mäder 942
Zustandscodes (cont.)
13.3.3 Assembler-Programmierung - x86 Assembler - Kontrollfluss 64-040 Rechnerstrukturen und Betriebssysteme

3. explizites Setzen durch Testanweisung


Beispiel: testq hsrc2i , hsrc1i
I

wie Berechnung von hsrc1i & hsrc2i (andq hsrc2i , hsrc1i )


jedoch ohne Abspeichern des Resultats
⇒ hilfreich, wenn einer der Operanden eine Bitmaske ist

I ZF setzen wenn sr c1&sr c2 = 0


I SF setzen wenn sr c1&sr c2 < 0

A. Mäder 943
Zustandscodes lesen: set. . . -Befehle
13.3.3 Assembler-Programmierung - x86 Assembler - Kontrollfluss 64-040 Rechnerstrukturen und Betriebssysteme

I Befehle setzen ein einzelnes Byte (LSB) in Universalregister


I die anderen 7-Bytes werden nicht verändert

! "

A. Mäder 944
Beispiel: Zustandscodes lesen
13.3.3 Assembler-Programmierung - x86 Assembler - Kontrollfluss 64-040 Rechnerstrukturen und Betriebssysteme

I ein-Byte Zieloperand (Register, Speicher)


I meist kombiniert mit movzbl
move with zero-extend byte to long
also Löschen der Bits 31 . . . 8

int
int gt
gt (long
(long x,
x, long
long y)
y)
{
{
return
return x
x >
> y;
y;
}
}

cmpq %rsi, %rdi # Compare x:y


setg %al # Set when >
movzbl %al, %eax # Zero rest of %rax
ret

A. Mäder 945
Sprünge („Jump“): j. . . -Befehle
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I unbedingter- / bedingter Sprung (abhängig von Zustandscode)

!"
# $

A. Mäder 946
Assembler: Label
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I Assemblercode enthält je einen Maschinenbefehl pro Zeile


I normale Programmausführung ist sequenziell
I Befehle beginnen an eindeutig bestimmten Speicheradressen

I Label: symbolische Namen für bestimmte Adressen


I am Beginn einer Zeile oder vor einem Befehl
I vom Programmierer / Compiler vergeben
I als symbolische Adressen für Sprünge verwendet

I _max: global, Beginn der Funktion max()


I L9: lokal, nur vom Assembler verwendete interne Adresse

I Label müssen in einem Programm eindeutig sein

A. Mäder 947
if-Verzweigung / bedingter Sprung
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

absdiff:
long
long absdiff
absdiff cmpq %rsi, %rdi # x:y
(long
(long x,
x, long
long y)
y) jle .L4
{
{ movq %rdi, %rax
long
long result;
result; subq %rsi, %rax
if
if (x
(x >
> y)
y) ret
result
result == x-y;
x-y; .L4: # x <= y
else
else movq %rsi, %rax
result
result == y-x;
y-x; subq %rdi, %rax
return
return result;
result; ret
}
}

Register Funktion
%rdi Argument x
%rsi Argument y
%rax Rückgabewert

A. Mäder 948
if Übersetzung – goto
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I entspricht C Code mit goto


long
long absdiff
absdiff long
long absdiff_j
absdiff_j
(long
(long x,x, long
long y)
y) (long
(long x,
x, long
long y)
y)
{
{ {
{
long
long result;
result; long
long result;
result;
if
if (x
(x >> y)
y) int
int ntest
ntest =
= xx <=
<= y;
y;
result
result == x-y;
x-y; if
if (ntest)
(ntest) goto
goto Else;
Else;
else
else result
result == x-y;
x-y;
result
result == y-x;
y-x; goto
goto Done;
Done;
return
return result;
result; Else:
Else:
}
} result
result == y-x;
y-x;
Done:
Done:
return
return result;
result;
}
}

I Compilerabhängigkeit -fno-if-conversion

A. Mäder 949
if Übersetzung – goto (cont.)
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I getrennte Code Abschnitte: then, else


I „passenden“ ausführen
I Codeäquivalent
val = Test ? Then_Expr : Else_Expr;

val
val =
= x>y
x>y ?
? x-y
x-y :
: y-x;
y-x;

ntest
ntest == !Test;
!Test;
if
if (ntest)
(ntest) goto
goto Else;
Else;
val
val == Then_Expr;
Then_Expr;
goto
goto Done;
Done;
Else:
Else:
val
val == Else_Expr;
Else_Expr;
Done:
Done:
.
. .. .
.

A. Mäder 950
if Übersetzung – conditional move
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I cmov..-Befehl -fif-conversion
I kein Sprung
long
long absdiff
absdiff
(long
(long x,x, long
long y)
y)
{
{
long
long result;
result;
if
if (x
(x >> y)
y)
Register Funktion
result
result == x-y;
x-y; %rdi Argument x
else
else %rsi Argument y
result
result == y-x;
y-x; %rax Rückgabewert
return
return result;
result;
}
}
absdiff:
movq %rdi, %rax # x
subq %rsi, %rax # result = x-y
movq %rsi, %rdx
subq %rdi, %rdx # eval = y-x
cmpq %rsi, %rdi # x:y
cmovle %rdx, %rax # if <=, result = eval
ret
A. Mäder 951
if Übersetzung – conditional move (cont.)
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

+ keine Sprünge (gut für Pipelining)


− beide Ausdrücke werden berechnet
− Performanz, wenn komplizierte Berechnung
− Unsicher
− Seiteneffekte!
I Codeäquivalent
val = Test
?
? Then_Expr
Then_Expr
: Else_Expr;

result
result = Then_Expr;
= Then_Expr
eval =
eval = Else_Expr;
Else_Expr;
nt
nt =
= !Test;
!Test;
if
if (nt)
(nt) result
result = = eval;
eval;
return
return result;
result;

A. Mäder 952
do ... while Übersetzung
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I C Code goto-Version
do loop:
Body Body
while (Test); if (Test)
goto loop

I beliebige Folge von C Anweisungen als Schleifenkörper


I Abbruchbedingung ist zurückgelieferter Integer Wert
I = 0 entspricht Falsch: Schleife verlassen
I 6= 0 –"– Wahr: nächste Iteration
I Rückwärtssprung setzt Schleife fort

A. Mäder 953
do ... while Übersetzung (cont.)
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I C Code goto Version


long
long pcount_do
pcount_do long
long pcount_goto
pcount_goto
(unsigned
(unsigned long
long x)
x) {
{ (unsigned
(unsigned long
long x)
x) {
{
long
long result
result == 0;
0; long
long result
result =
= 0;
0;
do
do {{ loop:
loop:
result
result +=
+= xx &
& 0x1;
0x1; result
result +=
+= x
x &
& 0x1;
0x1;
x
x >>=
>>= 1;
1; x
x >>=
>>= 1;
1;
}
} while
while (x);
(x); if(x)
if(x) goto
goto loop;
loop;
return
return result;
result; return
return result;
result;
}
} }
}

A. Mäder 954
do ... while Übersetzung (cont.)
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

long
long pcount_goto
pcount_goto
(unsigned
(unsigned long
long x)
x) {{
long
long result
result =
= 0;
0;
loop:
loop: Register Funktion
result
result +=
+= x
x &
& 0x1;
0x1; %rdi Argument x
x
x >>=
>>= 1;
1;
if(x) %rax Rückgabewert
if(x) goto
goto loop;
loop;
return
return result;
result;
}
}

movl $0, %eax # result = 0


.L2: # loop:
movq %rdi, %rdx
andl $1, %edx # t = x & 0x1
addq %rdx, %rax # result += t
shrq %rdi # x >>= 1
jne .L2 # if(x) goto loop
rep; ret

A. Mäder 955
while Übersetzung – Sprung zu Test
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I C Code Sprung zu Test -Og


while (Test) goto test;
Body loop:
Body
test:
if (Test)
goto loop;
done:

A. Mäder 956
while Übersetzung – Sprung zu Test (cont.)
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I C Code Sprung zu Test


long
long pcount_while
pcount_while long
long pcount_goto_jtm
pcount_goto_jtm
(unsigned
(unsigned long
long x)
x) {
{ (unsigned
(unsigned long
long x)
x) {
{
long
long result
result == 0;
0; long
long result
result =
= 0;
0;
while
while (x)
(x) {{ goto
goto test;
test;
result
result +=
+= xx &
& 0x1;
0x1; loop:
loop:
x
x >>=
>>= 1;
1; result
result +=
+= x
x &
& 0x1;
0x1;
}
} x
x >>=
>>= 1;
1;
return
return result;
result; test:
test:
}
} if(x)
if(x) goto
goto loop;
loop;
return
return result;
result;
}
}

A. Mäder 957
while Übersetzung – do ... while
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I C Code -O1
while (Test)
Body

do ... while Äquivalent goto-Version


if (!Test) if (!Test)
goto done; goto done;
do loop:
Body Body
while(Test); if (Test)
done: goto loop;
done:
A. Mäder 958
while Übersetzung – do ... while (cont.)
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I C Code do ... while


long
long pcount_while
pcount_while long
long pcount_goto_dw
pcount_goto_dw
(unsigned
(unsigned long
long x)
x) {
{ (unsigned
(unsigned long
long x)
x) {
{
long
long result
result == 0;
0; long
long result
result == 0;
0;
while
while (x)
(x) {{ if
if (!x)
(!x) goto
goto done;
done;
result
result +=
+= xx &
& 0x1;
0x1; loop:
loop:
x
x >>=
>>= 1;
1; result
result +=
+= xx &
& 0x1;
0x1;
}
} x
x >>=
>>= 1;
1;
return
return result;
result; if(x)
if(x) goto
goto loop;
loop;
}
} done:
done:
return
return result;
result;
}
}

A. Mäder 959
for Übersetzung
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I mehrstufige Übersetzung: for ... → while → . . .

For Version While Version


for (Init; Test; Update ) Init;
while (Test ) {
Body
Body
Update ;
}
Do-While Version
Init; Goto Version
if (!Test)
goto done; Init;
do { if (!Test)
Body goto done;
Update ; loop:
} while (Test) Body
done: Update ;
if (Test)
goto loop;
done:
A. Mäder 960
for Übersetzung (cont.)
13.3.4 Assembler-Programmierung - x86 Assembler - Sprungbefehle und Schleifen 64-040 Rechnerstrukturen und Betriebssysteme

I C Code goto Version


#define
#define WSIZE
WSIZE 8*sizeof(int)
8*sizeof(int) long
long pcount_for_goto_dw
pcount_for_goto_dw
long pcount_for
long pcount_for (unsigned
(unsigned long
long x)
x) {
{
(unsigned
(unsigned long
long x)
x) size_t
size_t i;i;
{
{ long
long result
result = = 0;
0; Init
size_t
size_t i;i; i
i == 0;
0;
long
long result
result = = 0;
0; if
if (!(i
(!(i << WSIZE))
WSIZE))
for
for (i
(i == 0;
0; i
i << WSIZE;
WSIZE; i++)
i++) goto
goto done;
done;
{ loop: !Test
{ loop:
unsigned
unsigned bit
bit == {
{
(x
(x >>
>> i)
i) && 0x1;
0x1; unsigned
unsigned bit
bit ==
result
result +=+= bit;
bit; (x
(x >>
>> i)
i) & 0x1; Body
& 0x1;
}
} result
result +=+= bit;
bit;
return
return result;
result; }
}
} i++; Update
} i++;
if
if (i
(i << WSIZE)
WSIZE) Test
goto
goto loop;
loop;
done:
done:
return
return result;
result;
}
}

A. Mäder 961
switch Mehrfachverzweigungen
13.3.5 Assembler-Programmierung - x86 Assembler - Mehrfachverzweigung (Switch) 64-040 Rechnerstrukturen und Betriebssysteme

long
long my_switch
I Implementierungsoptionen my_switch
(long
(long x, x, long
long y,
y, long
long z)
z)
1. Folge von „If-then-else“ {{
+ gut bei wenigen Alternativen long
long ww == 1;1;
switch(x)
switch(x) {{
− langsam bei vielen Fällen
case
case [Link]
2. Sprungtabelle „Jump Table“ ww == y*z;
y*z;
I Vermeidet einzelne Abfragen break;
break;
I möglich falls Alternativen kleine case
case [Link]
ww == y/z;
y/z;
ganzzahlige Konstanten sind
/*
/* Fall
Fall Through
Through */
*/
I Compiler (gcc) wählt eine der case
case [Link]
beiden Varianten entsprechend ww +=
+= z;
z;
der Fallstruktur break;
break;
case
case [Link]
case
case [Link]
ww -=
-= z;
z;
break;
break;
default:
default:
ww == 2;
2;
}}
return
return w; w;
}}
A. Mäder 962
Sprungtabelle
13.3.5 Assembler-Programmierung - x86 Assembler - Mehrfachverzweigung (Switch) 64-040 Rechnerstrukturen und Betriebssysteme

switch(x) Targ0:
switch(x) {{ jtab: Targ0 Code Block
case
case val_0:
val_0: 0
Block Targ1
Block00
case
case val_1:
val_1: Targ2 Targ1:
Block Code Block
Block11 •
• • • 1
• • • •
case
case val_n-1:
val_n-1: •
Block
Blockn-1
n-1 Targ2: Code Block
}} Targn-1
2



goto
goto *JTab[x];
*JTab[x]; •

Targn-1: Code Block


n–1

I Vorteil: k-fach Verzweigung in O(1) Operationen

A. Mäder 963
Sprungtabelle (cont.)
13.3.5 Assembler-Programmierung - x86 Assembler - Mehrfachverzweigung (Switch) 64-040 Rechnerstrukturen und Betriebssysteme

C Code Sprungtabelle
long .section .rodata
long my_switch(long
my_switch(long x,
x, long
long y,
y, long
long z)
z) .section
.align
.rodata
{{ .align 88
.L4:
.L4:
long
long ww == 1; 1; .quad
.quad .L8
.L8 ## xx == 00
switch(x)
switch(x) {{ .quad
.quad .L3
.L3 ## xx == 11
.. .. .. .quad
.quad .L5
.L5 ## xx == 22
.quad
.quad .L9
.L9 ## xx == 33
}} .quad .L8 ## xx == 44
.quad .L8
return
return w; w; .quad
.quad .L7
.L7 ## xx == 55
}} .quad
.quad .L7
.L7 ## xx == 66

my_switch:
movq %rdx, %rcx Register Funktion
cmpq $6, %rdi # x:6 %rdi Arg. x
ja .L8 # use default %rsi Arg. y
jmp *.L4(,%rdi,8) # goto *Jtab[x] %rdx Arg. z

A. Mäder 964
Sprungtabelle (cont.)
13.3.5 Assembler-Programmierung - x86 Assembler - Mehrfachverzweigung (Switch) 64-040 Rechnerstrukturen und Betriebssysteme

I Compiler erzeugt Code für jeden case Zweig


I je ein Label am Start der Zweige: .L8, .L3, .L5. . .
I werden dann vom Assembler/Linker in Adressen umgesetzt

I Tabellenstruktur
I jedes Ziel benötigt 4 Bytes
I Basisadresse bei .L4

I Sprünge
I Direkt: jmp .L8
I Indirekt: jmp *.L4(,%rdi,8)
I Start der Sprungtabelle: .L4
I Register %rdi speichert x
I Skalierungsfaktor 8 für Tabellenoffset
I Sprungziel: effektive Adresse .L4 + x × 8

A. Mäder 965
Sprungtabelle (cont.)
13.3.5 Assembler-Programmierung - x86 Assembler - Mehrfachverzweigung (Switch) 64-040 Rechnerstrukturen und Betriebssysteme

switch(x)
switch(x) {{
.section
.section .rodata
.rodata
case
case 1:
1: //
// .L3
.L3
.align
.align 88 ww == y*z;
y*z;
.L4:
.L4: break;
.quad .L8
break;
.quad .L8 ## xx == 00 case
.quad
.quad .L3
.L3 ## xx == 11 case 2:
2: //
// .L5
.L5
.quad
.quad .L5
.L5 ## xx == 22 ww == y/z;
y/z;
.quad
.quad .L9
.L9 ## xx == 33 /*
/* Fall
Fall Through
Through */
*/
.quad
.quad .L8
.L8 ## xx == 44
.quad .L7
case
case 3:
3: //
// .L9
.L9
.quad .L7 ## xx == 55
.quad
.quad .L7
.L7 ## xx == 66
ww +=
+= z;
z;
break;
break;
case
case 5:
5:
case
case 6:
6: //
// .L7
.L7
ww -=
-= z;
z;
break;
break;
default:
default: //
// .L8
.L8
ww == 2;
2;
}}

A. Mäder 966
Mechanismen für Prozeduraufrufe
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Kontrollübergabe P(…)
P(…) {{
••
I zu Unterprogrammcode ••
I zurück zu Aufruf yy == Q(x);
Q(x);
I Datenübergabe print(y)
print(y)
••
I Argumente }}
I Rückgabewert
I Speicherverwaltung
I Allokation während der Ausführung int
int Q(int
Q(int i)i)
I Freigabe nach return {{
int
int tt == 3*i;
3*i;
int
int v[10];
v[10];
••
••
return
return v[t];
v[t];
}}

A. Mäder 967
Mechanismen für Prozeduraufrufe
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Kontrollübergabe P(…)
P(…) {{
••
I zu Unterprogrammcode ••
I zurück zu Aufruf yy == Q(x);
Q(x);
I Datenübergabe print(y)
print(y)
••
I Argumente }}
I Rückgabewert
I Speicherverwaltung
I Allokation während der Ausführung int
int Q(int
Q(int i)i)
I Freigabe nach return {{
int
int tt == 3*i;
3*i;
int
int v[10];
v[10];
••
••
return
return v[t];
v[t];
}}

A. Mäder 967
Mechanismen für Prozeduraufrufe
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Kontrollübergabe P(…)
P(…) {{
••
I zu Unterprogrammcode ••
I zurück zu Aufruf yy == Q(x);
Q(x);
I Datenübergabe print(y)
print(y)
••
I Argumente }}
I Rückgabewert
I Speicherverwaltung
I Allokation während der Ausführung int
int Q(int
Q(int i)i)
I Freigabe nach return {{
int
int tt == 3*i;
3*i;
int
int v[10];
v[10];
••
••
return
return v[t];
v[t];
}}

A. Mäder 967
Mechanismen für Prozeduraufrufe
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Kontrollübergabe P(…)
P(…) {{
••
I zu Unterprogrammcode ••
I zurück zu Aufruf yy == Q(x);
Q(x);
I Datenübergabe print(y)
print(y)
••
I Argumente }}
I Rückgabewert
I Speicherverwaltung
I Allokation während der Ausführung int
int Q(int
Q(int i)i)
I Freigabe nach return {{
int
int tt == 3*i;
3*i;
int
int v[10];
v[10];
••
••
return
return v[t];
v[t];
}}

A. Mäder 967
Mechanismen für Prozeduraufrufe
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Kontrollübergabe P(…)
P(…) {{
••
I zu Unterprogrammcode ••
I zurück zu Aufruf yy == Q(x);
Q(x);
I Datenübergabe print(y)
print(y)
••
I Argumente }}
I Rückgabewert
I Speicherverwaltung
I Allokation während der Ausführung int
int Q(int
Q(int i)i)
I Freigabe nach return {{
int
int tt == 3*i;
3*i;
int
int v[10];
v[10];
••
••
return
return v[t];
v[t];
}}

A. Mäder 967
Stack (Kellerspeicher)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Speicherregion
I Startadresse vom OS vorgegeben
I Zugriff mit Stackoperationen
Stack “Bottom”
I wächst in Richtung niedrigerer
Adressen stack

I Register %rsp („Stack-Pointer“)


I aktuelle Stack-Adresse
I oberstes Element

Stack Pointer: %rsp


code
Stack “Top”

A. Mäder 968
Stack (Kellerspeicher) (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Implementierung von Funktionen/Prozeduren


I Speicherplatz für Aufruf-Parameter
I Speicherplatz für lokale Variablen
I Rückgabe der Funktionswerte
I auch für rekursive Funktionen (!)
I mehrere Varianten/Konventionen
I Parameterübergabe in Registern
I „Caller -Save“
I „Callee-Save“
I Kombinationen davon
I Aufruf einer Funktion muss deren Konvention berücksichtigen

A. Mäder 969
Stack: Push
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

pushq hsrci
Stack “Bottom”
I holt Operanden aus hsrci
dekrementiert %rsp um 8
Increasing
I
Addresses
I speichert den Operanden unter der
von %rsp vorgegebenen Adresse

Stack
Grows
Down
Stack Pointer: %rsp
Stack “Top”

A. Mäder 970
Stack: Push
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

pushq hsrci
Stack “Bottom”
I holt Operanden aus hsrci
dekrementiert %rsp um 8
Increasing
I
Addresses
I speichert den Operanden unter der
von %rsp vorgegebenen Adresse

Stack
Grows
Down
-8
Stack Pointer: %rsp
Stack “Top”

A. Mäder 970
Stack: Pop
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

popq hdsti
Stack “Bottom”
I liest den Operanden unter der
von %rsp vorgegebenen Adresse Increasing
Addresses
I inkrementiert %rsp um 8
I schreibt gelesenen Wert in hdsti

Stack
Grows
Down
Stack Pointer: %rsp
Stack “Top”

A. Mäder 971
Stack: Pop
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

popq hdsti
Stack “Bottom”
I liest den Operanden unter der
von %rsp vorgegebenen Adresse Increasing
Addresses
I inkrementiert %rsp um 8
I schreibt gelesenen Wert in hdsti

Stack
Grows
Stack Pointer: %rsp +8 Down

Stack “Top”

A. Mäder 971
Funktions-/Prozeduraufruf
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I x86 ist CISC: spezielle Maschinenbefehle für Funktionsaufruf


I call zum Aufruf einer Funktion
I ret zum Rücksprung aus der Funktion
I beide Funktionen ähnlich jmp: rip wird modifiziert
I Parameterübergabe über Register und/oder Stack
I Stack zur Unterstützung von call und ret
I Register mit Spezialaufgaben
I %rsp „stack-pointer“: Speicheradresse des top-of-stack
B %rbp „base-pointer“: Speicheradresse des aktuellen Frame (s.u.)
I Prozeduraufruf: call hlabeli
I Rücksprungadresse auf Stack („Push“)
I Sprung zu hlabeli
I Wert der Rücksprungadresse
I Adresse der auf den call folgenden Anweisung
I Rücksprung ret
I Rücksprungadresse vom Stack („Pop“)
I Sprung zu dieser Adresse
A. Mäder 972
Codebeispiel Unterprogrammaufruf
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

void
void multstore(long
multstore(long x, x, long
long y,
y, long
long
*dest)
*dest)
{{
long
long tt == mult2(x,
mult2(x, y);
y);
*dest
*dest == t;
t; 0000000000400540
0000000000400540 <multstore>:
<multstore>:
}} 400540:
400540: push
push %rbx
%rbx ## Save
Save %rbx
%rbx
400541:
400541: mov
mov %rdx,%rbx
%rdx,%rbx ## Save
Save dest
dest
400544:
400544: callq
callq 400550
400550 <mult2>
<mult2> ## mult2(x,y)
mult2(x,y)
400549:
400549: mov
mov %rax,(%rbx)
%rax,(%rbx) ## Save
Save at
at dest
dest
40054c:
40054c: pop
pop %rbx
%rbx ## Restore
Restore %rbx
%rbx
40054d: retq
40054d: retq ## Return
Return

long
long mult2(long
mult2(long a, a, long
long b)
b)
{{
0000000000400550
0000000000400550 <mult2>:
<mult2>:
long
long ss == aa ** b;
b; 400550:
400550: mov
mov %rdi,%rax
%rdi,%rax ## aa
return s;
return s; 400553:
400553: imul
imul %rsi,%rax
%rsi,%rax ## aa ** bb
}}
400557:
400557: retq
retq ## Return
Return

A. Mäder 973
Kontrollübergabe
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Prozeduraufruf callq


0000000000400540 <multstore>:
0x130 •
0000000000400540 <multstore>:
•• 0x128 •
•• 0x120
400544:
400544: callq
callq 400550
400550 <mult2>
<mult2>
400549:
400549: mov
mov %rax,(%rbx)
%rax,(%rbx)
••
•• %rsp 0x120

%rip 0x400544
0000000000400550
0000000000400550 <mult2>:
<mult2>:
400550:
400550: mov
mov %rdi,%rax
%rdi,%rax
••
••
400557:
400557: retq
retq

A. Mäder 974
Kontrollübergabe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Rücksprungadresse auf Stack


I Programmzähler setzen %rip

0000000000400540 <multstore>:
0x130 •
0000000000400540 <multstore>:
•• 0x128 •
•• 0x120
400544:
400544: callq
callq 400550
400550 <mult2>
<mult2>
400549: 0x118 0x400549
400549: mov
mov %rax,(%rbx)
%rax,(%rbx)
••
•• %rsp 0x118

%rip 0x400550
0000000000400550
0000000000400550 <mult2>:
<mult2>:
400550:
400550: mov
mov %rdi,%rax
%rdi,%rax
••
••
400557:
400557: retq
retq

A. Mäder 975
Kontrollübergabe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Rücksprung retq


0000000000400540 <multstore>:
0x130 •
0000000000400540 <multstore>:
•• 0x128 •
•• 0x120
400544:
400544: callq
callq 400550
400550 <mult2>
<mult2>
400549: 0x118 0x400549
400549: mov
mov %rax,(%rbx)
%rax,(%rbx)
••
•• %rsp 0x118

%rip 0x400557
0000000000400550
0000000000400550 <mult2>:
<mult2>:
400550:
400550: mov
mov %rdi,%rax
%rdi,%rax
••
••
400557:
400557: retq
retq

A. Mäder 976
Kontrollübergabe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Rücksprungadresse vom Stack


I Programmzähler setzen %rip

0000000000400540 <multstore>:
0x130 •
0000000000400540 <multstore>:
•• 0x128 •
•• 0x120
400544:
400544: callq
callq 400550
400550 <mult2>
<mult2>
400549:
400549: mov
mov %rax,(%rbx)
%rax,(%rbx)
••
•• %rsp 0x120

%rip 0x400549
0000000000400550
0000000000400550 <mult2>:
<mult2>:
400550:
400550: mov
mov %rdi,%rax
%rdi,%rax
••
••
400557:
400557: retq
retq

A. Mäder 977
Datenübergabe
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I Register Stack

I Konvention
I die ersten 6 Argumente: Register %rdi, %rsi. . .
I Stack wenn notwendig
I Rückgabewert: Register %rax

A. Mäder 978
Datenübergabe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

void
void multstore
multstore
(long
(long x,
x, long
long y,
y, long
long *dest)
*dest)
{{
long
long tt == mult2(x,
mult2(x, y);
y);
*dest
*dest == t;
t;
}}

0000000000400540
0000000000400540 <multstore>:
<multstore>:
## xx inin %rdi,
%rdi, yy in
in %rsi,
%rsi, dest
dest in
in %rdx
%rdx
•• •• ••
400541:
400541: movmov %rdx,%rbx
%rdx,%rbx ## Save
Save dest
dest
400544:
400544: callq
callq 400550
400550 <mult2>
<mult2> ## mult2(x,y)
mult2(x,y)
## tt inin %rax
%rax
400549:
400549: movmov %rax,(%rbx)
%rax,(%rbx) ## Save
Save at
at dest
dest
•• •• ••

long
long mult2
mult2 0000000000400550
0000000000400550 <mult2>:
<mult2>:
(long
(long a,
a, long
long b)
b) ## aa in
in %rdi,
%rdi, bb in
in %rsi
%rsi
{{ 400550:
400550: mov
mov %rdi,%rax
%rdi,%rax ## aa
long
long ss == aa ** b;
b; 400553:
400553: imul
imul %rsi,%rax
%rsi,%rax ## aa ** bb
return
return s;s; ## ss in
in %rax
%rax
}} 400557:
400557: retq
retq ## Return
Return
A. Mäder 979
Stack-basierende Programmierung
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I für alle Programmiersprachen, die Rekursion unterstützen


I C, Pascal, Java, Lisp usw.
I Code muss „reentrant“ sein
I erlaubt mehrfache, simultane Instanziierungen einer Prozedur
I benötigt Platz, um den Zustand jeder Instanziierung zu speichern
I ggf. Argumente
I lokale Variable(n)
I Rücksprungadresse
I Stack-„Prinzip“
I dynamischer Zustandsspeicher für Aufrufe
I zeitlich limitiert: vom Aufruf (call) bis zum Rücksprung (ret)
I aufgerufenes Unterprogramm („Callee“) wird vor dem
aufrufendem Programm („Caller“) beendet
I Stack-„Frame“
I der Bereich/Zustand einer einzelnen Prozedur-Instanziierung

A. Mäder 980
Stack-Frame
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I „Closure“: alle Daten für einen Funktionsaufruf


Previous
Frame

I Daten Frame Pointer: %rbp


I Rücksprungadresse (Optional) x
Frame for
I ggf. lokale Variablen proc
I ggf. temporäre Daten
Stack Pointer: %rsp

Stack “Top”
I Speicherverwaltung durch Funktion
I bei Aufruf wird Stack gefüllt: „Set-up“ Code
I bei Return wieder freigegeben: „Finish“ Code

A. Mäder 981
Beispiel: Prozeduraufrufe
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

yoo(…)
yoo(…)
{{
•• yoo
•• who(…)
who(…)
who();
who(); {{ who
•• •• •• ••
•• amI();
amI(); amI(…)
amI(…) amI amI
}} •• •• •• {{
amI();
amI(); ••
•• •• •• amI
••
}} amI();
amI();
•• amI
••
}}

A. Mäder 982
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
%rbp
{{
•• yoo
who %rsp
••
who();
who();
•• amI amI
••
}}
amI

amI

A. Mäder 983
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ who
•• • • •
• • • %rbp
who();
who();
amI();
amI(); amI who
•• • • • amI
• • • %rsp
•• amI();
amI();
}} •• •• •• amI
}}

amI

A. Mäder 984
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ amI(…)
amI(…) who
•• • • •
{•
{ • •
who();
who();
amI();
amI();
•• • ••• amI amI who
• •• •
• •
•• amI();
amI();
amI();
amI(); %rbp
}} •• • •
••
• • amI amI
}} •• %rsp
}}
amI

A. Mäder 985
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ amI(…)
amI(…) who
•• • •• ••
{•
{ amI(…)
who();
who(); amI(…)
amI();
amI();
•• • ••{• amI amI who
• ••{•
• •••
•• amI();
amI();
amI();
amI();
}} •• •
•• •••• amI amI
• amI();
amI();
}} •• •

}} •• %rbp
amI amI
}}
%rsp

A. Mäder 986
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ amI(…)
amI(…) who
•• • •• ••
{•
{ amI(…)
who();
who(); amI(…)
amI();
amI();
•• • ••{• amI amI who
• ••{ •amI(…)
amI(…)
• •••
•• amI();
amI(); {{
amI();
}} amI();

•• •
•• ••• •• amI amI
• amI();
amI();
}} •• • ••
• amI();
amI();
}} •• •
• amI amI
}} ••
}} %rbp
amI
%rsp

A. Mäder 987
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ amI(…)
amI(…) who
•• • •• ••
{•
{ amI(…)
who();
who(); amI(…)
amI();
amI();
•• • ••{• amI amI who
• ••{•
• •••
•• amI();
amI();
amI();
amI();
}} •• •
•• •••• amI amI
• amI();
amI();
}} •• •

}} •• %rbp
amI amI
}}
%rsp

A. Mäder 988
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ amI(…)
amI(…) who
•• • • •
{•
{ • •
who();
who();
amI();
amI();
•• • ••• amI amI who
• •• •
• •
•• amI();
amI();
amI();
amI(); %rbp
}} •• • •
••
• • amI amI
}} •• %rsp
}}
amI

A. Mäder 989
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ who
•• • • •
• • • %rbp
who();
who();
amI();
amI(); amI who
•• • • • amI
• • • %rsp
•• amI();
amI();
}} •• •• •• amI
}}

amI

A. Mäder 990
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ amI(…)
amI(…) who
•• • • •
{•
{ • •
who();
who();
amI();
amI();
•• • ••• amI amI who
• •• •
• •
•• amI();
amI();
amI();
amI(); %rbp
}} •• • •
••
• • amI amI
}} •• %rsp
}}
amI

A. Mäder 991
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
{{ who(…)
who(…) yoo

{•
{ who
•• • • •
• • • %rbp
who();
who();
amI();
amI(); amI who
•• • • • amI
• • • %rsp
•• amI();
amI();
}} •• •• •• amI
}}

amI

A. Mäder 992
Beispiel: Prozeduraufrufe (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

Stack

yoo(…)
yoo(…) yoo
%rbp
{{
•• yoo
who %rsp
••
who();
who();
•• amI amI
••
}}
amI

amI

A. Mäder 993
x86-64/Linux Stack-Frame
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

aktueller Stack-Frame / „Callee“


B Argumente: Parameter für
Funktionsaufruf
I lokale Variablen
I wenn sie nicht in Registern gehalten
werden können
I gespeicherter Registerkontext
B Zeiger auf vorherigen Frame

„Caller“ Stack-Frame
I Rücksprungadresse
I von call-Anweisung erzeugt
I Argumente für aktuellen Aufruf !

A. Mäder 994
Register Sicherungskonventionen
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I yoo („Caller“) ruft Prozedur who („Callee“) auf


⇒ Welche Register können temporär von who genutzt werden?

I zwei mögliche Konventionen


I „Caller -Saved“
yoo speichert in seinen Frame vor Prozeduraufruf
I „Callee-Saved“
who speichert in seinen Frame vor Benutzung

A. Mäder 995
Register Sicherungskonventionen (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I %rax
I Rückgabewert
Return value %rax
I Caller-Saved %rdi
I kann lokal geschrieben werden
%rsi
%rdx
I %rdi. . . %r9 Arguments
I Argumente %rcx
I Caller-Saved %r8
I können lokal geschrieben werden
%r9
%r10
I %r10, %r11 Caller-saved
I Caller-Saved temporaries %r11
I können lokal geschrieben werden

A. Mäder 996
Register Sicherungskonventionen (cont.)
13.3.6 Assembler-Programmierung - x86 Assembler - Funktionsaufrufe und Stack 64-040 Rechnerstrukturen und Betriebssysteme

I %rbx, %r12. . . %r14


I Callee-Saved
I Prozedur muss sichern (Stack-Frame) %rbx
und zurückschreiben
Callee-saved %r12
I %rbp Temporaries %r13
I Callee-Saved %r14
I Prozedur muss sichern (Stack-Frame)
und zurückschreiben %rbp
Special
B Frame-Pointer =
b Beginn des %rsp
eigenen Frames

I %rsp
I Behandlung durch call/return
I Sonderfall, quasi Callee-Save

A. Mäder 997
Elementare Datentypen
13.4.1 Assembler-Programmierung - Speicherverwaltung - Elementare Datentypen 64-040 Rechnerstrukturen und Betriebssysteme

I Ganzzahl (Integer)
I wird in allgemeinen Registern gespeichert
I abhängig von den Anweisungen: signed/unsigned
I Intel x86 as Bytes C Architektur-, Compiler-, OS-abhängig

byte b 1 [unsigned] char


word w 2 [unsigned] short
doubleword l 4 [unsigned] int / long
quadword q 8 [unsigned] long / long long

I Gleitkomma (Floating Point)


I wird in Gleitkomma-Registern gespeichert
I Intel x86 as Bytes C as: Gnu ASsembler

Single s 4 float
Double l 8 double
Extended t 10/12 long double

A. Mäder 998
Array: Allokation / Speicherung
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

I T A[N];
I Array A mit Daten von Typ T und N Elementen
I fortlaufender Speicherbereich von N × sizeof(T) Bytes

A. Mäder 999
Array: Zugriffskonvention
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

I T A[N];
I Array A mit Daten von Typ T und N Elementen
I Bezeichner A zeigt auf erstes Element des Arrays: Element 0

A. Mäder 1000
Beispiel: einfacher Arrayzugriff
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

!
" ! # $

" ! # $

A. Mäder 1001
Beispiel: einfacher Arrayzugriff (cont.)
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

I Adressieren von %rdi + 4 × %rsi


⇒ Speicheradresse (%rdi,%rsi,4)
! " # ! $

Register Funktion
%rdi Array Startadresse
%rsi Array Index

A. Mäder 1002
Beispiel: einfacher Arrayzugriff (cont.)
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

Achtung bei Arrayzugriffen:


I keine Bereichsüberprüfung („bounds checking“)
I Verhalten außerhalb des Indexbereichs ist
Implementierungsabhängig

A. Mäder 1003
Zwei- und mehrdimensionale Arrays
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

(N × M) Matrizen? drei grundsätzliche Möglichkeiten

1. Array von Pointern auf Zeilen-Arrays von Elementen Java


I sehr flexibel, auch für nicht-rechteckige Layouts
I Sharing/Aliasing von Zeilen möglich

I Array von N × M Elementen und passende Adressierung


2. row-major Anordnung C, C++
3. column-major Anordnung Matlab, FORTRAN

I bei Verwendung/Mischung von Bibliotheksfunktionen aus


anderen Sprachen unbedingt berücksichtigen

A. Mäder 1004
Java: Array von Pointern auf Arrays von Elementen
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

class MatrixDemo {
int matrix [][]; // matrix [i]->

public MatrixDemo ( int NROWS , int NCOLS ) {


matrix = new int[NROWS ][ NCOLS ];
for( int r=0; r < matrix . length ; r++ ) {
for( int c =0; c < matrix [r]. length ; c++ ) {
matrix [r][c] = 100*r + c;
} 0 1 2 3
}
// int [] row0 = matrix [0]; 100 101 102 103

// int m23 = matrix [2][3];


200 201 202 203
}
public int get( int r, int c ) {
300 301 302 303
return matrix [r][c];
} 400 401 402 403
}

A. Mäder 1005
Zweidimensionale Arrays in C
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

I Deklaration hTi hAi [hRi][ hCi ];


I Größe: hRi*hC i*sizeof(hTi) Bytes
I „row-major“ Anordnung

A. Mäder 1006
Zweidimensionale Arrays in C (cont.)
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

!
" !
# !
!!

" #

A. Mäder 1007
Mehrdimensionale Arrays: entsprechend
13.4.2 Assembler-Programmierung - Speicherverwaltung - Arrays 64-040 Rechnerstrukturen und Betriebssysteme

I d-dimensionales N1 × N2 × · · · × Nd Array
I Element adressiert mit Tupel (n1 ; n2 ; : : : ; nd ),
mit d (zero-offset) Indizes nk ∈ [0; N − K − 1]

I row-major Anordnung: letzte Dimension ist fortlaufend


d d
!
X Y
nd +Nd · (nd−1 +Nd−1 · (nd−2 +Nd−2 · (· · · )))) = N‘ nk
k=1 ‘=k+1

I column-major Anordnung: erste Dimension ist fortlaufend


d k−1
!
X Y
n1 +N1 · (n2 +N2 · (n3 +N3 · (· · ·+Nd−1 nd ) · · · ))) = N‘ nk
k=1 ‘=1

A. Mäder 1008
Strukturen (Records)
13.4.3 Assembler-Programmierung - Speicherverwaltung - Strukturen 64-040 Rechnerstrukturen und Betriebssysteme

I Allokation eines zusammenhängenden Speicherbereichs


I Elemente der Struktur über Bezeichner referenziert
I verschiedene Typen der Elemente sind möglich
I Zeiger r auf Byte-Array
I für Zugriff auf Struktur(element)
I Compiler bestimmt Offset für jedes Element

A. Mäder 1009
Beispiel: Strukturzugriffe
13.4.3 Assembler-Programmierung - Speicherverwaltung - Strukturen 64-040 Rechnerstrukturen und Betriebssysteme

I Arrayzugriff in Struktur

"

A. Mäder 1010
Beispiel: Strukturzugriffe (cont.)
13.4.3 Assembler-Programmierung - Speicherverwaltung - Strukturen 64-040 Rechnerstrukturen und Betriebssysteme

I Verlinkte Liste durchlaufen ! *+! + ,


$! 1
3 )! 1
!) ! *+! + $ !1
! *+! + $! 21
,
-. ,
$! /0 1
/0 1
/0$ !1
$ !
2
2

! ! " !
#$ % & ' ( !

A. Mäder 1011
Ausrichtung der Datenstrukturen (Alignment)
13.4.3 Assembler-Programmierung - Speicherverwaltung - Strukturen 64-040 Rechnerstrukturen und Betriebssysteme

I Datenstrukturen an Wortgrenzen ausrichten


double- / quad-word
I sonst Problem
− ineffizienter Zugriff über Wortgrenzen hinweg
− virtueller Speicher und Caching
⇒ Compiler erzeugt „Lücken“ zur richtigen Ausrichtung

I typisches Alignment (x86-64)


Länge Typ Alignment
1 Byte char keine speziellen Verfahren
2 Byte short Adressbits: ...0
4 Byte int, float –"– . . . 00
8 Byte double, long, char * –"– . . . 000

A. Mäder 1012
Beispiel: Structure Alignment
13.4.3 Assembler-Programmierung - Speicherverwaltung - Strukturen 64-040 Rechnerstrukturen und Betriebssysteme

struct
struct S1
S1 {{
char
char c;
c;
int
int i[2];
i[2];
double
double v;v;
}} *p;
*p;

c i[0] i[1] v
p p+1 p+5 p+9 p+17

c 3 bytes i[0] i[1] 4 bytes v


p+0 p+4 p+8 p+16 p+24

Multiple of 4 Multiple of 8

Multiple of 8 Multiple of 8

A. Mäder 1013
Linker und Loader
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

I Programm in mehrere Quelldateien aufgeteilt

!!
!

A. Mäder 1014
Linker und Loader (cont.)
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

I Compiler(-driver) startet einzelne Programme Linux gcc


I Präprozessor (cpp), Compiler (cc),
Assembler (as) und Linker (ld)
I „Feintuning“ und Steuerung über Kommandozeilen-Parameter
’zig Parameter für jedes Teilprogramm man gcc

A. Mäder 1015
Linker und Loader (cont.)
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

+ Modularität
Programm in übersichtlichen kleinen Dateien
I

Funktionen können wiederverwendet werden


I

⇒ vorgefertigte Programmbibliotheken

+ Effizienz
⇒ Zeitvorteil
I nach Änderung müssen nur kleine Teile neu übersetzt werden
I ermöglicht paralleles Compilieren

⇒ (Speicher-) Platzvorteil
I wichtige Funktionen in Datei aggregiert (z.B. malloc, printf)

I ermöglicht gemeinsame Nutzung

A. Mäder 1016
Aufgaben des Linkers
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

1. Symbole identifizieren (globale Variablen, Funktionen)


Symbole auflösen (= eindeutig machen) ⇒ Symboltabelle

!!
!

A. Mäder 1017
Aufgaben des Linkers (cont.)
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

2. „Relocation“
Programmcode und -daten der Quelldateien zusammenfassen
I

Symboltabellen zusammenfassen
I

⇒ Speicheradressen eindeutig machen: Sprünge+Symbole

⇒ erzeugt ein ausführbares Programm für Loader

A. Mäder 1018
Statisches / dynamisches Linken
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

I Statisches Binden („static linking“)


I Funktionen aus Bibliotheksarchiven (.a-Dateien) werden in
ausführbares Programm eingebaut
I nicht genutzte Funktionen werden entfernt
I Linken während Compilierung

I Dynamisches Binden („dynamic linking“)


I Bibliotheken werden erst beim Laden in Speicher
oder sogar erst zur Laufzeit dazugelinkt
I gemeinsame Nutzung von Funktionen durch mehrere Prozesse
(incl. Betriebssystem); die zugehörigen Bibliotheken liegen aber
(maximal) einmal im Speicher

I signifikant effizienter als separat statische gelinkte Programme


I Linux: .so-Dateien – „Shared Object“
Windows: .dll-Dateien – „Dynamic Link Libraries“

A. Mäder 1019
Statisches / dynamisches Linken (cont.)
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

dynamisches Linken beim Laden

A. Mäder 1020
Assembler-Programmierung
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

viele Themen aus Zeitgründen nicht behandelt

I Linker und Loader


I genauere Funktionsweise von Linker und Loader
I programmiertechnische Realisierung
I Probleme bei der Symbolauflösung

I Speicherverwaltung
I dynamische Speicherverwaltung / der „Heap“

I Objektorientierte Konzepte
I Daten mit zugehörigen Methoden kombinieren

A. Mäder 1021
Assembler-Programmierung (cont.)
13.5 Assembler-Programmierung - Linker und Loader 64-040 Rechnerstrukturen und Betriebssysteme

I Was kann zur Laufzeit alles schief gehen?


I Pufferüberläufe
I Sicherheitsaspekte

I Wie ist die Verbindung zum Betriebssystem?


I ...

weitere Informationen unter:


→ R.E. Bryant, D.R. O’Hallaron:
Computer systems – A programmers perspective [BO15]
→ die „passende“ Vorlesung der Carnegie Mellon Uni.
[Link]/~213 – Foliensätze unter „Schedule“

A. Mäder 1022
Literatur
13.6 Assembler-Programmierung - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BO15] R.E. Bryant, D.R. O’Hallaron:


Computer systems – A programmers perspective.
3rd global ed., Pearson Education Ltd., 2015.
ISBN 978–1–292–10176–7. [Link]
[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –
Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5
[IA64] Intel 64 and IA-32 Architectures Software Developer’s
Manual – Volume 1: Basic Architecture.
Intel Corp.; Santa Clara, CA.
[Link]/en-us/articles/intel-sdm

A. Mäder 1023
Literatur (cont.)
13.6 Assembler-Programmierung - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[PH17] D.A. Patterson, J.L. Hennessy: Computer Organization


and Design – The Hardware Software Interface – RISC-V
Edition.
Morgan Kaufmann Publishers Inc., 2017.
ISBN 978–0–12–812275–4
[PH16b] D.A. Patterson, J.L. Hennessy: Rechnerorganisation
und Rechnerentwurf – Die Hardware/Software-Schnittstelle.
5. Auflage, Oldenbourg, 2016. ISBN 978–3–11–044605–0
[Hyd10] R. Hyde: The Art of Assembly Language Programming.
2nd edition, No Starch Press, 2010. ISBN 978–1–59327–207–4.
[Link]/Webster/[Link]

A. Mäder 1024
Gliederung
14 Rechnerarchitektur II 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung

A. Mäder 1025
Gliederung (cont.)
14 Rechnerarchitektur II 64-040 Rechnerstrukturen und Betriebssysteme

14. Rechnerarchitektur II
Pipelining
Befehlspipeline
MIPS
Bewertung
Parallelität
Amdahl’s Gesetz
Superskalare Rechner
Parallelrechner
Symmetric Multiprocessing
Speicherhierarchie
Speichertypen
Cache Speicher
Literatur
15. Betriebssysteme

A. Mäder 1026
Pipelining / Fließbandverarbeitung
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

stage F

instr. result(s)
& operands f1 f2 f3 fk

Grundidee
I Operation F kann in Teilschritte zerlegt werden
I jeder Teilschritt fi braucht ähnlich viel Zeit
I Teilschritte f1 : : : fk können parallel zueinander ausgeführt
werden
I Trennung der Pipelinestufen („stage“) durch Register
I Zeitbedarf für Teilschritt fi  Zugriffszeit auf Register (tF F )

A. Mäder 1027
Pipelining / Fließbandverarbeitung (cont.)
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

Pipelining-Konzept
I Prozess in unabhängige Abschnitte aufteilen
I Objekt sequenziell durch diese Abschnitte laufen lassen
I zu jedem Zeitpunkt werden zahlreiche Objekte bearbeitet
I –"– sind alle Stationen ausgelastet
Konsequenz
I Pipelining lässt Vorgänge gleichzeitig ablaufen
I reale Beispiele: Autowaschanlagen, Fließbänder in Fabriken

A. Mäder 1028
Pipelining / Fließbandverarbeitung (cont.)
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

Arithmetische Pipelines
I Idee: lange Berechnung in Teilschritte zerlegen
wichtig bei komplizierteren arithmetischen Operationen
I die sonst sehr lange dauern (weil ein großes Schaltnetz)
I die als Schaltnetz extrem viel Hardwareaufwand erfordern
I Beispiele: Multiplikation, Division, Fließkommaoperationen . . .
+ Erhöhung des Durchsatzes, wenn Berechnung mehrfach
hintereinander ausgeführt wird

Befehlspipeline im Prozessor
I Idee: die Phasen der von-Neumann Befehlsabarbeitung
(Befehl holen, Befehl decodieren . . . ) als Pipeline implementieren
→ folgt in Befehlspipeline, ab Folie 1038

A. Mäder 1029
Beispiel: Schaltnetz ohne Pipeline
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

300 ps 20 ps

R
Combinational Delay = 320 ps
e
logic Throughput = 3.12 GOPS
g

Clock [BO15]

I Verarbeitung erfordert 300 ps


I weitere 20 ps um das Resultat im Register zu speichern
I Zykluszeit: mindestens 320 ps

A. Mäder 1030
Beispiel: Version mit 3-stufiger Pipeline
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

100 ps 20 ps 100 ps 20 ps 100 ps 20 ps

Comb. R Comb. R Comb. R


Delay = 360 ps
logic e logic e logic e
Throughput = 8.33 GOPS
A g B g C g

Clock [BO15]

I Kombinatorische Logik in 3 Blöcke zu je 100 ps aufgeteilt


I neue Operation, sobald vorheriger Abschnitt durchlaufen wurde
⇒ alle 120 ps neue Operation
I allgemeine Latenzzunahme
⇒ 360 ps von Start bis Ende

A. Mäder 1031
Prinzip: 3-stufige Pipeline
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

I ohne Pipeline
OP1
OP2
OP3
Time

I 3-stufige Pipeline [BO15]

OP1 A B C
OP2 A B C
OP3 A B C
Time

A. Mäder 1032
Timing: 3-stufige Pipeline
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

239
Clock
OP1 A B C
OP2 A B C
OP3 A B C

0 120 240 360 480 640


Time

100 ps 20 ps 100 ps 20 ps 100 ps 20 ps

Comb. R Comb. R Comb. R


logic e logic e logic e
A g B g C g

[BO15]
Clock

A. Mäder 1033
Timing: 3-stufige Pipeline
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

241
Clock
OP1 A B C
OP2 A B C
OP3 A B C

0 120 240 360 480 640


Time

100 ps 20 ps 100 ps 20 ps 100 ps 20 ps

Comb. R Comb. R Comb. R


logic e logic e logic e
A g B g C g

[BO15]
Clock

A. Mäder 1033
Timing: 3-stufige Pipeline
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

300
Clock
OP1 A B C
OP2 A B C
OP3 A B C

0 120 240 360 480 640


Time

100 ps 20 ps 100 ps 20 ps 100 ps 20 ps

Comb. R Comb. R Comb. R


logic e logic e logic e
A g B g C g

[BO15]
Clock

A. Mäder 1033
Timing: 3-stufige Pipeline
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

359
Clock
OP1 A B C
OP2 A B C
OP3 A B C

0 120 240 360 480 640


Time

100 ps 20 ps 100 ps 20 ps 100 ps 20 ps

Comb. R Comb. R Comb. R


logic e logic e logic e
A g B g C g

[BO15]
Clock

A. Mäder 1033
Limitierungen: nicht uniforme Verzögerungen
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

50 ps 20 ps 150 ps 20 ps 100 ps 20 ps

Comb. R Comb. R Comb. R


logic Delay = 510 ps
e logic e logic e
A Throughput = 5.88 GOPS
g B g C g

Clock
OP1 A B C
OP2 A B C
OP3 A B C
Time
[BO15]

I Taktfrequenz limitiert durch langsamste Stufe


I Schaltung in möglichst gleich schnelle Stufen aufteilen

A. Mäder 1034
Limitierungen: Register „Overhead“
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

50 ps 20 ps 50 ps 20 ps 50 ps 20 ps 50 ps 20 ps 50 ps 20 ps 50 ps 20 ps

R R R R R R
Comb. Comb. Comb. Comb. Comb. Comb.
logic e logic e logic e logic e logic e logic e
g g g g g g

Clock Delay = 420 ps, Throughput = 14.29 GOPS


[BO15]

I registerbedingter Overhead wächst mit Pipelinelänge


I (anteilige) Taktzeit für das Laden der Register
Overhead Taktperiode
1-Register: 6,25% 20 ps 320 ps
3-Register: 16,67% 20 ps 120 ps
6-Register: 28,57% 20 ps 70 ps

A. Mäder 1035
Limitierungen: Datenabhängigkeiten
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

R
Combinational
e
logic
g

Clock
OP1
OP2
OP3
Time [BO15]

I jede Operation hängt vom Ergebnis der Vorhergehenden ab

A. Mäder 1036
Limitierungen: Datenabhängigkeiten (cont.)
14.1 Rechnerarchitektur II - Pipelining 64-040 Rechnerstrukturen und Betriebssysteme

Comb. R Comb. R Comb. R


logic e logic e logic e
A g B g C g

Clock
OP1 A B C
OP2 A B C
OP3 A B C
OP4 A B C
Time
[BO15]

⇒ Resultat-Feedback kommt zu spät für die nächste Operation


⇒ Pipelining ändert Verhalten des gesamten Systems

A. Mäder 1037
von-Neumann Befehlszyklus
14.1.1 Rechnerarchitektur II - Pipelining - Befehlspipeline 64-040 Rechnerstrukturen und Betriebssysteme

typische Schritte der Befehlsabarbeitung (von ISA abhängig)


I IF Instruction Fetch
Instruktion holen, in Befehlsregister laden
ID Instruction Decode
Instruktion decodieren
OF Operand Fetch
Operanden aus Registern holen
EX Execute
ALU führt Befehl aus
MEM Memory access
Speicherzugriff: Daten laden/abspeichern
WB Write Back
Ergebnis in Register zurückschreiben

A. Mäder 1038
von-Neumann Befehlszyklus (cont.)
14.1.1 Rechnerarchitektur II - Pipelining - Befehlspipeline 64-040 Rechnerstrukturen und Betriebssysteme

I je nach Instruktion sind nicht alle Schritte notwendig


I nop: nur Instruction-Fetch
I jump: kein Speicher- und Registerzugriff
I aluOp: kein Speicherzugriff
I Pipeline kann auch feiner unterteilt werden (meist mehr Stufen)

serielle Bearbeitung ohne Pipelining


200 400 600 800 1000 1200 1400 1600 1800
Time
Program
Instruction Data
lw $1, 100($0) fetch
Reg ALU
access
Reg

Instruction Data
lw $2, 200($0) 800 ps fetch
Reg ALU
access
Reg

Instruction
lw $3, 300($0) 800 ps fetch
...
800 ps

[PH16b]

A. Mäder 1039
von-Neumann Befehlszyklus (cont.)
14.1.1 Rechnerarchitektur II - Pipelining - Befehlspipeline 64-040 Rechnerstrukturen und Betriebssysteme

Pipelining für die einzelnen Schritte der Befehlsausführung


200 400 600 800 1000 1200 1400
Time
Program
Instruction Data
lw $1, 100($0) fetch
Reg ALU
access
Reg

Instruction Data
lw $2, 200($0) 200 ps fetch
Reg ALU
access
Reg

Instruction Data
lw $3, 300($0) 200 ps fetch
Reg ALU
access
Reg

200 ps 200 ps 200 ps 200 ps 200 ps [PH16b]

I Befehle überlappend ausführen: neue Befehle holen,


dann decodieren, während vorherige noch ausgeführt werden
I Register trennen Pipelinestufen

A. Mäder 1040
Klassische 5-stufige Pipeline
14.1.1 Rechnerarchitektur II - Pipelining - Befehlspipeline 64-040 Rechnerstrukturen und Betriebssysteme

Stufe 1 2 3 4 5

IF ID EX MEM WB

I Grundidee der ursprünglichen RISC-Architekturen


+ Durchsatz ca. 3 . . . 5 × besser als serielle Ausführung
+ guter Kompromiss aus Leistung und Hardwareaufwand

I MIPS-Architektur (aus Patterson, Hennessy [PH16b])


MIPS ohne Pipeline MIPS Pipeline Pipeline Schema

A. Mäder 1041
Klassische 5-stufige Pipeline (cont.)
14.1.1 Rechnerarchitektur II - Pipelining - Befehlspipeline 64-040 Rechnerstrukturen und Betriebssysteme

I RISC ISA: Pipelining wird direkt umgesetzt


I Befehlssätze auf diese Pipeline hin optimiert
I IBM-801, MIPS R-2000/R-3000 (1985), SPARC (1987)
I CISC-Architekturen heute ebenfalls mit Pipeline
I Motorola 68020 (zweistufige Pipeline, 1984),
Intel 486 (1989), Pentium (1993) . . .
I Befehle in Folgen RISC-ähnlicher Anweisungen umsetzen

+ CISC-Software bleibt lauffähig


+ Befehlssatz wird um neue RISC Befehle erweitert

A. Mäder 1042
MIPS: serielle Realisierung ohne Pipeline
14.1.2 Rechnerarchitektur II - Pipelining - MIPS 64-040 Rechnerstrukturen und Betriebssysteme

PCsrc

M
Add
u
Add
x
4 result
Shift
left 2
Registers ALU operation MemWrite
Read 3
Read ALUSrc
PC register1 Read
address Read MemtoReg
data1 Zero
register2
Instruction ALU
Write Read result Address Read
register data2 M data M
Instruction u
memory Write u
data x Data x
Write memory
RegWrite
data
16 32
Sign
extend MemRead

längster Pfad: PC - IM - REG - MUX - ALU - DM - MUX - PC/REG [PH16b]

RISC Pipelining

A. Mäder 1043
MIPS: mit 5-stufiger Pipeline
14.1.2 Rechnerarchitektur II - Pipelining - MIPS 64-040 Rechnerstrukturen und Betriebssysteme

Instruction Decode Execute Memory Access Write Back


Instruction Fetch Register Fetch Address Calc.
IF ID EX MEM WB
Next PC
Next SEQ PC Next SEQ PC
Adder

MUX
RS1

RS2 Branch
Register taken
Zero?
File

MEM / WB
EX / MEM
ID / EX
IF / ID

MUX
IR
PC Memory

MUX
ALU
Sign Imm
Extend

MUX
Memory

WB Data
RISC Pipelining

A. Mäder 1044
MIPS: mit 5-stufiger Pipeline (cont.)
14.1.2 Rechnerarchitektur II - Pipelining - MIPS 64-040 Rechnerstrukturen und Betriebssysteme

I die Hardwareblöcke selbst sind unverändert


I PC, Addierer fürs Inkrementieren des PC
I Registerbank
I Rechenwerke: ALU, sign-extend, zero-check
I Multiplexer und Leitungen/Busse
I vier zusätzliche Pipeline-Register
I die (decodierten) Befehle
I alle Zwischenergebnisse
I alle intern benötigten Statussignale
I längster Pfad zwischen Registern jetzt eine der 5 Stufen
I aber wie wirkt sich das auf die Software aus?!

A. Mäder 1045
Prozessorpipeline – Begriffe
14.1.3 Rechnerarchitektur II - Pipelining - Bewertung 64-040 Rechnerstrukturen und Betriebssysteme

Begriffe
I Pipeline-Stage: einzelne Stufe der Pipeline
I Pipeline Machine Cycle:
Instruktion kommt einen Schritt in Pipeline weiter
I Durchsatz: Anzahl der Instruktionen, die in jedem Takt
abgeschlossen werden
I Latenz: Zeit, die eine Instruktion benötigt, um alle
Pipelinestufen zu durchlaufen

A. Mäder 1046
Prozessorpipeline – Bewertung
14.1.3 Rechnerarchitektur II - Pipelining - Bewertung 64-040 Rechnerstrukturen und Betriebssysteme

Vor- und Nachteile


+ Schaltnetze in kleinere Blöcke aufgeteilt ⇒ höherer Takt
+ im Idealfall ein neuer Befehl pro Takt gestartet ⇒ höherer
Durchsatz, bessere Performanz
+ geringer Zusatzaufwand an Hardware
+ Pipelining ist für den Programmierer nicht direkt sichtbar!
− Achtung: Daten-/Kontrollabhängigkeiten (s.u.)
− Latenz wird nicht verbessert, bleibt bestenfalls gleich
− Pipeline Takt limitiert durch langsamste Pipelinestufe
unausgewogene Pipelinestufen reduzieren den Takt und
damit die Performanz
− zusätzliche Zeiten, um Pipeline zu füllen bzw. zu leeren

A. Mäder 1047
Prozessorpipeline – Bewertung (cont.)
14.1.3 Rechnerarchitektur II - Pipelining - Bewertung 64-040 Rechnerstrukturen und Betriebssysteme

Analyse
I N Instruktionen; K Pipelinestufen
I ohne Pipeline: N · K Taktzyklen
I mit Pipeline: K + N − 1 Taktzyklen

I „Speedup“ S = K+N−1 ,
N ·K
limN→∞ S = K

⇒ ein großer Speedup wird erreicht durch


I große Pipelinetiefe: K
I lange Instruktionssequenzen: N

I wegen Daten- und Kontrollabhängigkeiten nicht erreichbar


I außerdem: Register-Overhead nicht berücksichtigt

A. Mäder 1048
Prozessorpipeline – Bewertung (cont.)
14.1.3 Rechnerarchitektur II - Pipelining - Bewertung 64-040 Rechnerstrukturen und Betriebssysteme

10
Speedup, 10 Pipelinestufen (N*10)/(10+N-1)

N Befehle
0 Speedup
0 20 40 60 80 100

A. Mäder 1049
Prozessorpipeline – Dimensionierung
14.1.3 Rechnerarchitektur II - Pipelining - Bewertung 64-040 Rechnerstrukturen und Betriebssysteme

I größeres K wirkt sich direkt auf den Durchsatz aus


I weniger Logik zwischen den Registern, höhere Taktfrequenzen
I zusätzlich: technologischer Fortschritt (1985 . . . 2017)
I Beispiele
CPU Pipelinestufen Taktfrequenz [MHz]
80 386 1 33
Pentium 5 300
Motorola G4 4 500
Motorola G4e 7 1 000
Pentium II/III 12 1 400
Athlon XP 10/15 2 500
Athlon 64, Opteron 12/17 ≤ 3 000
Pentium 4 20 ≤ 3 800
Core i-.. 14/19 ≤ 4 200
Ryzen .. 19 ≤ 4 000

A. Mäder 1050
Prozessorpipeline – Auswirkungen
14.1.3 Rechnerarchitektur II - Pipelining - Bewertung 64-040 Rechnerstrukturen und Betriebssysteme

Architekturentscheidungen, die sich auf das Pipelining auswirken


gut für Pipelining
I gleiche Instruktionslänge
I wenige Instruktionsformate
I Load/Store Architektur

BASIC INSTRUCTION FORMATS


R opcode rs rt rd shamt funct
31 26 25 21 20 16 15 11 10 6 5 0
I opcode rs rt immediate
31 26 25 21 20 16 15 0
J opcode address
31 26 25 0

FLOATING-POINT INSTRUCTION FORMATS


FR opcode fmt ft fs fd funct
31 26 25 21 20 16 15 11 10 6 5 0

FI opcode fmt ft immediate


31 26 25 21 20 16 15 0

MIPS-Befehlsformate [PH16b]

A. Mäder 1051
Prozessorpipeline – Auswirkungen (cont.)
14.1.3 Rechnerarchitektur II - Pipelining - Bewertung 64-040 Rechnerstrukturen und Betriebssysteme

schlecht für Pipelining: Pipelinekonflikte / -Hazards


I Strukturkonflikt: gleichzeitiger Zugriff auf eine Ressource
durch mehrere Pipelinestufen
I Datenkonflikt: Ergebnisse von Instruktionen werden
innerhalb der Pipeline benötigt
I Steuerkonflikt: Sprungbefehle in der Pipelinesequenz

sehr schlecht für Pipelining


I Unterbrechung des Programmkontexts („Context Switch“):
Interrupt, System-Call, Exception, Prozesswechsel . . .

A. Mäder 1052
Pipeline Schema
14.1.3 Rechnerarchitektur II - Pipelining - Bewertung 64-040 Rechnerstrukturen und Betriebssysteme

Taktzyklen
1 2 3 4 5 6 7 8
Instruktionen

lw $10, 20($1) IM Reg ALU DM Reg

sub $11, $2, $3 IM Reg ALU DM Reg

add $12, $3, $4 IM Reg ALU DM Reg

lw $13, 24($1) IM Reg ALU DM Reg

add $14, $5, $6 IM Reg ALU DM Reg

RISC Pipelining

A. Mäder 1053
Motivation: ständig steigende Anforderungen
14.2 Rechnerarchitektur II - Parallelität 64-040 Rechnerstrukturen und Betriebssysteme

I Simulationen, Wettervorhersage, Gentechnologie . . .


I Datenbanken, Transaktionssysteme, Suchmaschinen . . .
I Softwareentwicklung, Schaltungsentwurf . . .

I Performanz eines einzelnen Prozessors ist begrenzt


⇒ Hardware: Verteilen eines Programms auf mehrere Prozessoren
⇒ Software: kommunizierende Prozesse und Multithreading

Vielfältige Möglichkeiten
I wie viele und welche Prozessoren?
I Kommunikation zwischen den Prozessoren?
I Programmierung und Software/Tools?

A. Mäder 1054
Begriffe
14.2.1 Rechnerarchitektur II - Parallelität - Amdahl’s Gesetz 64-040 Rechnerstrukturen und Betriebssysteme

I Antwortzeit: die Gesamtzeit zwischen Programmstart und


-ende, inklusive I/O-Operationen, Unterbrechungen etc.
(„wall clock time“, „response time“, „execution time“)
1
performance = execution time

I Ausführungszeit: reine CPU-Zeit


Unix time-Befehl: 597.07u 0.15s 9:57.61 99.9%
597.07 user CPU time [sec.]
0.15 system CPU time
9:57.61 elapsed time
99.9 CPU/elapsed [%]

I Durchsatz: Anzahl der bearbeiteten Programme / Zeit


I Speedup: s= performance x
performance y = execution time y
execution time x

A. Mäder 1055
Wie kann man Performanz verbessern?
14.2.1 Rechnerarchitektur II - Parallelität - Amdahl’s Gesetz 64-040 Rechnerstrukturen und Betriebssysteme

I Ausführungszeit = hAnzahl der Befehlei · hZeit pro Befehli

I weniger Befehle
I gute Algorithmen
I bessere Compiler
I mächtigere Befehle (CISC)
I weniger Zeit pro Befehl
I bessere Technologie
I Architektur: Pipelining, Caches . . .
I einfachere Befehle (RISC)
I parallele Ausführung
I superskalare Architekturen, SIMD, MIMD

A. Mäder 1056
Amdahl’s Gesetz
14.2.1 Rechnerarchitektur II - Parallelität - Amdahl’s Gesetz 64-040 Rechnerstrukturen und Betriebssysteme

Möglicher Speedup durch Beschleunigung einer Teilfunktion?


1. System berechnet Programm P ,
darin Funktion X mit Anteil 0 < f < 1 der Gesamtzeit
2. System berechnet Programm P ,
Funktion X 0 ist schneller als X mit Speedup SX

Amdahl’s Gesetz Gene Amdahl, Architekt der IBM S/360, 1967

1
I Speedup Sg esamt =
(1 − f ) + f =SX

A. Mäder 1057
Amdahl’s Gesetz (cont.)
14.2.1 Rechnerarchitektur II - Parallelität - Amdahl’s Gesetz 64-040 Rechnerstrukturen und Betriebssysteme

1
Speedup Sg esamt =
(1 − f ) + f =SX
I nur ein Teil f des Gesamtproblems wird beschleunigt
potentiell 1 CPU n CPUs
serieller parallelisierbarer aktiv aktiv
Anteil Anteil

...

(1-f) f f

T (1-f)×T (f/n)×T

⇒ möglichst großer Anteil f


⇒ Optimierung lohnt nur für relevante Operationen
allgemeingültig: entsprechend auch für Projektplanung, Verkehr . . .

A. Mäder 1058
Amdahl’s Gesetz (cont.)
14.2.1 Rechnerarchitektur II - Parallelität - Amdahl’s Gesetz 64-040 Rechnerstrukturen und Betriebssysteme

I ursprüngliche Idee: Parallelrechner mit n-Prozessoren


1
Speedup Sg esamt =
(1 − f ) + k(n) + f =n
n # Prozessoren als Verbesserungsfaktor
f Anteil parallelisierbarer Berechnung
1−f Anteil nicht parallelisierbarer Berechnung
k() Kommunikationsoverhead zwischen den Prozessoren
I Aufgaben verteilen

I Arbeit koordinieren

I Ergebnisse zusammensammeln

A. Mäder 1059
Amdahl’s Gesetz: Beispiele
14.2.1 Rechnerarchitektur II - Parallelität - Amdahl’s Gesetz 64-040 Rechnerstrukturen und Betriebssysteme

SX f Sg esamt
10 0; 1 1=(0; 9 +0; 01) = 1; 1
2 0; 5 1=(0; 5 +0; 25) = 1; 33
2 0; 9 1=(0; 1 +0; 45) = 1; 82
1; 1 0; 98 1=(0; 02+0; 89) = 1; 1
4 0; 5 1=(0; 5 +0; 125) = 1; 6
4 536 0; 8 1=(0; 2 +0; 0 : : :) = 5; 0
9 072 0; 99 1=(0; 01+0; 0 : : :) = 98; 92

I Optimierung bringt nichts, wenn der nicht beschleunigte


„serielle“ Anteil (1 − f ) eines Programms überwiegt
− n-Prozessoren (große SX ) wirken nicht linear
− die erreichbare Parallelität in Hochsprachen-Programmen
ist gering, typisch Sg esamt ≤ 4
+ viele Prozesse/Tasks, unabhängig voneinander:
Serveranwendungen, virtuelle Maschinen, Container . . .
A. Mäder 1060
Amdahl’s Gesetz: Beispiele (cont.)
14.2.1 Rechnerarchitektur II - Parallelität - Amdahl’s Gesetz 64-040 Rechnerstrukturen und Betriebssysteme

10
Speedup 1/((1-f)+f/10)

f
0
0 0.2 0.4 0.6 0.8 1
SX = 10

A. Mäder 1061
Amdahl’s Gesetz: Beispiele (cont.)
14.2.1 Rechnerarchitektur II - Parallelität - Amdahl’s Gesetz 64-040 Rechnerstrukturen und Betriebssysteme

10
Speedup n
1/((1-0.9)+0.9/n)
1/((1-0.8)+0.8/n)
1/((1-0.5)+0.5/n)

n
0
1 2 3 4 5 6 7 8 9 10

A. Mäder 1062
Befehlspipeline
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I Befehl in kleinere, schnellere Schritte aufteilen ⇒ höherer Takt


I mehrere Instruktionen überlappt ausführen ⇒ höherer Durchsatz

A. Mäder 1063
Parallele Pipelines
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

[TA14]

I im Bild jeweils zwei Operationen pro Pipelinestufe


I parallele („superskalare“) Ausführung

I komplexe Hardware (Daten- und Kontrollabhängigkeiten)


I Beispiel: Pentium

A. Mäder 1064
Superskalarer Prozessor
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I mehrere Rechenwerke (ALUs)


I Verwaltung über „Scoreboard“
Erkennung von Datenabhängigkeiten

I sehr komplexe Hardware


I aber gute Performanz
I Beispiel: fast alle x86-Prozessoren
seit Pentium II [TA14]

A. Mäder 1065
Superskalar
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I Superskalare CPUs besitzen mehrere Recheneinheiten: 4 . . . 12


I in jedem Takt werden (dynamisch) mehrere Instruktionen eines
konventionell linearen Instruktionsstroms abgearbeitet
⇒ ILP (Instruction Level Parallelism)

I Hardware verteilt initiierte Instruktionen auf Recheneinheiten


I pro Takt kann mehr als eine Instruktion initiiert werden
Die Anzahl wird dynamisch von der Hardware bestimmt:
0 . . . „Instruction Issue Bandwidth“
+ sehr effizient, alle modernen CPUs sind superskalar
− Abhängigkeiten zwischen Instruktionen sind der Engpass,
das Problem der Hazards wird verschärft

A. Mäder 1066
Superskalar – Datenabhängigkeiten
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

Datenabhängigkeiten
I RAW – Read After Write
Instruktion Ix darf Datum erst lesen, wenn Ix−n geschrieben hat
I WAR – Write After Read
Instruktion Ix darf Datum erst schreiben, wenn Ix−n gelesen hat
I WAW – Write After Write
Instruktion Ix darf Datum erst überschreiben, wenn Ix−n
geschrieben hat

Datenabhängigkeiten superskalarer Prozessoren


I RAW: echte Abhängigkeit; Forwarding ist kaum möglich und in
superskalaren Pipelines extrem aufwändig
I WAR, WAW: „Register Renaming“ als Lösung

A. Mäder 1067
Superskalar – Datenabhängigkeiten (cont.)
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

„Register Renaming“
I Hardware löst (einige) Datenabhängigkeiten der Pipeline auf
I zwei Arten von Registersätzen
1. Architektur-Register: „logische Register“ der ISA
2. viele Hardware-Register: „Rename Register“ (180 Int, 168 FP)
I dynamische Abbildung von ISA- auf Hardware-Register

− Kontextwechsel aufwändig: „Rename Register“ speichern


I Beispiel
I Originalcode nach Renaming
tmp = a + b; tmp1 = a + b;
res1 = c + tmp; res1 = c + tmp1;
tmp = d + e; tmp2 = d + e;
res2 = tmp - f; res2 = tmp2 - f;
tmp = tmp2;
I Parallelisierung des modifizierten Codes
tmp1 = a + b; tmp2 = d + e;
res1 = c + tmp1; res2 = tmp2 - f; tmp = tmp2;
A. Mäder 1068
Superskalar – Pipeline
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

Aufbau der superskalaren Pipeline

I lange Pipelines mit vielen Phasen: Fetch (Prefetch, Predecode),


Decode / Register-Renaming, Issue, Dispatch, Execute, Retire
(Commit, Complete / Reorder), Write-Back
I je nach Implementation unterschiedlich aufgeteilt
I entscheidend für superskalare Architektur sind die Schritte
vor den ALUs: Issue, Dispatch ⇒ out-of-order Ausführung
nach -"- : Retire ⇒ in-order Ergebnisse

A. Mäder 1069
Superskalar – Pipeline (cont.)
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I Dynamisches Scheduling
⇒ out-of-order Reihenfolge
der Instruktionen

A. Mäder 1070
Superskalar – Pipeline (cont.)
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I Issue: globale Sicht


Dispatch: getrennte Ausschnitte in „Reservation Stations“

A. Mäder 1071
Superskalar – Pipeline (cont.)
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I Reservation Station für jede Funktionseinheit


I speichert: initiierte Instruktionen die auf Recheneinheit warten
I –"– zugehörige Operanden
I –"– ggf. Zusatzinformation
I Instruktion bleibt blockiert, bis alle Parameter bekannt sind und
wird dann an die zugehörige ALU weitergeleitet
I ggf. „Retire“-Stufe
I Reorder-Buffer: erzeugt wieder in-order Reihenfolge
I commit: „richtig ausgeführte“ Instruktionen gültig machen
abort: Instruktionen verwerfen, z.B. Sprungvorhersage falsch
I Dynamisches Scheduling: zuerst ’67 in IBM 360 (R. Tomasulo)
I Forwarding
I Registerumbenennung und Reservation Stations

A. Mäder 1072
Superskalar – Probleme
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

Spezielle Probleme superskalarer Pipelines


− komplexe Datenabhängigkeiten
die verschiedenen ALUs haben unterschiedliche Latenzzeiten
I

Befehle „warten“ in den Reservation Stations


I

⇒ Datenabhängigkeiten können sich mit jedem Takt ändern


− Kontrollflussabhängigkeiten:
Anzahl der Instruktionen zwischen bedingten Sprüngen
limitiert Anzahl parallelisierbarer Instruktionen

⇒ Kontextwechsel noch aufwändiger, muss ggf. warten


⇒ Optimierungstechniken wichtig
I optimiertes (dynamisches) Scheduling: Scoreboard,
Tomasulo-Algorithmus
I „Loop Unrolling“ (längere Codesequenzen ohne Sprünge)

A. Mäder 1073
Superskalar – Probleme (cont.)
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

Softwareunterstützung für Pipelining superskalarer Prozessoren


„Software Pipelining“
I Codeoptimierungen beim Compilieren als Ersatz/Ergänzung
zur Pipelineunterstützung durch Hardware
I Compiler hat „globalen“ Überblick

⇒ zusätzliche Optimierungsmöglichkeiten

A. Mäder 1074
Beispiel: Pentium 4 / NetBurst Architektur
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I superskalare Architektur (mehrere ALUs)


I CISC-Befehle werden dynamisch in „—OPs“ (1 . . . 3) umgesetzt
I Ausführung der —OPs mit „Out of Order“ Maschine, wenn
I Operanden verfügbar sind
I funktionelle Einheit (ALU) frei ist
I Ausführung wird durch „Reservation Stations“ kontrolliert
I beobachtet die Datenabhängigkeiten zwischen —OPs
I teilt Ressourcen zu
I „Trace“ Cache
I ersetzt traditionellen Anweisungscache
I speichert Anweisungen in decodierter Form: Folgen von —OPs
I reduziert benötigte Rate für den Anweisungsdecoder
I „Double pumped“ ALUs (2 Operationen pro Taktzyklus)

A. Mäder 1075
Beispiel: Pentium 4 / NetBurst Architektur (cont.)
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

I große Pipelinelänge ⇒ sehr hohe Taktfrequenzen


Basic
asic Pentium
Penti III
II Processor
Pr ce sor Misprediction
is dic ion Pipeline
Pi lin
1 2 3 4 5 6 7 8 9 10
0
Fetch
t Fetch
F c Decode Decode
D c Decode Rename
na ROB Rd Rdy//Sch
h Dispatch
pa c Exec

Basic
B s Pentium
Pe tium 4 Processor
Proc ss r Misprediction
i pr d tion Pipeline
pe e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
6 17 18 19 20
TC Nxt IP
P TC Fetch
t Drive
v Alloc
l Rename Que Sch Sch Sch Disp
D p Disp RF RF Ex Flgs Br Ckk Drive
D iv

I umfangreiches Material von Intel unter:


[Link], [Link]

A. Mäder 1076
Beispiel: Pentium 4 / NetBurst Architektur (cont.)
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

Front-End
n BTB Instruction
I stru t o
64-bits
6 - s wide
(4K
(4 Entries) TLB/Prefetch
L Prefetcher System
S se
Instruction
n i n Decoder
De d Bus
Microcode
r c d
ROM
Trace
T Cache
C he BTB
BT Trace
T ce Cache
ch Quad
op Queue
µo Q e e Q ad
(512
( 12 Entries)
n (12K
1 µops)
p Pumped
mpe
Allocator
A o o / Register
er Renamer
Ren 3.2
3 2 GB/s
/

Memory
M o uop Queue
u Integer/Floating
n g F atin PointPo t uop
p Queue Bus
u
Memory Scheduler Fast Slow/General FP Scheduler Simple FP Interface
f e
Unit
Integer
e Register
i r File / Bypass Network FP Register
Reg / Bypass
B p s

AGU AGU
A U 2x
2 ALU
A 2x
2 ALU
A Slow
S w ALU
L FP L2
2 Cache
h
MMXX FP
P (256K Byte
Load
a Store
S r Simple
i e Simple e Complex
mp x SSE Move
ve
Address Address
d Instr. Instr.
n t Instr.
nstr.
8-way)
8-way
SSE2
E2

48GB/s
L1 Data
ata Cache (8Kbyte
( byte 4-way)
4-w 256
2 6 bits
bit

Figure 4: Pentium® 4 processor microarchitecture Intel: Q1, 2001 [Intel]

A. Mäder 1077
Beispiel: Core 2 Architektur
14.2.2 Rechnerarchitektur II - Parallelität - Superskalare Rechner 64-040 Rechnerstrukturen und Betriebssysteme

128 Entry 32 KB Instruction Cache


ITLB (8 way)
Shared Bus
128 Bit Interface
Unit
32 Byte Pre-Decode,
Fetch Buffer
Instruction 6 Instructions
Fetch Unit
18 Entry
Instruction Queue

Micro- Complex Simple Simple Simple


code Decoder Decoder Decoder Decoder

4 µops 1 µop 1 µop 1 µop

7+ Entry µop Buffer Shared


4 µops L2 Cache
(16 way)
Register Alias Table
and Allocator
4 µops
4 µops
Retirement Register File 256 Entry
96 Entry Reorder Buffer (ROB)
(Program Visible State) L2 DTLB
4 µops

32 Entry Reservation Station


Port 0 Port 1 Port 5 Port 3 Port 4 Port 2

SSE SSE
ALU SSE Store Store Load
ALU Shuffle ALU Shuffle
Branch ALU Address Data Address
ALU MUL

128 Bit
FMUL
128 Bit Memory Ordering Buffer
FADD
FDIV (MOB)
Store Load
Internal Results Bus 128 Bit 256
128 Bit Bit
32 KB Dual Ported Data Cache 16 Entry
Intel Core 2 Architecture (8 way) DTLB
A. Mäder 1078
Parallelrechner mit mehreren Prozessoren
14.2.3 Rechnerarchitektur II - Parallelität - Parallelrechner 64-040 Rechnerstrukturen und Betriebssysteme

I Moore’s Law – technischer Fortschritt


I immer schnellere Schaltungen
I immer mehr Transistoren pro IC möglich
I Taktfrequenzen > 10 GHz nicht sinnvoll realisierbar
I hoher Takt nur bei einfacher Hardware möglich
I Stromverbrauch bei CMOS proportional zum Takt

⇒ höhere Rechenleistung durch Mehrprozessorsysteme


I Datenaustausch
1. gemeinsamer Speicher („Shared-memory“) oder
2. Verbindungsnetzwerk („Message-passing“)
I Probleme
I Overhead durch Kommunikation
I Parallelität in den Algorithmen
I Komplexität bei der Programmierung

A. Mäder 1079
Flynn-Klassifikation
14.2.3 Rechnerarchitektur II - Parallelität - Parallelrechner 64-040 Rechnerstrukturen und Betriebssysteme

SISD „Single Instruction, Single Data“


I jeder klassische von-Neumann Rechner (z.B. PC)

SIMD „Single Instruction, Multiple Data“


I Vektorrecher/Feldrechner
z.B. Connection-Machine 2: 65 536 Prozessoren
I Erweiterungen in Befehlssätzen: superskalare
Recheneinheiten werden direkt angesprochen
z.B. x86 MMX, SSE, VLIW-Befehle: 2 . . . 8 fach parallel
MIMD „Multiple Instruction, Multiple Data“
I Multiprozessormaschinen
z.B. Compute-Cluster, aber auch Multi-Core CPU
MISD „Multiple Instruction, Single Data“ :-)

A. Mäder 1080
Detaillierte Klassifikation
14.2.3 Rechnerarchitektur II - Parallelität - Parallelrechner 64-040 Rechnerstrukturen und Betriebssysteme

parallele Rechnerarchitektur

SISD SIMD MISD MIMD

Vektor- Array- Multi- Multi-


prozessor prozessor prozessoren Computer

UMA COMA NUMA COW MPP

Bus Switch CC-NUMA NC-NUMA Gitter Hyper-


würfel

gemeinsamer Speicher Nachrichtenaustausch

[TA14]

A. Mäder 1081
Anmerkungen
14.2.3 Rechnerarchitektur II - Parallelität - Parallelrechner 64-040 Rechnerstrukturen und Betriebssysteme

I Programmierung: ein ungelöstes Problem


I Aufteilung eines Programms auf die CPUs/Rechenknoten?
I insbesondere bei komplexen Kommunikationsnetzwerken
I Programme sind nur teilweise parallelisierbar
Parallelität einzelner Programme: kleiner 8
I

gilt für Desktop-, Server-, Datenbankanwendungen etc.


⇒ hochgradig parallele Rechner sind dann Verschwendung
I Wohin mit den Transistoren aus „Moore’s Law“?
⇒ SMP-/Mehrkern-CPUs (2 . . . 64 Proz.) sind technisch attraktiv
I Grafikprozessoren (GPUs)
I neben 3D-Grafik zunehmender Computing-Einsatz (OpenCL)
I Anwendungen: Numerik, Simulation, „Machine Learning“ . . .
I hohe Fließkomma-Rechenleistung

A. Mäder 1082
SMP: Symmetric Multiprocessing
14.2.4 Rechnerarchitektur II - Parallelität - Symmetric Multiprocessing 64-040 Rechnerstrukturen und Betriebssysteme

I mehrere (gleichartige) Prozessoren


I gemeinsamer Hauptspeicher und I/O-Einheiten
I Zugriff über Verbindungsnetzwerk oder Bus
I geringer Kommunikationsoverhead
+ Bus-basierte Systeme sind sehr kostengünstig
− aber schlecht skalierbar: Bus als Flaschenhals! 8-Kern Core-i9 9xxx [Intel]

− Konsistenz der Daten


lokale Caches für gute Performanz notwendig
I

Hauptspeicher und Cache(s): Cache-Kohärenz


I

MESI-Protokoll und „Snooping“


→ siehe 14.3 Speicherhierarchie – Cache Speicher 18-Kern Xeon E7 v3 [Intel]
I Registerinhalte: ? problematisch

− Prozesse wechseln CPUs: „Hopping“


I Multi-Core Prozessoren sind „SMP on-a-chip“

A. Mäder 1083
SMP: Eigenschaften
14.2.4 Rechnerarchitektur II - Parallelität - Symmetric Multiprocessing 64-040 Rechnerstrukturen und Betriebssysteme

Symmetric Multiprocessing
I alle CPUs gleichrangig, Zugriff auf Speicher und I/O

I Konsistenz: Gleichzeitiger Zugriff auf eine Speicheradresse?

CPUs
P1
write 100
Memory
W1 → 100 W1 → 100 W2 → 200
P2
write 200 W2 → 200 R3 ← 100 R4 ← 200
R3 ← 200 W2 → 200 R3 ← 200
R3 ← 200 R3 ← 200 W1 → 100
read
P3 read

read R4 ← 200 R4 ← 200 R3 ← 100


P4

⇒ „Locking“ Mechanismen und Mutexe


spez. Befehle, atomare Operationen, Semaphore etc.
I

explizit im Code zu programmieren


I

→ siehe 15.3 Betriebssysteme – Synchronisation und


Kommunikation
A. Mäder 1084
SMP: Cache-Kohärenz
14.2.4 Rechnerarchitektur II - Parallelität - Symmetric Multiprocessing 64-040 Rechnerstrukturen und Betriebssysteme

Cache für schnelle Prozessoren notwendig


I jede CPU hat eigene Cache (L1, L2 . . . )
I aber gemeinsamer Hauptspeicher

Problem der Cache-Kohärenz


I Prozessor P2 greift auf Daten zu, die im Cache von P1 liegen
I P2 Lesezugriff: P1 muss seinen Wert P2 liefern
I P2 Schreibzugriff: P1 muss Wert von P2 übernehmen
oder seinen Cache ungültig machen
I Was ist mit gleichzeitigen Zugriffen von P1 , P2 ?
I diverse Protokolle zur Cache-Kohärenz
I z.B. MESI-Protokoll mit „Snooping“
Modified, Exclusive, Shared, Invalid
I Caches enthalten Wert, Tag und 2 bit MESI-Zustand
→ siehe 14.3 Speicherhierarchie – Cache Speicher, ab Folie 1100
A. Mäder 1085
SMP: volatile
14.2.4 Rechnerarchitektur II - Parallelität - Symmetric Multiprocessing 64-040 Rechnerstrukturen und Betriebssysteme

I MESI-Verfahren garantiert Cache-Kohärenz


für Werte im Cache und im Hauptspeicher

Vorsicht: Was ist mit den Registern?


I Variablen in Registern werden von MESI nicht erkannt
I Compiler versucht, häufig benutzte Variablen soweit wie
möglich in Registern zu halten
I globale/shared-Variablen niemals in Registern halten
I Java, C: Deklaration als volatile

A. Mäder 1086
SMP: Erreichbarer Speedup (bis 32 Threads)
14.2.4 Rechnerarchitektur II - Parallelität - Symmetric Multiprocessing 64-040 Rechnerstrukturen und Betriebssysteme

Figure 4. Maximum speedup achieved on up to 32 threads over single-


threaded execution (black bars) and minimum number of threads at which
the maximum speedup occurred (gray bars).

M.J .Bridges [Link].: Revisiting the Sequential Programming Model for the Multicore Era, IEEE Micro 2008 [Br+ 08]
A. Mäder 1087
Speicherhierarchie
14.3 Rechnerarchitektur II - Speicherhierarchie 64-040 Rechnerstrukturen und Betriebssysteme

L0:
Regs CPU registers hold words retrieved
from the L1 cache.
L1: L1 cache
Smaller, faster, (SRAM) L1 cache holds cache lines retrieved
and costlier from the L2 cache.
(per byte) L2: L2 cache
storage (SRAM) L2 cache holds cache lines retrieved
devices from L3 cache.
L3: L3 cache
(SRAM)
L3 cache holds cache lines retrieved
from main memory.
Larger, slower,
and cheaper L4: Main memory
(per byte) (DRAM)
storage Main memory holds disk blocks
devices retrieved from local disks.

L5: Local secondary storage


(local disks)
Local disks hold files
retrieved from disks
on remote servers.
L6: Remote secondary storage
(e.g., Web servers) [BO15]

A. Mäder 1088
Speicherhierarchie (cont.)
14.3 Rechnerarchitektur II - Speicherhierarchie 64-040 Rechnerstrukturen und Betriebssysteme

Gesamtsystem kombiniert verschiedene Speicher


I wenige KByte Register (-bank) im Prozessor
I einige MByte SRAM als schneller Zwischenspeicher
I einige GByte DRAM als Hauptspeicher
I einige TByte Festplatte als nichtflüchtiger Speicher
I Hintergrundspeicher (CD/DVD/BR, Magnetbänder)
I das WWW und Cloud-Services

Kompromiss aus Kosten, Kapazität, Zugriffszeit


I Illusion aus großem schnellem Speicher
I funktioniert nur wegen räumlicher/zeitlicher Lokalität

A. Mäder 1089
Prozessor-Memory Gap
14.3 Rechnerarchitektur II - Speicherhierarchie 64-040 Rechnerstrukturen und Betriebssysteme

I stetig wachsende Lücke zwischen CPU-, Memory- und


Disk-Geschwindigkeiten
100.000.000,0

10.000.000,0

1.000.000,0
Disk
100.000,0

Disk seek time


10.000,0 SSD
Time (ns)

SSD access time


1.000,0 DRAM access time
SRAM access time
100,0
CPU cycle time
10,0 Effective CPU cycle time
RAM
1,0

0,1

0,0
CPU
1985 1990 1995 2000 2003 2005 2010 2015
Year [BO15]

A. Mäder 1090
Motivation
14.3 Rechnerarchitektur II - Speicherhierarchie 64-040 Rechnerstrukturen und Betriebssysteme

I Geschwindigkeit der Prozessoren


I Kosten für den Speicherplatz
I permanente Speicherung
I magnetisch
CPU
I optisch Register Files
I mechanisch 1st-Level Cache
External Processor
Interface

2nd-Level Cache

Main Memory

Disk Storage

A. Mäder 1091
Motivation (cont.)
14.3 Rechnerarchitektur II - Speicherhierarchie 64-040 Rechnerstrukturen und Betriebssysteme

I schnelle vs. langsame Speichertechnologie


schnell : hohe Kosten/Byte geringe Kapazität
langsam : geringe –"– hohe –"–
I wachsender Abstand zwischen CPU und Speichergeschwindigkeit
I Prozessor läuft mit einigen GHz Takt
I Register können mithalten, aber nur einige KByte Kapazität
I DRAM braucht 60 . . . 100 ns für Zugriff: 100 × langsamer
I Festplatte braucht 10 ms für Zugriff: 1 000 000 × langsamer
I Lokalität der Programme wichtig
I aufeinanderfolgende Speicherzugriffe sind meistens „lokal“
I gut geschriebene Programme haben meist eine gute Lokalität

⇒ Motivation für spezielle Organisation von Speichersystemen


Speicherhierarchie

A. Mäder 1092
Verwaltung der Speicherhierarchie
14.3 Rechnerarchitektur II - Speicherhierarchie 64-040 Rechnerstrukturen und Betriebssysteme

I Register ↔ Memory
I Compiler
I Assembler-Programmierer
I Cache ↔ Memory
I Hardware
I Memory ↔ Disk
I Hardware und Betriebssystem: Paging, Segmentation
I Programmierer und –"– : Dateien

A. Mäder 1093
L0: Register
14.3.1 Rechnerarchitektur II - Speicherhierarchie - Speichertypen 64-040 Rechnerstrukturen und Betriebssysteme

I Register im Prozessor integriert


I Program-Counter und Datenregister für Programmierer sichtbar
I ggf. weitere Register für Systemprogrammierung
I zusätzliche unsichtbare Register im Steuerwerk
I Flipflops oder Registerbank mit 6 Trans.-Speicherzellen
I Lesen und Schreiben in jedem Takt möglich
I ggf. mehrere parallele Lesezugriffe in jedem Takt
I Zugriffszeiten ca. 100 ps

I typ. Größe einige KByte, z.B. 16 Register á 64-bit x86-64

A. Mäder 1094
L1-L4: Halbleiterspeicher RAM
14.3.1 Rechnerarchitektur II - Speicherhierarchie - Speichertypen 64-040 Rechnerstrukturen und Betriebssysteme

I „Random-Access Memory“ (RAM) aufgebaut aus Mikrochips


I Grundspeichereinheit ist eine Zelle (ein Bit pro Zelle)
I SRAM (6T-Zelle) oder DRAM (1T-Zelle) Technologie
I mehrere RAM Chips bilden einen Speicher

A. Mäder 1095
L5: Festplatten
14.3.1 Rechnerarchitektur II - Speicherhierarchie - Speichertypen 64-040 Rechnerstrukturen und Betriebssysteme

I dominierende Technologie für nichtflüchtigen Speicher


I hohe Speicherkapazität, derzeit einige TB
I Daten bleiben beim Abschalten erhalten
I aber langsamer Zugriff
I besondere Algorithmen, um langsamen Zugriff zu verbergen

I Einsatz als Speicher für dauerhafte Daten


I Einsatz als erweiterter Hauptspeicher („virtual memory“)

I FLASH/SSD zunehmend als Ersatz für Festplatten


I Halbleiterspeicher mit sehr effizienten multibit-Zellen
I Verwaltung (derzeit) wie Festplatten
I signifikant schnellere Zugriffszeiten

A. Mäder 1096
L6: Hintergrundspeicher
14.3.1 Rechnerarchitektur II - Speicherhierarchie - Speichertypen 64-040 Rechnerstrukturen und Betriebssysteme

I enorme Speicherkapazität
I langsame Zugriffszeiten

I Archivspeicher und Backup für (viele) Festplatten


I Magnetbänder
I RAID-Verbund aus mehreren Festplatten
I optische Datenspeicher: CD-ROM, DVD-ROM, BlueRay

I WWW und Internet-Services, Cloud-Services


I Cloud-Farms ggf. ähnlich schnell wie L5 Festplatten, da Netzwerk
schneller als der Zugriff auf eine lokale Festplatte

I in dieser Vorlesung nicht behandelt

A. Mäder 1097
Speicherhierarchie: zwei Beispiele
14.3.1 Rechnerarchitektur II - Speicherhierarchie - Speichertypen 64-040 Rechnerstrukturen und Betriebssysteme

[HP17]
A. Mäder 1098
Eigenschaften der Speichertypen
14.3.1 Rechnerarchitektur II - Speicherhierarchie - Speichertypen 64-040 Rechnerstrukturen und Betriebssysteme

I Speicher Vorteile Nachteile


Register sehr schnell sehr teuer
SRAM schnell teuer, große Chips
DRAM hohe Integration Refresh nötig, langsam
Platten billig, Kapazität sehr langsam, mechanisch

I Beispiel Hauptspeicher Festplatte SSD


Latenz 8 ns 4 ms 0,2/0,4 ms
Bandbreite 25,6 GB/sec 1,5 GB/sec 3/2 GB/sec
(pro Kanal, bis 4) (r/w)
Kosten/GB 6¤ 2,5 ct. 25 ct.
1 TB: 25 ¤

A. Mäder 1099
Cache
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I „Memory Wall“:About
Who Cares DRAMthe
zuMemory
langsamHierarchy?
für CPU
Processor-DRAM Memory Gap (latency)
10000
µProc
55%/yr.
1000 CPU
(2X/1.5yr)
“Moore’s Law”
Performance

Processor-Memory
100 Performance Gap:
(grows 50% / year)
10
DRAM 7-9%/yr.
DRAM
(2X/10 yrs)
1

2001
1988
1989
1990
1991
1992
1993

1996
1997
1998
1999
1980
1981
1982
1983
1984
1985
1986
1987

2000
1995

2002
1994

2004
2003

2005
Year [PH16b]

⇒ Cache als schneller Zwischenspeicher zum Hauptspeicher


CS420/520 memory.4 UC. Colorado Springs Adapted from ©UCB97 & ©UCB03

A. Mäder 1100
Cache (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I technische Realisierung: SRAM


I transparenter Speicher
I Cache ist für den Programmierer nicht sichtbar!
I wird durch Hardware verwaltet
I ggf. getrennte Caches für Befehle und Daten
I enthält Hauptspeicherblöcke mit erhöhter Zugriffswahrscheinlichkeit
I basiert auf Prinzip der Lokalität von Speicherzugriffen durch
ein laufendes Programm
I ca. 80% der Zugriffe greifen auf 20% der Adressen zu
I manchmal auch 90% / 10% oder noch besser
I [Link]
[Link]
[Link]

A. Mäder 1101
Cache (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I CPU referenziert Adresse


I parallele Suche in L1 (level 1), L2 . . . und Hauptspeicher
I erfolgreiche Suche liefert Datum, Abbruch laufender Suchen

CPU chip
register file
L1
ALU
cache
cache bus system bus memory bus

I/O main
L2 cache bus interface
bridge memory

[BO15]

A. Mäder 1102
gemeinsamer Cache / „unified Cache“
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

FF..FF16

registers
instructions

processor

instructions
address and data
data
copies of
instructions address
copies of
data
memory
cache
00..0016
instructions [Fur00]
and data

A. Mäder 1103
separate Instruction-/Data Caches
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

FF..FF16
copies of
instructions address

instructions
cache

address instructions
instructions

registers

processor

address data data

address
copies of
data
data memory
cache
00..0016 [Fur00]

A. Mäder 1104
Cache – Position
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I First- und Second-Level Cache

A. Mäder 1105
Cache – Position (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I Virtueller Cache
+ Adressumrechnung durch MMU oft nicht nötig
− Cache leeren bei Kontextwechseln

A. Mäder 1106
Cache – Position (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I Physikalischer Cache
+ Cache muss nie geleert werden
− Adressumrechnung durch MMU immer nötig

A. Mäder 1107
Cache – Position (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I typische Cache Organisation


I First-Level Cache: getrennte Instruktions- und Daten-Caches
I Second-Level Cache: gemeinsamer Cache je Prozessorkern
I Third-Level Cache: gemeinsamer Cache für alle Prozessorkerne
I bei mehreren Prozessoren / Prozessorkernen
⇒ Cache-Kohärenz wichtig
I gemeinsam genutzte Daten konsistent halten (s.u.)

A. Mäder 1108
Cache – Strategie
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Cachestrategie: Welche Daten sollen in den Cache?


Diejenigen, die bald wieder benötigt werden!
I temporale Lokalität:
die Daten, die zuletzt häufig gebraucht wurden
I räumliche Lokalität:
die Daten, die nahe den zuletzt gebrauchten liegen

I verschiedene Platzierungs-, Ersetzungs- und


Rückschreibestategien für den Cache

A. Mäder 1109
Cache – Performanz
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Cacheperformanz
I Begriffe
Treffer (Hit) Zugriff auf Datum, ist bereits im Cache
Fehler (Miss) –"– ist nicht –"–
Treffer-Rate RHit Wahrscheinlichkeit, Datum ist im Cache
Fehler-Rate RMiss 1 − RHit
Hit-Time THit Zeit, bis Datum bei Treffer geliefert wird
Miss-Penalty TMiss zusätzlich benötigte Zeit bei Fehler
I Mittlere Speicherzugriffszeit = THit + RMiss · TMiss
I Beispiel
THit = 1 Takt, TMiss = 20 Takte, RMiss = 5 %
⇒ Mittlere Speicherzugriffszeit = 2 Takte

A. Mäder 1110
Cache Organisation
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I Cache ist ein Array von Speicher-Bereichen („sets“)


I jeder Bereich enthält eine oder mehrere Zeilen
I jede Zeile enthält einen Datenblock
I jeder Block enthält mehrere Byte
1 valid bit t tag bits B = 2b bytes
per line per line per cache block

valid tag 0 1 ••• B–1


E lines
set 0: •••
per set
valid tag 0 1 ••• B–1

valid tag 0 1 ••• B–1

set 1: •••
S = 2s sets valid tag 0 1 ••• B–1

•••

valid tag 0 1 ••• B–1

set S-1: •••


valid tag 0 1 ••• B–1

Cache size: C = B x E x S data bytes [BO15]


A. Mäder 1111
Adressierung von Caches
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I Adressteil hset index i von A bestimmt Bereich („set“)


I Adresse A ist im Cache, wenn
1. Cache-Zeile ist als gültig markiert („valid“)
2. Adressteil htagi von A = „tag“ Bits des Bereichs
Address A:
t bits s bits b bits

m-1 0
v tag 0 1 • • • B–1
set 0: •••
v tag 0 1 • • • B–1 <tag> <set index> <block offset>

v tag 0 1 • • • B–1
set 1: •••
v tag 0 1 • • • B–1

•••
v tag 0 1 • • • B–1
set S-1: •••
v tag 0 1 • • • B–1
[BO15]

A. Mäder 1112
Adressierung von Caches (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I Cache-Zeile („cache line“) enthält Datenbereich von 2b Byte


I gesuchtes Wort mit Offset hblock offseti

Address A:
t bits s bits b bits

m-1 0
v tag 0 1 • • • B–1
set 0: •••
v tag 0 1 • • • B–1 <tag> <set index> <block offset>

v tag 0 1 • • • B–1
set 1: •••
v tag 0 1 • • • B–1

•••
v tag 0 1 • • • B–1
set S-1: •••
v tag 0 1 • • • B–1
[BO15]

A. Mäder 1113
Cache – Organisation
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I Welchen Platz im Cache belegt ein Datum des Hauptspeichers?


I drei Verfahren
direkt abgebildet / direct mapped jeder Speicheradresse ist
genau eine Cache-Speicherzelle zugeordnet
n-fach bereichsassoziativ / set associative
jeder Speicheradresse ist eine von n möglichen
Cache-Speicherzellen zugeordnet (E in [BO15])
voll-assoziativ jeder Speicheradresse kann jede beliebige
Cache-Speicherzelle zugeordnet werden

A. Mäder 1114
Cache: direkt abgebildet / „direct mapped“
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I jeder Adresse ist genau eine Speicherzelle im Cache zugeordnet

001
010
011

111
101
100

110
000
Cache

Memory [PH16b]

00001 00101 01001 01101 10001 10101 11001 11101

A. Mäder 1115
Cache: direkt abgebildet / „direct mapped“ (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I verfügt über genau 1 Zeile pro Bereich S Bereiche (Sets)

set 0: valid tag cache block E=1 lines per set

set 1: valid tag cache block

•••

set S-1: valid tag cache block


[BO15]

+ einfachste Cache-Art
+ große Caches möglich
− Effizienz, z.B. Zugriffe auf A, A + n · S. . .
⇒ „Cache Thrashing“
Beispiel (s.o.): Zugriff auf „00101“, „01101“, „10101“, „11101“

A. Mäder 1116
Cache: direkt abgebildet / „direct mapped“ (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Zugriff auf direkt abgebildete Caches


1. Bereichsauswahl durch Bits hset index i

set 0: valid tag cache block

selected set valid tag cache block


set 1:
•••
t bits s bits b bits
set S-1: valid tag cache block
00 001
m-1
tag set index block offset0
[BO15]

A. Mäder 1117
Cache: direkt abgebildet / „direct mapped“ (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

2. hvalidi: sind die Daten gültig?


3. „Line matching“: stimmt htagi überein?
4. Wortselektion extrahiert Wort unter Offset hblock offseti
=1? (1) The valid bit must be set

0 1 2 3 4 5 6 7

selected set (i): 1 0110 w0 w1 w2 w3

(2) The tag bits in the cache (3) If (1) and (2), then
line must match the =?
cache hit,
tag bits in the address and block offset
selects
t bits s bits b bits
starting byte.
0110 i 100
m-1
tag set index block offset0
[BO15]

A. Mäder 1118
Cache: direkt abgebildet / „direct mapped“ (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Prinzip address [Fur00]

tag RAM data RAM

decoder

compare mux

hit data

A. Mäder 1119
Cache: bereichsassoziativ / „set associative“
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I jeder Speicheradresse ist ein Bereich S mit mehreren (E)


Cachezeilen zugeordnet
I n-fach assoziative Caches: E=2, 4 . . .
„2-way set associative cache“, „4-way . . . “
valid tag cache block
set 0: E=2 lines per set
valid tag cache block

valid tag cache block


set 1:
valid tag cache block

•••
valid tag cache block
set S-1:
valid tag cache block
[BO15]

A. Mäder 1120
Cache: bereichsassoziativ / „set associative“ (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Zugriff auf n-fach assoziative Caches


1. Bereichsauswahl durch Bits hset index i

valid tag cache block


set 0:
valid tag cache block

Selected set valid tag cache block


set 1:
valid tag cache block

•••
valid tag cache block
t bits s bits b bits set S-1:
valid tag cache block
00 001
m-1
tag set index block offset0

[BO15]

A. Mäder 1121
Cache: bereichsassoziativ / „set associative“ (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

2. hvalidi: sind die Daten gültig?


3. „Line matching“: Cache-Zeile mit passendem htagi finden?
dazu Vergleich aller „tags“ des Bereichs hset index i
4. Wortselektion extrahiert Wort unter Offset hblock offseti

=1? (1) The valid bit must be set.

0 1 2 3 4 5 6 7

1 1001
selected set (i):
1 0110 w0 w1 w2 w3

(3) If (1) and (2), then


(2) The tag bits in one
=? cache hit, and
of the cache lines must
block offset selects
match the tag bits in
starting byte.
the address
t bits s bits b bits
0110 i 100
m-1
tag set index block offset0
[BO15]

A. Mäder 1122
Cache: bereichsassoziativ / „set associative“ (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Prinzip address
[Fur00]

tag RAM data RAM

decoder

compare mux

hit data

compare mux
decoder

tag RAM data RAM

A. Mäder 1123
Cache: voll-assoziativ
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I jeder Adresse des Speichers kann jede beliebige Cachezeile


zugeordnet werden
I Spezialfall: nur ein Cachebereich S

− benötigt E-Vergleicher
− nur für sehr kleine Caches realisierbar

A. Mäder 1124
Cache – Dimensionierung
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Address A:
t bits s bits b bits

m-1 0
v tag 0 1 • • • B–1
set 0: •••
v tag 0 1 • • • B–1 <tag> <set index> <block offset>

v tag 0 1 • • • B–1
set 1: •••
v tag 0 1 • • • B–1

•••
v tag 0 1 • • • B–1
set S-1: •••
v tag 0 1 • • • B–1
[BO15]

I Parameter: S, B, E
I Cache speichert immer größere Blöcke / „Cache-Line“
I Wortauswahl durch hblock offseti in Adresse

A. Mäder 1125
Cache – Dimensionierung (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Vor- und Nachteile des Cache


+ nutzt räumliche Lokalität aus
Speicherzugriffe von Programmen (Daten und Instruktionen)
liegen in ähnlichen/aufeinanderfolgenden Adressbereichen
+ breite externe Datenbusse, es werden ganze Bereiche
übertragen
+ nutzt Burst-Adressierung des Speichers: Adresse nur für erstes
Wort vorgeben, dann automatisches Inkrement
+ kürzere interne Cache-Adressen
− Hardwareaufwand und Kosten

A. Mäder 1126
Cache – Dimensionierung (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Cache- und Block-Dimensionierung

[PH16b]

I Blockgröße klein, viele Blöcke


+ kleinere Miss-Penalty
+ temporale Lokalität
− räumliche Lokalität
I Blockgröße groß, wenig Blöcke
− größere Miss-Penalty
− temporale Lokalität
+ räumliche Lokalität

A. Mäder 1127
Cache – Dimensionierung (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

25%
1k 4k 16k
64k 256k
20%

15%
Miss
rate
10%

5%

0%
16 32 64 128 256
Block size [HP17]

I Block-Size: 32. . . 128 Byte


L1-Cache: 4. . . 256 KiByte
L2-Cache: 256. . . 4 096 KiByte

A. Mäder 1128
Cache-Misses
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I cold miss
I Cache ist (noch) leer
I conflict miss
I wenn die Kapazität des Cache eigentlich ausreicht, aber
unterschiedliche Daten in den selben Block abgebildet werden
I Beispiel für „Trashing“ beim direct-mapped Cache mit S=8:
abwechselnder Zugriff auf Blöcke 0, 8, 0, 8, 0, 8 . . .
ist jedesmal ein Miss
I capacity miss
I wenn die Menge der aktiven Blöcke („working set“) größer ist
als die Kapazität des Cache

A. Mäder 1129
Cache Ersetzungsstrategie
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Wenn der Cache gefüllt ist, welches Datum wird entfernt?


I zufällige Auswahl
I LRU (Least Recently Used):
der „älteste“ nicht benutzte Cache Eintrag
I echtes LRU als Warteschlange realisiert
I Pseudo LRU mit baumartiger Verwaltungsstruktur:
Zugriff wird paarweise mit einem Bit markiert,
die Paare wieder zusammengefasst usw.

I LFU (Least Frequently Used):


der am seltensten benutzte Cache Eintrag
I durch Zugriffszähler implementiert

A. Mäder 1130
Cache Schreibstrategie
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Wann werden modifizierte Daten des Cache zurückgeschrieben?


I Write-Through: beim Schreiben werden Daten sofort im Cache
und im Hauptspeicher modifiziert
+ andere Bus-Master sehen immer den „richtigen“ Speicherinhalt:
Cache-Kohärenz
− Werte werden unnötig oft in Speicher zurückgeschrieben
I Write-Back: erst in den Speicher schreiben, wenn Datum des
Cache ersetzt werden würde
+ häufig genutzte Werte (z.B. lokale Variablen) werden nur im
Cache modifiziert
− Cache-Kohärenz ist nicht gegeben
⇒ spezielle Befehle für „Cache-Flush“
⇒ „non-cacheable“ Speicherbereiche

A. Mäder 1131
Cache-Kohärenz
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I Daten zwischen Cache und Speicher konsistent halten


I notwendig wenn mehrere Einheiten (Bus-Master: Prozessor,
DMA-Controller) auf Speicher zugreifen können:
wichtig für „Symmetric Multiprocessing“
I Harvard-Architektur hat getrennte Daten- und
Instruktions-Speicher
Instruktionen sind read-only
I

⇒ einfacherer Instruktions-Cache
⇒ Cache-Kohärenz Problem betrifft D-Cache
I Cache-Kohärenz Protokolle und „Snooping“
I alle Prozessoren(P1 , P2 . . . ) überwachen alle Bus-Transaktionen
Cache „schnüffelt“ am Speicherbus
I Prozessor P2 greift auf Daten zu, die im Cache von P1 liegen
P2 Schreibzugriff ⇒ P1 Cache aktualisieren / ungültig machen
P2 Lesezugriff ⇒ P1 Cache liefert Daten
I Was ist mit gleichzeitige Zugriffen von P1 , P2 ?

A. Mäder 1132
Cache-Kohärenz (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I viele verschiedene Protokolle: Hersteller- / Prozessor-spezifisch


I SI („Write Through“)
I MSI, MOSI,
I MESI: Modified, Exclusive, Shared, Invalid
I MOESI: Modified (exclusive), Owned (Modified shared),
Exclusive, Shared, Invalid
I ...
siehe z.B.: [Link]/wiki/Cache_coherence

A. Mäder 1133
MESI Protokoll
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I Caches enthalten Wert, Tag und zwei Statusbits für die


vier Protokollzustände
I Modified: gültiger Wert, nur in diesem Cache,
gegenüber Hauptspeicher-Wert verändert
I Exclusive: gültiger Wert, nur in diesem Cache
nicht verändert (unmodified)
I Shared: gültiger Wert, in mehreren Caches vorhanden
nicht verändert (unmodified)
I Invalid: ungültiger Inhalt, Initialzustand
I alle Prozessoren überwachen alle Bus-Transaktionen
I bei Speicherzugriffen Aktualisierung des Status’
I Zugriffe auf „modified“-Werte werden erkannt:
1. fremde Bus-Transaktion unterbrechen
2. eigenen (=modified) Wert zurückschreiben
3. Status auf shared ändern
4. unterbrochene Bus-Transaktion neu starten

A. Mäder 1134
MESI Protokoll (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I erfordert spezielle Snoop-Logik im Prozessor


I garantiert Cache-Kohärenz
I gute Performanz, aber schlechte Skalierbarkeit
I Zustandsübergänge: MESI Protokoll
SHR

PowerPC 604 RISC Microprocessor


SHW User’s Manual [Motorola / IBM]
INVALID RMS SHARED
RH
WM

RME WH
replacement

SHR
LRU

SHW

SHR SHW
Bus Transactions
RH = Read hit = Snoop push
MODIFIED EXCLUSIVE RMS = Read miss, shared
RME = Read miss, exclusive = Invalidate transaction
WH WH = Write hit
RH RH
WM = Write miss = Read-with-intent-to-modify
SHR = Snoop hit on a read
SHW = Snoop hit on a write or = Read
read-with-intent-to-modify
WH
A. Mäder 1135
MESI Protokoll (cont.)
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

I „Snooping“ Beispiel
MESI-Status Wert A: CPU1 CPU2
CPU 1 CPU 2 Hauptspeicher
E A
CPU 1 lädt Wert A E I

CPU 1 CPU 2 Hauptspeicher


M A
CPU 1 modifiziert A M I

CPU 1 CPU 2 Hauptspeicher


M A CPU 2 lädt A - -
(aber Wert modified)

M
CPU 1
A
CPU 2 Hauptspeicher

CPU 1 SNOOP! - -
(CPU2 read gestoppt) - -

CPU 1 CPU 2 Hauptspeicher


E A
CPU 1 schreibt A E I
(CPU2 read gestoppt)

CPU 2 lädt A S S
CPU 1 CPU 2 Hauptspeicher
S A S A

(CPU2 read restart, A shared)

A. Mäder 1136
Cache Effekte bei Matrixzugriffen
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

public static double sumRowCol ( double [][] matrix ) {


int rows = matrix . length ;
int cols = matrix [0]. length ;
double sum = 0.0;
for( int r = 0; r < rows; r++ ) {
for( int c = 0; c < cols; c++ ) {
sum += matrix [r][c];
}
}
return sum;
}

Matrix creation (5000×5000) 2105 msec.


Matrix row-col summation 75 msec.
Matrix col-row summation 383 msec. ⇒ 5 × langsamer
Sum = 600,8473695346258 / 600,8473695342268 ⇒ andere Werte

A. Mäder 1137
Cache vs. Programmcode
14.3.2 Rechnerarchitektur II - Speicherhierarchie - Cache Speicher 64-040 Rechnerstrukturen und Betriebssysteme

Programmierer kann für maximale Cacheleistung optimieren


B Datenstrukturen werden fortlaufend alloziert
1. durch entsprechende Organisation der Datenstrukturen
2. durch Steuerung des Zugriffs auf die Daten
I Geschachtelte Schleifenstruktur
I Blockbildung ist eine übliche Technik

Systeme bevorzugen einen Cache-freundlichen Code


I Erreichen der optimalen Leistung ist plattformspezifisch
I Cachegrößen, Zeilengrößen, Assoziativität etc.
I generelle Empfehlungen
I „working set“ klein ⇒ zeitliche Lokalität
I kleine Adressfortschaltungen („strides“) ⇒ räumliche Lokalität

A. Mäder 1138
Literatur
14.4 Rechnerarchitektur II - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[PH17] D.A. Patterson, J.L. Hennessy: Computer Organization


and Design – The Hardware Software Interface – RISC-V
Edition.
Morgan Kaufmann Publishers Inc., 2017.
ISBN 978–0–12–812275–4
[PH16b] D.A. Patterson, J.L. Hennessy: Rechnerorganisation
und Rechnerentwurf – Die Hardware/Software-Schnittstelle.
5. Auflage, Oldenbourg, 2016. ISBN 978–3–11–044605–0
[HP17] J.L. Hennessy, D.A. Patterson:
Computer architecture – A quantitative approach.
6th edition, Morgan Kaufmann Publishers Inc., 2017.
ISBN 978–0–12–811905–1

A. Mäder 1139
Literatur (cont.)
14.4 Rechnerarchitektur II - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BO15] R.E. Bryant, D.R. O’Hallaron:


Computer systems – A programmers perspective.
3rd global ed., Pearson Education Ltd., 2015.
ISBN 978–1–292–10176–7. [Link]
[TA14] A.S. Tanenbaum, T. Austin: Rechnerarchitektur –
Von der digitalen Logik zum Parallelrechner.
6. Auflage, Pearson Deutschland GmbH, 2014.
ISBN 978–3–8689–4238–5
[Tan06] A.S. Tanenbaum:
Computerarchitektur – Strukturen, Konzepte, Grundlagen.
5. Auflage, Pearson Studium, 2006. ISBN 3–8273–7151–1

A. Mäder 1140
Literatur (cont.)
14.4 Rechnerarchitektur II - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Intel] Intel Corp.; Santa Clara, CA.


[Link] [Link]
[Br+ 08] M.J. Bridges [u. a.]: Revisiting the Sequential
Programming Model for the Multicore Era.
in: IEEE Micro 1 Vol. 28 (2008), S. 12–20.
[Fur00] S. Furber: ARM System-on-Chip Architecture.
2nd edition, Pearson Education Limited, 2000.
ISBN 978–0–201–67519–1

A. Mäder 1141
Gliederung
15 Betriebssysteme 64-040 Rechnerstrukturen und Betriebssysteme

1. Einführung
2. Informationsverarbeitung
3. Ziffern und Zahlen
4. Arithmetik
5. Zeichen und Text
6. Logische Operationen
7. Codierung
8. Schaltfunktionen
9. Schaltnetze
10. Schaltwerke
11. Rechnerarchitektur I
12. Instruction Set Architecture
13. Assembler-Programmierung

A. Mäder 1142
Gliederung (cont.)
15 Betriebssysteme 64-040 Rechnerstrukturen und Betriebssysteme

14. Rechnerarchitektur II
15. Betriebssysteme
Historische Entwicklung
Interrupts
Prozesse und Threads
Synchronisation und Kommunikation
Scheduling
Speicherverwaltung
I/O und Dateiverwaltung
Literatur

A. Mäder 1143
Betriebssysteme in RSB
15 Betriebssysteme 64-040 Rechnerstrukturen und Betriebssysteme

I genug Stoff für eigene Vorlesungen


I Themen
I Prozesse und Threads
I Synchronisation und Kommunikation; Deadlocks
I Scheduling
I Speicherverwaltung; Virtual Memory
I Dateiverwaltung und I/O
I nicht behandelt
Praxisbeispiele: Windows, Unix, Linux, Android . . .
I

Dateisysteme
I
I Virtualisierung; Container

→ VSS (Verteilte Systeme und Systemsicherheit)


Sicherheit, RAID
→ ES (Eingebettete Systeme)
Eingebettete Betriebssysteme, Echtzeitverhalten
→ Grafiken, wenn nicht anders angegeben, aus: W. Stallings:
Operating Systems – Internals and Design Principles [Sta17]
A. Mäder 1144
Betriebssysteme
15 Betriebssysteme 64-040 Rechnerstrukturen und Betriebssysteme

Was sind Betriebssysteme?


Im Prinzip Software, wie jedes andere Programm auch!
Was machen Betriebssysteme?
I Verwalten der „teuren“ Hardware für optimale Nutzung
Prozessor(en)
I

Systembus(se)
I

I Hauptspeicher
I Festplatten / SSDs
I Ein-/Ausgabeeinheiten (I/O)

⇒ Anpassen der Geschwindigkeiten


Koordination aller Programme, Dienste und Benutzer
I
Wer darf wann worauf zugreifen?
I Bereitstellen von Systemdiensten („Service“) und Schnittstellen
(„System-Call“) für (andere) Programme, bzw. die Benutzer
Wie ist der Zugriff geregelt?
⇒ BS sind meist die komplexeste Software auf dem Computer!
A. Mäder 1145
1. erste Computer / serielle Verarbeitung
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I kein Betriebssystem
I Programmierer arbeitet direkt mit Computer an Konsole
I Benutzer können nur nacheinander am Computer arbeiten
− Reservierung des Systems
längerer Job: wird nicht fertig oder
Reservierungen verschieben sich
kürzerer Job: System bleibt ungenutzt
− „Rüstzeit“: Vorbereitung auf Programmlauf

A. Mäder 1146
2. einfache Batch-Systeme
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I Benutzer hat keinen direkten Zugriff Interrupt


Processing
I Operator bündelt Jobs als „Batch“ Device
Drivers
I Monitor als zentrales Programm Monitor
Job
arbeitet Job-Queue ab Sequencing
I immer im Speicher (Resident Monitor) Control Language
Interpreter
I Funktionsweise Boundary
I Monitor liest Job ein
I übergibt Kontrolle an Benutzerprogramm
(=
b Prozeduraufruf)
User
I Programm übergibt nach Ende Kontrolle an Monitor Program
(=
b Rücksprung) Area

I Instruktionen für Monitor: Job Control Language

A. Mäder 1147
2. einfache Batch-Systeme (cont.)
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I wichtige Eigenschaften
I Memory protection: Jobs haben keinen Zugriff auf
Monitor-Speicherbereich
I Timer begrenzt Laufzeit von Jobs
I privilegierte Instruktionen nur durch Monitor ausführbar
I Interrupts bessere, flexiblere Kontrolle der Jobs
⇒ zwei Modi
1. User Mode für Batch-Job
I einige Speicherbereiche sind gesperrt
I einige Befehle sind nicht ausführbar
2. Kernel Mode für Monitor
I Zugriff auf geschützte Speicheradressen
I privilegierte Befehle sind ausführbar
I Overhead, verglichen mit serieller Abarbeitung
− Prozessor muss zusätzlich Monitor bearbeiten
− zusätzlicher Speicherbedarf für Monitor
+ insgesamt aber bessere Auslastung des Computers
A. Mäder 1148
3. Multiprogramm Batch-Systeme
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

unterschiedliche Geschwindigkeiten ⇒ Prozessor wartet meist


I Uniprogramming
Program A Run Wait Run Wait

Time

I Multiprogramming, Multitasking
Program A Run Wait Run Wait

Program B Wait Run Wait Run Wait

Program C Wait Run Wait Run Wait

Run Run Run Run Run Run


Combined Wait Wait
A B C A B C
Time

+ Job wartet auf I/O ⇒ Monitor wechselt zu anderem Job


− Speicherbedarf für Monitor und alle Jobs
A. Mäder 1149
3. Multiprogramm Batch-Systeme (cont.)
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel
JOB1 JOB2 JOB3
Type of job Heavy compute Heavy I/O Heavy I/O
Duration 5 min 15 min 10 min
Memory required 50 M 100 M 75 M
Need disk? No No Yes
Need terminal? No Yes No
Need printer? No No Yes

Uniprogramming Multiprogramming
Processor use 20% 40%
Memory use 33% 67%
Disk use 33% 67%
Printer use 33% 67%
Elapsed time 30 min 15 min
Throughput 6 jobs/hr 12 jobs/hr
Mean response time 18 min 10 min

A. Mäder 1150
3. Multiprogramm Batch-Systeme (cont.)
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

100% 100%

CPU CPU
0% 0%
100% 100%

Memory Memory
0% 0%
100% 100%

Disk Disk
0% 0%
100% 100%

Terminal Terminal
0% 0%
100% 100%

Printer Printer
0% 0%

Job History Job History JOB1


JOB1 JOB2 JOB3
JOB2
0 5 10 15 20 25 30
minutes JOB3

time 0 5 10 15
minutes
time
(a) Uniprogramming (b) Multiprogramming

A. Mäder 1151
4. Time-Sharing Betrieb
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I Erweiterung von Multitasking für interaktive Jobs


I Prozessor/Ressourcen werden zwischen Benutzern geteilt
I Zugriff über Terminals (Kommandozeile)
später grafische Oberflächen
I Optimierungsziel
Batch Multiprogramm Time-Sharing
Optimierung maximale Prozessornutzung minimale Antwortzeit
BS Kontrolle Job Control Language Benutzereingabe

I typisch: Zeitscheiben Verfahren (Time Slicing)


I periodische Interrupts durch Systemclock
I Betriebssystem übernimmt Kontrolle
I prüft ob anderer Prozess laufen soll
I Benutzerprozess ist „unterbrochen“ („Preemption“)
I sein Status wird gesichert
I Daten für neuen / fortzusetzenden Prozess werden geladen

A. Mäder 1152
aktuelle Betriebssysteme
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I zentrale Elemente Operating System


Service Call Service
from Process Call
Handler (code)

Long- Short- I/O


Interrupt
Term Term Queues
from Process Interrupt
Queue Queue
Interrupt Handler (code)
from I/O
Short-Term
Scheduler
(code)

Pass Control
to Process

I Service Call / System Call:


Programm ruft BS-Funktion auf ⇒ Ressourcenzugriff
I Interrupt: besonderes Ereignis
I FIFO Queues: Warteschlangen
I Scheduler: CPU / Kontrolle wird an Prozess übergeben
A. Mäder 1153
aktuelle Betriebssysteme (cont.)
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I Architekturansätze
I Monolithischer Kernel alle Funktionalitäten, Treiber etc.
in gemeinsamen Kernel; das Programm „Betriebssystem“
I Microkernel enthält nur
I Scheduling
I Interprozess-Kommunikation
I Adressverwaltung
B restliche Funktionalität als getrennte Prozesse
I hybride Kernel Mischformen
Monolithic Kernel Microkernel "Hybrid kernel"
based Operating System based Operating System based Operating System

Application Application Application

System
OS user user user
VFS, System call
File UNIX
mode mode mode
Server Server
Application UNIX Device File
IPC, File System
IPC Server Driver Server
kernel
mode
Application Device
Scheduler, Virtual Memory kernel kernel kernel
IPC Driver
mode mode mode

Device Drivers, Dispatcher, ... Basic IPC, Virtual Memory, Scheduling Basic IPC, Virtual Memory, Scheduling

Hardware Hardware Hardware

A. Mäder 1154
aktuelle Betriebssysteme (cont.)
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

user level
processes

signals system calls

processes
& scheduler
file network
systems protocols
virtual

kernel
memory
char device block device network de-
drivers drivers vice drivers

traps & physical


interrupts
faults memory

hardware
system network inter-
CPU terminal disk
memory face controller

Monolithischer Kernel (Linux): Teilkomponenten

A. Mäder 1155
aktuelle Betriebssysteme (cont.)
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I weitere Konzepte
I Multithreading ⇒ bessere Granularität
I Multiprocessing (SMP)
IVerwaltung mehrerer Prozessoren
Ifür Benutzer transparent
+ Verfügbarkeit, Performanz, Skalierbarkeit etc.
− schwierig zu implementieren . . .
Time Blocked Running

Process 1

Process 2

Process 3

(a) Interleaving (multiprogramming, one processor)

Process 1

Process 2

Process 3

(b) Interleaving and overlapping (multiprocessing; two processors)

A. Mäder 1156
aktuelle Betriebssysteme (cont.)
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I verteilte Betriebssysteme, einheitliche Sicht auf Cluster


I spezielle Anforderungen
I Echtzeit Betriebssysteme
I Fehlertoleranz

A. Mäder 1157
Aufgaben eines Betriebssystems
15.1 Betriebssysteme - Historische Entwicklung 64-040 Rechnerstrukturen und Betriebssysteme

I Prozessverwaltung
I Prozesse starten und beenden
I Scheduling: Prozesse CPUs zuordnen
I Prozesswechsel
I Prozesssynchronisation und Interprozesskommunikation
I Verwaltung der dazu notwendigen Datenstrukturen
(Prozesskontrollblock)
I Speicherverwaltung
I Zuordnung des (virtuellen) Adressraums zu Prozessen
I Swapping: Hauptspeicher ⇔ sekundärer Speicher
I Seitenadressierung (Paging) und Segmentierung
I Ein-/Ausgabeverwaltung
I Verwaltung von FIFOs
I Zuordnung von I/O-Geräten und -Kanälen zu Prozessen
I weitere Funktionen
I Interruptverarbeitung
I Abrechnung der Ressourcen (Accounting)
I Protokollierung (Monitoring)
A. Mäder 1158
Interrupts
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

I sequenzieller Ablauf der Programmabarbeitung wird


unterbrochen
I Bessere Ausnutzung des Prozessors
I I/O, Platten, Hauptspeicher langsamer als CPU
I CPU muss „warten“ ⇒ schlechte Nutzung
I Interrupts durch
I Programm: Ausnahmebehandlung („Exception“) z.B. Überlauf,
Division durch 0, illegale Anweisung, ungültige Speicheradresse
I Timer: regelmäßige Ausführung von Aufgaben
I I/O: externe Hardware meldet: Ende einer Operation, Fehler
I Hardwarefehler: Speicherparität, Spannungsversorgung,
Temperatur . . .

A. Mäder 1159
Interrupt: Beispiel
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

I Benutzerprogramm schreibt auf Festplatte, rechnet (1,2,3)


I I/O-Programm für Plattenzugriff (4,5)
I Teil des Betriebssystems
I Schnittstelle durch System-Call
I Zeit zwischen I/O Command und Interrupt wird durch
langsames Gerät bestimmt

A. Mäder 1160
Interrupt: Beispiel (cont.)
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

User I/O User I/O User I/O


Program Program Program Program Program Program

1 4 1 4 1 4

I/O I/O I/O


Command Command Command
WRITE WRITE WRITE
5
2a
END
2 2

Interrupt Interrupt
2b Handler Handler

WRITE WRITE 5 WRITE 5

END END
3a

3 3

3b

WRITE WRITE WRITE

(a) No interrupts (b) Interrupts; short I/O wait (c) Interrupts; long I/O wait

= interrupt occurs during course of execution of user program

A. Mäder 1161
Interrupt: Programmablauf
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

I Ausführungszyklus der Befehle ergänzt


Fetch Stage Execute Stage Interrupt Stage

Interrupts
Disabled
Check for
Fetch next Execute interrupt;
START instruction instruction initiate interrupt
Interrupts
handler
Enabled

I Kontrolltransfer HALT
User Program Interrupt Handler

Interrupt i
occurs here
i+1

M
A. Mäder 1162
Interrupt: Programmablauf (cont.)
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

I kurze I/O Wartezeit Time

1 1

4 4
I/O operation
I/O operation;
processor waits
2a concurrent with
processor executing

5 5

2b
2
4
I/O operation
4 3a concurrent with
processor executing
I/O operation;
processor waits 5

5 3b
(b) With interrupts

(a) Without interrupts

A. Mäder 1163
Interrupt: Programmablauf (cont.)
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme
Time

I lange I/O Wartezeit 1 1

4 4

I/O operation; 2 I/O operation


processor waits concurrent with
processor executing;
then processor
waits
5

5
2
4
4
3 I/O operation
concurrent with
I/O operation; processor executing;
processor waits then processor
waits

5
5
(b) With interrupts

(a) Without interrupts


A. Mäder 1164
Interruptverarbeitung
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

1. HW Gerät, Systemhardware liefert Interrupt


2. HW Prozessor beendet aktiven Befehl Pipelining!
3. HW Prozessor bestätigt Interrupt
4. HW Programmstatus (PC, Register, Speicherinformation etc.)
auf Control Stack sichern
5. HW PC mit Interrupt (-startadresse) initialisieren
Wechsel in privilegierten Modus (Kernel Mode)
6. SW ggf. weitere Informationen auf Control Stack sichern
7. SW Interruptverarbeitung / Interrupt Handler (Programm)
8. SW Programmstatus aus 6. wiederherstellen
9. SW Programmstatus aus 4. wiederherstellen;
PC mit Programmfortsetzung initialisieren

A. Mäder 1165
Interruptverarbeitung (cont.)
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

T–M T–M
Y N+1
Control Control
Stack Stack
T T
N+1 Y+L+1
Program Program
Counter Counter

Y Start Y Start
Interrupt General Interrupt General
Service Registers Service Registers
Y + L Return Routine T Y + L Return Routine T–M
Stack Stack
Pointer Pointer

Processor Processor

T–M T

N User's N User's
N+1 N+1
Program Program

Main Main
Memory Memory

(a) Interrupt occurs after instruction


(b) Return from interrupt
at location N

A. Mäder 1166
Mehrfache Interrupts
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

I während Interruptverarbeitung kommt Interrupt


1. weitere Interrupts deaktivieren
2. verschiedene Interruptprioritäten
I Interrupts können „verloren gehen“, ggf. Zwischenspeichern
I Schachtelung und/oder sequenzielle Abarbeitung
Interrupt Interrupt
Handler X User Program Handler X
User Program

Interrupt Interrupt
Handler Y Handler Y

A. Mäder 1167
Mehrfache Interrupts (cont.)
15.2 Betriebssysteme - Interrupts 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel: zeitlicher Verlauf


Printer Communication
User Program
interrupt service routine interrupt service routine
t=0

15
10 t=
t=

t = 25

t= t = 25 Disk
40 interrupt service routine

t=
35

A. Mäder 1168
Prozesse
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

Prozess: zentral verwaltete Einheit in Betriebssystemen


Main Processor
Memory Registers
I Programm während der Ausführung Process index i

PC

Instanz eines laufenden Programms


i
I Process Base b
list Limit h

Einheit, die Prozessor zugewiesen wird


j
I
Other

–"– die von Prozessor ausgeführt wird


registers

Aktivität bestehend aus


Context
I Process Data

einem einzelnem sequenziellen Ablauf


A
I Program

einem Zustand
(code)
I
I zugehörigen Systemressourcen b
Context
Process Data
B h
Program
(code)

A. Mäder 1169
Fehler bei Prozessabarbeitung
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Synchronisationsfehler
Prozess muss warten
I

Reaktivierung durch externes Ereignis


I

⇒ Ereignis wird nicht, wird mehrfach ausgelöst


I gegenseitiger Ausschluss (Mutual Exclusion)
mehrere Prozesse mit gleichzeitigen Zugriff auf Ressource,
I

z.B. Speicher, Datei


⇒ Sperrmechanismen: Semaphore, Mutex, Monitor
I nichtdeterministisches Verhalten
I mehrere Prozesse/Threads kommunizieren über Shared Memory

⇒ transiente Effekte: Programme überschreiben sich Werte


abhängig vom Scheduling durch Betriebssystem
I Deadlocks
⇒ Prozesse warten (zyklisch) aufeinander
→ siehe Abschnitt 15.4 Synchronisation und Kommunikation

A. Mäder 1170
Komponenten eines Prozesses
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

1. das ausführbare Programm (Text-Segment)


2. die zugehörigen Daten (Data-Segment)
3. der Programmkontext
I prozessspezifische Daten des Betriebssystems
I Inhalt der Prozessorregister
I Warten auf Ereignisse?
I Prioritäten, Rechte, Abrechnungsinformationen etc.

Identifier

Program
State Priority
counter

Memory Context I/O status Accounting


pointers data information information

A. Mäder 1171
Komponenten eines Prozesses (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Prozesskontrollblock Identifier
speichert Verwaltungsinformation State
Priority
Program counter

Memory pointers
Context data

I/O status
information

Accounting
information

A. Mäder 1172
Prozessablauf
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Trace: Folge von Instruktionen


I für einzelnen Prozess ⇒ Laufzeitverhalten
I für Prozessor ⇒ zeigt Prozesswechsel
I Dispatcher: BS-Komponente, die Prozessor Prozessen zuordnet
Beispiel
Address Main Memory Program Counter
I 0
8000
100
Dispatcher

5000
Process A

8000

Process B

12000

Process C

A. Mäder 1173
Prozessablauf (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

1 5000 27 12004
2 5001 28 12005
I 3 Prozesse: A, B, C 3
4
5002
5003
--------------------Timeout
29 100
I Dispatcher (blau) 5 5004 30 101
6 5005 31 102
--------------------Timeout 32 103
7 100 33 104
8 101 34 105
9 102 35 5006
10 103 36 5007
11 104 37 5008
12 105 38 5009
13 8000 39 5010
5000 8000 12000
5001 8001 12001 14 8001 40 5011
5002 8002 12002 15 8002 --------------------Timeout
5003 8003 12003 16 8003 41 100
5004 12004 --------------- I/O Request 42 101
5005 12005 17 100 43 102
5006 12006 18 101 44 103
5007 12007 19 102 45 104
5008 12008
20 103 46 105
5009 12009
5010 12010 21 104 47 12006
5011 12011 22 105 48 12007
(a) Trace of Process A (b) Trace of Process B (c) Trace of Process C
23 12000 49 12008
24 12001 50 12009
5000 = Starting address of program of Process A 25 12002 51 12010
8000 = Starting address of program of Process B 26 12003 52 12011
12000 = Starting address of program of Process C
--------------------Timeout

A. Mäder 1174
laufende Prozesse
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Prozesse starten
I neuer Batch-Job
I interaktiver Login (Kommandozeile / Shell)
I durch Betriebssystem: neuer Dienst, z.B.: nach Booten
I durch laufenden Prozess: explizite Parallelität

I Parent: laufender Prozess, der Neuen startet


Child: neu gestarteter Prozess
I Prozesshierarchie (Baumstruktur) (htop)

A. Mäder 1175
laufende Prozesse (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Prozessende
I normales Programmende, Berechnung/Aufgabe fertig
I Zeitlimit überschritten:
maximale Laufzeit, Warten auf Benutzereingabe . . .
I Timeout: Warten auf Event/Systemsignal
I Speicherlimit: kein (virtueller) Speicher mehr verfügbar
I Adressverletzung: versuchter Zugriff auf ungültige Speicheradresse
I Zugriffsfehler: ungültiger Zugriff auf Ressource,
z.B.: Schreiben in read-only Datei
I Ein-/Ausgabefehler:
Lesefehler in Datei, Datei nicht vorhanden . . .
I Arithmetischer Fehler: Teilen durch 0 . . .
I Datenfehler: „falscher“ Typ in Datenstrukturen . . .
I ungültiger Befehl: kein Assemblerbefehl (in Datensegment?)
I unerlaubter Befehl: privilegierter Befehl im User Mode
I Parent Anfrage an Child
I Parent terminiert ⇒ Child-Prozess beenden
I Abbruch durch: Betriebssystem, Operator, Benutzer
A. Mäder 1176
Prozessmodell
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Prozesse werden dynamisch gestartet und beendet


I –"– warten auf I/O / Systemereignisse
I –"– werden unterbrochen: Time-Sharing Betrieb
I Verwaltung durch Dispatcher
I Zustandsautomat
Dispatch
Admit Release
New Ready Running Exit
Timeout

Event
Occurs Event
Wait

Blocked

A. Mäder 1177
Prozessmodell (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Trace
Process A

Process B

Process C

Dispatcher

0 5 10 15 20 25 30 35 40 45 50

= Running = Ready = Blocked

A. Mäder 1178
Prozessmodell (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Warteschlangen, ggf. mit Trennung nach Signal


Ready Queue Release
Admit Dispatch
Processor

Timeout

Blocked Queue
Event Event Wait
Occurs

A. Mäder 1179
Prozessmodell (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

Ready Queue Release


Admit Dispatch
Processor

Timeout

Event 1 Queue
Event 1 Event 1 Wait
Occurs

Event 2 Queue
Event 2 Event 2 Wait
Occurs

Event n
Event n Event n Wait
Occurs

A. Mäder 1180
Prozessunterbrechung
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Swapping: Auslagerung von Prozessen, bzw. Teilen von


Prozessen auf sekundären Speicher (HDD, SSD)
I Prozessunterbrechung (suspend) durch
I Swapping: Betriebssystem benötigt Hauptspeicher
I Timing: periodische Ausführung . . .
I Parent Anfrage an Child, z.B.: zur Synchronisation
I Unterbrechung durch: Betriebssystem, Operator, Benutzer
I Erweiterung des Prozessmodells
Admit Dispatch
Release
New Ready Running Exit
Timeout

t
ai
Occurs
e

Event
at

W
iv

t
ct

en
A

Ev

Suspend
Suspend Blocked

A. Mäder 1181
Kontrollstrukturen
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

Process
Image
Memory Tables
Process
Memory 1

Devices I/O Tables

Files

Processes File Tables

Primary Process Table

Process 1

Process 2
Process
Process 3 Image
Process
n

Process n

A. Mäder 1182
Kontrollstrukturen (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Prozesstabellen
I Speicherverwaltung: Memory Tables
I Verwaltung von virtuellem Speicher
I Zuordnung für Hauptspeicher (RAM)
I Zuordnung für sekundären Speicher (HDD, SSD)
I Attribute für Speicherblöcke, z.B.: Speicherschutz
I Ein-/Ausgabeverwaltung: I/O Tables
I Zuordnung zu Prozessen
I Status von I/O-Befehlen
I Informationen zu Befehlen: Startadresse in Hauptspeicher,
Datengröße
I Datei-Verwaltung: File Tables
I Existenz von Dateien / Dateinamen
I Ort auf Sekundärspeicher
I Status, z.B.: geöffnet (rw, ro)
I weitere Attribute: Zugriffsrechte, Zeitstempel etc.

A. Mäder 1183
Prozessabbild / Process image
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Programmcode
I Datenstrukturen des Programms: statische Datenstrukturen
und dynamischer Speicher, z.B.: Heap
I Stack: Unterprogrammaufrufe und -Datenstrukturen
→ siehe Abschnitt 13.3 Funktionsaufrufe und Stack
I Prozesskontrollblock, siehe Folie 1171
I Identifier, Parent, Child-Liste
I Register: für Benutzer sichtbar + „Rename-Register“
I Status-Register: Programmzähler, Flags, Modus
Interrupts Enabled . . .
I Stack-Pointer
I Scheduling Information: Zustand des Prozessmodells, Priorität . . .
I Informationen für Interprozesskommunikation
I Privilegien: Zugriffsrechte auf Speicherbereiche, I/O . . .
I Speicherverwaltung: Tabellen für Virtual Memory
I aktuelle Ressourcen, z.B.: geöffnete Dateien
I ...
A. Mäder 1184
Prozessabbild / Process image (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

Process Process Process


Identification Identification Identification
Process
Processor State Processor State Processor State Control
Information Information Information Block
Process Control Process Control Process Control
Information Information Information

User Stack User Stack User Stack

Private User Private User Private User


Address Space Address Space Address Space
(Programs, Data) (Programs, Data) (Programs, Data)

Shared Address Shared Address Shared Address


Space Space Space

Process 1 Process 2 Process n

A. Mäder 1185
Prozessabbild / Process image (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

Process
Control Block
Running

Ready

Blocked

A. Mäder 1186
Kontextwechsel
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Interrupt-Mechanismen
I Interrupt: asynchrones, externes Ereignis
I Trap: Fehler während der Programmabarbeitung
I System-Call: Aufruf einer Betriebssystemfunktion
I kein „wartender“ Interrupt ⇒ nächsten Befehl holen
I Interrupt löst Kontextwechsel aus
I Programmzähler mit Interrupt Handler initialisieren
I Wechsel User Mode ⇒ Kernel Mode für privilegierte Instruktionen
I Kontextwechsel
I Kontext des Prozesses sichern
I Prozesskontrollblock aktualisieren
I –"– in „passende“ Warteschlange einfügen
I anderen Prozess zur Ausführung wählen
I dessen Prozesskontrollblock aktualisieren
I Speicherstrukturen für neuen Prozess aktualisieren (Seitentabelle)
I Kontext des neuen Prozesses einrichten

A. Mäder 1187
Kontextwechsel (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Realisierungen Process
Identification
I getrennter Betriebssystemkernel Processor State Process Control
Information Block
P1 P2 Pn
Process Control
Information
Kernel

User Stack
I innerhalb des Benutzerprogramms
P1 P2 Pn Private User
OS OS OS Address Space
Func- Func- Func- (Programs, Data)
tions tions tions

Process Switching Functions

Kernel Stack
I eigene Services/Prozesse (Microkernel)
P1 P2 Pn OS1 OSk Shared Address
Space
Process Switching Functions

A. Mäder 1188
Prozesse und Threads
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Thread / Lightweight Process


I Betriebssystem: Zuordnung zu Prozessor (CPU)

⇒ Programmablauf (Scheduling, Dispatching)

I Prozess
Betriebssystem: Zuordnung zu Ressourcen
I

(Speicher, Dateien, I/O . . . )


⇒ gesamter Kontrollblock

A. Mäder 1189
Prozesse und Threads (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Multithreading
I mehrere parallele Ausführungen innerhalb eines Prozesses
I von Programmiersprache und Betriebssystem abhängig

one process one process


one thread multiple threads

multiple processes multiple processes


one thread per process multiple threads per process

= instruction trace

A. Mäder 1190
Threads
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I eigener Zustand (= b Prozesszustand)


I eigener Kontext
I eigener Stack
I ggf. eigenen, statischen (Variablen-) Speicher
I Zugriff aller Datenstrukturen und Ressourcen des Prozesses
I geteilt mit allen anderen Threads
Single-Threaded Multithreaded
Process Model Process Model
Thread Thread Thread
Thread Thread Thread
Process User Control Control Control
Control Stack Block Block Block
Block

Process User User User


User Kernel Stack Stack Stack
Control
Address Stack
Block
Space

User Kernel Kernel Kernel


Address Stack Stack Stack
Space

A. Mäder 1191
Threads (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Vor- und Nachteile


+ einfacher zu verwalten / erzeugen
+ schneller zu beenden
+ Wechsel zwischen Threads schneller als Prozess-Kontextwechsel
+ effizientere Kommunikation
+ effektiv, wenn auf I/O gewartet wird, z.B.: Serverdienste,
RPC (Remote procedure calls), Browser-Tabs . . .
+ Parallelität ausnutzen
− Synchronisation wichtig!
alle Threads arbeiten im gleichen Adressraum
I Arten von Threads
I User Level Thread (ULT), eigene Bibliotheken
+ Thread-Wechsel ohne Kernel Privilegien
+ spezifisches (eigenes!) Scheduling
+ läuft auf allen Betriebssystemen
− für Kernel nur ein Ablauf → keine Parallelität, System-Call
blockiert alles

A. Mäder 1192
Threads (cont.)
15.3 Betriebssysteme - Prozesse und Threads 64-040 Rechnerstrukturen und Betriebssysteme

I Kernel Level Thread (KLT)


+ mehrere Threads in Multiprozessorumgebung
+ Prozess (andere Threads) kann trotz blockiertem Thread
weiterlaufen
+ Betriebssystem selbst kann Multithreaded sein
− Wechsel zwischen Threads eines Prozesses bedingt Moduswechsel
I Mischformen

Threads User User Threads User


Library Space Space Library Space

Kernel Kernel Kernel


Space Space Space

P P P

(a) Pure user-level (b) Pure kernel-level (c) Combined

User-level thread Kernel-level thread P Process

A. Mäder 1193
Nebenläufigkeit
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I nebenläufige Prozesse und Threads


I Multiprogramming: viele Prozesse, ein Prozessor
I Multiprocessing: viele Prozesse, mehrere Prozessoren
I verteiltes Rechnen
⇒ abwechselndes und überlapptes Rechnen
⇒ Timing / Abarbeitungsgeschwindigkeit nicht vorhersehbar
I Aktivitäten anderer Prozesse oder der Benutzer
I Interrupts
I Scheduling durch Betriebssystem
I Begriffe
I atomare Operation: Funktion oder Aktion; kann nicht
unterteilt/unterbrochen werden, auch wenn sie aus mehreren
Schritten besteht. Wird komplett oder gar nicht wirksam.
Zentraler Mechanismus, zur Trennung nebenläufiger Prozesse.
I Critical Section / kritische Sektion: Codebereiche mehrerer
Prozesse, in denen auf gemeinsame Ressourcen (z.B. Speicher)
zugegriffen wird.
A. Mäder 1194
Nebenläufigkeit (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Deadlock: zwei oder mehr Prozesse können nicht weiterarbeiten,


da sie gegenseitig aufeinander warten.
I Livelock: zwei oder mehr Prozesse wechseln ständig ihre
Zustände durch Aktivitäten jeweils anderer Prozesse, ohne
Fortschritte in der Bearbeitung.
I Mutual Exclusion / gegenseitiger Ausschluss: wenn ein
Prozess in seiner Critical Section ist, kann kein zweiter Prozess in
einer Critical Section sein, die die gleichen Ressourcen nutzt.
I Race Condition: mehrere Threads/Prozesse lesen und schreiben
Daten, wobei das Ergebnis von deren zeitlicher Reihenfolge
abhängig ist.
I Starvation / „verhungern“: ein lauffähiger Prozess könnte
(weiter-) arbeiten, wird aber nie bedient.
I Kommunikationsmechanismen zwischen Prozessen/Threads
I gemeinsamer Speicher (Shared Memory) ⇒ Mutual Exclusion
I Nachrichtenaustausch

A. Mäder 1195
Mutual Exclusion / gegenseitiger Ausschluss
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I notwendig, um Race Conditions zu vermeiden


I durch Sicherung von Critical Sections
I mögliche Probleme: Deadlock, Starvation

I Uniprozessor: keine Interrupts in Critical Section


I atomare Hardwareoperationen („compare & swap“)
+ gilt für: Uni-/Multiprozessor, beliebige Anz. Prozesse
+ einfach zu verifizieren
+ für beliebige Anzahl kritischer Sektionen
− Busy-waiting: Prozessor arbeitet immer
− Starvation möglich (wenn mehrere Prozesse warten)
− Deadlock möglich

A. Mäder 1196
Mutual Exclusion / gegenseitiger Ausschluss (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Software Mechanismen
I Implementierung in Software nicht trivial!!!
(Dekker-Algorithmus; E. W. Dijkstra; Peterson-Algorithmus)
I Semaphor: Integer Variable, für die drei atomare Operationen
möglich sind: initialisieren, increment, decrement
I Mutex / binärer Semaphor: Werte 0 und 1
I Monitor: Programmiersprachen Konzept, das Variablen und
Zugriffsprozeduren als Datentyp kapselt. Immer nur ein Prozess
hat Zugriff darauf.

A. Mäder 1197
Semaphor
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Integer Variable, initialisiert mit Anz. gleichzeitiger Zugriffe


I atomare Operationen
semWait decrement + aufrufender Prozess muss ggf. warten
⇒ Beginn der Critical Section
semSignal increment + ein wartender Prozess kann starten
⇒ Ende der Critical Section
I starke Semaphor: am längsten wartender Prozess wird gestartet
⇒ Queue für wartende Prozesse
I schwache Semaphor: beliebiger, wartender Prozess wird gewählt

A. Mäder 1198
Semaphor (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiele
Queue for Value of
semaphore lock semaphore lock A B C
Critical
1 region

Normal
semWait(lock)
execution
0
Blocked on
semWait(lock)
semaphore
B –1 lock

semWait(lock)

C B –2
semSignal(lock)

C –1

semSignal(lock)

semSignal(lock)

1
Note that normal
execution can
proceed in parallel
but that critical
regions are serialized.

A. Mäder 1199
Semaphor (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

A issues semWait, later times out


1 Processor
C D B A D B A C
Ready queue Processor Ready queue
s=1 s=0 5

C issues semWait
Blocked queue Blocked queue

Processor
A CD B
Ready queue
s=0 2

B issues semWait
Blocked queue

Processor Processor
AC D D
Ready queue D issues semSignal Ready queue D issues semSignal
s = –1 3
s = –3 6

B C A B
Blocked queue Blocked queue
D issues semSignal, later times out
4 Processor
B AC D C D
Ready queue Processor Ready queue D issues semSignal
s=0 s = –2 7

A B
Blocked queue Blocked queue

A. Mäder 1200
Monitor
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I in Programmiersprachen: Concurrent Pascal, Ada, Modula . . .


I in Java (synchronized), aber keine Bedingungsvariablen
I einfacher zu handhaben als Semaphor, gleiche Funktionalität
I nur ein Prozess darf im Monitor sein
I Synchronisation: Bedingungsvariablen (condition variables) und
Funktionen wait, signal
I mehrere Warteschlangen: extern (Eintritt in Monitor),
für jede Bedingungsvariable

A. Mäder 1201
Monitor (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

queue of
entering
processes

monitor waiting area Entrance

MONITOR

condition c1 local data

condition variables

Procedure 1

condition cn

Procedure k

urgent queue

initialization code

Exit

A. Mäder 1202
Nachrichtenaustausch (Message Passing)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I geht auch für (räumlich) verteilte Systeme


I Kommunikationsfunktionen
send ( hdsti , hdatai ) sendet Daten
blockierend / nicht blockierend
receive ( hsrci , hdatai ) empfängt Daten
blockierend / nicht blockierend / testend
I Varianten
I block. send + block. receive ⇒ Rendezvous
nicht block. send + block. receive
nicht block. send + nicht block. receive
I direkte Adressierung (s.o.) / indirekte Adressierung
⇒ 1:1, 1:n, m:1, m:n Beziehungen
process P is process Q is
... ...
send(Q, A) receive (P, A)
... ...

A. Mäder 1203
Deadlock
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Dauerhaftes Blockieren mehrerer Prozesse, die um Ressourcen


konkurrieren, bzw. miteinander kommunizieren
I Deadlock, wenn jeder Prozess blockiert auf etwas wartet, was
nur ein anderer blockierter Prozess anstoßen kann
I im Allgemeinen: keine effiziente Lösung

A. Mäder 1204
Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel: „rechts vor links“

c b 2 3 2

4 d a 4 1

(a) Deadlock possible (b) Deadlock

I jedes Fahrzeug braucht 2 Ressourcen


1: a,b 2: b,c 3: c,d 4: d,a

A. Mäder 1205
Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel: zwei Programme, zwei Mutexe


process P is process Q is
... ...
get(A) get(B)
... ...
get(B) get(A)
... ...
release (A) release (B)
... ...
release (B) release (A)
... ...
I alternierender Ablauf der Prozesse
I zweidimensional dargestellt

A. Mäder 1206
Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

Progress
of Q
1 2
Release
A
P and Q
want A
A Release
Required B

Get A
3 deadlock P and Q
B
inevitable want B
Required
5
Get B
4
6

Progress
Get A Get B Release A Release B of P
= both P and Q want resource A
A
= both P and Q want resource B
Required

= deadlock-inevitable region B Required

= possible progress path of P and Q.


Horizontal portion of path indicates P is executing and Q is waiting.
Vertical portion of path indicates Q is executing and P is waiting.

A. Mäder 1207
Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I vorheriges Beispiel ohne Deadlock


process P is process Q is
... ...
get(A) get(B)
... ...
release (A) get(A)
... ...
get(B) release (B)
... ...
release (B) release (A)
... ...

A. Mäder 1208
Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

Progress
of Q

1 2 3
Release
A
4
A Release P and Q
Required B want A

P and Q
Get A
want B

B
Required
5
Get B

Progress
Get A Release A Get B Release B of P

= both P and Q want resource A A Required B Required

= both P and Q want resource B = possible progress path of P and Q.


Horizontal portion of path indicates P is executing and Q is waiting.
Vertical portion of path indicates Q is executing and P is waiting.

A. Mäder 1209
Ressourcen
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I wiederverwendbare (reusable) Ressource


I wird bei Benutzung durch Prozess/Task nicht verbraucht
I Prozessor, I/O-Kanal, Hauptspeicher, sekundärer Speicher,
Datenstrukturen
I verbrauchbare (consumable) Ressource
I wird erzeugt und bei Nutzung verbraucht
I Interrupts, Signale, Nachrichten etc. (in FIFOs)
I Beispiel: wiederverwendbare Ressource = 200 KiB Speicher
process P is process Q is
... ...
malloc (70 KiB) malloc (80 KiB)
... ...
malloc (80 KiB) malloc (60 KiB)
... ...

A. Mäder 1210
Ressourcen (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel: verbrauchbare Ressource = Nachrichten,


receive blockierend
process Q is process P is
... ...
receive (P, M1) receive (Q, M3)
... ...
send(M2 , P) send(M4 , Q)
... ...

A. Mäder 1211
Bedingungen für Deadlock
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

1. Mutual Exclusion
I ohne Mutual Exclusion kein Deadlock
⇒ aber u.U. inkonsistente Daten
2. Hold-and-Wait
I Prozess hat exklusiven Zugriff auf Ressource und fragt weitere an
3. No Preemption: Ressourcen können nicht entzogen werden
I Preemption hier als zwangsweiser Entzug der Ressource
I Circular Wait: mehrere Prozesse/Tasks warten zyklisch
aufeinander

⇒ 1. bis 3. notwendige Bedingungen


+ Circular Wait (zur Laufzeit) = Deadlock

A. Mäder 1212
Maßnahmen gegen Deadlock
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

1. Deadlock verhindern
I indirekt: drei notwendige Bedingungen für Deadlock
I zu Mutual Exclusion: meist unverzichtbar
I zu Hold-and-Wait: Prozess fordert gleichzeitig (atomar) alle
Ressourcen/Locks an
I zu No-Preemption: Test auf Ressource, wenn nicht verfügbar: kein
Warten, sondern Rückgabe; Betriebssystem „entzieht“ Ressource
I direkt: Circular Wait nicht zulassen
I Einführen einer Ordnung/Reihenfolge für alle Ressourcen
I muss in allen Prozessen eingehalten werden
2. Deadlock vermeiden
Ressource nicht zuteilen, wenn Deadlock möglich
I

⇒ algorithmisch lösbar (Banker’s algorithm)


I Prozess nicht starten, der zu Deadlock führen kann

+ weniger Restriktiv als „Deadlock verhindern“


+ kein Rollback nötig, wie in „Deadlock Erkennung“

A. Mäder 1213
Maßnahmen gegen Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

3. Deadlock Erkennung
I Periodischer Test auf Deadlock und ggf. (partielles) Rücksetzen

+ 1. und 2. schränken Prozesse ein;


gegenteiliger Ansatz: Zugriff erlauben
+ einfacher Algorithmus
− Overhead durch periodische Checks
− „Zurücksetzen“ der Prozesse nicht trivial; Checkpoints

⇒ Einteilung der Ressourcen in „Klassen“ mit verschiedenen


„Arten/Typen“ von Deadlocks und Einsatz unterschiedlicher
Deadlock Strategien

A. Mäder 1214
Maßnahmen gegen Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

Resource Allocation Major


Approach Different Schemes Major Advantages
Policy Disadvantages

•Inefficient
•Works well for •Delays process
processes that perform a initiation
Requesting all resources at
single burst of activity •Future resource
once
•No preemption requirements must
necessary be known by
processes

•Convenient when
Conservative;
applied to resources
Prevention undercommits •Preempts more
Preemption whose state can be
resources often than necessary
saved and restored
easily

•Feasible to enforce via


compile-time checks
•Disallows
•Needs no run-time
Resource ordering incremental
computation since
resource requests
problem is solved in
system design

•Future resource
Midway between that requirements must
Manipulate to find at least •No preemption
Avoidance of detection and be known by OS
one safe path necessary
prevention •Processes can be
blocked for long
periods

Very liberal; •Never delays process


requested resources Invoke periodically to test initiation •Inherent preemption
Detection
are granted where for deadlock •Facilitates online losses
possible handling

A. Mäder 1215
Maßnahmen gegen Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

I Graph zum Ressourcenbesitz


Requests Held by
P1 Ra P1 Ra

(a) Resouce is requested (b) Resource is held

Ra Ra

He He
ld ld
sts by es
ts by
q ue qu
Re Re

P1 P2 P1 P2
ts ts
He es He es
qu qu
ld
by Re ld
by Re

Rb Rb

(c) Circular wait (d) No deadlock

A. Mäder 1216
Maßnahmen gegen Deadlock (cont.)
15.4 Betriebssysteme - Synchronisation und Kommunikation 64-040 Rechnerstrukturen und Betriebssysteme

P1 P2 P3 P4

Ra Rb Rc Rd

Kreuzung: „rechts vor links“

I Algorithmen zu Deadlock Vermeidung oder Erkennung nutzen


daraus abgeleitete Matrizen zu: Ressourcenanfragen und -besitz

A. Mäder 1217
Scheduling und Ressourcenmanagement
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Hauptfunktionalität von Betriebssystemen:


Ressourcenmanagement
wichtig dabei Effizienz
I
Antwortverhalten (Responsiveness)
Fairness
⇒ Scheduling / Ablaufplanung
I betrifft mehrere Ressourcen: Prozessor, Speicher, I/O Geräte

I Long-term: Welche Prozesse sollen in Menge der Jobs?


I beeinflusst Multiprogramming: Anzahl der Jobs auf Computer
I Strategien: First-come, First-served; nach Prioritäten; Ressourcen
I Medium-term: Welche Prozesse sollen in Hauptspeicher?
I Teil der Speicherverwaltung → Abschnitt 15.6
Speicherverwaltung
I Auswirkungen auf Multiprogramming: Prozesse nicht lauffähig,
wenn nicht im Speicher
A. Mäder 1218
Scheduling und Ressourcenmanagement (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Short-term: Welcher Prozess wird durch CPU ausgeführt?


I Dispatcher: wird häufig aufgerufen
I Start durch: Interrupts, System-Calls, Signale (Semaphor, Mutex)
I quantitative Kriterien
Benutzer: Antwortverhalten (Responsiveness)
System: Prozessornutzung, Job-Durchsatz, Ressourcenauslastung
I qualitative Kriterien Fairness, Deadlockfrei, keine Starvation,
Vorhersagbarkeit, Echtzeitfähigkeit etc.
I I/O Scheduler: Welche I/O-Anfrage geht an Gerät?
I mehrere
I gerätespezifisch

A. Mäder 1219
Scheduling und Ressourcenmanagement (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I verschiedene Zustände im
Prozessmodell (vergl. Folie 1177)
Running

Ready

Blocked

Short Term

Blocked,
Suspend

Ready,
Suspend

Medium Term

Long Term

New Exit

A. Mäder 1220
Scheduling und Ressourcenmanagement (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Scheduling Queues
Long-term Time-out
scheduling

Batch Ready Queue Short-term


Release
jobs scheduling
Processor

Medium-term
scheduling
Interactive Ready, Suspend Queue
users

Medium-term
scheduling

Blocked, Suspend Queue

Blocked Queue
Event Event Wait
Occurs

A. Mäder 1221
Short-term Scheduling
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Aktivierung
I neuer Prozess in Ready Queue
I Interrupt (bringt Prozess in Ready)
I periodisch
I Funktion zur Auswahl der Prozesse abhängig von
I Prioritäten
I Ressourcenbedarf
I Prozessabarbeitung
w : bisherige Wartezeit
e : bisherige Ausführungszeit (Execution time)
s : gesamte Ausführungszeit (Service time)
I Preemption: Unterbrechung von Jobs?
I ohne: gestarteter Prozess läuft bis Ende oder I/O waiting
I mit: Prozess wird unterbrochen und in Ready-Queue eingereiht

A. Mäder 1222
Short-term Scheduling (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Short-term Queues mit Prioritäten


RQ0 Release
Dispatch
Processor

RQ1

Admit

RQn

Preemption

Event Wait
Event
occurs Blocked Queue

A. Mäder 1223
Scheduling Algorithmen
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I First-come, First-served (FCFS)


I Non-Preemptive
I einfache Implementation: FIFO
I bevorzugt länger laufende Prozesse
I bevorzugt rechenlastige Prozesse gegenüber I/O-lastigen

I Round-Robin (RR) – Zeitscheiben Verfahren


I Preemptive
I Länge des Zeitslots?
I Gut für Transaction Processing (Durchsatz, Fairness)

A. Mäder 1224
Scheduling Algorithmen (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Round Robin Queues


Time-out

Ready Queue
Admit Dispatch Release
Processor

Auxiliary Queue

I/O 1 I/O 1 Wait


Occurs
I/O 1 Queue

I/O 2 I/O 2 Wait


Occurs
I/O 2 Queue

I/O n I/O n Wait


Occurs
I/O n Queue

A. Mäder 1225
Scheduling Algorithmen (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Shortest Process Next (SPN)


I Non-Preemptive
I Prozess mit kürzester Ausführungszeit startet
I Ausführungszeit s schätzen?
I Starvation für lang laufende Prozesse möglich
I Interaktive Prozesse: Durchschnittsbildung der letzten
Aktivitäten, ggf. „exponentielles Altern“ (= Wichtung älterer
Werte nimmt ab)
I Shortest Remaining Time (SRT)
I Preemptive Version von SPN
I Prozess mit kürzester Restzeit startet
I Ausführungszeit s schätzen?
I Starvation für lang laufende Prozesse möglich
I Highest Response Ratio Next (HRRN)
I Non-Preemptive
I Response Ratio: r = (w s+s)
I Prozess mit größtem r startet
I Fair, auch für lang laufende Prozesse wegen w
A. Mäder 1226
Scheduling Algorithmen (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Feedback Scheduling
I Preemptive
I Round-Robin mit mehreren Queues: Start in Hochpriorisierter,
sukzessiver Abstieg in weniger priorisierte Queues
I relativer Vorzug kurz laufender Prozesse
RQ0 Release
Admit
Processor

RQ1 Release
Processor

RQn Release
Processor

A. Mäder 1227
Scheduling Algorithmen (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I . . . viele weitere Algorithmen, es fehlen


I Gruppierung von Prozessen (Process Groups)
I periodische Tasks
I Echtzeitsysteme: Prozesse haben eine Deadline!
Round
FCFS SPN SRT HRRN Feedback
robin
Selection
max[w] constant min[s] min[s – e] (see text)
function

Non- Preemptive Non- Non- Preemptive


Decision Preemptive
(at time (at time
mode preemptive preemptive (at arrival) preemptive
quantum) quantum)

Through- May be low


Not Not
if quantum High High High
Put emphasized emphasized
is too small
May be
high,
Provides Provides
especially if
good good Provides
there is a
Response response response good Provides good Not
large
time time for time for response response time emphasized
variance in
short short time
process
processes processes
execution
times
Overhead Minimum Minimum Can be high Can be high Can be high Can be high
Penalizes
short
Penalizes Penalizes May favor I/
Effect on processes; Fair
long long Good balance O bound
processes penalizes I/ treatment
processes processes processes
O bound
processes
Starvation No No Possible Possible No Possible

A. Mäder 1228
Scheduling Algorithmen (cont.) 0 5 10 15 20
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

Beispiel
Fir st-Come-Fir st B
I Ser ved (FCFS) C
D
Process Arrival Time Service Time E

A 0 3 A
Round-Robin B
B 2 6 (RR), q = 1 C
C 4 4 D
E
D 6 5
A
E 8 2 Round-Robin B
(RR), q = 4 C
D
E

A
Shor test Process B
Next (SPN) C
D
E

A
Shor test Remaining B
Time (SRT) C
D
E

A
Highest Response B
Ratio Next (HRRN) C
D
E

A
Feedback B
q=1 C
D
E

A
Feedback B
q = 2i C
D
E
A. Mäder 1229
Scheduling Algorithmen (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Performanz des Scheduling? – Bewertung?


I Rechnersystem: Desktop, Kontroll-/Steuerungsrechner, Server
(DB, Web-Dienste . . . ), HPC (Großrechner, Supercomputer)
I Anwendungsszenarien: welche, wie viele Prozesse?
I I/O: welche Geräte, wie schnell?
I Aufwand und Effizienz des Scheduling
I Aufwand für Kontextwechsel

⇒ Modellierung über Warteschlangentheorie, stochastische Prozesse

A. Mäder 1230
Multiprozessor Scheduling
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I unterschiedliche Kopplungen:
Cluster (schwach) . . . Symmetrical Multiprocessing (stark)
I Scheduling auch für Spezial- (Co-) Prozessoren
I Granularität, wichtig für Synchronisation
I Parallelität inhärent in Thread
I Parallelität innerhalb eines Prozesses / Multithreading
I kommunizierende Prozesse (Shared-Memory)
I verteilte Prozesse in Netzwerk (Message-Passing)
I Menge unabhängiger Prozesse

A. Mäder 1231
Multiprozessor Scheduling (cont.)
15.5 Betriebssysteme - Scheduling 64-040 Rechnerstrukturen und Betriebssysteme

I Zuordnung von Prozessen zu Prozessoren


I dynamisch: Menge von Prozessen → Pool von Prozessoren
I statisch: Prozess wird Prozessor zugeordnet
+ Scheduling einfacher
+ Group-Scheduling
− ggf. Prozessorleerlauf (dann Load-Balancing)

I Architekturen (Wo läuft der Scheduler?)


I Peer Systeme / verteiltes Scheduling
I Master-Slave
+ einfach zu implementieren
+ weniger Overhead
− Point of Failure
− Bottleneck

A. Mäder 1232
Aufgaben des Betriebssystems
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Trennung der Prozesse voneinander


I Verwaltung von dynamischem Speicher
I Unterstützung modularer Programme
I Schutz: Integrität der Daten
I Schutz: Durchsetzung von Zugriffsrechten
I Realisierung von Langzeitspeicher (Dateisysteme)

A. Mäder 1233
Virtueller Speicher
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I sekundärer Speicher (HDD, SSD) ist Teil des Speichers


I logische Adressen in Programmen sind unabhängig von
I dem physikalisch vorhandenem Speicher
I physikalischen Adressen (Adressen zur Laufzeit)
I mehrere Prozesse, Benutzerjobs. . . sind gleichzeitig im Speicher

⇒ Adressen im Code werden zu virtuellen Adressen:


logische Adresse + Adressübersetzung
I Adressübersetzung entspricht Funktion
I meist als Tabelle realisiert

A. Mäder 1234
Virtueller Speicher (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Frame / Kachel
I Block fester Größe im Hauptspeicher

I Page / Seite
Block fester Größe im sekundären Speicher (HDD, SSD),
I

kann temporär in Frame (im Hauptspeicher) kopiert werden


I

⇒ Paging

I Segment
I Block variabler Größe im sekundären Speicher, kann temporär
I in passenden Bereich im Hauptspeicher kopiert werden

⇒ Segmentierung
I in Seiten unterteilt werden, die jeweils kopiert werden

⇒ Segmentierung + Paging

A. Mäder 1235
Memory Management
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Adressumsetzung / Relocation
I logische Adressen: Adressen in (Assembler-) Programm
I relative Adressen:
relativ zu Bezug (Basisadresse), i.d.R. logische Adressen
I physikalische / absolute Adressen:
Adressen des Hauptspeichers
Process control
Process Control Block
information Entry point
to program
Branch
Program instruction

Increasing
address
values
Reference
to data

Data

Current top
of stack
Stack

A. Mäder 1236
Memory Management (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Swapping: Prozess auslagern, u.U. an anderer Stelle in


Hauptspeicher fortsetzen
I Abbildung: logische → physikalische Adressen

Relative address

Process Control Block


Base Register

Adder Program

Absolute
address

Bounds Register Comparator

Data
Interrupt to
operating system

Stack

Process image in
main memory

A. Mäder 1237
Memory Management (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Schutz, hier Zugriff


I Relocation verwaltet auch Zugriffsrechte auf Speicherbereiche
I bei Adressumrechnung in Segment- und Seiten-Tabellen
I gemeinsam genutzte Code- und Datenbereiche
I Relocation ermöglicht auch Einbindung von Speicherbereichen in
Adressraum mehrerer Prozesse
gemeinsam genutzte Segmente Main Memory
Address
I 0

20K
Dispatcher X
35K No access
allowed
50K
Process A
80K
90K Branch instruction
(not allowed)
Process B X
Reference to
data (allowed)

140K

Process C
Reference to
data (not allowed)
X
190K

A. Mäder 1238
Memory Management (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Trennung von logischer und physischer Organisation


1. Segmentierung
2. Paging / Seitenadressierung
3. Kombination von: Segmentierung und Paging
I bei Programmlauf: nicht alle Segmente/Seiten des Prozesses
müssen gleichzeitig in Hauptspeicher sein
I Resident Set: Adressbereiche (Text, Data) in Hauptspeicher
I Working Set: im Programm gerade genutzt (Lokalität)
I während Programmlauf
1. Interrupt, wenn Adresse des Prozesses nicht in Hauptspeicher
2. Prozess wechselt in „blocked“
3. Datentransfer: sekundärer Speicher → Hauptspeicher durch DMA
(im Hintergrund)
4. Dispatcher lässt anderer Prozess rechnen
5. Interrupt, wenn Datentransfer fertig
6. Prozess wechselt in „ready“

A. Mäder 1239
Memory Management (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

+ kleinerer Adressraum je Prozess ⇒ mehr Prozesse im System


⇒ bessere CPU-Auslastung
+ Prozesse können größer sein als gesamter Hauptspeicher
+ für Programmierer transparent,
von Betriebssystem und HW verwaltet

A. Mäder 1240
Memory Management (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

Technique Description Strengths Weaknesses

I Memory Management Main memory is divided into a


Inefficient use of
memory due to internal
number of static partitions at Simple to implement;
fragmentation;
Fixed Partitioning system generation time. A process little operating system
maximum number of
may be loaded into a partition of overhead.
active processes is
equal or greater size.
fixed.

Inefficient use of
Partitions are created dynamically, No internal
processor due to the
so that each process is loaded into a fragmentation; more
Dynamic Partitioning need for compaction to
partition of exactly the same size as efficient use of main
counter external
that process. memory.
fragmentation.

Main memory is divided into a


number of equal-size frames. Each
process is divided into a number of
equal-size pages of the same length No external A small amount of
Simple Paging
as frames. A process is loaded by fragmentation. internal fragmentation.
loading all of its pages into
available, not necessarily
contiguous, frames.

No internal
Each process is divided into a
fragmentation; improved
number of segments. A process is
memory utilization and
Simple Segmentation loaded by loading all of its External fragmentation.
reduced overhead
segments into dynamic partitions
compared to dynamic
that need not be contiguous.
partitioning.

No external
As with simple paging, except that
fragmentation; higher
it is not necessary to load all of the
Virtual Memory degree of Overhead of complex
pages of a process. Nonresident
Paging multiprogramming; memory management.
pages that are needed are brought in
large virtual address
later automatically.
space.

No internal
As with simple segmentation,
fragmentation, higher
except that it is not necessary to
degree of
Virtual Memory load all of the segments of a Overhead of complex
multiprogramming;
Segmentation process. Nonresident segments that memory management.
large virtual address
are needed are brought in later
space; protection and
automatically.
sharing support.

A. Mäder 1241
Partitionierung
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Speicher in feste Bereiche unterteilt Operating System


8M
Operating System
8M
Anzahl, Größe der Speicherbereiche?
I
2M
− Programme zu groß für Partition 8M 4M

⇒ Overlay-Techniken 6M

− interne Fragmentierung: 8M

ungenutzter Speicher in Partition 8M

8M

⇒ schlechte Speicherausnutzung 8M

⇒ obsolet 8M

12M
8M

8M

16M

8M

(a) Equal-size partitions (b) Unequal-size partitions

A. Mäder 1242
Partitionierung (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I dynamische Partitionierung
Operating Operating Operating Operating
System 8M System System System

Process 1 20M Process 1 20M Process 1 20M

56M Process 2 14M Process 2 14M

36M
Process 3 18M
22M

4M

(a) (b) (c) (d)

Operating Operating Operating Operating


System System System System

Process 2 14M
Process 1 20M Process 1 20M 20M

6M
Process 4 8M Process 4 8M Process 4 8M
14M
6M 6M 6M

Process 3 18M Process 3 18M Process 3 18M Process 3 18M

4M 4M 4M 4M

(e) (f) (g) (h)


A. Mäder 1243
Partitionierung (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I externe Fragmentierung durch Ein- und Auslagern von Prozessen


I Platzierung: Best-fit, First-fit, Next-fit . . . 8M 8M

− Kompaktierung notwendig, Zeitaufwand! 12M


First Fit
12M

⇒ obsolet 22M
6M
Best Fit
Last 18M
allocated 2M
block (14M)

8M 8M

6M 6M

14M 14M

Next Fit
Allocated block

Free block
36M
20 M
Possible new allocation

(a) Before (b) After

A. Mäder 1244
Segmentierung
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

Virtual Address
Segment Number Offset

Segment Table Entry Present bit


P MOther Control Bits Length Segment Base Modified bit

I „logische“ Unterteilung des Programms (Programmiersicht)


I Text: Binärcode, read only
I Data: statische Daten + dynamischer Speicher (Heap), read write
I variable Größe der Segmente
I ähnlich dynamischer Partitionierung
I für Programmierer sichtbar

+ keine interne Fragmentierung


− externe Fragmentierung

A. Mäder 1245
Segmentierung (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Segmenttabelle hsegNri → hBasisadressei + hLängei


I wird für jeden Prozess angelegt
16-bit logical address
4-bit segment # 12-bit offset

0 0 0100101 1110 000

Length Base
0 001011101110 0000010000000000
1 011110011110 0010000000100000 +
Process segment table

00100011000 1 0 0 0 0
16-bit physical address

A. Mäder 1246
Segmentierung (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Adressierung

Virtual address Physical address


Seg # Offset = d + Base + d

Register
Seg Table Ptr

Segment table
d

Segment
Seg #
+
Length Base

Program Segmentation mechanism Main memory

A. Mäder 1247
Segmentierung (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel

MMU
Virtuelle Adresse Physikalische Adresse
zur
Laufzeit
pid = 1
phys. Mem. from processor
pid = 1 b f nt
upper bound virtual address base of segment
.data
4000 .text.
> +
.data 1
.data 1
access rights R/W
1000 I/D
S/U
.text 1 11000
0 .text 1 address physical addr
10000 access trap to memory
.text 2 9600
=
pid = 2 3600
.data 2
3000 1000 protection
.data 2 violation trap
......

......

400 Memory fragmentation


0 .text 2
0

A. Mäder 1248
Paging
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

Virtual Address
Page Number Offset Real
Memory Address
Processor Management
Virtual Unit
Page Table Entry Address Main
P MOther Control Bits Frame Number Memory

I Unterteilung des Programms


I Prozesse (Instruktionen+Daten) belegen mehrere Disk
Address
Speicherblöcke fester Größe ⇒ Seiten (Pages)
I dynamische Abbildung (Tabellen) zwischen
virtueller und realer, physikalischer Adresse Secondary
Memory
I Speicherzugriff:
hvirt. Adressei = hSeitennr.i + hoffseti
I Seite kann
1. an beliebiger Stelle Hauptspeicher stehen
2. auf sekundären Speicher (HDD, SSD) ausgelagert sein
I Verwaltung durch Memory Management Unit (MMU)

I für Programmierer transparent

A. Mäder 1249
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

A.1
A.0 A.2
0 0
A.5
1 1
2 2
B.0 B.1 B.2 B.3
3 3
4 4
5 5
6 6
A.7
7 User
A.9
8 program
B
9
A.8
10

User
program
A
B.5 B.6

Main Memory Disk

A. Mäder 1250
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Seitentabelle / Page Table hpageNri → hframeAddri


I wird für jeden Prozess angelegt
16-bit logical address
6-bit page # 10-bit offset

0 0 000101110111 10

0 000101
1 000110
2 011001
Process
page table

00011001110 1 1 1 1 0
16-bit physical address

A. Mäder 1251
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Adressierung

Virtual Address Physical Address


Page # Offset Frame # Offset

Register
n bits Page Table Ptr

Page Table
m bits
Offset
Page
Frame
Page#

+
Frame #

Program Paging Mechanism Main Memory

A. Mäder 1252
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Beispiel
Frame Main memory Main memory Main memory Main memory Main memory Main memory
number
0 0 A.0 0 A.0 0 A.0 0 A.0 0 A.0
1 1 A.1 1 A.1 1 A.1 1 A.1 1 A.1
2 2 A.2 2 A.2 2 A.2 2 A.2 2 A.2
3 3 A.3 3 A.3 3 A.3 3 A.3 3 A.3
4 4 4 B.0 4 B.0 4 4 D.0
5 5 5 B.1 5 B.1 5 5 D.1
6 6 6 B.2 6 B.2 6 6 D.2
7 7 7 7 C.0 7 C.0 7 C.0
8 8 8 8 C.1 8 C.1 8 C.1
9 9 9 9 C.2 9 C.2 9 C.2
10 10 10 10 C.3 10 C.3 10 C.3
11 11 11 11 11 11 D.3
12 12 12 12 12 12 D.4
13 13 13 13 13 13
14 14 14 14 14 14

(a) Fifteen Available Frames (b) Load Process A (c) Load Process B (d) Load Process C (e) Swap out B (f) Load Process D

nach (f)
0 0 0 — 0 7 0 4 13
1 1 1 — 1 8 1 5 14
2 2 2 — 2 9 2 6 Free frame
3 3 Process B 3 10 3 11 list
Process A page table Process C 4 12
page table page table Process D
page table

A. Mäder 1253
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Seitengröße
I 1 KiB, 4 KiB, 8 KiB . . . 16 GiB (Hardware-, BS-abhängig!)
I klein vs. groß
+ weniger interne Fragmentierung
− aber sehr viele Seiten
− Prozesstabelle größer
− Datentransfer zu sekundärem Speicher für große Seiten effizienter

I mehrstufige Übersetzung
Tabelle wird zu groß ⇒ mehrstufige Tabellen
I

− mehrfacher Zugriff langsam

A. Mäder 1254
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

mehrstufige Übersetzung

Virtual Address
10 bits 10 bits 12 bits Frame # Offset

Root page
table ptr

Page
Frame
+ +

4-kbyte page
Root page table table (contains
(contains 1024 PTEs) 1024 PTEs)

Program Paging Mechanism Main Memory

A. Mäder 1255
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Inverted Page Table


I statt (mehrerer) großer Seitentabellen (für alle virtuellen Adressen)
I eine Tabelle (für alle physikalischen Adressen)
I Hash-Funktion + verkettete Liste (Suche!)
Virtual Address
n bits
Page # Offset
Control
n bits bits
Process
hash m bits Page # ID Chain
function 0

2m 1 Frame # Offset
m bits
Inverted Page Table Real Address
(one entry for each
physical memory frame)
A. Mäder 1256
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Translation Lookaside Buffer (TLB)


I schneller Zugriff
I voll-assoziativer Cache
Secondary
Main Memory Memory
Virtual Address
Page # Offset

Translation
Lookaside Buffer

TLB hit
Offset

Load
page
Page Table

TLB miss

Frame # Offset
Real Address

Page fault

A. Mäder 1257
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I voll-assoziativer Cache
Virtual Address Virtual Address
Page # Offset Page # Offset
5 502 5 502

Page # PT Entries
19
511
37
27
14
37 1
211
5 37
90

37 502 37 502
Frame # Offset Translation Lookaside Buffer Frame # Offset
Real Address Real Address

Page Table

(a) Direct mapping (b) Associative mapping

A. Mäder 1258
Paging (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

TLB Operation
Virtual Address

Page # Offset
TLB
TLB miss
TLB
hit Cache Operation

Real Address

+ Tag Remainder Hit Value


Cache
Miss

Main
Memory

Page Table
Value

I TLB + Cache aus Speicherhierarchie

A. Mäder 1259
aktuelle Betriebssysteme
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Übersicht Adressierung
Logical address = Logical address =
Relative address = 1502 Page# = 1, Offset = 478 Segment# = 1, Offset = 752
0000010111011110 0000010111011110 0001001011110000

Segment 0
750 bytes
Page 0
User process
(2700 bytes)

752
478
Page 1

1950 bytes
Segment 1
Page 2

fragmentation
Internal

(a) Partitioning (c) Segmentation

(b) Paging
(page size = 1K)

A. Mäder 1260
aktuelle Betriebssysteme (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

Virtual Address
Segment Number Page Number Offset

Segment Table Entry


Control Bits Length Segment Base

Page Table Entry


Present bit
P MOther Control Bits Frame Number Modified bit

I Segmentierung + Paging
I Segmentierung ⇒ logische Trennung (Text, Data)
I + Paging ⇒ effiziente Verwaltung
I im Betriebssystem festlegen
I wann Seiten Laden? (auf Anfrage, Prepaging)
I wo in Hauptspeicher?, welche Seiten werden ausgelagert?
= Platzierungs- und Ersetzungsstrategie
I wieviel Multiprogramming? (Anzahl der Prozesse)
I wieviel Hauptspeicher pro Prozess (fest, dynamisch . . . )
I vielfältige Wechselwirkungen: Anwendungsszenario, Caching etc.
A. Mäder 1261
aktuelle Betriebssysteme (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Adressierung

Virtual Address
Seg # Page # Offset Frame # Offset

Seg Table Ptr

Segment Page
Table Table
Offset

Page#
Page
Frame
Seg#

+ +

Program Segmentation Paging Main Memory


Mechanism Mechanism

A. Mäder 1262
aktuelle Betriebssysteme (cont.)
15.6 Betriebssysteme - Speicherverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 1263
Ein-/Ausgabegeräte
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Mensch-Maschine Schnittstellen
I Displays, Tastatur, Maus, Terminals, Drucker . . .
I Schnittstellen zu Computerperipherie
I Festplatten, Speichermedien, Sensoren, Controller . . .
I Kommunikation zwischen Computersystemen
I Netzwerk, Modems . . .

I Charakteristika
I Datenrate
I Anwendung
I Schnittstellen
I Protokoll / Fehlerbedingungen
I Daten (Zeichen, Datenstrukturen, Blöcke von Bytes . . . )
I Repräsentation der Daten
I ...

A. Mäder 1264
Ein-/Ausgabegeräte (cont.)
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

Gigabit Ethernet

Graphics display

Hard disk

Ethernet

Optical disk

Scanner

Laser printer

Floppy disk

Modem

Mouse

Keyboard

101 102 103 104 105 106 107 108 109


Data Rate (bps)

A. Mäder 1265
I/O-Optimierung
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Effizienz
I I/O oft als „Bottleneck“ im System
I extrem langsam, verglichen mit Hauptspeicher oder CPU
I Generalität
einheitliche Schnittstelle für (möglichst viele) Geräte (-klassen)
I

sowohl als Programmierschnittstelle


I
I als auch für das Betriebssystem selber
I hierarchische, modulare Konzepte

⇒ wegen der völlig unterschiedlichen Geräteeigenschaften und


der Dynamik der technischen Entwicklung schlecht realisierbar
I stufenweise Entwicklung
1. Prozessor kontrolliert Gerät direkt
2. Prozessor kontrolliert Gerät über I/O-Modul (Controller)
3. + Interruptsteuerung
4. I/O-Controller hat Hauptspeicherzugriff (DMA)
5. I/O-Prozessor: eigener Befehlssatz (programmierbar), statt „Automat“
6. I/O-System mit eigenem Speicher = Computer, realisiert I/O-Dienst
A. Mäder 1266
Ein-/Ausgabe Behandlung
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

1. Programmed I/O
I/O-Modul führt Operation aus
I

setzt Bits in Status-Register (Kommunikation)


I
I Prozessor fragt periodisch Status ab

− „Busy-waiting“, schlechte Performanz

2. Interrupt gesteuert
Befehl von Prozessor an I/O-Modul
I

Interrupt, wenn I/O bereit


I
I Datentransfer durch Prozessor (in ISR)

− Beteiligung des Prozessors


Performanz (mehrere Instruktionen pro Datentransfer)
→ siehe 15.2 Betriebssysteme – Interrupts

A. Mäder 1267
Ein-/Ausgabe Behandlung (cont.)
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

3. DMA (Direct Memory Access)


I separate Hardwareeinheit mit Zugriff auf Systembus
I DMA-Controller übertragt selbständig Daten
I DMA-Kommando mit
I Lesen / Schreiben
I Adresse des I/O Geräts
I Startadresse in Hauptspeicher
I Anzahl Datenwörter
Data
I Konflikt, wenn Prozessor Bus benötigt Count

Data Lines Data


Register

Address
Address Lines Register

Request to DMA
Acknowledge from DMA
Control
Interrupt
Logic
Read
Write

A. Mäder 1268
Ein-/Ausgabe Behandlung (cont.)
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

DMA
Processor DMA I/O I/O Memory

(a) Single-bus, detached DMA

Processor DMA DMA Memory

I/O

I/O I/O

(b) Single-bus, Integrated DMA-I/O

System bus

Processor DMA Memory

I/O bus

I/O I/O I/O

(c) I/O bus

A. Mäder 1269
Ein-/Ausgabe Behandlung (cont.)
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I I/O Betriebsarten No Interrupts Use of Interrupts

I/O-to-memory transfer Programmed I/O Interrupt-driven I/O


through processor

Direct I/O-to-memory Direct memory access (DMA)


transfer

I Schnittstelle zum Benutzerprogramm / Buffering


lesend:
I „read-ahead“, Daten schon bereitstellen
schreibend: verzögerte (autonome) Ausführung
I

⇒ Zwischenspeicher, in der Regel FIFO


Operating System User Process

In
I/O Device

(a) No buffering

A. Mäder 1270
Ein-/Ausgabe Behandlung (cont.)
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

Operating System User Process

In Move
I/O Device

(b) Single buffering

Operating System User Process

In Move
I/O Device

(c) Double buffering

Operating System User Process

In Move
I/O Device •

(d) Circular buffering

A. Mäder 1271
Weitere Themen
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

I Festplattenzugriffe: das zentrale Thema bei I/O-Optimierung


viele Algorithmen zum „Umsortieren“ von Schreib-/Lesebefehlen
I

⇒ Optimierung des Durchsatzes


I Daten-Organisation
I Benutzer: logisch, Dateisysteme und Verzeichnisse
I Hardware: physikalisch, Blöcke Physical blocks Physical blocks
Records in main memory in secondary
buffers storage (disk)
File
Structure
Directory Access
management method Disk
Blocking scheduling

User & program


comands Operation, File I/O Free storage
File name manipulation management
functions

File
allocation

User access
control

File management concerns

Operating system concerns


A. Mäder 1272
Weitere Themen
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

A. Mäder 1272
Weitere Themen
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

ENDe
A. Mäder 1272
Weitere Themen
15.7 Betriebssysteme - I/O und Dateiverwaltung 64-040 Rechnerstrukturen und Betriebssysteme

ENDe
A. Mäder 1272
Literatur
15.8 Betriebssysteme - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[Sta17] W. Stallings: Operating Systems –


Internals and Design Principles.
9th, global ed., Pearson Education, 2017.
ISBN 978–1–292–21429–0
[Bau17] C. Baun: Betriebssysteme kompakt.
Springer-Verlag GmbH, 2017.
ISBN 978–3–662–53142–6
[Bra17] R. Brause: Betriebssysteme – Grundlagen und Konzepte.
Springer-Verlag GmbH, 2017.
ISBN 978–3–662–54099–2
[TB16] A.S. Tanenbaum, H. Bos: Moderne Betriebssysteme.
4. Auflage, Pearson Deutschland GmbH, 2016.
ISBN 978–3–8689–4270–5

A. Mäder 1273
Literatur (cont.)
15.8 Betriebssysteme - Literatur 64-040 Rechnerstrukturen und Betriebssysteme

[BO15] R.E. Bryant, D.R. O’Hallaron:


Computer systems – A programmers perspective.
3rd global ed., Pearson Education Ltd., 2015.
ISBN 978–1–292–10176–7. [Link]

A. Mäder 1274

Das könnte Ihnen auch gefallen