论文部分内容阅读
嵌入式系统的广泛应用需要良好的软件系统支撑。随着嵌入式系统的深入发展,系统的可扩展能力已经成为一个基本的需求,迫切需要一种机制能在运行状态下配置系统,也就是系统在运行状态下可以动态地添加模块,这种机制就是本论文要研究的动态加载机制。本论文中动态加载机制是应用从零开始的加载机制。这样系统只需要一个动态加载机制,就可以动态地加载模块配置适合不同应用需要的嵌入式系统。本论文分析了目前存在的几种加载方式:基于Java的动态加载方式、嵌入式Linux的动态加载方式及Windows的动态链接库原理,在此基础上提出了一般意义下的动态加载机制的原理和动态加载机制的一般过程。动态加载机制的原理要求具有动态的加载和动态的解析的能力。动态加载机制运用动态链接原理,模块只有在调用执行时才被链接入系统。动态加载分为下载、加载和卸载三个操作,下载完成从远程下载目标模块到本地,在加载操作里要完成读入模块到内存,然后对模块的未解决的外部引用进行解析(也就是符号解析和重定位)。当模块不再使用时就从内存中卸载。动态加载机制中还有很多的问题需要考虑。有些关键问题在设计动态加载机制时就必须要解决,有些问题可以在运行过程中再解决。这些关键问题有模块格式的选择、模块的组织方式、模块间通信机制、栈空间管理、名字空间管理以及符号解析和重定位。对于这些关键问题我们给出了具体的解决方案。除了这些关键问题,还有一些问题例如模块依赖、类型安全、加载中断等问题可以在运行过程中考虑或者暂时不考虑。最后针对小内存环境下的动态加载机制,我们用一个一般意义下的模拟实验来说明动态加载机制的部分要素。在该模拟实验中,我们选用了Turbo C2.0环境下产生的OBJ目标文件作了限制后作为可加载的目标模块,介绍了动态加载的体系结构,着重说明动态加载的两个要素:符号解析和重定位的实现。本论文的工作给出了一般意义下的动态加载机制的原理和过程,以及必须要解决的关键问题及解决方案,对以后动态加载机制的研究和设计都有比较重要的参考价值。