Run-time code generation as a central system service

We are building an operating system in which an integral run time code generator constantly strives to improve the quality of already executing code. Our system is based on a platform independent software distribution format twice as dense as Java byte codes that is translated into native code only at the time of loading. This initial translation happens in a single burst and puts compilation speed ahead of code quality, so that program execution can commence immediately. However, the native code generated during loading will usually not be executed for long. Immediately after a program has started running, its code image becomes a candidate for reoptimization. A background process that executes only during otherwise idle processor cycles continuously recompiles parts of the already running system, guided by run time profiling data, and is able to substitute already executing code in situ. This reoptimization encompasses not only user programs, but also many of the system libraries, eventually combining an application program and most of its dynamically loaded extensions and libraries into a single, fully cross optimized, quasi monolithic code image. Our system is thereby able to provide the efficiency of statically optimized software in spite of being extensible at run time.

[1]  Niklaus Wirth,et al.  The oberon system , 1989, Softw. Pract. Exp..

[2]  Gilbert Joseph Hansen,et al.  Adaptive systems for the dynamic run-time optimization of programs. , 1974 .

[3]  Terry A. Welch,et al.  A Technique for High-Performance Data Compression , 1984, Computer.

[4]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[5]  Kathleen Jensen,et al.  Pascal-P Implementation Notes , 1981, Pascal - The Language and its Implementation.

[6]  Michael Franz,et al.  The Oberon System family , 1995, Softw. Pract. Exp..

[7]  Douglas J. Ingalls The execution time profile as a programming tool , 1971 .

[8]  David W. Wall,et al.  Experience with a software-defined machine architecture , 1992, TOPL.

[9]  Michael Franz Emulating an operating system on top of another , 1993, Softw. Pract. Exp..

[10]  Michael Franz Dynamic Linking of Software Components , 1997, Computer.

[11]  Michael Franz,et al.  Slim binaries , 1997, CACM.

[12]  Michael Franz,et al.  Technological Steps toward a Software Component Industry , 1994, Programming Languages and System Architectures.

[13]  Urs Hölzle,et al.  Eliminating Virtual Function Calls in C++ Programs , 1996, ECOOP.

[14]  Niklaus Wirth,et al.  Project Oberon - the design of an operating system and compiler , 1992 .

[15]  David William Barron Pascal - The Language and its Implementation , 1981, Pascal - The Language and its Implementation.

[16]  Scott A. Mahlke,et al.  Using profile information to assist classic code optimizations , 1991, Softw. Pract. Exp..

[17]  Niklaus Wirth,et al.  The programming language oberon , 1988, Softw. Pract. Exp..

[18]  Michael Steffen Oliver Franz,et al.  Code_generation On_the_fly: a Key to Portable Software , 1994 .