提取处理器执行上下文的方法及处理器与流程

文档序号:24074083发布日期:2021-02-26 16:29阅读:82来源:国知局
[0001]本发明涉及处理器验证
技术领域
:,尤其涉及一种提取处理器执行上下文的方法及处理器。
背景技术
::[0002]处理器执行上下文是记录运行在cpu上的程序执行场景,主要包括msr(modelspecificregisters,架构特定寄存器)、通用寄存器、控制寄存器以及程序使用到的内存页信息。cpu仿真器利用获取的执行上下文来实现程序执场景的重放,通过对程序执行的重放,可以分析cpu的指令行为,在处理器性能和功能的验证方面有重要应用。现有技术中,提取执行上下文的方法是记录程序的每个线程执行上下文,主要用于解决用户态下软件程序故障,分析定位软件程序在执行时遇到的问题。而在处理器cpu验证的场景下,尤其是在利用cpu仿真器进行指令级别验证的应用中,现有方法不能够提供内核态的执行上下文。技术实现要素:[0003]为解决上述问题,本发明提供了一种提取处理器执行上下文的方法及处理器,能够获取用户态和内核态的执行上下文。[0004]第一方面,本发明提供一种提取处理器执行上下文的方法,应用于多核处理器,所述多核处理器包括一个bsp处理器和多个ap处理器,所述方法包括:[0005]bsp处理器接收中断源发出的中断信号,并响应所述中断信号进入对应的中断服务程序,提取自身的执行上下文,所述中断源为bsp处理器的lapic定时器;[0006]各ap处理器接收所述bsp处理器发出的核间中断信号,分别响应所述核间中断信号进入各自对应的中断服务程序,提取各自的执行上下文。[0007]可选地,所述方法还包括:[0008]各ap处理器提取完各自的执行上下文之后,通知所述bsp处理器;[0009]所述bsp处理器收到各ap处理器的通知后,判断当前的程序指令寄存器的值是否在被重放程序的指令寄存器范围内,若是,则继续判断当前发生的中断数量是否达到设置的中断间隔,若是,则接收仿真器的命令,与所述仿真器交互信息,以使所述仿真器重放所述被重放程序。[0010]可选地,所述接收仿真器的命令,与所述仿真器交互信息包括:[0011]接收仿真器发出的发送被重放程序执行上下文的命令,向仿真器发送执行上下文;[0012]接收仿真器发出的发送系统内存页的命令,向仿真器发送系统内存页;[0013]接收仿真器发出的继续执行被重放程序的命令,继续执行被重放程序,等待下一次中断发生;或者,接收仿真器发出的终止执行被重放程序的命令,终止执行被重放程序。[0014]可选地,在bsp处理器接收中断源发出的中断信号之前,所述方法还包括:[0015]bsp处理器在系统页表结构中挑选一个内存页,修改所述内存页中虚拟地址到物理地址的地址转换关系。[0016]第二方面,本发明提供一种提取处理器执行上下文的方法,应用于单核处理器,所述单核处理器包括处理器cpu,所述方法包括:[0017]处理器cpu接收中断源发出的中断信号,并响应所述中断信号进入中断服务程序,提取处理器执行上下文,所述中断源为lapic定时器。[0018]第三方面,本发明提供一种多核处理器,所述多核处理器包括一个bsp处理器和多个ap处理器,其中,[0019]所述bsp处理器,用于接收中断源发出的中断信号,并响应所述中断信号进入对应的中断服务程序,提取自身的执行上下文,所述中断源为bsp处理器的lapic定时器;[0020]各所述ap处理器,用于接收所述bsp处理器发出的核间中断信号,分别响应所述核间中断信号进入各自对应的中断服务程序,提取各自的执行上下文。[0021]可选地,各所述ap处理器,用于提取完各自的执行上下文之后,通知所述bsp处理器;[0022]所述bsp处理器,用于收到各ap处理器的通知后,判断当前的程序指令寄存器的值是否在被重放程序的指令寄存器范围内,若是,则继续判断当前发生的中断数量是否达到设置的中断间隔,若是,则接收仿真器的命令,与所述仿真器交互信息,以使所述仿真器重放所述被重放程序。[0023]可选地,所述bsp处理器接收仿真器的命令,与所述仿真器交互信息包括:[0024]接收仿真器发出的发送被重放程序执行上下文的命令,向仿真器发送执行上下文;[0025]接收仿真器发出的发送系统内存页的命令,向仿真器发送系统内存页;[0026]接收仿真器发出的继续执行被重放程序的命令,继续执行被重放程序,等待下一次中断发生;或者,接收仿真器发出的终止执行被重放程序的命令,终止执行被重放程序。[0027]可选地,所述bsp处理器,还用于在系统页表结构中挑选一个内存页,修改所述内存页中虚拟地址到物理地址的地址转换关系。[0028]第四方面,本发明提供一种单核处理器,所述单核处理器包括处理器cpu,其中,[0029]所述处理器cpu,用于接收中断源发出的中断信号,并响应所述中断信号进入中断服务程序,提取处理器执行上下文,所述中断源为lapic定时器。[0030]本发明提供的提取处理器执行上下文的方法及处理器,使用lapic定时器作为中断源,周期性地产生中断信号,通过修改idt中中断服务程序的信息,在中断服务程序中以内核权限提取执行上下文,不受系统权限的限制,用户态和内核态的执行上下文都可以获取。另外,通过修改系统页表结构的地址转换关系,仿真器可以直接获取程序执行环境的系统内存,无需为保存程序访问的内存页而增加存储空间。附图说明[0031]图1为本发明一实施例提供的一种提取处理器执行上下文的方法的流程示意图;[0032]图2为本发明一实施例提供的一种提取处理器执行上下文的方法的流程示意图;[0033]图3为本发明一实施例提供的一种多核处理器的结构示意图;[0034]图4为本发明一实施例提供的一种单核处理器的结构示意图。具体实施方式[0035]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0036]图1示出了本发明实施例提供的一种提取处理器执行上下文的方法的流程示意图。该方法适用于多核处理器,多核处理器的内核按功能分为两种,包括bsp(bootstrapprocessor,启动处理器)和ap(applicationprocessor,应用处理器)。bsp就是在系统启动的时候执行启动代码的cpu,ap则处于等待状态。一般是0号cpu作为bsp。本发明实施例中,多核处理器包括一个bsp处理器和多个ap处理器。每个处理器实质上是一个内核(core),都有一个对应的lapic(localadvancedprogrammableinterruptcontroller,本地高级可编程中断控制器)。[0037]如图1所示,本发明实施例提供了一种提取处理器执行上下文的方法,该方法包括:[0038]步骤101,bsp处理器接收中断源发出的中断信号,并响应中断信号进入对应的中断服务程序,提取自身的执行上下文,该中断源为bsp处理器的lapic定时器;[0039]步骤102,各ap处理器接收bsp处理器发出的核间中断信号,分别响应核间中断信号进入各自对应的中断服务程序,提取各自的执行上下文。[0040]具体地,bsp(bootstrapprocessor)处理器,在多核处理器体系结构中负责boot和唤起其他处理器。lapic(localadvancedprogrammableinterruptcontroller,本地高级可编程中断控制器)定时器,是多核处理器体系结构中的可编程中断控制定时器,通过设置可以发出周期性的中断信号,对运行中的被重放程序进行中断采样处理。[0041]首先设置bsp的lapic定时器中断机制,bsp的lapic定时器作为中断源。通过修改bsp的lapictimer让其产生周期中断,其他ap的lapictimer不做设置。另外修改系统中断描述符表(interruptdescriptortable,idt),使得中断发生时进入中断服务程序,提取处理器执行上下文。bsp处理器和各ap处理器各自对应的中断处理程序都预先通过修改idt,使得中断服务程序能够跳转到执行上下文的提取代码段。具体地,设置中断向量号,获取系统中断描述符表idt,idt用于记录中断服务程序的信息。获取执行上下文提取代码段的地址,根据中断向量号和idt,修改idt中对应的entry信息,用执行上下文提取代码段的地址替换idt中的targetcodesegmentoffset,将修改后的idt重新载入。最后启动中断机制。通过修改idt中中断服务程序的信息,在中断服务程序中提取处理器执行上下文。[0042]具体地,在本发明实施例中,中断发生后,bsp处理器会进入中断服务程序,提取自己的执行上下文,然后检查各ap的系统中断描述符表idt是否都已修改,如果都修改完成,则向ap发送核间中断ipi(interprocessorinterrupt)信号。各ap处理器在收到ipi之后,分别进入各自对应的中断服务程序,会提取各自的执行上下文,提取完成之后,通知bsp。bsp处理器和各ap处理器提取的执行上下文会存入内存。[0043]这里说明的是,提取的处理器执行上下文是处理器所有的执行上下文,可能是被重放程序的,也可能是操作系统的,取决于中断发生时处理器具体执行的程序。与仿真器交互时,仿真器只需要被重放程序的执行上下文,因此,bsp收到各ap反馈的通知之后,判断当前的程序指令寄存器(rip,instructionpointregister)的值是否在被重放程序的rip范围之内,若是,继续判断已发生的中断数量是否达到设置的中断间隔,若是,则接收仿真器的命令,与所述仿真器交互信息。这里必须同时满足两个条件,bsp才开始接收仿真器命令,否则不接收仿真器命令,只是获取处理器执行上下文。获取完处理器执行上下文之后就退出中断服务程序,等待下次中断。[0044]在本发明实施例中,可以预先设置bsp与仿真器交互信息的中断间隔,这里的中断间隔是指bsp与仿真器交互信息时需要发生的中断次数,中断间隔可以根据不同类型的被重放程序进行调整。也就是说,并不是每次发生中断都与仿真器交互信息。可以设置一个数值,当发生中断的次数达到设置值时,这个数值可以是1,2,3,…10…50…100都可以,具体看被重放的程序类型,如果是指令密集型的就采样稀疏些,间隔数量大些,反之,采样密集些,间隔数量小些。简单地说,就是间隔地向仿真器发送执行上下文,既能精准回放,又能避免数据冗余。[0045]本申请中的仿真器,如无特殊说明,均是指cpu仿真器,cpu仿真器可以通过软件的方法来模拟cpu的行为,用于cpu的验证。bsp接收仿真器的命令,并判断命令类型。根据仿真器的命令类型,可以发送处理器执行上下文、程序执行环境的内存页、继续执行程序、终止上下文的提取。具体包括:接收仿真器发出的发送执行上下文的命令,向仿真器发送执行上下文;接收仿真器发出的发送系统内存页的命令,向仿真器发送系统内存页;接收仿真器发出的继续执行被重放程序的命令,继续执行被重放程序,等待下一次中断发生;或者,接收仿真器发出的终止执行被重放程序的命令,终止执行被重放程序。仿真器根据执行上下文和系统内存页对被重放程序进行重放。[0046]本发明实施例提供的一种提取处理器执行上下文的方法,使用bsp的lapic定时器作为中断源,周期性地发出中断信号,每次中断发生时,都会提取bsp处理器和各ap处理器的执行上下文,并通过设置中断间隔可以根据不同类型的被重放程序调整采样间隔、采样点数量,提高数据提取的灵活性。仿真器根据获取的执行上下文和内存页对被重放程序进行重放。重放完成后会让程序继续执行,直到下次中断发生,再次重复上下文提取和重放过程,如此循环直到全部的采样点完成,上下文获取和重放中止。在中断服务程序中以内核权限提取执行上下文,不受系统权限的限制。用户态和内核态的执行上下文都可以提取,能够得到完整的程序执行过程。[0047]进一步地,在bsp处理器接收中断源发出的中断信号之前,如图2所示,所述方法还包括:[0048]步骤100,bsp处理器在系统页表结构中挑选一个内存页,修改内存页中虚拟地址到物理地址的地址转换关系。[0049]具体地,通过以下方式修改系统页表结构:[0050]通过cr3寄存器的值获取系统页表结构的地址,其中cr3寄存器是处理器体系结构中的控制寄存器,用于存放页表结构的地址。通过pagetablewalk(即通过系统页表结构,逐级遍历页表信息)选取一个可用的内存页,利用所述内存页重建地址转换关系。保存pageentry中原来的物理地址和页表信息,用于后续页表的恢复。获取pte(pagetableentry,最后一级页表结构,用于存放物理地址页框、保存页面属性)的地址信息记录保存在一个全局变量中。[0051]通过修改内存页中虚拟地址到物理地址的地址转换关系,当仿真器需要访问某一物理地址时,会发消息给bsp,bsp会把保存的pte页表映射到这个物理地址上,再将虚拟地址里的数据发送给仿真器,仿真器就可以直接获取相关的内存页,不需要为程序使用到的内存页提供额外的存储空间,降低存储开销。如果仿真器终止执行上下文的获取,恢复系统页表结构,即恢复之前修改过的页表信息,不会对系统造成破坏。通过这样的页表修改不仅减小了存储开销,而且仿真器可以访问所有的程序使用到的内存页,保证程序的重放准确度。[0052]需要说明的是,上述提取处理器执行上下文的方法也可以应用于单核处理器。当应用于单核处理器时,该单核处理器包括处理器cpu,该方法包括:[0053]处理器cpu接收中断源发出的中断信号,并响应中断信号进入中断服务程序,提取处理器执行上下文,中断源为lapic定时器。[0054]至于与仿真器的交互过程,可以参考上面的实施例,此处不再赘述。[0055]进一步地,图3示出了本发明实施例提供的一种多核处理器的结构示意图。如图3所示,本发明实施例提供了一种多核处理器,包括一个bsp处理器302和多个ap处理器303,都有对应的lapic,其中,[0056]bsp处理器302,用于接收中断源发出的中断信号,并响应中断信号进入对应的中断服务程序,提取自身的执行上下文,该中断源为bsp处理器的lapic定时器;[0057]各ap处理器303,用于接收bsp处理器发出的核间中断信号,分别响应核间中断信号进入各自对应的中断服务程序,提取各自的执行上下文。[0058]进一步地,各ap处理器303,用于提取完各自的执行上下文之后,通知所述bsp处理器302;[0059]bsp处理器302,用于收到各ap处理器303的通知后,判断当前的程序指令寄存器的值是否在被重放程序的指令寄存器范围内,若是,则继续判断当前发生的中断数量是否达到设置的中断间隔,若是,则接收仿真器的命令,与仿真器交互信息,以使所述仿真器重放所述被重放程序。[0060]bsp处理器302接收仿真器的命令,并判断命令类型。根据仿真器的命令类型,可以发送处理器执行上下文、程序执行环境的内存页、继续执行程序、终止上下文的提取。具体包括:接收仿真器发出的发送执行上下文的命令,向仿真器发送执行上下文;接收仿真器发出的发送系统内存页的命令,向仿真器发送系统内存页;接收仿真器发出的继续执行被重放程序的命令,继续执行被重放程序,等待下一次中断发生;或者,接收仿真器发出的终止执行被重放程序的命令,终止执行被重放程序。仿真器根据执行上下文和系统内存页对被重放程序进行重放。[0061]本发明实施例提供的一种多核处理器,使用bsp的lapic定时器作为中断源,周期性地发出中断信号,每次中断发生时,都会提取bsp处理器和各ap处理器的执行上下文,并通过设置中断间隔可以根据不同类型的被重放程序调整采样间隔、采样点数量,提高数据提取的灵活性。仿真器根据获取的执行上下文和内存页对被重放程序进行重放。重放完成后会让程序继续执行,直到下次中断发生,再次重复上下文提取和重放过程,如此循环直到全部的采样点完成,上下文获取和重放中止。在中断服务程序中以内核权限提取执行上下文,不受系统权限的限制。用户态和内核态的执行上下文都可以提取,能够得到完整的程序执行过程。[0062]进一步地,bsp处理器302,还用于在系统页表结构中挑选一个内存页,修改内存页中虚拟地址到物理地址的地址转换关系。[0063]本发明实施例提供的多核处理器是用于执行上述方法实施例的,其具体流程和详细内容请参照上述实施例,此处不再赘述。[0064]另一方面,本发明实施例还提供一种单核处理器,如图4所示,包括处理器cpu,其中,[0065]处理器cpu,用于接收中断源发出的中断信号,并响应中断信号进入中断服务程序,提取处理器执行上下文,所述中断源为lapic定时器。[0066]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干命令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。[0067]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1