# Microprocessor Design/OS
## Operating System

An operating system is an essential component of the system software. It is a program that enables the computer hardware to communicate and operate with the computer software. An operating system which is initially loaded into the computer by a boot program, manages all the other programs in a computer. The OS provides a software platform on top of which other application programs can run. The application programs make use of the operating system by making requests for services through a defined application program interface (API). In addition, users can interact directly with the operating system through a user interface such as a command language or a graphical user interface (GUI). OS is commonly equipped with features like: Multitasking, Synchronization, Interrupt and Event Handling, Input/ Output, Inter-task Communication, Timers and Clocks and Memory Management to fulfill its primary role of managing the hardware resources to meet the demands of application programs.
Operating systems can be found on almost any device that contains a computer—from cellular phones and video game consoles to supercomputers and web servers. Examples of popular modern operating systems include "Android", BSD, iOS, Linux, OS X, QNX, Microsoft Windows,Windows Phone, and IBM z/OS. All these, except Windows, Windows Phone and z/OS, share roots in UNIX.
A "kernel" is a program that constitutes the central component of an operating system. It has complete control over everything that occurs in the system.

### Functions of an Operating System

* It makes the system more convenient to use by the user.
* It manages the hardware and software resources of the system by making sure that each application gets the necessary resources while managing all the other applications simultaneously, thus increasing efficiency.
* The OS is responsible for providing a consistent application program interface "(API)". A consistent application program interface allows a software developer to write an application on one device and have a high level of confidence that it will run on another device of the same type, even if the amount of memory or the quantity of storage is different on the two machines.
* An OS should be constructed in such a way as to permit the effective development, testing and introduction of new system functions without at the same time interfering with service.

## Types of Operating Systems

A part of the operating system called the scheduler is responsible for deciding which program to run when, and provides the illusion of simultaneous execution by rapidly switching between each program. The type of an operating system is defined by how the scheduler decides which program to run when.
* Real-time operating system (RTOS) - A real-time operating system (RTOS) is an OS intended to serve real-time application requests. It must be able to process data as it comes in, typically without buffering delays.
* 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. E.g. Palm OS.
* Single-user, multi-tasking - Operating systems that will let a single user have several programs in operation at the same time.This is the type of operating system most people use on their desktop and laptop computers today. Eg. Microsoft's Windows and Apple's MacOS.
* 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. Eg. Unix, VMS and mainframe operating systems.
In this book, we will only discuss the Real-Time Operating Systems in detail.