设计解析
改进后的PMON设计架构,摒弃了将驱动程序挂载在Linux设备管理模块的传统思维,将各驱动程序挂载在自我编写的驱动管理模块上,从而避免了为适应Linux设备管理模块,而大量改写各驱动程序的工作量。
各驱动程序没有挂载在Linux设备管理模块上,并不等于失去了Linux动态管理模块的功能,各驱动程序可编译为模块,而由驱动管理模块通过request_module()和remove_module()的内核符号调用来实现驱动的动态加载和移出主存,在嵌入式系统中有效地控制了内存资源的使用。通过在内核中,驱动管理模块内实现驱动的配置、初始化,设备和驱动的一致性检查和驱动间的通信,避免了用户层空间和内核空间的反复陷入和上下文切换,提高了系统性能,这在一个支持热插拔的系统中,对于硬件反复检测的要求,尤为有效。
由于在Linux操作系统看来,只存在一个虚拟设备,因此,在文件系统中,向用户空间提供的接口必然统一,用户进程不必考虑设备和驱动的完整一致性,使用户进程的设计简单干净。驱动管理模块作为一个虚拟设备,只向Linux的中断管理模块申请一个中断号,而由新架构中的中断服务模块,负责提供接口给各驱动程序用来注册中断处理函数,并负责将中断信号分发至各处理函数。这不仅满足了各驱动程序的中断要求,也解决了Linux系统中断资源有限的问题。
新的架构的设计,将工作量主要集中到了驱动管理模块的设计上,驱动管理模块其实就是独立于Linux设备管理模块的一个简易设备管理模块,要完成以下工作:实现驱动动态加载的功能,为各驱动程序提供注册的统一接口,实现各驱动程序的配置和初始化,负责检查各设备和驱动、各设备之间和各驱动之间的合法性和一致性,负责向Linux设备管理模块注册一个虚拟设备,负责将从用户层进入虚拟设备的命令解析并分发至各驱动程序。而以上列举的驱动管理模块应完成的功能,在Nucleus中,实现各驱动程序的配置和初始化,负责检查各设备和驱动、各设备之间和各驱动之间的合法性和一致性等功能是已经完成的。
性能分析及移植结果
改进后的PMON软件在Linux中的程序设计与传统的Linux程序设计相比:
1)由于最大限度避免了用户空间陷入内核空间及内核空间返回用户空间时的上下文切换,性能显著提高。
2)底层驱动为用户空间提供了统一的驱动接口,简化了用户进程的设计。各驱动程序的移植也由于避开了为Linux设备管理接口而进行的改写,从而显著提高了开发效率。
3)中断服务模块的设计,有效地扩展了中断资源。
4)对于Linux动态加载模块功能的有效利用,有效节约了嵌入式系统中有限的内存。
在PMON项目中,应用了改进后的程序设计,以6个人月的工作量便完成了原系统软件的移植工作,且系统性能完全满足设计要求。
结语
本文提出的将PMON软件架构由Nucleus移植到Linux中的方法,即单一设备、多个模块、架构整体搬迁,有效地提高了移植的效率和移植程序的性能。对于其他将单一地址空间程序移植到多地址空间操作系统的项目,也有一定的参考价值。由PMON软件架构在MIPS架构下,从Nucleus操作系统中,移植到Linux操作系统后的结果来看,方案可行、廉价、高效。