While the engineering of operating systems is well understood, their formal structure and properties are not. The latter needs a clear definition of the purpose of an OS and an identification of the core. In this paper I offer definitions of the OS, processes and files, and present a few useful principles. The principles allow us to identify work like closure and continuation algorithms, in programming languages that is useful for the OS problem. The definitions and principles should yield a symbolic, albeit semiquantitative, framework that encompasses practice. Towards that end I specialise the definitions to describe conventional OSes and identify the core operations for a single computer OS that can be used to express their algorithms. The assumptions underlying the algorithms offer the design space framework. The paging and segmentation algorithms for conventional OSes are extracted from the framework as a check. Among the insights the emerge is that an OS is a constructive proof of equivalence between models of computation. Clear and useful definitions and principles are the first step towards a fully quantitative structure of an OS.
The growing complexity of the OS problem has greatly increased the turnaround time for building experimental systems and efforts to build such systems have reduced. The decade long K42 effort by Wisniewski al @cite_10 is a notable exception. They explore the facets of building a full OS, share the experience and insights, and point out to the need to fill the gap between good values of research (producing meaningful results beyond microbenchmarks) and actual research practice (high cost of complete OS research against time-cost constraints). They point out that some important practical questions, e.g. the useful lifetime of the GNU Linux or Windows structures, are unanswered, and offer plausible reasons for the lack of whole-OS research efforts. Whole-OS efforts, e.g. to describe the structure of an OS, are needed in addition to incremental work.
@cite_10
2035144019 2131265794 2097958451 2146482183
We started the K42 project more than ten years ago with the ambitious goal of developing an operating system for next-generation hardware that would be widely valued and thus widely used. Based on the premise that current operating systems were not designed to be scalable, customizable, or maintainable, we set forth to rectify that by applying proven techniques from other disciplines to operating systems and by developing additional innovative mechanisms. Now, ten year later, K42 is used by ten or so universities and national labs for research purposes, not ten million information technology departments desiring better everyday computing platforms. As a presentation to the primary operating systems community we provide an examination from two different perspectives as to what went right and what went wrong. First, we concentrate on what technology worked well and why, and what technology failed or caused undue difficulties, and why. Second, based on that experience, we provide our thoughts on the state and direction of the OS community at large. To be clear, this paper is neither a results paper nor an overview paper; we refer to other papers for background material. Rather, it is an exploration by researchers with experience with at least six different previous operating systems of the merit of technologies investigated in K42, and an extrapolation of the implications of that experience to the wider operating system community. Most empirical studies about Open Source (OS) projects or products are vertical and usually deal with the flagship, successful projects. There is a substantial lack of horizontal studies to shed light on the whole population of projects, including failures. This paper presents a horizontal study aimed at characterizing OS projects. We analyze a sample of around 400 projects from a popular OS project repository. Each project is characterized by a number of attributes. We analyze these attributes statically and over time. The main results show that few projects are capable of attracting a meaningful community of developers. The majority of projects is made by few (in many cases one) person with a very slow pace of evolution. Even after decades of software engineering research, complex computer systems still fail. This paper makes the case for increasing research emphasis on dependability and, specifically, on improving availability by reducing time-to-recover.All software fails at some point, so systems must be able to recover from failures. Recovery itself can fail too, so systems must know how to intelligently retry their recovery. We present here a recursive approach, in which a minimal subset of components is recovered first; if that does not work, progressively larger subsets are recovered. Our domain of interest is Internet services; these systems experience primarily transient or intermittent failures, that can typically be resolved by rebooting. Conceding that failure-free software will continue eluding us for years to come, we undertake a systematic investigation of fine grain component-level restarts, microreboots, as high availability medicine. Building and maintaining an accurate model of large Internet systems is nearly impossible, due to their scale and constantly evolving nature, so we take an application-generic approach, that relies on empirical observations to manage recovery.We apply recursive microreboots to Mercury, a commercial off-the-shelf (COTS)-based satellite ground station that is based on an lnternet service platform. Mercury has been in successful operation for over 3 years. From our experience with Mercury, we draw design guidelines and lessons for the application of recursive microreboots to other software systems. We also present a set of guidelines for building systems amenable to recursive reboots, known as "crash-only software systems." The ongoing trend of increasing computer hardware and software complexity has resulted in the increase in complexity and overheads of cycle-accurate processor system simulation, especially in full-system simulation which not only simulates user applications, but also the operating system (OS) and system libraries. This paper seeks to address how to accelerate full-system simulation through studying, characterizing, and predicting the performance behavior of OS services. Through studying the performance behavior of OS services, we found that each OS service exhibits multiple but limited behavior points that are repeated frequently. OS services also exhibit application-specific performance behavior and largely irregular patterns of occurrences. We exploit the observation to speed up full system simulation. A simulation run is divided into two non-overlapping periods: a learning period in which performance behavior of instances of an OS service are characterized and recorded, and a prediction period in which detailed simulation is replaced with a much faster emulation mode. During a prediction period, the behavior signature of an instance of an OS service is obtained through emulation while performance of the instance is predicted based on its signature and records of the OS service's past performance behavior. Statistically-rigorous algorithms are used to determine when to switch between learning and prediction periods. We test our simulation acceleration method with a set of OS-intensive applications and a recent version of Linux OS running on top of a detailed processor and memory hierarchy model implemented on Simics, a popular full-system simulator. On average, the method needs the learning periods to cover only 11 of OS service invocations in order to produce highly accurate performance estimates. This leads to an estimated simulation speedup of 4.9times, with an average performance prediction error of only 3.2 , and a worst case error of 4.2