32
Verlässliche Echtzeitsysteme Übungen zur Vorlesung Triple Modular Redundancy Florian Schmaus, Simon Schuster Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) https://www4.cs.fau.de 30. April 2018 Schmaus, Schuster VEZS (30. April 2018) 1 – 32

Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Verlässliche EchtzeitsystemeÜbungen zur Vorlesung

Triple Modular Redundancy

Florian Schmaus, Simon Schuster

Friedrich-Alexander-Universität Erlangen-NürnbergLehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

https://www4.cs.fau.de

30. April 2018

Schmaus, Schuster VEZS (30. April 2018) 1 – 32

Page 2: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Keynote: Challenges in Safety-Critical Software Chris Hobbs

Senior Developer bei QNX

Ten Truths about Building Safe Embedded Software Systems

IEC 61508, IEC 62304/ISO 14971, ISO 26262, EN 5012x

Standards sind laufend in Entwicklung

Bitflips vs. Rowhammering

Safety vs. Security

+ Need for qualified developers

Schmaus, Schuster VEZS (30. April 2018) 2 – 32

Page 3: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Überblick

1 Wiederholung: Grundlagen Fehlerbäume

2 Wiederholung: Triple Modular Redundancy

3 Ausblick: Rechnerarchitektur, Replikation und Redundanz

4 Replikation von Code

Schmaus, Schuster VEZS (30. April 2018) 3 – 32

Page 4: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Überblick

1 Wiederholung: Grundlagen Fehlerbäume

2 Wiederholung: Triple Modular Redundancy

3 Ausblick: Rechnerarchitektur, Replikation und Redundanz

4 Replikation von Code

Schmaus, Schuster VEZS (30. April 2018) Wiederholung: Grundlagen Fehlerbäume 4 – 32

Page 5: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Fehlerbäume – Wiederholung

Ausfall: Kühl-system

Kühlsystem leckt

Dichtung Rohrleitung Druckbehälter

Pumpe

1

2

3

4

5

6 6 6

7

1. Schadensereignis

2. Ereignisse auf Ebene 2

3. Logische Verknüpfung

ODER-Verknüpfung

UND-Verknüpfung

XOR-Verknüpfung

atomares Ereignis

Eingang

4. Ereignisse auf Ebene 3

5. Logische Verknüpfung

6. Atomare Ereignisse

7. Eingänge zerlegen den Fehlerbaum 7→ NeuerTeilbaum

Schmaus, Schuster VEZS (30. April 2018) Wiederholung: Grundlagen Fehlerbäume 5 – 32

Page 6: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Überblick

1 Wiederholung: Grundlagen Fehlerbäume

2 Wiederholung: Triple Modular Redundancy

3 Ausblick: Rechnerarchitektur, Replikation und Redundanz

4 Replikation von Code

Schmaus, Schuster VEZS (30. April 2018) Wiederholung: Triple Modular Redundancy 6 – 32

Page 7: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Fehlerhypothese

1 0 1 1 0 1 1 1 0 0 1 0 1 0

1 0 1 1 0 1 1 0 0 0 1 0 1 0

1 0 1 1 0 1 1 1 0 0 1 0 1 0

Replikat 1

Replikat 2

Replikat 3

E

Wie viele Replikate benötigt man?

Arten des Fehlverhaltens (von n Replikaten sind f fehlerhaft)1. fail-silent 7→ Anzahl Replikate: n = f + 12. fail-consistent 7→ Anzahl Replikate: n = 2f + 13. malicious 7→ Anzahl Replikate: n = 3f + 1

Schmaus, Schuster VEZS (30. April 2018) Wiederholung: Triple Modular Redundancy 7 – 32

Page 8: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Triple Modular Redundancy

Sensorik Interface

Verarbeitung

VoterReplica

2

Replica1

Replica3

Aktorik

Schnittstelle sammelt Eingangsdaten (Replikdeterminismus)Verteilt Daten und aktiviert ReplikateMehrheitsentscheider (Voter) wählt ErgebnisErgebnis wird an Aktuator versendet

Redundanzbereich

Ausschließlich Replikatausführung

Erweiterung der Ausgangsseite mit InformationsredundanzMehrheitsentscheid über Berechnungsergebnisse

Schmaus, Schuster VEZS (30. April 2018) Wiederholung: Triple Modular Redundancy 8 – 32

Page 9: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Triple Modular Redundancy

Sensorik Interface

Verarbeitung

VoterReplica

2

Replica1

Replica3

Aktorik

Schnittstelle sammelt Eingangsdaten (Replikdeterminismus)Verteilt Daten und aktiviert ReplikateMehrheitsentscheider (Voter) wählt ErgebnisErgebnis wird an Aktuator versendet

Redundanzbereich

Ausschließlich Replikatausführung

Erweiterung der Ausgangsseite mit InformationsredundanzMehrheitsentscheid über Berechnungsergebnisse

Schmaus, Schuster VEZS (30. April 2018) Wiederholung: Triple Modular Redundancy 8 – 32

Page 10: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Replikdeterminismus

Replikat 1void repl_2(void* p){

ticks_t time =ezs_get_time();

...}

Replikat 2void repl_2(void* p){

ticks_t time =ezs_get_time();

...}

Replikat 3void repl_3(void* p){

ticks_t time =ezs_get_time();

...}

Sicherstellung Replikdeterminismus

Globale diskrete Zeitbasis

Einigung über Eingabewerte

Statische Kontrollstruktur der Replikate

Deterministische Algorithmen

+ Sicherstellung, dass Replikat innerhalb Zeitspanne Ergebnis liefert

Schmaus, Schuster VEZS (30. April 2018) Wiederholung: Triple Modular Redundancy 9 – 32

Page 11: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Process-Level Redundancy

Prozess 1

Prozess 2

Prozess 3

Replikationder Eingaben

Abstimmungder Ausgaben

Eingabe Ausgabe

Fehlertoleranzimplementierung

Betriebssystem

Mehrkernprozessor

Schmaus, Schuster VEZS (30. April 2018) Wiederholung: Triple Modular Redundancy 10 – 32

Page 12: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Überblick

1 Wiederholung: Grundlagen Fehlerbäume

2 Wiederholung: Triple Modular Redundancy

3 Ausblick: Rechnerarchitektur, Replikation und Redundanz

4 Replikation von Code

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 11 – 32

Page 13: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Ebenen

Übersetzter

Assemblierer

Betriebssystem

Hardwareentwurf

Hardwaresynthese

problemorientierte Programmiersprachenebene

Assembliersprachenebene

Machinenprogrammebene

Befehlssatzebene

Mikroarchitekturebene

digitale Logikebene

5

4

3

2

1

0

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 12 – 32

Page 14: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Digitale Logikebene

ROM DRAMSEL

Q

RS - FlipFlopVCC VCC

E1 E2

Q1 Q2

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 13 – 32

Page 15: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

MIPS: Single-Cycle 4.6 Pipelined Datapath and Control 287

fi ve stages as they complete execution. Returning to our laundry analogy, clothes get cleaner, drier, and more organized as they move through the line, and they never move backward.

Th ere are, however, two exceptions to this left -to-right fl ow of instructions:

■ Th e write-back stage, which places the result back into the register fi le in the middle of the datapath

■ Th e selection of the next value of the PC, choosing between the incremented PC and the branch address from the MEM stage

Data fl owing from right to left does not aff ect the current instruction; these reverse data movements infl uence only later instructions in the pipeline. Note that

WB: Write backMEM: Memory accessIF: Instruction fetch EX: Execute/address calculation

1

M

u

x

0

0M

u

x1 Address

Writedata

Readdata

Data

memory

Readregister 1

Readregister 2

Writeregister

Writedata

Registers

Readdata 1

Readdata 2

ALU

Zero

ALUresult

ADDAdd

resultShiftleft 2

Address

Instruction

Instruction

memory

Add

4

PC

Sign-

extend

0M

u

x1

32

ID: Instruction decode/register file read

16

FIGURE 4.33 The single-cycle datapath from Section 4.4 (similar to Figure 4.17). Each step of the instruction can be mapped onto the datapath from left to right. Th e only exceptions are the update of the PC and the write-back step, shown in color, which sends either the ALU result or the data from memory to the left to be written into the register fi le. (Normally we use color lines for control, but these are data lines.)

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 14 – 32

Source: D. A. Patterson und J. L. Hennessy, Computer organization anddesign: the hardware/software interface, 4th ed., 2012

Page 16: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

MIPS: Pipelining

4.6 Pipelined Datapath and Control 299

Programexecutionorder(in instructions)

lw $10, 20($1)

sub $11, $2, $3

add $12, $3, $4

lw $13, 24($1)

add $14, $5, $6

Time (in clock cycles)

Instructionfetch

Instructiondecode

ExecutionData

access

Dataaccess

Dataaccess

Dataaccess

Dataaccess

Write-back

CC 9CC 8CC 7CC 6CC 5CC 4CC 3CC 2CC 1

Instructionfetch

Instructionfetch

Instructionfetch

Instructionfetch

Instructiondecode

Instructiondecode

Instructiondecode

Instructiondecode

Execution Write-back

Execution Write-back

Execution Write-back

Execution Write-back

FIGURE 4.44 Traditional multiple-clock-cycle pipeline diagram of fi ve instructions in Figure 4.43.

Add

Address

Instruction

memory

Readregister 1

Readregister 2

Writeregister

Writedata

Readdata 1

Readdata 2

Registers Address

Writedata

Readdata

Data

memory

AddAdd

result

ALU ALUresult

Zero

Shift

left 2

Sign

extend

PC

4

ID/EXIF/ID EX/MEM

Memory

sub $11, $2, $3

Write-back

lw $10, 20($1)

Execution

add $12, $3, $4

Instruction decode

lw $13, 24 ($1)

Instruction fetch

add $14, $5, $6

16 32

Inst

ruct

ion

MEM/WB

0Mux

1

0Mux

1

1Mux

0

FIGURE 4.45 The single-clock-cycle diagram corresponding to clock cycle 5 of the pipeline in Figures 4.43 and 4.44. As you can see, a single-clock-cycle fi gure is a vertical slice through a multiple-clock-cycle diagram.

1. Allowing jumps, branches, and ALU instructions to take fewer stages than the fi ve required by the load instruction will increase pipeline performance under all circumstances.

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 15 – 32

Source: D. A. Patterson und J. L. Hennessy, Computer organization anddesign: the hardware/software interface, 4th ed., 2012

Page 17: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

MIPS: Pipelining

4.6 Pipelined Datapath and Control 299

Programexecutionorder(in instructions)

lw $10, 20($1)

sub $11, $2, $3

add $12, $3, $4

lw $13, 24($1)

add $14, $5, $6

Time (in clock cycles)

Instructionfetch

Instructiondecode

ExecutionData

access

Dataaccess

Dataaccess

Dataaccess

Dataaccess

Write-back

CC 9CC 8CC 7CC 6CC 5CC 4CC 3CC 2CC 1

Instructionfetch

Instructionfetch

Instructionfetch

Instructionfetch

Instructiondecode

Instructiondecode

Instructiondecode

Instructiondecode

Execution Write-back

Execution Write-back

Execution Write-back

Execution Write-back

FIGURE 4.44 Traditional multiple-clock-cycle pipeline diagram of fi ve instructions in Figure 4.43.

Add

Address

Instruction

memory

Readregister 1

Readregister 2

Writeregister

Writedata

Readdata 1

Readdata 2

Registers Address

Writedata

Readdata

Data

memory

AddAdd

result

ALU ALUresult

Zero

Shift

left 2

Sign

extend

PC

4

ID/EXIF/ID EX/MEM

Memory

sub $11, $2, $3

Write-back

lw $10, 20($1)

Execution

add $12, $3, $4

Instruction decode

lw $13, 24 ($1)

Instruction fetch

add $14, $5, $6

16 32

Inst

ruct

ion

MEM/WB

0Mux

1

0Mux

1

1Mux

0

FIGURE 4.45 The single-clock-cycle diagram corresponding to clock cycle 5 of the pipeline in Figures 4.43 and 4.44. As you can see, a single-clock-cycle fi gure is a vertical slice through a multiple-clock-cycle diagram.

1. Allowing jumps, branches, and ALU instructions to take fewer stages than the fi ve required by the load instruction will increase pipeline performance under all circumstances.Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 16 – 32

Source: D. A. Patterson und J. L. Hennessy, Computer organization anddesign: the hardware/software interface, 4th ed., 2012

Page 18: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

MIPS: Pipelining

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 17 – 32

Source: D. A. Patterson und J. L. Hennessy, Computer organization anddesign: the hardware/software interface, 4th ed., 2012

Page 19: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

MIPS: Pipelining 4.9 Exceptions 329

assume the instructions to be invoked on an exception begin like this:

80000180hex sw $26, 1000($0)80000184hex sw $27, 1004($0). . .

Show what happens in the pipeline if an overfl ow exception occurs in the add instruction.

Figure 4.67 shows the events, starting with the add instruction in the EX stage. Th e overfl ow is detected during that phase, and 8000 0180hex is forced into the PC. Clock cycle 7 shows that the add and following instructions are fl ushed, and the fi rst instruction of the exception code is fetched. Note that the address of the instruction following the add is saved: 4Chex + 4 = 50hex.

ANSWER

0

0

0 M

WB

WB

Data

memory

Instruction

memory

Mux

Mux

Mux

Mux

Mux

ALU

ID/EX

EX/MEM

Cause

EPC

MEM/WB

Forwarding

unit

PC

Control

EX

M

WB

IF/ID

M

u

x

Mux

Hazard

detection

unit

� Shift

left 2

IF.Flush

ID.Flush

EX.Flush

4

Sign-

extend

80000180

Registers

Mux

FIGURE 4.66 The datapath with controls to handle exceptions. Th e key additions include a new input with the value 8000 0180hex in the multiplexor that supplies the new PC value; a Cause register to record the cause of the exception; and an Exception PC register to save the address of the instruction that caused the exception. Th e 8000 0180hex input to the multiplexor is the initial address to begin fetching instructions in the event of an exception. Although not shown, the ALU overfl ow signal is an input to the control unit.Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 18 – 32

Source: D. A. Patterson und J. L. Hennessy, Computer organization anddesign: the hardware/software interface, 4th ed., 2012

Page 20: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Eigenschaften von CPU-Architekturen

Mikroprogrammierbar vs. Fixed-Function

Out-of-Order-Prozessoren

Sprungvorhersage

Transaktionaler Speicher

Superskalarität

Mehrkernarchitekturen

Hyperthreading

...

+ All diese zusätzlichen Fehlerpunkte müssen im Fehlermodellberücksichtigt werden

+ Ein Ein-Bit-Fehler in einer dieser Komponenten kann zu komplexenMehrbitfehlern auf ISA-Ebene führen

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 19 – 32

Page 21: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Ebenen

Übersetzter

Assemblierer

Betriebssystem

Hardwareentwurf

Hardwaresynthese

problemorientierte Programmiersprachenebene

Assembliersprachenebene

Machinenprogrammebene

Befehlssatzebene

Mikroarchitekturebene

digitale Logikebene

5

4

3

2

1

0

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 20 – 32

Page 22: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Speicherorganisation auf einem Mikrocontroller

ELF Header...

Symbol Table <a>

.rodata c=2

.data b=1s=3

.text main

.data b=1s=3

.rodata c=2

.text main

.data b=1s=3

.bss a=0

...x=?y=?p=

Stack

Heap

Flas

h / R

OM

RAM

copy

init

flash

compile / link

ELF-Binaryμ-Controller

Quellprogramm

Speicherallokation

int a; // a: global, uninitializedint b = 1; // b: global, initializedconst int c = 2; // c: global, const

void main() {static int s = 3; // s: local, static, initializedint x, y; // x: local, auto; y: local, autochar* p = malloc( 100 ); // p: local, auto; *p: heap (100 byte)

}

Statische Allokation – Reservierung beim Übersetzen / LinkenBetrifft globale und modullokale Variablen, sowie den CodeAllokation durch Platzierung in einer Sektion.code – enthält den Programmcode main().bss – enthält alle uninitalisierten / mit 0 initialisierten Variablen a

.data – enthält alle initalisierten Variablen b,s.rodata – enthält alle initalisierten unveränderlichen Variablen c

Dynamische Allokation – Reservierung zur LaufzeitBetrifft lokale Variablen und explizit angeforderten SpeicherStack – enthält alle aktuell gültigen lokalen Variablen x,y,pHeap – enthält explizit mit malloc() angeforderte Speicherbereiche *p

c� dl GSPiC (SS 11) 16 Speicherverwaltung | 16.1 Einführung 16–1

*p

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 21 – 32

Page 23: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Betriebssystem

Hardware

Betriebssystem

CPU Speicher · · · Hintergrund-Speicher

Datei-Handle 1

Datei-Handle X

· · ·

· · ·

· · · Mutex · · ·

21 3

Sys

tem

mod

usB

enut

zerm

odus

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 22 – 32

Page 24: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Process-Level Redundancy

Prozess 1

Prozess 2

Prozess 3

Replikationder Eingaben

Abstimmungder Ausgaben

Eingabe Ausgabe

Fehlertoleranzimplementierung

Betriebssystem

Mehrkernprozessor

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 23 – 32

Page 25: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

C-Code vs. Assembler-Code

C-Code

int a;int b = 1;const int c = 2;

void main() {static int s = 3;int x, y;char* p = malloc( 100 );

}

Assembler-Code4004f0 <main>:

4004f0: push %rbp4004f1: mov %rsp,%rbp4004f4: sub $0x10,%rsp4004f8: movabs $0x64,%rdi4004ff: 00 00 00400502: callq 4003e0 <malloc@plt>400507: mov %rax,-0x10(%rbp)40050b: add $0x10,%rsp40050f: pop %rbp400510: retq

Wo können Datenfehler auftreten?

1. RAM: -0x10(%rbp)

2. Allgemeine CPU-Register: %rsp

3. Sonstige CPU-Register: %rip, %rflags

Schmaus, Schuster VEZS (30. April 2018) Ausblick: Rechnerarchitektur, Replikation und Redundanz 24 – 32

Page 26: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Überblick

1 Wiederholung: Grundlagen Fehlerbäume

2 Wiederholung: Triple Modular Redundancy

3 Ausblick: Rechnerarchitektur, Replikation und Redundanz

4 Replikation von Code

Schmaus, Schuster VEZS (30. April 2018) Replikation von Code 25 – 32

Page 27: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Code-Replikation: Stringification

Stringification von CPP1 #define CMP_FUNC(pre, repl, type, op) \2 type pre##repl(type a, type b) { \3 return a op b ? a : b; \4 }5

6 CMP_FUNC(max, 1, int, >); // Funktion ?max17 CMP_FUNC(max, 2, int, >); // Funktion ?max28 ...9 CMP_FUNC(min, 1, int, <); // Funktion ?min1

Verwendung des C-Präprozessors (CPP)

##: „Token Pasting Operator“

Konkatenieren zweier Token zu einem

Aufruf & Deklaration müssen erstellt werden

+ Es geht eleganter ...

Schmaus, Schuster VEZS (30. April 2018) Replikation von Code 26 – 32

Page 28: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

C++ Templates

C++ Template1 template <typename T>2 T max(T x, T y) {3 T value;4 if (x < y)5 value = y;6 else7 value = x;8 return value;9 }

10 ...11 double md = max<double>(2.3, 4.2);12 auto mi = max<int>(23U, 42);

Templates ermöglichen generische ProgrammierungWiederverwendung durch ParametrisierungUnterscheidung von Funktions- & Klassen-TemplatesExpansion zur Compilezeit ; Quelltext muss verfügbar sein (im Header)„Code Bloat” beim Compilieren→ nutzbar für Replikation von Code

Schmaus, Schuster VEZS (30. April 2018) Replikation von Code 27 – 32

Page 29: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

C++ Templates

C++ Template Spezialisierung1 template <float T>2 T my_func(T x, T y) { // specialized template for T == float3 T a = x;4 ...5 }

Spezialisierungen von Templates möglichEffizientere Implementierung für bestimmte Typen

Nutzbar zum „Zählen” von Templates

Mehrere Template-Parameter1 template <typename A, typename B, typename C>2 T my_other_func(A x, B y, C z) {3 ...4 }5 my_other_func<Dog, Cat, Mouse>(m, n, o);

Schmaus, Schuster VEZS (30. April 2018) Replikation von Code 28 – 32

Page 30: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Umgang mit Assembly-Code I

Symboltabellen in ELF-Dateien1 0000000000201028 B __bss_start2 0000000000201028 b completed.69833 ...4 000000000000061a T main5 0000000000000580 t register_tm_clones6 0000000000000510 T _start7 ...8 000000000000066d t int inc<0>(int)9 000000000000067c t int inc<1>(int)

10 000000000000068b t int inc<2>(int)

nm: Ausgabe der Symboltabelle

Nützliche Optionen-C: Dekodieren der C++-Namensmangelung:_Z3incILi0EEii⇒ int inc<0>(int)_Z3incILi1EEii⇒ int inc<1>(int)

Schmaus, Schuster VEZS (30. April 2018) Replikation von Code – Umgang mit Assembly-Code 29 – 32

Page 31: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

Umgang mit Assembly-Code II

Assembly-Code gemischt mit Source-Code1 int main(){2 4007cd: 55 push %rbp3 4007ce: 48 89 e5 mov %rsp,%rbp4 4007d1: 48 83 ec 10 sub $0x10,%rsp5 int a = max<int>(23U, 42);6 4007d5: be 2a 00 00 00 mov $0x2a,%esi7 4007da: bf 17 00 00 00 mov $0x17,%edi8 4007df: e8 04 01 00 00 callq 4008e8 <_Z3maxIiET_S0_S0_>9 4007e4: 89 45 fc mov %eax,-0x4(%rbp)

10 std::cout << a << "\n";11 4007e7: 8b 45 fc mov -0x4(%rbp),%eax12 ...

objdump: Ausgabe von Informationen von Objektdateien

Nützliche Optionen-S: Ausgabe von Quell-Code im Assembly-Code (Debug-Symbole notwendig)-D: alle Sektionen disassemblieren

Schmaus, Schuster VEZS (30. April 2018) Replikation von Code – Umgang mit Assembly-Code 30 – 32

Page 32: Verlässliche Echtzeitsysteme - Übungen zur Vorlesung [1em ... · MIPS: Pipelining 3294.9 Exceptions assume the instructions to be invoked on an exception begin like this: 80000180

C-Code in C++ Einbinden

C Linkage1 // C++ code2 extern "C" void f(int); // one way3 extern "C" { // another way4 int g(double);5 double h();6 };7 void code(int i, double d)8 {9 f(i);

10 int ii = g(d);11 double dd = h();12 // ...13 }

Name mangling von C++ verhindern

⇒ C++-Code aus C-Code aufrufen

Schmaus, Schuster VEZS (30. April 2018) Replikation von Code – Umgang mit Assembly-Code 31 – 32