Windows进程冻结与恢复方法及其实验教学探索

2009-08-28 09:09原仓周王华锋申雪萍
计算机教育 2009年14期
关键词:进程实验教学

原仓周 王华锋 申雪萍

摘要:本文在分析进程冻结与恢复所涉及的相关知识点基础上,给出了基于WRK(Windows Research Kernel)实现Windows进程冻结与恢复的技术方案。通过将相关知识点按照相关性和难度分类,设计并实施了一种基于研究性学习法的教学方式,使学生变被动学习为主动学习,提高了综合分析能力和动手能力,取得了满意的教学效果。

关键词:WRK;进程;实验教学

中图分类号:G642 文献标识码:B

1引言

在现代操作系统中,完整的进程概念不仅表示一个运行程序,实际上包括了处理器、内存、文件、外设等程序运行时可能涉及的各种“资源”,当然也隐含了运行中的程序如何与内核“打交道”的相互调用问题。因此,围绕进程的概念展开实验内容的安排有助于学生系统了解“进程”在各实用操作系统中的具体实现方式,从抽象到具体,经过理解消化后,再转化为学生自己理解的“抽象”,最终达到系统化掌握各知识点的培养目标。

将一个系统中的进程冻结到外存,或通过网络传输到别的机器,然后在必要的时候再恢复其运行,需要涉及到除进程调度之外的几乎所有操作系统核心知识点,因此不仅适用于对“操作系统”课程的实验教学,而且可应用于进程中间状态保存、进程在分布式环境中迁移以平衡负载等实际应用,所以具有很好的教学和应用研究价值。

将业界广泛应用的实用操作系统Solaris、Linux和Windows内核应用于“操作系统”课程实验已经得到了国内诸多知名高校的认同。

由于Windows NT在最初设计时采用的就是适用于多CPU、大内存的1对1线程模型,因此,尽管Linux和Solaris都在新版本中逐步向这一模型靠近,但在模型实现方面都没有Windows清晰。

微软推出的用于教学和科研目的的WRK(Windows Research Kernel),提供了大部分内核源代码,相应配备的Windbg工具,以及配套教学资料,也为学习和研究Windows内核提供了强有力的支持。

本文基于WRK及其相关的教学材料,通过将进程冻结和恢复时需要解决的问题按内容和难度分类,设计了相关的实验模块和学习步骤,使学生通过研究性学习法完成力所能及的实验内容,变被动学习为主动学习,提高了综合分析能力和动手能力,取得了满意的教学效果。

2技术方案的设计

要将一个已有的进程冻结,可以从用户态应用程序中调用系统提供的API完成,也可通过在内核中添加自己的系统调用完成相应功能。前者依赖于系统的提供的API,功能相对受限,实验难度相对容易控制,文献[9]介绍了一种此类实现方法。我们选择了后一种方案,相对来说实现比较灵活,但对学生来说实验工作量相对较大。

2.1进程冻结涉及的内容

进程冻结时需要处理的内容可分为两大类:一类是进程/线程自身特有的程序和数据,不涉及别的进程,因此只要按一定的格式保存到外存,然后释放内存资源即可。另一类是共享资源,包括内核同步工具、共享数据等。对于这类数据,需要根据其具体作用分析如何使进程/线程与其“脱钩”。“脱钩”有两个步骤,一是恢复时共享数据/对象的状态,是直接保存到时恢复,还是到时根据具体情况创建一个新的对象然后设置成一定的状态;二是共享数据/对象的用户数减1,用户数为零时释放资源。

第一类私有数据主要用于表示进程和线程及其运行上下文,包括EPROCESS、KPROCESS、PEB、ETHREAD、KTHREAD、TEB、VAD、页表等数据结构,另外,还包括进程各线程已经运行产生的相关中间数据,如堆、栈、数据段、运行环境等。如果启用了交换功能,还要考虑进程在交换空间的数据。

第二类共享数据主要包括进程所用到的各种共享内核对象,如session、mutex、socket等,也包括共享数据,DLL映射等信息。这类信息都可通过第一类内核对象中的指针找到。

2.2保存格式与恢复运行

设计保存格式的主要目的是能够在恢复时将当初保存的数据“识别”出来。有两种办法。

第一种是没有特别的格式表示,恢复程序按照保存数据结构的顺序依次读出即可。这种方式的缺点的要求保存与恢复一一对应,只能一个写入程序对一个读出程序。在学生一个人做尝试实验时可这样完成。

对于需要由多个同学协作完成的实验,显然不能采用以上方式。为此,我们设计了借鉴文件系统的实现方式,设计了一种“通用”的记录格式。如图1所示。

其中单元总长度是整型,占4个字节,表示一个数据单元的总的长度;类型名表示本数据单元所存储数据的类型,字符串,占10个字节,它通常是结构名称,如EPROCESS、datapage(数据页)等。数据表示单元中要保存的数据,实际长度可变;数据长度也是整型,占4个字节,表示单元内数据的长度,与单元总长度构成一个校验关系,也起到隔离单元的作用。

对于结构和内核对象的恢复,只要在识别出结构和对象名称后,申请一对应结构,然后调用相应结构的restore方法即可实现恢复。

为了方便特定数据结构的恢复,针对每个类型的结构编写统一的save和restore方法。

在单个结构之上,还按照进程创建函数CreateProcess中创建各结构和对象的先后顺序,定义了一套相关数据结构创建的顺序规则,这样在保存和恢复时就确定了各单元数据中结构和对象的对应关系。

在这种情况下,对于由链表链接的多个元素,也无需特别说明,只要查看链表元素前后元素的类型,即可确定是链表节点,还是下一个元素。

3实验设计

因本实验内容涉及知识面广,且相互联系比较紧凑,因此我们将其定位为“操作系统课程设计”的一个选择。在6周左右的时间内,利用约40个小时左右的时间,完成相关系列实验。实验内容按照从易到难的顺序组织,开始时的指导材料比较齐备,使学生易于上手,产生学习兴趣后主要依靠分析和研究能力实现。具体实验内容规划如下。

(1) 为了使学生具体相应Windows内核基础,选择设计了一些较为简练的材料,提供给学生阅读。文献[10]的1、2、3、6、7章是主要阅读内容。

(2) 利用CRK、TRK提供的相关材料,指导学生完成相关实验环境的搭建,练习使用Windbg,学会编写基本的系统调用。

(3) 分析CreateProcess,学习进程创建基本过程,了解EPROCESS、KPROCESS、PEB、ETHREAD、KTHREAD、TEB、VAD、页表等数据结构。

(4) 尝试一个最基本的进程的相关私有数据结构的保存。为了克服最初的困难,恢复时可利用CreateProcess创建相关结构后,再尝试以保存的数据将相关结构和数据替换后看能否继续正确运行。

(5) 抛开CreateProcess,看恢复后能否继续运行。

(6) 在具备了以上基本技能后,可依次展开以下实验:

① 实现使用了堆的进程的保存和恢复。

② 实现使用了文件的进程的保存和恢复。

③ 实现使用了信号量的进程的保存和恢复。

④ 实现使用了共享数据的进程的保存和恢复。

⑤ 实现多线程进程的保存和恢复。

4实施方法与效果

考虑到实验的知识面广度和难度,以及Windows内核分析资料相对比较缺乏的实际情况,为便于讨论和研究,采用了团队的实验形式。

每个团队3~5人,除基础实验环境要求每个人都必要熟悉外,关于最简单进程的保存和存储采用了分块的形式。比如,4人的小组可一人负责进程中间数据的保存与恢复,一人负责分析DLL机制并实现其描述方法,一人负责PEB相关内核对象的分析与实现,一人负责TEB中相关内核对象的分析与实现。

在学习方法方面,对于入门级的内容,借用CRK、TRK以及自己整理的相关文档,提供详细的指导材料,而对于入门之后的内容,则主要采用研究性学习法,只提供实验的目标及简单的分析思路,具体解决方案则需要学生通过理解理论课上的内容加上对WRK相关源代码的分析来自己寻找答案。对于学习中的问题和困难,每周固定2~3个小时可与任课教师或助教进行讨论。

在项目进行过程中,允许学生根据自身的条件选择其他实验,以避免由于难度等问题产生的抵触情绪。减员多的小组可考虑并组。

实施结果表明,本实验的内容和实施方式在调动学习兴趣,提高学习主动性方面效果明显。一些在其他课程学习中表现一般的同学,在本实验学习中表现优秀。对于选择了本实验并坚持完成了的同学,在期末笔试中成绩几乎全部为优秀。

实施过程中,也有些同学反映分析工作量太大,精力不够从而要求调换为其他实验内容。针对这种情况,需要考虑如何通过提供书面或课堂的指导,适当降低分析研究的工作量,以使实验适应尽量多学生的能力。

5结束语

WRK的出现,使得我们有机会将Windows NT的典型1对1线程模型以实验的方式应用到对进程概念的理解上来。本文基于这一思想在WRK上设计并实施了一套进程的保存和恢复实验。

该实验采用研究性学习的方式克服实用操作系统知识点繁杂的困难,采用分层的方式解决实验难度较大的问题。实际实施过程表明本实验达到了满意的效果。

参考文献:

[1] 邱毓兰,刘智满,王卓立,等. Linux操作系统环境中的进程迁移算法研究[J]. 武汉大学学报:自然科学版,1999,45(03): 276-278.

[2] 肖红,邱毓兰,彭德纯. 分布式计算系统中进程迁移的方法[J]. 软件学报,1994,5(2):29-36.

[3] 陈向群. 探索操作系统实践教学[J].计算机教育,2008(17):45-47.

[4] 罗宇,张颖蓓,叶常春. 本科操作系统课程设置及教学体会[J]. 计算机教育,2006(1):39-40.

[5] 宋广华,李善平,郑扣根. 边学边干:操作系统课程教学改革的探索与实践[J]. 计算机教育,2006(7):27-29.

[6] 娄久,李秀坤,李治军. 操作系统实验课教学内容与模式探讨[J]. 计算机教育,2007(2):45-47.

[7] Abraham Silberschatz,Peter Baer Galvin,Greg Gagne. 操作系统概念(影印版)[M]. 6版. 北京:高等教育出版社,2005: 133-145.

[8] 彭敏,何炎祥. 基于WRK的Windows操作系统原理实验教学探索[J]. 计算机教育,2008(20):38-40.

[9] Hengming Zou. Windows Curriculum at SJTU[C]. Asia Pacific Windows Core Workshop. Beijing,China. March,2009.

[10] Mark Russinovich,David Solomon. Microsoft Windows Internals [M]. Microsoft Press. 2005.

[11] 王春梅,陈庆燕. 研究性学习法在操作系统实验教学中的应用[J]. 福建电脑,2008(06):207,191.

猜你喜欢
进程实验教学
LabVIEW下的模拟电路实验教学创新对策
基于科学探究的高中生物实验教学探索
网络与云技术在实验教学中的应用
多核一个都不落CPU极限这样用
Dalvik虚拟机进程模型研究
复变函数级数展开的可视化实验教学
复变函数级数展开的可视化实验教学
快速杀掉顽固进程
不留死角 全方位监控系统
谁在后台偷偷搞“串联”