写点什么

Linux 运维技术之 Linux 云计算架构

作者:学神来啦
  • 2022 年 3 月 18 日
  • 本文字数:1659 字

    阅读完需:约 5 分钟

我以下图为基础,说明 Linux 的架构(architecture)。



最内层是硬件,最外层是用户常用的应用,比如说 firefox 浏览器,evolution 查看邮件,一个计算流体模型等等。硬件是物质基础,而应用提供服务。但在两者之间,还要经过一番周折。


还记得 Linux 启动。Linux 首先启动内核 (kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括 CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。


为了方便调用内核,Linux 将内核的功能接口制作成系统调用(system call)。系统调用看起来就像 C 语言的函数。你可以在程序中直接调用。Linux 系统有两百多个这样的系统调用。用户不需要了解内核的复杂结构,就可以使用内核。系统调用是操作系统的最小功能单位。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。一个系统调用函数就像是汉字的一个笔画。任何一个汉字都要由基本的笔画(点、横、撇等等)构成。我不能臆造笔画。


在命令行中输入 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 脚本可以在寥寥数行中,实现复杂的功能。


UNIX 的一条哲学是让每个程序尽量独立的做好一个小的功能。而 shell 充当了这些小功能之间的"胶水",让不同程序能够以一个清晰的接口(文本流)协同工作,从而增强各个程序的功能。这也是 Linux 老鸟鼓励新手多用 shell,少用图形化界面的原因之一。


(shell 也有很多种,最常见的是 bash, 另外还有 sh, csh, tcsh, ksh。它们出现的年代不同,所支持的功能也有差异。)



一个 shell 对应一个终端 (terminal)。曾经来说,终端是一个硬件设备,用来输入并显示输出。如今,由于图形化界面的普及,终端往往就像上图一样,是一个图形化的窗口。你可以通过这个窗口输入或者输出文本。这个文本直接传递给 shell 进行分析解释,然后执行。


最后,我们进入一般的应用。应用是一个程序,它可以


1.直接调用系统函数 2.调用库函数 3.运行 shell 脚本


这些应用可以由多种语言开发。最常见的是 C 语言。


总结


Linux 利用内核实现软硬件的对话。


通过系统调用的这个接口,Linux 将上层的应用与下层的内核分离,隐藏了底层的复杂性,也提高了上层应用的可移植性。


库函数利用系统调用创造出模块化的功能,


Shell 则提供了一个用户界面,并让我们可以利用 shell 的语法编写脚本,以整合程序。

用户头像

学神来啦

关注

还未添加个人签名 2021.06.02 加入

10年Linux使用及管理经验,7年IT在线教育培训经验。精通Linux、Python、思科、C++、安全渗透等技术。曾任职国内知名互联网公司高级运维架构师、运维总监。对基于Linux下开源程序Openstack、Docker、K8S、DevOps、

评论

发布
暂无评论
Linux运维技术之Linux云计算架构_Linux_学神来啦_InfoQ写作平台