首页 理论教育深入探究Linux内核核心需求

深入探究Linux内核核心需求

【摘要】:内核核心功能应该能满足最小系统的需求。最小系统中最核心的硬件是CPU和RAM,在系统执行期间这两个硬件是必需的。所以这两部分的管理可以说是Linux内核的重中之重,对性能等各方面的影响也是最大的。可见Linux内核在目录编排上也是有比较多的讲究的,这在后续讨论设备驱动时会有更多介绍。由于DMA在硬件中的广泛使用,内核同样需要在核心部分提供该功能。可见Linux内核核心功能需求也是逐渐发展来满足内核和驱动开发需要的。

谈到内核核心需求,先回忆一下最小系统。最小系统包括主处理器(可以理解为CPU)、内存(RAM)、外部存储设备(最小系统中是NAND Flash)、电源管理芯片以及时钟晶振。内核核心功能应该能满足最小系统的需求。从最小系统的硬件出发,考虑内核应该满足的功能,包括程序管理功能、内存管理功能和存储管理功能,当然也对应到这些功能的各个层次的实现(在Linux内核层次分析中做过讨论)。另外针对时钟晶振的硬件,内核还应该提供时间管理定时器管理相应的功能。

最小系统中最核心的硬件是CPU和RAM,在系统执行期间这两个硬件是必需的。所以这两部分的管理可以说是Linux内核的重中之重,对性能等各方面的影响也是最大的。对这两部分的性能需求非常苛刻,这也就是这两部分在Linux内核中,直到今天还在不断改进的原因(相关改进如将中断处理分成前半部和后半部,抢占式调度,调度算法演变为O(1)算法,采用CFS调度器或Deadline调度器等新式调度器,内存管理支持大容量内存,大内存页等等)。可以预见未来这两部分功能仍然是改进的重点,但是改进的方向应该在SMP和多核并行运算,以及锁的效率上。效率至上在这两部分中体现特别明显,只要性能有提升,哪怕是面目全非的完全重写,也是必须做的。图3-8中展示了Linux内核这两部分可供各个模块使用的功能,从中会看到很多熟悉的函数,后面会进行比较全面的介绍。

从图3-8中可见,体系结构无关的代码主要是在kernel以及mm两个目录中,而与体系结构相关的代码则在arch/xxx/和arch/xxx/mm下。可见Linux内核在目录编排上也是有比较多的讲究的,这在后续讨论设备驱动时会有更多介绍。(www.chuimin.cn)

在图3-8中的memory硬件中除了RAM还有DMA和MMU。通常MMU和RAM一起实现内存管理,而DMA作为底层的一个横切功能,可以作为基础库提供给不同的设备驱动使用。由于DMA在硬件中的广泛使用,内核同样需要在核心部分提供该功能。另外和硬件相关的底层横切功能还包括clock、GPIO和引脚管理等功能。随着Linux的内核发展这些底层的横切功能已经逐渐脱离具体的体系结构形成抽象库,以供Linux内核和设备驱动使用。可见Linux内核核心功能需求也是逐渐发展来满足内核和驱动开发需要的。