An OPERATING SYSTEM (OS) is system software that manages computer hardware and software resources and provides common services for computer programs . All computer programs , excluding firmware , require an operating system to function.
Time-sharing operating systems schedule tasks for efficient use of the system and may also include accounting software for cost allocation of processor time , mass storage , printing , and other resources.
For hardware functions such as input and output and memory allocation , the operating system acts as an intermediary between programs and the computer hardware, although the application code is usually executed directly by the hardware and frequently makes system calls to an OS function or is interrupted by it. Operating systems are found on many devices that contain a computer – from cellular phones and video game consoles to web servers and supercomputers .
The dominant desktop operating system is
* 1 Types of operating systems
* 1.1 Single- and multi-tasking * 1.2 Single- and multi-user * 1.3 Distributed * 1.4 Templated * 1.5 Embedded * 1.6 Real-time * 1.7 Library
* 2 History
* 2.1 Mainframes * 2.2 Microcomputers
* 3 Examples of operating systems
* 3.1.1 BSD and its descendants
* 188.8.131.52 macOS
* 4 Components
* 4.1 Kernel
* 4.1.1 Program execution
* 4.1.2 Interrupts
* 4.1.3 Modes
* 4.2 Networking * 4.3 Security
* 4.4 User interface
* 4.4.1 Graphical user interfaces
* 5 Real-time operating systems
TYPES OF OPERATING SYSTEMS
SINGLE- AND MULTI-TASKING
A single-tasking system can only run one program at a time, while a
multi-tasking operating system allows more than one program to be
running in concurrency. This is achieved by time-sharing , dividing
the available processor time between multiple processes that are each
interrupted repeatedly in time slices by a task-scheduling subsystem
of the operating system.
Multi-tasking may be characterized in
preemptive and co-operative types. In preemptive multitasking, the
operating system slices the
SINGLE- AND MULTI-USER
Single-user operating systems have no facilities to distinguish users, but may allow multiple programs to run in tandem. A multi-user operating system extends the basic concept of multi-tasking with facilities that identify processes and resources, such as disk space, belonging to multiple users, and the system permits multiple users to interact with the system at the same time. Time-sharing operating systems schedule tasks for efficient use of the system and may also include accounting software for cost allocation of processor time, mass storage, printing, and other resources to multiple users.
A distributed operating system manages a group of distinct computers and makes them appear to be a single computer. The development of networked computers that could be linked and communicate with each other gave rise to distributed computing. Distributed computations are carried out on more than one machine. When computers in a group work in cooperation, they form a distributed system.
In an OS, distributed and cloud computing context, templating refers to creating a single virtual machine image as a guest operating system, then saving it as a tool for multiple running virtual machines. The technique is used both in virtualization and cloud computing management, and is common in large server warehouses.
Embedded operating systems are designed to be used in embedded computer systems . They are designed to operate on small machines like PDAs with less autonomy. They are able to operate with a limited number of resources. They are very compact and extremely efficient by design. Windows CE and Minix 3 are some examples of embedded operating systems.
A real-time operating system is an operating system that guarantees to process events or data by a specific moment in time. A real-time operating system may be single- or multi-tasking, but when multitasking, it uses specialized scheduling algorithms so that a deterministic nature of behavior is achieved. An event-driven system switches between tasks based on their priorities or external events while time-sharing operating systems switch tasks based on clock interrupts
A library operating system is one in which the services that a typical operating system provides, such as networking, are provided in the form of libraries. These libraries are composed with the application and configuration code to construct unikernels – which are specialized, single address space , machine images that can be deployed to cloud or embedded environments.
Main article: History of operating systems See also: Resident monitor
Early computers were built to perform a series of single tasks, like a calculator. Basic operating system features were developed in the 1950s, such as resident monitor functions that could automatically run different programs in succession to speed up processing. Operating systems did not exist in their modern and more complex forms until the early 1960s. Hardware features were added, that enabled use of runtime libraries , interrupts , and parallel processing . When personal computers became popular in the 1980s, operating systems were made for them similar in concept to those used on larger computers.
In the 1940s, the earliest electronic digital systems had no
operating systems. Electronic systems of this time were programmed on
rows of mechanical switches or by jumper wires on plug boards. These
were special-purpose systems that, for example, generated ballistics
tables for the military or controlled the printing of payroll checks
from data on punched paper cards. After programmable general purpose
computers were invented, machine languages (consisting of strings of
the binary digits 0 and 1 on punched paper tape) were introduced that
sped up the programming process (Stern, 1981).
In the early 1950s, a computer could execute only one program at a time. Each user had sole use of the computer for a limited period of time and would arrive at a scheduled time with program and data on punched paper cards or punched tape. The program would be loaded into the machine, and the machine would be set to work until the program completed or crashed. Programs could generally be debugged via a front panel using toggle switches and panel lights. It is said that Alan Turing was a master of this on the early Manchester Mark 1 machine, and he was already deriving the primitive conception of an operating system from the principles of the universal Turing machine .
Later machines came with libraries of programs , which would be linked to a user's program to assist in operations such as input and output and generating computer code from human-readable symbolic code . This was the genesis of the modern-day operating system. However, machines still ran a single job at a time. At Cambridge University in England the job queue was at one time a washing line (clothes line ) from which tapes were hung with different colored clothes-pegs to indicate job-priority.
An improvement was the Atlas Supervisor introduced with the Manchester Atlas commissioned in 1962, "considered by many to be the first recognisable modern operating system". Brinch Hansen described it as "the most significant breakthrough in the history of operating systems."
Through the 1950s, many major features were pioneered in the field of operating systems, including batch processing , input/output interrupt , buffering , multitasking , spooling , runtime libraries , link-loading , and programs for sorting records in files. These features were included or not included in application software at the option of application programmers, rather than in a separate operating system used by all applications. In 1959, the SHARE Operating System was released as an integrated utility for the IBM 704 , and later in the 709 and 7090 mainframes, although it was quickly supplanted by IBSYS /IBJOB on the 709, 7090 and 7094.
During the 1960s, IBM's
CP-67 system for the S/360-67 started a whole line of
Control Data Corporation
Burroughs Corporation introduced the
B5000 with the MCP ,
Master Control Program ) operating system. The
B5000 was a stack
machine designed to exclusively support high-level languages with no
machine language or assembler, and indeed the MCP was the first OS to
be written exclusively in a high-level language – ESPOL , a dialect
ALGOL . MCP also introduced many other ground-breaking innovations,
such as being the first commercial implementation of virtual memory .
During development of the
UNIVAC, the first commercial computer manufacturer, produced a series of EXEC operating systems. Like all early main-frame systems, this batch-oriented system managed magnetic drums, disks, card readers and line printers. In the 1970s, UNIVAC produced the Real-Time Basic (RTB) system to support large-scale time sharing, also patterned after the Dartmouth BC system.
Digital Equipment Corporation developed many operating systems for its various computer lines, including TOPS-10 and TOPS-20 time sharing systems for the 36-bit PDP-10 class systems. Before the widespread use of UNIX, TOPS-10 was a particularly popular system in universities, and in the early ARPANET community.
From the late 1960s through the late 1970s, several hardware capabilities evolved that allowed similar or ported software to run on more than one system. Early systems had utilized microprogramming to implement features on their systems in order to permit different underlying computer architectures to appear to be the same as others in a series. In fact, most 360s after the 360/40 (except the 360/165 and 360/168) were microprogrammed implementations.
The enormous investment in software for these systems made since the 1960s caused most of the original computer manufacturers to continue to develop compatible operating systems along with the hardware. Notable supported mainframe operating systems include:
* Burroughs MCP –
B5000 , 1961 to
Unisys Clearpath/MCP, present
PC DOS was an early personal computer OS that featured a command
line interface. Mac OS by
The first microcomputers did not have the capacity or need for the
elaborate operating systems that had been developed for mainframes and
minis; minimalistic operating systems were developed, often loaded
from ROM and known as monitors . One notable early disk operating
The introduction of the
EXAMPLES OF OPERATING SYSTEMS
Four operating systems are certified by
The Open Group (holder of the
BSD And Its Descendants
A subgroup of the
University of California, Berkeley installed its first Unix
system. Over time, students and staff in the computer science
department there began adding new programs to make things easier, such
as text editors. When Berkeley received new
In 2011, Windows 7 overtook Windows XP as most common version in use.
Server editions of Windows are widely used. In recent years,
ReactOS is a Windows-alternative operating system, which is being developed on the principles of Windows – without using any of Microsoft's code.
There have been many operating systems that were significant in their
day but are no longer so, such as
Other operating systems have failed to win significant market share, but have introduced innovations that have influenced mainstream operating systems, not least Bell Labs' Plan 9 .
The components of an operating system all exist in order to make the different parts of a computer work together. All user software needs to go through the operating system in order to use any of the hardware, whether it be as simple as a mouse or keyboard or as complex as an Internet component.
With the aid of the firmware and device drivers , the kernel provides the most basic level of control over all of the computer's hardware devices. It manages memory access for programs in the RAM , it determines which programs get access to which hardware resources, it sets up or resets the CPU's operating states for optimal operation at all times, and it organizes the data for long-term non-volatile storage with file systems on such media as disks, tapes, flash memory, etc.
The operating system provides an interface between an application program and the computer hardware, so that an application program can interact with the hardware only by obeying rules and procedures programmed into the operating system. The operating system is also a set of services which simplify development and execution of application programs. Executing an application program involves the creation of a process by the operating system kernel which assigns memory space and other resources, establishes a priority for the process in multi-tasking systems, loads program binary code into memory, and initiates execution of the application program which then interacts with the user and with hardware devices.
Interrupts are central to operating systems, as they provide an
efficient way for the operating system to interact with and react to
its environment. The alternative – having the operating system
"watch" the various sources of input for events (polling) that require
action – can be found in older systems with very small stacks (50 or
60 bytes) but is unusual in modern systems with large stacks.
When an interrupt is received, the computer's hardware automatically suspends whatever program is currently running, saves its status, and runs computer code previously associated with the interrupt; this is analogous to placing a bookmark in a book in response to a phone call. In modern operating systems, interrupts are handled by the operating system's kernel . Interrupts may come from either the computer's hardware or the running program.
When a hardware device triggers an interrupt, the operating system's kernel decides how to deal with this event, generally by running some processing code. The amount of code being run depends on the priority of the interrupt (for example: a person usually responds to a smoke detector alarm before answering the phone). The processing of hardware interrupts is a task that is usually delegated to software called a device driver , which may be part of the operating system's kernel, part of another program, or both. Device drivers may then relay information to a running program by various means.
A program may also trigger an interrupt to the operating system. If a program wishes to access hardware, for example, it may interrupt the operating system's kernel, which causes control to be passed back to the kernel. The kernel then processes the request. If a program wishes additional resources (or wishes to shed resources) such as memory, it triggers an interrupt to get the kernel's attention.
Modern microprocessors (
At power-on or reset, the system begins in supervisor mode. Once an operating system kernel has been loaded and started, the boundary between user mode and supervisor mode (also known as kernel mode) can be established.
Supervisor mode is used by the kernel for low level tasks that need unrestricted access to hardware, such as controlling how memory is accessed, and communicating with devices such as disk drives and video display devices. User mode, in contrast, is used for almost everything else. Application programs, such as word processors and database managers, operate within user mode, and can only access machine resources by turning control over to the kernel, a process which causes a switch to supervisor mode. Typically, the transfer of control to the kernel is achieved by executing a software interrupt instruction, such as the Motorola 68000 TRAP instruction. The software interrupt causes the microprocessor to switch from user mode to supervisor mode and begin executing code that allows the kernel to take control.
In user mode, programs usually have access to a restricted set of microprocessor instructions, and generally cannot execute any instructions that could potentially cause disruption to the system's operation. In supervisor mode, instruction execution restrictions are typically removed, allowing the kernel unrestricted access to all machine resources.
The term "user mode resource" generally refers to one or more CPU registers, which contain information that the running program isn't allowed to alter. Attempts to alter these resources generally causes a switch to supervisor mode, where the operating system can deal with the illegal operation the program was attempting, for example, by forceably terminating ("killing") the program).
Among other things, a multiprogramming operating system kernel must be responsible for managing all system memory which is currently in use by programs. This ensures that a program does not interfere with memory already in use by another program. Since programs time share, each program must have independent access to memory.
Cooperative memory management, used by many early operating systems, assumes that all programs make voluntary use of the kernel 's memory manager, and do not exceed their allocated memory. This system of memory management is almost never seen any more, since programs often contain bugs which can cause them to exceed their allocated memory. If a program fails, it may cause memory used by one or more other programs to be affected or overwritten. Malicious programs or viruses may purposefully alter another program's memory, or may affect the operation of the operating system itself. With cooperative memory management, it takes only one misbehaved program to crash the system.
Memory protection enables the kernel to limit a process' access to
the computer's memory. Various methods of memory protection exist,
including memory segmentation and paging . All methods require some
level of hardware support (such as the
In both segmentation and paging, certain protected mode registers
specify to the
Windows versions 3.1 through ME had some level of memory protection, but programs could easily circumvent the need to use it. A general protection fault would be produced, indicating a segmentation violation had occurred; however, the system would often crash anyway.
The use of virtual memory addressing (such as paging or segmentation) means that the kernel can choose what memory each program may use at any given time, allowing the operating system to use the same memory locations for multiple tasks.
If a program tries to access memory that isn't in its current range
of accessible memory, but nonetheless has been allocated to it, the
kernel is interrupted in the same way as it would if the program were
to exceed its allocated memory. (See section on memory management.)
When the kernel detects a page fault it generally adjusts the virtual memory range of the program which triggered it, granting it access to the memory requested. This gives the kernel discretionary power over where a particular application's memory is stored, or even whether or not it has actually been allocated yet.
In modern operating systems, memory which is accessed less frequently can be temporarily stored on disk or other media to make that space available for use by other programs. This is called swapping , as an area of memory can be used by multiple programs, and what that memory area contains can be swapped or exchanged on demand.
"Virtual memory" provides the programmer or the user with the perception that there is a much larger amount of RAM in the computer than is really there.
Multitasking refers to the running of multiple independent computer programs on the same computer; giving the appearance that it is performing the tasks at the same time. Since most computers can do at most one or two things at one time, this is generally done via time-sharing, which means that each program uses a share of the computer's time to execute.
An operating system kernel contains a scheduling program which
determines how much time each process spends executing, and in which
order execution control should be passed to programs. Control is
passed to a process by the kernel, which allows the program access to
An early model which governed the allocation of time to programs was called cooperative multitasking . In this model, when control is passed to a program by the kernel, it may execute for as long as it wants before explicitly returning control to the kernel. This means that a malicious or malfunctioning program may not only prevent any other programs from using the CPU, but it can hang the entire system if it enters an infinite loop .
Modern operating systems extend the concepts of application preemption to device drivers and kernel code, so that the operating system has preemptive control over internal run-times as well.
The philosophy governing preemptive multitasking is that of ensuring
that all programs are given regular time on the CPU. This implies that
all programs must be limited in how much time they are allowed to
spend on the
On many single user operating systems cooperative multitasking is
perfectly adequate, as home computers generally run a small number of
well tested programs. The
Disk Access And
Access to data stored on disks is a central feature of all operating systems. Computers store data on disks using files , which are structured in specific ways in order to allow for faster access, higher reliability, and to make better use of the drive's available space. The specific way in which files are stored on a disk is called a file system , and enables files to have names and attributes. It also allows them to be stored in a hierarchy of directories or folders arranged in a directory tree .
Early operating systems generally supported a single type of disk drive and only one kind of file system. Early file systems were limited in their capacity, speed, and in the kinds of file names and directory structures they could use. These limitations often reflected limitations in the operating systems they were designed for, making it very difficult for an operating system to support more than one file system.
While many simpler operating systems support a limited range of
options for accessing storage systems, operating systems like
A connected storage device , such as a hard drive , is accessed through a device driver . The device driver understands the specific language of the drive and is able to translate that language into a standard language used by the operating system to access all disk drives. On UNIX, this is the language of block devices .
When the kernel has an appropriate device driver in place, it can then access the contents of the disk drive in raw format, which may contain one or more file systems. A file system driver is used to translate the commands used to access each specific file system into a standard set of commands that the operating system can use to talk to all file systems. Programs can then deal with these file systems on the basis of filenames, and directories/folders, contained within a hierarchical structure. They can create, delete, open, and close files, as well as gather various information about them, including access permissions, size, free space, and creation and modification dates.
Various differences between file systems make supporting all file
systems difficult. Allowed characters in file names, case sensitivity
, and the presence of various kinds of file attributes makes the
implementation of a single interface for every file system a daunting
task. Operating systems tend to recommend using (and so support
natively) file systems specifically designed for them; for example,
Support for file systems is highly varied among modern operating
systems, although there are several common file systems which almost
all operating systems include support and drivers for. Operating
systems vary on file system support and on the disk formats they may
be installed on. Under Windows, each file system is usually limited in
application to certain media; for example, CDs must use
Main article: Device driver
A device driver is a specific type of computer software developed to allow interaction with hardware devices. Typically this constitutes an interface for communicating with the device, through the specific computer bus or communications subsystem that the hardware is connected to, providing commands to and/or receiving data from the device, and on the other end, the requisite interfaces to the operating system and software applications. It is a specialized hardware-dependent computer program which is also operating system specific that enables another program, typically an operating system or applications software package or computer program running under the operating system kernel, to interact transparently with a hardware device, and usually provides the requisite interrupt handling necessary for any necessary asynchronous time-dependent hardware interfacing needs.
The key design goal of device drivers is abstraction . Every model of hardware (even within the same class of device) is different. Newer models also are released by manufacturers that provide more reliable or better performance and these newer models are often controlled differently. Computers and their operating systems cannot be expected to know how to control every device, both now and in the future. To solve this problem, operating systems essentially dictate how every type of device should be controlled. The function of the device driver is then to translate these operating system mandated function calls into device specific calls. In theory a new device, which is controlled in a new manner, should function correctly if a suitable driver is available. This new driver ensures that the device appears to operate as usual from the operating system's point of view.
Under versions of Windows before Vista and versions of
Currently most operating systems support a variety of networking protocols, hardware, and applications for using them. This means that computers running dissimilar operating systems can participate in a common network for sharing resources such as computing , files, printers, and scanners using either wired or wireless connections. Networks can essentially allow a computer's operating system to access the resources of a remote computer to support the same functions as it could if those resources were connected directly to the local computer. This includes everything from simple communication, to using networked file systems or even sharing another computer's graphics or sound hardware. Some network services allow the resources of a computer to be accessed transparently, such as SSH which allows networked users direct access to a computer's command line interface.
Client/server networking allows a program on a computer, called a
client, to connect via a network to another computer, called a server.
Servers offer (or host) various services to other network computers
and users. These services are usually provided through ports or
numbered access points beyond the server's
Many operating systems support one or more vendor-specific or open
networking protocols as well, for example, SNA on
Main article: Computer security
A computer being secure depends on a number of technologies working properly. A modern operating system provides access to a number of resources, which are available to software running on the system, and to external devices like networks via the kernel.
The operating system must be capable of distinguishing between requests which should be allowed to be processed, and others which should not be processed. While some systems may simply distinguish between "privileged" and "non-privileged", systems commonly have a form of requester identity, such as a user name. To establish identity there may be a process of authentication. Often a username must be quoted, and each username may have a password. Other methods of authentication, such as magnetic cards or biometric data, might be used instead. In some cases, especially connections from the network, resources may be accessed with no authentication at all (such as reading files over a network share). Also covered by the concept of requester IDENTITY is authorization; the particular services and resources accessible by the requester once logged into a system are tied to either the requester's user account or to the variously configured groups of users to which the requester belongs.
In addition to the allow or disallow model of security, a system with a high level of security also offers auditing options. These would allow tracking of requests for access to resources (such as, "who has been reading this file?"). Internal security, or security from an already running program is only possible if all possibly harmful requests must be carried out through interrupts to the operating system kernel. If programs can directly access hardware and resources, they cannot be secured.
External security involves a request from outside the computer, such as a login at a connected console or some kind of network connection. External requests are often passed through device drivers to the operating system's kernel, where they can be passed onto applications, or carried out directly. Security of operating systems has long been a concern because of highly sensitive data held on computers, both of a commercial and military nature. The United States Government Department of Defense (DoD) created the Trusted Computer System Evaluation Criteria (TCSEC) which is a standard that sets basic requirements for assessing the effectiveness of security. This became of vital importance to operating system makers, because the TCSEC was used to evaluate, classify and select trusted operating systems being considered for the processing, storage and retrieval of sensitive or classified information .
Network services include offerings such as file sharing, print services, email, web sites, and file transfer protocols (FTP), most of which can have compromised security. At the front line of security are hardware devices known as firewalls or intrusion detection/prevention systems. At the operating system level, there are a number of software firewalls available, as well as intrusion detection/prevention systems. Most modern operating systems include a software firewall, which is enabled by default. A software firewall can be configured to allow or deny network traffic to or from a service or application running on the operating system. Therefore, one can install and be running an insecure service, such as Telnet or FTP, and not have to be threatened by a security breach because the firewall would deny all traffic trying to connect to the service on that port.
An alternative strategy, and the only sandbox strategy available in systems that do not meet the Popek and Goldberg virtualization requirements , is where the operating system is not running user programs as native code, but instead either emulates a processor or provides a host for a p-code based system such as Java.
Internal security is especially relevant for multi-user systems; it allows each user of the system to have private files that the other users cannot tamper with or read. Internal security is also vital if auditing is to be of any use, since a program can potentially bypass the operating system, inclusive of bypassing auditing.
Every computer that is to be operated by an individual requires a user interface . The user interface is usually referred to as a shell and is essential if human interaction is to be supported. The user interface views the directory structure and requests services from the operating system that will acquire data from input hardware devices , such as a keyboard , mouse or credit card reader , and requests operating system services to display prompts , status messages and such on output hardware devices , such as a video monitor or printer . The two most common forms of a user interface have historically been the command-line interface , where computer commands are typed out line-by-line, and the graphical user interface , where a visual environment (most commonly a WIMP ) is present.
Graphical User Interfaces
A screenshot of the
KDE Plasma 5
Most of the modern computer systems support graphical user interfaces (GUI), and often include them. In some computer systems, such as the original implementation of the classic Mac OS , the GUI is integrated into the kernel .
While technically a graphical user interface is not an operating
system service, incorporating support for one into the operating
system kernel can allow the GUI to be more responsive by reducing the
number of context switches required for the GUI to perform its output
functions. Other operating systems are modular , separating the
graphics subsystem from the kernel and the Operating System. In the
1980s UNIX, VMS and many others had operating systems that were built
Many computer operating systems allow the user to install or create
any user interface they desire. The
X Window System
Numerous Unix-based GUIs have existed over time, most derived from
X11. Competition among the various vendors of
Graphical user interfaces evolve over time. For example, Windows has modified its user interface almost every time a new major version of Windows is released, and the Mac OS GUI changed dramatically with the introduction of Mac OS X in 1999.
REAL-TIME OPERATING SYSTEMS
Main article: Real-time operating system
A real-time operating system (RTOS) is an operating system intended for applications with fixed deadlines (real-time computing ). Such applications include some small embedded systems , automobile engine controllers, industrial robots, spacecraft, industrial control, and some large-scale computing systems.
Embedded systems that have fixed deadlines use a real-time operating
system such as
OPERATING SYSTEM DEVELOPMENT AS A HOBBY
See also: Hobbyist operating system development
In some cases, hobby development is in support of a "homebrew "
computing device, for example, a simple single-board computer powered
6502 microprocessor . Or, development may be for an architecture
already in widespread use.
Examples of a hobby operating system include Syllable .
DIVERSITY OF OPERATING SYSTEMS AND PORTABILITY
Application software is generally written for use on a specific operating system, and sometimes even for specific hardware. When porting the application to run on another OS, the functionality required by that application may be implemented differently by that OS (the names of functions, meaning of arguments, etc.) requiring the application to be adapted, changed, or otherwise maintained .
This cost in supporting operating systems diversity can be avoided by instead writing applications against software platforms like Java or Qt . These abstractions have already borne the cost of adaptation to specific operating systems and their system libraries .
Another approach is for operating system vendors to adopt standards. For example, POSIX and OS abstraction layers provide commonalities that reduce porting costs.
Main article: Usage share of operating systems
2013 worldwide device shipments by operating system OPERATING SYSTEM 2012 (MILLIONS OF UNITS) 2013 (MILLION OF UNITS)
ANDROID 504 878
WINDOWS 346 328
IOS/MAC OS 214 267
BLACKBERRY 35 24
OTHERS 1,117 803
TOTAL 2,216 2,300
In 2014, Android was first (currently not replicated by others, in a single year) operating system ever to ship on a billion devices, becoming the most popular operating system by installed base.
* Computer Science portal * Information technology portal * Computer networking portal
* ^ Stallings (2005). Operating Systems, Internals and Design
Principles. Pearson: Prentice Hall. p. 6.
* ^ Dhotre, I.A. (2009). Operating Systems. Technical Publications.
* ^ "StatCounter Global Stats - Browser, OS, Search Engine
including Mobile Usage Share".
* ^ "Strategy Analytics: Android Captures Record 88 Percent Share