1. 内核
这是整个系统的根本基石。无用多说。
用户态程序自己所做的计算,基本都算是决定策略。
即程序要做哪些操作,每个操作要做成什么样子。
这些事情确定了之后,就可以指示内核帮我们去实施了。
一句话,用户态程序所做的几乎所有的操作(除非是比较特殊的应用),最终都通过内核代我们去完成。
当然,内核除了代用户态程序去实施一些操作外,还有别的一些事情要打理。
2. C库
这是用户态空间的基石。
用户态空间,想做任何操作,必须通过elf文件的执行来实现。
不管是什么程序,已编译的二进制程序也好,脚本程序也好,字节码程序也好,最终都是落实到一个个的elf文件在运行。
例各,一个Bourne shell脚本文件的执行,最终其实是/bin/sh进程根据shell脚本的内容,在执行着各种操作。
由此可见,用户态空间的任何操作,都是通过elf文件的执行来实现的。
elf文件又是如何实现具体的操作呢?这又得依靠系统的根本基石,即上一节所提到的内核了。
但是,elf文件并不是直接向内核提交请求,而是通过C库为中介来完成。
即elf文件调用各种各样的C库函数,来向内核提交请求,并获得执行结果。
elf文件可以以两种方式使用C库:动态库(节省空间、升级方便,但性能相对要差些)、静态库。
3. 更上层的代码
更上层的东东,涉及到的内容应该是相当丰富的。但是,在下了解的却甚少。这里就不说啦。