处理器内核调用栈信息查询方法及装置与流程

文档序号:28120461发布日期:2021-12-22 15:10阅读:207来源:国知局
处理器内核调用栈信息查询方法及装置与流程

1.本公开涉及计算机技术领域,具体而言,涉及一种处理器内核调用栈信息查询方法、装置与电子设备。


背景技术:

2.在设置有多个处理器的系统的运维过程中,如果系统出现问题,通常需要查看某个目标处理器的内核调用栈信息,以确定是否发生处理器使用率高或者通道拥堵等问题。
3.在相关技术中,通常需要使设备进入内核调试模式(kerneldebug,kdb)停止运行或断流,以查看各处理器上的内核调用栈信息,定位问题。在此过程中,极可能存在由进入kdb模式导致的系统运行风险。
4.因此,如何在保障系统正常运行的情况下查看各处理器的内核调用栈信息成为本领域一个急需解决的问题。
5.需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。


技术实现要素:

6.本公开的目的在于提供一种处理器内核调用栈信息查询方法、装置与电子设备,用于至少在一定程度上克服由于相关技术的限制和缺陷而导致的查看内核调用栈信息时使系统停止运行会导致系统发生运行风险的问题。
7.根据本公开实施例的第一方面,提供一种处理器内核调用栈信息查询方法,由多个处理器中的任一个处理器执行,包括:响应来自主处理器的第一核间中断消息确定中断处理函数,所述第一核间中断消息包括查询标识位,所述第一核间中断消息的所述查询标识位为第一值;通过所述中断处理函数获取预设寄存器的值,并根据所述预设寄存器的值确定内核调用栈信息;将所述内核调用栈信息保存在预设缓存地址。
8.在本公开的一种示例性实施例中,所述中断处理函数包括do_nmi函数,所述预设寄存器包括pt_regs寄存器。
9.在本公开的一种示例性实施例中,所述根据所述预设寄存器的值确定内核调用栈信息包括:
10.根据所述预设寄存器的值调用stack_frame函数获取所述处理器的栈帧bp指针;
11.根据所述bp指针的值调用get_context_stack函数得出所述内核调用栈信息。
12.在本公开的一种示例性实施例中,所述预设缓存地址包括g_x86_cpu_info字符数组。
13.在本公开的一种示例性实施例中,所述第一核间中断消息包括中断描述符,根据所述第一核间中断消息确定中断处理函数包括:
14.根据所述中断描述符确定所述中断处理函数。
15.在本公开的一种示例性实施例中,还包括:
16.响应来自所述主处理器的第二核间中断消息停止对所述第一核间中断消息的响应动作,所述第二核间中断消息为所述主处理器响应预设事件触发,所述预设事件包括多个预设不可屏蔽中断事件中的至少一个,所述第二核间中断消息包括查询标识位,所述第二核间中断消息的查询标识位为第二值;
17.根据所述第二核间中断消息执行后续动作。
18.根据本公开的第二方面,提供一种处理器内核调用栈信息查询方法,由用户态程序执行,包括:
19.响应标准命令行指令生成查看目标处理器的内核调用栈信息的预设核间中断指令,以使主处理器响应所述预设核间中断指令对所述目标处理器发送第一核间中断消息,所述第一核间中断消息包括查询标识位,所述第一核间中断消息的查询标识位的值为第一值;
20.在预设时长后获取预设缓存地址的值,根据所述预设缓存地址的值输出所述目标处理器的内核调用栈信息。
21.根据本公开的第三方面,提供一种处理器内核调用栈信息查询方法,由主处理器执行,包括:
22.响应来自用户态程序的预设核间中断指令对目标处理器发送第一核间中断消息,所述预设核间中断指令用于查看所述目标处理器的内核调用栈信息,所述第一核间中断消息包括查询标识位,所述第一核间中断消息的所述查询标识位为第一值;
23.响应来自所述用户态程序的预设缓存地址读取指令返回所述预设缓存地址的值。
24.在本公开的一种示例性实施例中,还包括:
25.响应预设事件对所述目标处理器发送第二核间中断消息,所述预设事件包括多个预设不可屏蔽中断事件中的至少一个,所述第二核间中断消息包括查询标识位,所述第二核间中断消息的查询标识位为第二值。
26.根据本公开实施例的第四方面,提供一种处理器内核调用栈信息查询装置,包括:
27.中断函数确定模块,设置为响应来自主处理器的第一核间中断消息确定中断处理函数,所述第一核间中断消息包括查询标识位,所述第一核间中断消息的所述查询标识位为第一值;
28.寄存器读取模块,设置为通过所述中断处理函数获取预设寄存器的值,并根据所述预设寄存器的值确定内核调用栈信息;
29.缓存写入模块,设置为将所述内核调用栈信息保存在预设缓存地址。
30.根据本公开的第五方面,提供一种电子设备,包括:存储器;以及耦合到所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上述任意一项所述的方法。
31.根据本公开的第六方面,提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如上述任意一项所述的处理器内核调用栈信息查询方法。
32.本公开实施例通过在各处理器上设置第一核间中断消息处理逻辑,使处理器无需进入内核调试模式即可返回内核调用栈信息,能够有效提高系统问题定位效率,降低问题定位导致的系统运行风险。
33.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不
能限制本公开。
附图说明
34.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
35.图1是本公开示例性实施例中的处理器内核调用栈信息查询方法应用的系统逻辑结构示意图。
36.图2是本公开示例性实施例中由多个处理器中的任一个处理器执行的处理器内核调用栈信息查询方法的流程图。
37.图3是本公开示例性实施例中由用户态程序执行的处理器内核调用栈信息查询方法的流程图。
38.图4是本公开示例性实施例中由主处理器执行的处理器内核调用栈信息查询方法的流程图。
39.图5是本公开实施例中的一个交互示意图。
40.图6是本公开示例性实施例中一种处理器内核调用栈信息查询装置的方框图。
41.图7是本公开示例性实施例中一种电子设备的方框图。
具体实施方式
42.现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
43.此外,附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
44.下面结合附图对本公开示例实施方式进行详细说明。
45.图1是本公开示例性实施例中的处理器内核调用栈信息查询方法应用的系统逻辑结构示意图。
46.本公开实施例的方法可以运行在linux系统或其他运行多核处理器的操作系统下。
47.参考图1,系统100的逻辑结构可以包括:
48.用户态程序11,用于提供人机交互功能;
49.主处理器12,运行用户态程序11和内核态程序;
50.多个处理器13,与主处理器12通讯连接,用于响应主处理器12发送的指令运行。
51.上述用户态程序11、主处理器12、处理器13均为逻辑概念,可以同时运行在一个或多个物理处理器上,主处理器12和处理器13又可以称为虚拟处理器或虚拟cpu(virtual central processing unit,vcpu)。其中,多个处理器13可以运行在一或多个虚拟机(virtual machine,vm)上。
52.图2是本公开示例性实施例中由多个处理器中的任一个处理器执行的处理器内核调用栈信息查询方法的流程图。
53.参考图2,由多个处理器中的任一个处理器执行的方法200可以包括:
54.步骤s21,响应来自主处理器的第一核间中断消息确定中断处理函数,所述第一核间中断消息包括查询标识位,所述第一核间中断消息的所述查询标识位为第一值;
55.步骤s22,通过所述中断处理函数获取预设寄存器的值,并根据所述预设寄存器的值确定内核调用栈信息;
56.步骤s23,将所述内核调用栈信息保存在预设缓存地址。
57.为了理解方法200,首先介绍核间中断消息和中断处理函数。
58.核间中断消息(inter

processor interrupt,ipi)是主cpu向系统中的目标cpu发送中断信号,以使目标cpu执行特定的操作的消息。主cpu将处理器间中断消息(ipi)作为信号直接放在apic(advanced programmable interrupt controller,高级可编程中断控制器)总线上传输,并不通过irq中断线。主板上的apic主要用来处理由i/o设备引起的中断,每个cpu有自己的apic(称为该cpu的本地apic),主要用来处理多cpu之间的中断协调。当主cpu希望向目标cpu发送核间中断消息时,会将中断向量和目标cpu的本地apic标识符存储在自己的本地apic中断命令寄存器(icr)中。核间中断消息随后经由apic总线发送到目标cpu的本地apic,本地apic负责收集本地中断请求和外部发送过来的中断消息,再将该中断消息发送给本地cpu处理。
59.在本公开实施例中,与第一核间中断消息对应的中断处理器函数采用do_nmi()函数接口。do_nmi()函数接口通常用于处理nmi中断。nmi(non

maskable interrupt,不可屏蔽的中断)中断通常用于通知操作系统发生了无法恢复的硬件错误,这些硬件错误例如包括芯片错误、内存ecc校验错误、总线数据损坏等等。在许多x86/x86

64类型的硬件上,可以触发生成“watchdog nmi interrupts(看门狗nmi中断)”,用于调试硬核锁定。通过定期执行nmi中断,内核可以监视是否有cpu被锁定,如果有,则打印出cpu内核调用栈信息。所有nmi中断的c入口都是do_nmi函数。
60.通常而言,默认的do_nmi函数首先需要判断nmi_state是否针对32位模式,然后保存cr2寄存器的值到nmi_cr2并最后恢复。这是因为nmi中断可能抢占了page fault(页面错误)代码,而nmi中断又可能触发page fault从而导致cr2寄存器的值改变。系统默认的do_nmi()函数会调用nmi_handle函数把所有注册的nmi handler(nmi句柄)执行一遍,nmi_handle函数监视每个handler的执行时间,如果占用cpu时间过长,就会调用irq_work_queue函数在irq context(中断文本)中打印这一调试信息。在此过程中,系统处于内核调试状态(kdb模式)中,暂停任务处理,且在恢复运行过程中可能发生系统风险。
61.而在本技术中,利用do_nmi函数的函数入口,实现不进入kdb模式即可查询目标处理器的内核调用栈信息。
62.在步骤s21,当目标处理器接收到来自主处理器的核间中断消息时,首先判断该核间中断消息是否为约定的第一核间中断消息。本公开实施例通过预设的查询标识位的值来区分用于查询内核调用栈的第一核间中断消息和基于通常不可屏蔽中断事件的第二核间中断消息。其中第二核间中断消息为主处理器响应预设事件触发,预设事件包括多个预设不可屏蔽中断事件中的至少一个,例如芯片错误、内存ecc校验错误、总线数据损坏等等。
63.在一个实施例中,第一核间中断消息和第二核间中断消息均包括查询标识位,第一核间中断消息的查询标识位的值为第一值,第二核间中断消息的查询标识位的值为第二值。第一值例如可以为1,第二值例如可以为0;或者,第一值例如可以为true,第二值例如可以为false等。第一值和第二值仅用于区分不同种类的核间中断消息,本领域技术人员可以根据实际情况自行设置。
64.在另一个实施例中,如果目标处理器设置有查询标识位,第一核间中断消息和第二核间中断消息的形式可以完全相同,查询标识位设置在目标处理器的预设地址中。用户态程序在发送第一核间中断消息查询内核调用栈信息前,首先将目标处理器的查询标识位设置为第一值,然后通过正常流程触发核间中断消息。目标处理器接收到核间中断消息后,根据本地查询标识位的值确定当前核间中断消息对应哪种任务。此过程相当于识别不同种类的核间中断消息。
65.除了查询标识位,第一核间中断消息还可以包括中断描述符。目标处理器的本地apic收到第一核间中断消息后,查找中断向量表得到nmi_vector(中断向量)对应的中断描述符,调用该中断描述符中的中断处理函数进行后续处理。在本公开的一个实施例中,第一核间中断消息对应的中断处理函数可以内容为步骤s22、s23对应动作的do_nmi函数。与默认的do_nmi函数不同,内容为步骤s22、s23对应动作的do_nmi函数仅执行步骤s22和步骤s23所示的动作。
66.在步骤s22,通过中断处理函数获取预设寄存器的值,并根据预设寄存器的值确定内核调用栈信息。预设寄存器例如可以为pt_regs寄存器。
67.在本公开的一个实施例中,步骤s22具体可以为:根据预设寄存器的值调用stack_frame函数获取处理器的栈帧bp指针,然后根据bp指针的值调用get_context_stack函数得出内核调用栈信息。
68.确定内核调用栈信息后,在步骤s23将该内核调用栈信息保存在预设缓存地址中,预设缓存地址例如为g_x86_cpu_info字符数组。
69.在此过程中,如果目标处理器接收到查询标识位为第二值的第二核间中断消息,则响应来自主处理器的第二核间中断消息停止对第一核间中断消息的响应动作,然后根据第二核间中断消息执行后续动作。这样可以避免丢失目标处理器上的nmi中断,因为目标处理器上的nmi中断是无法在其它处理器上检测和处理的。在某些情况下,nmi中断处理程序处理多个当前nmi中断事件时,其中一个事件可能在下一个nmi中断中排队,如果在处理前一个nmi中断事件时,在下一个nmi中断中排队的事件已经被处理了,则该下一个nmi中断将导致未知nmi中断。因此可以将这一类涉及两个nmi中断的事件标记为潜在的nmi中断,优先处理。
70.图3是本公开示例性实施例中由用户态程序执行的处理器内核调用栈信息查询方法的流程图。
71.参考图3,处理器内核调用栈信息查询方法300可以包括:
72.步骤s31,响应标准命令行指令生成查看目标处理器的内核调用栈信息的预设核间中断指令,以使主处理器响应预设核间中断指令对目标处理器发送第一核间中断消息,第一核间中断消息包括查询标识位,第一核间中断消息的查询标识位的值为第一值;
73.步骤是32,在预设时长后获取预设缓存地址的值,根据预设缓存地址的值输出目标处理器的内核调用栈信息。
74.在本公开实施例中,用户可以通过标准命令行指令控制第一核间中断消息的生成,并在预设时长后直接读取预设缓存地址的值,将目标处理器的内核调用栈信息打印出来,以便了解目标处理器正在处理什么业务。其中标准命令行指令可以包括想要查看的目标处理器的标识符。标准命令行指令例如可以为在开发者视图下执行show cpu

stack(all|cpu

id)命令,以便通过系统调用在内核态执行的send_ipi_interrupt(cpu)函数,该函数用于发送第一核间中断消息。
75.在一个实施例中,预设时长例如可以为50ms,以保证内核调用栈信息推导和保存的完成,避免由于时间太短,内核调用栈信息没有推导完成,预设缓存地址中的值为空。
76.图4是本公开示例性实施例中由主处理器执行的处理器内核调用栈信息查询方法的流程图。
77.参考图4,主处理器执行的方法400可以包括:
78.步骤s41,响应来自用户态程序的预设核间中断指令对目标处理器发送第一核间中断消息,预设核间中断指令用于查看目标处理器的内核调用栈信息,第一核间中断消息包括查询标识位,第一核间中断消息的查询标识位为第一值;
79.步骤s42,响应来自用户态程序的预设缓存地址读取指令返回预设缓存地址的值。
80.主处理器的上述方法在内核态执行。主处理器对目标处理器发送第一核间中断消息的方式例如为在内核态执行send_ipi_interrupt(cpu)函数,使本地apic总线执行apic

>send_ipi_mask(cpumask_of(cpu),nmi_vector),将第一核间中断消息发送到目标处理器上的本地apic总线上。
81.除了对用户态程序和目标处理器之间的动作承上启下,主处理器还响应预设事件对目标处理器发送第二核间中断消息,预设事件包括多个预设不可屏蔽中断事件中的至少一个。
82.图5是本公开实施例中的一个交互示意图。
83.参考图5,用户态程序、主处理器、目标处理器的交互过程包括:
84.步骤s51,用户态接收标准命令行指令,在开发者视图下执行show cpu

stack(all|cpu

id)命令。
85.步骤s52,通过系统调用在内核态执行send_ipi_interrupt(cpu)函数,主处理器本地apic总线执行apic

>send_ipi_mask(cpumask_of(cpu),nmi_vector)函数,将第一核间中断消息发送到目标处理器上的本地apic总线上。
86.步骤s53,目标处理器的本地apic收到第一核间中断消息,查找中断向量表进而得到nmi_vector中断向量对应的中断描述符,调用中断描述符中的中断处理函数进行处理。
nmi_vector对应的中断处理函数是do_nmi函数。
87.步骤s54,目标处理器根据pt_regs寄存器的值调用stack_frame函数获取当前cpu的栈帧bp指针,根据bp指针值调用get_context_stack函数推导得出cpu的内核调用栈信息,并将其保存到g_x86_cpu_info字符数组中。
88.步骤s55,用户态通过系统调用获取g_x86_cpu_info的值,打印出目标处理器的内核调用栈信息。
89.在图5所示实施例中,通过利用nmi_vector中断使目标处理器在do_nmi中断处理程序中利用pt_regs寄存器获取当前栈帧bp指针,可以在不使设备停止运行的前提下获取目标处理器的内存调用栈信息,避免进入kdb环境导致的系统运行风险和处理器工作中断,可以有效提高查看处理器内核调用栈信息的效率,提高系统安全性。
90.对应于上述方法实施例,本公开还提供一种处理器内核调用栈信息查询装置,可以用于执行上述方法实施例。
91.图6是本公开示例性实施例中一种处理器内核调用栈信息查询装置的方框图。
92.参考图6,处理器内核调用栈信息查询装置600可以包括:
93.中断函数确定模块61,设置为响应来自主处理器的第一核间中断消息确定中断处理函数,所述第一核间中断消息包括查询标识位,所述第一核间中断消息的所述查询标识位为第一值;
94.寄存器读取模块62,设置为通过所述中断处理函数获取预设寄存器的值,并根据所述预设寄存器的值确定内核调用栈信息;
95.缓存写入模块63,设置为将所述内核调用栈信息保存在预设缓存地址。
96.由于装置600的各功能已在其对应的方法实施例中予以详细说明,本公开于此不再赘述。
97.概括而言,在大多数现网环境中,当出现问题时需要查看某个cpu的内核调用栈。大多数情况下都必须进入kdb,而进入kdb存在风险,所以我们需要在不进入kdb的情况下,就能获取到cpu的内核调用栈信息。为此,本公开是为了不使设备进入kdb停止运行或断流的情况下,获取目标cpu上的内核调用栈信息,可定位cpu使用率高或者通道拥堵等问题。具体而言,
98.本发明提供了在设备运行过程中,在不允许使用kdb同时又需要定位cpu相关的问题时,通过在用户态执行相关命令即可获取目标cpu的内核调用栈。通过栈信息可确定cpu正在处理什么业务。推导目标cpu内核调用栈时,耗时时间短,以使其可以响应正常的nmi中断或处理下一次获取目标cpu内核调用栈请求。获取目标cpu的内核调用栈和在用户态显示栈信息时,需要有大约50ms的休眠间隔。以保证栈信息推导和保存完成,防止时间太短,栈信息没有推导完成,导致用户看到的栈信息为空。首先,在用户态使用标准命令行,在开发者视图下执行show cpu

stack(all|cpu

id)命令,通过系统调用在内核态执行send_ipi_interrupt(cpu),最终本地apic总线执行apic

>send_ipi_mask(cpumask_of(cpu),nmi_vector),将消息发送到目标cpu上的本地apic总线上。其次,目标cpu的本地apic收到中断信号后,会查找中断向量表进而得到nmi_vector中断向量对应的中断描述符,最终调用中断描述符中的中断处理函数进行处理。nmi_vector对应的中断处理函数是do_nmi。进一步,原do_nmi接口,先判断nmi_state状态以确定是否是32位模式,保存cr2寄存器的值到nmi_
cr2上待处理完成后再将其进行恢复,default_do_nmi()调用nmi_handle()把所有事先注册的nmi handler执行一遍。由于在设备正常运行的情况下,仅仅是让目标cpu短暂进入中断状态,所以此时不需要再判断nmi_state及保存cr2寄存器的值,仅需要根据pt_regs寄存器的值和目标cpu,调用stack_frame获取当前cpu的栈帧bp指针,根据bp值调用get_context_stack推导得出cpu的内核调用栈信息,并将其保存到g_x86_cpu_info字符数组中。最后,用户态通过系统调用获取g_x86_cpu_info的值,进而打印出调用栈信息。这样,不使设备停止运行就可获取目标cpu的调用栈信息。本公开利用nmi的中断处理机制,但do_nmi的中断回调函数的处理方式不一样。原do_nmi的处理方式是在系统陷入kdb后自动调用的,现在系统在正常运行的情况下给目标核发送ipi中断后,在do_nmi中利用pt_regs寄存器获取调用栈。因此本公开利用nmi_vector中断,使目标cpu进入一个短暂不运行状态,在do_nmi中断处理程序中,利用pt_regs寄存器获取当前栈帧bp指针。并且利用开关将原nmi中断的处理方式与获取当前cpu内核调用栈的处理方式分开,以使其既可以正常处理设备的nmi中断请求,又可以获取当前cpu当内核调用栈。
99.应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
100.在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
101.所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
102.下面参照图7来描述根据本发明的这种实施方式的电子设备700。图7显示的电子设备700仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
103.如图7所示,电子设备700以通用计算设备的形式表现。电子设备700的组件可以包括但不限于:上述至少一个处理单元710、上述至少一个存储单元720、连接不同系统组件(包括存储单元720和处理单元710)的总线730。
104.其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元710执行,使得所述处理单元710执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元710可以执行如本公开实施例所示的方法。
105.存储单元720可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)7201和/或高速缓存存储单元7202,还可以进一步包括只读存储单元(rom)7203。
106.存储单元720还可以包括具有一组(至少一个)程序模块7205的程序/实用工具7204,这样的程序模块7205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
107.总线730可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
108.电子设备700也可以与一个或多个外部设备800(例如键盘、指向设备、蓝牙设备
等)通信,还可与一个或者多个使得用户能与该电子设备700交互的设备通信,和/或与使得该电子设备700能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口750进行。并且,电子设备700还可以通过网络适配器760与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器760通过总线730与电子设备700的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备700使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
109.通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd

rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
110.在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
111.根据本发明的实施方式的用于实现上述方法的程序产品可以采用便携式紧凑盘只读存储器(cd

rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
112.所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd

rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
113.计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
114.可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。
115.可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户
计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
116.此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
117.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和构思由权利要求指出。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1