系统编程到底是什么?


26

我从不了解系统编程的含义。给出的通常定义是“ ...执行接近Os的操作或扩展Os的功能...”。

是否直接使用Windows API而不是使用某些库来说明文件I / O是否使其成为系统程序?正在编写Android OS系统编程吗?如果我写了一些东西会通过类似Android上的app之类的控制台公开linux内核,我是否在进行系统编程?如果我正在编写控制洗衣机的软件,是否正在编写系统程序?

我是编程的初学者,这使我无休止。请解释与“应用程序编程”的对比。


2
这个定义已经改变,系统程序员本身似乎不确定今天是否有唯一的定义。当人们争论语言X是否适合系统编程时,通常会出现此问题...
DenysSéguret2012年

@DenysSéguret-具有讽刺意味的是,如果没有人开始以什么“系统编程”达成共识。
约翰·约翰(John

Answers:


19

我个人喜欢Wikipedia定义

系统编程(或系统编程)是对系统软件进行编程的活动。与应用程序编程相比,系统编程的主要区别在于,应用程序编程旨在产生向用户提供服务的软件(例如文字处理器),而系统编程旨在产生向计算机硬件提供服务的软件(例如磁盘碎片整理程序) )。它需要更高程度的硬件意识。


12

您可以问自己几个问题,以便在决定该问题时有所作为。

  • 系统最初是否没有此程序出售?愤怒的小鸟可能是智能手机的“杀手级应用”(有人购买它的原因),但它仍然是在手机推出很久以后编写的单独的第三方应用。编写它应该是应用程序编程。但是,同一款智能手机的显示驱动程序对于完全使用它必不可少,因此它本来就是系统编程。
  • 您能想象将代码移植到另一个平台而无需大量重写吗?troff尽管TeX和TeX 几乎位于人们通常使用的工具链的底部,但它们几乎没有任何变化就可以移植到几乎任何系统,因此它们是应用程序。TeX将其输出写入到的文件系统(例如UFS或VFAT)处于临界状态。如果文件系统非常出色,则可以将其移植到其他操作系统上,但是通常人们只是接管了很棒的想法,并为自己的OS编写了自己的文件系统。那就是文件系统软件。
  • 该功能是在内核中还是在单独的二进制文件中实现的?(文件系统在这里也处于中间地位。实际上,许多文件系统的许多部分都是内核代码,但是许多部分在用户空间中具有重要的组成部分。)图形显示驱动程序原则上可以是可插拔的外部组件,但通常可以实现在内核中,或者至少具有对内核(或什至对硬件)的特权直接访问。那将是系统编程。另一方面,使用图形显示堆栈的计算机游戏是应用程序。

对于您的问题,编写Android OS绝对是系统编程。编写使用Windows API调用的程序就是应用程序编程。它不像使用跨平台库(例如SDL或OpenGL)那样具有可移植性,但原则上可以移植,它是第三方代码,并且在用户空间中运行。公开Linux内核状态的控制台应用程序是一个有趣的思想实验。我肯定会说它涉及系统编程,因为您必须了解很多有关Linux的结构(请注意,“ Linux”仅是内核,而不是发行版)才能编写,甚至可能要使用它!


4

简而言之:编写可扩展或增强OS功能的软件,例如驱动程序,对OS甚至是全新OS的系统实用程序更新。

它主要涉及内存管理;广义上的I / O操作,例如网络,文件访问和设备管理;流程管理(多任务,流程管理等);用户系统交互方法(输入和输出)和用户管理。基本上,操作系统(不是应用程序)的一部分都是系统编程。


3

一方面,直接使用Windows API是为Windows编写应用程序的一种常用方法。所以不,那不是系统编程。

系统编程不仅“接近于操作系统”,而且对计算机系统的核心功能至关重要。因此,编写OS就是系统编程。为该操作系统编写视频驱动程序,文件系统驱动程序,网络驱动程序是系统编程。为语言/芯片组的特定组合编写编译器是系统编程。


1

通常,它指的是“非技术性最终用户不知道的低级内容,或者他们不太清楚自己在使用或做什么”。

一些通常被视为系统编程的示例:

  • 操作系统和驱动程序
  • 编译器
  • 仿真器和虚拟化
  • 发行创建,即创建用户界面图像。

    通常,这通常涉及选择C标准库,初始化系统和基本用户界面组件(如外壳程序)。

系统编程通常以较低的编译级语言完成,而没有像C或汇编这样的自动垃圾回收,并且倾向于通过POSIX C接口访问不太常见的系统调用。

我保持上的教程,涵盖了多个系统编程主题一双手在这里


0

在定义这一点时,我将避开所有技术细节。然后变得容易。

应用程序允许用户使用某种技术来做一些有用的事情。因此,应用程序编程旨在直接向用户提供功能。

另一方面,系统编程将为使应用程序编程奠定基础。它向应用程序程序员而不是用户提供功能。

该定义将保持不变,但这取决于视角,上下文和角色。对于计算机程序员来说,编程工具就是应用程序。对于最终用户而言,它们只是毫无意义的。


-3

简而言之,与应用程序编程相比,系统编程是SP处理OS软件以使用硬件资源,而AP处理最终用户活动。


4
在先前的4个答案中,这似乎并没有提供实质性的要点和解释
gnat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.