411 REFERENCE · Wikibooks
Evolution of Operating Systems Designs/Languages as Operating Systems
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
Up until the advent of VLSI, there were basically two different types of computers, General Character based computers, and Large word Number Crunchers. But when VLSI brought the unit cost of computing down low enough, people began to think in terms of specialized computers, designed and built to do one thing well. One group of people decided to design a personal computer, something that could be used by novices, and that would work just as well as a more complex computer. Another group wanted to transfer artificial intelligence programs to more compact robots instead of hooking up the robot to a mainframe. Rather than install a program with thousands of lines of code on these machines they wanted to keep the complexity and cost of their systems down. Of course by now, we are seeing computers being integrated into our phones, but the designers still want to keep their costs down.
One way of keeping the cost down, was to integrate a few basic operating system commands into an interpreted language. Languages where this was successfully done include: BASIC, Lisp, Smalltalk, and Java.
BASIC
The first known case of this happening was the Altair kit computer, which was programmed by Microsoft with a program called "Stand Alone Basic". Essentially, Stand Alone Basic was a basic interpreter with operating system commands integrated into the language so that you didn't need a separate operating system. Although I haven't seen this version, I did see a similar program on the Commodore 64, which integrated a number of commands such as Load, Run, Continue, Stop and Reset, as well as Peek and Poke. Essentially, BASIC assumes that anything loaded into it is a BASIC program unless it is loaded using the load absolute variation of the load command. It automatically goes through a lexical analysis, converting each command into a token, and warning the operator if it can't translate a particular command. When the program has been successfully loaded, in token form, it waits for the run command to start. When it is run, it starts at the start of the tokenized program and interprets each token in turn. By promoting some of the commands to keys on the keyboard, it becomes possible to load a program into the computer and run it.
Lisp
Very soon after Microsoft's success at producing a stand-alone basic program, some A.I. Researchers decided to do a similar thing with LISP. By creating a custom chip, that favored some of the stages in lisp interpretation, they were able to reduce the size of a Lisp based robot significantly. To this day Lisp is used in A.I. programming because as a list processing language, it speeds the processing of list based devices such as rule-bases and expert systems.
Smalltalk
Smalltalk has the cachet of having an extremely small interpreter. Based on the concept of Object oriented programming it is a very effective language on which to base a dedicated computer. However, Object oriented programming is difficult to learn conceptually, and so Smalltalk computers have never had a large market segment.
Java
Perhaps the most successful interpreted language as an operating system is Java. This language is meant to capture the benefits of both C and Smalltalk in a single language. It is based on a Virtual Machine which can be written to run in machine language as easily as in C. By installing the Java language right onto silicon, it makes possible sophisticated processing and network services on a very compact unit. In fact, Java has been used in smartphones to provide an internet interface to a relatively inexpensive cellular phone circuit.
The following was left in this file by the original author. Possibly as a way of organizing his thoughts about java. I am considering removing it, because it goes into too much detail about Java, and not enough about operating systems.
Introduction to Programming Using Java, Third Edition
Table of Contents
THIS IS THE FULL TABLE OF CONTENTS for an on-line introductory programming textbook that uses Java as the language of instruction. For more information about the text, please see its front page. The text is available on-line at http://math.hws.edu/javanotes/.
Preface
Preface to the Second Edition
Chapter 1: Overview: The Mental Landscape
Section 1: The Fetch-and-Execute Cycle: Machine Language
Section 2: Asynchronous Events: Polling Loops and Interrupts
Section 3: The Java Virtual Machine
Section 4: Fundamental Building Blocks of Programs
Section 5: Objects and Object-oriented Programming
Section 6: The Modern User Interface
Section 7: The Internet and World-Wide Web
Quiz on this Chapter
Chapter 2: Programming in the Small I: Names and Things
Section 1: The Basic Java Application
Section 2: Variables and the Primitive Types
Section 3: Strings, Objects, and Subroutines
Section 4: Text Input and Output
Section 5: Details of Expressions
Programming Exercises
Quiz on this Chapter
Chapter 3: Programming in the Small II: Control
Section 1: Blocks, Loops, and Branches
Section 2: Algorithm Development
Section 3: The while and do..while Statements
Section 4: The for Statement
Section 5: The if Statement
Section 6: The switch Statement
Section 7: Introduction to Applets and Graphics
Programming Exercises
Quiz on this Chapter
Chapter 4: Programming in the Large I: Subroutines
Section 1: Black Boxes
Section 2: Static Subroutines and Static Variables
Section 3: Parameters
Section 4: Return Values
Section 5: Toolboxes, API's, and Packages
Section 6: More on Program Design
Section 7: The Truth about Declarations
Programming Exercises
Quiz on this Chapter
Chapter 5: Programming in the Large II: Objects and Classes
Section 1: Objects, Instance Variables, and Instance Methods
Section 2: Constructors and Object Initialization
Section 3: Programming with Objects
Section 4: Inheritance, Polymorphism, and Abstract Classes
Section 5: More Details of Classes
Programming Exercises
Quiz on this Chapter
Chapter 6: Applets, HTML, and GUI's
Section 1: The Basic Java Applet
Section 2: HTML Basics and the Web
Section 3: Graphics and the Paint Method
Section 4: Mouse Events
Section 5: Keyboard Events
Section 6: Introduction to Layouts and Components
Section 7: Looking Back: The Java 1.0 Event Model
Programming Exercises
Quiz on this Chapter
Chapter 7: Advanced GUI Programming
Section 1: More about Graphics
Section 2: More about Layouts and Components
Section 3: Standard Components and Their Events
Section 4: Programming with Components
Section 5: Threads, Synchronization, and Animation
Section 6: Nested Classes and Adapter Classes
Section 7: Frames and Dialogs
Section 8: Looking Forward: Swing and Java 2.0
Programming Exercises
Quiz on this Chapter
Chapter 8: Arrays
Section 1: Creating and Using Arrays
Section 2: Programming with Arrays
Section 3: Vectors and Dynamic Arrays
Section 4: Searching and Sorting
Section 5: Multi-Dimensional Arrays
Programming Exercises
Quiz on this Chapter
Chapter 9: Correctness and Robustness
Section 1: Introduction to Correctness and Robustness
Section 2: Writing Correct Programs
Section 3: Exceptions and the try...catch Statement
Section 4: Programming with Exceptions
Programming Exercises
Quiz on this Chapter
Chapter 10: Advanced Input/Output
Section 1: Streams, Readers, and Writers
Section 2: Files
Section 3: Programming with Files
Section 4: Networking
Section 5: Programming Networked Applications
Programming Exercises
Quiz on this Chapter
Chapter 11: Linked Data Structures and Recursion
Section 1: Recursion
Section 2: Linking Objects
Section 3: Stacks and Queues
Section 4: Binary Trees
Section 5: A Simple Recursive-descent Parser
Programming Exercises
Quiz on this Chapter
Appendix 1: From Java to C++
Section 1: C++ Programming Fundamentals
Section 2: Pointers and Arrays in C++
Section 3: Classes and Objects in C++
Appendix 2: Some Notes on Java Programming Environments
Appendix 3: Source code for all examples in the text
News and Errata
David J. Eck (eck@hws.edu), May 2000