Via Aspect-Oriented Programming Advancing Operating Systems
Total Page:16
File Type:pdf, Size:1020Kb
Advancing Operating Systems via Aspect-Oriented Programming Michael Engel 2 Philipps-Universitat¨ Marburg Fachbereich Mathematik und Informatik Advancing Operating Systems via Aspect-Oriented Programming Dissertation zur Erlangung des Doktorgrades der Naturwissenschaften (Dr. rer. nat.) vorgelegt von Michael Engel aus Zell/Mosel Marburg/Lahn 2005 vom Fachbereich Mathematik und Informatik der Philipps-Universitat¨ Marburg als Dissertation am 4. Juli 2005 angenommen. Erstgutachter: Prof. Dr. Bernd Freisleben Zweitgutachter: Prof. Dr. Wolfgang Merzenich Tag der mundlichen¨ Prufung¨ am 26. Juli 2005 Abstract Operating system kernels are among the most complex pieces of software in existence to- day. Maintaining the kernel code and developing new functionality is increasingly compli- cated, since the amount of required features has risen significantly, leading to side effects that can be introduced inadvertedly by changing a piece of code that belongs to a completely different context. Software developers try to modularize their code base into separate functional units. Some of the functionality or “concerns” required in a kernel, however, does not fit into the given modularization structure; this code may then be spread over the code base and its implementation tangled with code implementing different concerns. These so-called “crosscutting concerns” are especially difficult to handle since a change in a crosscutting concern implies that all relevant locations spread throughout the code base have to be modified. Aspect-Oriented Software Development (AOSD) is an approach to handle crosscutting concerns by factoring them out into separate modules. The “advice” code contained in these modules is woven into the original code base according to a pointcut description, a set of interaction points (joinpoints) with the code base. To be used in operating systems, AOSD requires tool support for the prevalent procedu- ral programming style as well as support for weaving aspects. Many interactions in kernel code are dynamic, so in order to implement non-static behavior and improve performance, a dynamic weaver that deploys and undeploys aspects at system runtime is required. This thesis presents an extension of the “C” programming language to support AOSD. Based on this, two dynamic weaving toolkits – TOSKANA and TOSKANA-VM – are presented to permit dynamic aspect weaving in the monolithic NetBSD kernel as well as in a virtual- machine and microkernel-based Linux kernel running on top of L4. Based on TOSKANA, applications for this dynamic aspect technology are discussed and evaluated. The thesis closes with a view on an aspect-oriented kernel structure that maintains coherency and handles crosscutting concerns using dynamic aspects while enhancing de- velopment methods through the use of domain-specific programming languages. Zusammenfassung Betriebssystem-Kernel zahlen¨ zu den komplexesten Software-Systemen, die heutzutage verwendet werden. Die Wartung des Kernel-Codes und die Entwicklung neuartiger Funk- tionalitat¨ wird zunehmend komplizierter, da die Menge an benotigten¨ Eigenschaften eines Kernels stetig steigt. Dies kann zu unabsichtlich in den Code eingebrachten Nebeneffekten fuhren,¨ wenn ein Teil des Systems geandert¨ wird, der zu einem anderen Kontext gehort.¨ Software-Entwickler modularisieren ihre Code-Basis in einzelne funktionale Einheiten. Einige Funktionalitat¨ – auch “concern” genannt – die im Kernel benotigt¨ wird, gliedert sich nicht sauber in die vorgegebene Modularisierungsstruktur ein; die zugehorigen¨ Codestucke¨ sind dann oft uber¨ das gesamte System verteilt und ihre Implementierung ist mit der Imple- mentierung anderer Funktionalitat¨ vermischt. Diese sogenannten “crosscutting concerns” (querschneidende Belange) sind besonders schwierig in der Handhabung, da Anderungen¨ an einem solchen crosscutting concern erfordern, dass alle die uber¨ die gesamte Codebasis verteilten relevanten Stellen gefunden und modifiziert werden. Aspekt-orientierte Software-Entwicklung (Aspect Oriented Software Development, AOSD) ist ein Ansatz zur einfacheren Handhabung von crosscutting concerns, der den zugehorigen¨ Code in separate Module herausfaktorisiert. Der in diesen Modulen enthaltene sogenannte ”Advice-Code” wird dann mit der ursprunglichen¨ Code-Basis nach Vorgabe einer sogenan- nten Pointcut-Beschreibung verwoben, die aus einer Menge an Interaktionspunkten mit dem ursprunglichen¨ Code, den sog. “Join Points” besteht. Um AOSD im Rahmen von Betriebssystemen zu verwenden, mussen¨ aspektorientierte Werkzeuge zur Unterstutzung¨ fur¨ den dort vorherrschenden prozeduralen Programmierstil sowie eine unterstutzende¨ Infrastruktur fur¨ das Weben von Aspekten zur Verfugung¨ ste- hen. Viele Interaktionen mit dem Kernel sind dynamisch, daher ist ein dynamischer Weber erforderlich, der Aspekte zur Laufzeit in das System einfugen¨ und wieder aus diesem ent- fernen kann. Diese Arbeit stellt eine Erweiterung der Programmiersprache “C” vor, die aspektori- entierte Programmierung unterstutzt.¨ Darauf aufbauend werden zwei Werkzeugsatze¨ fur¨ dynamisches Weben – TOSKANA und TOSKANA-VM – vorgestellt, die dynamische Aspekte im monolithischen NetBSD-Kernel bzw. in einem Linux-Kernel realisieren, die auf einer In- frastruktur aufbauen, die aus einem L4-Microkernel und einer unterstutzenden¨ virtuellen Maschine besteht. Auf der Basis von TOSKANA werden Anwendungen fur¨ diese dynami- sche Aspekttechnologie vorgestellt und bewertet. Ein Ausblick auf eine aspekt-orientierte Kernelstruktur, die mit Hilfe von dynamischen Aspekten Koharenz¨ sicherstellt und crosscutting concerns handhabt und zugleich die Sys- tementwicklung durch den Einsatz domanenspezifischer¨ Programmiersprachen erleichtert, schließt die Arbeit ab. Contents 1 Introduction 1 1.1 The State of Operating Systems Research . 1 1.2 Current Trends . 3 1.2.1 Configurability . 4 1.2.2 Ubiquituos Networking . 4 1.2.3 Virtualization . 5 1.2.4 Autonomic Computing . 5 1.3 Structure of the Thesis . 6 1.4 Acknowledgements . 8 2 NetBSD System Structure 11 2.1 Introduction . 11 2.2 Unix Kernel Structure . 11 2.3 System Evolution . 13 2.4 Layers . 19 2.4.1 Layered Networking Structure . 19 2.4.2 Virtual File System Structure . 23 2.5 Contexts . 25 2.5.1 Startup and Control . 25 2.5.2 Process Contexts . 26 2.5.3 Asynchronous (Hardware) Contexts . 27 2.6 Summary . 28 3 In-Kernel Crosscutting Concerns 29 3.1 Introduction . 29 3.2 Modularity and Concerns in Kernel Code . 29 3.3 A Definition of Crosscutting Concerns . 32 3.3.1 An Example: Telecommunications . 32 3.3.2 Scattering and Tangling . 33 Contents 3.3.3 Crosscutting in Related Research . 34 i 3.3.4 Identifying Crosscutting . 34 3.4 The Trouble with Macros . 35 3.5 OO in Kernel Mode . 36 3.5.1 Object Orientation Using Procedural Languages . 36 3.5.2 Example: Console Handling . 37 3.6 Crosscutting Concern Example: Disk Quota . 38 3.7 Summary . 41 4 Aspect-Oriented Programming 43 4.1 Introduction . 43 4.2 AOP — considered useful! . 43 4.3 Using AOP Inside the Kernel . 46 4.3.1 Join Points . 46 4.3.2 Pointcuts . 47 4.3.3 Join Point and Pointcut Types . 47 4.3.4 Advice Code . 48 4.4 Weaving . 48 4.5 Static AOP . 48 4.5.1 Link-time Weaving . 50 4.5.2 Not Quite That Static . 50 4.6 Dynamic AOP . 52 4.7 Summary . 53 5 A C Extension Supporting AOP 55 5.1 Introduction . 55 5.2 AspectC . 55 5.3 Supported Join Points and Pointcuts . 56 5.4 A Grammar for Static AspectC . 57 5.4.1 Aspect Specification . 57 5.4.2 Grammar . 57 5.5 A Real-World AspectC Example . 59 5.6 Approaches to Compiling Aspect Code . 61 5.6.1 GCC Front End . 61 Contents 5.6.2 XML-based AOP Tools . 61 ii 5.6.3 Source Code Transformation . 62 5.7 The Static AspectC Compiler . 62 5.7.1 The CIL Infrastructure . 63 5.7.2 AspectC Compiler Structure . 63 5.8 Weaving Static AspectC . 64 5.8.1 Before Advice . 65 5.8.2 After Advice . 66 5.8.3 Around Advice . 67 5.9 Support Library . 69 5.10 Extensions to the AspectC Syntax . 71 5.10.1 Init Functions for Aspects . 71 5.10.2 Local Storage for Aspects . 71 5.10.3 Use Case: A Sense of Time for Aspects . 72 5.10.4 Dynamic AspectC . 74 5.10.5 Expressing Context Dependencies Using Dynamic AOP . 74 5.10.6 Use Case: Temporal Dependencies . 74 5.11 Evaluation . 76 5.12 Summary . 77 6 Execution Interaction 79 6.1 Introduction . ..