OPERATING SYSTEM
An operatingsystem (OS) is the software that manages the sharing of the
resources of a
computer and provides
programmers with an interface used to access those resources. An operating system processes system data and user input, and responds by allocating and managing tasks and internal system resources as a service to users and programs of the system. At the foundation of all system software, an operating system performs basic tasks such as controlling and allocating
memory, prioritizing system requests, controlling input and output devices, facilitating
networking and managing
file systems. Most operating systems come with an application that provides a
user interface for managing the operating system, such as a
command line interpreter or
graphical user interface. The operating system forms a
platform for other
system software and for
application software.
Process management
Every program running on a computer, be it a service or an application, is a
process. As long as a
von Neumann architecture is used to build computers, only one process per
CPU can be run at a time. Older microcomputer OSes such as
MS-DOS did not attempt to bypass this limit, with the exception of
interrupt processing, and only one process could be run under them (although DOS itself featured
TSR as a very partial and not too easy to use solution). Mainframe operating systems have had
multitasking capabilities since the early 1960s. Modern operating systems enable concurrent execution of many processes at once via
multitasking even with one CPU. Process management is an operating system's way of dealing with running multiple processes. On the most fundamental of computers (those containing one
processor with one
core) multitasking is done by simply switching processes quickly. Depending on the operating system, as more processes run, either each time slice will become smaller or there will be a longer delay before each process is given a chance to run. Process management involves computing and distributing CPU time as well as other resources. Most operating systems allow a process to be assigned a priority which affects its allocation of CPU time. Interactive operating systems also employ some level of feedback in which the task with which the user is working receives higher priority. Interrupt driven processes will normally run at a very high priority. In many systems there is a background process, such as the
System Idle Process in Windows, which will run when no other process is waiting for the CPU.
Memory management
Current computer architectures arrange the computer's memory in a
hierarchical manner, starting from the fastest
registers,
CPU cache,
random access memory and
disk storage. An operating system's memory manager coordinates the use of these various types of memory by tracking which one is available, which is to be allocated or deallocated and how to move data between them. This activity, usually referred to as
virtual memory management, increases the amount of memory available for each process by making the disk storage seem like main memory. There is a speed penalty associated with using disks or other slower storage as memory – if running processes require significantly more RAM than is available, the system may start
thrashing. This can happen either because one process requires a large amount of RAM or because two or more processes compete for a larger amount of memory than is available. This then leads to constant transfer of each process's data to slower storage.
Another important part of memory management is managing virtual addresses. If multiple processes are in memory at once, they must be prevented from interfering with each other's memory (unless there is an explicit request to utilise
shared memory). This is achieved by having separate address spaces. Each process sees the whole virtual address space, typically from address 0 up to the maximum size of virtual memory, as uniquely assigned to it. The operating system maintains a
page table that match virtual addresses to physical addresses. These memory allocations are tracked so that when a process terminates, all memory used by that process can be made available for other processes.
The operating system can also write inactive memory pages to secondary storage. This process is called "paging" or "swapping" – the terminology varies between operating systems.
It is also typical for operating systems to employ otherwise unused physical memory as a
page cache; requests for data from a slower device can be retained in memory to improve performance. The operating system can also pre-load the in-memory cache with data that may be requested by the user in the near future;
SuperFetch is an example of this
Disk and file systems
All operating systems include support for a variety of file systems.
Modern file systems comprise a hierarchy of directories. While the idea is conceptually similar across all general-purpose file systems, some differences in implementation exist. Two noticeable examples of this are the character used to separate directories, and case sensitivity.
Unix demarcates its
path components with a slash (/), a convention followed by operating systems that emulated it or at least its concept of hierarchical directories, such as
Linux, Amiga OS and Mac OS X. MS-DOS also emulated this feature, but had already also adopted the CP/M convention of using slashes for additional options to commands, so instead used the backslash (\) as its component separator. Microsoft Windows continues with this convention; Japanese editions of Windows use ¥, and Korean editions use ₩.
[1] Versions of Mac OS prior to OS X use a
colon (:) for a path separator.
RISC OS uses a period (.).
Unix and
Unix-like operating systems allow for any character in file names other than the slash and NUL characters (including
line feed (LF) and other control characters). Unix file names are case sensitive, which allows multiple files to be created with names that differ only in case. By contrast, Microsoft Windows file names are not case sensitive by default. Windows also has a larger set of punctuation characters that are not allowed in file names.
File systems may provide
journaling, which provides safe recovery in the event of a system crash. A journaled file system writes information twice: first to the journal, which is a log of file system operations, then to its proper place in the ordinary file system. In the event of a crash, the system can recover to a consistent state by replaying a portion of the journal. In contrast, non-journaled file systems typically need to be examined in their entirety by a utility such as
fsck or
chkdsk.
Soft updates is an alternative to journalling that avoids the redundant writes by carefully ordering the update operations. Log-structured file systems and
ZFS also differ from traditional journaled file systems in that they avoid inconsistencies by always writing new copies of the data, eschewing in-place updates.
Many Linux distributions support some or all of
ext2,
ext3,
ReiserFS,
Reiser4,
GFS,
GFS2,
OCFS,
OCFS2, and
NILFS. Linux also has full support for
XFS and
JFS, along with the
FAT file systems, and
NTFS.
Microsoft Windows includes support for FAT12, FAT16, FAT32, and NTFS. The NTFS file system is the most efficient and reliable of the four Windows file systems, and as of
Windows Vista, is the only file system which the operating system can be installed on.
Windows Embedded CE 6.0 introduced
ExFAT, a file system suitable for
flash drives.
Mac OS X supports
HFS+ as its primary file system, and it supports several other file systems as well, including FAT16, FAT32, NTFS and ZFS.
Common to all these (and other) operating systems is support for file systems typically found on removable media. FAT12 is the file system most commonly found on
floppy discs.
ISO 9660 and
Universal Disk Format are two common formats that target
Compact Discs and
DVDs, respectively.
Mount Rainier is a newer extension to UDF supported by Linux 2.6 kernels and Windows Vista that facilitates rewriting to DVDs in the same fashion as what has been possible with floppy disks.
Networking
Most current operating systems are capable of using the TCP/IP networking protocols. 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.
Many operating systems also support one or more vendor-specific legacy networking protocols as well, for example, SNA on IBM systems, DECnet on systems from Digital Equipment Corporation, and Microsoft-specific protocols on Windows. Specific protocols for specific tasks may also be supported such as NFS for file access.