一种突发信号处理方法及系统的制作方法_2

文档序号:9375362阅读:来源:国知局
并将寄存器内的进程执行状态从内核栈复制到用户栈保存;
[0055]步骤A2,操作系统将关联于该突发信号的进程由后台切换至前台运行,同时将指令寄存器中的地址指向预设的信号处理程序的存储地址;
[0056]步骤A3,操作系统根据指令寄存器中的存储地址读取相应的信号处理程序,并在当前运行的进程的框架下对突发信号进行处理;
[0057]步骤A4,突发信号处理完毕后,操作系统将原先正在运行的进程切换回前台继续运行,同时从用户栈将运行状态读取回内核栈的寄存器中,随后退出。
[0058]换言之,现有技术中,在对突发信号进行处理的过程中,通常需要执行进程执行状态保存、进程切换、突发信号处理、进程切换以及执行状态恢复等过程,整个突发信号处理的过程非常复杂,并且时效性较低,处理效率不足。
[0059]本发明的较佳的实施例中,基于现有技术中存在的上述问题,现提供一种突发信号处理方法,该方法具体如图2所示,包括:
[0060]步骤SI,操作系统产生突发信号,并将被产生的突发信号的相关数据发送至共享数据链表的尾部保存;
[0061]步骤S2,信号处理线程从共享数据链表的头部读取被保存的突发信号的相关数据;
[0062]步骤S3,信号处理线程根据被读取的突发信号的相关数据进行相应处理并输出相应的处理结果;
[0063]步骤S4,操作系统根据处理结果,对相应的进程进行相应操作,随后退出。
[0064]在具体实施例中,上述突发信号处理方法中,操作系统的内核首先产生相应的突发信号,随后并将该突发信号发送至一共享数据链表(结构如图6所示)中保存。同时,操作系统按照存储顺序读取该共享数据链表中保存的一个突发信号,并将其送入当前正在运行的进程中独立设置的一个信号处理线程中进行处理(该信号处理线程独立于进程中其他所有线程),随后将处理结果反馈到该突发信号对应的进程中(例如当前正在运行的进程,或者是在后台保留的进程),因此能够保证该突发信号可以在相应的进程被切换之前就被调度处理,从而保证了突发信号处理的时效性。
[0065]例如,操作系统根据外部的输入产生一个需要关闭某个进程的突发信号(例如处于后台的某个进程),则在当前运行的进程内设置一个信号处理线程。操作系统产生上述突发信号后将其送入共享数据链表中保存。等到该突发信号轮到被调用时,操作系统从共享数据链表中将其读取出来,并送入当前正在运行的进程中设置的独立的信号处理线程中进行处理,随后输出相应的处理结果。则关联于该突发信号的进程在被切换至前台运行时即可以根据该处理结果执行相应的操作。
[0066]本发明的较佳的实施例中,于当前正在运行的进程中,上述独立设置的信号处理线程的调度优先级要高于该进程中的其他所有线程,即保证信号处理线程被优先调用来处理突发信号,并输出相应的处理结果。
[0067]本发明的较佳的实施例中,于上述共享数据链表中,提供多个存储节点。每两个相邻的存储节点之间相互连接,从而形成上述共享数据链表。进一步地,本发明的较佳的实施例中,上述操作系统每产生一个突发信号,就将该突发信号的相关数据保存至共享数据链表的尾部。而当上述信号处理线程提取突发信号的相关数据并进行处理时,该信号处理线程从共享数据链表的头部提取相关数据并进行处理。
[0068]进一步地,本发明的较佳的实施例中,于上述共享数据链表中设置有多个存储节点,每个存储节点用于存放一个突发信号的相关数据。则当操作系统产生突发信号并进行保存操作时,于共享数据链表的尾部形成一个连接之前存储节点的新的存储节点,并将新产生的突发信号的相关数据保存在新产生的存储节点中。
[0069]相应地,本发明的较佳的实施例中,当信号处理线程从共享数据链表的头部取走相应的突发信号的相关数据后,原本保存该突发信号的相关数据的存储节点被从共享数据链表中删除,同时将该被删除的存储节点之后连接的一个存储节点设置为共享数据链表的头部O
[0070]综上所述,生产者(例如操作系统的内核)产生突发信号,并从共享数据链表的尾部依次存入被产生的突发信号的相关数据。同时消费者(例如信号处理线程)从共享数据链表的头部依次读取保存的突发信号的相关数据并进行处理。上述保存/读取操作按照突发信号的存储顺序进行。
[0071]本发明的较佳的实施例中,在操作系统的内核产生一个突发信号并将其保存于共享数据链表中时,操作系统的内核向信号处理线程发出一个通知,以通知该信号处理线程,在共享数据链表中存在新的突发信号。
[0072]本发明的较佳的实施例中,在执行上述步骤S2之前,首先执行如图3所示的下述步骤:
[0073]步骤S21,判断操作系统中是否开启相应的突发信号处理功能;
[0074]若突发信号处理功能被开启,则继续执行步骤S2,以采用信号处理线程对突发信号进行相应处理;
[0075]若突发信号处理功能未被开启,则依照现有的突发信号处理流程进行处理,随后退出。
[0076]在具体实施例中,于操作系统中增加一个判断过程,即判断操作系统中的信号处理函数是否被修改过(即是否开启相应的突发信号处理功能):
[0077]I)若信号处理函数未被修改过(即没有开启相应的突发信号处理功能),则操作系统按照现有的流程处理突发信号,即按照上文中所述的步骤A1-A4的流程处理突发信号;
[0078]2)若信号处理函数被修改过(即已经开启相应的突发信号处理功能),则操作系统按照本发明技术方案中的流程处理突发信号,即继续执行上述步骤S2。
[0079]换言之,本发明的较佳的实施例中,在操作系统产生一个突发信号后,即开始判断是否执行传统的突发信号处理流程:若是,则执行步骤A1-A4,若否,则继续执行步骤S2-S4o
[0080]本发明的一个较佳的实施例中,上述步骤S21中,若判断为第二种情况,即需要采用本发明技术方案中的流程处理突发信号,则接下来可能循环的突发信号处理流程中不再需要进行判断,即上述判断可以只执行一次。
[0081]本发明的较佳的实施例中,上述信号处理线程通过与共享数据链表之间的数据调用接口,调用相应的突发信号的相关数据并处理。
[0082]本发明的较佳的实施例中,基于上文中所述的突发信号处理方法,现提供一种突发信号处理系统,其结构具体如图4所示,包括:
[0083]处理单元1,用于处理当前正在运行的进程的相关操作;
[0084]存储单元2,连接处理单元I。本发明的较佳的实施例中,存储单元2中包括一共享数据链表(如图6所示),用于按照产生顺序排列保存不同的突发信号的相关数据;
[0085]信号产生单元3,连接存储单元2。本发明的较佳的实施例中,信号产生单元3用于产生突发信号,并将突发信号的相关数据发送至存储单元,以保存在共享数据链表的尾部。则本发明的较佳的实施例中,上述信号产生单元3可以为操作系统的内核单元。
[0086]进一步地,本发明的较佳的实施例中,如图5所示,上述处理单元I具体包括:
[0087]第一处理模块11,用于处理当前正在运行的进程中的一个独立的信号处理线程的相关操作;
[0088]第二处理模块12,用于处理当前正在运行的进程中除去信号处理线程的其他线程的相关操作;
[0089]本发明的较佳的实施例中,第二处理模块12从存储单元中提取保存于共享数据链表中的头部的突发信号的相关数据并进行处理,输出相应的处理结果;
[0090]则本发明的较佳的实施例中,上述处理单元I根据处理结果,对相应的进程进行相应操作。
[0091]换言之,本发明的较佳的实施例中,于处理进程的程序中设定一个独立的信号处理线程,采用上述第二处理模块12单独处理该信号处理线程的相关数据,而采用上述第一处理模块11处理除了该信号处理线程之外的进程内其他线程的相关数据。
[0092]本发明的较佳的实施例中,如上文中,上述信号处理线程的调度优先级高于当前正在运行的进程中的其他所有
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1