信号处理的方法和装置的制作方法

文档序号:6402560阅读:142来源:国知局
专利名称:信号处理的方法和装置的制作方法
技术领域
本发明涉及计算机领域,并且更具体地,涉及信号处理的方法和装置。
背景技术
目前,在计算机系统中,线程需要进行信号处理,例如,在进行故障处理时,可以创建一个监控进程对业务进程(具体地说,是该业务进程的主线程)进行心跳监控,业务进程周期向监控进程发送心跳消息,在心跳丢失时,监控进程将重新启动业务进程,或,向业务进程发出信号通知其退出并重新启动该业务进程;再例如,业务进程中启动一个监控线程对该进程的所有线程的中央处理器(CPU, Central Processing Unit)占用率进行监控,当CPU占用率超过预设的阈值时,监控线程向业务处理线程发出信号;再例如,业务进程通过信号接管的方式监控出现CPU异常时内核发出的信号、监控进程发出的信号和CPU占用率监控线程发出的信号;通过对上述信号进行处理,能够获取故障类型、当前的寄存器信息、调用栈信息、线程栈内容、相关业务的数据结构快照等,将这些信息记录到临终遗言中,通过这些信息进行软件故障定位。在进行上述信号处理时,需要开辟信号栈用于存储处理过程中产生的过程变量。在一种现有技术中,如图1所示,默认在线程栈的当前位置开辟信号栈,S卩,当线程收到信号并对该信号进行信号处理时,系统直接从当前线程栈位置开始开辟信号栈,由于线程栈的栈顶存在一个页保护空间(也称为页保护区间),这个空间不可以被写如数据,当线程栈空间使用越界时将会触发CPU异常,例如,当线程栈空间使用越界或者临界越界时,开辟的信号栈将位于页保护空间内,由于该保护空间不可被写入数据,信号处理将引发CPU异常,导致信号处理无法进行。在另一种现有技术中,可以从堆内存中为线程指定一块独立的信号栈,将线程栈与信号栈分开。但是,由于信号栈可能与该堆内存中`用于存储数据的空间相邻,当数据写越界时,造成信号栈被踩,导致信号处理无法进行。

发明内容
本发明实施例提供一种信号处理的方法、装置和设备,能够确保信号处理的进行。第一方面,提供了一种信号处理的方法,其特征在于,该方法包括:确定运行目标线程所需要的第一内存容量以及该目标线程进行信号处理所需要的第二内存容量;根据该第一内存容量和该第二内存容量,创建线程栈,其中,该线程栈包括线程存储空间和信号存储空间,该线程存储空间用于存储运行该目标线程所产生的过程变量,该线程存储空间的大小大于或等于该第一内存容量,该信号存储空间用于存储进行该信号处理所产生的过程变量,该信号存储空间的大小大于或等于该第二内存容量;当该目标线程进行该信号处理时,在该信号存储空间中存取该信号处理所产生的过程变量。结合第一方面,在第一方面的第一种实现方式中,该信号处理包括:对该目标线程出现故障时产生的故障信号的处理;以及该在该信号存储空间中存取该信号处理所产生的过程变量,包括:在该信号存储空间中存取该目标线程对该故障信号进行处理时产生的过
程变量。结合第一方面及其上述实现方式,在第一方面的第二种实现方式中,创建的该线程栈中,该线程存储空间的起始地址与该线程栈的起始地址相同。结合第一方面及其上述实现方式,在第一方面的第三种实现方式中,该线程栈还包括属性为只读或不可读写的第一隔离空间,该第一隔离空间位于该线程存储空间和该信号存储空间之间。结 合第一方面及其上述实现方式,在第一方面的第四种实现方式中,该线程栈还包括属性为只读或不可读写的第二隔离空间,该第二隔离空间位于该线程栈的栈顶,且该第二隔离空间不与该线程存储空间或该信号存储空间重叠。第二方面,提供了一种信号处理的装置,该装置包括:容量确定单元,用于确定运行目标线程所需要的第一内存容量以及进行与该目标线程的运行相对应的信号处理所需要的第二内存容量;线程栈创建单元,用于根据该容量确定单元确定的该第一内存容量和该第二内存容量,创建该线程栈,其中,该线程栈包括线程存储空间和信号存储空间,该线程存储空间用于存储运行该目标线程所产生的过程变量,该线程存储空间的大小大于或等于该第一内存容量,该信号存储空间用于存储进行该信号处理所产生的过程变量,该信号存储空间的大小大于或等于该第二内存容量;处理单元,用于在该目标线程进行该信号处理时,在该线程栈创建单元创建的该信号存储空间中存取该信号处理所产生的过程变量。结合第二方面,在第二方面的第一种实现方式中,该信号处理包括:对该目标线程出现故障时产生的故障信号的处理;以及该处理单元具体用于在该线程栈创建单元创建的该信号存储空间中存取该目标线程对该故障信号进行处理时产生的过程变量。结合第二方面及其上述实现方式,在第二方面的第二种实现方式中,该线程栈创建单元创建的该线程栈中,该线程存储空间的起始地址与该线程栈的起始地址相同。结合第二方面及其上述实现方式,在第二方面的第三种实现方式中,该线程栈创建单元创建的该线程栈还包括属性为只读或不可读写的第一隔离空间,该第一隔离空间位于该线程存储空间和该信号存储空间之间。结合第二方面及其上述实现方式,在第二方面的第四种实现方式中,该线程栈创建单元创建的该线程栈还包括属性为只读或不可读写的第二隔离空间,该第二隔离空间位于该线程栈的栈顶,且该第二隔离空间不与该线程存储空间或该信号存储空间重叠。第三方面,提供了一种信号处理的设备,该设备包括:总线;与该总线相连的处理器;与该总线相连的存储器;其中,该处理器通过该总线,调用该存储器中存储的程序,以用于确定运行目标线程所需要的第一内存容量以及该目标线程进行信号处理所需要的第二内存容量;用于根据该第一内存容量和该第二内存容量,创建线程栈,其中,该线程栈包括线程存储空间和信号存储空间,该线程存储空间用于存储运行该目标线程所产生的过程变量,该线程存储空间的大小大于或等于该第一内存容量,该信号存储空间用于存储进行该信号处理所产生的过程变量,该信号存储空间的大小大于或等于该第二内存容量;用于当该目标线程进行该信号处理时,在该信号存储空间中存取该信号处理所产生的过程变量。结合第三方面,在第三方面的第一种实现方式中,该信号处理包括:对该目标线程出现故障时产生的故障信号的处理;以及该处理器具体用于在该信号存储空间中存取该目标线程对该故障信号进行处理时产生的过程变量。结合第三方面及其上述实现方式,在第三方面的第二种实现方式中,该处理器创建的该线程栈中,该线程存储空间的起始地址与该线程栈的起始地址相同。结合第三方面及其上述实现方式,在第三方面的第三种实现方式中,该处理器创建的该线程栈还包括属性为只读或不可读写的第一隔离空间,该第一隔离空间位于该线程存储空间和该信号存储空间之间。结合第三方面及其上述实现方式,在第三方面的第四种实现方式中,该处理器创建的该线程栈还包括属性为只读或不可读写的第二隔离空间,该第二隔离空间位于该线程栈的栈顶,且该第二隔离空间不与该线程存储空间或该信号存储空间重叠。根据本发明实施例的信号处理的方法、装置和设备,通过根据需要运行的目标线程和需要进行的信号处理,确定线程栈,使该线程栈包括用于存储该目标线程的过程变量的线程存储空间和用于存储该信号处理的过程变量的信号存储空间,使该线程存储空间的大小大于或等于该线程运行所需要的内存,使该信号存储空间的大小大于或等于该信号处理所需要的内存,能够确保用于存储信号处理的过程变量的存储空间,从而能够确保线程对信号处理的进行。


为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是表示现有技术中信号栈的配置的示意图。

图2是根据本发明实施例的信号处理的方法的示意性流程图。图3是表示本发明实施例中线程栈的配置的示意图。图4是表示本发明实施例中线程栈的创建方法以及使用方法的示意性流程图。图5是根据本发明实施例的信号处理的装置的示意性框图。图6是根据本发明实施例的信号处理的设备的示意性结构图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明的技术方案,可以运行在包括例如,CPU、存储器管理单元(MMU,MemoryManagement Unit)、内存(也称为存储器)的硬件设备上,该硬件设备所运行的操作系统可以是各种通过线程或进程(包括多个线程)实现业务处理的计算机操作系统,例如,Linux系统、Unux系统等。图2示出了根据本发明实施例的信号处理的方法100的示意性流程图。本发明的方法100的实施主体可以是CPU,也可以是MMU,或者由CPU及MMU协同完成,本发明并未特另IJ限定,以下,为了便于理解和说明,在未特别说明的情况下,以MMU的执行为例,对本发明的方法100进行说明。如图1所示,该方法100包括:S110,确定运行目标线程所需要的第一内存容量以及该目标线程进行信号处理所需要的第二内存容量;S120,根据该第一内存容量和该第二内存容量,创建线程栈,其中,该线程栈包括线程存储空间和信号存储空间,该线程存储空间用于存储运行该目标线程所产生的过程变量,该线程存储空间的大小大于或等于该第一内存容量,该信号存储空间用于存储进行该信号处理所产生的过程变量,该信号存储空间的大小大于或等于该第二内存容量;S130,当该目标线程进行该信号处理时,在该信号存储空间中存取该信号处理所产生的过程变量。具体地说,在S110,MMU可以根据需要运行的目标线程,确定该目标线程(具体地说,是存储因运行该线程而产生的过程变量)所需要的内存容量(第一内存容量),并且,在本发明实施例中,确定该第一内存容量的方法可以与现有技术相似,例如,可以根据操作系统的规定或该目标线程的需要实现的功能或者与该目标线程相对应的业务,确定该第一内存容量。这里,需要说明的是,该目标线程可以独立地实现一项业务或功能,也可以与其他线程共同完成一项业务或功能,本发明并未特别限定。并且,以上列举的确定第一内存容量的方法仅为示例性说明,本发明并未限定于此,其他能够确定线程所需的内存容量的方法均落入本发明的保护范围内。在本发明实施例中,该目标线程为需要对例如来自系统内核、CUP或其他线程的信号进行信号处理的线程。可选的,该信号处理包括:对该目标线程出现故障时产生的故障信号的处理;以及 该在该信号存储空间中存取该信号处理所产生的过程变量,包括:在该信号存储空间中存取该目标线程对该故障信号进行处理时产生的过程变量。具体地说,该信号处理可以是对用于故障采集的信号的处理。例如,野指针、内存写越界等软件系统缺陷(BUG)可能造成业务线程出现CPU异常,对此,系统内核向该业务线程发出信号,业务线程收到该信号,在信号处理中进行信息采集,记录完成采集的信息后,业务线程重新启动。或者,系统可以创建一个监控进程对业务进程(包括一个或多个线程)进行心跳监控,业务进程周期向监控进程发送心跳消息,如果监控进程发现业务进程心跳丢失,则监控进程向业务进程发出信号,业务进程收到该信号,在信号处理中进行信息采集,记录完成采集的信息后,业务进程退出,由监控进程负责将业务进程重新启动。再例如,循环控制变量出错、状态机处理错误、信号量死锁等软件系统BUG造成业务处理线程出现死循环无法退出或者停滞执行,导致业务处理线程无法进行正常业务处理,对此,系统可以创建一个监控进程对业务进程进行心跳监控,业务进程周期向监控进程发送心跳消息,如果监控进程在对该信号进行处理,而发现业务进程心跳丢失,则监控进程向业务进程发出信号,业务进程收到该信号,在信号处理中进行信息采集,记录完成采集的信息后,业务进程退出,由监控进程负责将业务进程重新启动。。
再例如,业务处理机制设计不合理引发的消息风暴等软件系统BUG造成一个业务处理线程占用大量CPU运行时间进行业务处理,从而导致其它业务处理线程无法进行正常业务处理,对此,业务进程可以启动一个监控线程对该业务进程的所有业务线程进行CPU占用率监控,如果一个业务线程的CPU占用率将超过设定阈值,则监控线程向业务处理线程发出信号,业务进程收到该信号,在信号处理中进行信息采集,记录完成采集的信息后,业务进程退出,由监控进程负责将业务进程重新启动。业务进程(或者说,业务进程的主线程,S卩,目标线程的一例)通过信号接管的方式监控上述内核发出的信号、监控进程发出的信号和CPU占用率监控线程发出的信号,并通过对上述信号进行信号处理,获取故障类型、当前的寄存器信息、调用栈信息、线程栈内容、相关业务的数据结构快照等,将这些信息记录到临终遗言中,通过这些信息进行软件故障定位。在进行 上述信号处理时,需要在内存中存储该信号处理中产生的过程变量。因此,在S110,MMU还可以确定该信号处理(具体地说,是存储该信号处理中产生的过程变量)所需要的内存(第二内存容量)。并且,在本发明实施例中,确定该第二内存容量的方法可以与现有技术相似,这里,为了避免赘述,省略其说明。在S120,MMU可以根据如上所述确定的第一内存容量和第二内存容量,从内存空间(具体地说,是栈内存空间中)为该目标线程创建线程栈,以使所创建的线程栈(具体地说,是线程栈的大小)大于或等于上述第一内存容量与第二内存容量之和。并且,在本发明实施例中,所创建的线程栈可以包括空间A (线程存储空间)和空间B (信号存储空间),该空间A用于存储运行目标线程所产生的过程变量,该空间A (具体地说,是空间A的大小)大于或等于该第一内存容量,该空间B用于存储进行该信号处理所产生的过程变量,该空间B (具体地说,是空间B的大小)大于或等于该第二内存容量。可选地,在本发明实施例中,所创建的该线程栈中,该线程存储空间的起始地址与该线程栈的起始地址相同。具体地说,在本发明实施例中,可以使该空间A (在内存中)的起始地址与该线程栈(在内存中)的起始地址相同,相应的,该空间B (在内存中)的起始地址等于该线程栈(在内存中)的起始地址加上空间A的长度(第一内存容量)。即,在本发明实施例中,该空间A可以位于线程栈的栈底侧,空间B可以位于线程栈的栈顶侧。这里,需要说明的是,该“栈底侦Γ和“栈顶侧”是指在线程栈生长方向上的位置。通过使线程存储空间的起始地址与该线程栈的起始地址相同,从而在存储目标线程所产生的过程变量时,可以沿用现有技术的方法进行存储,从而能够提高本发明的信号处理的方法的适用性。应理解,以上列举的线程存储空间与信号存储空间的位置关系仅为示例性说明,本发明并不限定于此,例如,也可以使信号存储空间的起始地址与线程栈的起始地址相同,此情况下,可以通知目标线程存储过程变量的内存的起始地址,例如,该线程存储空间的起始地址相对于该线程栈的起始地址的偏移(与信号存储空间的大小相对应)。从而使目标线程根据该线程存储空间的起始地址,存储过程变量。可选地,在本发明实施例中,所创建的该线程栈还包括属性为只读或不可读写的第一隔离空间,该第一隔离空间位于该线程存储空间和该信号存储空间之间。
具体地说,例如,当软件系统出现递归调用控制变量失效、使用超大局部变量时,该空间A可能出现存储越界(即,应存储在空间A的目标线程的过程变量占用空间B),导致信号处理将引发异常而无法执行,软件故障信息无法采集。对此,在本发明实施例中,可以在空间A和空间B之间设置页保护空间C (第一隔离空间),该页保护空间C的属性可以为只读或者不可读写,从而,当应存储在空间A的目标线程的过程变量的大小超过空间A的大小时,因页保护空间C不可读写而引发异常,从而不会出现空间B被占用的情况,进而能够确保信号处理的进行。需要说明的是,在本发明实施例中,该第一隔离空间C的大小可以任意设定,例如,可以根据操作系统的规定设置,例如,在Linux系统中,可以是4KBytes (千字节)。并且,在本发明实施例中,该页保护空间C位于空间A之上空间B之下,不与该空间B或空间A重叠。可选的,在本发明实施例中,所创建的该线程栈还包括属性为只读或不可读写的第二隔离空间,该第二隔离空间位于该线程栈的栈顶,且该第二隔离空间不与该线程存储空间或该信号存储空间重叠。具体地说,例如,当信号处理产生的过程变量超过如上所述确定的第二内存容量时,可能引发系统故障,因此,可以在该线程栈顶设置一个页保护空间D(第二隔离空间)。该页保护空间D的属性可以为只读或者不可读写,从而,当应存储在空间B的信号处理的过程变量的大小超过空·间B的大小时,因页保护空间D不可读写而引发异常,从而不会引发系统故障。需要说明的是,在本发明实施例中,该第二隔离空间D的大小可以任意设定,例如,可以根据操作系统的规定设置,例如,在Linux系统中,可以是4KBytes (千字节)。并且,在本发明实施例中,该页保护空间D位于空间B之上,不与该空间B重叠。应理解,当空间A位于空间B至上(B卩,空间A位于栈顶侧)时,该页保护空间D位于空间A之上,不与该空间A重叠。图3示出了如上所述配置的线程栈的示意图。如图3所示,根据本发明实施例的信号处理的方法所创建的线程栈包括用于存储目标线程产生的过程变量的空间A、用于存储信号处理产生的过程变量的空间B (位于空间A的沿栈的生长方向的上方)、位于空间A与空间B之间的属性为只读或不可读写的保护页C和位于栈顶(位于空间B的沿栈的生长方向的上方)的属性为只读或不可读写的保护页D。 在S130,MMU在运行该目标线程以实现业务处理时,可以根据空间A的起始地址和大小,将该目标线程产生的过程变量存储在该空间A。并且,在进行信号处理时,可以根据空间B的起始地址和大小,将该信号处理产生的过程变量存储在该空间B。图4示出了本发明实施例的线程栈的创建方法以及使用方法的示意性流程图。如图4所示,在S201,例如,MMU可以根据将如上所述确定的第一内存容量、第二内存容量以及第一隔离空间之和,作为实际分配的线程栈的大小。在S202,MMU可以记录目标线程指定的线程入口函数,以一个通用函数作为目标线程的入口函数,以创建线程栈。在S203,MMU可以获取目标线程的线程存储空间(空间A)起始地址。在S204,MMU可以将线程栈起始地址加上第一内存容量(或者,第一内存容量以及第一隔离空间的大小)的计算结果作为目标线程的信号存储空间(空间B)的起始地址。这里,需要说明的是,由于目标线程的业务数据的存储在系统的堆空间进行,因此保证了信号存储空间不会在业务数据的存储越界而被占用。MMU可以使用,例如,Linux系统提供的线程信号栈设置函数sigaltstack将空间B的起始地址设置到目标线程中。可选的,在S205,MMU可以使用,例如,Linux系统提供的设置内存访问权限的函数mprotect将空间B与空间A之间的保护页空间C(第一隔离空间)设置为只读属性或不可读写属性,进行信号栈与线程栈的隔离区,以在对于空间A的读写越界时,保护空间B不被破坏,此时,由于空间A与空间B是分离的,即使目标线程出现故障,信号处理仍能正常执行。在S206,调用用户指定的目标线程入口函数,以进行过程变量(包括目标线程栈产生的过程变量和信号处理产生的过程变量)的读写。在S207,用户指定的目标线程入口函数执行完毕,退出线程执行,系统内核将会自动回收目标线程的线程栈;由于目标线程的空间B属于系统内核为目标线程分配的线程栈的一部分,因此空间B也会被自动回收,从而,无需创建监控线程Monitor线程监控目标线程并释放其信号存储空间。应理解,以上列举的线程栈的创建方法和过程仅为示例性说明,本发明并不限定于此,例如,在S201的确定实际分配的线程栈的大小时,也可以不计算第一隔离空间,或者还可以计算上述保护页空间D(第二隔离空间)。其他步骤的处理相似,这里,为了避免赘述,省略其说明。根据本发明实施例的信号处理的方法,通过根据需要运行的目标线程和需要进行的信号处理,确定线程栈,使该线程栈包括用于存储该目标线程的过程变量的线程存储空间和用于存储该信号处理的过程变量的信号存储空间,使该线程存储空间的大小大于或等于该线程运行所需要的内存,使该信号存储空间的大小大于或等于该信号处理所需要的内存,能够确保用于存储信号处理的过程变量的存储空间,从而能够确保线程对信号处理的进行。这里,需要说 明的是,在本发明实施例中,在创建线程栈时也可以不区分空间A和空间B,而根据线程栈的起始地址以及第一内存容量,读写目标线程产生的过程变量,而在需要进行信号处理时,在从线程栈中,根据第二内存容量开辟空间B,根据空间B的起始地址以及第二内存容量,读写信号处理产生的过程变量。以上,结合图1至图4详细说明了根据本发明实施例的信号处理的方法,下面,结合图5详细说明根据本发明实施例的信号处理的装置。图5示出了根据本发明实施例的信号处理的装置300的示意性框图。如图5所示,该装置300包括:容量确定单元310,用于确定运行目标线程所需要的第一内存容量以及进行与该目标线程的运行相对应的信号处理所需要的第二内存容量;线程栈创建单元320,用于根据该容量确定单元310确定的该第一内存容量和该第二内存容量,创建该线程栈,其中,该线程栈包括线程存储空间和信号存储空间,该线程存储空间用于存储运行该目标线程所产生的过程变量,该线程存储空间的大小大于或等于该第一内存容量,该信号存储空间用于存储进行该信号处理所产生的过程变量,该信号存储空间的大小大于或等于该第二内存容量;处理单元330,用于在该目标线程进行该信号处理时,在该线程栈创建单元320创建的该信号存储空间中存取该信号处理所产生的过程变量。
可选地,该信号处理包括:对该目标线程出现故障时产生的故障信号的处理;以及该处理单元330具体用于在该线程栈创建单元320创建的该信号存储空间中存取该目标线程对该故障信号进行处理时产生的过程变量。可选地,该线程栈创建单元320创建的该线程栈中,该线程存储空间的起始地址与该线程栈的起始地址相同。可选地,该线程栈创建单元320创建的该线程栈还包括属性为只读或不可读写的第一隔离空间,该第一隔离空间位于该线程存储空间和该信号存储空间之间。可选地,该线程栈创建单元320创建的该线程栈还包括属性为只读或不可读写的第二隔离空间,该第二隔离空间位于该线程栈的栈顶,且该第二隔离空间不与该线程存储空间或该信号存储空间重叠。根据本发明实施例的信号处理的装置300可对应于本发明实施例的方法中的MMU(和/或CUP),并且,该信号处理的装置300中的各单元即模块和上述其他操作和/或功能分别为了实现图2中的方法100的相应流程,为了简洁,在此不再赘述。根据本发明实施例的信号处理的装置,通过根据需要运行的目标线程和需要进行的信号处理,确定线程栈,使该线程栈包括用于存储该目标线程的过程变量的线程存储空间和用于存储该信号处理的过程变量的信号存储空间,使该线程存储空间的大小大于或等于该线程运行所需要的内存,使该信号存储空间的大小大于或等于该信号处理所需要的内存,能够确保用于存储信号处理的过程变量的存储空间,从而能够确保线程对信号处理的进行。以上,结合图1至图4详细说明了根据本发明实施例的信号处理的方法,下面,结合图6详细说明根据本发明实施例的信号处理的设备。
·
图6示出了根据本发明实施例的信号处理的设备400的示意性框图。如图6所示,该设备400包括:总线410 ;与该总线410相连的处理器420 ;与该总线410相连的存储器430 ;其中,该处理器420通过该总线410,调用该存储器430中存储的程序,以用于确定运行目标线程所需要的第一内存容量以及该目标线程进行信号处理所需要的第二内存容量;用于根据该第一内存容量和该第二内存容量,创建线程栈,其中,该线程栈包括线程存储空间和信号存储空间,该线程存储空间用于存储运行该目标线程所产生的过程变量,该线程存储空间的大小大于或等于该第一内存容量,该信号存储空间用于存储进行该信号处理所产生的过程变量,该信号存储空间的大小大于或等于该第二内存容量;用于当该目标线程进行该信号处理时,在该信号存储空间中存取该信号处理所产生的过程变量。可选地,该信号处理包括:对该目标线程出现故障时产生的故障信号的处理;以及该处理器420具体用于在该信号存储空间中存取该目标线程对该故障信号进行处理时产生的过程变量。可选地,该处理器420创建的该线程栈中,该线程存储空间的起始地址与该线程栈的起始地址相同。可选地,该处理器420创建的该线程栈还包括属性为只读或不可读写的第一隔离空间,该第一隔离空间位于该线程存储空间和该信号存储空间之间。可选地,该处理器420创建的该线程栈还包括属性为只读或不可读写的第二隔离空间,该第二隔离空间位于该线程栈的栈顶,且该第二隔离空间不与该线程存储空间或该信号存储空间重叠。应理解,在本发明实施例中,该处理器420可以是存储器管理单元(MMU, MemoryManagement Unit),也可以是中央处理单兀(Central Processing Unit,简称为“CPU”),该处理器420还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。该存储器430可以包括只读存储器和随机存取存储器,并向处理器420提供指令和数据。存储器430的一部分还可以包括非易失性随机存取存储器。例如,存储器430还可以存储设备类型的信息。该总线410除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线410。在实现过程中,上述方法的各步骤可以通过处理器420中的硬件的集成逻辑电路或者软件形式的指令完成。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器430,处理器420读取存储器430中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。根据本发明实施例的信号处理的设备400可对应于本发明实施例的方法中的MMU(和/或CUP),并且,该信号处理的设备400中的各单元即模块和上述其他操作和/或功能分别为了实现图2中的方法100的相应流程,为了简洁,在此不再赘述。根据本发明实施例的信号处理的设备,通过根据需要运行的目标线程和需要进行的信号处理,确定线程栈,使该线程栈包括用于存储该目标线程的过程变量的线程存储空间和用于存储该信号处理的过程变量的信号存储空间,使该线程存储空间的大小大于或等于该线程运行所需要的内存,使该信号存储空间的大小大于或等于该信号处理所需要的内存,能够确保用于存储信号处理的过程变量的存储空间,从而能够确保线程对信号处理的进行。应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程 的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设 备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
权利要求
1.一种信号处理的方法,其特征在于,所述方法包括: 确定运行目标线程所需要的第一内存容量以及所述目标线程进行信号处理所需要的第二内存容量; 根据所述第一内存容量和所述第二内存容量,创建线程栈,其中,所述线程栈包括线程存储空间和信号存储空间,所述线程存储空间用于存储运行所述目标线程所产生的过程变量,所述线程存储空间的大小大于或等于所述第一内存容量,所述信号存储空间用于存储进行所述信号处理所产生的过程变量,所述信号存储空间的大小大于或等于所述第二内存容量; 当所述目标线程进行所述信号处理时,在所述信号存储空间中存取所述信号处理所产生的过程变量。
2.根据权利要求1所述的方法,其特征在于,所述信号处理包括:对所述目标线程出现故障时产生的故障信号的处理;以及 所述在所述信号存储空间中存取所述信号处理所产生的过程变量,包括: 在所述信号存储空间中存取所述目标线程对所述故障信号进行处理时产生的过程变量。
3.根据权利要求1或2所述的方法,其特征在于,所创建的所述线程栈中,所述线程存储空间的起始地址与所述线程栈的起始地址相同。
4.根据权利要 求1至3中任一项所述的方法,其特征在于,所创建的所述线程栈还包括属性为只读或不可读写的第一隔离空间,所述第一隔离空间位于所述线程存储空间和所述信号存储空间之间。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述线程栈还包括属性为只读或不可读写的第二隔离空间,所述第二隔离空间位于所述线程栈的栈顶,且所述第二隔离空间不与所述线程存储空间或所述信号存储空间重叠。
6.一种信号处理的装置,其特征在于,所述装置包括: 容量确定单元,用于确定运行目标线程所需要的第一内存容量以及进行与所述目标线程的运行相对应的信号处理所需要的第二内存容量; 线程栈创建单元,用于根据所述容量确定单元确定的所述第一内存容量和所述第二内存容量,创建所述线程栈,其中,所述线程栈包括线程存储空间和信号存储空间,所述线程存储空间用于存储运行所述目标线程所产生的过程变量,所述线程存储空间的大小大于或等于所述第一内存容量,所述信号存储空间用于存储进行所述信号处理所产生的过程变量,所述信号存储空间的大小大于或等于所述第二内存容量; 处理单元,用于在所述目标线程进行所述信号处理时,在所述线程栈创建单元创建的所述信号存储空间中存取所述信号处理所产生的过程变量。
7.根据权利要求6所述的装置,其特征在于,所述信号处理包括:对所述目标线程出现故障时产生的故障信号的处理;以及 所述处理单元具体用于在所述线程栈创建单元创建的所述信号存储空间中存取所述目标线程对所述故障信号进行处理时产生的过程变量。
8.根据权利要求6或7所述的装置,其特征在于,所述线程栈创建单元创建的所述线程栈中,所述线程存储空间的起始地址与所述线程栈的起始地址相同。
9.根据权利要求6至8中任一项所述的装置,其特征在于,所述线程栈创建单元创建的所述线程栈还包括属性为只读或不可读写的第一隔离空间,所述第一隔离空间位于所述线程存储空间和所述信号存储空间之间。
10.根据权利要求6至9中任一项所述的装置,其特征在于,所述线程栈创建单元创建的所述线程栈还包括属性为只读或不可读写的第二隔离空间,所述第二隔离空间位于所述线程栈的栈顶,且所述第二隔离空间不与所`述线程存储空间或所述信号存储空间重叠。
全文摘要
本发明实施例提供一种信号处理的方法和装置,能够确保信号处理的进行。该方法包括确定运行目标线程所需要的第一内存容量以及该目标线程进行信号处理所需要的第二内存容量;根据该第一内存容量和该第二内存容量,创建线程栈,其中,该线程栈包括线程存储空间和信号存储空间,该线程存储空间用于存储运行该目标线程所产生的过程变量,该线程存储空间的大小大于或等于该第一内存容量,该信号存储空间用于存储进行该信号处理所产生的过程变量,该信号存储空间的大小大于或等于该第二内存容量;当该目标线程进行该信号处理时,在该信号存储空间中存取该信号处理所产生的过程变量。
文档编号G06F11/30GK103246591SQ20131015027
公开日2013年8月14日 申请日期2013年4月26日 优先权日2013年4月26日
发明者张森, 黄伟, 殷罗英 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1