CN114327980A - 获取线程崩溃地址的方法及装置 - Google Patents

获取线程崩溃地址的方法及装置 Download PDF

Info

Publication number
CN114327980A
CN114327980A CN202111614413.5A CN202111614413A CN114327980A CN 114327980 A CN114327980 A CN 114327980A CN 202111614413 A CN202111614413 A CN 202111614413A CN 114327980 A CN114327980 A CN 114327980A
Authority
CN
China
Prior art keywords
thread
crash
address
cpu
preset
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111614413.5A
Other languages
English (en)
Inventor
董广谱
孙凌丽
贾峰
王全利
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Hollysys Co Ltd
Original Assignee
Beijing Hollysys Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Hollysys Co Ltd filed Critical Beijing Hollysys Co Ltd
Priority to CN202111614413.5A priority Critical patent/CN114327980A/zh
Publication of CN114327980A publication Critical patent/CN114327980A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本申请公开了一种获取线程崩溃地址的方法及装置,该方法包括:用户空间的IEC运算线程定期判断是否发生了线程崩溃;当判断发生了线程崩溃后,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址。该方法及装置使用户能够自动获取到线程的崩溃地址。

Description

获取线程崩溃地址的方法及装置
技术领域
本申请涉及计算机技术领域,尤指一种获取线程崩溃地址的方法及装置。
背景技术
PLC控制器广泛应用于过程控制领域,是十分重要的自动化控制设备。和利时公司基于国产MIPS架构处理器研发了高安全的微内核操作系统内核(简称微内核),该微内核运行在CPU的内核空间。和利时公司基于该微内核开发了PLC控制器软件,该PLC控制器软件运行在CPU的用户空间。
根据PLC控制器软件需求,当发生线程崩溃时必须提供线程崩溃的地址以进一步分析和定位问题。但是,PLC控制器软件运行在用户态,使用虚拟内存,且无法访问微内核的内存。该微内核在内核空间只提供线程管理、进程间通信(IPC)、虚拟内存空间、句柄空间、设备基础单元(中断对象)五项极其原始的功能,微内核能够识别线程的崩溃地址,但无法访问PLC控制器软件的内存。上述两点导致发生线程崩溃时微内核无法将线程崩溃的地址通过内存传递给PLC控制器软件。
申请内容
本申请提供了一种用户空间获取线程崩溃地址的方法及装置,能够使用户自动获取到线程的崩溃地址。
本申请提供的一种获取线程崩溃地址的方法,包括:
用户空间的IEC运算线程定期判断是否发生了线程崩溃;
当判断发生了线程崩溃后,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址。
一种示例性的实施例中,在获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址之前,包括:
用户空间对所述CPU的特定外设进行初始化;
在用户空间接收到线程崩溃通知后,将所读取的线程的崩溃地址存入预设的第一用户全局变量;并给预设的线程崩溃标志赋值;
其中,所述线程崩溃通知是在如下情况下产生的:微内核在完成初始化过程后,当发生线程崩溃时,将所述线程的崩溃地址写入CPU的特定外设的寄存器,并产生中断以通知用户空间发生了线程崩溃。
一种示例性的实施例中,所述微内核的初始化包括:
所述微内核的初始线程对所述CPU的特定外设进行初始化,并通过预设的第一内核全局变量记录所述特定外设的访问地址。
一种示例性的实施例中,包括:
所述微内核将所述线程的崩溃地址写入CPU的特定外设的寄存器,包括:
所述微内核从异常程序计数器的寄存器读取所述线程的崩溃地址并存入操作系统的任务控制块中;
通过调用地址写入函数将所保存的线程的崩溃地址写入CPU的特定外设的寄存器。
一种示例性的实施例中,所述通过调用地址写入函数将所记录的线程的崩溃地址写入CPU的特定外设的寄存器,包括:
所述地址写入函数的入口参数包括预设的第一内核全局变量、预设的第一参数和预设的第二参数,所述第二参数是所述特定外设的寄存器偏移量;所述地址写入函数将所述任务控制块中保存的线程的崩溃地址赋给所述预设的第一参数,将所述预设的第一参数的值写入到预设的第一内核全局变量的值与所述预设的第二参数的值之和对应的地址。
一种示例性的实施例中,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址,包括:
通过读取所述预设的第一用户全局变量获取崩溃处理线程所读取的线程的崩溃地址。
一种示例性的实施例中,用户空间的IEC运算线程定期判断是否发生了线程崩溃,包括:
用户空间的IEC运算线程定期通过所述预设的线程崩溃标志判断是否发生了线程崩溃。
一种示例性的实施例中,将所读取的线程的崩溃地址存入预设的第一用户全局变量之后,还包括:
将所读取的线程的崩溃地址记录到日志中,以通过人工获取线程的崩溃地址。
一种示例性的实施例中,所述CPU的特定外设的寄存器包括所述CPU的DES外设的寄存器。
本申请提供的一种获取线程崩溃地址的装置,包括存储器和处理器,
所述存储器,用于保存用于获取线程崩溃地址的程序;
所述处理器,用于读取执行所述用于获取线程崩溃地址的程序,执行如下操作:
用户空间的IEC运算线程定期判断是否发生了线程崩溃;
当判断发生了线程崩溃后,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址。
一种示例性的实施例中,在获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址之前,包括:
用户空间对所述CPU的特定外设进行初始化;
在用户空间接收到线程崩溃通知后,将所读取的线程的崩溃地址存入预设的第一用户全局变量;并给预设的线程崩溃标志赋值;
其中,所述线程崩溃通知是在如下情况下产生的:微内核在完成初始化过程后,当发生线程崩溃时,将所述线程的崩溃地址写入CPU的特定外设的寄存器,并产生中断以通知用户空间发生了线程崩溃。
一种示例性的实施例中,所述微内核的初始化包括:
所述微内核的初始线程对所述CPU的特定外设进行初始化,并通过预设的第一内核全局变量记录所述特定外设的访问地址。
一种示例性的实施例中,包括:
所述微内核将所述线程的崩溃地址写入CPU的特定外设的寄存器,包括:
所述微内核从异常程序计数器的寄存器读取所述线程的崩溃地址并存入操作系统的任务控制块中;
通过调用地址写入函数将所保存的线程的崩溃地址写入CPU的特定外设的寄存器。
一种示例性的实施例中,所述通过调用地址写入函数将所记录的线程的崩溃地址写入CPU的特定外设的寄存器,包括:
所述地址写入函数的入口参数包括预设的第一内核全局变量、预设的第一参数和预设的第二参数,所述第二参数是所述特定外设的寄存器偏移量;所述地址写入函数将所述任务控制块中保存的线程的崩溃地址赋给所述预设的第一参数,将所述预设的第一参数的值写入到预设的第一内核全局变量的值与所述预设的第二参数的值之和对应的地址。
一种示例性的实施例中,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址,包括:
通过读取所述预设的第一用户全局变量获取崩溃处理线程所读取的线程的崩溃地址。
一种示例性的实施例中,用户空间的IEC运算线程定期判断是否发生了线程崩溃,包括:
用户空间的IEC运算线程定期通过所述预设的线程崩溃标志判断是否发生了线程崩溃。
一种示例性的实施例中,将所读取的线程的崩溃地址存入预设的第一用户全局变量之后,还包括:
将所读取的线程的崩溃地址记录到日志中,以通过人工获取线程的崩溃地址。
一种示例性的实施例中,所述CPU的特定外设的寄存器包括所述CPU的DES外设的寄存器。
本申请至少一个实施例,通过微内核将所述线程的崩溃地址写入微内核和用户空间都可以访问的CPU的特定外设的寄存器,能够使用户自动获取到线程的崩溃地址。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的其他优点可通过在说明书以及附图中所描述的方案来实现和获得。
附图说明
附图用来提供对本申请技术方案的理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
图1为本申请实施例的获取线程崩溃地址的方法的流程图;
图2为本申请实施例的PLC控制器结构框图;
图3为本申请实施例的线程崩溃地址记录总体的流程图;
图4为本申请实施例的获取线程崩溃地址的装置的示意图。
具体实施方式
图1为本申请实施例的获取线程崩溃地址的方法的流程图,如图1所示,本实施例的获取线程崩溃地址的方法,包括S11-S12步骤:
S11、用户空间的IEC运算线程定期判断是否发生了线程崩溃;
S12、当判断发生了线程崩溃后,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址。
一种示例性的实施例中,在获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址之前,包括:
用户空间对所述CPU的特定外设进行初始化;
在用户空间接收到线程崩溃通知后,将所读取的线程的崩溃地址存入预设的第一用户全局变量;并给预设的线程崩溃标志赋值;
其中,所述线程崩溃通知是在如下情况下产生的:微内核在完成初始化过程后,当发生线程崩溃时,将所述线程的崩溃地址写入CPU的特定外设的寄存器,并产生中断以通知用户空间发生了线程崩溃。
一种示例性的实施例中,所述微内核的初始化包括:
所述微内核的初始线程对所述CPU的特定外设进行初始化,并通过预设的第一内核全局变量记录所述特定外设的访问地址。
一种示例性的实施例中,所述微内核将所述线程的崩溃地址写入CPU的特定外设的寄存器,包括:
所述微内核从异常程序计数器的寄存器读取所述线程的崩溃地址并存入操作系统的任务控制块中;
通过调用地址写入函数将所保存的线程的崩溃地址写入CPU的特定外设的寄存器。
一种示例性的实施例中,所述通过调用地址写入函数将所记录的线程的崩溃地址写入CPU的特定外设的寄存器,包括:
所述地址写入函数的入口参数包括预设的第一内核全局变量、预设的第一参数和预设的第二参数,所述预设的第二参数的值是所述特定外设的寄存器偏移量;所述地址写入函数将所述任务控制块中保存的线程的崩溃地址赋给所述预设的第一参数,将所述预设的第一参数的值写入到预设的第一内核全局变量的值与所述预设的第二参数的值之和对应的地址。
一种示例性的实施例中,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址,包括:
通过读取所述预设的第一用户全局变量获取崩溃处理线程所读取的线程的崩溃地址。
一种示例性的实施例中,用户空间的IEC运算线程定期判断是否发生了线程崩溃,包括:
用户空间的IEC运算线程定期通过所述预设的线程崩溃标志判断是否发生了线程崩溃。
一种示例性的实施例中,将所读取的线程的崩溃地址存入预设的第一用户全局变量之后,还包括:
将所读取的线程的崩溃地址记录到日志中,以通过人工获取线程的崩溃地址。
一种示例性的实施例中,所述CPU的特定外设的寄存器包括所述CPU的DES外设的寄存器。DES外设一般用于加解密。在其他一些实施例中,所述CPU的特定外设的寄存器也可以是微内核和PLC控制器软件均未使用的外设寄存器。
本申请实施例通过微内核将所述线程的崩溃地址写入CPU的特定外设的寄存器,用户空间的崩溃处理线程从所述CPU的特定外设的寄存器读取线程的崩溃地址并存入全局变量,使得用户空间的IEC运算线程可以获取到线程的崩溃地址,从而使用户可以自动获取到线程的崩溃地址。
为了很好的理解申请内容,下面以基于微内核操作系统的将线程崩溃地址从微内核传递到PLC控制器软件的实现方法来具体说明。
本申请设计的崩溃地址记录功能,主要修改了微内核操作系统内核、初始线程、崩溃处理线程、IEC运算线程四部分。其中微内核操作系统内核对应图2PLC控制器结构框图之部件12微内核操作系统内核;初始线程对应图2PLC控制器结构框图之部件15初始线程;崩溃处理线程对应图1PLC控制器结构框图之部件20崩溃处理线程;IEC运算线程线程对应图1PLC控制器结构框图之部件26IEC运算线程。
本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能,难点在于找到一种有效的从微内核向PLC控制器软件传递信息的通道。在32为cpu上,线程的崩溃地址就是线程崩溃时的pc指针,该pc指针只有4个字节(每字节8位,共32位)。由于微内核操作系统只提供了五项极其原始的功能,未提供从微内核向用户空间传递用户信息的方法和接口函数,导致这四个字节难以从微内核传递给PLC控制器软件。具体分为如下2方面:
其一,微内核无法借助内存将该崩溃地址传递给PLC控制器软件。微内核运行在内核空间,PLC控制器软件运行在用户空间,二者都是虚拟地址,且地址不可见,不存在微内核和PLC控制器软件共享内存的通道和接口函数。虽然微内核可以捕获到线程的崩溃地址,但微内核无法借助内存将该崩溃地址传递给PLC控制器软件,导致PLC控制器软件无法获得线程的崩溃地址。
其二,微内核无法借助cpu寄存器将该崩溃地址传递给PLC控制器软件。Mips体系架构的cpu总共有32个寄存器,其中k0、k1、at寄存器是专门留给os和编译器使用,用户不使用,其它寄存器在用户程序中都可能被用到。这其中k0、k1是专门给os使用的,主要用途是上下文切换或者TLB异常时做临时变量。at寄存器主要给编译器使用,一些伪指令编译时如果需要临时寄存器则可以用at。综上所述,cpu寄存器各有所用,如果使用cpu寄存器传递线程的崩溃地址,将导致微内核一些十分底层的汇编功能发生错误,得不偿失。
由于微内核无法借助内存将该崩溃地址传递给PLC控制器软件,并且微内核无法借助cpu寄存器将该崩溃地址传递给PLC控制器软件,本申请结合微内核操作系统和PLC控制器软件的特点,使用cpu特定外设寄存器作为从微内核向PLC控制器软件传递线程崩溃地址的通道,实现了线程崩溃地址从微内核向PLC控制器软件传递的需求。论证过程如下:
微内核可以访问串口打印一些调试信息,说明微内核能够访问cpu的某些外设;PLC控制器软件也可以向串口打印一些调试信息,且该功能不依赖微内核,说明PLC控制器软件也能够访问cpu的某些外设。由此判断微内核和PLC控制器软件都可以访问cpu的某些外设。如果存在某个cpu外设,微内核可以访问,PLC控制器也可以访问,而且该外设通常不会使用,对该外设的某个寄存器的读写不会改变cpu的功能,并且该寄存器是32位的,则该外设的该寄存器可以作为从微内核向PLC控制器软件传递线程崩溃地址的通道。针对和利时公司基于龙芯处理器和微内核操作系统开发的PLC控制器软件,查阅龙芯处理器的手册,逐个检查龙芯外设,判读是否满足上述要求。龙芯处理器有一个外设用于加解密,称为DES外设,目前微内核和PLC控制器软件均未使用。DES外设的寄存器0是一个32位寄存器,用于保存密钥。对DES外设的寄存器0读写不会改变cpu的功能,且写入的值与读出的值是一致的。如果微内核和PLC控制器软件都可以访问到龙芯处理器的DES外设,则龙芯处理器的DES外设的寄存器0可以作为从微内核向PLC控制器软件传递线程崩溃地址的通道。修改微内核和PLC控制器软件的初始化代码,然后尝试访问DES外设的寄存器0,均可以访问。综上所述,龙芯处理器的DES外设的寄存器0可以作为从微内核向PLC控制器软件传递线程崩溃地址的通道。
本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能,对微内核操作系统内核的改动包括2点。当微内核初始化时,参照串口的初始化过程,加入龙芯处理器的DES外设的初始化,使微内核可以访问该DES外设。当线程发生崩溃时,微内核将线程的崩溃地址记录到龙芯处理器的DES外设的寄存器0中,并继续运行。
本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能,对初始线程的修改为:当位于用户空间的初始线程初始化时,参照串口的初始化过程,加入龙芯处理器的DES外设的初始化,使用户空间可以访问该DES外设。
本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能,对崩溃处理线程的改动包括5点。当崩溃处理线程运行时,它首先从龙芯处理器的DES外设的寄存器0中读取崩溃地址,然后调用日志接口将该地址记录到日志文件中,接着将该崩溃地址记录到全局变量中,并标记发生了线程崩溃。崩溃处理线程同时提供了一个接口函数供更上层用户调用以获取线程的崩溃地址。
本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能,IEC运算线程的修改为:IEC运算线程调用崩溃处理线程提供的接口函数,获取是否发生线程崩溃、线程崩溃的具体地址2项信息。
本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能,线程崩溃地址记录的总体流程如图3所示。当发生崩溃时,微内核将崩溃地址记录到特定外设的寄存器;崩溃处理线程从特定外设寄存器读取崩溃地址并保存到全局变量;IEC运算线程通过接口函数获取线程的崩溃地址。
除此之外,文件系统的底层是flash及其驱动,上层是文件管理,再上层是各类文件(包括日志文件)。微内核操作系统的内核里面没有文件系统,没法写入日志。微内核也看不到应用层的日志文件。用户空间把崩溃地址写入日志,PLC控制器软件还可以读取日志(读取日志是既有功能,未做修改),通过人工获取线程的崩溃地址,方便出现问题的时候定位问题。比如可以记录崩溃的大概时间、控制器长期运行时如果发生多次崩溃可以通过日志看到。IEC运算线程获取到的那个崩溃地址是当前发生的线程的崩溃地址。
本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能实现方法及其实现,增加了一组函数,如下所示:
void os_ker_write_epc_to_reg(char*paddr,unsigned int off,unsigned intval);
unsigned int os_app_read_epc_from_reg(char*paddr,unsigned int off);
void os_app_set_thread_fault_flag(void);
unsigned int os_api_get_thread_fault_flag(void);
unsigned int os_api_get_epc_addr(void);
os_ker_write_epc_to_reg实现线程崩溃地址往DES外设寄存器写入功能,由微内核调用。参数paddr是微内核初始化DES外设记录的访问地址(即上述的预设的第一内核全局变量);参数val是线程的崩溃地址(即上述预设的第一参数),参数off是寄存器偏移量(即上述预设的第二参数),目前等0。os_ker_write_epc_to_reg函数直接将val写入paddr+off,即写入到DES外设的寄存器0。
内核可以捕获到任何线程的崩溃地址。因为线程崩溃之后会自动触发cpu异常从而进入内核,此时cpu的epc(exception program counter,异常程序计数器)寄存器里面保存的就是崩溃地址。Val就是崩溃时epc寄存器的值。
os_app_read_epc_from_reg实现线程崩溃地址从DES外设寄存器读入功能,由崩溃处理线程调用。参数paddr是位于用户空间的初始线程初始化时DES外设时记录的访问地址;参数off是寄存器偏移量,目前等0;函数的返回值是线程的崩溃地址。os_app_read_epc_from_reg直接从paddr+off读取4字节数值并返回该数值。
此处需要注意的是,微内核运行在内核空间且使用虚拟地址,PLC控制器软件运行在用户空间且使用虚拟地址,虽然os_ker_write_epc_to_reg和os_app_read_epc_from_reg都在访问同一个DES外设,但二者的第一个参数是不一样的(两者用的是两个不同的虚拟地址(一个是内核态的虚地址,就是0x80000000之上地址,另一个是用户态虚拟地址,就是0x80000000之下地址,虚拟地址是动态映射的),内核写的是物理地址对应的虚拟地址(内核映射的),用户读取的是物理地址对应的虚拟地址(用户调用os函数再次映射的),两次映射得到的虚拟地址是不一样的,但是都指向了同一个物理地址)。
os_app_set_thread_fault_flag设置发生了线程崩溃,由崩溃处理线程调用。os_app_set_thread_fault_flag直接设置线程崩溃标志为TRUE(1),线程崩溃标志上电默认为FALSE(0)。
os_api_get_thread_fault_flag接口函数用于返回是否发生线程崩溃,由IEC运算线程调用。该函数直接返回崩溃处理线程记录的崩溃标志,其中1表示发生了崩溃;0表示未发生崩溃。
os_api_get_epc_addr接口函数用于返回线程崩溃地址,由IEC运算线程调用。该函数直接返回崩溃处理线程记录的崩溃地址。
需要说明的是,崩溃处理线程实现OS底层的支撑功能,IEC线程是PLC的用户接口,这里面读取的数据,用户在pc机的界面可以看到(通过PLC的通讯协议)。
和利时公司基于龙芯LS2K1000双核处理器研发了微内核,并在此基础上研发PLC控制器软件。PLC控制器软件要求能够记录和获取线程的崩溃地址,该微内核操作系统未提供从微内核向用户空间传递用户数据的方法和接口函数,导致PLC控制器软件无法获取线程的崩溃地址。
本申请围绕微内核的特点,通过龙芯处理器的DES外设的寄存器0,将线程崩溃地址从微内核传递给了PLC控制器软件,满足了产品的功能要求。本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能撇弃基于内存和cpu寄存器的传递路径,采用特定外设寄存器做为传递路径,逻辑清晰,绕开了微内核操作系统的很多限制和困境,避免了对微内核的大范围改动。本申请设计的基于微内核操作系统的PLC控制器的线程崩溃地址记录功能增加了一组函数集,该函数集实现相对简单。
图4为本申请实施例的获取线程崩溃地址的装置的示意图,如图4所示,本申请实施例提出的一种获取线程崩溃地址的装置,包括存储器和处理器,
所述存储器,用于保存用于获取线程崩溃地址的程序;
所述处理器,用于读取执行所述用于获取线程崩溃地址的程序,执行上述的获取线程崩溃地址的方法。
本申请描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
本申请包括并设想了与本领域普通技术人员已知的特征和元件的组合。本申请已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的申请方案。任何实施例的任何特征或元件也可以与来自其它申请方案的特征或元件组合,以形成另一个由权利要求限定的独特的申请方案。因此,应当理解,在本申请中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本申请实施例的精神和范围内。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

Claims (10)

1.一种获取线程崩溃地址的方法,其特征在于,
用户空间的IEC运算线程定期判断是否发生了线程崩溃;
当判断发生了线程崩溃后,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址。
2.如权利要求1所述的方法,在获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址之前,包括:
用户空间对所述CPU的特定外设进行初始化;
在用户空间接收到线程崩溃通知后,将所读取的线程的崩溃地址存入预设的第一用户全局变量;并给预设的线程崩溃标志赋值;
其中,所述线程崩溃通知是在如下情况下产生的:微内核在完成初始化过程后,当发生线程崩溃时,将所述线程的崩溃地址写入CPU的特定外设的寄存器,并产生中断以通知用户空间发生了线程崩溃。
3.如权利要求2所述的方法,所述微内核的初始化包括:
所述微内核的初始线程对所述CPU的特定外设进行初始化,并通过预设的第一内核全局变量记录所述特定外设的访问地址。
4.如权利要求3所述的方法,包括:
所述微内核将所述线程的崩溃地址写入CPU的特定外设的寄存器,包括:
所述微内核从异常程序计数器的寄存器读取所述线程的崩溃地址并存入操作系统的任务控制块中;
通过调用地址写入函数将所保存的线程的崩溃地址写入CPU的特定外设的寄存器。
5.如权利要求4所述的方法,所述通过调用地址写入函数将所记录的线程的崩溃地址写入CPU的特定外设的寄存器,包括:
所述地址写入函数的入口参数包括预设的第一内核全局变量、预设的第一参数和预设的第二参数,所述第二参数是所述特定外设的寄存器偏移量;所述地址写入函数将所述任务控制块中保存的线程的崩溃地址赋给所述预设的第一参数,将所述预设的第一参数的值写入到预设的第一内核全局变量的值与所述预设的第二参数的值之和对应的地址。
6.如权利要求2所述的方法,获取用户空间的崩溃处理线程从CPU的特定外设的寄存器读取的线程的崩溃地址,包括:
通过读取所述预设的第一用户全局变量获取崩溃处理线程所读取的线程的崩溃地址。
7.如权利要求2所述的方法,用户空间的IEC运算线程定期判断是否发生了线程崩溃,包括:
用户空间的IEC运算线程定期通过所述预设的线程崩溃标志判断是否发生了线程崩溃。
8.如权利要求2所述的方法,将所读取的线程的崩溃地址存入预设的第一用户全局变量之后,还包括:
将所读取的线程的崩溃地址记录到日志中,以通过人工获取线程的崩溃地址。
9.如权利要求1-8中任一项所述的方法,包括:
所述CPU的特定外设的寄存器包括所述CPU的DES外设的寄存器。
10.一种获取线程崩溃地址的装置,包括存储器和处理器,其特征在于:
所述存储器,用于保存用于获取线程崩溃地址的程序;
所述处理器,用于读取执行所述用于获取线程崩溃地址的程序,执行如权利要求1-9任一项所述的方法。
CN202111614413.5A 2021-12-27 2021-12-27 获取线程崩溃地址的方法及装置 Pending CN114327980A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111614413.5A CN114327980A (zh) 2021-12-27 2021-12-27 获取线程崩溃地址的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111614413.5A CN114327980A (zh) 2021-12-27 2021-12-27 获取线程崩溃地址的方法及装置

Publications (1)

Publication Number Publication Date
CN114327980A true CN114327980A (zh) 2022-04-12

Family

ID=81012048

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111614413.5A Pending CN114327980A (zh) 2021-12-27 2021-12-27 获取线程崩溃地址的方法及装置

Country Status (1)

Country Link
CN (1) CN114327980A (zh)

Similar Documents

Publication Publication Date Title
US6907510B2 (en) Mapping of interconnect configuration space
RU2556419C2 (ru) Способ и компьютерная система для выполнения команды запуска субканала в вычислительной среде
EP1939754B1 (en) Providing protected access to critical memory regions
US7036122B2 (en) Device virtualization and assignment of interconnect devices
US4812981A (en) Memory management system improving the efficiency of fork operations
US7526578B2 (en) Option ROM characterization
Lampson et al. An open operating system for a single-user machine
US5784625A (en) Method and apparatus for effecting a soft reset in a processor device without requiring a dedicated external pin
RU2559765C2 (ru) Применение косвенных адресных слов данных расширенной схемы асинхронного перемещения данных
JP2002517034A (ja) エミュレーションコプロセッサ
US7558724B2 (en) Operation region describing a virtual device
WO2000033170A1 (en) Method of communication between firmware written for different instruction set architectures
US5873124A (en) Virtual memory scratch pages
US5822784A (en) Mechanism supporting execute in place read only memory applications located on removable computer cards
US10261895B2 (en) System and method for transferring execution of a computer program
CN114153779A (zh) 一种i2c通信方法、系统、设备、及存储介质
US11226755B1 (en) Core dump in a storage device
US6907521B2 (en) Enabling video BIOS and display drivers to leverage system BIOS platform abstract
US20060047858A1 (en) ROM scan memory expander
US7293207B2 (en) Method for testing memory in a computer system utilizing a CPU with either 32-bit or 36-bit memory addressing
US7568061B2 (en) Initializing expansion adapters installed in a computer system having similar expansion adapters
US10437523B2 (en) Secure receive packet processing for network function virtualization applications
US6202145B1 (en) System and method for eliminating a ring transition while executing in protected mode
CN114327980A (zh) 获取线程崩溃地址的方法及装置
US7017035B2 (en) Method and apparatus for using an ACPI NVS memory region as an alternative CMOS information area

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination