进程异常监控方法和装置、计算设备和可读存储介质转让专利

申请号 : CN202211037349.3

文献号 : CN115114120B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡本昌

申请人 : 统信软件技术有限公司

摘要 :

本发明公开了一种进程异常监控方法和装置、计算设备和可读存储介质,涉及进程异常处理技术领域,可以解决目前难以高效监控系统异常的技术问题。进程异常监控方法包括:创建异常监控程序与转接服务程序之间的连接;将该连接注册成为监视器;通过所述连接,读取来自转接服务程序的方法调用消息,并将方法调用消息保存在内存中;在接收到来自转接服务程序的错误消息时,从内存中读取与错误消息对应的方法调用消息;解析所述错误消息和与所述错误消息对应的方法调用消息,得到关于异常的详细信息。根据本发明技术方案,能够充分、高时效性地、高准确性地且低开销地发现异常,能够高效率地对系统异常进行监控。

权利要求 :

1.一种进程异常监控方法,包括:

创建异常监控程序与转接服务程序之间的连接;

将所述连接注册成为监视器;

通过所述连接,读取来自所述转接服务程序的方法调用消息,并将所述方法调用消息保存在内存中;

在接收到来自转接服务程序的错误消息时,从内存中读取与所述错误消息对应的方法调用消息;

解析所述错误消息和与所述错误消息对应的方法调用消息,得到关于异常的详细信息。

2.如权利要求1所述的进程异常监控方法,还包括:在内存中分配一个固定大小的缓存,该缓存包含能够保存预定数目个消息的位置;

所述通过所述连接,读取来自所述转接服务程序的方法调用消息,并将所述方法调用消息保存在内存中,包括:使用从所述转接服务程序新接收的消息的序列号除以所述预定数目并取余,得到余数值;

判断消息是否为方法调用消息;

如果消息是方法调用消息,判断余数值指代的位置是否为空;

如果余数值指代的位置为空,将所述方法调用消息保存在由所述余数值指代的位置中;

如果消息是返回消息,删除由所述余数值指代的位置中原有的方法调用消息。

3.如权利要求2所述的进程异常监控方法,其中,如果余数值指代的位置不为空,则删除余数值指代的位置中原有的方法调用消息,并打印超时错误;将从所述转接服务程序新接收的消息保存到余数值指代的位置中。

4.如权利要求1‑3中任一项所述的进程异常监控方法,其中,所述关于异常的详细信息包括:调用方和被调用方的进程号、要调用的接口名、要调用的服务名、要调用的方法和参数值,以及被调用方返回的详细错误信息。

5.如权利要求1所述的进程异常监控方法,其中所述转接服务程序是D‑bus服务。

6.一种进程异常监控装置,包括:

创建模块,用于创建异常监控程序与转接服务程序之间的连接;

注册模块,用于将所述连接注册成为监视器;

接收模块,用于通过所述连接,读取来自所述转接服务程序的方法调用消息,并将所述方法调用消息保存在内存中;

读取模块,用于在接收到来自所述转接服务程序的错误消息时,从内存中读取与所述错误消息对应的方法调用消息;

解析模块,用于解析所述错误消息和与所述错误消息对应的方法调用消息,得到关于异常的详细信息。

7.如权利要求6所述的进程异常监控装置,还包括内存分配模块,用于在内存中分配一个固定大小的缓存,该缓存包含能够保存预定数目个消息的位置;

接收模块包括:

取余子模块,用于当从所述转接服务程序新接收到一个消息时,使用该消息的序列号除以预定数目并取余,得到余数值;

第一判断子模块,用于判断该消息是否为方法调用消息;

第二判断子模块,用于如果该消息是方法调用消息,判断余数值指代的位置是否为空;

保存子模块,用于如果余数值指代的位置为空,则将该方法调用消息保存在余数值指代的位置中;

删除子模块,用于如果该消息是返回消息,则删除余数值指代的位置中原有的方法调用消息。

8.如权利要求7所述的进程异常监控装置,接收模块还包括:打印子模块,用于如果判断为余数值指代的位置不为空,删除余数值指代的位置中原有的方法调用消息,并打印超时错误;

重新保存子模块,用于将从所述转接服务程序新接收的消息保存到余数值指代的位置中。

9.一种计算设备,包括:

至少一个处理器和存储有程序指令的存储器;

当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如权利要求1‑5中任一项所述的进程异常监控方法。

10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1‑5中任一项所述的进程异常监控方法。

说明书 :

进程异常监控方法和装置、计算设备和可读存储介质

技术领域

[0001] 本发明涉及进程异常处理技术领域,尤其涉及一种进程异常监控方法和装置、计算设备和可读存储介质。

背景技术

[0002] 操作系统上时时刻刻运行着众多进程,这些进程随时随地都可能产生异常。对异常进行监控,能够快速发现异常、定位错误,并解决问题。因此高效的异常监控手段十分重要。
[0003] 目前监控异常的技术手段主要包括:1、通过操作系统上专门的目录存放日志,比如对于linux操作系统,通过路径为/var/log的目录,存放记录的日志。可以通过对日志进行分析来发现异常。2、自动开启DEBUG模式,以保障能够充分记录日志,并定时或定量地对旧日志进行压缩和清理,且能够自动根据一些明确的错误信息提出警告。第二种手段可被视为对第一种手段进行的改进。
[0004] 这两种技术有各自的缺点。第一种技术手段的缺点包括:只能在事后对日志进行人工分析,时效性差;为了降低系统开销,大部分进程在运行时会关闭一部分日志输出,需要开启DEBUG模式才会输出全部的日志,因此在/var/log中记录的日志并不充分,不利于后续分析定位;在/var/log中记录的日志会长期持久化保存,因此在系统运行了很长时间之后,该目录的数据会变得庞大,甚至达到几十GB——这样不仅会导致磁盘占用较大,传输变得困难,而且对日志信息极难进行定位;在/var/log中记录的日志,大部分都缺少时间信息,因此很难辨识发生问题时所涉及的日志所处位置;在/var/log中记录的日志是不区分类型和严重性的,大部分日志都是进程正常运行的打印,这样极少数的异常日志就被淹没在海量的正常日志中,难以被寻觅到。
[0005] 第二种技术手段的缺点主要包括:通过该方案执行异常监控,在大部分情况下仍然只能在事后对日志进行人工分析,时效性比较差;开启DEBUG模式会降低程序性能,提高系统开销,并进一步增大数据量,因此导致在清除旧日志之前,仍然需要消耗较大的存储空间,然而在清除旧日志之后,会导致日志缺失;此外,仍然存在如下核心缺陷:极少数的错误日志被淹没在海量的正常日志中,难以被寻觅到。

发明内容

[0006] 为此,本发明提供了一种进程异常监控方法和装置、计算设备和可读存储介质,以力图解决或者至少缓解上面存在的至少一个问题。
[0007] 根据本发明的第一方面,提供了一种进程异常监控方法,包括:创建异常监控程序与转接服务程序之间的连接;将所述连接注册成为监视器;通过所述连接,读取来自所述转接服务程序的方法调用消息,并将所述方法调用消息保存在内存中;在接收到来自转接服务程序的错误消息时,从内存中读取与所述错误消息对应的方法调用消息;解析所述错误消息和与错误消息对应的方法调用消息,得到关于异常的详细信息。
[0008] 可选地,根据本发明的进程异常监控方法还包括:在内存中分配一个固定大小的缓存,该缓存包含能够保存预定数目个消息的位置;通过所述连接,读取来自所述转接服务程序的方法调用消息,并将所述方法调用消息保存在内存中,包括:使用从转接服务程序新接收的消息的序列号除以所述预定数目并取余,得到余数值;判断消息是否为方法调用消息;如果消息是方法调用消息,判断余数值指代的位置是否为空;如果余数值指代的位置为空,将所述方法调用消息保存在由所述余数值指代的位置中;如果消息是返回消息,删除由所述余数值指代的位置中原有的方法调用消息。
[0009] 可选地,在根据本发明的进程异常监控方法中,如果余数值指代的位置不为空,则删除余数值指代的位置中的原方法调用消息,并打印超时错误;将从转接服务程序新接收的消息保存到余数值指代的位置中。
[0010] 可选地,在根据本发明的进程异常监控方法中,所述关于异常的详细信息包括:调用方和被调用方的进程号、要调用的接口名、要调用的服务名、要调用的方法和参数值,以及被调用方返回的详细错误信息。
[0011] 可选地,在根据本发明的进程异常监控方法中,所述转接服务程序是D‑bus服务。
[0012] 根据本发明第二方面,提供一种进程异常监控装置,包括:创建模块,用于创建异常监控程序与转接服务程序之间的连接;注册模块,用于将所述连接注册成为监视器;接收模块,用于通过所述连接,读取来自所述转接服务程序的方法调用消息,并将所述方法调用消息保存在内存中;读取模块,用于在接收到来自所述转接服务程序的错误消息时,从内存中读取与所述错误消息对应的方法调用消息;解析模块,用于解析所述错误消息和与所述错误消息对应的方法调用消息,得到关于异常的详细信息。
[0013] 可选地,根据本发明的进程异常监控装置还包括内存分配模块,用于在内存中分配一个固定大小的缓存,该缓存包含能够保存预定数目个消息的位置;接收模块包括:取余子模块,用于当从转接服务程序新接收到一个消息时,使用该消息的序列号除以预定数目并取余,得到余数值;第一判断子模块,用于判断该消息是否为方法调用消息;第二判断子模块,用于如果该消息是方法调用消息,判断余数值指代的位置是否为空;保存子模块,用于如果余数值指代的位置为空,则将该方法调用消息保存在余数值指代的位置中;删除子模块,用于如果该消息是返回消息,则删除余数值指代的位置中原有的方法调用消息。
[0014] 可选地,在根据本发明的进程异常监控装置中,接收模块还包括:打印子模块,用于如果判断为余数值指代的位置不为空,删除余数值指代的位置中的原方法调用消息,并打印超时错误;重新保存子模块,用于将从转接服务程序新接收的消息保存到余数值指代的位置中。
[0015] 根据本发明的第三方面,提供一种计算设备,包括:至少一个处理器和存储有程序指令的存储器;当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如上所述的进程异常监控方法。
[0016] 根据本发明的第四方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述的进程异常监控方法。
[0017] 根据本发明技术方案,能够充分、高时效性地、高准确性地且低开销地发现异常,能够高效率地对系统异常进行监控。

附图说明

[0018] 为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
[0019] 图1示出根据本发明实施方式的进程异常监控方法的示意性流程图;
[0020] 图2示出通过根据本发明实施方式的进程异常监控方法得到的解析结果;
[0021] 图3示出异常发生的过程的示意性流程图;
[0022] 图4示出根据本发明实施方式的进程异常监控装置的示意性结构框图;
[0023] 图5示出了根据本发明一个实施方式的计算设备的示意图。

具体实施方式

[0024] 下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开,且本公开不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0025] 根据本发明实施方式,提供一种进程异常监控方法。图1示出根据本发明实施方式的进程异常监控方法的示意性流程图。如图1所示,该方法包括步骤110‑150。下面详细描述各步骤的执行过程。
[0026] 在步骤110中,创建异常监控程序与转接服务程序之间的连接。
[0027] 其中,转接服务程序是系统核心服务,用于负责进程之间的交互,比如可以是D‑bus服务。下面以D‑bus服务为例描述该转接服务程序的主要功能。在操作系统上,不同的进程之间需要互相调用,D‑bus服务用作中间服务提供方,用于转发调用信息,其中服务提供方、调用方都与D‑bus服务连接。调用方告诉D‑bus服务其需要调用某提供方的方法,这个过程会产生方法调用消息,即method_call。D‑bus服务通过与提供方的连接调用提供方的接口,这个过程会产生返回消息(return)——其指示方法调用成功,或错误消息(error)——其指示方法调用失败。
[0028] 在该步骤中,“连接”指的是两个进程之间的连接,其中“异常监控程序”执行根据本发明实施方式的进程异常监控方法。
[0029] 在步骤120中,将异常监控程序与转接服务程序之间的连接注册成为监视器。
[0030] 通常情况下,D‑bus服务仅向进程发送与其有关的消息。比如A进程提供了接口A’,B进程调用了该接口A’,D‑bus服务会将该调用消息发送给A进程,并将A进程返回的结果发送给B进程。如果B进程调用了C进程的接口,该调用消息是不会被发送给A进程的。因此,需要将D‑bus服务与根据本发明实施方式的异常记录方法的执行程序连接起来,并将该连接注册成为监视器。这样根据本发明实施方式的进程异常监控方法将会监控D‑bus服务执行的所有操作的整个流程。D‑bus服务会通过该连接,把调用方调用的消息、提供方返回的消息 都 发 送 给 根 据 本 发 明 实 施 方式 的 进 程 异 常 监 控 方 法 。可以 调 用 org.freedesktop.DBus.Monitoring 接口下的 BecomeMonitor 方法将上述连接注册成为监视器。
[0031] 在步骤130中,通过上述连接,读取来自转接服务程序的方法调用消息,并将方法调用消息保存在内存中。
[0032] 缓存方法调用消息,是为了在出现错误消息时,能够通过读取并解析方法调用消息得知关于异常的完整信息,如后面的步骤所述。
[0033] 在步骤140中,在接收到来自转接服务程序的错误消息时,从内存中读取与错误消息对应的方法调用消息。
[0034] 在实践中,方法调用消息的消息类型字段都包含名为序列号(serial)的值,这个值是根据消息个数逐一递增的。在每个消息上,这个值都是唯一的,用于标识消息。错误消息的消息类型字段包含名为应答序列号(reply_serial)的值,用于标识该消息是响应于哪一个方法调用消息。因此,根据本发明实施方式的方法可以通过以下方式缓存和查找方法调用消息:在保存方法调用消息时,使用序列号(serial)作为索引保存该消息;收到错误消息时,通过应答序列号查找对应的方法调用消息。
[0035] 如上所述,除了方法调用消息(method_call)和错误消息(error)之外,进程之间的调用还会产生返回消息(return)。转接服务程序(比如D‑bus服务)会将这些消息都发送给根据本发明实施方式的进程异常监控方法。返回消息用于表示调用方的调用成功,错误消息用于表示调用方的调用出现错误。进程异常监控方法读取这些消息,并将方法调用消息保存在内存中,不保存返回消息和错误消息。当接收到返回消息时,可以通过应答序列号查找对应的方法调用消息,并从缓存中删除该方法调用消息,以节省空间。
[0036] 在步骤150中,解析上述错误消息和上述方法调用消息,得到关于异常的详细信息。
[0037] 解析方法调用消息,可以得到关于调用的详细信息,如方法名和参数值等,其中参数值指的是调用方使用的参数,比如在调亮度方法提供的参数范围中,调用方使用的参数值。其中,在方法名和参数值使用迭代器存储的情况下,会存在有结构体和数组等嵌套类型,在解析时可以采用递归解析。
[0038] 解析方法调 用消息 ,还可以 得到进程号 ,该解析可以通过 调用org.freedesktop.DBus 接口下的GetConnectionUnixProcessID 方法进行。进程号指的是引发异常的进程,比如进程B调用进程C引发了异常,就记录进程B和C的进程号。获得进程号之后,可以通过系统调用函数比如readlink读取软链接(比如/proc//exe这样的软链接,该软链接指向文件的可执行文件路径),获取进程B和进程C的可执行文件路径,进而可通过该可执行文件路径获得更详细的信息。
[0039] 解析方法调用消息,还可以得到服务名(提供方在dbus上注册的服务名)和要调用的接口名。
[0040] 解析错误消息,得到被调用方返回的详细错误信息,比如调用调亮度方法时所填入的参数不符合规定的范围,该详细错误信息中会包含调亮度方法规定的范围。对于其他服务,解析错误消息得到的详细信息会根据服务内容不同而不同。
[0041] 综上,对方法调用消息和错误消息进行解析,可获取到异常发生时调用的方法的服务名、接口名、方法名、参数值、进程号,以及返回的错误消息内容。根据这些数据,可以清晰地复原异常发生的完整过程。
[0042] 图2示出通过以上方法步骤得到的解析结果。从该解析结果可清楚看到,错误发生的过程为dde‑dock调用了fcitx提供的org.freedesktop.DBus.Properties 接口上的 Get 方法,尝试获取org.kde.StatusNotifierItem 接口上的 IconPixmap 属性,而fcitx返回错误,错误内容为该属性不存在。
[0043] 图3示出该异常发生的过程的示意流程图。如图3所示,调用方dde‑dock产生一个方法调用消息,转接服务程序比如D‑bus服务将该方法调用消息转发给服务提供方fcitx。服务提供方fcitx返回错误消息给转接服务程序,转接服务程序再将错误消息传输给调用方dde‑dock。
[0044] 下面描述根据本发明实施方式的消息保存方法的一个示例。在接收到来自转接服务程序的方法调用消息(method_call)时,可以采用哈希表等方式进行保存,还可以采用其他合适的方式保存。下面描述其他保存方式的一个示例:首先在内存中分配一个固定大小的缓存,该缓存包含能够保存预定数目个消息的位置,下面以预定数目为1000进行举例说明。当从转接服务程序新接收到一个消息时,首先使用其序列号(serial)除以1000取余数,得到余数值;然后判断该消息是否为方法调用消息;如果是方法调用消息,判断余数值指代的缓存位置是否为空;如果是空,就将该方法调用消息保存在余数值指代的位置中。如果判断该消息是返回消息,则删除余数值指代的位置中的原方法调用消息。
[0045] 方法调用消息的序列号是随着消息数目增加线性增加的,采用这种方式存储消息可以获得更高的效率和更均匀的分布。
[0046] 当一个接口内部发生阻塞或其他问题从而导致长时间不能返回时,在某个缓存中的方法调用消息长时间得不到返回消息,经过1000个调用后,新的消息索引会与该方法调用消息的索引重复,且该新的消息会占用该方法调用消息的缓存。此时可以打印(比如显示在屏幕上,或输出到文件上)一个超时错误,删除原方法调用消息,保存新的方法调用消息,从而避免内存泄露。
[0047] 下面描述该超时处理方法的具体过程:如果判断为余数值指代的位置不为空,打印超时错误;删除余数值指代的位置中原有的方法调用消息,并将从转接服务程序新接收的方法调用消息保存到余数值指代的位置中。
[0048] 下面以一个例子来描述以上消息保存方法和超时处理办法的整体过程:如一个消息的序列号是1521789,将其除以1000取余数得到789。判断消息是否为方法调用消息,如果是,判断缓存区的第789号区域是否为空,如果是空,就将该方法调用消息保存在第789号区域。如果不为空,说明序列号为1521789的方法调用消息尚未得到任何返回消息,此时读取第789号的原有数据并打印一个超时错误,删除第789号区域的原有数据,将序列号为1521789的方法调用消息缓存到第789号区域。
[0049] 如果消息不是方法调用消息,是返回(return)消息,则删除第789号区域的原有的方法调用消息。如果消息是错误(error)消息,则读取缓存区第789号的方法调用消息,解析错误消息和方法调用消息,得到错误详情,并删除第789号区域的数据。
[0050] 综上,根据本发明实施方式,建立进程异常监视方法的执行程序与转接服务程序比如D‑bus服务之间的连接,将该连接注册成为监视器。转接服务程序会把其转接的消息从该连接发送给进程异常监视方法的执行程序。根据本发明实施方式的方法主要关注于D‑bus消息中的方法调用消息和错误消息。当产生错误消息时,记录下错误消息的内容、对应的方法及其参数、方法调用方、方法提供方等重要的信息。
[0051] 根据本发明技术方案,能够在出现异常时立刻发现异常并进行记录,不但具备高时效性,而且不会漏过任何一个异常。并且,所记录的异常信息完善、易于理解,可以清晰查看异常在何时由哪些程序触发,并可轻易、清晰地还原异常的发生具体步骤。此外,根据本发明实施方式,能够精确定位并记录异常信息,不产生无用的常规信息,因此运行时的开销和存储空间占用都极小。
[0052] 根据本发明实施方式,提供一种进程异常监控装置。图4示出根据本发明实施方式的进程异常监控装置的示意性结构框图。如图4所示,该装置包括创建模块410、注册模块420、接收模块430、读取模块440和解析模块450。下面对各模块进行详细描述。
[0053] 创建模块410用于创建异常监控程序与转接服务程序之间的连接。下面以D‑bus服务为转接服务程序的一个示例进行详细描述。
[0054] 注册模块420用于将异常监控程序与转接服务程序之间的连接注册成为监视器。
[0055] 接收模块430用于通过上述连接,读取来自转接服务程序的方法调用消息,并将方法调用消息保存在内存中。
[0056] 可选地,接收模块430可以通过以下方式缓存和查找方法调用消息:在保存方法调用消息时,使用方法调用消息的序列号(serial)作为索引保存该消息。
[0057] 读取模块440用于在接收到来自转接服务程序的错误消息时,从内存中读取与错误消息对应的方法调用消息。读取模块440可以通过错误消息中包含的应答序列号在内存中查找对应的方法调用消息。
[0058] 解析模块450用于解析错误消息和方法调用消息,得到关于异常的详细信息,包括:异常发生时调用的方法的服务名、接口名、方法名、参数值,以及返回的错误消息内容。根据这些数据,可以清晰地复原异常发生的完整过程。
[0059] 下面描述该进程异常监控装置保存消息的一个示例。进程异常监控装置还可以包括内存分配模块,用于在内存中分配一个固定大小的缓存,该缓存包含能够保存预定数目个消息的位置,下面以预定数目为1000进行举例说明。接收模块430可以包括:取余子模块,用于当从转接服务程序新接收到一个消息时,首先使用其序列号(serial)除以预定数目(比如1000)取余数,得到余数值;第一判断子模块,用于判断该消息是否为方法调用消息;第二判断子模块,用于如果是方法调用消息,判断余数值指代的位置是否为空;保存子模块,用于如果是空,就将该方法调用消息保存在余数值指代的位置中。删除子模块,用于如果判断该消息是返回消息,则删除余数值指代的位置中原有的方法调用消息。
[0060] 接收模块430还可以包括:打印子模块,用于如果判断为余数值指代的位置不为空,则打印超时错误;更新子模块,用于删除余数值指代的位置中的原方法调用消息,将从转接服务程序新接收的方法调用消息保存到余数值指代的位置中。
[0061] 根据本发明实施方式的进程异常监控装置的未详述部分,还请参考以上关于方法实施方式的具体描述。
[0062] 本发明的方法可以在计算设备中执行。计算设备可以是具有存储和计算能力的任意设备,其例如可以实现为服务器、工作站等,也可以实现为桌面计算机、笔记本计算机等个人配置的计算机,或者实现为手机、平板电脑、智能可穿戴设备、物联网设备等终端设备,但不限于此。
[0063] 图5示出了根据本发明一个实施方式的计算设备的示意图。需要说明的是,图5所示的计算设备仅为一个示例,在实践中,用于实施本发明的方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图5所示的计算设备相同,也可以与图5所示的计算设备不同。相对于图5所示的计算设备的硬件组件,实践中用于实施本发明的方法的计算设备的硬件组件可以有所增加或删减。本发明对计算设备的具体硬件配置情况不做限制。
[0064] 如图5所示,该设备可以包括:处理器510、存储器520、输入/输出接口530、通信接口540和总线550。其中处理器510、存储器520、输入/输出接口530和通信接口540通过总线550实现彼此之间在设备内部的通信连接。
[0065] 处理器510可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
[0066] 存储器520可以采用ROM(Read Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器520可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器520中,并由处理器510来调用执行。
[0067] 输入/输出接口530用于连接输入/输出模块,以实现信息输入及输出。输入输出/ 模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
[0068] 通信接口540用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式 (例如移动网络、WIFI、蓝牙等)实现通信。
[0069] 总线550包括一通路,在设备的各个组件(例如处理器510、存储器520、输入/输出接口530和通信接口540)之间传输信息。
[0070] 需要说明的是,尽管上述设备仅示出了处理器510、存储器520、输入/输出接口530、通信接口540以及总线550,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
[0071] 本发明实施方式还提供一种非暂态可读存储介质,其存储有指令,该指令用于使计算设备执行根据本发明实施方式的方法。本实施例的可读介质包括永久性和非永久性、可移动和非可移动介质,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。可读存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁带磁盘存储等。
[0072] 在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的优选实施方式。
[0073] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施方式可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0074] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施方式的描述中,本发明的各个特征有时被一起分组到单个实施方式、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。本领域技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施方式中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
[0075] 本领域技术人员可以理解,可以对实施方式中的设备中的模块进行自适应性地改变并且把它们设置在与该实施方式不同的一个或多个设备中。可以把实施方式中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除非这样的特征和/或过程或者单元中的至少一些相互排斥,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0076] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施方式包括其它实施方式中所包括的某些特征而不是其它特征,但是不同实施方式的特征的组合意味着处于本发明的范围之内并且形成不同的实施方式。此外,所述实施方式中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。
[0077] 如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
[0078] 尽管根据有限数量的实施方式描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施方式。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。