苏ICP备网站建设中企动力无锡,最近三天的科技新闻,线上问诊网站建设,免费的网络推广平台还记得我们在Linux启动的时候。首先会启动内核 (kernel)#xff0c;内核是一段计算机程序#xff0c;这个程序直接管理管理硬件#xff0c;包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。为了我们方便调用内核#xff0c;我们将内核… 还记得我们在Linux启动的时候。首先会启动内核 (kernel)内核是一段计算机程序这个程序直接管理管理硬件包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。 为了我们方便调用内核我们将内核的功能总结成为系统调用(system call)。系统调用看起来就像是的C语言函数你也可以在程序中直接调用。Linux系统有两百多个这样的系统调用。系统调用给了上层程序一个清晰的接口隐藏了内核的复杂结构。一个操作系统上的功能可以看作是系统调用的组合的效果而且一个操作系统不可能作出超越系统调用的动作。可以说一个系统调用函数就像是汉字的一个笔画任何一个汉字都要由基本的笔画点、横、撇等等构成而且我们不能臆造出笔画。在命令行中输入$man 2 syscalls可以查看所有的系统调用。你也可以通过$man 2 read来查看系统调用read()的说明。在这两个命令中的2都表示我们要在2类(系统调用类)中查询 (具体各个类是什么可以通过$man man看到)。 由于系统调用非常基础所以有时使用起来很麻烦。比如说一个简单的给变量分配内存空间的操作就需要动用多个系统调用。Linux定义一些库函数(library routine)来将系统调用组合成某些常用的功能以方便我们编程。比如上面的分配内存的操作看以定义成为一个库函数(像malloc()这样的函数)。再比如说在读取文件的时候系统调用要求我们设置好所需要的缓冲。我们这个时候可以使用Standard IO库中的读取函数而这个读取函数既负责设置缓冲又负责使用读取的系统调用函数。使用库函数对于机器来说并没有效率上的优势但可以把程序员从细节中解救出来。库函数就像是汉字的偏旁部首它由笔画组成但使用偏旁部首更容易组成字比如铁。当然你也完全可以不使用库函数而直接调用系统函数就像“人”字一样不用偏旁部首。(实际上一个操作系统要称得上是UNIX系统必须要拥有一些库函数比如ISO C标准库POSIX标准等。) 至于shell可以看作一种特殊的应用。实际上我们之前所说的命令行就是shell。shell是一个命令解释器(interpreter)当我们输入“ls -l”的时候它将此字符串解释为1) 在默认路径找到该文件(/bin/ls)2) 执行该文件并附带参数-l。我们之前用表示重新定向用|表示管道也是通过shell进行理解或者|的含义再通过系统调用指挥kernel建立具体的重定向或者管道机制。在没有图形界面之前shell充当了用户的界面当用户要运行某些应用的时候要通过shell输入命令以建立运行程序。shell可以执行符合shell语法的文本这样的文本叫做shell脚本(script)。我们可以在图中看到shell下通系统调用上通各种应用同时还有许多自身的便利可以使用这些条件让shell脚本可以实现非常强大的功能。UNIX的一条哲学是让每个程序尽量独立的做好一个小的功能。而shell充当了这些小功能之间的胶水让不同程序能够以一个清晰的接口(文本流)协同工作从而增强各个程序的功能。(这也是我们鼓励多用shell少用图形化界面的原因之一。) 转载于:https://blog.51cto.com/shisen/1842153