APP下载

Windows 到Linux 应用迁移

2020-08-05胡莹莹谭光林

数字通信世界 2020年7期
关键词:源代码内核切片

胡莹莹,谭光林

(国家无线电监测中心,北京 100037)

0 引言

Windows 和Linux 操作系统的系统架构差异较大,应用系统开发商往往会基于某一种操作系统进行软件的开发。由于Windows 在个人桌面市场上的高占有率,目前市场上使用的应用系统大部分是在Windows 系统上开发,然而Windows 系统是美国微软公司的产品,中国无法获知其源代码,这对于开发自主可控的国产软件存在局限性。由于我国市场上正在使用的应用众多,重新开发这些应用的Linux 版本,将耗费大量的人力和物力资源,通过将现有的Windows 版本的应用迁移至Linux 系统上,是一个可行的思路。本文主要介绍应用迁移的主要技术,应用的迁移分为软件程序的迁移和数据的迁移两大部分,下面就相关技术分别作详细阐述。

1 软件程序迁移

1.1 软件虚拟机技术

虚拟机技术通过虚拟计算机的BIOS 和I/O 接口,进而通过软件方式为客户操作系统提供一个虚拟的硬件平台。即通过在现有计算机上添加一个叫做虚拟机监控(Virtual Machine Monitor, VMM)的软件从而实现对系统的虚拟化。就目前来讲,VMM 模型主要可以分为监控模型、主机模型和混合模型。监控模型就是VMM 直接运行在裸机上,而没有操作系统的参入,VMM 通过截获所有客户操作系统指令,对系统资源进行访问,从而实现对系统资源的虚拟化。在主机模型中,VMM 主要运行在主机操作系统上,这是一种有宿主的虚拟机,通过这种方式,可以使VMM 能够利用宿主操作系统所提供的设备驱动和底层服务,而不需要去除原来机器上已经安装的操作系统。但是宿主操作系统的介入可能会导致系统性能的损失。最后一种混合的模式就是VMM既可以运行在裸机上有可以运行在宿主操作系统上,从而取长补短,达到效率和性能的平衡。VMM 对截获的用户指令进行分析和转换,进而控制硬件系统,最终实现多个操作系统对硬件平台的无冲突访问。因此,利用上述的技术,以Linux 操作系统为宿主操作系统,以Windows 操作系统为客户操作系统,这样就能够在Linux 上搭建一个Window 虚拟机来运行Windows 程序。

虚拟机技术是实现应用程序跨平台的一种较为有效的方法,Linux 系统的安全性和稳定性给虚拟机和Windows系统的运行,提供了良好的条件。但是这一技术,从本质上来讲,就是在虚拟机上运行Windows 系统,进而运行Windows 程序,所以不能摆脱Windows 系统的束缚,无法满足向自主可控的Linux 平台移植应用程序的应用需求,并且虚拟机技术的产品开发成本也比较高。

尽管虚拟机技术存在这样或者那样的不足之处,但是依然在近年还是得到了很好的发展。目前有很多虚拟技术的主流产品,例如Vmware、virtualbox、virtual pc 等,都是相对比较成熟的将Windows 程序迁移至Linux 上的解决方案。

1.2 代码重构技术

代码重构技术是对代码进行二次设计,使其符合Linux 所支持的应用程序编程接口。需要将原应用程序中的代码进行修改,使得原本调用Windows 平台上的API 和DLL,现在调用Linux 上的对应函数,完成应用程序从Windows 系统到Linux 系统的迁移。将修改后的源代码在Linux 平台下编译形成Linux 下对应的可执行文件,很好地解决了Linux 和Windows 的平台差异性。

代码重构技术仅仅需要对Windows 应用的源码进行重新设计,技术上没有大的难题。但是由于是对源代码进行二次设计,所以要获取Windows 应用程序的源代码,这对于非开源的商用软件是一个很大的局限,另外由于要重写全部代码,甚至可能导致原应用程序的结构发生变化而引发一系列难题。代码重构的工作量较大,不适用于大型系统的移植。代码重构的思路相对比较简单,其应用主要在于一些小型程序、开源程序向Linux 系统上的迁移。

1.3 API 模拟方法

API 模拟技术的实质是在Linux 上提供一层Windows 程序运行所需要的API 实现。该技术将Windows 应用程序源代码调用Windows API 的,使用调用相同参数的基于Linux 的代码实现,这使得Linux API实现与Windows API 相同或相似的功能,为上层调用提供服务。原有的Windows 程序通过API 模拟层提供的接口和其提供的动态链接库一起编译运行,生成Linux 格式的可执行文件,从而进行移植。

API 模拟方法不需要修改应用程序的源代码,也不需要修改Linux 的内核。通过一种“核内差异核外补”的方法,将Windows 上的应用程序迁移到Linux 上,但由于Windows 是非开源的,应用程序调用无法完全实现和Windows 一样的功能,另外Windows 中存在一些未被文档化的函数,这些函数目前也没有实现的方法。

1.4 修改Linux 内核

兼容内核是一个二进制兼容Windows 和Linux 应用软件和设备驱动程序的计算机操作系统内核。它通过在Linux 内核的基础上利用Linux 内核构建Windows 内核功能模块,从而扩充Linux 内核的支持能力,使之同时支持Linux 和Windows 的应用程序和设备驱动。兼容内核的方法就是对Linux 的内核加以扩充,使其上能很好地运行Windows 应用程序,即实现核内差异,核内补。这种办法虽然是解决问题的根本办法,但是工作量很大,相当于将Linux 内核和Windows 内核融合到一起,从现在的开源社区和IT 企业的开发成果来看,兼容内容很难实现。

2 数据迁移

应用系统中的数据经过多年的积累,耗费了大量的人力、物力才得到当前保存的数据信息,具有极高的价值。而系统中的数据由于使用时间长,数据经过多次更新,使得数据库中的数据结构复杂,数据之间的关系错综复杂。数据库的迁移工作可能需要迁移数据的数值和数据的语义(包括约束、默认值等)。

2.1 数据迁移操作

数据库迁移操作工作主要包括两部分内容:数据的映射和矫正。数据的映射是指将源数据库中的数据和目标数据库中的数据建立映射关系,包括数据的类型和精度。在映射的过程中,由于源数据库和目标数据库的管理系统差异,两种管理系统支持的数据类型、精度、值域等并不相同,需要对源数据库中数据进行必要的修改。

数据的矫正工作,是指在数据迁移过程中对一些数据进行必要的修改。在分析源数据库的过程中,发现一些脏数据,如在日期中出现了“去年”这样的词语,需要根据上下文对“去年”进行分析,并替换成正确的数据库格式。若源数据库缺乏数据一致性的约束,而目标数据库中存在此项功能,则可能检查出部分数据的不一致性,需要对这些数据进行修改。数据的矫正工作需要从多个角度进行,将改正迁移过程中遇到的各种不合法的数据,保证迁移后的数据可以正常使用。

2.2 数据迁移的策略

数据库中的数据进行迁移时,根据一次迁移数据库数据的比例,迁移策略分为整体迁移策略、切片迁移策略和动态迭代迁移策略。

2.2.1 整体迁移

如果待迁移的源数据库系统迁移期间无需被使用,可以将数据库系统中的所有数据作为一个整体进行迁移。图1展示了数据库整体迁移的过程,从时间0开始进行数据库的迁移工作,随着时间向前推移,迁移到目标数据库中的数据量不断增加,在未来某个t,迁移到目标数据库中的数据量和源数据库中的数据量相等,迁移工作结束。整体迁移的优势在于迁移过程中,目标数据库和源数据库无需进行交互,降低了数据的迁移难度。但在停止迁移之前,无法对已迁移的数据进行测试,无法保证迁移过程中数据的正确性。

图1 数据库整体迁移

2.2.2 切片迁移

如果待迁移的数据量十分庞大,可采取切片迁移的方法进行迁移。根据数据库中的数据表进行切分,每次对数据库中的部分切片进行迁移。当部分数据迁移失败时,无须对所有的数据进行重新迁移,只需对失败的部分重新迁移即可。如图2所示。切片迁移对数据库的切分可能需要复杂的软件进行支持,迁移时也需要对迁移的数据范围进行有效性判断,确保只迁移分配的迁移切片,增加了数据迁移实现的难度。

图2 数据库切片迁移

2.2.3 动态迭代迁移

动态迭代迁移允许在数据迁移过程中,保持数据库的在线状态,允许用户对数据进行操作。动态迭代迁移的思想是在数据库迁移过程中,增加数据操作模块和辅助数据库。如图3所示。

图3 数据库动态迭代迁移

图3中,将源数据库设置为只读,用户对数据库的增删改查操作,通过数据库操作模块将所有的操作过程和相关数值记录于辅助数据库S1中。对源数据库进行数据迁移,可采用整体迁移或切片迁移的方法。

源数据库迁移完毕后,需要将迁移期间用户对数据库的操作反映在目标数据库中,因此,要将辅助数据库S1中记录的操作和数值迁移到目标数据库中。对数据库S1的迁移采取与迁移源数据库类似的方法,将数据库S1设置为只读,同时增加辅助数据库S2,用S2记录迁移期间数据库数值的改变。当S1迁移完成后,又需要迁移新的辅助数据库S2的内容到目标数据库中。由此,数据库迁移将需要迁移一系列的辅助数据库S1,S2,S3…Sn。当迁移期间数据的改变较小,则无须继续添加辅助数据库,迭代迁移完成。

迭代迁移可以保证系统在线时完成迁移,适用于一些重要的系统特别是需要24小时保持在线系统的数据迁移。但是迭代迁移增加了迁移的复杂程度, 需要为系统的迁移开发数据库操作模块,用来记录用户对数据库的操作,并存储操作的结果信息等。

3 结束语

本文介绍了应用在从Windows 向Linux 迁移的相关技术,包括应用程序的迁移、数据的迁移等。迁移技术的研究将提供更多基于Linux 操作系统的软件产品替代国内广泛使用的Windows 环境下的软件,保证系统的安全性。

猜你喜欢

源代码内核切片
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
基于TXL的源代码插桩技术研究
活化非遗文化 承启设计内核
新局势下5G网络切片技术的强化思考
5G网络切片技术增强研究
网络切片标准分析与发展现状
微软发布新Edge浏览器预览版下载换装Chrome内核
浅析5G网络切片安全
保护好自己的“源代码”