内核和驱动、内核和应用程序、内核和文件系统的关系
内核和驱动的关系:
(1)驱动属于内核的一部分
(2)驱动就是内核中的硬件设备管理模块、
(3)驱动工作在内核态
(4)驱动程序故障可能会导致整个内核崩溃
(5)驱动程序漏洞会使内核不安全
内核的应用程序的关系:
(1)应用程序不属于内核,而是在内核之上的
(2)应用程序工作在用户态,是受限制的
(3)应用程序故障不会导致内核崩溃
(4)应用程序通过内核定义的API接口来调用内核工作
总结1:应用程序是最终目标
总结2:内核就是为应用程序提供底层资源管理的服务员
内核和根文件系统的关系:
(1)根文件系统提供根目录
(2)进程1存放在根文件系统中
(3)内核启动最后会去装载根文件系统
总结:根文件系统为操作系统启动提供了很多必备的资源--根目录、进程1
linux内核的模块化设计
1.模块化设计的由来
(1)linux内核很庞大,代码量也很大,如果设计时完全设计成一体(各个文件、各个函数之间紧耦合),复杂度将会超出人所能理解的范围,所以模块化设计是一种必要。
(2)内核的模块化设计就是内核中各个功能模块在代码上是彼此独立的,例如调度系统和内存管理系统之间并没有全局变量的互相引用,甚至函数相互调用也很少,就算有也是遵循一个接口规范的。模块化设计的目的就是实现功能模块的松耦合。
2.模块化设计的体现
(1)配置时可裁剪。linux内核在编译之前可以进行配置,配置时可以选择组成内核的成千上万个模块的任何一个要或者不要,要了之后还有更多的一些细节的配置。
(2)模块化编译和安装。为了操作方便,逐渐从静态的升级变成了动态的升级(不需要重启系统,更不需要重新烧录系统),这种动态的升级也是由模块化来支持的。
(3)源码中使用条件编译。这种在uboot中很常见。
3.模块化设计的好处
(1)功能可裁剪、灵活性
(2)可扩展性(动态安装卸载、新硬件支持)
(3)利于协作
4.模块化设计是一种普遍性的系统设计原则