Eingebettete Systeme - Exam
Aufgabe 1)
Eingebettete Systeme sind spezialisierte Computer, die in andere Geräte integriert sind und spezielle Funktionen ausführen. Sie realisieren spezifische Aufgaben, sind eng mit der Umgebung gekoppelt, zeichnen sich durch hohe Zuverlässigkeit und Echtzeitfähigkeit aus und sind auf ressourcensparenden Betrieb ausgelegt. Typischerweise sind Soft- und Hardware stark integriert. Beispiele für eingebettete Systeme sind Steuergeräte in Autos, Medizingeräte und Haushaltsgeräte. Diese Systeme bestehen aus Mikrocontrollern, Speicher, Sensoren und Aktuatoren und laufen oft unter Echtzeitbedingungen (RTOS: Real-Time Operating System).
a)
Ein medizinisches Eingabegerät muss kontinuierlich den Blutzuckerspiegel eines Patienten überwachen und durch eine Aktuationseinheit, im Falle eines kritischen Werts, Insulin einspritzen. Nimm an, dass das System alle 5 Sekunden einen neuen Messwert erhält und in der Lage sein muss, innerhalb von 2 Sekunden zu reagieren.
- Erkläre, warum Echtzeitfähigkeit für dieses eingebettete System besonders wichtig ist.
- Beschreibe die möglichen Hardware-Komponenten und deren Funktionen, die für dieses System notwendig wären.
Lösung:
Eingebettete Systeme sind spezialisierte Computer, die in andere Geräte integriert sind und spezielle Funktionen ausführen. Sie realisieren spezifische Aufgaben, sind eng mit der Umgebung gekoppelt, zeichnen sich durch hohe Zuverlässigkeit und Echtzeitfähigkeit aus und sind auf ressourcensparenden Betrieb ausgelegt. Typischerweise sind Soft- und Hardware stark integriert. Beispiele für eingebettete Systeme sind Steuergeräte in Autos, Medizingeräte und Haushaltsgeräte. Diese Systeme bestehen aus Mikrocontrollern, Speicher, Sensoren und Aktuatoren und laufen oft unter Echtzeitbedingungen (RTOS: Real-Time Operating System).Löse die folgende Teilaufgabe:Ein medizinisches Eingabegerät muss kontinuierlich den Blutzuckerspiegel eines Patienten überwachen und durch eine Aktuationseinheit im Falle eines kritischen Werts Insulin einspritzen. Nimm an, dass das System alle 5 Sekunden einen neuen Messwert erhält und in der Lage sein muss, innerhalb von 2 Sekunden zu reagieren.
- Erkläre, warum Echtzeitfähigkeit für dieses eingebettete System besonders wichtig ist.
- Beschreibe die möglichen Hardware-Komponenten und deren Funktionen, die für dieses System notwendig wären.
- Warum Echtzeitfähigkeit wichtig ist:Die Echtzeitfähigkeit ist für dieses eingebettete System besonders wichtig, da gesundheitliche Risiken bestehen, wenn nicht rechtzeitig auf kritische Blutzuckerwerte reagiert wird. Falls der Blutzuckerspiegel des Patienten zu niedrig (Hypoglykämie) oder zu hoch (Hyperglykämie) wird, können ernsthafte gesundheitliche Komplikationen auftreten. Das System muss in der Lage sein, innerhalb von 2 Sekunden zu reagieren und entsprechende Maßnahmen zu ergreifen, um den Blutzuckerspiegel zu regulieren. Jede Verzögerung könnte lebensgefährlich sein.
- Notwendige Hardware-Komponenten und deren Funktionen:
- Mikrocontroller: Steuert die gesamte Logik des Systems, nimmt die Daten von den Sensoren auf, verarbeitet sie und gibt entsprechende Steuerbefehle an die Aktuationseinheit weiter.
- Speicher: Speichert die Messdaten und eventuell die Konfigurationsparameter des Systems. Der Speicher kann sowohl flüchtig (RAM) als auch nicht flüchtig (zum Beispiel Flash-Speicher) sein.
- Sensoren: Erfassen kontinuierlich den Blutzuckerspiegel des Patienten und liefern die Daten an den Mikrocontroller.
- Aktuatoren: Die Aktuationseinheit, wie eine Insulinpumpe, die auf die Steuerbefehle des Mikrocontrollers reagiert und entsprechend Insulin einspritzt.
- Kommunikationsmodule: Zum Beispiel Bluetooth oder WLAN, um Daten an externe Geräte (wie Smartphones oder Computer) zu senden oder von ihnen zu empfangen. Dies kann für die Überwachung und Anpassung der Therapie durch medizinisches Personal nützlich sein.
- Stromversorgungsmodul: Sorgt für die notwendige Energieversorgung des Systems, kann aus Batterien oder Akkus bestehen.
- Benutzerschnittstelle: Zeigt relevante Informationen und Warnungen an den Benutzer (zum Beispiel ein Display oder akustische Signale) und ermöglicht gegebenenfalls manuelle Eingaben oder Einstellungen.
Aufgabe 2)
In diesem Szenario entwickelst Du ein eingebettetes System, das die Temperatur in einem industriellen Lagerhaus überwacht und steuert. Das System besteht aus einem Mikrocontroller, verschiedenen Sensoren, einem LCD-Display zur Anzeige der Temperatur und einem Alarmmechanismus, der aktiviert wird, wenn die Temperatur einen bestimmten Schwellenwert überschreitet. Du entscheidest Dich für einen Mikrocontroller aus der ARM Cortex-M Serie aufgrund seiner Effizienz und Leistungsfähigkeit. Der Mikrocontroller verwendet die Harvard-Architektur, um eine schnellere Ausführung von Befehlen zu ermöglichen. Er verfügt über integrierte ADCs, um die analogen Signale der Temperatursensoren zu digitalisieren. Die Kommunikation mit anderen Modulen erfolgt über UART. Der Mikrocontroller wird durch Interrupt-Mechanismen gesteuert, um rechtzeitig auf Temperaturänderungen zu reagieren. Ein externer Taktgeber sorgt dafür, dass die Operationen mit einer festen Frequenz ablaufen.
a)
Teilaufgabe A: Beschreibe detailliert die Funktionsweise der Harvard-Architektur und erkläre, warum sie für Dein eingebettetes System von Vorteil ist. Gehe insbesondere auf die Trennung von Speicherbereichen für Befehle und Daten ein und wie dies die Effizienz des Systems verbessert.
Lösung:
Teilaufgabe A:
Die Harvard-Architektur ist eine Computerarchitektur, bei der Programmcode und Daten in getrennten Speicherbereichen abgelegt werden. Dies steht im Gegensatz zur von-Neumann-Architektur, bei der sich beide Arten von Informationen denselben Speicherbereich teilen.
Die zentrale Idee der Harvard-Architektur lässt sich in den folgenden Punkten beschreiben:
- Trennung von Speicherbereichen: In der Harvard-Architektur gibt es zwei getrennte Speicher: einen für Programme (Befehle) und einen für Daten. Dies bedeutet, dass der Mikrocontroller gleichzeitig auf Befehle und Daten zugreifen kann, da diese separat verwaltet werden.
- Paralleler Zugriff: Durch die Trennung können der Mikrocontroller bzw. die CPU parallel auf den Befehlsspeicher und den Datenspeicher zugreifen. Dadurch wird die Leistung erheblich verbessert, da die CPU nicht zwischen dem Abrufen eines Befehls und dem Abrufen von Daten wechseln muss.
- Erhöhte Speicherbandbreite: Die Trennung der Speicherbereiche führt zu einer höheren Speicherbandbreite, da sowohl der Code als auch die Daten mit unterschiedlichen Speicherschnittstellen verarbeitet werden.
Für Dein eingebettetes System, das die Temperatur in einem industriellen Lagerhaus überwacht und steuert, bietet die Harvard-Architektur mehrere Vorteile:
- Effizienz bei der Temperaturüberwachung: Da der Mikrocontroller sowohl auf Temperaturdaten als auch auf Kontrollanweisungen parallel zugreifen kann, kann er schneller auf Temperaturänderungen reagieren und die entsprechenden Maßnahmen ergreifen.
- Schnellere Ausführung von Algorithmen: Die parallelen Speicherzugriffe ermöglichen es dem Mikrocontroller, Algorithmen zur Temperaturregelung effizienter zu verarbeiten. Dies ist besonders wichtig, um in Echtzeit auf Temperaturschwankungen zu reagieren.
- Unterbrechungsmechanismen: Der Mikrocontroller kann effizient auf Interrupts reagieren, indem er parallel den relevanten Code und die entsprechenden Daten abruft, was die Reaktionszeit auf kritische Ereignisse verkürzt.
Insgesamt führt die Harvard-Architektur zu einer verbesserten Leistung und Effizienz des eingebetteten Systems, was besonders in industriellen Anwendungen von großer Bedeutung ist, wo präzise und schnelle Reaktionen auf Umgebungsbedingungen erforderlich sind.
b)
Teilaufgabe B: Entwickle einen Programmablauf, der den Mikrocontroller die Temperatur in Echtzeit überwachen lässt und bei Überschreitung des Schwellenwertes einen Alarm auslöst. Beschreibe die notwendigen Schritte und erkläre, wie Interrupt-Mechanismen und der ADC hierbei genutzt werden. Erstelle einen Pseudocode, der die wichtigsten Funktionen und Abläufe darstellt.
Lösung:
Teilaufgabe B:
Um einen Programmablauf zu entwickeln, der den Mikrocontroller die Temperatur in Echtzeit überwachen lässt und bei Überschreitung des Schwellenwertes einen Alarm auslöst, müssen mehrere Schritte implementiert werden. Dabei werden Interrupt-Mechanismen und der ADC (Analog-Digital-Wandler) genutzt. Hier sind die notwendigen Schritte und Erläuterungen:
- Initialisierung: Der Mikrocontroller wird initialisiert. Die relevanten Module wie ADC, UART, und Timer werden konfiguriert. Der ADC wird eingerichtet, um kontinuierlich die analogen Signale der Temperatursensoren zu digitalisieren.
- Schwellenwert festlegen: Ein Schwellenwert für die Temperatur wird festgelegt, ab dem der Alarm ausgelöst werden soll.
- Temperatursensoren auslesen: Der ADC liest die analogen Signale der Temperatursensoren und wandelt sie in digitale Werte um.
- Temperaturüberwachung in Echtzeit: Der Mikrocontroller überwacht kontinuierlich die Temperaturdaten. Dies erfolgt in einem Hauptschleifen- oder Interrupthandlingsprozess.
- Alarm auslösen: Wird der Schwellenwert überschritten, wird ein Alarmmechanismus aktiviert. Dies kann durch einen Interrupt gesteuert werden, der bei Überschreitung sofort anspringt.
- Temperaturanzeige aktualisieren: Die aktuellen Temperaturwerte werden auf einem LCD-Display angezeigt.
Hier ist ein Pseudocode, der die wichtigsten Funktionen und Abläufe darstellt:
// Initialisierung des Systems void system_init() { initialize_ADC(); initialize_UART(); initialize_LCD(); initialize_Alarm(); set_threshold_value(THRESHOLD_VALUE); enable_interrupts(); } // Hauptschleife void main() { system_init(); while (1) { // Kontinuierliche Überwachung der Temperatur check_temperature(); update_LCD(); // Wartezeit für nächste Überprüfung delay(SAMPLING_INTERVAL); } } // Überprüfung der Temperatur void check_temperature() { int temperature = read_ADC(); if (temperature > THRESHOLD_VALUE) { trigger_alarm(); } } // Interrupt-Service-Routine für den ADC-Interrupt void ADC_ISR() { int temperature = read_ADC(); if (temperature > THRESHOLD_VALUE) { trigger_alarm(); } else { clear_alarm(); } } // Funktion zum Lesen des ADC-Wertes int read_ADC() { return ADC_get_conversion_result(); } // Funktion zur Aktualisierung des LCD-Displays void update_LCD() { int temperature = read_ADC(); LCD_display_temperature(temperature); } // Funktion zum Auslösen des Alarms void trigger_alarm() { activate_alarm_signal(); send_UART_notification(); } // Funktion zum Deaktivieren des Alarms void clear_alarm() { deactivate_alarm_signal(); }
Dieser Pseudocode umfasst:
- Systeminitialisierung: Alle erforderlichen Module werden konfiguriert.
- Hauptschleife: Kontinuierliche Überwachung und Anzeige der Temperatur.
- Temperaturüberprüfung: Überprüft die aktuelle Temperatur und löst bei Bedarf den Alarm aus.
- Interrupt-Service-Routine: Reagiert auf Temperaturen, die den Schwellenwert überschreiten.
- Alarmauslösung: Aktiviert den Alarm und sendet gegebenenfalls eine Benachrichtigung über UART.
Dieser Ablauf gewährleistet, dass Dein eingebettetes System die Temperatur in Echtzeit überwacht und bei Erreichen kritischer Werte entsprechend reagiert.
Aufgabe 3)
Echtzeitbetriebssysteme (RTOS) und Scheduling-Algorithmen Ein RTOS sorgt für die rechtzeitige und deterministische Ausführung von Aufgaben in eingebetteten Systemen.
- Hartes RTOS: Strikte Einhaltung von Deadlines, bei Verfehlung entsteht ein Systemfehler.
- Weiches RTOS: Deadlines sind flexibel, Verfehlung führt zu Qualitätsdegradierung, aber nicht zu totalem Versagen.
- Fixed Priority Scheduling (FPS): Aufgaben haben feste Prioritäten, höchste Priorität wird zuerst ausgeführt.
- Round Robin Scheduling: Zeitgesteuerte, zyklische Ausführung der Aufgaben in gleicher Reihenfolge.
- Earliest Deadline First (EDF): Aufgaben mit der nächstgelegenen Deadline werden bevorzugt behandelt.
- Rate Monotonic Scheduling (RMS): Periodische Aufgaben, kürzere Perioden haben höhere Priorität.
a)
Du hast drei Aufgaben A, B und C mit folgenden Parametern gegeben:
- A: Periodenzeit: 4 ms, Ausführungszeit: 1 ms
- B: Periodenzeit: 6 ms, Ausführungszeit: 2 ms
- C: Periodenzeit: 8 ms, Ausführungszeit: 2 ms
- Berechne die CPU-Auslastung und prüfe, ob das System unter RMS planbar ist.
Lösung:
Echtzeitbetriebssysteme (RTOS) und Scheduling-Algorithmen Ein RTOS sorgt für die rechtzeitige und deterministische Ausführung von Aufgaben in eingebetteten Systemen.
- Hartes RTOS: Strikte Einhaltung von Deadlines, bei Verfehlung entsteht ein Systemfehler.
- Weiches RTOS: Deadlines sind flexibel, Verfehlung führt zu Qualitätsdegradierung, aber nicht zu totalem Versagen.
- Fixed Priority Scheduling (FPS): Aufgaben haben feste Prioritäten, höchste Priorität wird zuerst ausgeführt.
- Round Robin Scheduling: Zeitgesteuerte, zyklische Ausführung der Aufgaben in gleicher Reihenfolge.
- Earliest Deadline First (EDF): Aufgaben mit der nächstgelegenen Deadline werden bevorzugt behandelt.
- Rate Monotonic Scheduling (RMS): Periodische Aufgaben, kürzere Perioden haben höhere Priorität.
3 Aufgaben:- A: Periodenzeit: 4 ms, Ausführungszeit: 1 ms
- B: Periodenzeit: 6 ms, Ausführungszeit: 2 ms
- C: Periodenzeit: 8 ms, Ausführungszeit: 2 ms
- Berechne die CPU-Auslastung und prüfe, ob das System unter RMS planbar ist.
Um zu prüfen, ob das System unter dem Rate Monotonic Scheduling (RMS) Algorithmus planbar ist, müssen wir die CPU-Auslastung der Aufgaben berechnen und sie mit dem RMS-Planbarkeitskriterium vergleichen.
1. Berechnung der CPU-Auslastung (U): Die CPU-Auslastung einer einzigen Aufgabe ist definiert als \( \frac{C_i}{T_i} \), wobei \( C_i \) die Ausführungszeit und \( T_i \) die Periodenzeit der Aufgabe ist. Die Gesamtauslastung U ist die Summe der Auslastungen aller Aufgaben.
- Aufgabe A: Ausführungszeit (C_A): 1 ms Periodenzeit (T_A): 4 ms CPU-Auslastung für A: \( U_A = \frac{C_A}{T_A} = \frac{1}{4} = 0.25 \)
- Aufgabe B: Ausführungszeit (C_B): 2 ms Periodenzeit (T_B): 6 ms CPU-Auslastung für B: \( U_B = \frac{C_B}{T_B} = \frac{2}{6} = 0.333 \)
- Aufgabe C: Ausführungszeit (C_C): 2 ms Periodenzeit (T_C): 8 ms CPU-Auslastung für C: \( U_C = \frac{C_C}{T_C} = \frac{2}{8} = 0.25 \)
Die Gesamtauslastung U des Systems ist die Summe der einzelnen Auslastungen: \[ U = U_A + U_B + U_C \] \[ U = 0.25 + 0.333 + 0.25 = 0.833 \]
2. RMS-Planbarkeitskriterium: Für drei Aufgaben ist das RMS-Planbarkeitskriterium unabhängig davon, ob die Aufgaben harmonische Perioden haben, wie folgt:\[ \text{Planbarkeit} \ ,\ U \ \leq \ n \left( 2^{\frac{1}{n}} - 1 \right) \ ,\ \text{wobei} \ n = 3 \]\[ U_{max} = 3 \left( 2^{\frac{1}{3}} - 1 \right) \approx 0.779 \]Da die berechnete CPU-Auslastung von 0.833 größer ist als 0.779, ist das System unter RMS nicht planbar.
Ergebnis: Die CPU-Auslastung beträgt 0.833 oder 83.3%. Nach dem RMS-Planbarkeitskriterium ist das System nicht planbar, da die Auslastung die Grenze von 0.779 überschreitet.
b)
Erkläre den Unterschied zwischen hartem und weichem Echtzeitbetriebssystem in Bezug auf die oben genannten Aufgaben A, B und C. Wie würden diese in einem weichen RTOS im Gegensatz zu einem harten RTOS behandelt werden? Gehe dabei insbesondere auf die Folgen bei Verfehlung der Deadlines ein.
Lösung:
Echtzeitbetriebssysteme (RTOS) und Scheduling-Algorithmen Ein RTOS sorgt für die rechtzeitige und deterministische Ausführung von Aufgaben in eingebetteten Systemen.
- Hartes RTOS: Strikte Einhaltung von Deadlines, bei Verfehlung entsteht ein Systemfehler.
- Weiches RTOS: Deadlines sind flexibel, Verfehlung führt zu Qualitätsdegradierung, aber nicht zu totalem Versagen.
- Fixed Priority Scheduling (FPS): Aufgaben haben feste Prioritäten, höchste Priorität wird zuerst ausgeführt.
- Round Robin Scheduling: Zeitgesteuerte, zyklische Ausführung der Aufgaben in gleicher Reihenfolge.
- Earliest Deadline First (EDF): Aufgaben mit der nächstgelegenen Deadline werden bevorzugt behandelt.
- Rate Monotonic Scheduling (RMS): Periodische Aufgaben, kürzere Perioden haben höhere Priorität.
Unterschied zwischen hartem und weichem Echtzeitbetriebssystem:Um den Unterschied zwischen harten und weichen Echtzeitbetriebssystemen zu erklären, nehmen wir die Aufgaben A, B und C mit den folgenden Parametern als Beispiel:
- A: Periodenzeit: 4 ms, Ausführungszeit: 1 ms
- B: Periodenzeit: 6 ms, Ausführungszeit: 2 ms
- C: Periodenzeit: 8 ms, Ausführungszeit: 2 ms
- Hartes RTOS: Ein RTOS gilt als hartes Echtzeitsystem, wenn es notwendig ist, dass jede Aufgabe ihre Deadline streng einhält. Wird eine Deadline überschritten, führt dies zu einem Systemfehler. Die Verfehlung einer Deadline kann fatale Konsequenzen haben und daher ist die Einhaltung der Deadlines absolut kritisch. Beispiel: In einem harten RTOS müssen Aufgaben A, B und C ihre jeweiligen Deadlines von 4 ms, 6 ms und 8 ms strikt einhalten. Wird eine dieser Deadlines überschritten, könnte das System ausfallen oder einen Fehler erzeugen, da eine verspätete Ausführung nicht akzeptabel ist.
- Weiches RTOS: Ein RTOS gilt als weiches Echtzeitsystem, wenn die Deadlines flexibler sind und deren Verfehlung nicht zu einem Systemfehler führt. Stattdessen kann die Verfehlung einer Deadline zu einer Degradierung der Qualität der Systemleistung führen, jedoch ohne totales Versagen. Beispiel: In einem weichen RTOS haben Aufgaben A, B und C die gleichen Periodenzeiten und Ausführungszeiten wie im harten RTOS. Allerdings würden Verfehlungen der Deadlines hier zu einer Qualitätsdegradierung führen, z.B. könnte Aufgabe C verspätet ausgeführt werden, ohne dass das System einen Fehler meldet, jedoch könnten die Outputs von C an Qualität verlieren oder verspätet sein.
Folgen bei Verfehlung der Deadlines:- In einem harten RTOS:
- Verfehlung einer Deadline führt zu einem Systemfehler.
- System könnte abstürzen oder unerwünschtes Verhalten zeigen.
- Wird in sicherheitskritischen Anwendungen wie Flugzeugen, medizinischen Geräten usw. genutzt.
- In einem weichen RTOS:
- Verfehlung einer Deadline führt zu einer Degradierung der Systemleistung.
- System bleibt funktionsfähig, allerdings mit reduzierter Qualität.
- Nützlich in Anwendungen wie Multimedia, Datenerfassung und Telekommunikation, wo einige Verzögerungen tolerierbar sind.
Daher ist der Hauptunterschied die Art und Weise, wie Deadlines behandelt werden und die resultierende Systemreaktion auf deren Verfehlung. Ein hartes RTOS kann sich keine Verfehlung leisten, während ein weiches RTOS flexibler ist, aber dabei eine gewisse Einbuße bei der Qualität der Dienstleistung in Kauf nimmt.
c)
Implementiere in Pseudocode einen Scheduling-Algorithmus, der die obigen Aufgaben A, B und C nach dem Earliest Deadline First (EDF) Prinzip plant und ausführt. Achte darauf, die Deadlines korrekt zu behandeln und eine Prioritätenliste der Aufgaben zu führen.
Lösung:
Echtzeitbetriebssysteme (RTOS) und Scheduling-Algorithmen Ein RTOS sorgt für die rechtzeitige und deterministische Ausführung von Aufgaben in eingebetteten Systemen.
- Hartes RTOS: Strikte Einhaltung von Deadlines, bei Verfehlung entsteht ein Systemfehler.
- Weiches RTOS: Deadlines sind flexibel, Verfehlung führt zu Qualitätsdegradierung, aber nicht zu totalem Versagen.
- Fixed Priority Scheduling (FPS): Aufgaben haben feste Prioritäten, höchste Priorität wird zuerst ausgeführt.
- Round Robin Scheduling: Zeitgesteuerte, zyklische Ausführung der Aufgaben in gleicher Reihenfolge.
- Earliest Deadline First (EDF): Aufgaben mit der nächstgelegenen Deadline werden bevorzugt behandelt.
- Rate Monotonic Scheduling (RMS): Periodische Aufgaben, kürzere Perioden haben höhere Priorität.
Implementiere in Pseudocode einen Scheduling-Algorithmus nach Earliest Deadline First (EDF)Der Earliest Deadline First (EDF) Scheduling-Algorithmus priorisiert Aufgaben basierend auf ihren Deadlines. Aufgaben mit der am nächsten liegenden Deadline werden zuerst ausgeführt. Hier ist ein Pseudocode-Skript, das die Aufgaben A, B und C plant und ausführt:
- Initialisierung der Aufgaben:
- A: Periodenzeit = 4 ms, Ausführungszeit = 1 ms
- B: Periodenzeit = 6 ms, Ausführungszeit = 2 ms
- C: Periodenzeit = 8 ms, Ausführungszeit = 2 ms
```# Definiere Aufgaben mit Periodenzeit und Ausführungszeitclass Task: def __init__(self, name, period, execution_time): self.name = name self.period = period self.execution_time = execution_time self.next_deadline = period # erste Deadline = erste Periode# Erstelle AufgabenA = Task('A', 4, 1)B = Task('B', 6, 2)C = Task('C', 8, 2)# Liste aller Aufgabentasks = [A, B, C]# Zeitvariablecurrent_time = 0# Funktion zum Ermitteln der Aufgabe mit der nächstgelegenen Deadlinedef get_earliest_deadline_task(tasks): tasks.sort(key=lambda task: task.next_deadline) return tasks[0]# Scheduling-Schleifewhile True: # Erhalte die Aufgabe mit der nächstgelegenen Deadline task = get_earliest_deadline_task(tasks) # Führe die Aufgabe aus print(f'Ausführung von Aufgabe {task.name} von {current_time} bis {current_time + task.execution_time} ms') current_time += task.execution_time # Aktualisiere die Deadline der ausgeführten Aufgabe task.next_deadline += task.period # Überprüfe, ob eine Deadline verfehlt wurde (optionale Implementierung, je nach RTOS-Typ) for t in tasks: if current_time > t.next_deadline: print(f'Deadline verfehlt: Aufgabe {t.name} hat ihre Deadline um {current_time - t.next_deadline} ms überschritten.') # Je nach RTOS-Typ geeignete Maßnahmen ergreifen (z.B. Fehlermeldung, Neustart, Warnung) # Optional: Beenden nach einer festgelegten Zeit (z.B. 100 ms) if current_time > 100: break\r```
Erklärungen zum Pseudocode:- Die Klasse Task definiert Aufgaben mit ihren Periodenzeiten, Ausführungszeiten und den nächsten Deadlines.
- Die Funktion get_earliest_deadline_task sortiert die Aufgaben basierend auf ihre Deadlines und gibt die Aufgabe mit der nächstgelegenen Deadline zurück.
- In der Scheduling-Schleife wird die Aufgabe mit der nächstgelegenen Deadline ausgeführt, und die aktuelle Zeit wird um ihre Ausführungszeit erhöht.
- Die Deadline der ausgeführten Aufgabe wird aktualisiert, um ihre nächste Periode widerzuspiegeln.
- Optionale Überprüfung, ob Deadlines verfehlt wurden, und entsprechende Maßnahmen werden ergriffen.
- Die Schleife läuft kontinuierlich, kann aber optional nach einer bestimmten Zeit beendet werden (z.B. nach 100 ms)
Dieser Pseudocode veranschaulicht, wie ein EDF-Scheduling-Algorithmus die Aufgaben A, B und C nach ihren Deadlines plant und ausführt, wobei die Prioritätenliste der Aufgaben korrekt behandelt wird.
Aufgabe 4)
In einem eingebetteten System ist die Funktion der Signalverarbeitung gefordert, die eine hohe Leistung und Energieeffizienz erfordert. Du stehst vor der Aufgabe, das System so zu partitionieren, dass ein optimaler Kompromiss zwischen Hardware- und Softwarekomponenten gefunden wird.
a)
Erkläre die grundlegenden Unterschiede zwischen Hardware- und Softwarepartitionierung im Co-Design. Gehe dabei auf Aspekte wie Leistung, Energieverbrauch, Kosten und Flexibilität ein. Unterstütze Deine Erklärung gegebenenfalls mit Beispielen.
Lösung:
Im Co-Design von eingebetteten Systemen stellen Hardware- und Softwarepartitionierung zwei wichtige Ansätze dar, die genutzt werden, um die optimale Leistung, Energieeffizienz, Kosten und Flexibilität des Gesamtsystems zu erreichen. Im Folgenden erkläre ich die grundlegenden Unterschiede zwischen diesen beiden Ansätzen unter Berücksichtigung verschiedener Aspekte:
- Leistung:
- Hardware: Hardwarelösungen bieten in der Regel eine höhere Leistung, da spezialisierte Schaltungen entworfen werden können, die bestimmte Aufgaben sehr effizient ausführen. Beispiele hierfür sind DSPs (Digital Signal Processors) oder ASICs (Application-Specific Integrated Circuits).
- Software: Softwarelösungen laufen auf allgemeinen Prozessoren (CPUs) oder Mikrocontrollern, die universeller und flexibler sind, jedoch im Vergleich zu spezialisierter Hardware langsamer sein können.
- Energieverbrauch:
- Hardware: Da Hardwarelösungen oft speziell für bestimmte Aufgaben entwickelt werden, können sie energieeffizienter sein. Ein Beispiel hierfür ist die Verwendung von FPGAs (Field Programmable Gate Arrays), die für bestimmte Anwendungen optimiert sind und weniger Energie verbrauchen.
- Software: Software, die auf generischen Prozessoren läuft, ist oft weniger energieeffizient, da solche Prozessoren nicht spezifisch für die auszuführenden Aufgaben optimiert sind.
- Kosten:
- Hardware: Die Entwicklung spezialisierter Hardwarelösungen kann sehr teuer sein, da sie oft spezifische Designs und Fertigungsprozesse erfordern. Dies kann durch hohe Einmalkosten für die Entwicklung und Produktion gekennzeichnet sein.
- Software: Softwarelösungen sind in der Regel kostengünstiger zu entwickeln, da sie auf bereits vorhandenen, allgemeinen Hardwareplattformen laufen und daher keine speziellen Hardwareentwicklungen erfordern.
- Flexibilität:
- Hardware: Hardwarelösungen sind allgemein weniger flexibel, da sie für spezifische Aufgaben hardwaretechnisch festgelegt sind. Änderungen oder Aktualisierungen erfordern oft neue Hardware.
- Software: Software bietet eine höhere Flexibilität, da sie leicht geändert oder aktualisiert werden kann, ohne die zugrundeliegende Hardware zu ersetzen. Dies ermöglicht eine schnellere Anpassung an neue Anforderungen oder Fehlerbehebungen.
Zusammengefasst liefern Hardwarelösungen Vorteile in Bezug auf Leistung und Energieverbrauch, sind jedoch teurer und weniger flexibel. Softwarelösungen sind kostengünstiger und flexibler, können jedoch in Bezug auf Leistung und Energieverbrauch Nachteile haben. Die optimale Partitionierung in einem Co-Design-Prozess erfordert oft eine sorgfältige Abwägung dieser Aspekte, um den besten Kompromiss für die spezifischen Anwendungsanforderungen zu finden.
b)
Beschreibe zwei heuristische Methoden, die zur Partitionierung von Systemfunktionen auf Hardware- und Softwarekomponenten verwendet werden können. Erkläre den allgemeinen Ablauf dieser Methoden und diskutiere ihre Vor- und Nachteile.
Lösung:
Zur Partitionierung von Systemfunktionen auf Hardware- und Softwarekomponenten können verschiedene heuristische Methoden angewendet werden. Hier beschreibe ich zwei gängige Methoden, erläutere den allgemeinen Ablauf und diskutiere deren Vor- und Nachteile:
- 1. Greedy Heuristic:
- Ablauf:
- Beginn mit einer Grundpartition, bei der alle Systemfunktionen entweder in Hardware oder in Software realisiert werden.
- Berechnung der Kostenfunktion (z.B. basierend auf Leistung, Energieverbrauch und Kosten) für die aktuelle Partition.
- Iterative Auswahl der Funktion mit dem höchsten Potenzial zur Verbesserung der Kostenfunktion durch Verschiebung von Hardware zu Software oder umgekehrt.
- Durchführung der Verschiebung und Neuberechnung der Kostenfunktion.
- Fortsetzung des Prozesses, bis keine weitere Verbesserung möglich ist.
- Vorteile:
- Einfach zu implementieren und schnell in der Ausführung.
- Geeignet für Systeme mit relativ wenigen zu partitionierenden Funktionen.
- Nachteile:
- Kann zu einem lokalen Optimum führen, das nicht das globale Optimum ist.
- Unzureichend für sehr komplexe Systeme mit vielen Funktionen.
- 2. Simulated Annealing:
- Ablauf:
- Beginn mit einer zufälligen Partition der Systemfunktionen.
- Berechnung der Kostenfunktion (z.B. basierend auf Leistung, Energieverbrauch und Kosten) für die aktuelle Partition.
- Iterative Erzeugung einer neuen Partition durch zufällige Verschiebung einer oder mehrerer Funktionen von Hardware zu Software oder umgekehrt.
- Berechnung der Kostenfunktion der neuen Partition.
- Akzeptanz der neuen Partition basierend auf einer Wahrscheinlichkeit, die abhängig von der Differenz der Kostenfunktionen und einer temperierenden Variable (die im Laufe des Algorithmus abnimmt) ist.
- Reduzierung der temperierenden Variable und Wiederholung des Prozesses, bis das System „abgekühlt“ ist und keine signifikanten Verbesserungen mehr erzielt werden können.
- Vorteile:
- Kann das globale Optimum finden oder zumindest sehr nahe daran kommen.
- Geeignet für komplexe Systeme mit vielen zu partitionierenden Funktionen.
- Nachteile:
- Komplexer zu implementieren und rechenintensiver als einfache heuristische Methoden.
- Erfordert eine Feinabstimmung der Algorithmusparameter (z.B. Temperatur, Abkühlungsrate), was zeitaufwendig sein kann.
Beide heuristischen Methoden bieten unterschiedliche Ansätze zur Lösung des Partitionierungsproblems, wobei der „Greedy“-Ansatz einfacher und schneller, jedoch möglicherweise weniger optimal ist, während das „Simulated Annealing“ komplexer, aber potenziell genauer ist. Die Wahl der Methode hängt stark von den Anforderungen und der Komplexität des jeweiligen Systems ab.
c)
Gegeben sei ein einfacher Signalverarbeitungsalgorithmus, der aus den folgenden Schritten besteht: 1) Filtern des Signals, 2) Fourier-Transformation, 3) Extraktion von Signalmerkmalen. Skizziere einen möglichen Partitionierungsansatz für diese Algorithmuschritte in Hardware und Software. Begründe Deine Wahl unter Berücksichtigung von Kriterien wie Leistung, Energieeffizienz und Entwicklungskosten.
Lösung:
Um den gegebenen Signalverarbeitungsalgorithmus optimal zwischen Hardware und Software zu partitionieren, müssen wir die einzelnen Schritte auf ihre Anforderungen hin analysieren. Die Schritte bestehen aus: 1) Filtern des Signals, 2) Fourier-Transformation, 3) Extraktion von Signalmerkmalen. Im Folgenden skizziere ich einen möglichen Partitionierungsansatz:
- 1. Filtern des Signals:
- Wahl: Hardware
- Begründung:
- Leistung: Das Filtern ist ein Schritt, der eine hohe Anzahl an wiederholten Berechnungen erfordert. Hardwarelösungen wie spezialisierte Filter-ASICs oder FPGA-Implementierungen sind in der Lage, diese Operationen parallel auszuführen und somit eine hohe Leistung zu erreichen.
- Energieeffizienz: Spezialisierte Hardware für Filteroperationen kann speziell entworfen werden, um energieeffizient zu sein.
- Entwicklungskosten: Obwohl die Entwicklung spezialisierter Hardware kostspielig sein kann, lohnt sich dies aufgrund der hohen Leistungsanforderungen.
- 2. Fourier-Transformation:
- Wahl: Hardware
- Begründung:
- Leistung: Fourier-Transformationen (insbesondere die schnelle Fourier-Transformation, FFT) erfordern eine hohe Rechenleistung. Diese lässt sich durch spezialisierte Hardware wie FFT-Co-Prozessoren oder DSPs effizient realisieren.
- Energieeffizienz: Hardware für FFT kann so optimiert werden, dass sie weniger Energie als allgemeine Prozessoren verbraucht.
- Entwicklungskosten: Die Entwicklungskosten können hoch sein, aber der Leistungsgewinn rechtfertigt dies, insbesondere in einem System, das hohe Signalverarbeitungsanforderungen hat.
- 3. Extraktion von Signalmerkmalen:
- Wahl: Software
- Begründung:
- Leistung: Die Merkmalsextraktion kann Algorithmen beinhalten, die variieren und angepasst werden müssen. Software auf einem Mikrocontroller oder einem CPU bietet die Flexibilität, verschiedene Algorithmen zu implementieren und zu ändern.
- Energieeffizienz: Auch wenn Softwarelösungen auf generischen Prozessoren weniger energieeffizient sind als spezialisierte Hardware, ist Flexibilität hier wichtiger als maximale Energieeffizienz.
- Entwicklungskosten: Softwareentwicklung ist in der Regel kostengünstiger und erlaubt schnellere Iterationen und Anpassungen.
Zusammenfassend könnte ein möglicher Partitionierungsansatz wie folgt aussehen: Das Signalfiltern und die Fourier-Transformation werden in Hardware implementiert, um von der hohen Leistung und Energieeffizienz zu profitieren. Die Extraktion von Signalmerkmalen wird in Software realisiert, um Flexibilität und niedrigere Entwicklungskosten zu erreichen. Diese Partitionierung gewährleistet einen optimalen Kompromiss zwischen Leistung, Energieeffizienz und Entwicklungskosten.
d)
Angenommen, die Implementierung der Fourier-Transformation (FT) in Hardware benötigt 2ms, während ihre Implementierung in Software 10ms benötigt. Die Implementierung des Filters benötigt in Hardware 1ms und in Software 5ms. Die Extraktion von Signalmerkmalen benötigt in beiden Fällen 3ms. Berechne die gesamte Verarbeitungszeit in den folgenden Fällen: a) Alle Schritte werden in Hardware implementiert, b) Alle Schritte werden in Software implementiert, c) Die FT wird in Hardware und der Filter in Software implementiert. Diskutiere die Ergebnisse im Kontext der Echtzeit-Anforderungen.
Lösung:
Um die gesamte Verarbeitungszeit in den verschiedenen Fällen zu berechnen, betrachten wir die angegebenen Zeiten für jede Implementierung. Hier sind die Schritte mit ihren jeweiligen Zeiten:
- Filtern des Signals:
- Hardware: 1ms
- Software: 5ms
- Fourier-Transformation (FT):
- Hardware: 2ms
- Software: 10ms
- Extraktion von Signalmerkmalen:
- Beide Fälle (Hardware und Software): 3ms
Nun berechnen wir die gesamte Verarbeitungszeit für die verschiedenen Fälle:
- Alle Schritte werden in Hardware implementiert:
- Filtern: 1ms
- FT: 2ms
- Extraktion von Signalmerkmalen: 3ms
Gesamte Verarbeitungszeit: 1ms (Filtern) + 2ms (FT) + 3ms (Extraktion) = 6ms - Alle Schritte werden in Software implementiert:
- Filtern: 5ms
- FT: 10ms
- Extraktion von Signalmerkmalen: 3ms
Gesamte Verarbeitungszeit: 5ms (Filtern) + 10ms (FT) + 3ms (Extraktion) = 18ms - FT wird in Hardware und der Filter in Software implementiert:
- Filtern: 5ms
- FT: 2ms
- Extraktion von Signalmerkmalen: 3ms
Gesamte Verarbeitungszeit: 5ms (Filtern) + 2ms (FT) + 3ms (Extraktion) = 10ms
Diskussion der Ergebnisse:
Im Kontext der Echtzeit-Anforderungen sind die Verarbeitungszeiten entscheidend für die Leistungsfähigkeit des Systems. Die Analyse zeigt:
- Fall a: Alle Schritte in Hardware (6ms): Diese Option hat die geringste Verarbeitungszeit und erfüllt daher Echtzeit-Anforderungen optimal. Allerdings könnte diese Option mit hohen Entwicklungskosten verbunden sein.
- Fall b: Alle Schritte in Software (18ms): Diese Option zeigt die höchste Verarbeitungszeit. Wenn das System strenge Echtzeit-Anforderungen hat, könnte diese Lösung unzureichend sein, obwohl sie kostengünstiger in der Entwicklung sein könnte.
- Fall c: FT in Hardware und Filter in Software (10ms): Diese Option bietet eine gute Balance zwischen den anderen beiden Fällen. Sie hat eine mittlere Verarbeitungszeit und kann eine akzeptable Lösung sein, wenn eine Kompromisslösung zwischen Leistung und Kosten gesucht wird. In vielen praktischen Anwendungen könnte dies die beste Option darstellen, um sowohl Leistungs- als auch Kostenanforderungen zu erfüllen.
Die Entscheidungen zur Partitionierung müssen letztlich auf Basis spezifischer Echtzeit-Anforderungen, Budgetbeschränkungen und der Flexibilität des Systems getroffen werden.