Software classification

Quick links

3.4.1

Hardware and software

3.4.2

Boolean logic

3.4.3

Software classification

3.4.4

Systems architecture

 

Useful links

Syllabus content

Content   Additional Information

Explain what is meant by:

  • • system software
  • • application software.

Give examples of both types of software.

   
     

Understand the need for, and functions of, operating systems (OS) and utility programs.

Understand that the OS handles management of the:

  • • processor(s) (link)
  • • memory (link)
  • • I/O devices (link)
  • • applications (link)
  • • security (link)
   

 

Software classification

System software

The following diagram shows the way we usually classify software. This shows a little more detail than required by the exam but I think that it is worth the effort to understand as it shows clearly how different types of software are related and can be grouped.

System Software

We use the term System Software for software which is primarily used to operate the hardware.

Operating Systems

The operating system is the software that allows you to operate the hardware. The programs that we want to execute, the applications that we want to use all require a platform on which to execute. That platform is provided by the operating system. Examples include: Windows of all flavours, Linux of all flavours, Android, IOS, RISC OS, UNIX, CP/M, MSDOS, DRDOS, OS/2, Novell Netware and there are many others listed here.

One role of the operating system is to provide a virtual machine. This refers to the way that, by clicking on icons and menus, or by typing in commands at a prompt, we get to interact with the computer hardware without having to understand its complexity. By hiding the true complexity of the system from the user, the operating system makes it easier for ordinary people to make computers perform useful tasks.

Utility Programs

Some utility programs are bundled in with operating system software these days. Others you buy or source in some other way; such as downloads from free software sites (not always a safe option with so many viruses launching from websites) or from discs as part of magazine offers.

Utility programs tend to perform specific tasks related to the management of hardware. Examples of utility programs include compression programs, formatters, defragmenters and other disk management tools. Each utility also is restricted (usually) to a single function or task such as de-frag or WinZIP.

Many websites will provide a list with reasons for making the same selection as they have done, but in essence choose each utility to perform a specific function not provided by the operating system. For example CutePDF is a utility that pretends to the operating system to be a printer so that documents can be printed as a pdf document. This feature is now built into most new operating systems (such as Windows 10) so the utility is longer required.

PC World suggests the following list of "free, excellent utilities.

  • Another browser such as Firefox or Chrome instead of the browser bundles with the operating system (although Edge is well regarded)
  • Ninite to manage the downloading and installation of multiple utilities.
  • AVG Anti-Virus although again the other free alternatives from McAffee, Avast or Panda are just as good; Windows Defender is not as capable.
  • Malwarebytes is a version of antivirus software that cannot be scheduled but can be run if a zero-day virus is suspected.
  • Benchmarking software tests your hardware and makes clear when it is running as it should be (or not).
  • CCleaner keeps the registry free from bloat and removes unwanted cookies and browser history.
  • Secunia PSI keeps a PC up-to-date automatically making sure all registered software is suitably patched.
  • VLC Media Player, unlike the media player in Windows 10 will play a DVD straight out of the box.
  • Paint.Net or GIMP are not as good as Photoshop but are much better than Paint.
  • Sumatra PDF lacks many of the bells and whistles of Adobe Reader but is not attacked so often, is not so frequently in need of patching and just reads pdf files really quickly.
  • iTunes or Spotify because everyone has to have music, even I do at times.
  • A password manager such as LastPass a cloud based system that will track your credentials and generate secure grade passwords for you as you need to have strong passwords that are not shared among your other less secure applications.
  • A productivity suite such as Google Docs or LibreOffice (a free version of the Office suite) although this is an application not a utility.

Library Programs

Library programs are compiled libraries of commonly-used routines. On a Windows system they usually carry the file extension dll and are often referred to as run-time libraries. The libraries are run-time because they are called upon by running programs when they are needed. When you program using a run-time library, you typically add a reference to it either in your code or through the IDE in which you are programming. This is a screenshot of the system32 directory of a Windows 7 computer.

You can see this by running "Virtual Box" and clicking the start button.

In the box currently indicating "Search programs and files" type cmd and press return to shell out to DOS and see a window with the command prompt. You will be shown the directory c:\Users\Test

This needs to be changed to c:\windows\system32

Type cd\.

(The full stop is part of the instruction. This instruction means go to the root directory.)

then type cd windows

This means change directory to the windows directory. Next type cd system32

Fianlly type dir (show the directory contents) and you will see the directory listing of all of the library files that make up Windows 7.

cmd by the way is a utility that acts an editor to write batch files for DOS applications. It is disabled on the school computers for obvious reasons and I would urge caution if you are experimenting on your home computer.

Some library programs are provided within operating systems like Windows or along with development tools like Visual Studio. For example, it is possible to download and use a library of routines that can be used with Windows Media Player. This includes things like making playlists, functions and procedures for accessing and manipulating the music library (which is a binary file) and playback routines.

Using library programs saves time when programming. It also allows the programmer to interact with proprietary software without having access to its source code. Equally Windows uses the same library program such as spellcheck in all of its Office suite or programs so that they do not have to create a spellcheck program for each individual element of the Office Suite.

Language Translators

Whatever language or type of language we use to write our programs, they need to be in machine code in order to be executed by the computer. There are 3 main categories of translator used, assembler, compiler and intepreter.

This shows how compiling and interpreting works:

 

The most important part is the last slide, the comparisson between compilers and interpreters

Assembler

An assembler is a program that translates the mnemonic codes used in assembly language into the bit patterns that represent machine operations. Assembly language has a one-to-one equivalence with machine code, each assembly statement can be converted into a single machine operation.

This is an example of the ubiquitous "Hello World" introduction to programming. These instructions are encoded directly into binary for execution by the CPU.

In the example below you can see the column "Order" is the Assembler. This example is the initial orders in EDSAC (Electronic Delay Storage Automatic Calculator) andwas the first of such a system. It was used to assemble programs from paper tape input into the memory and running the input. The programs were in mnemonic codes instead of machine codes, making “initial code” the first ever assembler by processing a symbolic low level program code into machine code.

This image shows a set of assembler instructions.

Please do not panic, you will never be required to reproduce this in an examination but you do need to know rougly the sort of form an Assember instruction might take. You can see that the instructions also mention flags, a topic to which I will return later.

Compiler

A compiler turns the source code that you write in a high-level language into object code (machine code) that can be executed by the computer.

The compiler is a more complex beast than the assembler. It may require several machine operations to represent a single high-level language statement. As a result, compiling may well be a lengthy process with very large programs.

You have already seen a compiler in action...

Python checks for syntax errors before the program executes. Only if there are no errors will the program be executed. If there are runtime errors then these are picked up as the program is run.

Interpreter

Interpreters translate the source code at run-time. The interpreter translates statements one-at-a-time as the program is executed.

Interpreters are often used to execute high-level language programs whilst they are being developed since this can be quicker than compiling the entire program. The program would be compiled when it is complete and ready to be released.

Interpreters are also used with high-level scripting languages like PHP, Javascript and many more. These instructions are not compiled and have to be interpreted either by the browser (in the case of Javascript) or by interpreters on the server (in the case of PHP).

Some programming languages make use of both compilers and interpreters. If you were to write a Java program in a text editor, when you came to compile it with the Java compiler, you would actually be creating something called bytecode. Bytecode can be thought of as an intermediate stage between source code and object code. When a computer executes a Java program, library programs on that machine interpret the bytecode. This allows Java to be platform-independent - a user needs the correct run-time libraries for Java on their machine in order to execute the programs.

Here you can see both the Java on the right and the Bytecode on the right that will be compiled.

Application Software

Application software tends be used for the tasks that have some relationship to the world outside of the computer. For example, you might use a word processor to write a letter or an essay. Although you use the computer to perform the task, the task itself might reasonably be considered to be a non-computer task.

General-Purpose Software

Software is general-purpose if it can be used for lots of different tasks. You can use a word processor to write letters, memos, essays, instructions, notes, faxes, invoices and lots more. These days we tend to use integrate suites of office software where a range of general-purpose software is provided, usually with the facility to combine elements from each application in a single file. In the original version of Microsoft Office there was a special program as part of the suite that would link the various programs together. More recently each program is made of an increasing number of libraries to ensure smooth integration.

Special-Purpose Software

This software performs a single specific task. This task might be complex like payroll calculation, stock control etc. but will be based on a single task.

As with many abstract concepts, you can stretch these definitions until they blur a little. These days, web browsers can contain a lot of features. They are still primarily focused on a single task, rendering web pages and so the web browser is special-purpose. Being able to access an application using a browser does not change the main purpose of the browser software itself. This Internet of Things (IoT) has also introduced a number of special-purpose software titles that simply have no other function than to manage the processes of a toaster or a heating system.

Bespoke Software

Bespoke software is written for a single client. Large organisations have a need for well-developed applications suited to their specific needs. Such software is often expensive to develop since the development costs are not shared among a large number of people purchasing the software.

Generations Of Programming Language

First Generation Languages

Here we are talking about machine code. This is the only form of code that can be executed by the computer directly.

A hexadecimal version of a machine code program looks someting like this. (It would actually be in binary but that becomes impossible to read (one of the reasons that programmers liked hex so much).

Second Generation Languages

Assembly language was developed to make it easier for programmers to write instructions than it would be using machine code. Mnemonics are used instead of bit patterns (which are harder to remember).

First and second generation languages are low level and machine-oriented. This refers to the way that they are based on the machine operations that are available for a given processor.

Here is another example of assembler. As you can clearly see it is much more complex than Python; given the nature of the task the quantity of code far exceeds the quantity required by a higher level language such as python.

As each processor has its own instruction set, the assembler for each processor will genreally be different. The word length (the number of bits that a processor can handle in one cycle) will significantly affect the code that needs to be written.

Third Generation Languages

Third generation languages are high levelplatform-independent and problem oriented. When source code is compiled, there is a one-to-many equivalence of high level language statements to machine code statements. Third generation programs can be run on any platform for which an appropriate compiler or interpreter exists.

High level languages are developed to help solve particular types of problem. The FORTRAN language was designed with Mathematics, Science and Engineering in mind, it contains lots of scientific functions that the average programmer may not need. The COBOL language was developed with business logic in mind, PHP was developed for server-side scripting and so on.

All of the languages in the first 3 generations are called imperative languages because the program's statements are executed in the order specified by the programmer. (The numbers in the picture mean something to the artist and have no value here.)

Some High level (third generation) Langauges
Basic (Beginnners All Purpose Symbolic Instruction Code) was written by Kemeny and Kurtz in 1964 so that humanities students at Dartmouth College (in America) could write programs without having to use assembler.
FORTRAN (Formula Translation) was the world's first high-level programming language. It was developed at IBM by a small team led by John Backus. The earliest version of FORTRAN was released in 1957 as a programming tool for the IBM 704.
COBOL is a programming language that reads like regular English and is often used for business and administrative purposes. The name means Common Business Oriented Language. COBOL has been around since 1959, when it was developed by the Conference on Data Systems Languages (CODASYL) led by the famous Grace Hopper.
Pascal, named in honor of the French mathematician and philosopher Blaise Pascal, was developed by Niklaus Wirth. Before his work on Pascal, Wirth had developed Euler and ALGOL W and later went on to develop the Pascal-like languages Modula-2 and Oberon.
ALGOL (short for Algorithmic Language) is a family of imperative computer programming languages, originally developed in the mid-1950s, which greatly influenced many other languages and was the standard method for algorithm description used by the ACM in textbooks and academic sources for more than thirty years.
C is a programming language which born at “AT & T's Bell Laboratory” of USA in 1972. C was written by Dennis Ritchie, thats why he is also called as father of c programming language. The C language was created for a specific purpose i.e designing the UNIX operating system (which is currently the base of many UNIX based OSs).

 

Fourth Generation Languages

Fourth generation languages are declarative. This means that the programmer will write facts or rules rather than statements. The interpreter for the language produces the result using whichever standard algorithms it has been given for doing so. SQL and Prolog are both examples of declarative languages.

Why does a computer need an operating system?

An operating system is the core software that allows a computer to run as an useful device, it manages the hardware, the user interface and all other software running on the computer.

Without an operating system, a computer is just a collection of components heating up the room as no-one would be able to make any practical use of the machine.

The hardware that you have in your computer needs to bew told what to do. This is the typical arrangement of a bus that connects all of the hardware components together.

No matter what operating system you pick today, whether it is the most popular Linux distributions, Windows or Mac, you will find that it has lots of bloat (things that take up lots and lots of space that you may never use) and garbage shoved in there for no real reason except to add supposed value to that operating system.

Be honest now, how many of you who use windows actually use note or wordpad? I will bet ten pence to the pound that (note. this is just a figure of speech, not an actual bet. I'm just a poor boy from a poor family :) ) that in place of note you downloaded some program with more functionality and in place of wordpad you use some office program. Don't get me started on internet explorer either. 

The fact of the matter is, if you could remove all the un-needed and unwanted junk and bloat from any operating system you would be left with a lean, mean computing machine which requires far less hardware resources than what is needed today. As far as I know there is only one operating system with which you can do that but I am not writing this to promote that particular, albeit excellent, operating system. 

Back to the title question, why do we need an operating system? Why not have our programs interact directly with the hardware? They would run much better and not need as much ram. 

Back in the dawn of computing they did just that. There was no operating system. Programs were written for a computer and those programs interacted directly with the hardware. They ran fast, they ran lean and they could only run on that machine. 

This is why an operating system is needed. It allows a program to run on multiple different types of hardware. An operating system provides a layer between the program and hardware to enable a program to use a standard interface no matter what hardware is used. The operating system translates the software calls to the hardware calls for that particular piece of hardware. 

Sure this slows things down a bit and uses more resources however the benefits are great. What is gained is increased flexibility and greater range of scope for a particular program. If it weren't for the operating system then computers would not be as wide spread as they are today.

In essence the operating system sits between the software that the user uses and the hardware that does what the user wants to do. The diagram below shows how this is achieved (in outline). The "Application Framework" and everything below it is in effect the operating system. The hardware abstraction layer and the Linux Kernel are the sections of code that are device specific.

How operating systems work

When you turn on your computer, it's nice to think that you're in control. There's the trusty computer mouse, which you can move anywhere on the screen, summoning up your music library or Internetbrowser at the slightest whim. Although it's easy to feel like a director in front of your desktop or laptop, there's a lot going on inside, and the real man behind the curtain handling the necessary tasks is the operating system.

Most desktop or laptop PCs come pre-loaded with Microsoft Windows. Macintosh computers come pre-loaded with Mac OS X. Many corporate servers use the Linux or UNIX operating systems. The operating system (OS) is the first thing loaded onto the computer -- without the operating system, a computer is useless.

More recently, operating systems have started to pop up in smaller computers as well. If you like to tinker with electronic devices, you're probably pleased that operating systems can now be found on many of the devices we use every day, from cell phones to wireless access points. The computers used in these little devices have gotten so powerful that they can now actually run an operating system and applications. The computer in a typical modern cell phone is now more powerful than a desktop computer from 20 years ago, so this progression makes sense and is a natural development.

The purpose of an operating system is to organize and control hardware and software so that the device it lives in behaves in a flexible but predictable way. In this article, we'll tell you what a piece of software must do to be called an operating system, show you how the operating system in your desktop computer works and give you some examples of how to take control of the other operating systems around you.

What is an operating system?

Not all computers have operating systems. The computer that controls the microwave oven in your kitchen, for example, doesn't need an operating system. It has one set of tasks to perform, very straightforward input to expect (a numbered keypad and a few pre-set buttons) and simple, never-changing hardware to control. For a computer like this, an operating system would be unnecessary baggage, driving up the development and manufacturing costs significantly and adding complexity where none is required. Instead, the computer in a microwave oven simply runs a single hard-wired program all the time.

For other devices, an operating system creates the ability to:

  • serve a variety of purposes
  • interact with users in more complicated ways
  • keep up with needs that change over time

All desktop computers have operating systems. The most common are the Windows family of operating systems developed by Microsoft, the Macintosh operating systems developed by Apple and the UNIX family of operating systems (which have been developed by a whole history of individuals, corporations and collaborators). There are hundreds of other operating systems available for special-purpose applications, including specializations for mainframes, robotics, manufacturing, real-time control systems and so on.

In any device that has an operating system, there's usually a way to make changes to how the device works. This is far from a happy accident; one of the reasons operating systems are made out of portable code rather than permanent physical circuits is so that they can be changed or modified without having to scrap the whole device.

For a desktop computer user, this means you can add a new security update, system patch, new application or even an entirely new operating system rather than junk your computer and start again with a new one when you need to make a change. As long as you understand how an operating system works and how to get at it, in many cases you can change some of the ways it behaves. The same thing goes for your phone, too.

Regardless of what device an operating system runs, what exactly can it do?

Operating System Functions

The operating system controls every task your computer carries out and manages system resources.

At the simplest level, an operating system does two things:

  1. It manages the hardware and software resources of the system. In a desktop computer, these resources include such things as the processormemory, disk space and more (On a cell phone, they include the keypad, the screen, the address book, the phone dialer, the battery and the network connection).
  2. It provides a stable, consistent way for applications to deal with the hardware without having to know all the details of the hardware.

The first task, managing the hardware and software resources, is very important, as various programs and input methods compete for the attention of the central processing unit (CPU) and demand memory, storage and input/output (I/O) bandwidth for their own purposes. In this capacity, the operating system plays the role of the good parent, making sure that each application gets the necessary resources while playing nicely with all the other applications, as well as husbanding the limited capacity of the system to the greatest good of all the users and applications.

The second task, providing a consistent application interface, is especially important if there is to be more than one of a particular type of computer using the operating system, or if the hardware making up the computer is ever open to change. A consistent application program interface (API) allows a software developer to write an application on one computer and have a high level of confidence that it will run on another computer of the same type, even if the amount of memory or the quantity of storage is different on the two machines.

Even if a particular computer is unique, an operating system can ensure that applications continue to run when hardware upgrades and updates occur. This is because the operating system -- not the application -- is charged with managing the hardware and the distribution of its resources. One of the challenges facing developers is keeping their operating systems flexible enough to run hardware from the thousands of vendors manufacturing computer equipment. Today's systems can accommodate thousands of different printers, disk drives and special peripherals in any possible combination.

Types of operating systems

Within the broad family of operating systems, there are generally four types, categorized based on the types of computers they control and the sort of applications they support. The categories are:

  • Real-time operating system (RTOS) - Real-time operating systems are used to control machinery, scientific instruments and industrial systems. An RTOS typically has very little user-interface capability, and no end-user utilities, since the system will be a "sealed box" when delivered for use. A very important part of an RTOS is managing the resources of the computer so that a particular operation executes in precisely the same amount of time, every time it occurs. In a complex machine, having a part move more quickly just because system resources are available may be just as catastrophic as having it not move at all because the system is busy.
  • Single-user, single task - As the name implies, this operating system is designed to manage the computer so that one user can effectively do one thing at a time. The Palm OS for Palm handheld computers is a good example of a modern single-user, single-task operating system.
  • Single-user, multi-tasking - This is the type of operating system most people use on their desktop and laptop computers today. Microsoft's Windows and Apple's MacOS platforms are both examples of operating systems that will let a single user have several programs in operation at the same time. For example, it's entirely possible for a Windows user to be writing a note in a word processor while downloading a file from the Internet while printing the text of an e-mail message.
  • Multi-user - A multi-user operating system allows many different users to take advantage of the computer's resources simultaneously. The operating system must make sure that the requirements of the various users are balanced, and that each of the programs they are using has sufficient and separate resources so that a problem with one user doesn't affect the entire community of users. Unix, VMS and mainframe operating systems, such as MVS, are examples of multi-user operating systems.

It's important to differentiate between multi-user operating systems and single-user operating systems that support networking. Windows 2000 and Novell Netware can each support hundreds or thousands of networked users, but the operating systems themselves aren't true multi-user operating systems. The system administrator is the only "user" for Windows 2000 or Netware. The network support and all of the remote user logins the network enables are, in the overall plan of the operating system, a program being run by the administrative user.

With the different types of operating systems in mind, it's time to look at the basic functions provided by an operating system.

Computer operating systems

When you turn on the power to a computer, the first program that runs is usually a set of instructions kept in the computer's read-only memory (ROM). This code examines the system hardware to make sure everything is functioning properly. This power-on self test (POST) checks the CPU, memory, and basic input-output systems (BIOS) for errors and stores the result in a special memory location. Once the POST has successfully completed, the software loaded in ROM (sometimes called the BIOS or firmware) will begin to activate the computer's disk drives. In most modern computers, when the computer activates the hard disk drive, it finds the first piece of the operating system: the bootstrap loader.

The bootstrap loader is a small program that has a single function: It loads the operating system into memory and allows it to begin operation. In the most basic form, the bootstrap loader sets up the small driver programs that interface with and control the various hardware subsystems of the computer. It sets up the divisions of memory that hold the operating system, user information and applications. It establishes the data structures that will hold the myriad signals, flags and semaphores that are used to communicate within and between the subsystems and applications of the computer. Then it turns control of the computer over to the operating system.

The operating system's tasks, in the most general sense, fall into six categories:

  • Processor management
  • Memory management
  • Device management
  • Storage management
  • Application interface
  • User interface

While there are some who argue that an operating system should do more than these six tasks, and some operating-system vendors do build many more utility programs and auxiliary functions into their operating systems, these six tasks define the core of nearly all operating systems. Next, let's look at the tools the operating system uses to perform each of these functions.

Procesor management

The heart of managing the processor comes down to two related issues:

  • Ensuring that each process and application receives enough of the processor's time to function properly
  • Using as many processor cycles as possible for real work

The basic unit of software that the operating system deals with in scheduling the work done by the processor is either a process or a thread, depending on the operating system.

It's tempting to think of a process as an application, but that gives an incomplete picture of how processes relate to the operating system and hardware. The application you see (word processor, spreadsheet or game) is, indeed, a process, but that application may cause several other processes to begin, for tasks like communications with other devices or other computers. There are also numerous processes that run without giving you direct evidence that they ever exist. For example, Windows XP and UNIX can have dozens of background processes running to handle the network, memory management, disk management, virus checks and so on.

A process, then, is software that performs some action and can be controlled -- by a user, by other applications or by the operating system.

It is processes, rather than applications, that the operating system controls and schedules for execution by the CPU. In a single-tasking system, the schedule is straightforward. The operating system allows the application to begin running, suspending the execution only long enough to deal with interrupts and user input.

Interrupts are special signals sent by hardware or software to the CPU. It's as if some part of the computer suddenly raised its hand to ask for the CPU's attention in a lively meeting. Sometimes the operating system will schedule the priority of processes so that interrupts are masked -- that is, the operating system will ignore the interrupts from some sources so that a particular job can be finished as quickly as possible. There are some interrupts (such as those from error conditions or problems with memory) that are so important that they can't be ignored. These non-maskable interrupts (NMIs) must be dealt with immediately, regardless of the other tasks at hand.

While interrupts add some complication to the execution of processes in a single-tasking system, the job of the operating system becomes much more complicated in a multi-tasking system. Now, the operating system must arrange the execution of applications so that you believe that there are several things happening at once. This is complicated because the CPU can only do one thing at a time. Today's multi-core processors and multi-processor machines can handle more work, but each processor core is still capable of managing one task at a time.

In order to give the appearance of lots of things happening at the same time, the operating system has to switch between different processes thousands of times a second. Here's how it happens:

  • A process occupies a certain amount of RAM. It also makes use of registers, stacks and queues within the CPU and operating-system memory space.
  • When two processes are multi-tasking, the operating system allots a certain number of CPU execution cycles to one program.
  • After that number of cycles, the operating system makes copies of all the registers, stacks and queues used by the processes, and notes the point at which the process paused in its execution.
  • It then loads all the registers, stacks and queues used by the second process and allows it a certain number of CPU cycles.
  • When those are complete, it makes copies of all the registers, stacks and queues used by the second program, and loads the first program.

Process Control Block

All of the information needed to keep track of a process when switching is kept in a data package called a process control block. The process control block typically contains:

  • An ID number that identifies the process
  • Pointers to the locations in the program and its data where processing last occurred
  • Register contents
  • States of various flags and switches
  • Pointers to the upper and lower bounds of the memory required for the process
  • A list of files opened by the process
  • The priority of the process
  • The status of all I/O devices needed by the process

Each process has a status associated with it. Many processes consume no CPU time until they get some sort of input. For example, a process might be waiting for a keystroke from the user. While it is waiting for the keystroke, it uses no CPU time. While it's waiting, it is "suspended". When the keystroke arrives, the OS changes its status. When the status of the process changes, from pending to active, for example, or from suspended to running, the information in the process control block must be used like the data in any other program to direct execution of the task-switching portion of the operating system.

This process swapping happens without direct user interference, and each process gets enough CPU cycles to accomplish its task in a reasonable amount of time. Trouble can begin if the user tries to have too many processes functioning at the same time. The operating system itself requires some CPU cycles to perform the saving and swapping of all the registers, queues and stacks of the application processes. If enough processes are started, and if the operating system hasn't been carefully designed, the system can begin to use the vast majority of its available CPU cycles to swap between processes rather than run processes. When this happens, it's called thrashing, and it usually requires some sort of direct user intervention to stop processes and bring order back to the system.

One way that operating-system designers reduce the chance of thrashing is by reducing the need for new processes to perform various tasks. Some operating systems allow for a "process-lite," called a thread, that can deal with all the CPU-intensive work of a normal process, but generally does not deal with the various types of I/O and does not establish structures requiring the extensive process control block of a regular process. A process may start many threads or other processes, but a thread cannot start a process.

So far, all the scheduling we've discussed has concerned a single CPU. In a system with two or more CPUs, the operating system must divide the workload among the CPUs, trying to balance the demands of the required processes with the available cycles on the different CPUs. Asymmetric operating systems use one CPU for their own needs and divide application processes among the remaining CPUs. Symmetric operating systems divide themselves among the various CPUs, balancing demand versus CPU availability even when the operating system itself is all that's running.

If the operating system is the only software with execution needs, the CPU is not the only resource to be scheduled. Memory management is the next crucial step in making sure that all processes run smoothly.

Memory Storage and Management

When an operating system manages the computer's memory, there are two broad tasks to be accomplished:

  1. Each process must have enough memory in which to execute, and it can neither run into the memory space of another process nor be run into by another process.
  2. The different types of memory in the system must be used properly so that each process can run most effectively.

The first task requires the operating system to set up memory boundaries for types of software and for individual applications.

As an example, let's look at an imaginary small system with 1 megabyte (1,000 kilobytes) of RAM. During the boot process, the operating system of our imaginary computer is designed to go to the top of available memory and then "back up" far enough to meet the needs of the operating system itself. Let's say that the operating system needs 300 kilobytes to run. Now, the operating system goes to the bottom of the pool of RAM and starts building up with the various driver software required to control the hardware subsystems of the computer. In our imaginary computer, the drivers take up 200 kilobytes. So after getting the operating system completely loaded, there are 500 kilobytes remaining for application processes.

When applications begin to be loaded into memory, they are loaded in block sizes determined by the operating system. If the block size is 2 kilobytes, then every process that's loaded will be given a chunk of memory that's a multiple of 2 kilobytes in size. Applications will be loaded in these fixed block sizes, with the blocks starting and ending on boundaries established by words of 4 or 8 bytes. These blocks and boundaries help to ensure that applications won't be loaded on top of one another's space by a poorly calculated bit or two. With that ensured, the larger question is what to do when the 500-kilobyte application space is filled.

In most computers, it's possible to add memory beyond the original capacity. For example, you might expand RAM from 1 to 2 gigabytes. This works fine, but can be relatively expensive. It also ignores a fundamental fact of computing -- most of the information that an application stores in memory is not being used at any given moment. A processor can only access memory one location at a time, so the vast majority of RAM is unused at any moment. Since disk space is cheap compared to RAM, then moving information in RAM to hard disk can greatly expand RAM space at no cost. This technique is called virtual memory management.

Disk storage is only one of the memory types that must be managed by the operating system, and it's also the slowest. Ranked in order of speed, the types of memory in a computer system are:

  • High-speed cache -- This is fast, relatively small amounts of memory that are available to the CPU through the fastest connections. Cache controllers predict which pieces of data the CPU will need next and pull it from main memory into high-speed cache to speed up system performance.
  • Main memory -- This is the RAM that you see measured in megabytes when you buy a computer.
  • Secondary memory -- This is most often some sort of rotating magnetic storage that keeps applications and data available to be used, and serves as virtual RAM under the control of the operating system.

The operating system must balance the needs of the various processes with the availability of the different types of memory, moving data in blocks (called pages) between available memory as the schedule of processes dictates.

Device Management

The path between the operating system and virtually all hardware not on the computer's motherboardgoes through a special program called a driver. Much of a driver's function is to be the translator between the electrical signals of the hardware subsystems and the high-level programming languages of the operating system and application programs. Drivers take data that the operating system has defined as a file and translate them into streams of bits placed in specific locations on storage devices, or a series of laser pulses in a printer.

Because there are such wide differences in the hardware, there are differences in the way that the driver programs function. Most run when the device is required, and function much the same as any other process. The operating system will frequently assign high-priority blocks to drivers so that the hardware resource can be released and readied for further use as quickly as possible.

One reason that drivers are separate from the operating system is so that new functions can be added to the driver -- and thus to the hardware subsystems -- without requiring the operating system itself to be modified, recompiled and redistributed. Through the development of new hardware device drivers, development often performed or paid for by the manufacturer of the subsystems rather than the publisher of the operating system, input/output capabilities of the overall system can be greatly enhanced.

Managing input and output is largely a matter of managing queues and buffers, special storage facilities that take a stream of bits from a device, perhaps a keyboard or a serial port, hold those bits, and release them to the CPU at a rate with which the CPU can cope. This function is especially important when a number of processes are running and taking up processor time. The operating system will instruct a buffer to continue taking input from the device, but to stop sending data to the CPU while the process using the input is suspended. Then, when the process requiring input is made active once again, the operating system will command the buffer to send data. This process allows a keyboard or a modem to deal with external users or computers at a high speed even though there are times when the CPU can't use input from those sources.

Managing all the resources of the computer system is a large part of the operating system's function and, in the case of real-time operating systems, may be virtually all the functionality required. For other operating systems, though, providing a relatively simple, consistent way for applications and humans to use the power of the hardware is a crucial part of their reason for existing.

Application Program Interfaces

ust as drivers provide a way for applications to make use of hardware subsystems without having to know every detail of the hardware's operation, application program interfaces (APIs) let application programmers use functions of the computer and operating system without having to directly keep track of all the details in the CPU's operation. Let's look at the example of creating a hard disk file for holding data to see why this can be important.

A programmer writing an application to record data from a scientific instrument might want to allow the scientist to specify the name of the file created. The operating system might provide an API function named MakeFile for creating files. When writing the program, the programmer would insert a line that looks like this:

MakeFile [1, %Name, 2]

In this example, the instruction tells the operating system to create a file that will allow random access to its data (signified by the 1 -- the other option might be 0 for a serial file), will have a name typed in by the user (%Name) and will be a size that varies depending on how much data is stored in the file (signified by the 2 -- other options might be zero for a fixed size, and 1 for a file that grows as data is added but does not shrink when data is removed). Now, let's look at what the operating system does to turn the instruction into action.

The operating system sends a query to the disk drive to get the location of the first available free storage location.

With that information, the operating system creates an entry in the file system showing the beginning and ending locations of the file, the name of the file, the file type, whether the file has been archived, which users have permission to look at or modify the file, and the date and time of the file's creation.

The operating system writes information at the beginning of the file that identifies the file, sets up the type of access possible and includes other information that ties the file to the application. In all of this information, the queries to the disk drive and addresses of the beginning and ending point of the file are in formats heavily dependent on the manufacturer and model of the disk drive.

Because the programmer has written the program to use the API for disk storage, the programmer doesn't have to keep up with the instruction codes, data types and response codes for every possible hard disk and tape drive. The operating system, connected to drivers for the various hardware subsystems, deals with the changing details of the hardware. The programmer must simply write code for the API and trust the operating system to do the rest.

APIs have become one of the most hotly contested areas of the computer industry in recent years. Companies realize that programmers using their API will ultimately translate this into the ability to control and profit from a particular part of the industry. This is one of the reasons that so many companies have been willing to provide applications like readers or viewers to the public at no charge. They know consumers will request that programs take advantage of the free readers, and application companies will be ready to pay royalties to allow their software to provide the functions requested by the consumers.

User Interface

Just as the API provides a consistent way for applications to use the resources of the computersystem, a user interface (UI) brings structure to the interaction between a user and the computer. In the last decade, almost all development in user interfaces has been in the area of the graphical user interface (GUI), with two models, Apple's Macintosh and Microsoft's Windows, receiving most of the attention and gaining most of the market share. The popular open-source Linux operating system also supports a graphical user interface.

There are other user interfaces, some graphical and some not, for other operating systems.

Unix, for example, has user interfaces called shells that present a user interface more flexible and powerful than the standard operating system text-based interface. Programs such as the Korn Shell and the C Shell are text-based interfaces that add important utilities, but their main purpose is to make it easier for the user to manipulate the functions of the operating system. There are also graphical user interfaces, such as X-Windows and Gnome, that make Unix and Linux more like Windows and Macintosh computers from the user's point of view.

It's important to remember that in all of these examples, the user interface is a program or set of programs that sits as a layer above the operating system itself. The same thing is true, with somewhat different mechanisms, of both Windows and Macintosh operating systems. The core operating-system functions -- the management of the computer system -- lie in the kernel of the operating system. The display manager is separate, though it may be tied tightly to the kernel beneath. The ties between the operating-system kernel and the user interface, utilities and other software define many of the differences in operating systems today, and will further define them in the future.

Operating System Development

For desktop systems, access to a LAN or the Internet has become such an expected feature that in many ways it's hard to discuss an operating system without making reference to its connections to other computers and servers. Operating system developers have made the Internet the standard method for delivering crucial operating system updates and bug fixes. Although it's possible to receive these updates via CD or DVD, it's becoming increasingly less common. In fact, some entire operating systems themselves are only available through distribution over the Internet.

Further, a process called NetBooting has streamlined the capability to move the working operating system of a standard consumer desktop computer -- kernel, user interface and all -- off of the machine it controls. This was previously only possible for experienced power-users on multi-user platforms like UNIX and with a suite of specialized applications. NetBooting allows the operating system for one computer to be served over a network connection, by a remote computer connected anywhere in the network. One NetBoot server can serve operating systems to several dozen client computers simultaneously, and to the user sitting in front of each client computer the experience is just like they are using their familiar desktop operating system like Windows or Mac OS.

One question concerning the future of operating systems concerns the ability of a particular philosophy of software distribution to create an operating system usable by corporations and consumers together.

Linux, the operating system created and distributed according to the principles of open source, has had a significant impact on the operating system in general. Most operating systems, drivers and utility programs are written by commercial organizations that distribute executable versions of their software -- versions that can't be studied or altered. Open source requires the distribution of original source materials that can be studied, altered and built upon, with the results once again freely distributed. In the desktop computer realm, this has led to the development and distribution of countless useful and cost-free applications like the image manipulation program GIMP and the popular Web server Apache. In the consumer device realm, the use of Linux has paved the way for individual users to have greater control over how their devices behave.

Many consumer devices like cell phones and routers deliberately hide access to the operating system from the user, mostly to make sure that it's not inadvertently broken or removed. In many cases, they leave a "developer's mode" or "programmer's mode" open to allow changes to be made; howe3ver, that's only if you know how to find it. Often these systems may be programmed in such a way that there are only a limited range of changes that can be made.Some devices leave both a mode of access and the means of making powerful changes open to users, especially those that use Linux. Here are a couple of examples:

  • The TiVo DVR runs on a modified version of Linux. All of the modifications are public knowledge, and can be downloaded here along with some special tools for manipulating the code. Many enterprising TiVo users have added functionality to their systems, including increasing the storage capacity to getting to UNIX shells to changing the mode from NTSC to PAL.
  • Many home routers also run on Linux.

More Great Links

 

Understand that the OS handles management of the processor

As you have seen before, The heart of managing the processor comes down to two related issues:

  • Ensuring that each process and application receives enough of the processor's time to function properly
  • Using as many processor cycles as possible for real work

The basic unit of software that the operating system deals with in scheduling the work done by the processor is either a process or a thread, depending on the operating system.

process, in the simplest terms, is an executing program. One or more threads run in the context of the process. A thread is the basic unit to which the operating system allocates processor time. A thread can execute any part of the process code, including parts currently being executed by another thread.

Understand that the OS handles management of the memory

When an operating system manages the computer's memory, there are two broad tasks to be accomplished:

  1. Each process must have enough memory in which to execute, and it can neither run into the memory space of another process nor be run into by another process.
  2. The different types of memory in the system must be used properly so that each process can run most effectively.

The first task requires the operating system to set up memory boundaries for types of software and for individual applications.

The BBC (Bitesize) considers that the OS manages how main memory is used. It decides:

  • how memory is shared between processes
  • what happens when there is not enough main memory to get the job done

Different processes running at the same time must not interfere with one another. This means they have to use different parts of the computer’s memory.

Understand that the OS handles management of the I/O devices

One of the important jobs of an Operating System is to manage various I/O devices including mouse, keyboards, touch pad, disk drives, display adapters, USB devices, Bit-mapped screen, LED, Analog-to-digital converter, On/off switch, network connections, audio I/O, printers etc.

An I/O system is required to take an application I/O request and send it to the physical device, then take whatever response comes back from the device and send it to the application. I/O devices can be divided into two categories −

  • Block devices − A block device is one with which the driver communicates by sending entire blocks of data. For example, Hard disks, USB cameras, Disk-On-Key etc.

  • Character devices − A character device is one with which the driver communicates by sending and receiving single characters (bytes, octets). For example, serial ports, parallel ports, sounds cards etc

Device Controllers

Device drivers are software modules that can be plugged into an OS to handle a particular device. Operating System takes help from device drivers to handle all I/O devices.

The Device Controller works like an interface between a device and a device driver. I/O units (Keyboard, mouse, printer, etc.) typically consist of a mechanical component and an electronic component where electronic component is called the device controller.

There is always a device controller and a device driver for each device to communicate with the Operating Systems. A device controller may be able to handle multiple devices. As an interface its main task is to convert serial bit stream to block of bytes, perform error correction as necessary.

Any device connected to the computer is connected by a plug and socket, and the socket is connected to a device controller. Following is a model for connecting the CPU, memory, controllers, and I/O devices where CPU and device controllers all use a common bus for communication.

Device Controllers

Synchronous vs asynchronous I/O

  • Synchronous I/O − In this scheme CPU execution waits while I/O proceeds

  • Asynchronous I/O − I/O proceeds concurrently with CPU execution

Communication to I/O Devices

The CPU must have a way to pass information to and from an I/O device. There are three approaches available to communicate with the CPU and Device.

  • Special Instruction I/O
  • Memory-mapped I/O
  • Direct memory access (DMA)

Special Instruction I/O

This uses CPU instructions that are specifically made for controlling I/O devices. These instructions typically allow data to be sent to an I/O device or read from an I/O device.

Memory-mapped I/O

When using memory-mapped I/O, the same address space is shared by memory and I/O devices. The device is connected directly to certain main memory locations so that I/O device can transfer block of data to/from memory without going through CPU.

Memory-mapped I/O

While using memory mapped IO, OS allocates buffer in memory and informs I/O device to use that buffer to send data to the CPU. I/O device operates asynchronously with CPU, interrupts CPU when finished.

The advantage to this method is that every instruction which can access memory can be used to manipulate an I/O device. Memory mapped IO is used for most high-speed I/O devices like disks, communication interfaces.

Direct Memory Access (DMA)

Slow devices like keyboards will generate an interrupt to the main CPU after each byte is transferred. If a fast device such as a disk generated an interrupt for each byte, the operating system would spend most of its time handling these interrupts. So a typical computer uses direct memory access (DMA) hardware to reduce this overhead.

Direct Memory Access (DMA) means CPU grants I/O module authority to read from or write to memory without involvement. DMA module itself controls exchange of data between main memory and the I/O device. CPU is only involved at the beginning and end of the transfer and interrupted only after entire block has been transferred.

Direct Memory Access needs a special hardware called DMA controller (DMAC) that manages the data transfers and arbitrates access to the system bus. The controllers are programmed with source and destination pointers (where to read/write the data), counters to track the number of transferred bytes, and settings, which includes I/O and memory types, interrupts and states for the CPU cycles.

DMA

The operating system uses the DMA hardware as follows −

Step Description
1 Device driver is instructed to transfer disk data to a buffer address X.
2 Device driver then instruct disk controller to transfer data to buffer.
3 Disk controller starts DMA transfer.
4 Disk controller sends each byte to DMA controller.
5 DMA controller transfers bytes to buffer, increases the memory address, decreases the counter C until C becomes zero.
6 When C becomes zero, DMA interrupts CPU to signal transfer completion.

Polling vs Interrupts I/O

A computer must have a way of detecting the arrival of any type of input. There are two ways that this can happen, known as polling and interrupts. Both of these techniques allow the processor to deal with events that can happen at any time and that are not related to the process it is currently running.

Polling I/O

Polling is the simplest way for an I/O device to communicate with the processor the processor. The process of periodically checking status of the device to see if it is time for the next I/O operation, is called polling. The I/O device simply puts the information in a Status register, and the processor must come and get the information.

Most of the time, devices will not require attention and when one does it will have to wait until it is next interrogated by the polling program. This is an inefficient method and much of the processors time is wasted on unnecessary polls.

Compare this method to a teacher continually asking every student in a class, one after another, if they need help. Obviously the more efficient method would be for a student to inform the teacher whenever they require assistance.

Interrupts I/O

An alternative scheme for dealing with I/O is the interrupt-driven method. An interrupt is a signal to the microprocessor from a device that requires attention.

A device controller puts an interrupt signal on the bus when it needs CPU’s attention when CPU receives an interrupt, It saves its current state and invokes the appropriate interrupt handler using the interrupt vector (addresses of OS routines to handle various events). When the interrupting device has been dealt with, the CPU continues with its original task as if it had never been interrupted.

Understand that the OS handles management of the applications

As has been mentioned earlier , the operating system can be broken down into four main parts, namely

  • Kernel
  • Device Drivers
  • User Interface
  • System Utilities

This section will explain a bit more about what each part does and how they differ between types of operating system

Kernel

This has the task of loading the applications into memory, making sure they do not interfere with one another and allowing them to share use of the CPU efficiently. The kernel also handles file storage to and from secondary storage devices such as hard disks and optical drives.

In other words the kernel handles:

  • Loading / Unloading applications from memory
  • Scheduling tasks to run on the CPU
  • Memory management
  • File management
  • Data security

The single user, single application operating system does not have to deal with networking, unlike the network operating system, on the other hand, a device such as a mobile phone will have to have an extremely efficient memory management kernel as its memory is a very limited resource. So the Kernel of each type of operating system will have been designed with different duties in mind.

Device Drivers

Every piece of hardware that makes up the computer or connected to it, will have a device driver that allows the operating system to control and communicate with it. There could be hundreds of device drivers pre-installed with the operating system, and the right ones for that particular computer set-up is loaded on boot-up.

The exact detail of which device driver is needed by the operating system is kept in a file - in Windows, the file is called the 'registry' and in Linux the details will be stored as a number of 'configuration files'.

(Important note, if you ever have a look at the registry using "regedit", take great care as all changes are live, there is rarely a chance to undo anything.)

Makers of printers, graphics tablets, scanners, digital cameras and so on, will normally provide device drivers for each make of operating system. A device driver for Windows is different from the device driver for Linux.

This is why if you remove an operating system such as Windows from a hard disk, and install Linux instead, you will need to make sure you have all the correct device drivers available for each piece of hardware.

User interface

This part of the operating system is directing what you see on the screen (via the device driver) and reacting to your key presses and other inputs. The user interface could be a basic command line interface, as you might find on a server, or it might be a full blown Graphical User Interface (GUI) such as the Mac OS X, Windows or perhaps Gnome on Linux.

System Utilities

This part of the operating system provides all the basic facilities that run in the background without user interaction. For example,

  • Print spool services
  • Cryptographic password management.
  • File management services

Understand that the OS handles management of the security

OS security encompasses many different techniques and methods which ensure safety from threats and attacks. OS security allows different applications and programs to perform required tasks and stop unauthorized interference. 

OS security may be approached in many ways, including adherence to the following:

  • Performing regular OS patch updates
  • Installing updated antivirus engines and software
  • Scrutinizing all incoming and outgoing network traffic through a firewall
  • Creating secure accounts with required privileges only (i.e., user management)

In addition, once the operating system starts to boot, it initialises the various systems it moderates. These include the CPU, memory, on-board devices, persistence mechanisms, and app and user interfaces.

FIGURE: Major components in an operating system

For the CPU, the operating system not only switches it into 32-bit or 64-bit operation, but also virtualises the CPU for security and protection. The OS and its kernel drivers execute at the highest privilege at Ring 0, whereas normal user applications (such as the browser or a word processor) run at the lowest privilege in Ring 3 (there are four privilege or protection rings in modern Intel architecture, of which Windows uses only two).

The main reason for this is security; by ensuring that non-privileged programs can't corrupt the OS, either maliciously or accidentally, the system as a whole is made more stable.

By providing this level of protection, the OS can also abstract away certain physical limitations of the PC (say, the amount of memory) from user applications and then provide services like program swapping and multitasking, making the application easier to write and the overall system more efficient.

Further Reading

Here are a few links to web sites and intersting things that you really should read in your own time. There may be a sentence or two in one of these sites that might spark a difficult concept or resolve a confusing idea or may simply be a better explanation that suits you and eanables you to fully understand the points that the examiner is trying to make.

What is the difference between a thread and a process?

Memory management in much more detail than you will ever need for a GCSE.

An in-depth description of the I/O processes, interrupts and interfaces used in an operfating system.

A different view on the input output management in operating system.

A series of pages on operating systems in excruciating detail.

A quick overview of operating systems.

A skeleton view of operating systems.

An intersting slideshow worth a quick glance.

 

3.1 Fundamentals of algorithms

3.2 Programming

3.3 Fundamentals of data representation

3.4 Computer systems

3.5 Fundamentals of computer networks

3.6 Fundamentals of cyber security

3.7 Ethical, legal and environmental impacts of digital technology on wider society, including issues of privacy

3.8 Aspects of software development

Glossary and other links

Glossary of computing terms.

AQA 8520: The 2016 syllabus

Software classification.

Why does a computer need an operating system?

How do operating systems work?

What is Linux?

What is BIOS?

Further reading