Eingebettete Systeme durchdringen praktisch alle Bereiche des täglichen Lebens. Immer häufiger übernehmen diese sicherheitskritischen Echtzeitsysteme
Aufgaben, welche hohe Anforderungen an die funktionale Sicherheit
stellen. Beispiele hierfür sind Fahrerassistenzsysteme in modernen
Automobilen, medizinische Geräten, Prozessanlagen oder Flugzeugen.
Fehlfunktionen in diesen Anwendungen ziehen mitunter katastrophale
Konsequenzen nach sich: finanziell, materiell bis hin zu
Personenschäden. Die Entwicklung sicherer und robuster Systeme gewinnt
daher in der Forschung und Entwicklung zunehmend an Bedeutung.
Wichtige Hinweise zum Format der Lehrveranstaltung
Die Veranstaltung findet im Sommersemester 2022 wieder in Präsenz statt.
Davon unberührt stehen Ihnen die Online-Materialien der Vorsemester uneingeschränkt zur Verfügung.
Aufgrund der Raumsituation ist die Teilnehmerzahl begrenzt, daher ist eine Voranmeldung in LSF zwingend erforderlich.
In der Veranstaltung werden Programmierkenntnisse in C/C++ vorausgesetzt. Einen Eindruck über den Ablauf der Übungen können Sie sich weiter unten machen.
Gruppenarbeit:
Die Übungen werden in Dreiergruppen bearbeitet und in persönlichen
Gesprächen (Präsenz oder Online) abgegeben. Die verteilte
Versionsverwaltung git wird im Rahmen der Übungen vermittelt
und dient als Kollaborations- und
Abgabewerkzeug.
Die Laborarbeit in Form einer betreuten Rechnerübung findet Online oder in Präsenz statt.
In jedem Fall sollten sich Gruppen gemäß der Vorlieben (Präsenz/Online) homogen zusammenschließen.
Anmeldung
Bitte melden Sie sich in LSF an, bei Überbuchung erfolgt die Vergabe der Plätze nach der ersten Vorlesung im Losverfahren.
Die Veranstaltung ist inhaltlich weitgehend in sich abgeschlossen und
für alle Studierenden mit einer Begeisterungsfähigkeit für praktische, systemnahe Informatik
geeignet. Allgemein sind grundlegenden
Betriebssystemkenntnissen, systemnaher Programmierung von eingebetteten
Systemen und ein gewisses Durchhaltevermögen äußerst hilfreich.
Für die Bearbeitung der Übungsaufgaben sind entsprechend grundlegenden Programmierkenntnissen in C und/oder C++ notwendig. Weiterhin sind grundlegende Erfahrungen im Umgang mit der Linux-Umgebung in den Pools beziehungsweise deren eigenständige Aneignung erforderlich.
Zur Einordnung der eigenen C-Kenntnisse haben wir einen kleinen Selbsttest
zusammengestellt. Wenn Sie (mit etwas knobeln) die Fragen beantworten und auch die Programmieraufgabe lösen können, sollten keine
handwerklichen Probleme mit den Übungsaufgaben haben und können sich
voll auf die zu vermittelnden Konzepte konzentrieren. Fällt Ihnen die
Beantwortung der Fragen schwer, sollten die fraglichen
Programmierkonzepte und die Bedeutung der unbekannten Schlüsselwörter
vor Belegung des Moduls nachrecherchiert werden, da diese nicht im
Rahmen der Übung vermittelt werden können.
Die Veranstaltung Verlässliche Systemsoftware stellt Methoden und Techniken für die Entwicklung sicherheitskritischer Systeme aus Sicht der Systemsoftware (Betriebssystem- / Maschinenprogrammebene) in den Mittelpunkt. Ziel der Vorlesung
ist die zuverlässige Entwicklung von Software (frei von internen Fehlern) ebenso wie die Entwicklung zuverlässiger Software (robust gegenüber äußeren Fehlern). Im Fokus steht hierbei weniger die Vermittlung von theoretischer Grundkenntnisse, sondern
vielmehr deren praktischer Einsatz in Form von:
Fehlersuche und -vermeidung: funktional, räumlich und zeitlich,
unter Einsatz existierender Werkzeuge und Methoden wie sich auch in der Industrie zum Einsatz kommen.
Robuste Echtzeitsysteme durch Fehlertoleranz und Verteilung
Auf diese Weise wird ein Fundament für die konstruktive Umsetzung verlässlicher Systeme gelegt werden. Dieses Modul vermittelt daher fundierte Anknüpfungspunkte für die Entwicklung verlässlicher (Echtzeit-)systeme.
Vorlesungsfolien
Achtung: Die Folien aus dem Vorjahr (WS21) bleiben für Sie zur Ansicht verlinkt und werden fortlaufend im Semester aktualisiert.
Kapitel
Vorlesung
Thema
Folien
Screencasts
1
06.04.
1. Organisatorisches X. Was sind Echtzeitsysteme in 10 Minuten
Shubu Mukherjee.
Architecture Design for Soft Errors.
Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2008.
Olga Goloubeva, Maurizia Rebaudengo, Matteo Sonza Reorda, and Massimo Violante.
Software-Implemented Hardware Fault Tolerance.
Springer-Verlag, 233 Spring Street, New York, NY 10013, USA, 2006.
Hierbei ist aber zu beachten, dass sich der Inhalt der Vorlesung nicht streng
an einem dieser Bücher orientiert und sich keineswegs auf diese Bücher
beschränkt. Die gezielte Aufarbeitung der einzelnen Vorlesungskapitel kann
anhand der Literaturhinweise am Ende der jeweiligen Foliensätze
erfolgen. Grundlegende Erläuterungen zu den Fachbegriffen und Grundtechniken
fehlertoleranter Systeme sollten darüber hinaus in jedem Fachbuch vermittelt
werden, das sich mit diesem Themengebiet befasst.
Analog zur Vorlesung befassen sich die Übungsaufgaben mit der zuverlässigen Entwicklung zuverlässiger Software.
Im Rahmen eines Produktentwicklungszyklus werden in den Übungsaufgaben
sowohl selbstgeschriebene als auch fremde Codestücke unter die Lupe
genommen. Die Programmiersprache ist hierbei vorwiegend C.
Als Vorraussetzung für die Übung sollte man deshalb grundlegende
C-Kenntnisse mitbringen.
Zuverlässige Software entwickeln
Während der erste Teil sich auf das Finden von Entwicklungsfehlern
konzentriert, betrachten wir in der zweiten Hälfte auch Fehler, die zur
Laufzeit auftreten können.
Hierzu zählen vor allem unerwartete Hardwarefehler, die den
Programmfluss bzw. Rechenergebnisse beeinflussen können.
In der Übung werden wir hierzu verschiedene konstruktive Maßnahmen
kennenlernen und umsetzen, die die Software gegen derartige
Fehlerszenarien
härten können.
Zuverlässig entwickeln
Ein wesentlicher Bestandteil dieser Veranstaltung ist das Kennenlernen
und der Umgang mit Werkzeugen, die die Entwicklung verlässlicher
Systeme unterstützen.
Hierzu zählen u.a.:
Der HelpDesk findet online in unserem Matrix-Raum #vss-helpdesk:fachschaften.org (z.B. via Matrix-Server der Fachschaft)
statt. Dort steht euch asynchron ein Tutor zur Seite, um Fragen zu
beantworten und Hilfestellungen zu geben. Sollte die Textform nicht als
Kommunikationskanal ausreichen, besteht die Möglichkeit, auf unseren
Raum auf unseren BigBlueButton-Server auszuweichen.
Der Großteil der Videos wurde im Sommersemester 2020 aufgezeichnet.
Sofern nötig, wurden diese neu eingespielt. Sollten sich dennoch
veraltete Daten oder ins SS20 verweisende Links in den Videos finden,
bitte entsprechend durch SS22 ersetzen (und uns mitteilen).
Kapitel
Start
Thema
Folien
Screencasts
1
14.04.
1. Versionsverwaltung mit git 1.0 Organisatorisches 1.1 Nachschlagewerk: Reguläre Übungsfolien Git by Example
2. Softwareentwurf, Festkommaarithmetik und Schnittstellendesign 2.0 Prinzipien des Softwareentwurfs 2.1 C als standardisierte Programmiersprache 2.2 Festkommaarithmetik 2.3 Softwareentwurf am Beispiel eines einfachen Filters 2.4
Aufgabe2: Filterimplementierung mit Festkommaarithmetik
3. Triple Modular Redundancy 3.0 Die Zahl 3 3.1 Replikation auf Quellcodeebene, Untersuchung von Binärdateien 3.2 Aufgabe 3: Triple Modular Redundancy Exkurs: Replikation in der Praxis Exkurs: Arbeiten mit Unixoiden
Benutzerschnittstellen