Computer software can be divided into two main categories: application software and system software. According to Brookshear [1997], "application software consists of the programs for performing tasks particular to the machine's utilization. Examples of application software include spreadsheets, database systems, desktop publishing systems, program development software, and games." Application software is generally what we think of when someone speaks of computer programs. This software is designed to solve a particular problem for users.

On the other hand, system software is more transparent and less noticed by the typical computer user. This software "provides a general programming environment in which programmers can create specific applications to suit their needs. This environment provides new functions that are not available at the hardware level and performs tasks related to executing the application program" [Nutt 1997]. System software acts as an interface between the hardware of the computer and the application software that users need to run on the computer. The diagram below illustrates the relationship between application software and system software.

The most important type of system software is the operating system. According to Webopedia [2000], an operating system has three main responsibilities:

    1. Perform basic tasks, such as recognizing input from the keyboard, sending output to the display screen, keeping track of files and directories on the disk, and controlling peripheral devices such as disk drives and printers.

    2. Ensure that different programs and users running at the same time do not interfere with each other.

    3. Provide a software platform on top of which other programs (i.e., application software) can run.

The first two responsibilities address the need for managing the computer hardware and the application programs that use the hardware. The third responsibility focuses on providing an interface between application software and hardware so that application software can be efficiently developed. Since the operating system is already responsible for managing the hardware, it should provide a programming interface for application developers.

Nutt [1997] identifies four common types of operating system strategies on which modern operating systems are built: batch, timesharing, personal computing, and dedicated. According to Nutt, "the favored strategy for any given computer depends on how the computer is to be used, the cost-effectiveness of the strategy implementation in the application environment, and the general state of the technology at the time the operating system is developed." The table below summarizes the characteristics of each operating system strategy as described by Nutt [1997].

This strategy involves reading a series of jobs (called a batch) into the machine and then executing the programs for each job in the batch. This approach does not allow users to interact with programs while they operate.
This strategy supports multiple interactive users. Rather than preparing a job for execution ahead of time, users establish an interactive session with the computer and then provide commands, programs and data as they are needed during the session.
This strategy supports a single user running multiple programs on a dedicated machine. Since only one person is using the machine, more attention is given to establishing predictable response times from the system. This strategy is quite common today because of the popularity of personal computers.
This strategy supports real-time and process control systems. These are the types of systems which control satellites, robots, and air-traffic control. The dedicated strategy must guarantee certain response times for particular computing tasks or the application is useless.

By the end of this section, you should be able to do the following: