Alexander Jung

CS PhD Student @LancasterUni

Posted on 5 mins read Tag: OS

Operating Systems are the fundamental software component of highly organised computer systems. They provide abstractions to computational hardware, giving the user the ability to read, write, and execute commands to and from numerous devices and electronic components simultaneously. Thus the purpose of an OS is to provide a higher level of interaction, manipulation, and operation of a physical computing system. Many of today’s software applications are highly reliant on these hardware abstractions in order to function at all. From setting the time on your oven to posting images on the Internet using your smartphone, the OS provides a lining of simplifications that can be used to manipulate hardware in often similar ways.

The study of OSs has a long, rich, and on-going history. From its initial conceptualisation in the 1950s1 to present day: much research, development, and refinement has taken place on this topic. Whilst the problem of general-purpose computing software may be have been solved, technology continues to develop. The Internet, for instance, has taken an increasingly greater role in providing new tools and services, and JavaScript has become an increasingly pragmatic programming language2 in providing for these applications. General purpose OSs such as Microsoft Windows, Apple macOS, and Linux distributions such as Ubuntu all offer an interface to connect to the Internet and run web applications through their native browsers. Whilst this same concept of portability was first introduced in the Java Runtime Environment3, famously quoted as “write once, run everywhere”4, this same idea of portability has transcended into other platforms and become the epitome of web applications. Using web applications such as Facebook Messenger, Google Docs, and Adobe Avairy are all accessible to different OSs without having to provide native support. These web applications are highly reliant on JavaScript to function and are examples of services that are increasingly making native applications such as Skype, Microsoft Word, and Adobe Photoshop, respectively, obsolete.

Thus, the idea of providing web applications to a user through a native browser is becoming a bloated process. It involves the OS to run a web browser supporting JavaScript which in turn runs a web application. The question is then raised,

What are the minimal functional requirements to allow a higher level language, such as JavaScript, to be interpreted as the means of running applications in an OS?

This series is an exploration of the development of an OS from the ground up, following the processes, techniques, and requirements for a basic OS to be built and perform. In addition to this, it should act as a method to help simplify the understanding of the qualities of an OS; to develop a guide of the implementation of an OS; and conclude with a simple system for the purpose of high-level language rendering.

This exploration is useful as it quantifies the necessary measures provided in a minimalistic OS. Whilst many OSs available today are highly sophisticated, robust, and feature-rich, the ability to distinguish fundamental principles and concepts behind what technically considered as an “Operating System” can be blurred, daunting, and misleading to the average user. Thus, this paper is targeted at novices who wish to see these principles explained and implemented in a practical manner.

Furthermore, providing an implementation of an OS with the ability to execute operations written in a high-level language is the one of the many practical capabilities a sophisticated OS is able to complete today. Illustrating the necessary means of this process can both facilitate in the realisation of the principles and concepts of OS as well as providing an initial starting ground for an OS with features and programs written in the high-level language itself.

Aims

  1. Provide an overview of the features making up an OS;
  2. Discuss the portability of these features and the development of an architecture-free setup;
  3. Preform an examination of the minimal requirements for the implementation of a minimal OS for a choice of architecture;
  4. Discuss the requirements an OS must provide to meet the interpretation and functioning of a high-level language; and,
  5. Develop a guide and implementation of a simplistic OS including the infrastructure required by that of a high-level language.

Topic Coverage

  1. Background provides a thorough examination of the concepts covered in the implementation of a minimal OS. This includes background references, enumerations, and explanations to fundamental concepts of an OS.
  2. Design provides an overview of the major features when designing the system, with various decisions and justifications.
  3. Implementation is a detailed insight into the development of the minimal OS: laying out the ground work for setting up a build environment, discussing the usage of tools, implementation of the major concepts of an OS with the goal of providing a higher-level language support.
  4. Testing illustrates the minimal OS during its runtime, the features it able to perform, and necessary tests to determine validity.
  5. Conclusion provides a review of the aims of this thesis, afterthoughts and deliberations on the current system, and further considerations.

  1. Doeppner, T. W. Operating Systems in Depth. Wiley-India. Ansari Road, Daryaganj, New Delhi.: Wiley India Pvt. Ltd., 2011. [return]
  2. One way of measuring the use of a programming language is to look at the number of questions asked about the programming language online. Kunst5 uses data from the popular site StackOverflow, described as “the largest Q&A website”, to determine the trends and language usage. [return]
  3. Whilst Java and JavaScript may sound similar, their differences vary dramatically. As programming languages, their syntax and runtime differ and are nonequivalent. [return]
  4. Niemeyer, J, P. & Knudsen. Learning Java. 1st ed. O’Reilly & Associates, Inc., 2000. [return]
  5. Kunst, J. What Do We Ask in StackOverflow, 2015. [return]