Verlässliche Echtzeitsysteme - Übungen zur Vorlesung Phillip Raffeck, Florian Schmaus, Simon Schuster - FAU

 
WEITER LESEN
Verlässliche Echtzeitsysteme
                                      Übungen zur Vorlesung

                   Phillip Raffeck, Florian Schmaus, Simon Schuster

                            Friedrich-Alexander-Universität Erlangen-Nürnberg
                      Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)
                                           https://www4.cs.fau.de

                                      Sommersemester 2019

Raffeck, Schmaus, Schuster   VEZS (SS19)                                               1 – 32
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

Raffeck, Schmaus, Schuster   VEZS (SS19)                         2 – 32
Überblick

1   Wiederholung: Grundlagen Fehlerbäume

2   Wiederholung: Triple Modular Redundancy

3   Ausblick: Rechnerarchitektur, Replikation und Redundanz

4   Replikation von Code

Raffeck, Schmaus, Schuster   VEZS (SS19)                      3 – 32
Überblick

1   Wiederholung: Grundlagen Fehlerbäume

2   Wiederholung: Triple Modular Redundancy

3   Ausblick: Rechnerarchitektur, Replikation und Redundanz

4   Replikation von Code

Raffeck, Schmaus, Schuster   VEZS (SS19)   Wiederholung: Grundlagen Fehlerbäume   4 – 32
Fehlerbäume – Wiederholung

                                                            Ausfall: Kühl-
                                                              system

                                           Kühlsystem leckt                        Pumpe

                 Dichtung                    Rohrleitung                   Druckbehälter

Raffeck, Schmaus, Schuster   VEZS (SS19)    Wiederholung: Grundlagen Fehlerbäume           5 – 32
Fehlerbäume – Wiederholung

                                                                Ausfall: Kühl-
                                                                                          1
                                                                  system

                                               Kühlsystem leckt                        Pumpe

                     Dichtung                    Rohrleitung                   Druckbehälter

1. Schadensereignis

    Raffeck, Schmaus, Schuster   VEZS (SS19)    Wiederholung: Grundlagen Fehlerbäume           5 – 32
Fehlerbäume – Wiederholung

                                                                Ausfall: Kühl-
                                                                                          1
                                                                  system

                                               Kühlsystem leckt                        Pumpe   2

                     Dichtung                    Rohrleitung                   Druckbehälter

1. Schadensereignis
2. Ereignisse auf Ebene 2

    Raffeck, Schmaus, Schuster   VEZS (SS19)    Wiederholung: Grundlagen Fehlerbäume               5 – 32
Fehlerbäume – Wiederholung

                                                                Ausfall: Kühl-
        ODER-Verknüpfung                                                                  1
                                                                  system
        UND-Verknüpfung                                                     3
        XOR-Verknüpfung

        atomares Ereignis
                                               Kühlsystem leckt                        Pumpe    2
         Eingang

                     Dichtung                    Rohrleitung                    Druckbehälter

1. Schadensereignis
2. Ereignisse auf Ebene 2
3. Logische Verknüpfung

    Raffeck, Schmaus, Schuster   VEZS (SS19)    Wiederholung: Grundlagen Fehlerbäume                5 – 32
Fehlerbäume – Wiederholung

                                                                Ausfall: Kühl-
        ODER-Verknüpfung                                                                  1
                                                                  system
        UND-Verknüpfung                                                     3
        XOR-Verknüpfung

        atomares Ereignis
                                               Kühlsystem leckt                        Pumpe    2
         Eingang

                     Dichtung                    Rohrleitung                    Druckbehälter   4

1. Schadensereignis
2. Ereignisse auf Ebene 2
3. Logische Verknüpfung
4. Ereignisse auf Ebene 3

    Raffeck, Schmaus, Schuster   VEZS (SS19)    Wiederholung: Grundlagen Fehlerbäume                5 – 32
Fehlerbäume – Wiederholung

                                                                Ausfall: Kühl-
        ODER-Verknüpfung                                                                  1
                                                                  system
        UND-Verknüpfung                                                     3
        XOR-Verknüpfung

        atomares Ereignis
                                               Kühlsystem leckt                        Pumpe    2
         Eingang                                            5

                     Dichtung                    Rohrleitung                    Druckbehälter   4

1. Schadensereignis                             5. Logische Verknüpfung
2. Ereignisse auf Ebene 2
3. Logische Verknüpfung
4. Ereignisse auf Ebene 3

    Raffeck, Schmaus, Schuster   VEZS (SS19)    Wiederholung: Grundlagen Fehlerbäume                5 – 32
Fehlerbäume – Wiederholung

                                                                Ausfall: Kühl-
        ODER-Verknüpfung                                                                  1
                                                                  system
        UND-Verknüpfung                                                     3
        XOR-Verknüpfung

        atomares Ereignis
                                               Kühlsystem leckt                        Pumpe       2
         Eingang                                            5

                     Dichtung                    Rohrleitung                    Druckbehälter      4

                                 6                              6                              6

1. Schadensereignis                             5. Logische Verknüpfung
2. Ereignisse auf Ebene 2                       6. Atomare Ereignisse
3. Logische Verknüpfung
4. Ereignisse auf Ebene 3

    Raffeck, Schmaus, Schuster   VEZS (SS19)    Wiederholung: Grundlagen Fehlerbäume                   5 – 32
Fehlerbäume – Wiederholung

                                                                Ausfall: Kühl-
        ODER-Verknüpfung                                                                  1
                                                                  system
        UND-Verknüpfung                                                     3
        XOR-Verknüpfung

        atomares Ereignis
                                               Kühlsystem leckt                        Pumpe       2
         Eingang                                            5                             7

                     Dichtung                    Rohrleitung                    Druckbehälter      4

                                 6                              6                              6

1. Schadensereignis                             5. Logische Verknüpfung
2. Ereignisse auf Ebene 2                       6. Atomare Ereignisse
3. Logische Verknüpfung                         7. Eingänge zerlegen den Fehlerbaum 7→ Neuer
4. Ereignisse auf Ebene 3                          Teilbaum

    Raffeck, Schmaus, Schuster   VEZS (SS19)    Wiederholung: Grundlagen Fehlerbäume                   5 – 32
Überblick

1   Wiederholung: Grundlagen Fehlerbäume

2   Wiederholung: Triple Modular Redundancy

3   Ausblick: Rechnerarchitektur, Replikation und Redundanz

4   Replikation von Code

Raffeck, Schmaus, Schuster   VEZS (SS19)   Wiederholung: Triple Modular Redundancy   6 – 32
Fehlerhypothese

         Replikat 1             1 0 1 1 0 1 1 1 0 0 1 0 1 0

         Replikat 2             1 0 1 1 0 1 1 0 0 0 1 0 1 0           E
         Replikat 3             1 0 1 1 0 1 1 1 0 0 1 0 1 0

Wie viele Replikate benötigt man?
Arten des Fehlverhaltens (von n Replikaten sind f fehlerhaft)
1. fail-silent      7→ Anzahl Replikate: n = f + 1
2. fail-consistent   7→ Anzahl Replikate: n = 2f + 1
3. malicious       7→ Anzahl Replikate: n = 3f + 1

 Raffeck, Schmaus, Schuster   VEZS (SS19)   Wiederholung: Triple Modular Redundancy   7 – 32
Triple Modular Redundancy

                   Sensorik                        Verarbeitung                       Aktorik

Raffeck, Schmaus, Schuster    VEZS (SS19)   Wiederholung: Triple Modular Redundancy             8 – 32
Triple Modular Redundancy

                   Sensorik       Interface          Verarbeitung                       Aktorik

Schnittstelle sammelt Eingangsdaten (Replikdeterminismus)

Raffeck, Schmaus, Schuster    VEZS (SS19)     Wiederholung: Triple Modular Redundancy             8 – 32
Triple Modular Redundancy

                                                       Replica
                                                         1

                                                       Replica
                   Sensorik       Interface                                             Aktorik
                                                         2

                                                       Replica
                                                         3

Schnittstelle sammelt Eingangsdaten (Replikdeterminismus)
Verteilt Daten und aktiviert Replikate

Raffeck, Schmaus, Schuster    VEZS (SS19)     Wiederholung: Triple Modular Redundancy             8 – 32
Triple Modular Redundancy

                                                       Replica
                                                         1

                                                       Replica
                   Sensorik       Interface                                   Voter     Aktorik
                                                         2

                                                       Replica
                                                         3

Schnittstelle sammelt Eingangsdaten (Replikdeterminismus)
Verteilt Daten und aktiviert Replikate
Mehrheitsentscheider (Voter) wählt Ergebnis

Raffeck, Schmaus, Schuster    VEZS (SS19)     Wiederholung: Triple Modular Redundancy             8 – 32
Triple Modular Redundancy

                                                       Replica
                                                         1

                                                       Replica
                   Sensorik       Interface                                   Voter     Aktorik
                                                         2

                                                       Replica
                                                         3

Schnittstelle sammelt Eingangsdaten (Replikdeterminismus)
Verteilt Daten und aktiviert Replikate
Mehrheitsentscheider (Voter) wählt Ergebnis
Ergebnis wird an Aktuator versendet

Raffeck, Schmaus, Schuster    VEZS (SS19)     Wiederholung: Triple Modular Redundancy             8 – 32
Triple Modular Redundancy

                                                       Replica
                                                         1

                                                       Replica
                   Sensorik       Interface                                   Voter     Aktorik
                                                         2

                                                       Replica
                                                         3

Redundanzbereich
Ausschließlich Replikatausführung

Raffeck, Schmaus, Schuster    VEZS (SS19)     Wiederholung: Triple Modular Redundancy             8 – 32
Triple Modular Redundancy

                                                       Replica
                                                         1

                                                       Replica
                   Sensorik       Interface                                   Voter     Aktorik
                                                         2

                                                       Replica
                                                         3

Redundanzbereich
Ausschließlich Replikatausführung

Erweiterung der Ausgangsseite mit Informationsredundanz
Mehrheitsentscheid über Berechnungsergebnisse

Raffeck, Schmaus, Schuster    VEZS (SS19)     Wiederholung: Triple Modular Redundancy             8 – 32
Replikdeterminismus

Replikat 1                                     Replikat 2                                    Replikat 3
void repl_1 ( void * p ){                      void repl_2 ( void * p ){ void repl_3 ( void * p ){
  ticks_t time =                                 ticks_t time =            ticks_t time =
    ezs_get_time ();                               ezs_get_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

    Raffeck, Schmaus, Schuster   VEZS (SS19)       Wiederholung: Triple Modular Redundancy                9 – 32
Process-Level Redundancy

Raffeck, Schmaus, Schuster   VEZS (SS19)   Wiederholung: Triple Modular Redundancy   10 – 32
Process-Level Redundancy

                                                Prozess 1

                                                Prozess 2

                                                Prozess 3

Raffeck, Schmaus, Schuster   VEZS (SS19)   Wiederholung: Triple Modular Redundancy   10 – 32
Process-Level Redundancy

                                                  Prozess 1
                              Replikation                                 Abstimmung
         Eingabe                                  Prozess 2                             Ausgabe
                             der Eingaben                                der Ausgaben
                                                  Prozess 3

                                      Fehlertoleranzimplementierung

Raffeck, Schmaus, Schuster     VEZS (SS19)   Wiederholung: Triple Modular Redundancy              10 – 32
Process-Level Redundancy

                                                  Prozess 1
                              Replikation                                 Abstimmung
         Eingabe                                  Prozess 2                             Ausgabe
                             der Eingaben                                der Ausgaben
                                                  Prozess 3

                                      Fehlertoleranzimplementierung

                                               Betriebssystem

                                             Mehrkernprozessor

Raffeck, Schmaus, Schuster     VEZS (SS19)   Wiederholung: Triple Modular Redundancy              10 – 32
Überblick

1   Wiederholung: Grundlagen Fehlerbäume

2   Wiederholung: Triple Modular Redundancy

3   Ausblick: Rechnerarchitektur, Replikation und Redundanz

4   Replikation von Code

Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz   11 – 32
Ebenen

   5           problemorientierte Programmiersprachenebene

                                                                                              Übersetzer

   4                         Assembliersprachenebene

                                                                                             Assemblierer

   3                         Machinenprogrammebene

                                                                                           Betriebssystem

   2                             Befehlssatzebene

                                                                                          Hardwareentwurf

   1                           Mikroarchitekturebene

                                                                                        Hardwaresynthese

   0                            digitale Logikebene

Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz          12 – 32
Digitale Logikebene

   ROM                                                        DRAM
                                                               SEL

                                                                       Q

   RS - FlipFlop
                                  VCC                                 VCC

                             Q1                                             Q2

                                                E1   E2

Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz   13 – 32
MIPS: Single-Cycle                                                             4.6   Pipelined Datapath and Control                                                     287

                      IF: Instruction fetch         ID: Instruction decode/                 EX: Execute/                     MEM: Memory access        WB: Write back
                                                        register file read                address calculation

                                           Add

                             4                                                                                 Add
                                                                                                       ADD
                                                                                                             result
                                                                                      Shift
                                                                                      left 2

              0
                                                         Read             Read
                  M                                      register 1
                                 Address                                 data 1
                  u    PC                                                                                             Zero
                  x                                      Read                                                ALU ALU
              1                                          register 2                                                                  Address
                                      Instruction                                                               result                         Read
                                                                 Registers                     0                                                           1
                                                                                                   M                                            data
                                                         Write            Read                                                            Data                 M
                                     Instruction         register        data 2                    u                                                           u
                                                                                                                                         memory
                                       memory                                                      x                                                           x
                                                         Write                                 1
                                                                                                                                                           0
                                                         data                                                                        Write
                                                                                                                                     data

                                                           16                   32
                                                                       Sign-
                                                                      extend

                                                                        Source: D. A. Patterson und J. L. Hennessy, Computer organization and
                                                                                           design: the hardware/software interface, 4th ed., 2012
FIGURE 4.33 The single-cycle datapath from Section 4.4 (similar to Figure 4.17). Each step of the instruction can be mapped
Raffeck,
onto     Schmaus,
     the datapath    Schuster
                  from left to right. VEZS  (SS19)
                                      The only exceptionsAusblick: Rechnerarchitektur,
                                                          are the update                Replikation
                                                                         of the PC and the write-backund
                                                                                                      step,Redundanz                    14 – 32
                                                                                                            shown in color, which sends either
MIPS: Pipelining

                                                                      4.6   Pipelined Datapath and Control                                     299

                                  Time (in clock cycles)
                                  CC 1       CC 2        CC 3           CC 4        CC 5          CC 6    CC 7         CC 8        CC 9
   Program
   execution
   order
   (in instructions)

                             Instruction Instruction                Data
       lw $10, 20($1)           fetch      decode
                                                      Execution
                                                                   access
                                                                             Write-back

                                         Instruction Instruction                Data
       sub $11, $2, $3                      fetch      decode
                                                                  Execution
                                                                               access
                                                                                         Write-back

                                                     Instruction Instruction                Data
       add $12, $3, $4                                  fetch      decode
                                                                             Execution
                                                                                           access
                                                                                                     Write-back

                                                                 Instruction Instruction               Data
       lw $13, 24($1)                                               fetch      decode
                                                                                         Execution
                                                                                                      access
                                                                                                                Write-back

                                                                             Instruction Instruction              Data
       add $14, $5, $6                                                          fetch      decode
                                                                                                     Execution
                                                                                                                 access
                                                                                                                           Write-back

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

              add $14, $5, $6                       lw $13, 24 ($1)                 add $12, $3, $4        sub $11, $2, $3    lw $10, 20($1)
              Instruction fetch                    Instruction decode                 Execution               Memory           Write-back

                                                                            Source: D. A. Patterson und J. L. Hennessy, Computer organization and
                                           IF/ID                            ID/EX                   EX/MEM              MEM/WB
                                                                                              design: the hardware/software interface, 4th ed., 2012

Raffeck, Schmaus, Schuster
                        Add
                                      VEZS (SS19)        Ausblick: Rechnerarchitektur, Replikation und Redundanz                               15 – 32
Instruction Instruction                                        Data
       add $14, $5, $6                                                                                            fetch      decode
                                                                                                                                       Execution
                                                                                                                                                                             access
                                                                                                                                                                                            Write-back

MIPS: Pipelining
FIGURE 4.44 Traditional multiple-clock-cycle pipeline diagram of five instructions in Figure 4.43.

                  add $14, $5, $6                                 lw $13, 24 ($1)                                    add $12, $3, $4                      sub $11, $2, $3              lw $10, 20($1)
                  Instruction fetch                              Instruction decode                                       Execution                          Memory                     Write-back

                                           IF/ID                                                    ID/EX                                        EX/MEM                            MEM/WB

                                   Add

                                                                                                                                 Add
                         4                                                                                                  Add
                                                                                                                               result
                                                                                                            Shift
                                                                                                            left 2

        0
         M
         u   PC        Address                                    Read
                                                                                      Read

                                                   Instruction
         x                                                        register 1
        1                                                                             data 1
                                                                   Read                                                                 Zero
                             Instruction                           register 2                                                   ALU
                                                                            Registers Read                                               ALU                                Read
                               memory                                                                                                                      Address                             1
                                                                   Write                                             0                  result                              data
                                                                                      data 2                                                                                                    M
                                                                   register                                           M
                                                                                                                                                                    Data                        u
                                                                                                                      u
                                                                   Write                                                                                           memory                       x
                                                                                                                      x                                                                        0
                                                                   data                                              1

                                                                                                                                                           Write
                                                                                                                                                           data

                                                                           16       Sign       32
                                                                                   extend

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 figure is a vertical slice through a multiple-clock-cycle diagram.

   1. Allowing jumps, branches, and ALU instructions       Source: D. A.fewer
                                                              to take    Patterson  und J.
                                                                                stages     L. Hennessy, Computer organization and
                                                                                        than
                                                                             design: the hardware/software interface, 4th ed., 2012
        the five required by the load instruction will increase pipeline performance
Raffeck,under  all Schuster
         Schmaus,  circumstances.
                              VEZS (SS19)    Ausblick: Rechnerarchitektur, Replikation und Redundanz                    16 – 32
MIPS: Pipelining

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

Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz                   17 – 32
MIPS: Pipelining                                                                                    4.9     Exceptions                                  329

                                                                                                                EX.Flush
           IF.Flush

                                                                             ID.Flush
                                                      Hazard
                                                     detection
                                                       unit
                                                                                                            M
                                                                                            ID/EX           u
                                                                                                            x
                                                                                             WB       0                      EX/MEM
                                                                                    M
                                                     Control                                  M                    M           WB
                                                                                    u                              u                           MEM/WB
                                                                                    x               Cause          x
                                             IF/ID                      ⫹      0                                                M               WB
                                                                                             EX      EPC    0

                                   ⫹                           Shift
                           4                                   left 2                                M
                                                                                                     u
                                                                                                     x
                                                                        Registers       ⫽
                                                                                                                                                        M
                                                                                                                       ALU                              u
              M                Instruction
80000180      u       PC                                                                                                                                x
              x                  memory                                                              M                                 Data
                                                                                                     u
                                                                                                     x                                memory

                                                                Sign-
                                                               extend

                                                                                                     M
                                                                                                     u
                                                                                                     x

                                                                                                                  Forwarding
                                                                                                                     unit

FIGURE 4.66 The datapath with controls to handle exceptions. The key additions include a new input with the value 8000 0180hex
                                                                        Source:
in the multiplexor that supplies the new PC value; a Cause register to record theD.cause
                                                                                    A. Patterson  und J. L.and
                                                                                         of the exception;  Hennessy,    Computer
                                                                                                               an Exception          organization
                                                                                                                              PC register  to save and
the address of the instruction that caused the exception. The 8000 0180hex input to the design:     the hardware/software
                                                                                            multiplexor is the initial addressinterface,
                                                                                                                                to begin 4th  ed., 2012
                                                                                                                                         fetching
instructions in the event of an exception. Although not shown, the ALU overflow signal is an input to the control unit.
Raffeck, Schmaus, Schuster           VEZS (SS19)        Ausblick: Rechnerarchitektur, Replikation und Redundanz                             18 – 32
Eigenschaften von CPU-Architekturen

Mikroprogrammierbar vs. Fixed-Function
Out-of-Order-Prozessoren
Sprungvorhersage
Transaktionaler Speicher
Superskalarität
Mehrkernarchitekturen
Hyperthreading
...

Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz   19 – 32
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 Fehlermodell
   berücksichtigt werden
+ Ein Ein-Bit-Fehler in einer dieser Komponenten kann zu komplexen
   Mehrbitfehlern auf ISA-Ebene führen

   Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz   19 – 32
Ebenen

   5           problemorientierte Programmiersprachenebene

                                                                                              Übersetzer

   4                         Assembliersprachenebene

                                                                                             Assemblierer

   3                         Machinenprogrammebene

                                                                                           Betriebssystem

   2                             Befehlssatzebene

                                                                                          Hardwareentwurf

   1                           Mikroarchitekturebene

                                                                                        Hardwaresynthese

   0                            digitale Logikebene

Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz          20 – 32
Speicherorganisation auf einem Mikrocontroller
                                     Speicherallokation
                                     int a;                                  // a: global, uninitialized
                                     int b = 1;                              // b: global, initialized
                                     const int c = 2;                        // c: global, const

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

                                     Statische Allokation
                                            compile / link – Reservierung beim Übersetzen / Linken
                                                                        Quellprogramm
                                           Betrifft globale und modullokale Variablen, sowie den Code
                                           Allokation durch Platzierung in einer Sektion
                                        .codeTable
                                       Symbol      den
                                              – enthält     Programmcode                                               m
                                          .bss
                                       .data   – enthält
                                                    s=3alle uninitalisierten / mit 0 initialisierten Variablen
                                                    b=1alle initalisierten Variablen
                                         .data – enthält
                                      .rodata
                                       .rodata – enthält
                                                    c=2alle initalisierten unveränderlichen Variablen
                                     Dynamische Allokation – Reservierung zur Laufzeit
                                       .text           main
                                           Betrifft lokale Variablen und explizit angeforderten Speicher
                                           Stack – enthält
                                                   ...     alle aktuell gültigen lokalen Variablen
                                           HeapELF
                                                 – enthält
                                                   Header explizit mit malloc() angeforderte Speicherbereiche

                                      c dl
                                      �         GSPiC (SS 11)    16 Speicherverwaltung | 16.1 Einführung
                                                 ELF-Binary

Raffeck, Schmaus, Schuster   VEZS (SS19)       Ausblick: Rechnerarchitektur, Replikation und Redundanz       21 – 32
Speicherorganisation auf einem Mikrocontroller
                                                        Speicherallokation
                                                        int a;                                  // a: global, uninitialized
                                                        int b = 1;                              // b: global, initialized
                                                        const int c = 2;                        // c: global, const

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

                                                        Statische Allokation
                                                               compile / link – Reservierung beim Übersetzen / Linken
                                                                                           Quellprogramm
                                                              Betrifft globale und modullokale Variablen, sowie den Code
                                                              Allokation durch Platzierung in einer Sektion
                                                           .codeTable
                                                          Symbol      den
                                                                 – enthält     Programmcode                                               m
                                      s=3                    .bss – enthält
                                                                       s=3alle uninitalisierten / mit 0 initialisierten Variablen
Flash / ROM

                      .data                               .data
                                      b=1                              b=1alle initalisierten Variablen
                                                            .data – enthält
                      .rodata         c=2                .rodata
                                                          .rodata – enthält
                                                                       c=2alle initalisierten unveränderlichen Variablen
                                                        Dynamische Allokation – Reservierung zur Laufzeit
                      .text           main                .text           main
                                                              Betrifft lokale Variablen und explizit angeforderten Speicher
                                                              Stack – enthält
                                                                      ...     alle aktuell gültigen lokalen Variablen
                                             flash            HeapELF
                                                                    – enthält
                                                                      Header explizit mit malloc() angeforderte Speicherbereiche

                                                         c dl
                                                         �         GSPiC (SS 11)    16 Speicherverwaltung | 16.1 Einführung
                              μ-Controller                          ELF-Binary

              Raffeck, Schmaus, Schuster        VEZS (SS19)       Ausblick: Rechnerarchitektur, Replikation und Redundanz       21 – 32
Speicherorganisation auf einem Mikrocontroller
                                                         Speicherallokation
                                        ...
                       Stack
                                       x=?               int a;                                  // a: global, uninitialized
                                       y=?               int b = 1;                              // b: global, initialized
                                                         const int c = 2;                        // c: global, const
                                       p=
                                                         void main() {
                                                           static int s = 3;                     // s: local, static, initialized
RAM

                                                           int x, y;                             // x: local, auto; y: local, auto
                                                           char* p = malloc( 100 );              // p: local, auto; *p: heap (100 byte)
                                                         }
                       Heap             *p
                                                         Statische Allokation
                                                                compile / link – Reservierung beim Übersetzen / Linken
               init    .bss            a=0                                                  Quellprogramm
                                                               Betrifft globale und modullokale Variablen, sowie den Code
                       .data           s=3                     Allokation durch Platzierung in einer Sektion
                                       b=1                             den
                                                            .codeTable
                                                           Symbol – enthält     Programmcode                                               m
                copy
                                       s=3                    .bss – enthält
                                                                        s=3alle uninitalisierten / mit 0 initialisierten Variablen
Flash / ROM

                       .data                               .data
                                       b=1                              b=1alle initalisierten Variablen
                                                             .data – enthält
                       .rodata         c=2                .rodata
                                                           .rodata – enthält
                                                                        c=2alle initalisierten unveränderlichen Variablen
                                                         Dynamische Allokation – Reservierung zur Laufzeit
                       .text           main                .text           main
                                                               Betrifft lokale Variablen und explizit angeforderten Speicher
                                                               Stack – enthält
                                                                       ...     alle aktuell gültigen lokalen Variablen
                                              flash            HeapELF
                                                                     – enthält
                                                                       Header explizit mit malloc() angeforderte Speicherbereiche

                                                          c dl
                                                          �         GSPiC (SS 11)    16 Speicherverwaltung | 16.1 Einführung
                               μ-Controller                          ELF-Binary

              Raffeck, Schmaus, Schuster         VEZS (SS19)       Ausblick: Rechnerarchitektur, Replikation und Redundanz       21 – 32
Betriebssystem

                                                                                                                  Benutzermodus
                                                                                               Betriebssystem
                                             Datei-       Datei-
                                                     ···                  ···             Mutex         ···
                                            Handle 1     Handle X

           1                                                     2                                  3

                                                                                                                 Systemmodus
                                                 Hintergrund-
    CPU        Speicher      ···                                          ···
                                                  Speicher

                                                    Hardware

Raffeck, Schmaus, Schuster         VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz        22 – 32
Process-Level Redundancy

                                                  Prozess 1
                              Replikation                                   Abstimmung
         Eingabe                                  Prozess 2                                        Ausgabe
                             der Eingaben                                  der Ausgaben
                                                  Prozess 3

                                      Fehlertoleranzimplementierung

                                                Betriebssystem

                                             Mehrkernprozessor

Raffeck, Schmaus, Schuster     VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz         23 – 32
C-Code vs. Assembler-Code

C-Code                                     Assembler-Code

int a ;                                    4004 f0 :
int b = 1;                                   4004 f0 : push                    % rbp
const int c = 2;                             4004 f1 : mov                     % rsp ,% rbp
void main () {                               4004 f4 : sub                     $0x10 ,% rsp
  static int s = 3;                          4004 f8 : movabs                  $0x64 ,% rdi
  int x , y ;                                400502: callq                     4003 e0 < malloc@plt >
  char * p =                                 400507: mov                       % rax , -0 x10 (% rbp )
        malloc (100);                        40050 b: add                      $0x10 ,% rsp
}                                            40050 f: pop                      % rbp
                                             400510: retq

Wo können Datenfehler auftreten?

Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz   24 – 32
C-Code vs. Assembler-Code

C-Code                                     Assembler-Code

int a ;                                    4004 f0 :
int b = 1;                                   4004 f0 : push                    % rbp
const int c = 2;                             4004 f1 : mov                     % rsp ,% rbp
void main () {                               4004 f4 : sub                     $0x10 ,% rsp
  static int s = 3;                          4004 f8 : movabs                  $0x64 ,% rdi
  int x , y ;                                400502: callq                     4003 e0 < malloc@plt >
  char * p =                                 400507: mov                       % rax , -0 x10 (% rbp )
        malloc (100);                        40050 b: add                      $0x10 ,% rsp
}                                            40050 f: pop                      % rbp
                                             400510: retq

Wo können Datenfehler auftreten?
1. RAM:                                             -0 x10 (% rbp )
2. Allgemeine CPU-Register:                        % rsp
3. Sonstige CPU-Register:                          % rip , % rflags

Raffeck, Schmaus, Schuster   VEZS (SS19)   Ausblick: Rechnerarchitektur, Replikation und Redundanz   24 – 32
Überblick

1   Wiederholung: Grundlagen Fehlerbäume

2   Wiederholung: Triple Modular Redundancy

3   Ausblick: Rechnerarchitektur, Replikation und Redundanz

4   Replikation von Code

Raffeck, Schmaus, Schuster   VEZS (SS19)   Replikation von Code   25 – 32
Code-Replikation: Stringification

    Stringification von CPP
1   # 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 ?
7   CMP_FUNC ( max , 2 , int , >); // Funktion ?
8   ...
9   CMP_FUNC ( min , 1 , int ,
Code-Replikation: Stringification

    Stringification von CPP
1   # 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 max1
7   CMP_FUNC ( max , 2 , int , >); // Funktion max2
8   ...
9   CMP_FUNC ( min , 1 , int ,
C++ Templates

     C++ Template
1    template < typename T >
2    T max ( T x , T y ) {
3      T value ;
4      if ( x < y )
5         value = y ;
6      else
7         value = x ;
8      return value ;
9    }
10   ...
11   double md = max < double >(2.3 , 4.2);
12   auto     mi = max < int >(23 U , 42);

     Templates ermöglichen generische Programmierung
     Wiederverwendung durch Parametrisierung
     Unterscheidung von Funktions- & Klassen-Templates
     Expansion zur Compilezeit ; Quelltext muss verfügbar sein (im Header)
     „Code Bloat” beim Compilieren → nutzbar für Replikation von Code
     Raffeck, Schmaus, Schuster   VEZS (SS19)   Replikation von Code   27 – 32
C++ Templates

     Explizite Typen als Templateparameter möglich
     Nutzbar zum „Zählen” von Templates

     Indizierte Template-Spezialisierung
1    template < typename T , unsigned INDEX >
2    T max ( T x , T y ) {
3      T value ;
4      if ( x < y )
5        value = y ;
6      else
7        value = x ;
8      return value ;
9    }
10   ...
11   auto m0 = max < int , 0 >(23 , 42);
12   auto m1 = max < int , 1 >(23 , 42);

     Raffeck, Schmaus, Schuster   VEZS (SS19)   Replikation von Code   28 – 32
Umgang mit Assembly-Code I

    Symboltabellen in ELF-Dateien
1   0000000000201028                    B __bss_start
2   0000000000201028                    b completed .6983
3   ...
4   000000000000061 a                   T main
5   0000000000000580                    t register_tm_clones
6   0000000000000510                    T _start
7   ...
8   000000000000066 d                   t int max < int ,0 u >( int , int )
9   000000000000067 c                   t int max < int ,1 u >( int , int )

    nm: Ausgabe der Symboltabelle
    Nützliche Optionen
      -C: Dekodieren der C++-Namensmangelung:
         _Z3maxIiLj0EET_S0_S0_ ⇒ int max < int , 0 u >( int , int )
         _Z3maxIiLj1EET_S0_S0_ ⇒ int max < int , 1 u >( int , int )
    Demangling auf der Kommandozeile: c++filt

    Raffeck, Schmaus, Schuster   VEZS (SS19)   Replikation von Code – Umgang mit Assembly-Code   29 – 32
Umgang mit Assembly-Code II

     Assembly-Code gemischt mit Source-Code
1    int main (){
2     4007 cd : 55                                            push             % rbp
3     4007 ce : 48 89 e5                                      mov              % rsp ,% rbp
4     4007 d1 : 48 83 ec 10                                   sub              $0x10 ,% rsp
5    int a = max < int >(23 U ,  42);
6     4007 d5 : be 2 a 00 00     00   mov                                      $0x2a ,% esi
7     4007 da : bf 17 00 00      00   mov                                      $0x17 ,% edi
8     4007 df : e8 04 01 00      00   callq
9                                     4008 e8                                  < _Z3maxIiET_S0_S0_ >
10    4007 e4 : 89 45 fc              mov                                      % eax , -0 x4 (% rbp )
11   std :: cout
C-Code in C++ Einbinden

     C Linkage
1    // C ++ code
2    extern " C " void f ( int ); // one way
3    extern " C " {               // another way
4       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

     Raffeck, Schmaus, Schuster   VEZS (SS19)   Replikation von Code – Umgang mit Assembly-Code   31 – 32
Fragen. . .

Raffeck, Schmaus, Schuster   VEZS (SS19)   Fragen?   32 – 32
Sie können auch lesen