Jump to content

Systems programming

From Wikipedia, the free encyclopedia

Systems programming,orsystem programming,is the activity of programming[1]computersystem software.The primary distinguishing characteristic of systems programming when compared toapplication programmingis that application programming aims to produce software which provides services to the user directly (e.g.word processor), whereas systems programming aims to produce software andsoftware platformswhich provide services to other software, are performance constrained, or both (e.g.operating systems,computational scienceapplications,game engines,industrial automation,andsoftware as a serviceapplications).[1]

Systems programming requires a great degree of hardware awareness. Its goal is to achieve efficient use of available resources, either because the software itself is performance critical or because even small efficiency improvements directly transform into significant savings of time or money.

Overview[edit]

The following attributes characterize systems programming:

  • Theprogrammercan 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 analgorithmthat is known to be efficient when used with specific hardware.
  • Usually alow-level programming languageor programming language dialect is used so that:
    • Programs can operate in resource-constrained environments
    • Programs can be efficient with littleruntimeoverhead, possibly having either a smallruntime libraryor none at all
    • Programs may use direct and "raw" control over memory access andcontrol flow
    • The programmer may write parts of the program directly inassembly language
  • Often systems programs cannot be run in adebugger.Running the program in asimulated environmentcan sometimes be used to reduce this problem.[dubiousdiscuss]

In systems programming, often limited programming facilities are available. The use ofautomatic garbage collectionis not common anddebuggingis sometimes hard to do. Theruntime library,if available at all, is usually far less powerful, and does less error checking. Because of those limitations,monitoringandloggingare often used;operating systemsmay have extremely elaborate logging subsystems.

Implementing certain parts in operating systems and networking requires systems programming, for example implementing paging (virtual memory) or adevice driverfor an operating system.

History[edit]

Originally systems programmers invariably wrote inassembly language.Experiments with hardware support inhigh level languagesin the late 1960s led to such languages asPL/S,BLISS,BCPL,and extendedALGOLforBurroughs large systems.Forthalso has applications as a systems language. In the 1970s,Cbecame widespread, aided by the growth ofUnix. More recently a subset ofC++calledEmbedded C++has seen some use, for instance it is used in the I/O Kit drivers ofmacOS.[2] Engineers working atGooglecreatedGoin 2007 to address developer productivity in largedistributed systems,with developer-focused features such asConcurrency,Garbage Collection,and faster programcompilationthan C and C++.[3] In 2015Rustcame out, a general-purpose programming language often used in systems programming. Rust was designed with memory safety in mind and to be as performant as C and C++.

Alternative meaning[edit]

For historical reasons, some organizations use the termsystems programmerto describe a job function which would be more accurately termedsystems administrator.This is particularly true in organizations whose computer resources have historically been dominated bymainframes,although the term is even used to describe job functions which do not involve mainframes. This usage arose because administration ofIBM mainframesoften involved the writing of customassembler code(IBM's Basic Assembly Language(BAL)), which integrated with theoperating systemsuch asOS/MVS,DOS/VSEorVM/CMS.Indeed, someIBMsoftware products had substantial code contributions from customer programming staff. This type of programming is progressively less common, and increasingly done in C rather than Assembly, but the termsystems programmeris still used as the de-facto job title for staff administering IBM mainframes even in cases where they do not regularly engage in systems programming activities.

See also[edit]

References[edit]

  1. ^ab"Panel: Systems Programming in 2014 and Beyond".Microsoft.Retrieved4 December2015.
  2. ^Apple Inc (14 August 2009)."I/O Kit Device Driver Design Guidelines".developer.apple.com.Apple Inc.Retrieved16 September2014.
  3. ^"Go at Google: Language Design in the Service of Software Engineering - The Go Programming Language".go.dev.Retrieved2024-04-11.

Further reading[edit]