论文部分内容阅读
构件技术的一个目标是构件具有平台无关性。一个开发好的构件,理想情况下,应该可以在任意操作系统,软件平台上独立部署,正常运行。但是构件技术最初并不能达到这个目标。虚拟机技术的主要特点就是屏蔽系统环境,为程序的运行提供一个虚拟的环境。虚拟操作系统是虚拟机技术的一部分,它对操作系统进行抽象,在新的操作系统环境中虚拟出原来操作系统的环境。
构件互操作是指两个或者两个以上的构件,尽管它们的构件实现语言、运行环境不同,但是它们仍然可以协同工作,相互调用,完成更加复杂的功能。
论文源于上述背景,在Linux上虚拟了Elastos操作系统和DotNet运行平台,并以Elastos的CAR构件和C撑语言编写的DotNet构件为实例,实现了基于Linux的CAR构件与DotNet构件的运行平台。另外,采用Socket通信原理实现了CAR构件与DotNet构件在Linux平台上的互操作。
本文介绍了一种在Linux上加载PE文件的PE加载器,该加载器利用Linux操作系统未使用的108M(从0x0400000到0x07000000)空间加载PE格式的应用程序,利用Linux操作系统在运行时为应用程序分配的432M(从0x15000000到0x30000000)空间来加载PE格式的dll模块,从而避免了与Linux程序在空间使用上的冲突。采取mmap方式为PE文件分配内存,避免了加载应用程序后,复杂的重定位操作。该加载器采取链表的方式来管理已加载的模块和使用的内存空间,采取这种方法可以防止模块的重复加载和内存泄漏问题。为了支持C#可执行程序的运行,该加载器采取链表的方式来存储C#程序集中方法的IL或者本机代码的地址。
本文分析了CAR构件元数据和DotNet构件元数据,提出了一种构件互操作描述语言CIDL(Component Interactive Description Ianguage),并实现了CIDL描述文件的自动生成器。定义了CAR构件与C#支持的数据类型的映射关系,采用Socket通信方式,实现了CAR构件与C#编写的DotNet构件间的互操作。