An operating system (OS) is like a facilitator, providing an environment for application programs to run in. It provides an interface between computer hardware and the user of the application programs. Application programs are a stored set of instructions for responding to a specific request. Hardware are the physical devices that make up the system such as the monitor, keyboard, printer, ect. The OS typically includes anywhere from tens to thousands of built-in subroutines called functions which applications can call to perform basic tasks such as displaying a string of text on the screen or inputting a character from the keyboard. The OS allows the user to interact with and obtain information from the hardware through a series of layers. The command layer is the only part of the OS that interacts with the user and sometimes is referred to as the shell. It is the user"s interface to the OS in that the user can request system services via a Job Control Language (JCL), which is the set of commands and their syntax requirements, or through a GUI (Graphical User Interface), the newest command language. The command interpreter decides which services must be executed to process the request and passes these to the service layer. The service layer accepts the commands and translates them into detailed instructions. There is one service call for each number of system requests provided by this layer. It handles functions in process control, file control, and device control. It makes requests to drivers for access to the kernel layer, which interacts directly with the hardware. Input must travel through these layers to reach the hardware and the results must travel back. First and foremost, an operating system must provide a mechanism for starting processes, which most of us know as programs. There are two main types of operating systems: single-tasking and multitasking. DOS is an example of a single-tasking operating system, which simply means that it can only run one program at a time. Windows95 (or newer editions, prior editions were a GUI interface to DOS) is the most widely used multitasking operating system on PC"s. Multitasking means that many programs can run at the same time. The processor (CPU), which selects and executes instructions, must divide its time to each active application to make it appear that all are running at once. These types of operating systems contain schedulers that divide the processor"s time among active processes. The schedulers are located in the kernel. Each process has one or several threads of execution. Every few milliseconds the scheduler takes control of the CPU from the thread it is currently executing, uses a complex time-allocation algorithm to decide which thread should execute next, and continues executing the thread at the point where it was last interrupted. The next fundamental duty of an operating system is to manage the memory – or storage of data - available to it and its applications. The goal in memory management is to give each application the memory it needs without infringing upon memory used by other applications. When a program is loaded and ran, the OS allocates a block of memory to hold the program"s code and data. If a program requires additional memory, it can call a function in the operating system to request more. DOS does not handle memory very well because it runs in real mode, where only 1MB of RAM (Random Access Memory) is addressable. The RAM is volatile memory that stores the running applications but the information is lost when the computer is turned off. Windows95 does a much better job of managing memory because it runs in protected mode, which allows it to use all memory, including extended memory. And even when that much memory isn"t enough, it can make more available by creating virtual memory from free space (space that has nothing stored in it) on a hard disk (non-removable secondary storage hardware device). Virtual Memory is a memory management technique that only loads active portions of a program into main memory. Windows95 also takes steps to prevent an application from accessing memory that it does not own. In DOS, and application can write to someone else"s memory, including the operating system"s, which can crash the entire system. Windows95 runs applications in private address spaces that are logically isolated from each other and identify the start of the file. One of an operating system"s most important components is its file system – the part responsible for managing files stored on hard disks and other mass-storage devices. An operating system provides high-level functions that applications can call to control file I/O, which covers the opening, closing, creating, deleting, and renaming of files. To read a chunk of data from a file, the application calls an operating system function and passes the operating system the file handle (which uniquely identifies an open file), the address in memory where the data should be copied, and the number of bytes to copy. The OS has to identify each sector on the disk that holds a portion of the requested file and program the drive controller to retrieve the information, sector by sector. It has to do this efficiently so that the information is retrieved quickly. The OS finds the right locations on the disk because it keeps a map that contains the name of each file and a record of where it is stored. DOS and Windows95 use a file allocation table as a map to find the locations. Another role that operating systems play in making a computer work is controlling device I/O. A device is a piece of hardware such as a video adapter, keyboard, or mouse. To talk to a device, a program must speak the device"s language, which usually consists of streams of 1"s and 0"s. There are thousands of different devices and "languages", so the OS helps out by serving as an interpreter. It talks to the devices through device drivers, which are interface programs specially designed for each individual I/O device. Most operating systems like Windows95 come with dozens of different drivers for each I/O device. DOS also uses drivers, but they are often so primitive that the applications perform device I/O by relying on low-level routines encoded in ROM (Read Only Memory - allows the data to be read but not written) in the computer"s BIOS (Basic Input/Output System) or by talking directly to the hardware.