123 research outputs found
Advancing Operating Systems via Aspect-Oriented Programming
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 ef fects
that can be introduced inadvertedly by changing a piece of code that belongs to a completely
dif ferent 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 dif ferent concerns. These so-called
“crosscutting concerns” are especially dif ficult 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
Exploiting UML dynamic object modeling for the visualization of C++ programs
In this paper we present an approach to modeling and visualizing
the dynamic interactions among objects in a C++
application. We exploit UML diagrams to expressively visualize
both the static and dynamic properties of the application.
We make use of a class diagram and call graph of
the application to select the parts of the application to be
modeled, thereby reducing the number of objects and methods
under consideration with a concomitant reduction in the
cognitive burden on the user of our system. We use aspects
to insert probes into the application to enable profiling of the
interactions of objects and methods and we visualize these
interactions by providing sequence and communication diagrams
for the parts of the program under consideration. We
complement our static selectors with dynamic selectors that
enable the user to further filter objects and methods from
the sequence and communication diagrams, further enhancing
the cognitive economy of our system. A key feature of
our approach is the provision for dynamic interaction with
both the profiler and the application. Interaction with the
profiler enables filtering of methods and objects. Interaction
with the application enables the user to supply input to the
application to provide direction and enhance comprehension
or debugging
Aspect-oriented technology for dependable operating systems
Modern computer devices exhibit transient hardware faults that disturb the electrical behavior but do not cause permanent physical damage to the devices. Transient faults are caused by a multitude of sources, such as fluctuation of the supply voltage, electromagnetic interference, and radiation from the natural environment. Therefore, dependable computer systems must incorporate methods of fault tolerance to cope with transient faults. Software-implemented fault tolerance represents a promising approach that does not need expensive hardware redundancy for reducing the probability of failure to an acceptable level.
This thesis focuses on software-implemented fault tolerance for operating systems because they are the most critical pieces of software in a computer system: All computer programs depend on the integrity of the operating system. However, the C/C++ source code of common operating systems tends to be already exceedingly complex, so that a manual extension by fault tolerance is no viable solution. Thus, this thesis proposes a generic solution based on Aspect-Oriented Programming (AOP).
To evaluate AOP as a means to improve the dependability of operating systems, this thesis presents the design and implementation of a library of aspect-oriented fault-tolerance mechanisms. These mechanisms constitute separate program modules that can be integrated automatically into common off-the-shelf operating systems using a compiler for the AOP language. Thus, the aspect-oriented approach facilitates improving the dependability of large-scale software systems without affecting the maintainability of the source code. The library allows choosing between several error-detection and error-correction schemes, and provides wait-free synchronization for handling asynchronous and multi-threaded operating-system code.
This thesis evaluates the aspect-oriented approach to fault tolerance on the basis of two off-the-shelf operating systems. Furthermore, the evaluation also considers one user-level program for protection, as the library of fault-tolerance mechanisms is highly generic and transparent and, thus, not limited to operating systems. Exhaustive fault-injection experiments show an excellent trade-off between runtime overhead and fault tolerance, which can be adjusted and optimized by fine-grained selective placement of the fault-tolerance mechanisms. Finally, this thesis provides evidence for the effectiveness of the approach in detecting and correcting radiation-induced hardware faults: High-energy particle radiation experiments confirm improvements in fault tolerance by almost 80 percent
Software fault injection and localization in embedded systems
Injection and localization of software faults have been extensively researched, but the results are not directly transferable to embedded systems. The domain-specific constraints applying to these systems, such as limited resources and the predominant C/C++ programming languages, require a specific set of injection and localization techniques. In this thesis, we have assessed existing approaches and have contributed a set of novel methods for software fault injection and localization in embedded systems.
We have developed a method based on AspectC++ for the injection of errors at interfaces and a method based on Clang for the accurate injection of software faults directly into source code. Both approaches work particularly well in the context of embedded systems, because they do not require runtime support and modify binaries only when necessary. Nevertheless, they are suitable to inject software faults and errors into the software of other domains.
These contributions required a thorough assessment of fault injection techniques and fault models presented in literature over the years, which raised multiple questions regarding their validity in the context of C/C++. We found that macros (particularly header files), compile-time language constructs, and the commonly used optimization levels introduce a non-negligible bias to experimental results achieved by injection methods operating on any other layer than the source code. Additionally, we found that the textual specification of fault models is prone to ambiguities and misunderstandings. We have conceived an automatic fault classifier to solve this problem in a field study.
Regarding software fault localization, we have combined existing methods making use of program spectra and assertions, and have contributed a new oracle type for autonomous localization of software faults in the field. Our evaluation shows that this approach works particularly well in the context of embedded systems because the generated information can be processed in real-time and, therefore, it can run in an unsupervised manner.
Concluding, we assessed a variety of injection and localization approaches in the context of embedded systems and contributed novel methods where applicable improving the current state-of-the-art. Our results also point out weaknesses regarding the general validity of the majority of previous injection experiments in C/C++
A platform-independent aspect-oriented model and patterns to support model transformations
Model Driven Architecture (MDA) separates application logic from specific implementation technology to improve the reusability, portability and maintainability of the software system. However, current software system also needs to deal with other important concerns that are called crosscutting concerns that explicitly addressed by Aspect-oriented Programming (AOP). In this dissertation, we propose a model-driven approach to assess the benefits of AOP for MDA in order to provide increased modularity and to support related quality attributes. Even though research has been conducted toward modeling crosscutting concerns, these approaches found to be either language dependent or provide no support for aspectual behavior. This work has two contributions. First, we complement current works by proposing a language-independent extension to the UML metamodel to explicitly capture crosscutting concerns. The second contribution is to provide well-defined and automated model transformations to work with different models at various levels of abstraction and preserve their consistency
AOP++: A Generic Aspect-Oriented Programming Framework in C++
Abstract. This paper presents AOP++, a generic aspect-oriented pro-gramming framework in C++. It successfully incorporates AOP with object-oriented programming as well as generic programming naturally in the framework of standard C++. It innovatively makes use of C++ templates to express pointcut expressions and match join points at com-pile time. It innovatively creates a full-fledged aspect weaver by using template metaprogramming techniques to perform aspect weaving. It is notable that AOP++ itself is written completely in standard C++, and requires no language extensions. With the help of AOP++, C++ programmers can facilitate AOP with only a little effort.
Incorporating Aspects into the Software Development Process in Context of Aspect-Oriented Programming
Aspect-oriented programming is a relatively new approach to programming that is design to resolve issues of separation of concerns. Rather than focusing on commonality of objects, as in object-oriented programming, aspect –oriented programming focuses on commonality of concerns, or more precisely as described by experts in the field, of cross-cutting concerns. These are aspects that cut across different modules of a program, such as security and authentication issues.
While much research in the area has focused on developing programming languages, little attention has been given to dealing with aspects in the software development process and the Unified Modeling Language. This thesis will examine how aspects are created during the software development process and how they can be modeled in the UML
A meta-language and framework for aspect-oriented programming
Tese de mestrado integrado. Engenharia Informática e Computação. Universidade do Porto. Faculdade de Engenharia. 201
- …