System programming
Encyclopedia
System programming is the activity of programming system software
. The primary distinguishing characteristic of systems programming when compared to application programming is that application
programming aims to produce software which provides services to the user (e.g. word processor
), whereas systems programming aims to produce software which provides services to the computer hardware
(e.g. disk defragmenter
). It requires a greater degree of hardware awareness.
Systems programming is sufficiently different from application programming that programmers tend to specialize in one or the other.
In system programming, often limited programming facilities are available. The use of automatic garbage collection
is not common and debugging
is sometimes hard to do. The runtime library
, if available at all, is usually far less powerful, and does less error checking. Because of those limitations, monitoring
and logging are often used; operating system
s may have extremely elaborate logging subsystems.
Implementing certain parts in operating system and networking requires systems programming (for example implementing Paging (Virtual Memory
) or a device driver
for an operating system).
. Experiments with hardware support in high-level languages in the late 1960s led to such languages as PL/S, BLISS
, BCPL
, and extended ALGOL
for Burroughs large systems. Forth also has applications as a systems language.
In the 1980s C
became ubiquitous, aided by the growth of Unix
.
More recently Embedded C++
has seen some use, for instance in the I/O Kit
drivers of Mac OS X
.
s, although the term is even used to describe job functions which do not involve mainframes. This usage arose because administration of IBM mainframes often involved the writing of custom assembler code which integrated with the Operating System, indeed, some IBM
software products had substantial code contributions from customer programming staff. This type of programming is progressively less common, but the term systems programmer is still the defacto job title for staff directly administering IBM mainframes.
System software
System software is computer software designed to operate the computer hardware and to provide a platform for running application software.The most basic types of system software are:...
. The primary distinguishing characteristic of systems programming when compared to application programming is that application
Application software
Application software, also known as an application or an "app", is computer software designed to help the user to perform specific tasks. Examples include enterprise software, accounting software, office suites, graphics software and media players. Many application programs deal principally with...
programming aims to produce software which provides services to the user (e.g. word processor
Word processor
A word processor is a computer application used for the production of any sort of printable material....
), whereas systems programming aims to produce software which provides services to the computer hardware
Computer hardware
Personal computer hardware are component devices which are typically installed into or peripheral to a computer case to create a personal computer upon which system software is installed including a firmware interface such as a BIOS and an operating system which supports application software that...
(e.g. disk defragmenter
Defragmentation
In the maintenance of file systems, defragmentation is a process that reduces the amount of fragmentation. It does this by physically organizing the contents of the mass storage device used to store files into the smallest number of contiguous regions . It also attempts to create larger regions of...
). It requires a greater degree of hardware awareness.
Overview
In system programming more specifically:- the programmerProgrammerA programmer, computer programmer or coder is someone who writes computer software. The term computer programmer can refer to a specialist in one area of computer programming or to a generalist who writes code for many kinds of software. One who practices or professes a formal approach to...
will make assumptions about the hardware and other properties of the system that the program runs on, and will often exploit those properties (for example by using an algorithmAlgorithmIn mathematics and computer science, an algorithm is an effective method expressed as a finite list of well-defined instructions for calculating a function. Algorithms are used for calculation, data processing, and automated reasoning...
that is known to be efficient when used with specific hardware) - usually a low-level programming language or programming language dialect is used that:
- can operate in resource-constrained environments
- is very efficient and has little runtimeRun-time systemA run-time system is a software component designed to support the execution of computer programs written in some computer language...
overhead - has a small runtime libraryRuntime libraryIn computer programming, a runtime library is a special program library used by a compiler, to implement functions built into a programming language, during the execution of a computer program...
, or none at all - allows for direct and "raw" control over memory access and control flowControl flowIn computer science, control flow refers to the order in which the individual statements, instructions, or function calls of an imperative or a declarative program are executed or evaluated....
- lets the programmer write parts of the program directly in assembly languageAssembly languageAn assembly language is a low-level programming language for computers, microprocessors, microcontrollers, and other programmable devices. It implements a symbolic representation of the machine codes and other constants needed to program a given CPU architecture...
- debuggingDebuggingDebugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware, thus making it behave as expected. Debugging tends to be harder when various subsystems are tightly coupled, as changes in one may cause bugs to emerge...
can be difficult if it is not possible to run the program in a debugger due to resource constraints. Running the program in a simulated environmentComputer simulationA computer simulation, a computer model, or a computational model is a computer program, or network of computers, that attempts to simulate an abstract model of a particular system...
can be used to reduce this problem.
Systems programming is sufficiently different from application programming that programmers tend to specialize in one or the other.
In system programming, often limited programming facilities are available. The use of automatic garbage collection
Garbage collection (computer science)
In computer science, garbage collection is a form of automatic memory management. The garbage collector, or just collector, attempts to reclaim garbage, or memory occupied by objects that are no longer in use by the program...
is not common and debugging
Debugging
Debugging is a methodical process of finding and reducing the number of bugs, or defects, in a computer program or a piece of electronic hardware, thus making it behave as expected. Debugging tends to be harder when various subsystems are tightly coupled, as changes in one may cause bugs to emerge...
is sometimes hard to do. The runtime library
Runtime library
In computer programming, a runtime library is a special program library used by a compiler, to implement functions built into a programming language, during the execution of a computer program...
, if available at all, is usually far less powerful, and does less error checking. Because of those limitations, monitoring
Monitoring
To monitor or monitoring generally means to be aware of the state of a system. Below are specific examples:* to observe a situation for any changes which may occur over time, using a monitor or measuring device of some sort:...
and logging are often used; operating system
Operating system
An operating system is a set of programs that manage computer hardware resources and provide common services for application software. The operating system is the most important type of system software in a computer system...
s may have extremely elaborate logging subsystems.
Implementing certain parts in operating system and networking requires systems programming (for example implementing Paging (Virtual Memory
Virtual memory
In computing, virtual memory is a memory management technique developed for multitasking kernels. This technique virtualizes a computer architecture's various forms of computer data storage , allowing a program to be designed as though there is only one kind of memory, "virtual" memory, which...
) or a device driver
Device driver
In computing, a device driver or software driver is a computer program allowing higher-level computer programs to interact with a hardware device....
for an operating system).
History
Originally systems programmers invariably wrote in assembly languageAssembly language
An assembly language is a low-level programming language for computers, microprocessors, microcontrollers, and other programmable devices. It implements a symbolic representation of the machine codes and other constants needed to program a given CPU architecture...
. Experiments with hardware support in high-level languages in the late 1960s led to such languages as PL/S, BLISS
BLISS
BLISS is a system programming language developed at Carnegie Mellon University by W. A. Wulf, D. B. Russell, and A. N. Habermann around 1970. It was perhaps the best known systems programming language right up until C made its debut a few years later. Since then, C took off and BLISS faded into...
, BCPL
BCPL
BCPL is a procedural, imperative, and structured computer programming language designed by Martin Richards of the University of Cambridge in 1966.- Design :...
, and extended ALGOL
ALGOL
ALGOL is a family of imperative computer programming languages originally developed in the mid 1950s which greatly influenced many other languages and became the de facto way algorithms were described in textbooks and academic works for almost the next 30 years...
for Burroughs large systems. Forth also has applications as a systems language.
In the 1980s C
C (programming language)
C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system....
became ubiquitous, aided by the growth of Unix
Unix
Unix is a multitasking, multi-user computer operating system originally developed in 1969 by a group of AT&T employees at Bell Labs, including Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy, and Joe Ossanna...
.
More recently Embedded C++
Embedded C++
Embedded C++ is a dialect of the C++ programming language for embedded systems. It was defined by an industry group led by major Japanese central processing unit manufacturers, including NEC, Hitachi, Fujitsu, and Toshiba, to address the shortcomings of C++ for embedded applications...
has seen some use, for instance in the I/O Kit
I/O Kit
The I/O Kit is an open-source framework in the XNU kernel that helps developers code device drivers for Apple's Mac OS X and iOS operating systems...
drivers of Mac OS X
Mac OS X
Mac OS X is a series of Unix-based operating systems and graphical user interfaces developed, marketed, and sold by Apple Inc. Since 2002, has been included with all new Macintosh computer systems...
.
Alternate usage
For historical reasons, some organizations use the term systems programmer to describe a job function which would be more accurately termed systems administrator. This is particularly true in organizations whose computer resources have historically been dominated by mainframeMainframe computer
Mainframes are powerful computers used primarily by corporate and governmental organizations for critical applications, bulk data processing such as census, industry and consumer statistics, enterprise resource planning, and financial transaction processing.The term originally referred to the...
s, although the term is even used to describe job functions which do not involve mainframes. This usage arose because administration of IBM mainframes often involved the writing of custom assembler code which integrated with the Operating System, indeed, some IBM
IBM
International Business Machines Corporation or IBM is an American multinational technology and consulting corporation headquartered in Armonk, New York, United States. IBM manufactures and sells computer hardware and software, and it offers infrastructure, hosting and consulting services in areas...
software products had substantial code contributions from customer programming staff. This type of programming is progressively less common, but the term systems programmer is still the defacto job title for staff directly administering IBM mainframes.
See also
- Ousterhout's dichotomyOusterhout's dichotomyOusterhout's dichotomy is computer scientist John Ousterhout's claim that high-level programming languages tend to fall into two groups, each with distinct properties and uses: "system programming languages" and "scripting languages"...
- System programming languageSystem programming languageSystem programming languages are programming languages that are statically typed, allow arbitrarily complex data structures, are compiled, and are meant to operate largely independently of other programs. Prototypical system programming languages are C and Modula-2...
- Scripting languageScripting languageA scripting language, script language, or extension language is a programming language that allows control of one or more applications. "Scripts" are distinct from the core code of the application, as they are usually written in a different language and are often created or at least modified by the...
Further reading
- Systems Programming by Anowar CST