In dieser Arbeit wird ein Algorithmus zur Anordnung von Code und Daten im Speicher vorgestellt. Der Algorithmus ermöglicht eine effektive Nutzung der Caches im Hinblick auf einen Einsatz in Realzeitsystemen. Er sorgt dafür, dass Laufzeitverzögerungen durch Cache-Misses besser prädizierbar sind und ermöglicht es, Teile des Codes und der Daten permanent im Cache zu halten. Dies ist für besonders zeitkritische Teilsysteme unerlässlich. Der Einfluss der Caches auf das Laufzeitverhalten von Software wird an praktischen Beispielen untersucht und bewertet.
In diesem Zusammenhang werden auch Techniken zur intelligenten Speicherverwaltung für Realzeitsysteme untersucht. Ein Schwerpunkt ist hier der Datenaustausch zwischen Tasks, auch auf unterschiedlichen Prozessoren. Es werden die Auswirkungen des Cache-Snooping untersucht sowie Eckpunkte für eine vorteilhafte Verteilung von Tasks auf mehrere Prozessoren unter dem Gesichtspunkt der Speicherverwaltung erarbeitet.
Neben den Caches spielen auch Mechanismen wie die out-of-order execution und die Branch Prediction eine wichtige Rolle bei modernen Prozessoren. Diese Mechanismen werden erklärt und im Hinblick auf ihre Auswirkungen auf die Laufzeit von Software untersucht. Im Vergleich zu den Caches spielen diese Faktoren jedoch nur eine geringe Rolle.
Es wird eine Methodik zur präzisen Messung von Ausführungszeiten vorgestellt, die es ermöglicht, Laufzeiten unter verschiedenen Bedingungen zu messen. So können vor der Messung beispielsweise der Instruktionen- oder der Daten-Cache so manipuliert werden, dass sie für den zu messenden Code keine brauchbaren Informationen enthalten. Damit lassen sich gezielt die Einflüsse verschiedener Architekturmerkmale messen oder auch Messungen unter Worst-Case Bedingungen durchführen. Die Messungen haben nur einen minimalen Einfluss auf den gemessenen Code und können mit Hilfe der Performance-Monitoring Counter gut interpretiert werden.
Übersetzte Kurzfassung:
This work presents an algorithm to place code and data of software in main memory. The algorithmn enables an effective use of caches in real time systems. It makes it possible to predict delays in the execution time of software caused by cache misses. Furthermore, it allows for certain pieces of code or data to be locked in cache. This is essential for time critical parts of a system. The impact of caches on the execution time of software is researched and evaluated on practical examples.
In this context, techniques for an advanced memory management for real time systems are researched. One main focus is the data exchange between tasks, even on different microprocessors. The effects of cache-snooping and aspects for an advanced assignment of tasks to different microprocessors in consideration of main memory management are discussed.
Besides the caches, techniques like out-of-order execution of software and the branch prediction play an important role in the architecture of modern microprocessors. The mode of operation of these techniques is explained and their impact on the execution time of software is researched. In comparison to the caches, these techniques play only a minor role regarding the execution time of software.
Furtheron, a method to measure the execution time of software very precisely under different conditions is presented. For example, before the measurement is started the instruction and data caches can be cleared, so that they contain only useless information for the code that will be executed afterwards. Using this methodology of measuring execution times it is possible to research the influences of different parts of the microprocessors' architecture on the execution time of software. Additionally, it is possible to take measurements under worst case conditions. The measurements themselves have only subtle impact on the code which is under research. They can be analysed very well with the help of the performance monitoring counters.
Veröffentlichung:
Universitätsbibliothek der Technischen Universität München