一种计算机设备系统启动加速的方法和装置制造方法

文档序号:6519271阅读:152来源:国知局
一种计算机设备系统启动加速的方法和装置制造方法
【专利摘要】本发明公开了一种电子设备(特别是计算机设备)系统(特别是操作系统)启动加速的方法和装置,所述方法包括以下步骤:在电子设备启动时,创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据;将预读取线程读取的预读取数据缓存到电子设备的内存中,以供操作系统启动时读取;以及在操作系统启动过程中,利用预读取线程继续读取预读取数据,并且接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停预读取线程的读取。
【专利说明】一种计算机设备系统启动加速的方法和装置
【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其涉及一种电子设备(特别是计算机设备)系统(特别是操作系统)启动加速的方法和装置。
【背景技术】
[0002]伴随着信息技术的不断发展,人们生活节奏不断加快,人们对自己生活、学习和工作不可或缺的助手一各种电子设备,例如计算机的速度也不断提出新的要求。如何加快电子设备操作系统的启动速度一直是人们所关注的问题。
[0003]磁盘读取速度被认为是影响操作系统启动速度的一个重要因素。操作系统启动时,需要从磁盘中读取启动所需的大量文件,这些文件零散地分布在磁盘中,操作系统只能通过分散的请求和偏移一次一次地读取这些文件。例如,某些操作系统启动时,操作系统从磁盘读取数据的请求队列有上千个请求排队,如果此时操作系统再发出新的请求,会根据其偏移排在队列的适当位置,一般是队尾,导致系统启动很慢。
[0004]一种加快操作系统启动速度的做法是启动时禁用不需要的软件。在操作系统启动时,由于系统需要加载很多应用程序,通过禁用系统启动时没必要启动的软件,例如,将第三方安装的软件,用户用不到的打印,远程登陆等服务等应用,对系统启动速度进行优化。这通常是用户层通过修改配置文件,来实现系统启动的加速,需要解析数据结构,其加速效果不明显。

【发明内容】

[0005]鉴于上述问题,提出了本发明,以便提供一种克服上述问题或者至少部分地解决上述问题的电子设备操作系统启动加速的方法和装置。
[0006]依据本发明的第一方面,提供了一种电子设备操作系统启动加速的方法,包括以下步骤:在电子设备启动时,创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据;将预读取线程读取的预读取数据缓存到电子设备的内存中,以供操作系统启动时读取;以及在操作系统启动过程中,利用预读取线程继续读取预读取数据,并且接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停预读取线程的读取。
[0007]可选地,在根据本发明的实施例的电子设备操作系统启动加速的方法中,还包括步骤:记录操作系统启动的信息,并且基于信息以及用于之前一次或多次操作系统启动的预先定义的预读取数据,生成用于之后一次或多次操作系统启动的预先定义的预读取数据,并且按照系统启动时读取的优先级对所述预先定义的预读取数据中的数据进行排序。
[0008]可选地,在根据本发明的实施例的电子设备操作系统启动加速的方法中,还包括步骤:检测磁盘碎片整理时数据移动的情况,并且根据数据移动的情况,重新生成用于之后一次或多次操作系统启动的预先定义的预读取数据。
[0009]可选地,在根据本发明的实施例的电子设备操作系统启动加速的方法中,操作系统启动的信息包括操作系统启动所花费的时间、操作系统从内存中读取所缓存的预读取数据的情况。
[0010]可选地,在根据本发明的实施例的电子设备操作系统启动加速的方法中,利用预读取线程读取预读取数据的步骤包括:在小于或等于预先定义的读取时间间隔的情况下,利用两个读取请求按照磁盘排序和磁盘偏移同时读取两个文件;以及在大于预先定义的读取时间间隔的情况下,利用两个读取请求按照操作系统启动时处理文件的时间顺序先后读取两个文件。
[0011]可选地,在根据本发明的实施例的电子设备操作系统启动加速的方法中,还包括步骤:在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在操作系统未从磁盘中获取到数据的情况下,利用预读取线程读取数据,并将数据缓存到内存中以供操作系统读取。
[0012]可选地,在根据本发明的实施例的电子设备操作系统启动加速的方法中,还包括步骤:在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在检测到操作系统仍在读取地址偏移连续的数据的情况下,保持暂停所述预读取线程的读取,直到检测到操作系统读取地址偏移不连续的数据。
[0013]可选地,在根据本发明的实施例的电子设备操作系统启动加速的方法中,还包括步骤:在检测到操作系统对磁盘进行自检时,暂停所述预读取线程读取所述预读取数据,直到检测到磁盘自检结束。
[0014]可选地,在根据本发明的实施例的电子设备操作系统启动加速的方法中,还包括步骤:在接收到操作系统从磁盘中读取数据的请求时,在检测到操作系统要从磁盘中读取的数据中的部分包括在所述预读取数据中的情况下,将这部分的数据缓存到内存中以供操作系统读取;并且在预先定义的时间段后,在操作系统未从磁盘中获取到其它部分的数据的情况下,利用预读取线程读取所述其它部分的数据,并将所述其它部分的数据缓存到内存中以供操作系统读取。
[0015]依据本发明的第二方面,提供了一种电子设备操作系统启动加速的装置,包括:预读取模块,用于在电子设备启动时,创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据;缓存模块,用于将预读取模块读取的预读取数据缓存到电子设备的内存中,以供操作系统启动时读取,预读取模块在操作系统启动过程中,利用预读取线程继续读取预读取数据,并且接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停预读取线程的读取。
[0016]可选地,在根据本发明的实施例的电子设备操作系统启动加速的装置中,还包括:预读取数据生成模块,用于记录操作系统启动的信息,并且基于信息以及用于之前一次或多次操作系统启动的预先定义的预读取数据,生成用于之后一次或多次操作系统启动的预先定义的预读取数据。
[0017]可选地,在根据本发明的实施例的电子设备操作系统启动加速的装置中,还包括:磁盘碎片整理检测模块,用于检测磁盘碎片整理时数据移动的情况,预读取数据生成模块根据磁盘碎片整理检测模块检测到的数据移动的情况,重新生成用于之后一次或多次操作系统启动的预先定义的预读取数据。
[0018]可选地,在根据本发明的实施例的电子设备操作系统启动加速的装置中,操作系统启动的信息包括操作系统启动所花费的时间、操作系统从内存中读取所缓存的预读取数据的情况。
[0019]可选地,在根据本发明的实施例的电子设备操作系统启动加速的装置中,预读取模块用于:在小于或等于预先定义的读取时间间隔的情况下,利用两个读取请求按照磁盘排序和磁盘偏移同时读取两个文件;以及在大于预先定义的读取时间间隔的情况下,利用两个读取请求按照操作系统启动时处理文件的时间顺序先后读取两个文件。
[0020]可选地,在根据本发明的实施例的电子设备操作系统启动加速的装置中,预读取模块用于在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在操作系统未从磁盘中获取到数据的情况下,利用预读取线程读取数据,并且缓存模块用于将数据缓存到内存中以供操作系统读取。
[0021]可选地,在根据本发明的实施例的电子设备操作系统启动加速的装置中,所述预读取模块在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在检测到操作系统仍在读取地址偏移连续的数据的情况下,保持暂停所述预读取线程的读取,直到检测到操作系统读取地址偏移不连续的数据。
[0022]可选地,在根据本发明的实施例的电子设备操作系统启动加速的装置中,所述预读取模块在检测到操作系统对磁盘进行自检时,暂停所述预读取线程读取所述预读取数据,直到检测到磁盘自检结束。
[0023]可选地,在根据本发明的实施例的电子设备操作系统启动加速的装置中,所述预读取模块在接收到操作系统从磁盘中读取数据的请求时,在检测到操作系统要从磁盘中读取的数据中的部分包括在所述预读取数据中的情况下,将这部分的数据缓存到内存中以供操作系统读取;并且在预先定义的时间段后,在操作系统未从磁盘中获取到其它部分的数据的情况下,所述预读取模块利用预读取线程读取所述其它部分的数据,并将所述其它部分的数据缓存到内存中以供操作系统读取。
[0024]本发明提供了上述电子设备操作系统启动加速的方法和装置。根据本发明的实施例,能够在电子设备启动时,操作系统启动前,创建预读取线程,尽可能早地将操作系统启动所需要的数据读取出来,并缓存到内存中以供操作系统启动时使用,避免了磁盘请求队列阻塞,从而使操作系统启动加速;根据本发明的实施例,能够通过一次或少数几次从磁盘中读取出操作系统启动所需的预读取数据,将其合并成一个数据块并缓存到内存中,加快了操作系统启动的速度;根据本发明的实施例,预读取线程从磁盘中读取数据与操作系统从内存中读取数据能够同时进行,减少了操作系统启动所需的时间;根据本发明的实施例,通过对预读取线程从磁盘中读取数据、操作系统从内存中读取数据、以及操作系统从磁盘中读取数据的请求的适当安排,并且在需要时暂停预读取线程从磁盘中读取数据,为操作系统从磁盘读取数据让路,能够实现快速读取数据,同时满足操作请求的时序性。
[0025]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。
【专利附图】

【附图说明】
[0026]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0027]图1是根据本发明的实施例的电子设备操作系统启动加速的方法的流程图;以及
[0028]图2是根据本发明的实施例的电子设备操作系统启动加速的装置的结构示意图。
【具体实施方式】
[0029]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0030]在本发明的实施例中,电子设备可以是计算机、移动电话、平板电脑、视频播放器、电子阅读器、数码相框等。本发明的原理适用于任何电子设备的操作系统,包括、但不限于:计算机的Windows、Linux、Mac OS、Unix等桌面操作系统;移动电话、平板电脑、视频播放器、电子阅读器、数码相框的iOS、Android、Windows Phone、Symbian等移动操作系统。
[0031]在下文中,将以计算机作为电子设备的例子、以Windows作为操作系统的例子,对本发明的原理进行示例性地描述。然而,这只是为了以具体的示例描述本发明,以帮助读者理解本发明的原理,本发明的范围不限于此,而是可以适用于任何电子设备和任何操作系统。
[0032]图1示出了根据本发明的实施例的电子设备操作系统启动加速的方法的流程图。
[0033]如图1所示,所述方法100始于步骤S110,在步骤SllO中,在电子设备启动时,创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据。
[0034]根据本发明的实施例,可以在计算机启动时、即BOOT驱动初始化时,从注册表中获取预先定义的预读取数据的信息(例如这些数据的偏移地址),并且创建预读取线程,在磁盘设备附加好后,利用该预读取线程按照从注册表获取到的预读取数据的信息,开始从磁盘中读取所述预先定义的预读取数据。由于预读取线程与操作系统是并发运行的,且预读取线程先于操作系统运行,因此操作系统启动所要读取的数据会尽可能早地被预读取线程读取出来。
[0035]可选地,所述磁盘可以是任何类型的用于在电子设备中实现存储功能的磁性存储设备,包括、但不限于:普通硬盘、混合式硬盘、固态硬盘等等。而所述磁盘采用各种格式的文件系统,包括、但不限于:FAT、FAT32、NTFS等等。
[0036]如图1所示,在步骤SlOl之后,执行步骤S103,其中,将所述预读取线程读取的所述预读取数据缓存到电子设备的内存中,以供操作系统启动时读取。
[0037]可选地,所述内存可以采用半导体存储单元,包括、但不限于:随机存储器(RAM)、只读存储器(ROM)、高速缓冲存储器(Cache)等等。一般来说,内存具有比磁盘更快的读写速度。在电子设备的运行过程中,一般会将程序和数据从磁盘调入到内存中来进行操作和处理。
[0038]在步骤S103之后,可以执行步骤S105,其中,在操作系统启动过程中,利用所述预读取线程继续读取所述预读取数据,并且接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停所述预读取线程的读取。
[0039]在步骤S105中,在操作系统开始启动(一般要在读取系统驱动文件之后再进行)之后,继续利用所述预读取线程读取所述预读取数据,即,在操作系统启动后从内存中读取所述预读取数据的同时,预读取线程并发地继续读取所述预读取数据。预读取线程在系统底层操作,不需要解析数据结构,即使在操作系统存在读取阻塞的情况下,预读取线程仍然可以正常读取数据。操作系统在读取文件系统元数据和文件碎片数据时,会将请求和偏移分散着一次一次读取,速度非常慢,而根据本发明的方案,预读取线程可以在底层将要读取的数据合并为一个数据块,从磁盘中一次性地(或者用很少的次数)将数据读取出来。
[0040]根据本发明的实施例,在上述步骤SlOl和S105中,利用预读取线程读取所述预读取数据的步骤可以包括:在小于或等于预先定义的读取时间间隔的情况下,利用两个读取请求按照磁盘排序和磁盘偏移同时读取两个文件;以及在大于预先定义的读取时间间隔的情况下,利用两个读取请求按照操作系统启动时处理文件的时间顺序先后读取两个文件。
[0041]在现有技术方法中,例如微软公司的操作系统Windows XP,采用磁盘请求队列的方式读取数据,往往会存在上千个请求排队,此时,如果系统的主线程发出请求,就会根据其偏移排在适当的位置,往往都是在队尾。根据本发明的方案,尽量将系统要读取的数据利用预读取线程提前读取并缓存到内存中,并采取上述方式避免队列阻塞。即,在小于或等于预先定义的读取时间间隔的情况下,利用两个读取请求按照磁盘排序和磁盘偏移同时读取两个文件,此时系统时间间隔很短,无需考虑时间顺序。而在大于预先定义的读取时间间隔的情况下,利用两个读取请求按照操作系统启动时处理文件的时间顺序先后读取两个文件,这主要是按照系统初始化时处理文件的顺序来进行读取。
[0042]可选地,所述预先定义的时间间隔可以根据实际需要来选取,一个示例可以是200毫秒。在预先定义的时间间隔是200毫秒的情况下,如果第一毫秒访问文件A,第二毫秒访问文件B,则可以一起读出这两个文件;而如果第一秒访问文件A,第二秒访问文件B,则需要按照时间顺序进行处理。按照上述方式,在接收到请求时,可以保证只有两个请求在排队。由于请求只能一个一个地进行处理,因此磁盘队列中存在两个请求与存在上千个请求对于磁盘IO的吞吐量是一样的。
[0043]如果操作系统在启动过程中,发现所述预读取线程缓存到内存的预读取数据之外的数据中没有所需的数据,此时操作系统会向磁盘请求读取数据,在上述步骤S105中,在接收到操作系统从磁盘中读取数据的请求时,可以在预先定义的时间段内暂停所述预读取线程的读取,例如暂停30毫秒,这样,就可以保证操作系统能够及时读取到数据,而不会因磁盘队列问题被堵塞。当然,本领域技术人员可以根据实际需要来选择上述预先定义的时间段,本发明的范围不仅限于30毫秒。
[0044]可选地,根据本发明的一个实施例,方法100还可以包括以下步骤:在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在操作系统未从磁盘中获取到所述数据的情况下,利用预读取线程读取所述数据,并将所述数据缓存到内存中以供操作系统读取。仍以30毫秒的预先定义的时间段为例,在暂停所述预读取线程的读取达30毫秒之后,如果此时操作系统仍未从磁盘中获取到所需的数据,则可以利用预读取线程读取所述数据,并将所述数据缓存到内存中以供操作系统读取。
[0045]可选地,根据本发明的一个实施例,方法100还可以包括以下步骤:在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在检测到操作系统仍在读取地址偏移连续的数据的情况下,保持暂停所述预读取线程的读取,直到检测到操作系统读取地址偏移不连续的数据。操作系统在连续读取磁盘中地址偏移连续的数据时,磁头连续移动,读取效率较高,此时,不便打断操作系统的读取,而一旦检测到操作系统读取地址偏移不连续的数据,则可以停止操作系统的读取,恢复预读取线程对于磁盘的读取。
[0046]可选地,根据本发明的一个实施例,方法100还可以包括以下步骤:在检测到操作系统对磁盘进行自检时,暂停所述预读取线程读取所述预读取数据,直到检测到磁盘自检结束。如果在操作系统对磁盘进行自检时,所述预读取线程仍读取预读取数据,则可能会导致磁盘自检异常,因此此时需要暂停所述预读取线程读取所述预读取数据。
[0047]可选地,根据本发明的一个实施例,方法100还可以包括以下步骤:在接收到操作系统从磁盘中读取数据的请求时,在检测到操作系统要从磁盘中读取的数据中的部分包括在所述预读取数据中的情况下,将这部分的数据缓存到内存中以供操作系统读取;并且在预先定义的时间段后,在操作系统未从磁盘中获取到其它部分的数据的情况下,利用预读取线程读取所述其它部分的数据,并将所述其它部分的数据缓存到内存中以供操作系统读取。具体来说,操作系统要从磁盘读取的数据可能会存在部分已经包括预读取数据中、而其它部分未包括在其中的情况,此时,可以将该部分数据缓存到内存中以供操作系统读取,而在预先定义的时间段(例如如上所述的30毫秒)后,在操作系统未从磁盘中获取到其它部分的数据的情况下,就可以利用预读取线程读取所述其它部分的数据,并将所述其它部分的数据缓存到内存中以供操作系统读取。由此,完成了一个数据读取请求切割的过程。
[0048]可选地,在本发明的一个实施例中,上述方法100还可以包括以下步骤:记录操作系统启动的信息,并且基于所述信息以及用于之前一次或多次操作系统启动的预先定义的预读取数据,生成用于之后一次或多次操作系统启动的预先定义的预读取数据,并且按照系统启动时读取的优先级对所述预先定义的预读取数据中的数据进行排序。其中,所述操作系统启动的信息包括操作系统启动所花费的时间、操作系统从内存中读取所缓存的预读取数据的情况(例如,缓存的预读取数据命中操作系统请求的比例)。例如,可以基于上述操作系统启动的信息以及例如前三次操作系统启动的预读取数据,来生成用于之后的操作系统启动的预读取数据。优选地,在生成预读取数据时,既要保证能够快速读取,又要在操作系统请求之前将所需的数据读取出来。
[0049]可选地,在本发明的一个实施例中,所述方法100还可以包括步骤:检测磁盘碎片整理时数据移动的情况,并且根据所述数据移动的情况,重新生成用于之后一次或多次操作系统启动的预先定义的预读取数据。由于预读取线程是根据磁盘偏移与大小来读取预读取数据的,因此在用户执行磁盘碎片整理操作之后,原有数据的磁盘偏移可能会发生改变,导致预读取线程无法正确读取到预读取数据。此时,利用上述可选步骤,可以在检测到磁盘碎片整理时数据移动的情况下,根据数据移动来重新生成正确的预读取数据,以用于之后的操作系统启动。
[0050]与上述方法100相对应,本发明还提供了一种电子设备操作系统启动加速的装置200。图2是根据本发明的实施例的电子设备操作系统启动加速的装置的结构示意图。
[0051]如图2所示,所述装置200主要包括预读取模块201以及缓存模块203。根据本发明的实施例,所述预读取模块201用于在电子设备启动时,创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据;所述缓存模块203用于将所述预读取模块读取的所述预读取数据缓存到电子设备的内存中,以供操作系统启动时读取。所述预读取模块201在操作系统启动过程中,利用所述预读取线程继续读取所述预读取数据,并且接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停所述预读取线程的读取。可选地,所述预读取模块201可以用于执行上述方法100中的步骤SlOl以及S105,而所述缓存模块203可以用于执行上述方法100中的步骤S103。
[0052]根据本发明的实施例,在电子设备启动时,所述预读取模块201创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据。根据本发明的实施例,所述预读取模块201可以在计算机启动时、即BOOT驱动初始化时,从注册表中获取预先定义的预读取数据的信息(例如这些数据的偏移地址),并且创建预读取线程,在磁盘设备附加好后,所述预读取模块201利用该预读取线程按照从注册表获取到的预读取数据的信息,开始从磁盘中读取所述预先定义的预读取数据。由于预读取线程与操作系统是并发运行的,且预读取线程先于操作系统运行,因此操作系统启动所要读取的数据会尽可能早地被所述预读取模块201利用预读取线程读取出来。
[0053]可选地,所述磁盘可以是任何类型的用于在电子设备中实现存储功能的磁性存储设备,包括、但不限于:普通硬盘、混合式硬盘、固态硬盘等等。而所述磁盘采用各种格式的文件系统,包括、但不限于:FAT、FAT32、NTFS等等。
[0054]之后,所述缓存模块203将所述预读取线程读取的所述预读取数据缓存到电子设备的内存中,以供操作系统启动时读取。
[0055]可选地,所述内存可以采用半导体存储单元,包括、但不限于:随机存储器(RAM)、只读存储器(ROM)、高速缓冲存储器(Cache)等等。一般来说,内存具有比磁盘更快的读写速度。在电子设备的运行过程中,一般会将程序和数据从磁盘调入到内存中来进行操作和处理。
[0056]接下来,在操作系统启动过程中,所述预读取模块201利用所述预读取线程继续读取所述预读取数据,并且在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停所述预读取线程的读取。
[0057]其中,在操作系统开始启动(一般要在读取系统驱动文件之后再进行)之后,所述预读取模块201继续利用所述预读取线程读取所述预读取数据,即,在操作系统启动后从内存中读取所述预读取数据的同时,所述预读取模块201利用预读取线程并发地继续读取所述预读取数据。所述预读取模块201利用预读取线程在系统底层操作,不需要解析数据结构,即使在操作系统存在读取阻塞的情况下,所述预读取模块201仍然可以利用预读取线程正常读取数据。操作系统在读取文件系统元数据和文件碎片数据时,会将请求和偏移分散着一次一次读取,速度非常慢,而根据本发明的方案,所述预读取模块201可以利用预读取线程在底层将要读取的数据合并为一个数据块,从磁盘中一次性地(或者用很少的次数)将数据读取出来。
[0058]根据本发明的实施例,在上述操作中,所述预读取模块201在利用预读取线程读取所述预读取数据时,在小于或等于预先定义的读取时间间隔的情况下,所述预读取模块201可以利用两个读取请求按照磁盘排序和磁盘偏移同时读取两个文件;而在大于预先定义的读取时间间隔的情况下,所述预读取模块201可以利用两个读取请求按照操作系统启动时处理文件的时间顺序先后读取两个文件。
[0059]在现有技术方法中,例如微软公司的操作系统Windows XP,采用磁盘请求队列的方式读取数据,往往会存在上千个请求排队,此时,如果系统的主线程发出请求,就会根据其偏移排在适当的位置,往往都是在队尾。根据本发明的方案,所述预读取模块201尽量将系统要读取的数据利用预读取线程提前读取并缓存到内存中,并采取上述方式避免队列阻塞。即,在小于或等于预先定义的读取时间间隔的情况下,所述预读取模块201利用两个读取请求按照磁盘排序和磁盘偏移同时读取两个文件,此时系统时间间隔很短,无需考虑时间顺序。而在大于预先定义的读取时间间隔的情况下,所述预读取模块201利用两个读取请求按照操作系统启动时处理文件的时间顺序先后读取两个文件,这主要是按照系统初始化时处理文件的顺序来进行读取。
[0060]可选地,所述预先定义的时间间隔可以根据实际需要来选取,一个示例可以是200毫秒。在预先定义的时间间隔是200毫秒的情况下,如果第一毫秒访问文件A,第二毫秒访问文件B,则可以一起读出这两个文件;而如果第一秒访问文件A,第二秒访问文件B,则需要按照时间顺序进行处理。按照上述方式,在接收到请求时,可以保证只有两个请求在排队。由于请求只能一个一个地进行处理,因此磁盘队列中存在两个请求与存在上千个请求对于磁盘IO的吞吐量是一样的。
[0061]如果操作系统在启动过程中,发现所述预读取线程缓存到内存的预读取数据之外的数据中没有所需的数据,此时操作系统会向磁盘请求读取数据,在接收到操作系统从磁盘中读取数据的请求时,所述预读取模块201可以在预先定义的时间段内暂停所述预读取线程的读取,例如暂停30毫秒,这样,就可以保证操作系统能够及时读取到数据,而不会因磁盘队列问题被堵塞。当然,本领域技术人员可以根据实际需要来选择上述预先定义的时间段,本发明的范围不仅限于30毫秒。
[0062]可选地,根据本发明的一个实施例,在所述预读取模块201接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在操作系统未从磁盘中获取到所述数据的情况下,所述预读取模块201利用预读取线程读取所述数据,并将所述数据缓存到内存中以供操作系统读取。仍以30毫秒的预先定义的时间段为例,在所述预读取模块201暂停所述预读取线程的读取达30毫秒之后,如果此时操作系统仍未从磁盘中获取到所需的数据,则所述预读取模块201可以利用预读取线程读取所述数据,并将所述数据缓存到内存中以供操作系统读取。
[0063]可选地,根据本发明的一个实施例,所述预读取模块201可以在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在检测到操作系统仍在读取地址偏移连续的数据的情况下,保持暂停所述预读取线程的读取,直到检测到操作系统读取地址偏移不连续的数据。操作系统在连续读取磁盘中地址偏移连续的数据时,磁头连续移动,读取效率较高,此时,所述预读取模块201不便打断操作系统的读取,而一旦检测到操作系统读取地址偏移不连续的数据,则所述预读取模块201可以停止操作系统的读取,恢复预读取线程对于磁盘的读取。
[0064]可选地,根据本发明的一个实施例,所述预读取模块201可以在检测到操作系统对磁盘进行自检时,暂停所述预读取线程读取所述预读取数据,直到检测到磁盘自检结束。如果在操作系统对磁盘进行自检时,所述预读取模块201仍利用所述预读取线程读取预读取数据,则可能会导致磁盘自检异常,因此此时需要暂停所述预读取模块201利用所述预读取线程读取所述预读取数据。
[0065]可选地,根据本发明的一个实施例,所述预读取模块201可以在接收到操作系统从磁盘中读取数据的请求时,在检测到操作系统要从磁盘中读取的数据中的部分包括在所述预读取数据中的情况下,将这部分的数据缓存到内存中以供操作系统读取;并且在预先定义的时间段后,在操作系统未从磁盘中获取到其它部分的数据的情况下,所述预读取模块201利用预读取线程读取所述其它部分的数据,并将所述其它部分的数据缓存到内存中以供操作系统读取。具体来说,操作系统要从磁盘读取的数据可能会存在部分已经包括预读取数据中、而其它部分未包括在其中的情况,此时,所述预读取模块201可以将该部分数据缓存到内存中以供操作系统读取,而在预先定义的时间段(例如如上所述的30毫秒)后,在操作系统未从磁盘中获取到其它部分的数据的情况下,所述预读取模块201就可以利用预读取线程读取所述其它部分的数据,并将所述其它部分的数据缓存到内存中以供操作系统读取。由此,完成了一个数据读取请求切割的过程。
[0066]可选地,在本发明的一个实施例中,所述装置200还可以包括预读取数据生成模块205,其用于记录操作系统启动的信息,并且基于所述信息以及用于之前一次或多次操作系统启动的预先定义的预读取数据,生成用于之后一次或多次操作系统启动的预先定义的预读取数据,并且按照系统启动时读取的优先级对所述预先定义的预读取数据中的数据进行排序。其中,所述操作系统启动的信息包括操作系统启动所花费的时间、操作系统从内存中读取所缓存的预读取数据的情况(例如,缓存的预读取数据命中操作系统请求的比例)。例如,预读取数据生成模块205可以基于上述操作系统启动的信息以及例如前三次操作系统启动的预读取数据,来生成用于之后的操作系统启动的预读取数据。优选地,在预读取数据生成模块205生成预读取数据时,既要保证能够快速读取,又要在操作系统请求之前将所需的数据读取出来。
[0067]可选地,在本发明的一个实施例中,所述装置200还可以包括磁盘碎片整理检测模块207,用于检测磁盘碎片整理时数据移动的情况,预读取数据生成模块205根据所述数据移动的情况,重新生成用于之后一次或多次操作系统启动的预先定义的预读取数据。由于预读取模块201是利用预读取线程根据磁盘偏移与大小来读取预读取数据的,因此在用户执行磁盘碎片整理操作之后,原有数据的磁盘偏移可能会发生改变,导致预读取线程无法正确读取到预读取数据。此时,利用上述操作,可以在磁盘碎片整理检测模块207检测到磁盘碎片整理时数据移动的情况下,预读取数据生成模块205根据数据移动来重新生成正确的预读取数据,以用于之后的操作系统启动。
[0068]本发明提供了上述电子设备操作系统启动加速的方法和装置。根据本发明的实施例,能够在电子设备启动时,操作系统启动前,创建预读取线程,尽可能早地将操作系统启动所需要的数据读取出来,并缓存到内存中以供操作系统启动时使用,避免了磁盘请求队列阻塞,从而使操作系统启动加速;根据本发明的实施例,能够通过一次或少数几次从磁盘中读取出操作系统启动所需的预读取数据,将其合并成一个数据块并缓存到内存中,加快了操作系统启动的速度;根据本发明的实施例,预读取线程从磁盘中读取数据与操作系统从内存中读取数据能够同时进行,减少了操作系统启动所需的时间;根据本发明的实施例,通过对预读取线程从磁盘中读取数据、操作系统从内存中读取数据、以及操作系统从磁盘中读取数据的请求的适当安排,并且在需要时暂停预读取线程从磁盘中读取数据,为操作系统从磁盘读取数据让路,能够实现快速读取数据,同时满足操作请求的时序性。
[0069]在此提供的方法和装置不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0070]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0071]类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循【具体实施方式】的权利要求书由此明确地并入该【具体实施方式】,其中每个权利要求本身都作为本发明的单独实施例。
[0072]本领域那些技术人员可以理解,可以对实施例中的装置中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个装置中。可以把实施例中的若干模块组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者模块中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的替代特征来代替。
[0073]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0074]本发明的各个装置实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP )来实现根据本发明实施例的装置中的一些或者全部模块的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0075]应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
[0076]本发明还公开了 Al —种电子设备操作系统启动加速的装置,包括:
[0077]预读取模块,用于在电子设备启动时,创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据;
[0078]缓存模块,用于将所述预读取模块读取的所述预读取数据缓存到电子设备的内存中,以供操作系统启动时读取,
[0079]所述预读取模块在操作系统启动过程中,利用所述预读取线程继续读取所述预读取数据,并且接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停所述预读取线程的读取。
[0080]A2.如权利要求Al所述的装置,还包括:
[0081]预读取数据生成模块,用于记录操作系统启动的信息,并且基于所述信息以及用于之前一次或多次操作系统启动的预先定义的预读取数据,生成用于之后一次或多次操作系统启动的预先定义的预读取数据,并且按照系统启动时读取的优先级对所述预先定义的预读取数据中的数据进行排序。
[0082]A3.如权利要求A2所述的装置,还包括:
[0083]磁盘碎片整理检测模块,用于检测磁盘碎片整理时数据移动的情况,
[0084]所述预读取数据生成模块根据所述磁盘碎片整理检测模块检测到的数据移动的情况,重新生成用于之后一次或多次操作系统启动的预先定义的预读取数据。
[0085]A4.如权利要求A2所述的装置,其中所述操作系统启动的信息包括操作系统启动所花费的时间、操作系统从内存中读取所缓存的预读取数据的情况。
[0086]A5.如权利要求Al至A4中的任一项所述的装置,其中所述预读取模块用于:
[0087]在小于或等于预先定义的读取时间间隔的情况下,利用两个读取请求按照磁盘排序和磁盘偏移同时读取两个文件;以及
[0088]在大于预先定义的读取时间间隔的情况下,利用两个读取请求按照操作系统启动时处理文件的时间顺序先后读取两个文件。
[0089]A6.如权利要求Al至A4中的任一项所述的装置,其中所述预读取模块用于在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在操作系统未从磁盘中获取到所述数据的情况下,利用预读取线程读取所述数据,
[0090]并且所述缓存模块用于将所述数据缓存到内存中以供操作系统读取。
[0091]A7.如权利要求Al至A4中的任一项所述的装置,其中所述预读取模块在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在检测到操作系统仍在读取地址偏移连续的数据的情况下,保持暂停所述预读取线程的读取,直到检测到操作系统读取地址偏移不连续的数据。
[0092]A8.如权利要求Al至A4中的任一项所述的装置,其中所述预读取模块在检测到操作系统对磁盘进行自检时,暂停所述预读取线程读取所述预读取数据,直到检测到磁盘自检结束。
[0093]A9.如权利要求Al至A4中的任一项所述的装置,其中所述预读取模块在接收到操作系统从磁盘中读取数据的请求时,在检测到操作系统要从磁盘中读取的数据中的部分包括在所述预读取数据中的情况下,将这部分的数据缓存到内存中以供操作系统读取;并且在预先定义的时间段后,在操作系统未从磁盘中获取到其它部分的数据的情况下,所述预读取模块利用预读取线程读取所述其它部分的数据,并将所述其它部分的数据缓存到内存中以供操作系统读取。
【权利要求】
1.一种电子设备操作系统启动加速的方法,包括以下步骤: 在电子设备启动时,创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据; 将所述预读取线程读取的所述预读取数据缓存到电子设备的内存中,以供操作系统启动时读取;以及 在操作系统启动过程中,利用所述预读取线程继续读取所述预读取数据,并且接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停所述预读取线程的读取。
2.如权利要求1所述的方法,还包括步骤: 记录操作系统启动的信息,并且基于所述信息以及用于之前一次或多次操作系统启动的预先定义的预读取数据,生成用于之后一次或多次操作系统启动的预先定义的预读取数据,并且按照系统启动时读取的优先级对所述预先定义的预读取数据中的数据进行排序。
3.如权利要求2所述的方法,还包括步骤: 检测磁盘碎片整理时数据移动的情况,并且根据所述数据移动的情况,重新生成用于之后一次或多次操作系统启动的预先定义的预读取数据。
4.如权利要求2所述的方法,其中所述操作系统启动的信息包括操作系统启动所花费的时间、操作系统从内存中读取所缓存的预读取数据的情况。
5.如权利要求1至4中的任一项所述的方法,其中利用预读取线程读取所述预读取数据的步骤包括: 在小于或等于预先定义的读取时间间隔的情况下,利用两个读取请求按照磁盘排序和磁盘偏移同时读取两个文件;以及` 在大于预先定义的读取时间间隔的情况下,利用两个读取请求按照操作系统启动时处理文件的时间顺序先后读取两个文件。
6.如权利要求1至4中的任一项所述的方法,还包括步骤: 在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在操作系统未从磁盘中获取到所述数据的情况下,利用预读取线程读取所述数据,并将所述数据缓存到内存中以供操作系统读取。
7.如权利要求1至4中的任一项所述的方法,还包括步骤: 在接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段后,在检测到操作系统仍在读取地址偏移连续的数据的情况下,保持暂停所述预读取线程的读取,直到检测到操作系统读取地址偏移不连续的数据。
8.如权利要求1至4中的任一项所述的方法,还包括步骤: 在检测到操作系统对磁盘进行自检时,暂停所述预读取线程读取所述预读取数据,直到检测到磁盘自检结束。
9.如权利要求1至4中的任一项所述的方法,还包括步骤: 在接收到操作系统从磁盘中读取数据的请求时,在检测到操作系统要从磁盘中读取的数据中的部分包括在所述预读取数据中的情况下,将这部分的数据缓存到内存中以供操作系统读取;并且在预先定义的时间段后,在操作系统未从磁盘中获取到其它部分的数据的情况下,利用预读取线程读取所述其它部分的数据,并将所述其它部分的数据缓存到内存中以供操作系统读取。
10.一种电子设备操作系统启动加速的装置,包括: 预读取模块,用于在电子设备启动时,创建预读取线程,以利用预读取线程开始从电子设备的磁盘中读取用于操作系统启动的预先定义的预读取数据; 缓存模块,用于将所述预读取模块读取的所述预读取数据缓存到电子设备的内存中,以供操作系统启动时读取, 所述预读取模块在操作系统启动过程中,利用所述预读取线程继续读取所述预读取数据,并且接收到操作系统从磁盘中读取数据的请求时,在预先定义的时间段内暂停所述预读取线程的读取。
【文档编号】G06F9/445GK103677900SQ201310575119
【公开日】2014年3月26日 申请日期:2013年11月15日 优先权日:2013年11月15日
【发明者】李常坤, 彭岩, 白川, 汤迪斌 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1