具体实施方式
为了使本发明的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是所有实施例的穷举。
首先需要说明的是,Intel的处理器是通过Ring级别来进行访问控制的,级别共分4层:RING0、RING1、RING2、RING3。RING0层拥有最高的权限,RING3层拥有最低的权限。按照Intel原有的构想,应用程序工作在RING3层,只能访问RING3层的数据;操作系统工作在RING0层,可以访问所有层的数据;而其他驱动程序位于RING1、RING2层,每一层只能访问本层以及权限更低层的数据。但现在的OS,包括Windows和Linux只是使用2层——RING0层和RING3层,分别来存放操作系统数据和应用程序数据,驱动程序(包括设备驱动和非设备驱动)都运行在RING0级。
由于RING0级的程序拥有很高的权限,RING0级程序可以直接和硬件资源进行通讯,并且计算机的运行环境(包括软件环境和硬件环境)相对比较复杂,可能导致RING0级程序因为兼容性问题出现错误并最终出现死机等故障。例如,在计算机上安装的驱动程序与相应的硬件设备不匹配导致的兼容性问题,从而造成的死机现象。本领域技术人员可以理解,所述死机即是指操作系统无法从一个系统错误中恢复过来而不得不重新启动系统的现象。
当计算机由于上述原因出现死机问题时,重启系统时当执行到上次导致计算机死机的那部分程序时依然会出现死机问题,从而导致计算机会连续出现死机的现象,导致无法正常启动系统。
基于此,本发明实施例提供了一种控制RING0级程序执行的方法。
如图1所示,本发明一个实施例提供的控制RING0级程序执行的方法包括以下步骤:
步骤101、在执行RING0级程序的子程序前,获取该子程序的日志,该日志用于指示该子程序在前次执行中是否存在异常。
需要说明的是,RING0级程序包括至少一个子程序。
在本发明实施例中,在RING0级程序执行时,通过日志的方式记录RING0级程序的执行情况,那么在下一次RING0级程序执行,能够通过日志获取到RING0级程序之前的执行情况,进而了解RING0级程序各子程序的执行情况,即能够通过之前的日志记录,判断出子程序在之前的执行过程中是否存在异常。
具体的,可以通过增加监控RING0级程序运行情况的模块/代码,并将RING0级程序运行情况写入日志,通过用日志文件的形式,在程序运行过程中记录RING0级程序的各子程序执行的情况。
需要说明的是RING0级程序的各子程序的日志可以分别记录在不同的日志文件中,也可以记录在同一个整体的日志文件中,当记录在同一个整体的日志文件中时,从整体的日志文件中获取记录当前子程序执行情况的日志部分。
可以理解的是,如果RING0级程序的子程序能够正常执行,那么该子程序必须经过执行开始和执行结束的过程,因此在本发明实施例中,作为一种可选方式,可以通过在日志中记录是否同时具有执行开始和执行结束来指示子程序执行的是否存在异常,如果子程序的日志中记录有执行开始和与该执行开始匹配的执行结束时,表明该子程序是正常执行的,而当子程序的日志中只记录有执行开始,而没有记录执行结束时,说明子程序没有被正常执行,而是存在异常。因此在子程序的日志记录有执行开始,且没有记录执行结束时,子程序的日志指示该子程序在前次执行中存在异常。
具体的,本步骤中,如果没有获取到该子程序的日志或者该子程序的日志中关于该子程序的前次执行未有相关记录,将认为该子程序的日志未指示该子程序在前次执行中存在异常。
步骤102、在该子程序的日志指示该子程序在前次执行中存在异常时,不执行该子程序,执行该RING0级程序的下一子程序。
可以理解的是,在本发明实施例中,针对RING0级程序的各个子程序,在子程序执行前,都需要根据日志确定在前次执行过程中是否存在异常,当存在异常时,跳过当前子程序,即不去执行当前的这个前次执行存在异常的子程序,而去执行RING0级程序的下一子程序。当然,本领域技术人员可以理解的是,所去执行的下一子程序也需要经过日志的判断,确定出该下一子程序是否在前次执行存在异常,如果未存在异常,将执行该下一子程序,而如果存在异常,进而执行该下一子程序的下一个子程序。也即是说,本发明实施例中,针对RING0级程序的每个子程序,都通过日志的记录进行前次执行异常的判断,进而,在本次执行中,跳过所有前次执行存在异常的子程序,而仅执行前次执行未存在异常的子程序,从而有效避免由于异常的子程序的执行,而导致无法正常进入操作系统的问题。
在本发明实施例中,作为一种可选方式,在该子程序的日志未指示该子程序在前次执行中存在异常时,执行该子程序,并在该子程序开始执行时,在该子程序的日志中记录执行开始;在该子程序执行结束时,在该子程序的日志中记录执行结束,从而通过日志记录该子程序本次的执行情况,为后续该子程序的再次执行提供日志参考。具体而言,在该子程序的日志未指示该子程序在前次执行中存在异常时包括两种情况:一种情况是,该子程序的日志并不存在,在这种情况下,在开该子程序开始执行时,重新建立该子程序的日志,在该子程序开始执行时,在该子程序的日志中记录执行开始,在该子程序执行结束时,在该子程序的日志中记录执行结束;另一种情况是,该子程序的日志已经存在,但是子程序的日志没有记录该子程序在前次执行中是否存在异常,在这种情况下,即在该子程序开始执行时,在该子程序的日志中记录执行开始,在该子程序执行结束时,在该子程序的日志中记录执行结束。
显然,由于执行了该RING0级程序,可以在该RING0级程序的执行过程中,根据各子程序的执行情况,在已有前次日志记录的情况下,更新子程序日志,将子程序本次执行情况记录在日志中。
进一步需要说明的是,本发明实施例中所提供的控制RING0级程序执行的方法,可以应用在计算机启动过程中,在计算机启动过程中,通常会执行RING0级程序,而如果之前是由于RING0级程序执行异常而导致的计算机重启,那么这计算机启动过程中,应用本发明实施例所提供的控制RING0级程序执行的方法,即可有效避免由于RING0级程序执行异常而导致的频繁死机重启的现象。
具体的,在本发明的一个实施例中,该RING0级程序在计算机启动过程中开始执行,为了使能够尽快修复执行异常的子程序,使计算机的功能完善,在计算机启动完成后,即计算机正常进入到操作系统后,可以进一步根据RING0级程序的子程序的日志确定该RING0级程序是否存在程序执行异常;在存在异常时,反馈RING0级程序的子程序的日志,以便及时分析子程序存在异常的原因以及针对该异常原因的解决方案。举例而言,可以在计算机启动完成后,将RING0级程序的子程序的日志反馈给RING3级驻留程序,通过RING3级驻留程序根据RING0级程序的子程序的日志确定RING0级程序是否存在程序执行异常,当存在异常时,可以通过网络将日志发送给服务器,由服务器端的专业人员对异常原因进行分析,给出相应的解决方案。
在本发明实施例中,在反馈RING0级程序的子程序的日志后,还可以包括:接收并显示RING0级程序执行的异常原因和/或解决方案等,以便将异常原因和/或解决方案提供给用户,使得用户可以根据异常原因和/或解决方案来解决所出现的问题。
举例而言,在异常原因为系统驱动程序与硬件(如显卡)不匹配时,返回的RING0级程序执行的解决方案中可以包括与该硬件匹配的驱动程序信息,例如,解决方案中包括驱动程序的名称、版本号、下载链接等信息,以使用户根据解决方案中给出的信息下载并安装合适的驱动程序。
本发明实施例提供的控制RING0级程序执行的方法,通过在执行RING0级程序的子程序时,对RING0级程序的子程序日志文件进行检查,如果该日志文件指示该子程序在前次执行中存在异常,那么标志着该子程序上一次未正常执行,该子程序可能是导致系统死机的程序,此时直接执行RING0级程序的下一子程序。通过该方式来跳过那些可能导致系统死机的子程序,执行其他后续正常的子程序,能够利用缺失部分子程序的功能来换取系统的顺利启动,有效避免计算机死机重启过程中出现的连续死机现象,从而解决不能正常启动系统的问题。
为了便于本发明的实施,下面以具体实施例对本发明进行说明。
假设一个RING0程序包括A、B、C、D四个子程序(也即包括四个功能模块或4个步骤)。
在执行每个子程序前,获取该子程序的日志。比如,在执行子程序A前,获取子程序A的日志,子程序A的日志用于指示子程序A在前次执行中是否存在异常。
在子程序A的日志记录有执行开始,且没有记录执行结束时,子程序A的日志指示子程序A在前次执行中存在异常。这时,不执行子程序A,执行RING0级程序的下一子程序,也即子程序B;
在子程序A的日志没有指示子程序A在前次执行中存在异常时,则执行子程序A,并在子程序A开始执行时,则在子程序A的日志中记录执行开始;执行子程序A的功能代码,待子程序A执行完毕后,在子程序A的日志中记录执行结束,也可以在子程序A执行完毕时,再在子程序A的日志中记录执行开始和执行结束。
对于后续子程序B、C、D,每个子程序执行时都和上述执行子程序A的执行方法类似。
在RING0级程序在计算机启动过程中开始执行,在计算机启动完成后,也即在计算机正常进入操作系统后,为了完善跳过执行的子程序的功能,RING3级驻留程序会对RING0级程序的子程序的日志进行分析,如果发现RING0级程序执行异常,则反馈RING0级程序的子程序的日志,可以通过网络发送日志到服务器,以便专业技术人员分析频繁死机的原因,并给出解决问题的建议。例如,如果异常原因是驱动程序与当前计算机的硬件设备不匹配的原因造成的频繁死机,可以将这个原因反馈给用户,并向用户推荐匹配的驱动程序,以便用户更新驱动程序;如果是某一软件与操作内核不兼容导致的死机,可以提示用户修正此软件等等。
本发明的技术方案,通过在执行RING0级程序的子程序前,对RING0级程序的子程序日志文件进行检查,如果日志指示前次执行存在异常,那么标志着该子程序上一次未正常执行,该子程序有可能是导致系统死机的程序,此时直接执行RING0级程序的下一子程序。通过该方式来跳过那些可能导致系统死机的子程序,执行其他后续正常的子程序,利用缺失部分子程序的功能来换取系统的顺利启动,从而能够防止连续死机,解决导致不能正常启动系统的问题。
基于同一发明构思,本发明实施例还提供了一种控制RING0级程序执行的装置,由于这些设备解决问题的原理与一种控制RING0级程序执行的方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。
图2为控制RING0级程序执行的装置的结构示意图,如图2所示,所述装置可以包括:
获取模块201,用于在执行RING0级程序的子程序前,获取该子程序的日志,该日志用于指示该子程序在前次执行中是否存在异常;
执行模块202,用于在该子程序的日志指示该子程序在前次执行中存在异常时,不执行该子程序,执行RING0级程序的下一子程序。
实施中,在该子程序的日志中记录有执行开始,且没有记录执行结束时,确定该子程序的日志指示该子程序在前次执行中存在异常。
实施中,执行模块202还可以用于在该子程序的日志未指示该子程序在前次执行中存在异常时,执行该子程序,并在该子程序开始执行时,在该子程序的日志中记录执行开始,在该子程序执行结束时,在该子程序的日志中记录执行结束。
实施中,RING0级程序在计算机启动过程中开始执行,所述装置进一步包括:分析模块,用于在计算机启动完成后,根据RING0级程序的子程序的日志确定该RING0级程序是否存在程序执行异常;在存在异常时,反馈该RING0级程序的子程序的日志。
实施中,分析模块具体用于通过RING3级驻留程序根据该RING0级程序的子程序的日志确定RING0级程序是否存在程序执行异常。
实施中,所述装置进一步包括:显示模块,用于反馈RING0级程序的各子程序的日志之后,接收并显示RING0级程序执行的异常原因和/或解决方案等。
实施中,在异常原因为驱动程序与硬件不匹配时,所述解决方案中包括与所述硬件匹配的驱动程序信息。
上述实施例中,均可以采用现有的功能元器件模块来实施。例如,获取模块可以采用现有的数据处理元器件,只要是具备接收日志功能的元器件即可;执行模块进行的执行操作等采用的都是现有的技术手段,只要可以执行计算机程序的数据处理元器件都可以实施;同时,分析模块可以采用现有的各种分析手段,本领域技术人员经过相应的设计开发即可实现;显示模块则是任意一个具备通信功能的设备都具备的元器件。
为了描述的方便,以上所述装置的各部分以功能分为各种模块或单元分别描述。当然,在实施本发明时可以把各模块或单元的功能在同一个或多个软件或硬件中实现。
本发明通过文件形式对RING0级程序执行的子程序进行写日志操作,遇到死机时重启后根据日志对那些死机的子程序跳过执行,待计算机启动后通过RING3级别的驻留程序把日志发送到服务器的方法来解决RING0程序兼容问题或BUG等造成频繁重启问题。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上实施例仅用以说明本发明的技术方案,而非对其进行限制。因此,在不背离本发明的精神及其实质的情况下,本领域技术人员可作出各种改变、替换和变型。很显然,但这些改变、替换和变型都应涵盖于本发明权利要求的保护范围之内。