要了解Linux系统 , 就要对其系统架构有一定的了解 , 下面小编就大家带来Linux系统架构的讲解 , 有兴趣的朋友不妨来了解下 。
【什么是Linux系统架构?】 我以下图为基础 , 说明Linux的架构(architecture) 。(该图参考《Advanced Programming in Unix Environment》)
最内层是硬件 , 最外层是用户常用的应用 , 比如说firefox浏览器 , evolution查看邮件 , 一个计算流体模型等等 。硬件是物质基础 , 而应用提供服务 。但在两者之间 , 还要经过一番周折 。
还记得Linux启动 。Linux首先启动内核 (kernel) , 内核是一段计算机程序 , 这个程序直接管理管理硬件 , 包括CPU、内存空间、硬盘接口、网络接口等等 。所有的计算机操作都要通过内核传递给硬件 。
为了方便调用内核 , Linux将内核的功能接口制作成系统调用(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是一个命令解释器(interpreter) , 当我们输入“ls -l”的时候 , 它将此字符串解释为
1.在默认路径找到该文件(/bin/ls) ,
2.执行该文件 , 并附带参数“-l” 。
我之前用》表示重新定向 , 用|表示管道 , 也是通过shell解释&或者|的含义 。Shell接着通过系统调 , 用指挥内核 , 实现具体的重定向或者管道 。在没有图形界面之前 , shell充当了用户的界面 , 当用户要运行某些应用时 , 通过shell输入命令 , 来运行程序 。shell是可编程的 , 它可以执行符合shell语法的文本 。这样的文本叫做shell脚本(script) 。可以在架构图中看到 , shell下通系统调用 , 上通各种应用 , 同时还有许多自身的小工具可以使用 。Shell脚本可以在寥寥数行中 , 实现复杂的功能 。
推荐阅读
- aqm-al00是华为什么型号
- 如何练习减肥、瘦身瑜伽?在瑜伽书里是两个字
- oc105是什么手机
- 孩子问为什么要上班,父母应该如何回答
- 洗水标图案各代表什么
- 母亲总是忍不住发怒吼孩子,究竟如何控制
- 圣诞老人的鹿叫麋鹿还是驯鹿
- 如何定义成功
- 充电暖水袋里面是什么液体
- 佘山高度是多少米