基于Linux的Windows软件兼容层体系结构的制作方法

文档序号:6386195阅读:320来源:国知局
专利名称:基于Linux的Windows软件兼容层体系结构的制作方法
技术领域
本发明属于计算机软件技术领域,它提供一种在Linux操作系统上实现Microsoft Windows上应用程序二进制级兼容的兼容层体系结构,可以把已有的Windows应用程序移植到Linux上运行。
2.技术背景Microsoft Windows是美国Microsoft公司开发的电脑操作系统,非特殊声明,以下文中所提及的Windows,都特指Microsoft Windows操作系统。Windows在世界个人计算机操作系统领域占有垄断地位,绝大多数的应用软件是针对Windows操作系统而开发的。
Linux操作系统自1991年发展以来,以其开放源代码和较强的稳定性而日益受到IT行业的重视,用户只需很低的费用,就可以使用这一性能优越的操作系统,同时用户还可以洞悉系统内核而建立更加安全的信息体统。目前Linux操作系统在嵌入式设计和服务器领域发展很快,在电脑桌面系统也有了长足的进步。但是与Windows操作系统相比,Linux操作系统的市场占有率还不是很高,目前只有少数应用程序移植到Linux操作系统上,不利于Linux操作系统的推广和打破Windows操作系统的垄断。
要将已有的Windows应用程序移植到Linux上,传统方法有两种第一种方法重新修改编译源代码,生成基于Linux的可执行程序法。由于运行在Linux操作系统上的开发调试工具的功能和数量都很少,而且与Windows环境下的开发调试有很大的不同,加之Linux与Windows体系内部运行机理有很大的不同,源代码的重新修改调试要耗费大量的精力,在Linux平台上开发调试程序要比在Windows操作系统上困难得多,而且需要很专业的Linux程序员,开发周期较长、开发成本也很高。另外以这方法移植的应用程序与在Windows操作系统运行相比,还会出现功能丢失、用户使用不习惯的问题,不利于推广Linux,打破Windows操作系统的市场垄断。
第二种方法Wine模拟器法。Wine模拟器的实现方法是直接在Linux平台上模拟Windows API的实现,它是基于Linux环境开发的ELF格式执行程序,采用ELF格式的Win32仿真模块来模拟Windows执行环境(PE格式),在技术上面临较大的困难,直接影响了Windows程序移植后的运行速度和稳定性。Wine模拟器完全基于ELF格式,使得Wine对Linux平台有巨大的关联性,Wine本身在Linux平台上并不能实现二进制兼容。另外由于Wine模拟器是从Linux用户使用习惯的角度来实现的,通过Wine模拟器移植的应用程序无法保留Windows用户所习惯的图形界面和操作方式。
3.发明内容为了解决目前将Windows应用程序移植到Linux操作系统上运行的技术问题,本发明旨在提出一种能够在Linux上实现Windows应用程序二进制级兼容,而且主要基于Windows而不是Linux的开发环境而实现的兼容层体系结构(以下简称兼容层体系结构),可以使Windows应用程序能够在Linux上正常运行。
为了解决以上技术问题,本发明提供的技术方案是1.依据微内核思想,在Linux内核上面设计一个Windows兼容层,该兼容层模拟运行Windows程序所需的环境,向Windows程序提供其运行所需要的数据结构,系统对象,过程和服务。
2.兼容层主要由PE格式的程序模块组成,它采用基于Windows平台而不是Linux平台的开发环境如VC来开发实现。
3.兼容层需要实现的模块包括符合Windows标准的Win32仿真动态链接库,比如与USER32.DLL、KERNAL32.DLL、GDI32.DLL、NTDLL.DLL等模块相对应的一系列仿真动态链接库。
4.兼容层体系结构中,Linux内核运行在核心态,Windows应用程序和兼容层则以客户/服务器(Client/Server)模式运行在用户态,客户进程和服务进程之间通过消息机制进行通讯。兼容层通过Linux内核提供的进程调度、消息队列、图形窗口、文件管理、虚拟内存、设备驱动等基本服务,实现Windows平台上相应的服务。
使用本发明专利可以获得的有益效果是1.采用微内核结构使Windows兼容层只需要内核提供的一个很小的功能集合,这样可以使得它和Linux内核都可以获得较大的独立性,便于Windows兼容层和Linux内核的功能扩充,保证了二者的发展潜力,也最大限度的保证了Windows兼容层在Linux平台之间的兼容性。
2.采用客户/服务器(Client/Server)的实现模式使兼容层作为一个运行在用户态下的应用程序来实现,使程序的开发与调试变得高效简便,同时也使得兼容层的扩展变得更加容易。
3.基于微内核结构的Windows兼容层,使兼容层的开发不再局限于Linux特定的开发平台,可以采用Windows平台上的VC等成熟的开发工具来实现,进一步提高了兼容层本身的开发效率,同时使更多的程序员参与到开发Linux程序上来,有利于解决Linux专业人才匮乏的问题。另外,由于采用PE执行文件格式的Win32仿真模块来模拟Windows运行环境,可以从根本上保证Windows程序的运行速度和用户界面的无损移植。
4.兼容层使Windows应用程序可以直接运行在Linux平台上而不需要改动任何源代码,以更低的移植成本和更短的开发周期,获得与在Windows平台上运行时同样的功效,包括用户界面,操作习惯,运行速度和稳定性等,解决了传统方法移植成本高、周期长、产品功能丢失、性能不稳定,用户使用不习惯等问题。原来运行于Windows平台上的服务器也可以改在Linux上运行,充分享有Linux服务器的稳定性,安全性和低成本带来的好处。
4.


图1说明了本发明基于微内核思想构建的兼容层体系结构。
图2说明了本发明基于微内核思想构建的兼容层体系结构的实施方案。
图3说明了本发明关于微内核思想构建的兼容层体系结构的一个实施例。
图4说明了本发明中采用客户/服务器(Client/Server)模式模拟Windows环境的实现方案。
5.具体实施方式
图1说明了本发明基于微内核思想构建的兼容层体系结构。该图中描述了一个包括Linux内核、Windows应用程序以及使Windows应用程序能够运行在Linux上的兼容层的系统。
Linux和WINDOWS是两种依据不同设计思想建立的操作系统,Linux采用的是传统的扁平模块结构,即是由多个相互对独立又相互依存的模块组成的大内核系统,而以Windows2k和Windows XP为代表的Windows系统是则用了以微内核结构为主兼有扁平模块结构的操作系统。除体系结构不同外Linux和Windows在文件系统,内存管理,进程调度,图形用户系统等方面有各自的实现方法,因而Windows应用程序不能直接在Linux平台上运行。微内核结构是现代操作系统的发展趋势,即只在内核里保留了操作系统中最基本最本质的功能,比如中断处理,进程调度,虚拟存储等以核心态运行的系统功能,而将其余功能移到内核外用户态以服务进程形式运行,这样只要在内核的基础上依据不同的设计目标实现相应的服务进程就能构建不同的操作系统平台。依据微内核设计思想,如果以Linux系统作内核,运用Linux系统中已经实现的文件系统,进程调度,内存管理,图形用户系统等功能作为基础,建立一个WINDOWS的仿真环境,即提供一个与Windows的文件系统,进程调度,内存管理,图形用户系统等功能相一致的仿真实现,就可以在Linux平台上实现WINDOWS程序的二进制兼容。
在本发明中,兼容层以一组服务进程的形式运行在Linux内核上,包括有Win32子系统,X-Windows服务器,PE可执行文件加载器等。其中Win32子系统提供了对Windows API的仿真实现,Windows程序通过Win32子系统获取与Windows平台上同等的数据结构、系统对象、过程和服务,这些数据结构、系统对象、过程和服务是利用Linux内核的相应功能为基础,按Windows平台的标准进行映射而实现的。X-Windows是Linux自带的图形用户服务器,提供Linux平台上图形窗口、消息队列等功能,兼容层的Win32子系统充分利用X-Windows在图形用户方面的基本功能,将Linux的图形用户接口进行映射处理,获得Windows平台上的图形用户接口,从而保证了程序在移植之后图形用户界面的一致性。
PE可执行文件加载器实现将PE格式的Windows程序加载到Linux上并运行的功能,该服务进程监听来自客户的连接,当有客户发出运行Windows程序的请求时,该服务进程先创建一个代理线程接受客户的服务请求,紧接着进入监听状态准备接受其他客户请求,代理线程将PE格式的Windows程序及相关的动态连接库加载到Linux上并解决各模块之间的链接,之后启动Windows程序的执行并结束代理线程。所有兼容层系统服务进程,也包括用户的应用进程运行在内核之外的用户空间,这些用户进程之间的关系是客户/服务器的关系,它们以发送消息的方式通过内核向服务器进程提出服务请求,服务进程在处理服务请求之后也以发送消息形式通过内核把结果返回客户进程。在微内核结构之下,Win32子系统是一组相对独立服务进程,可以按应用程序的方式进行开发,因而Win32子系统可以选择不同平台的开发工具进行实现。
在本发明中,兼容层体系结构的主体部分Win32子系统采用了基于Windows平台上的开发工具如VC来实现。Win32子系统包括基本应用程序接口、用户应用程序接口、图形设备接口、上层链接库和驱动程序、Windows小内核、Linux兼容库等模块,这些模块是PE格式的可执行模块。采用PE格式而不是ELF格式的Win32子系统直接消除了PE格式模块和ELF格式模块之间进行连接的复杂性,大大提高了Windows程序在加载启动过程中的速度,同时Windows开发工具在程序开发调试效率方面是目前任何Linux开发工具所无法比拟的。包含了Win32子系统和PE可执行文件加载器的兼容层具备了运行Windows程序的基本环境,因而可以实现Windows程序在Linux平台上加载与运行。PE可执行文件加载器和Linux接口模块是采用Linux平台开发的ELF可执行模块。
图2说明了本发明以微内核思想建立的兼容层体系结构的实施方案。该图中进一步描述了实现Win32子系统及PE可执行文件加载器所采用的模块结构。
Windows应用程序在运行时需要获得系统及用户动态连接库支持,这些系统及用户动态连接库最终会调用Windows的三个应用程序接口基本应用程序接口,用户应用程序接口,图形设备接口,并通过三个接口调用Windows内核。依照Windows系统的体系结构,兼容层在Linux内核的基础上重构包括三个接口模块在内的一系列系统动态连接库。
如图2所示,图1中的Win32子系统包括了基本应用程序接口、用户应用程序接口、图形设备接口、上层链接库和驱动程序、Windows小内核、Linux兼容库等模块,其中基本应用程序接口,用户应用程序接口,图形设备接口及上层连接库等模块与Windows平台上的接口标准相一致。兼容层的Windows小内核实现了Windows内核一组最小的功能集,作为建立其他模块的基础,兼容层各模块最终通过Linux接口访问Linux内核功能。示图中的兼容层各模块均采用VC等Windows平台上的开发工具实现,而PE可执行文件加载器和Linux接口模块则采用Linux平台开发工具实现。采用该结构的兼容层体系可以充分地模拟运行Windows应用程序所需操作系统环境,从而在Linux平台上实现Windows应用程序二进制级兼容。
图3说明了本发明以微内核思想建立的兼容层体系结构的一个实施例。该图中描述了兼容层关于WIN32子系统中的基本应用程序接口、用户应用程序接口、图形设备接口、上层链接库、Windows小内核、Linux兼容库等模块的具体实施过程。Windows系统中与基本应用程序接口,用户应用程序接口,图形设备接口相对应的三个最重要的核心DLL是Kernel32,GDI32,和User32,这三个DLL建立在另一个核心DLLNTDLL之上,Windows应用程序和其他DLL会直接或间接调这四个核心DLL,兼容层必需提供包括这四个DLL在内的一系列系统DLL的仿真实现。本实施例采用Core32,GUI32,Sys32,Class32的别名建立了分别与Kernel32,GDI32,User32,和NTDLL相对应的仿真DLL。仿真DLL通过Stdlib,XDLL,GLD11访问Linux内核,其中Stdlib是基本输入输出库,由Linux的Libc实现,XDLL是图形窗口库,由Linux上的LibX实现,GLD11是OpenGL的三维图形库,由Linux上的LibGL库实现。PE可执行文件加载器CLASS在内存中建立一份Windows动态连接库与兼容层仿真动态连接库的对应表,CLASS在加载Windows应用程序时首先历遍其输入输出动态连接库表,按照动态连接库的对应表将相应兼容层仿真动态连接库加载到内存上,并进行连接。由于连接的是同样格式的PE模块,Windows应用程序的启动与运行要比采用ELF格式的模块要更快。
图4说明了本发明中采用客户/服务器(Client/Server)模式模拟Windows环境的实现方案。该图中所示的Server是兼容层用于实现Windows仿真服务的服务器,提供客户进程有关进程,线程,共享句柄,同步和其他相关资源的服务。当客户进程(Win32进程)发出服务请求时,它将所有参数打包装入一个共享主存块并用消息发送给服务进程,然后并进入阻塞状态;服务器进程工作于睡眠阻塞方式,当用户消息到来后,服务器进程被唤醒并创建一个代理线程以完成客户服务请求,紧接着重新进入睡眠阻塞方式以等待下一个请求;新创建的代理线程负责具体服务工作,对于必须由Linux内核实现的服务,代理线程将请求按Linux的规则传入Linux内核,内核接受请求并将结果返回给服务线程,服务线程再将内核返回结果转换成Windows系统所需的数据结构形式,通过消息返回给客户进程;收到返回消息的客户进程被唤醒并继续运行。
如图4中举例说明了一个Windows应用程序用OpenFile函数获取一个Windows文件句柄的实现过程,Windows应用程序在调用OpenFile时激活兼容层文件服务器Server,Server创建一个代理线程以接收服务,代理线程将文件名,路径,打开方式等参数传入Linux内核并获得一个Linux文件句柄,Server按Window文件句柄格式分配并管理一个数据结构,将其作为OpenFile的结果返回给Window应用程序,当Server接到一个对Window文件句柄进行读写操作的请求时,Server先在其管理的数据结构中找出与该句柄相对应的Linux文件句柄,再将请求传入到Linux内核中去。
权利要求
1.基于Linux的Windows软件兼容层体系结构一种在Linux操作系统上实现Microsoft Windows上应用程序二进制级兼容的兼容层体系结构,包括第一层支持Linux内核以及基于Linux内核的各种操作系统;第二层包含一个能够模拟运行Microsoft Windows应用程序所需的环境,向其提供运行所需要的数据结构、系统对象、过程和服务的“兼容层”;第三层包含各种Microsoft Windows应用程序。位于“第一层”与“第二层”之间,包含一个为第二层(兼容层)各模块提供访问第一层(Linux内核)功能的“Linux接口模块”。
2.依据权利要求1,其中“第二层包含一个能够模拟运行MicrosoftWindows应用程序所需的环境,向其提供运行所需要的数据结构、系统对象、过程和服务的兼容层”,该兼容层包括Win32子系统;X-Windows服务器;PE可执行文件加载器。
3.依据权利要求2,其中“Win32子系统”提供对Windows API的仿真实现功能,实现Windows模拟环境,使MicrosoftWindows应用程序实现在Linux平台上二进制级兼容;Microsoft Windows应用程序通过Win32子系统获取与Microsoft Windows平台上同等的数据结构、系统对象、过程和服务,这些数据结构、系统对象、过程和服务;利用Linux内核的相应功能,按照Microsoft Windows平台的标准进行映射而实现。
4.依据权利要求2,其中“Win32子系统”,包括与Microsoft Windows标准相一致的一系列仿真动态连接库,包括基本应用程序接口,用户应用程序接口,图形设备接口以及上层连接库等;为实现以上功能模块提供支持的驱动程序、Microsoft Windows小内核,Linux兼容库等模块。
5.依据权利要求2,其中“Win32子系统”采用基于Microsoft Windows开发环境,如VC等,进行开发、编译;生成基于PE格式的可执行模块。
6.依据权利要求2,其中“Win32子系统”利用“X-Windows服务器”在图形用户方面的基本功能,将Linux的图形用户接口进行映射处理,获得Windows平台上的图形用户接口,从而保证了程序在移植之后图形用户界面的一致性。
7.依据权利要求2,其中“PE可执行文件加载器”以服务器形式运行在用户态,提供将PE可执行文件加载到Linux平台上并运行的功能。
8.依据权利要求2,其中“PE可执行文件加载器”,包括以下步骤PE可执行文件加载器在内存中建立一份“Microsoft Windows系统下DLL与兼容层仿真DLL对应表”;PE可执行文件加载器运行于睡眠阻塞方式,当有用户发出运行MicrosoftWindows应用程序请求时创建一个代理线程,自身返回睡眠状态,等待下一个用户请求;PE可执行文件加载器代理线程在加载Microsoft Windows可执行文件时历遍其输入输出模块表,并将对Windows系统下的DLL的加载改用兼容层中相应的仿真DLL来替代;PE可执行文件加载器代理线程完成Windows可执行程序与兼容层中相应的仿真DLL的连接;PE可执行文件加载器代理线程结束并启动Windows程序运行。
9.依据权利要求2,其中“PE可执行文件加载器”基于Linux环境开发、编译;生成基于ELF格式的可执行程序。
10.依据权利要求1,其中“Linux接口模块”采用基于Linux环境开发、编译;生成基于ELF格式的可执行模块。
11.依据权利要求1,其中Linux内核运行在核心态,“Microsoft Windows应用程序”和“兼容层”以客户/服务器(Client/Server)模式通过消息机制进行通讯;兼容层通过Linux接口模块,利用“Linux内核”提供的进程调度、消息队列、图形窗口、文件管理、虚拟内存、设备驱动等基本服务,实现MicrosoftWindows平台上相应的服务。
12.依据权利要求11,其中“Linux内核运行在核心态,Microsoft Windows应用程序和兼容层以客户/服务器(Client/Server)模式通过消息机制进行通讯;兼容层通过Linux内核提供的进程调度、消息队列、图形窗口、文件管理、虚拟内存、设备驱动等基本服务,实现Microsoft Windows平台上相应的服务”,包括以下步骤客户进程(Win32进程)发出服务请求时,兼容层中的Server将所有参数打包装入一个共享主存块并用消息发送给服务进程,然后并进入阻塞状态;服务器进程工作于睡眠阻塞方式,当用户消息到来后,服务器进程被唤醒并创建一个代理线程以完成客户服务请求,紧接着重新进入睡眠阻塞方式以等待下一个请求;新创建的代理线程负责具体服务工作,对于必须由Linux内核实现的服务,代理线程将请求按Linux的规则传入Linux内核,内核接受请求并将结果返回给服务线程;服务线程再将内核返回结果转换成Microsoft Windows系统所需的数据结构形式,通过消息返回给客户进程。收到返回消息的客户进程被唤醒并继续运行。
全文摘要
基于Linux的Windows软件兼容层体系结构是在Linux内核上层设计一个Windows兼容层,模拟运行Windows程序所需的环境,提供该程序运行所需要的数据结构,系统对象,过程和服务。该兼容层包括基本应用程序接口、用户应用程序接口、图形设备接口、上层链接库和驱动程序、Windows小内核、Linux兼容库等模块,这些模块主要基于Windows开发环境如VC等开发编译,生成PE格式文件。兼容层可以使Windows应用程序直接运行在Linux平台上而不需要改动任何源代码,以最低的移植成本获得与在Windows平台上运行时同样的功效,包括用户界面,操作习惯,运行速度和稳定性等。
文档编号G06F9/44GK1731347SQ200410009410
公开日2006年2月8日 申请日期2004年8月6日 优先权日2004年8月6日
发明者梁肇新 申请人:梁肇新
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1