CN102455938B - 一种在mips版本的linux操作系统上运行windows应用软件的方法 - Google Patents
一种在mips版本的linux操作系统上运行windows应用软件的方法 Download PDFInfo
- Publication number
- CN102455938B CN102455938B CN 201110363681 CN201110363681A CN102455938B CN 102455938 B CN102455938 B CN 102455938B CN 201110363681 CN201110363681 CN 201110363681 CN 201110363681 A CN201110363681 A CN 201110363681A CN 102455938 B CN102455938 B CN 102455938B
- Authority
- CN
- China
- Prior art keywords
- instruction
- linux
- windows
- operating system
- mips
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法。它通过高速X86指令模拟、CPU环境管理和WINDOWSAPI环境管理等方法使得WINDOWS上的应用软件可以直接在MIPS版本的LINUX操作系统上运行,而无需WINDOWS操作系统,也无须修改WINDOWS软件的源代码。通过本发明方法编制的工具软件,使得用户在MIPS构架的计算机上可以像在X86计算机上随意使用原本只能在WINDOWS平台上运行的软件,而无需关心底层硬件平台和操作系统的差异性,从而扩大了MIPS构架的计算机对应用软件支持的范围,具有很大的实用价值。
Description
技术领域
本发明涉及操作系统技术和X86/MIPS指令集技术,具体地说涉及一种将X86程序转换成MIPS程序并在MIPS版本的LINUX操作系统上运行的方法。
背景技术
随着国家对自主可控的不断重视,国产MIPS构架的龙芯处理器得到越来越深入的推广。解决其软件支持能力的问题显得越来越重要,特别是支持WINDOWS平台上的成熟软件尤为关键。然而,WINDOWS平台上的应用软件一般都是X86指令集,使用的是WINDOWS提供的接口、机制和资源,而MIPS构架的龙芯处理器一般使用LINUX操作系统,操作系统的区别和硬件上的差异使得WINDOWS上的应用软件无法直接在LINUX平台上运行。
虽然业内有很多虚拟机软件可以在LINUX操作系统上模拟一套硬件设备来运行WINDOWS操作系统,进而运行WINDOWS软件。但是这种通过虚拟机的方式内存开销大、CPU占用率高、过于庞大、效率损耗严重,并且使用不够灵活,最关键的是还是需要一套WINDOWS操作系统在虚拟机中运行。
发明内容
本发明克服了上述现有技术的缺陷,在MIPS版本的LINUX操作系统上实现了一个WINDOWS应用程序运行环境,而无需WINDOWS操作系统和硬件虚拟。
本发明的技术方案是一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,该方法包含以下准备步骤:
在一个MIPS版本的LINUX操作系统上安装WINAPI环境模块,该WINAPI环境模块用于在该LINUX操作系统上提供WINDOWS应用软件运行时所需的与WINDOWS操作系统功能上等价的接口、机制和资源;
在该LINUX操作系统上安装X86 CPU执行环境模块,该X86 CPU执行环境模块用于在该LINUX操作系统上模拟一个真实的X86 CPU,以使得WINDOWS应用软件能够识别;
在该LINUX操作系统上安装动态指令翻译模块,该动态指令翻译模块用于在WINDOWS应用软件的源X86指令执行时,根据源X86指令具体执行的位置把源X86指令实时地翻译成功能等价的目标MIPS指令;
该方法还包含以下运行步骤:
步骤S1,启动该WINAPI环境模块,该WINAPI环境模块装载任意给定一个WINDOWS应用软件的可执行程序,搜索和装载该可执行程序所依赖的动态库,分析该可执行程序以找到该可执行程序的入口地址;
步骤S2,启动该动态指令翻译模块,该动态指令翻译模块从该可执行程序的入口地址开始将该可执行程序的源X86指令转换成MIPS指令;
步骤S3,启动该X86 CPU执行环境模块,在该X86 CPU执行环境模块所构造的虚拟的X86 CPU执行环境中执行转换后的MIPS指令,从而实现WINDOWS应用软件在MIPS版本的LINUX操作系统上的运行。
优选的,所述WINAPI环境模块提供的接口包括:文件接口,其以LINUX的文件接口为基础实现WINDOWS的文件功能;进程接口,其以LINUX的进程操作接口为基础实现WINDOWS的进程操作功能;结构化异常处理接口,其以LINUX的信号量机制为基础实现WINDOWS的SEH;安全接口,其依据现有的WINDOWS接口标准实现保护环境中的文件、内存、进程和系统对象资源,使其免受有意或无意的代码攻击;图形组件接口,其以LINUX的X11图形系统为基础实现WINDOWS的图形化操作界面。
优选的,所述X86 CPU执行环境模块包括:通用寄存器,其是通过在代码中定义变量来实现的;程序运行堆栈,其通过开辟内存空间来实现的;CPU机制,包括异常、中断和系统调用。
优选的,所述步骤S1中启动该WINAPI环境模块后还包括以下步骤:该LINUX操作系统装载WINAPI环境模块底层组件KERNEL32.DLL和NTDLL,为构造WINAPI环境提供底层接口支持;构造进程环境控制块和线程环境控制块,以便记录和跟踪进程和线程的当前状态;用WINAPI环境中的装载器加载WINDOWS的应用软件。
优选的,所述步骤S2中将源X86指令转换成MIPS指令的具体步骤是:预先将源X86指令做成一个语义解释列表,获取至少一条的源X86指令,对每一条源X86指令,从该列表中获取该条源X86指令的语义解释,再根据该条源X86指令的目的合成对应的一条或多条MIPS指令。
优选的,所述获取至少一条的源X86指令是在给定的一条源X86指令的具体执行位置前后偏移2KB字节的多条源X86指令。
本发明的有益效果是:本发明方法能使WINDOWS上的应用软件在MIPS 版本的LINUX平台上直接运行而无需WINDOWS操作系统和硬件虚拟,从而节省了成本,提高了效率和实用性。
附图说明
图1为本发明启动WINDOWS应用程序的流程图;
图2为本发明X86程序在MIPS版本的LINUX操作上的运行流程图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明并不在LINUX操作系统上再运行一个完整的WINDOWS操作系统,而只是采用一系列与WINDOWS操作系统功能上等价的接口、机制和资源(可以简称为WINAPI)以及一套虚拟的X86 CPU 执行环境。WINAPI在LINUX操作系统上实现了WINDOWS的文件、进程、图形、安全以及其他功能接口,并以共享库的方式在X86可执行文件装载时与其连接。X86 CPU执行环境则在MIPS版本的LINUX操作系统上模拟了一个真实的X86 CPU,可以称之为软CPU,X86 CPU执行环境是将硬件进行转换而形成的,比如将MIPS构架的龙芯处理器环境转换成WINDOWS软件能识别的X86 CPU执行环境。在装载了可执行文件后,本发明再将原来的X86指令一条条地转换成功能对等的MIPS指令,最终以达到让MIPS CPU直接运行X86软件(以下简称MIPS run X86)。
本发明提供一个工具软件模块和一系列的动态库模块来实现本方法所描述的功能。工具软件模块用于启动WINDOWS应用程序、转换指令。动态库用于实现挂接应用程序的WINDOWS系统调用接口。用户只需要在自己的MIPS版本的LINUX操作系统上安装本工具软件模块,并用工具软件模块启动他想运行的WINDOWS应用程序即可实现本方法所描述的功能,而无需关心操作系统和硬件的差异性。
本发明方法具体需要生成以下关键模块:
1、动态指令翻译模块:动态指令翻译是指X86指令执行时能根据指令具体执行的位置把其前后偏移X(X可配置,一般是2KB)字节的多条源X86指令实时地翻译(或转换)成功能等价的目标MIPS指令。一方面是为了保证做尽量少的翻译,以提高执行的效率;第二方面是因为有些软件在运行时要临时地生成指令(Self Modification Code or SMC),这些指令需要动态地读取并做翻译(所以“非静态”)。在指令翻译过程中,将X86指令做成一个列表,遇到一条X86指令时,从表中获取其语义解释,根据指令的目的合成对应的MIPS指令。在有完全对应的情况下,合成的是一条MIPS指令与原始X86指令对应,如果在MIPS构架上并没有完全一一对应的指令,合成的可能是多条MIPS指令在功能上与原始X86指令对应。
2、X86 CPU执行环境模块:毕竟这些指令都是X86指令,许多指令执行后产生的结果是和CPU的构架和特点紧密相关的。X86 CPU执行环境模块包括如下内容:
(1)通用寄存器,通过在C代码中定义变量来模拟寄存器,转换后的MIPS指令访问这些变量来操作X86的通用寄存器;
(2)程序运行堆栈,通过开辟内存空间,实现X86的堆栈;
(3)CPU 机制:异常、中断、系统调用,在转换指令时识别一些特别的指令来产生系统调用的代码。比如异常通常发生在转换后的MIPS指令访问某些限定的内存空间时,当异常发生时MIPS处理器向LINUX发出中断信号,在LINUX上的X86 CPU执行环境模块获取该信号后调用结构化异常处理(SEH)接口。
3、WINAPI环境模块:本方法中提到的WINAPI环境模块是在LINUX操作系统上构造的WINDOWS子系统,其中包括WINDOWS编程接口、机制和资源。要运行WINDOWS程序就需要提供这些编程接口和WINDOWS机制的模拟。本方法在LINUX操作系统结合一些开源的代码,构造了WINDOWS子系统,其编程接口涉及WINDOWS操作系统的如下几个方面的功能接口:
(1)文件接口,以LINUX的文件接口为基础实现WINDOWS的文件功能;
(2)进程接口,以LINUX的进程操作接口为基础实现WINDOWS的进程操作功能;
(3)结构化异常处理(SEH)接口,以LINUX的信号量(SIGNAL)机制为基础实现WINDOWS的SEH,让在WINAPI环境中运行的WINDOWS软件能抓取到异常信号,这里的信号量(SIGNAL)机制是指一种LINUX内核用以通知上层程序发生了某种事件的机制;
(4)安全接口,其依据现有的WINDOWS接口标准实现保护环境中的文件、内存、进程和系统对象资源,使其免受有意或无意的代码攻击;
(5)图形组件接口,以LINUX的图形系统(X11)为基础实现WINDOWS的图形化操作界面。
本方法通过上述3大模块,在LINUX操作系统上启动WINDOWS应用软件的方法流程如图1所示。图1描述了三个主要的模块在启动时要处理的任务和主要流程。WINAPI环境模块在启动完毕后装载PE可执行文件,在跳转到可执行文件之前启动动态指令翻译模块,在翻译完毕后开始跳转到X86虚拟CPU执行环境模块中开始执行转换好的MIPS指令。和常规的X86平台相比,这里就多了一个动态指令翻译环境,并且模拟了一个X86环境,常规的情况则是装载好可执行文件后立即使用一句跳转指令即可开始执行应用程序。
其中,启动该WINAPI环境模块后的具体步骤有:LINUX操作系统装载KERNEL32.DLL和NTDLL这两个关键的WINAPI环境模块底层组件,为构造WINAPI环境提供底层接口支持;构造进程环境控制块(PEB)和线程环境控制块(TEB),以便记录和跟踪进程和线程的当前状态,最后用WINAPI环境模块中的装载器加载WINDOWS的应用软件,至此,WINDOWS软件在WINAPI环境模块中的进程创立完成。
启动完毕后,那么WINDOWS应用软件(即X86 程序)在 MIPS 版本的LINUX操作上的运行流程如图2所示。
根据启动流程中建立的环境,这里描述每个步骤:
1、从WINAPI环境模块中读取原始X86指令:据启动流程,原始的WINDOWS应用程序是由WINAPI装载、分析和映射到内存的,那么动态指令翻译模块根据分析的结果从WINAPI环境中取得入口处的指令,找到程序的应该被执行的第一条指令开始翻译。
2、生成MIPS指令:指令转换时通过原始指令的语义来生成MIPS指令,并按照页大小存放到数据结构中以便查询、访问、执行和管理。MIPS指令在执行时退出一般是获取X86机制的支持,记录程序退出地址,然后判断是不是要请求WINAPI环境,是则访问操作系统功能,不是则是一段MIPS指令执行完成,需要继续翻译下一段指令。
3、获取X86机制支持:这些MIPS指令原本是X86指令,在翻译成MIPS指令后如果要产生和原来一样的运行效果则依然需要X86体系结构的支持。在翻译指令的时候,本方法是通过指令语义翻译的,那么翻译时将虚拟X86 CPU的寄存器和堆栈等写入到合成的目标MIPS指令。那么目标指令指直接在MIPS CPU上执行,也操作了虚拟的X86 CPU。
4、访问WINAPI/访问操作系统功能:根据启动流程中描述的装载时连接了依赖的WINAPI接口,那么当MIPS指令流程在执行的过程中访问这些接口的时候,程序流程则进入WINAPI模块获取LINUX操作系统上的WINDOWS子系统功能,从而实现应用程序的功能请求。本环节相当于替换了原生的WINDOWS子系统接口,而挂接到了本方法在LINUX操作系统上的实现的WINDOWS子系统。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,该方法包含以下准备步骤:
在一个MIPS版本的LINUX操作系统上安装WINAPI环境模块,该WINAPI环境模块用于在该LINUX操作系统上提供WINDOWS应用软件运行时所需的与WINDOWS操作系统功能上等价的接口、机制和资源;
在该LINUX操作系统上安装X86 CPU执行环境模块,该X86 CPU执行环境模块用于在该LINUX操作系统上模拟一个真实的X86 CPU,以使得WINDOWS应用软件能够识别;
在该LINUX操作系统上安装动态指令翻译模块,该动态指令翻译模块用于在WINDOWS应用软件的源X86指令执行时,根据源X86指令具体执行的位置把源X86指令实时地翻译成功能等价的目标MIPS指令;
该方法还包含以下运行步骤:
步骤S1,启动该WINAPI环境模块,该WINAPI环境模块装载任意给定一个WINDOWS应用软件的可执行程序,搜索和装载该可执行程序所依赖的动态库,分析该可执行程序以找到该可执行程序的入口地址;
步骤S2,启动该动态指令翻译模块,该动态指令翻译模块从该可执行程序的入口地址开始将该可执行程序的源X86指令转换成MIPS指令;
步骤S3,启动该X86 CPU执行环境模块,在该X86 CPU执行环境模块所构造的虚拟的X86 CPU执行环境中执行转换后的MIPS指令,从而实现WINDOWS应用软件在MIPS版本的LINUX操作系统上的运行。
2.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述WINAPI环境模块提供的接口包括:
文件接口,其以LINUX的文件接口为基础实现WINDOWS的文件功能;
进程接口,其以LINUX的进程操作接口为基础实现WINDOWS的进程操作功能;
结构化异常处理接口,其以LINUX的信号量机制为基础实现WINDOWS的SEH;
安全接口,其依据现有的WINDOWS接口标准实现保护环境中的文件、内存、进程和系统对象资源,使其免受有意或无意的代码攻击;
图形组件接口,其以LINUX的X11图形系统为基础实现WINDOWS的图形化操作界面。
3.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述X86 CPU执行环境模块包括:
通用寄存器,其是通过在代码中定义变量来实现的;
程序运行堆栈,其通过开辟内存空间来实现的;
CPU机制实现模块,其用于实现异常、中断和系统调用的功能。
4.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述步骤S1中启动该WINAPI环境模块后还包括以下步骤:
该LINUX操作系统装载WINAPI环境模块底层组件KERNEL32.DLL和NTDLL,为构造WINAPI环境提供底层接口支持;
构造进程环境控制块和线程环境控制块,以便记录和跟踪进程和线程的当前状态;
用WINAPI环境中的装载器加载WINDOWS的应用软件。
5.根据权利要求1中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,
所述步骤S2中将源X86指令转换成MIPS指令的具体步骤是:预先将源X86指令做成一个语义解释列表,获取至少一条的源X86指令,对每一条源X86指令,从该列表中获取该条源X86指令的语义解释,再根据该条源X86指令的目的合成对应的一条或多条MIPS指令。
6.根据权利要求5中所述的一种在MIPS版本的LINUX操作系统上运行WINDOWS应用软件的方法,其特征在于,所述获取至少一条的源X86指令是在给定的一条源X86指令的具体执行位置前后偏移2KB字节的多条源X86指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110363681 CN102455938B (zh) | 2011-11-16 | 2011-11-16 | 一种在mips版本的linux操作系统上运行windows应用软件的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110363681 CN102455938B (zh) | 2011-11-16 | 2011-11-16 | 一种在mips版本的linux操作系统上运行windows应用软件的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102455938A CN102455938A (zh) | 2012-05-16 |
CN102455938B true CN102455938B (zh) | 2013-04-24 |
Family
ID=46039150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110363681 Active CN102455938B (zh) | 2011-11-16 | 2011-11-16 | 一种在mips版本的linux操作系统上运行windows应用软件的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102455938B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103077076B (zh) * | 2013-01-06 | 2015-10-28 | 北京航空航天大学 | 在Linux上模拟实现Windows堆管理的方法 |
CN106371809B (zh) * | 2016-08-31 | 2019-03-01 | 北京奇虎科技有限公司 | 线程处理器及线程处理方法 |
CN109766129A (zh) * | 2017-11-09 | 2019-05-17 | 北京君正集成电路股份有限公司 | 指令翻译方法和装置 |
CN111045736A (zh) * | 2019-11-28 | 2020-04-21 | 厦门市威特计算机信息系统工程有限公司 | 在不同cpu和操作系统上运行异种操作系统应用软件的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6282702B1 (en) * | 1998-08-13 | 2001-08-28 | Sun Microsystems, Inc. | Method and apparatus of translating and executing native code in a virtual machine environment |
CN1731347A (zh) * | 2004-08-06 | 2006-02-08 | 梁肇新 | 基于Linux的Windows软件兼容层体系结构 |
CN102073532A (zh) * | 2010-12-29 | 2011-05-25 | 浙大网新科技股份有限公司 | 在Linux内核中实现仿Windows系统调用机制的方法 |
-
2011
- 2011-11-16 CN CN 201110363681 patent/CN102455938B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6282702B1 (en) * | 1998-08-13 | 2001-08-28 | Sun Microsystems, Inc. | Method and apparatus of translating and executing native code in a virtual machine environment |
CN1731347A (zh) * | 2004-08-06 | 2006-02-08 | 梁肇新 | 基于Linux的Windows软件兼容层体系结构 |
CN102073532A (zh) * | 2010-12-29 | 2011-05-25 | 浙大网新科技股份有限公司 | 在Linux内核中实现仿Windows系统调用机制的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102455938A (zh) | 2012-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107077337B (zh) | 用于执行根据两个指令集架构编译的应用编码的系统和方法 | |
JP7324831B2 (ja) | ディープラーニングフレームワークにおける演算子の展開方法、展開装置及び電子機器 | |
US8924922B2 (en) | Pre-compiling hosted managed code | |
US20200264846A1 (en) | Generating dynamic modular proxies | |
KR101665219B1 (ko) | 네스티드 에뮬레이션 및 동적 링킹 환경 | |
CN101322106B (zh) | 用于在可控运行时环境中进行基于硬件的动态逸出检测的方法和装置 | |
EP2788864A1 (en) | Techniques to prelink software to improve memory de-duplication in a virtual system | |
US9158562B2 (en) | Method and apparatus for supporting virtualization of loadable module | |
CN102455938B (zh) | 一种在mips版本的linux操作系统上运行windows应用软件的方法 | |
US20100306769A1 (en) | Method and an apparatus to migrate functionalities across systems | |
CN115269057B (zh) | 基于设备树的隔离系统生成配置文件的方法 | |
CN107077496B (zh) | 用于索引编译以优化索引使用的系统、方法和设备 | |
EP2802983B1 (en) | Isa bridging with callback | |
KR20140117932A (ko) | Acpi 정보를 제어하는 방법 및 이를 수행하는 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록 매체 | |
EP2883133A1 (en) | Isa bridging including support for call to overidding virtual functions | |
US11693722B2 (en) | Fast memory mapped IO support by register switch | |
US9026989B2 (en) | Object extensions using attributes to decouple base classes from derived classes | |
US20140222410A1 (en) | Hybrid emulation and kernel function processing systems and methods | |
CN101620573B (zh) | X86体系结构内存管理单元虚拟化方法 | |
CN113176926B (zh) | 一种基于虚拟机自省技术的api动态监控方法及系统 | |
CN101126988A (zh) | 一种类文件装载方法和系统 | |
Chen et al. | Design and implementation of high-level compute on Android systems | |
Dantas et al. | Towards aspect-oriented programming for context-aware systems: A comparative study | |
CN101923482B (zh) | 实现用户态代码的虚拟执行的方法和装置 | |
TWI660307B (zh) | 二元碼轉譯裝置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |