2024年6月12日发(作者:)

(19)中华人民共和国国家知识产权局

(12)发明专利说明书

(21)申请号 CN2.4

(22)申请日 2012.03.01

(71)申请人 中国科学院计算技术研究所

地址 100190 北京市海淀区中关村科学院南路6号

(72)发明人 林思明 王景飞 程学旗 张冬 周洲仪 李金明 王元卓

(74)专利代理机构 北京泛华伟业知识产权代理有限公司

代理人 王勇

(51)

G06F1/12

G06F9/52

(10)申请公布号 CN 102662428 A

(43)申请公布日 2012.09.12

权利要求说明书 说明书 幅图

(54)发明名称

一种离散事件网络模拟环境的时钟

同步方法

(57)摘要

本发明提供一种离散事件网络模拟

环境的时钟同步方法,包括:1)某一离散

事件发生时,确定离散事件发生时间所对

应的虚拟时钟滴答计数值,并将其作为目

标计数值发送给内核态程序;所述虚拟时

钟滴答计数值用于控制所有接入离散事件

网络模拟器的真实软件的定时器的运行;

2)内核态程序以1为步长逐步累加虚拟时

钟滴答计数值直至达到所述目标计数值;

每次虚拟时钟滴答计数值加1时,对于接

入离散事件网络模拟器的真实软件,判断

所述真实软件的定时器是否超时。本发明

能够避免模拟环境因与真实环境时间不一

致而造成失真。本发明中,真实软件不需

经过修改便可直接应用于离散事件网络模

拟环境中。

法律状态

法律状态公告日

法律状态信息

法律状态

权 利 要 求 说 明 书

1.一种离散事件网络模拟环境的时钟同步方法,其特征在于,包括下

1)某一离散事件发生时,确定离散事件发生时间所对应的虚拟时钟

2)内核态程序以1为步长逐步累加虚拟时钟滴答计数值直至达到所

2.根据权利要求1所述的离散事件网络模拟环境的时钟同步方法,

11)网络模拟器时钟发生跳跃后,向用户态监听程序发送更新虚拟时

12)用户态监听程序在收到更新虚拟时钟滴答的请求后,解析所要更

13)向内核态程序发送更新虚拟时钟滴答请求,该请求中携带所解析

的要更新的虚拟时钟滴答计数值。

新的虚拟时钟滴答计数值;

钟滴答的请求,该请求中携带网络模拟器当前的时钟信息;

其特征在于,所述步骤1)包括下列子步骤:

述目标计数值;其中每次虚拟时钟滴答计数值加1时,对于接入离散事件

网络模拟器的真实软件,判断所述真实软件的定时器是否超时。

滴答计数值,并将其作为目标计数值发送给内核态程序;所述虚拟时钟滴

答计数值用于控制所有接入离散事件网络模拟器的真实软件的定时器

运行;

列步骤:

3.根据权利要求2所述的离散事件网络模拟环境的时钟同步方法,

4.根据权利要求2所述的离散事件网络模拟环境的时钟同步方法,

5.根据权利要求1所述的离散事件网络模拟环境的时钟同步方法,

21)内核态程序收到更新虚拟时钟滴答请求后,更新当前虚拟时钟滴

22)虚拟时钟滴答补齐程序逐个补齐更新前和更新后的两个虚拟时钟

6.根据权利要求1所述的离散事件网络模拟环境的时钟同步方法,

滴答计数值之间的所有虚拟时钟滴答,并为每一个补齐的虚拟时钟滴答处

理定时器事件。

答值为所述目标计数值,启动虚拟时钟滴答补齐程序;

其特征在于,所述步骤2)包括下列子步骤:

其特征在于,所述步骤11)中,网络模拟器到用户态程序的命令传输采用

网络套接字、内存共享或者proc文件系统的方式实现。

其特征在于,所述步骤13)中,用户态程序到内核态程序的命令传输Netlink

原始套接字、内存共享或者proc文件系统的方式实现。

其特征在于,所述虚拟时钟滴答的创建过程包括下列步骤:

101)在Linux内核中创建记录虚拟时钟滴答的整型变量,用以模拟

系统内核中的真实时钟滴答;

102)设置虚拟时钟滴答变量的标识,使得系统能够识别独立于真实

103)设置能够对虚拟时钟滴答变量进行修改的系统调用模块。

7.根据权利要求1所述的离散事件网络模拟环境的时钟同步方法,

8.根据权利要求7所述的离散事件网络模拟环境的时钟同步方法,

401)创建两个哈希数组,第一哈希数组用于保存没有运行在模拟网

402)通过内核运行过程中的内部变量获取调用内核的进程名称,用

于区别标识该进程的运行状态;

络环境的进程号码,第二哈希数组用于保存运行在网络模拟环境的进程号

码;

时钟滴答的虚拟时钟滴答;

其特征在于,对真实软件的调用内核的进程进行标记,从而区分出哪些真

实软件是所述接入离散事件网络模拟器的真实软件。

其特征在于,对真实软件的调用内核的进程进行标记的过程包括下列步

骤:

403)判断所有运行于操作系统的进程名称,如果该进程名称符合给

404)将步骤403)中运行在模拟网络环境的进程所匹配的进程号保存

405)当一个进程退出系统时,通过哈希函数计算该进程所对应进程

定的运行于所述离散事件网络模拟器的正则表达式,表示该进程运行在模

拟网络环境中,否则表示该进程未运行在模拟网络环境中;

到第一哈希数组中,将未运行在模拟网络环境的进程所匹配的进程号保存

到第二哈希数组中;

号所在的哈希数组的位置,并则将其删除。

说 明 书

技术领域

本发明涉及网络模拟和仿真技术领域,具体地说,本发明涉及一种离

背景技术

在网络迅速膨胀的今天,网络研究人员一方面要不断思考新的网络协

议和算法,为网络发展做前瞻性的基础研究;另一方面也要研究如何利用

和整合现有网络资源,使网络达到最高效能,这两者都需要对新的网络方

案进行验证和分析。传统的实验方法成本很高,重新配置或共享资源很难,

运用起来不够灵活,试验床的规模很难做到很大,不能实现网络中的

通信流量和拓扑的融合,给网络研究带来极大的局限性。

散事件网络模拟环境的时钟同步方法。

多种

而网络模拟技术提供了一种方便、高效的验证和分析方法。基于网络

模拟技术,研究人员可以根据需要设计网络模型,用相对较少的时间和费

用了解不同条件下网络的特性,获取网络丰富有效的数据。离散事件模拟

是几种常用的网络模拟模型之一,该模型下仅在事件发生时进行状态的修

改,由事件发生的时间量确定模拟时钟的推进。NS(Network Simulator)、

OPNET、NSME等软件是现有的应用较为广泛的离散事件网络模拟器,其

模拟处理过程的速率不直接对应着实际时间,而是通过统一时钟控制和分

组包头对应的时间戳字段标志来完成的。相对于其它模拟手段,离散事件

网络模拟器具有明显的速度和效率优势,并且具有较强的扩展性,然而,

由于使用离散事件进行时间驱动,导致仿真时间与实际时间不一致,在某

些情形下模拟环境下的测试结果会与真实环境下的结果相背离。例如,当

一个真实软件向网络模拟器中的某一服务器请求建立TCP连接时,如果离

散事件模拟器的时钟推进很慢(需处理的事件较多的情况下),导致网络

模拟器中的服务器在应答该TCP连接前该真实软件的TCP连接因超时而

连接失败。但是在真实软件判定连接失败的同时,实际上网络模拟器时钟

可能只推进了很少一部分,并未到达真实软件发生超时的时刻。显然,这

种情形下,模拟环境下的测试结果是失真的。

因此,当前迫切需要一种离散事件网络模拟环境的时钟同步方法,以

避免模拟环境因与真实环境时间不一致而造成失真。

发明内容

本发明的目的是提供一种离散事件网络模拟环境的时钟同步方法,以

避免模拟环境与真实环境因时间不一致而造成失真。

为实现上述发明目的,本发明提供了一种离散事件网络模拟环境的时

钟同步方法,包括下列步骤:

1)某一离散事件发生时,确定离散事件发生时间所对应的虚拟时钟

数值,并将其作为目标计数值发送给内核态程序;所述虚拟时钟滴

值用于控制所有接入离散事件网络模拟器的真实软件的定时器的

2)内核态程序以1为步长逐步累加虚拟时钟滴答计数值直至达到所

计数值;其中每次虚拟时钟滴答计数值加1时,对于接入离散事件

拟器的真实软件,(操作系统内核)判断所述真实软件的定时器是否

如果超时则触发相应的定时器事件。

其中,所述步骤1)包括下列子步骤:

11)网络模拟器时钟发生跳跃后,向用户态监听程序发送更新虚拟时

滴答计

答计数

运行;

述目标

网络模

超时,

钟滴答

的请求,该请求中携带网络模拟器当前的时钟信息;

12)用户态监听程序在收到更新虚拟时钟滴答的请求后,解析所要更

拟时钟滴答计数值;

13)向内核态程序发送更新虚拟时钟滴答请求,该请求中携带所解析

新的虚拟时钟滴答计数值。

其中,所述步骤11)中,网络模拟器到用户态程序的命令传输采用网

字、内存共享或者proc文件系统的方式实现。

其中,所述步骤13)中,用户态程序到内核态程序的命令传输Netlink

接字、内存共享或者proc文件系统的方式实现。

其中,所述步骤2)包括下列子步骤:

21)内核态程序收到更新虚拟时钟滴答请求后,更新当前虚拟时钟滴

所述目标计数值,启动虚拟时钟滴答补齐程序;

22)虚拟时钟滴答补齐程序逐个补齐更新前和更新后的两个虚拟时钟

数值之间的所有虚拟时钟滴答,并为每一个补齐的虚拟时钟滴答处

理定时器事件。

其中,所述虚拟时钟滴答的创建过程包括下列步骤:

101)在Linux内核中创建记录虚拟时钟滴答的整型变量,用以模拟

核中的真实时钟滴答;

102)设置虚拟时钟滴答变量的标识,使得系统能够识别独立于真实

新的虚

的要更

络套接

原始套

答值为

滴答计

系统内

时钟滴

答的虚拟时钟滴答;

103)设置能够对虚拟时钟滴答变量进行修改的系统调用模块。

其中,所述的离散事件网络模拟环境的时钟同步方法还包括:对调用

内核的进程进行标记以区分该进程对应的真实软件是否运行于所述离散

事件网络模拟器中。

与现有技术相比,本发明具有下列技术效果:

1、本发明能够使离散事件网络模拟环境与真实环境的时钟同步,避

环境因与真实环境时间不一致而造成失真。

2、本发明中,真实软件不需经过修改便可直接应用于离散事件网络

境中且与离散事件网络模拟环境时钟同步。

附图说明

图1示出了基于离散事件的网络模拟器虚拟时钟示意图;

图2示出了本发明一个实施例中创建虚拟时钟滴答的流程图;

图3示出了本发明一个实施例中在离散事件网络模拟环境与真实软件

步时钟的方法流程图;

图4示出了本发明一个实施例中网络模拟器驱动内核态程序更新虚拟

答的流程图

图5示出了本发明一个实施例中内核态程序更新虚拟时钟滴答的流程

免模拟

模拟环

之间同

时钟滴

图;

图; 图6示出了本发明一个实施例中离散事件驱动虚拟时钟滴答的示意

图7为使用网络模拟器时钟驱动真实时钟实现结构示意图;

图8示出了本发明一个实施例中标识进程流程图。

具体实施方式

下面结合附图和具体实施例对本发明做进一步地描述。

根据本发明的一个实施例,提供了一种离散事件网络模拟环境的时钟

一、虚拟时钟滴答

1.1离散事件模拟

离散事件网络模拟器的时钟是由离散事件驱动的,该时钟不是连续

某一个事件发生时,网络模拟器的时钟便跳跃到该时间点,直至下

件发生为止,模拟时钟的时间保持不变。当且仅当下一个事件发生

拟器时钟直接跳跃到下一个事件的时间点,而跳跃过程不包含位于

时间点之间的时间点。

如图1所示,A区域表示真实的时间轴,B区域表示的是操作系统时

同步方法。为便于理解,以下分三个部分介绍该实施例,第一部分是虚拟

时钟滴答,第二部分是利用虚拟时钟滴答实现离散事件网络模拟环境与真

实软件之间的时钟同步,第三部分是进程的标记和识别。

的。当

一个事

时,模

这两个

钟下的

一系列的真实网络事件的发生时间,共包含五个事件,分别发生在

11s、16s、26s。在真实网络中,这五个事件会在固定的时间被执

0s、4s、

行。C

拟器的

16s、

之前,

时钟直

二个事

区域表示离散事件网络模拟器中所模拟的上述五个事件以及网络模

模拟时间变化。离散事件网络模拟器中,原来发生在0s、4s、11s、

26s的事件可能会在很短的时间内连续执行,而在执行完某一个事件

网络模拟器的时钟是不发生变化的,当下一个事件发生时,模拟器

接跳跃到下一个事件的时间点。例如,在第一个事件发生之后到第

件发生之前的整个时间段里边,网络模拟器的时钟不变,保持为0s,

1.2时钟滴答

在操作系统内核中,有一个变量记录从开机到当前时间的时间间隔,

当第二个事件发生时,网络模拟器的时钟直接跳到4s。

叫做时钟滴答。例如在Linux操作系统内核中,每10ms系统会产生一个

硬件中断,该中断将系统的时钟滴答计数值加1,并启动程序检测更新后

的时钟滴答计数值是否大于某一事件触发的时间,如果时钟滴答计数值大

于该事件触发的时间,则系统调用相关函数处理该事件。也就是说,在真

实操作系统中,真实软件中的一类事件是由时钟滴答驱动的,为方便描述,

本文中将其称为定时器事件。例如背景技术部分提到的,当一个真实

向网络模拟器中的某一服务器请求建立TCP连接时,如果该真实软

定时间内未收到应答则判定连接失败。这一事件就是一个典型

件。

软件

件在规

的定时器事

1.3时钟滴答事件驱动方法

现有技术中,操作系统内核的时钟滴答计数值加1时(即每一个时钟

生时),操作系统内核会判断真实软件的定时器是否超时,如果超

滴答发

时则触

控制。发相应的定时器事件,如此就完成了时钟滴答对软件时钟定时器的

真实操作系统中固定时间间隔的硬件中断保证了操作系统在每一个

间间隔内执行一次时钟滴答计数值加1的操作,从而保证了定时器

及时执行。

1.4虚拟时钟滴答

如前文所述,在离散事件模拟器中,其虚拟时间并不是均匀前进的,

基于现有的时钟滴答的思想,本实施例创建了一个独立于操作系统内

1.5虚拟时钟滴答的创建方法

图2示出了根据本发明一个实施例的虚拟时钟滴答的创建过程,该虚

滴答的创建过程包括下列步骤:

步骤101、在Linux内核中创建记录虚拟时钟滴答的整型变量,用以

统内核中的真实时钟滴答;

步骤102、设置虚拟时钟滴答变量的标识,使得系统能够识别独立于

固定时

事件的

相反它是在某一个离散事件发生时,直接跳跃到下一个时间点,而两个时

间点之间的间隔是不确定的,这就使得真实软件在模拟网络中运行会出现

时间不一致的问题,进而导致模拟网络的模拟结果失真。为解决上述问题,

本实施例提出虚拟时钟滴答的概念。

核时钟滴答的虚拟时钟滴答,该虚拟时钟滴答与离散事件网络模拟器中的

时钟同步,而所有接入该离散事件网络模拟器的真实软件都通过该虚拟时

钟滴答控制定时器的运行。即对于接入离散事件网络模拟器的真实软件,

当虚拟时钟滴答计数值加1时,操作系统内核判断真实软件的定时器是否

超时,如果超时则触发相应的定时器事件。

拟时钟

模拟系

真实时

钟滴答的虚拟时钟滴答;

步骤103、设置能够对虚拟时钟滴答变量进行修改的系统调用模块(系

1.6离散事件模拟器驱动虚拟时钟滴答的方法的简介

在离散事件网络模拟器的仿真网络中,离散事件的特点使得虚拟时钟

滴答不能像真实操作系统中的时钟滴答一样均匀向前推进。如此,在一个

离散事件发生的时候,可能会跳过一个或多个虚拟时钟滴答,为保证接入

该离散事件网络模拟器的真实软件行为的正常,

齐。补齐方法如下:从当前虚拟时钟滴答开始,

1,直到虚拟时钟滴答达到下一个离散事件确定

次完成加1操作之后,执行一次定时器事件检测。

进一步地介绍。

统调用模块可以用调用函数的形式实现)。

需要将跳过的时钟滴答补

使得虚拟时钟滴答每次加

的仿真网络时间;在每一

在下文中将对这一点做

二、利用虚拟时钟滴答实现离散事件网络模拟环境与真实软件之间的

根据本发明的一个实施例中,提供了一种利用虚拟时钟滴答实现离散

步骤201、某一离散事件发生时,离散事件网络模拟器时钟跳跃至该

件发生时间(即网络模拟器中虚拟时钟跳跃到所述离散事件包含的

戳)。

离散事件网络模拟器中,执行离散事件分为两个部分:其一是更新离

离散事

时间

事件网络模拟环境与真实软件之间的时钟同步的方法,参考图3,该时钟

同步的方法包括下列步骤201~203:

时钟同步

散事件网络模拟器时钟到该事件的发生时间;其二是处理该离散事件。更

新网络模拟器的时钟是非常重要的,因为整个网络模拟的过程都基于该时

钟。为了提高模拟器的效率,模拟网络使用了离散事件的方法,保证了在

一个仿真时间段中执行效率最高。更新离散事件网络模拟器时钟的具体方

法在前文的1.1部分已有介绍,此处不再赘述。

步骤202、确定离散事件发生时间所对应的虚拟时钟滴答计数值,并

为目标计数值发送给内核态程序。

为了保证虚拟时钟滴答和网络模拟器的时钟同步,离散事件发生时,

步骤203、内核态程序以1为步长逐步累加虚拟时钟滴答计数值直至

述目标计数值。每次虚拟时钟滴答计数值加1时,对于接入离散事

模拟器的真实软件,操作系统内核判断所述真实软件的定时器是否

如果超时则触发相应的定时器事件。

图4示出了网络模拟器驱动内核态程序更新虚拟时钟滴答的流程图,

4,根据本发明的一个实施例,前述步骤202包括下列子步骤:

步骤2021、网络模拟器时钟发生跳跃后,向用户态监听程序发送更新

将其作

需要在更新网络模拟器时钟的同时,将更改后的时钟同步到内核中的虚拟

时钟滴答计数器。

达到所

件网络

超时,

参考图

虚拟时钟滴答的请求,该请求中携带网络模拟器当前的时钟信息。本实施

例中,网络模拟器到用户态程序的命令传输(包

的传输)有以下几种可选方案:1、网络套接字,

文件系统等;

括更新虚拟时钟滴答请求

2、内存共享,3、proc

步骤2022、用户态监听程序在收到更新虚拟时钟滴答的请求后,解析

更新请求,根据网络模拟器当前时钟确定所要更新的虚拟时钟滴答计数值。

本实施例中,在操作系统的用户态运行着一个服务进程,该进程等待

模拟器发送的更新虚拟时钟滴答命令。接收命令之后,解析要更新的

时钟滴答计数值。网络模拟器中使用的是浮点型数据表示的时间,单

秒。而在本实施例的操作系统中,其时间度量是以时钟滴答为单位的,

一个时钟滴答为0.01秒(有的操作系统为0.001秒)。因此需要将以浮

型数据表示的网络模拟器时间转换为时钟滴答表示的整数数据,即虚

钟滴答的计数值。

网络

虚拟

位为

拟时

步骤2023、通过系统调用的方式,向内核态程序发送更新虚拟时钟滴

本实施例中,用户态程序到内核态程序的命令传输(包括更新虚拟时

请求的传输)有以下几种可选方案包括:1、Netlink原始套接字,2、

享,3)proc文件系统。

参考图5,根据本发明的一个实施例,步骤203在具体实现上包括下

骤:

步骤2031、内核态程序收到更新虚拟时钟滴答请求后,更新当前虚拟

步骤2032、虚拟时钟滴答补齐程序逐个补齐(更新前和更新后的)两

时钟滴答计数值之间的所有虚拟时钟滴答,并为每一个补齐的虚拟

答处理定时器事件。这种先更新再启动补齐程序的做法可以有效地

较运算的次数,从而提高处理效率。

个虚拟

时钟滴

减少比

时钟滴答值为目标计数值(即当前离散事件发生时间所对应的计数值),

启动虚拟时钟滴答补齐程序。

列子步

钟滴答

内存共

答请求,该请求中携带所解析的要更新的虚拟时钟滴答计数值。

根据本发明的一个实施例,每个虚拟时钟滴答处理定时器事件的方式

首先,将虚拟时钟滴答计数值加1。

为了模拟真实操作系统中的时钟滴答行为,虚拟时钟滴答也必须保证

如图6所示,第一个事件发生的时间位于第0个虚拟时钟滴答,第二

发生的时间位于第4个虚拟时钟滴答。如此,当第二个事件发生时,

拟器的时钟跳跃至第4个虚拟时钟滴答对应的时刻。于此同时,内

虚拟时钟滴答不能直接跳跃,而是分别执行第1、2、3、4四个时

才能最终完成虚拟时钟滴答的更新。

其次,如图7所示,所有接入网络模拟器的真实软件的时钟都受虚拟

答的控制。每次虚拟时钟滴答计数值加1时,对于接入网络模拟器

软件,判断在当前虚拟时钟滴答计数值下有无被触发的定时器事

时钟滴

的真实

件。如

个事件

网络模

核中的

钟滴答,

其自身的增加是连续的,所以每次对虚拟时钟滴答计数值加1,并在完成

加1操作之后对每一个虚拟时钟滴答事件进行处理。

如下:

果有,则执行该定时器事件。如此,完成每一个时钟滴答的处理。

最后,当虚拟时钟滴答计数值达到离散事件规定的时间时,更新虚拟

三、进程的标记和识别

根据本发明的一个实施例,可以在操作系统内核中识别并标记将要运

时钟滴答的过程停止。

行于网络模拟器的进程,从而为上述时钟同步方案提供必要的参数和依

据。真实软件在操作系统中运行实际上就是一个或几个进程,对于CPU

来说,是按进程进行调度的,这里说的标记进程,实际上就是操作系统对

需要运行在模拟网络环境的真实软件进行标记。

参考图8,本实施例中标记将要运行于网络模拟器的进程的方法如下:

步骤401、创建两个哈希数组,哈希数组1用于保存没有运行在模拟

境的进程号码,而哈希数组2用于保存运行在网络模拟环境的进程

如果某一个进程的号码出现在两个数组之一,即视作该进程已被标

步骤402、通过内核运行过程中的内部变量获取调用内核的进程名称,

步骤403、判断所有运行于操作系统的进程名称,如果该进程名称符

的运行于网络模拟环境状态的正则表达式,表示该进程运行在模拟

境中,否则表示该进程未运行在模拟网络环境中;

步骤404、将步骤403中运行在模拟网络环境的进程所匹配的进程号

哈希数组1中,将未运行在模拟网络环境的进程所匹配的进程号保

希数组2中,这样就记录了进程是否运行于模拟的网络环境;

步骤405、当一个进程退出系统时,通过哈希函数计算该进程所对应

所在的哈希数组的位置,并则将其删除。

在上述进程标记方法的基础上,当需要判断一个进程是否运行在模拟

用于区别标识该进程的运行状态;

网络环

号码,

记;

合给定

网络环

保存到

存到哈

进程号

网络环境时,依据哈希函数获得该进程号的哈希表位置,如果该进程号存

在于两个哈希数组的任意一个,则根据所在的哈希数组确定该进程是否运

行于模拟的网络环境。对于进程号哈希值未存在于哈希数组的进程,则依

据上述步骤402~步骤404对其进行状态标记。

本发明具有以下积极效果:

1、本发明能够实现在离散事件网络模拟环境与真实软件之间的同步

2、本发明通过内核中的虚拟时钟滴答控制真实软件的定时器事件,

时钟滴答又是通过离散事件网络模拟器进行驱动,使得真实软件可

修改的运用于离散事件网络模拟器中,能够保证真实软件的正常执

3、本发明解决了网络模拟环境与真实软件的时钟同步问题,使得离

网络模拟器中可以运行更丰富的软件和实验,拓展其功能。

最后需要说明的是,以上实施例仅用以描述本发明的技术方案而不是

时钟;

而虚拟

以不加

行;

散事件

对本技术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、

应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在

本发明的精神和教导范围内。