Cooperative Memory Management in Safety-Critical Embedded Systems

Language
en
Document Type
Doctoral Thesis
Issue Date
2016-07-12
Issue Year
2016
Authors
Stilkerich, Isabella
Editor
Abstract

Memory management is a challenging task and its handling becomes more difficult with the rising complexity of software systems. Embedded systems are predominated by the use of manual storage control and as these systems become more and more extensive, means to assist the programmer in performing correct memory management are required. By using a type-safe language, the use of automated storage control is promoted: Combining the knowledge about a type-safe application, system software and the hardware properties assists the creation of a memory handling that is tailored to a particular system setup: Software can be deployed on several kinds of microcontrollers that may vary in their hardware-specific properties, such as the availability of memories, the address-space layout or their proneness to transient hardware faults. In addition, a program’s non-functional properties, for instance, its predictability, have to be respected during the design of memory management. In this thesis I describe how system- and application-specific memory management for a particular hardware device can be created. I call my approach cooperative memory management (CMM) and it pursues a co-design of memory management by respecting the software quality attributes efficiency and predictability and the hardware property reliability. CMM is a compound of static analyses on type-safe applications and runtime support. For the implementation of my framework, I use the KESO JVM [169] in which I integrated an amended version of an escape analysis to encourage compiler-assisted storage control. Besides safe, automatic stack allocation, I implemented new backends for my escape analysis through which, among other things, I provide an automated solution to regional memory specified in the Real-Time Specification for Java [33]. The use of escape-analysis results ameliorates a program’s reliability by reducing the effects of transient hardware faults. To further improve reliability, I evolved special runtime checks that are able to preserve memory safety in systems prone to transient faults. Besides compiler support, I developed RT-LAGC, a real-time garbage collector to maintain heap objects not managed by regional memory. RT-LAGC is optimized through the compilation process and tailored to the application whose heap memory it manages. I designed CMM’s storage control techniques to be easily exchangeable and extensible by the developer so that static and dynamic analyses can find out which combination of techniques works reasonably well to achieve efficiency, predictability and reliability. By evaluating a comprehensive real-time benchmark and various memory-management configurations I showed, that the developer-assisted co-design approach is able to address the properties reliability, efficiency and predictability.

Abstract

Speicherverwaltung ist eine anspruchsvolle Aufgabe und ihre korrekte Umsetzung wird durch die ansteigende Komplexität von Softwaresystemen immer schwieriger. In eingebetteten Systemen werden hauptsächlich manuelle Techniken eingesetzt. Allerdings werden auch diese Systeme immer komplexer und es ist sinnvoll, dem Entwickler unterstützende Mittel zur Umsetzung der Speicherverwaltung an die Hand zu geben. Typsichere Programmiersprachen fördern den Einsatz automatisierter Techniken. Das Wissen über ein typsicheres Programm, die eingesetzte Systemsoftware und die Eigenschaften der verwendeten Hardware kann genutzt werden, um eine maßgeschneiderte Speicherverwaltung für den jeweiligen Einsatzzweck bereitzustellen. Dadurch können Eigenschaften der Hardware, wie z.B. ihre Speicherarchitektur und ihre Anfälligkeit gegenüber transienten Fehlern, sowie Qualitätseigenschaften der Software wie z.B. ihre Vorhersagbarkeit beim Entwurf der Speicherverwaltung berücksichtigt werden. In dieser Dissertation wird ein Rahmenwerk beschrieben, das in der Lage ist, eine Speicherverwaltung zu erzeugen, die die gewünschten Eigenschaften berücksichtigt. Dieses Rahmenwerk trägt den Namen kooperative Speicherverwaltung und verfolgt einen Co-Design Ansatz, der beispielsweise die nichtfunktionalen Softwareattribute Effizienz und Vorhersagbarkeit sowie die Hardwareeigenschaft Zuverlässigkeit in den Entwurf miteinbezieht. Der Ansatz wurde durch statische Analysen und Laufzeitunterstützung realisiert. Die Implementierung erfolgte im Umfeld der KESO JVM [169], in die eine verbesserte Version einer bekannten Fluchtanalyse integriert wurde und die die übersetzergestützte Speicherverwaltung umsetzt. Neben den bekannten Einsatzgebiet der Stapelallokation wurden die Ergebnisse der Fluchtanalyse auf neue Art und Weise genutzt, um u.a. eine automatisierte Lösung für Regionalspeicher, wie er in der Java Echtzeitspezifikation [33] beschrieben ist, anzubieten. Fluchtanalyse beeinflusst die Programmeigenschaften in Anwesenheit transienter Fehler positiv. Um die Zuverlässigkeit weiter zu verbessern, wurden spezielle Laufzeitüberprüfungen entwickelt, die die Isolationseigenschaften der Sprache Java in Anwesenheit transienter Fehler erhalten. Neben der Übersetzerunterstützung wurde der echtzeitfähige Speicherbereiniger RT-LAGC entwickelt, der nicht durch Regionalspeicher abgedeckte Objekte verwaltet. RT-LAGC wird auf die Anwendung mithilfe statischer Analyse abgestimmt. Die implementierten Techniken können durch den Entwickler einfach ausgetauscht und erweitert werden und somit können statische und dynamische Analysen eine sinnvolle Kombination der Techniken bestimmen. Der Gesamtansatz wurde anhand eines Echtzeitprogramms evaluiert und es konnte gezeigt werden, dass die kooperative Vorgehensweise das Co-Design von Speicherverwaltung im Umfeld eingebetteter Systemen unterstützt.

DOI
Faculties & Collections
Zugehörige ORCIDs