一种系统启动方法以及相关设备与流程

文档序号:23628297发布日期:2021-01-12 10:41阅读:106来源:国知局
一种系统启动方法以及相关设备与流程

本申请要求于2019年7月12日提交中国专利局、申请号为201910631422.1、发明名称为“一种加快终端开机速度的方法及终端”的中国专利申请的优先权,其全部内容通过应用结合在本申请中。

本申请涉及电子技术领域,尤其涉及一种系统启动方法以及相关设备。



背景技术:

终端设备具有易掉电性,终端设备在读写磁盘文件的过程中,若突然掉电,则容易导致磁盘文件损坏。因此,为了保证磁盘可用,在终端设备开机的过程中,需要对磁盘分区进行文件系统检测(filesystemcheck,fsck),以检测磁盘分区是否损坏。

现有技术中,内核态(kernelmode)中的内核驱动检测到磁盘分区后,将会向用户态(usermode)上报磁盘分区事件,用户态中的用户空间进程(ueventd)监听到磁盘分区事件后,会生成相应的磁盘分区节点,后续用户态中的其它程序可以通过读写对应的节点读写磁盘分区。当用户态中的初始化进程(init)监听到磁盘分区节点生成后,init进程启动子进程文件系统检测(filesystemcheck,fsck),fsck流程检测这些磁盘分区节点是否异常,若检测结果为正常,则init进程挂载磁盘分区。

由于fsck流程需要对磁盘进行读写操作(input/output,i/0),而用户态中的其它程序需要等待fsck流程检测完毕后,才可运行。因此终端设备系统启动时易发生拥塞,增加系统启动的耗时。



技术实现要素:

本申请实施例提供了一种系统启动方法以及相关设备,包括;当内核态中的内核驱动检测到第一磁盘分区时,创建第一线程;在内核态中,通过第一线程读取第一磁盘分区的元数据;通过第一线程将第一磁盘分区的元数据,写入第一页面缓存。

在内核态中,第一线程将磁盘分区的元数据预先缓存至页面缓存中,后续用户态中的fsck流程,可以直接从该页面缓存中读取磁盘分区的元数据。由于,该页面缓存存储的区域为内存,相较于磁盘而言读写操作速率较大,因此,可有效避免终端设备系统启动时发生拥塞的情况,降低系统启动的耗时。

第一方面,本申请提供一种系统启动方法,包括:

终端设备开机启动后,首先内核态中的内核驱动检测磁盘分区,当内核态中的内核驱动检测到第一磁盘分区时,创建第一线程;

在内核态中,通过该第一线程读取该第一磁盘分区的元数据;

通过该第一线程将该第一磁盘分区的元数据,写入第一页面缓存。该第一页面缓存由第一地址空间(i_mapping)管理,该第一地址空间由第一索引节点(bd_inode)管理,第一索引节点由块设备指针(bdev)管理。

本申请实施例中,在内核态中,第一线程将磁盘分区的元数据预先缓存至页面缓存中,后续用户态中的文件系统检测fsck流程以及加载mount流程,可以直接从该页面缓存中读取磁盘分区的元数据。由于用户态中的fsck流程以及mount流程,可通过读取第一页面缓存中的缓存数据,代替读取第一磁盘分区并对第一磁盘分区的元数据进行fsck以及mount。而第一页面缓存中的数据缓存于内存中,因此读取第一页面缓存的速度远大于读取第一磁盘分区的速度。同时,第一线程将磁盘分区的元数据预先缓存至页面缓存这一动作,可以与其它系统启动流程并行执行,降低了系统启动的耗时。因此,可有效避免终端设备系统启动时发生拥塞的情况,降低系统启动的耗时。

结合第一方面,在第一方面实施例中,该当内核态中的该内核驱动检测到该第一磁盘分区时,创建该第一线程,包括:

通过内核态中的该内核驱动检测当前磁盘分区是否为该第一磁盘分区,具体的,内核驱动通过调用初始化函数检测磁盘分区的分区号是否为第一分区号,来确定该磁盘分区是否为第一磁盘分区,该初始化函数可以是“add_partition()”;

当通过该内核驱动确定当前磁盘分区为该第一磁盘分区时,调用第一函数创建该第一线程,该第一函数可以是“kthread_run(read_pagecaches,null,"fsck_boost"”;

向该第一线程传递该第一磁盘分区的第一结构体指针和第一分区号,其中,该第一结构体指针为该第一磁盘分区的通用磁盘结构体指针,第一结构体指针可以是“structgendisk*disk”,该第一分区号为该第一磁盘分区的分区号。

本申请实施例中,通过调用第一函数创建第一线程,向第一线程传递第一磁盘分区的第一结构体指针和第一分区号,使得第一线程可以对第一磁盘分区进行操作。丰富了本方案的实现灵活性。

结合第一方面,在第一方面实施例中,该通过该第一线程读取该第一磁盘分区的元数据,包括:

通过该第一线程调用第三函数打开该第一磁盘分区;

当通过第一线程打开第一磁盘分区后,需要读取第一磁盘分区的元数据(metadata),此时第一线程可以调用页面操作函数,并通过页面操作函数读取第一磁盘分区的元数据。该页面操作函数可以是“pagechache”操作函数。该元数据用于保存该磁盘分区所对应文件系统的状态信息。

本申请实施例中,通过调用第三函数打开第一磁盘分区,第一线程可通过调用页面操作函数读取第一磁盘分区的元数据。丰富了本方案的实现灵活性。

结合第一方面,在第一方面实施例中,该通过该第一线程调用该第三函数打开该第一磁盘分区之前,还包括:

根据该第一磁盘分区的该第一结构体指针和该第一分区号,通过该第一线程调用第二函数以获得第一块指针,其中,该第一块指针为该第一磁盘设备对应的块设备结构体指针,第二函数是“bdget_disk(disk,partno)”为例,其中,“disk”为第一结构体指针,“partno”为第一分区号。第一线程通过第二函数可以获取第一磁盘分区所对应的块设备(blockdevice)结构体指针。该指针称为第一块指针,具体的,第一块指针为“bdev”;

通过该第一线程调用该第三函数,并向该第三函数传递该第一块指针;

根据该第一块指针,通过该第三函数打开该第一磁盘分区。

本申请实施例中,终端设备的第一线程,根据第一磁盘分区的第一结构体指针和第一分区号,调用第二函数获取第一块指针。第一线程通过调用第三函数,并向该第三函数传递该第一块指针,以打开第一磁盘分区。提升了本方案的可行性。

结合第一方面,在第一方面实施例中,该通过该页面操作函数读取该第一磁盘分区的元数据,包括:

通过该第一线程向该页面操作函数传入需要读取的数据量的大小,以及需要读取的数据量的偏移情况,根据该读取的数据量的大小,以及该需要读取的数据量的偏移情况,通过该页面操作函数读取该第一磁盘分区的元数据。使得页面操作函数所读取的数据量的大小与实际需求贴近,避免读取数据量过大或过少的极端情况出现,提升本方案的可行性。

结合第一方面,在第一方面实施例中,该通过该页面操作函数读取该第一磁盘分区的元数据,包括:

通过该页面操作函数,将读取的该第一磁盘分区的元数据,写入该第一页面缓存。页面操作函数可以通过“__do_page_cache_readahead(mapping,null,offset,nr_to_read,0)”函数,将第一磁盘分区的元数据写入第一页面缓存。

结合第一方面,在第一方面实施例中,还包括:

终端设备按照原有流程执行开机动作。当系统启动进入用户态后,终端设备需要对第一磁盘分区进行文件系统检测(filesystemcheck,fsck)。用户态中,对该第一磁盘分区进行文件系统检测,若该第一磁盘分区的文件系统检测结果为正常,根据该第一索引关系,并通过调用第四函数,查询该第一页面缓存中,是否存在缓存数据,其中,该第一索引关系包括管理该第一页面缓存的第一地址空间,以及管理该第一地址空间的第一索引节点。第一索引关系“bdev-bd_inode-i_mapping”;

若存在,则使用该缓存数据进行挂载。

本申请实施例中,进入用户态后,若文件系统检测结果为正常,则第一磁盘分区的元数据为正常数据,终端设备无需对这部分数据进行修复。可使用缓存于第一页面缓存的缓存数据,进行后续挂载流程。可大幅提升加载流程的速度,降低系统启动的耗时。

结合第一方面,在第一方面实施例中,该查询该第一页面缓存中,是否存在该缓存数据之后,还包括:

若该第一页面缓存中不存在缓存数据,则通过调用第五函数读取该第一磁盘分区的元数据;使用该第一磁盘分区的元数据进行挂载。以保证系统的正常启动。

结合第一方面,在第一方面实施例中,还包括:

内核态中,通过该第一线程申请第一内存空间;通过该第一线程读取该第一磁盘分区的元数据;通过该第一线程将该第一磁盘分区的元数据,写入该第一内存空间。通过该第一线程建立第一文件节点,该第一文件节点映射于该第一内存空间;用户态中,通过访问该第一文件节点,读取该第一内存空间中缓存的该第一磁盘分区的元数据;对该缓存的第一磁盘分区的元数据进行文件系统检测,并且,在通过访问该第一文件节点,向该第一内存空间中写入该结果的同时,向该第一磁盘分区中写入该结果。

本申请实施例中,终端设备系统启动时,在内核态中,通过调用第一线程,将第一磁盘分区的元数据缓存至第一内存空间。后续用户态中,进行文件系统检测时,直接读取第一内存空间中缓存的第一磁盘分区的元数据即可。由于第一线程将第一磁盘分区的元数据缓存至第一内存空间,这一动作可以与其它开机流程并行执行,因此,可有效降低系统启动的耗时

第二方面,提供了一种终端设备,该终端设备具有实现上述第一方面中系统启动方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。

第三方面,提供了一种终端设备,该装置包括:收发器、存储器和处理器。其中,该收发器、该存储器和该处理器通过内部连接通路互相通信,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,以控制接收器接收信号,并控制发送器发送信号,并且当该处理器执行该存储器存储的指令时,使得该处理器执行第一方面或第一方面的任一种可能的实现方式中的方法

第四方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码被计算机运行时,使得所述计算机执行上述各方面中的方法。

第五方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行上述各方面中的方法的指令。

第六方面,提供一种芯片系统,包括处理器,该处理器用于从存储器中调用并运行该计算机程序,该计算机程序用于实现上述各方面中的方法。

从以上技术方案可以看出,本申请实施例具有以下优点:

当内核态中的内核驱动检测到第一磁盘分区时,创建第一线程;在内核态中,通过第一线程读取第一磁盘分区的元数据;通过第一线程将第一磁盘分区的元数据,写入第一页面缓存。

在内核态中,第一线程将磁盘分区的元数据预先缓存至页面缓存中,后续用户态中的fsck流程,可以直接从该页面缓存中读取磁盘分区的元数据。由于,该页面缓存存储的区域为内存,相较于磁盘而言读写操作速率较大,因此,可有效避免终端设备系统启动时发生拥塞的情况,降低系统启动的耗时。

附图说明

图1为本申请实施例提供的一种系统启动方法的实施例示意图;

图2为本申请实施例提供的另一种系统启动方法的实施例示意图;

图3为本申请实施例中终端设备的一种实施例示意图;

图4为本申请实施例中的终端设备的硬件结构示意图;

图5为本申请实施例的芯片系统的结构示意图。

具体实施方式

在介绍本实施例之前,首先介绍本实施例中可能出现的几个概念。应理解的是,以下的概念解释可能会因为本实施例的具体情况有所限制,但并不代表本申请仅能局限于该具体情况,以下概念的解释伴随不同实施例的具体情况可能也会存在差异。

文件系统检测:计算机中的文件系统一般会处于两种状态之一:清洁的(clean)或者脏的(dirty)。如果要在磁盘分区上挂载一个文件系统,这个文件系统必须是clean的,也就是说是结构完整的,元数据之间、元数据和数据之间是一致的。但有时文件系统的一致性可能被破坏,如系统掉电时,内存中的数据会丢失,或者由于磁盘发生故障,如磁盘坏道等,都会破坏文件系统数据的一致性。为了检查和维护不一致的文件系统,文件系统会提供文件系统检测(filesystemcheck,fsck)来方便用户检查和修复文件系统。

本申请提出的开机文件系统检测方法,可应用于终端设备中。终端设备可以是指向用户提供语音和/或数据连通性的无线终端,具有无线连接功能的手持式设备、或连接到无线调制解调器的其他处理设备。无线终端可以经无线接入网(radioaccessnetwork,ran)与一个或多个核心网进行通信,无线终端可以是移动终端,如移动电话(或称为“蜂窝”电话)和移动终端的计算机,还可以是个人计算机(personalcomputer),例如,可以是便携式、袖珍式、手持式、计算机内置的或者车载的移动装置,它们与无线接入网交换语言和/或数据。例如,个人通信业务(personalcommunicationservice,pcs)电话、无绳电话、会话发起协议(sessioninitiationprotocol,sip)话机、无线本地环路(wirelesslocalloop,wll)站、个人数字助理(personaldigitalassistant,pda)等设备。无线终端也可以称为系统、订户单元(subscriberunit)、订户站(subscriberstation),移动站(mobilestation)、移动台(mobile)、远程站(remotestation)、接入点(accesspoint)、远程终端(remoteterminal)、接入终端(accessterminal)、用户终端(userterminal)、用户代理(useragent)、用户设备(userdevice)、或用户装备(userequipment,ue),具体这里不做限定。

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例进行介绍。请参阅图1,图1为本申请实施例提供的一种系统启动方法的实施例示意图。本申请实施例中,以终端设备的系统为linux系统为例进行举例说明。

101、内核态中的内核驱动检测磁盘分区。

本实施例中,终端设备开机启动后,首先内核态中的内核驱动检测磁盘分区,具体的,内核驱动通过检测磁盘分区的分区号是否为预设分区号,来确定该磁盘分区是否为预设的磁盘分区。

本实施例中,该预设的磁盘分区在本申请实施例中称为第一磁盘分区。在一种可选的实现方式中,该第一磁盘分区为“userdata”分区,此时预设第一磁盘分区的分区名为“userdata”。需要说明的是,第一磁盘分区除了预设为“userdata”分区外,还可以是其它磁盘分区,例如“a”分区。还可以是多个磁盘分区,例如第一磁盘分区为“data”分区以及“a”分区,此处不作限定。

在一种可选的实现方式中,内核驱动首先调用初始化函数,该初始化函数可以是“add_partition()”函数。然后,该初始化函数检测各个磁盘分区的分区名。当检测到分区名为“userdata”时,确定该分区名所对应的磁盘分区为第一磁盘分区。

由于内核驱动是通过遍历的方式,检测各个磁盘分区是否为第一磁盘分区,因此,每检测一个磁盘分区时,会给该磁盘分区对应的分区号。例如:当内核驱动检测第一个磁盘分区“a”时,标记该磁盘分区的分区号为“1”。当内核驱动检测第二个磁盘分区“userdata”时,标记该磁盘分区的分区号为“2”,由于该磁盘分区的分区名为“userdata”,与预定义的第一磁盘分区的分区名一致,因此确定该分区为第一磁盘分区,因此内核驱动确定该磁盘分区的分区号“2”为第一分区号。

102、当内核驱动检测到第一磁盘分区时,创建第一线程。

本实施例中,当内核驱动检测到某一磁盘分区的分区名为预设的分区名时,内核驱动确定当前检测到的磁盘分区为第一磁盘分区。当内核驱动检测到第一磁盘分区时,内核驱动可以通过调用第一函数创建第一线程,也可以是用户预定义的其它函数,此处不作限定。创建第一线程,该第一线程为独立运行的线程,与内核态中的其它线程并行运行。该第一线程可以是“fsck_boost”线程,也可以是用户预定义的其它线程,此处不作限定。

在一种可选的实现方式中,以第一函数为“kthread_run(read_pagecaches,null,"fsck_boost"”函数为例进行说明,当内核驱动通过第一函数检测到当前磁盘分区名为“userdata”,第一函数中“fsck_boost”返回值为“1”,即“fsck_boost=1”。此时内核驱动根据该返回值,确定当前磁盘分区为第一磁盘分区。此时内核驱动通过调用第一函数创建第一线程。

当创建第一线程时,内核驱动向第一线程传递第一磁盘分区所对应的通用结构体指针,内核驱动还向第一线程传递第一磁盘分区所对应的分区号,该通用结构体指针本申请实施例中称为第一结构体指针,该分区号为第一分区号。该结构体用于指示一个文件已经缓存了的物理页。系统在读取文件时,会先从该文件对应的索引关系查询所需数据是否已经缓存,如果数据未缓存,则对磁盘发起读写请求。

在一种可选的实现方式中,第一结构体指针为“structgendisk*disk”。

103、通过第一线程打开第一磁盘分区。

本实施例中,首先第一线程根据第一结构体指针和第一分区号,通过调用第二函数来获得第一块指针。在一种可选的实现方式中,该第二函数可以是“bdget_disk(disk,partno)”,以第二函数是“bdget_disk(disk,partno)”为例,其中,“disk”为第一结构体指针,“partno”为第一分区号。第一线程通过第二函数可以获取第一磁盘分区所对应的块设备(blockdevice)结构体指针。该指针称为第一块指针,具体的,第一块指针为“bdev”。

其次,根据第一块指针,通过第一线程调用第三函数,并向第三函数传递第一块指针。第三函数用于打开第一磁盘分区。在一种可选的实现方式中,第三函数可以是“blkdev_get(bdev,fmode_read,null)”,以第三函数为“blkdev_get(bdev,fmode_read,null)”为例,其中:“bdev”为第一块指针,通过第一块指针找到第一磁盘分区,“fmode_read”指示只读模式,“null”为无关变量,可以为空。

最后,通过第三函数以及向第三函数传递的第一块指针,第三函数打开第一磁盘分区。

104、通过第一线程调用页面操作函数,并使用页面操作函数读取第一磁盘分区的元数据。

本实施例中,当通过第一线程打开第一磁盘分区后,需要读取第一磁盘分区的元数据(metadata),此时第一线程可以调用页面操作函数,并通过页面操作函数读取第一磁盘分区的元数据。该页面操作函数可以是“pagechache”操作函数。该元数据用于保存该磁盘分区所对应文件系统的状态信息。

具体的,通过第一线程向该页面操作函数传输需要读取的数据量的大小,该需要读取的数据量的大小由第一磁盘分区的元数据大小决定。通常第一磁盘分区的总容量为64吉字节(gigabyte,gb)时,第一磁盘分区的元数据大小为200兆字节(mbit,mb)。因此,该需要读取的数据量的大小为200mb,若第一磁盘分区的总容量为512gb时,该需要读取的数据量的大小为500mb。需要说明的是,当第一磁盘分区的元数据大小为300mb时,该需要读取的数据量的大小可以小于300mb,例如为100mb;也可以大于300mb,例如为400mb,此处不作限定。

除此之外,还需要通过第一线程向该页面操作函数传输需要读取的数据量的偏移情况。由于页面是读取第一磁盘分区的元数据,而元数据(以大小为200mb为例)通常存放在磁盘分区地址的0-0~0xc800000,因此,该需要读取的数据量的偏移情况通常为0。

在一种可选的实现方式中,页面操作函数可以通过“__do_page_cache_readahead(mapping,null,offset,nr_to_read,0)”函数,读取第一磁盘分区的元数据。

需要说明的是,由于第一线程是在内核态的线程,并且第一线程是在内核态中读取第一磁盘分区的元数据,因此,第一线程所调用的页面操作函数是在内核态中运行,该页面操作函数中无需包括对“structfile”结构体指针的操作。

105、使用页面操作函数将第一磁盘分区的元数据写入第一页面缓存。

本实施例中,当读取了第一磁盘分区的元数据后,使用页面操作函数将第一磁盘分区的元数据写入第一页面缓存(pagecache)。

具体的,该第一页面缓存由第一地址空间(i_mapping)管理,该第一地址空间由第一索引节点(bd_inode)管理,第一索引节点由块设备指针(bdev)管理。在本申请实施例中,上述管理关系称为第一索引关系,该第一索引关系为“bdev-bd_inode-i_mapping”,第一索引节点对应于第一磁盘分区。

在一种可选的实现方式中,页面操作函数可以通过“__do_page_cache_readahead(mapping,null,offset,nr_to_read,0)”函数,将第一磁盘分区的元数据写入第一页面缓存。

当页面操作函数将第一磁盘分区的元数据写入第一页面缓存后,可通过第一索引关系读取缓存于第一页面缓存中的第一磁盘分区的元数据,该缓存于第一页面缓存的第一磁盘分区的元数据,称为缓存数据。

106、用户态中对第一磁盘分区的元数据进行文件系统检测。

本实施例中,步骤105后,终端设备按照原有流程执行开机动作。当系统启动进入用户态后,终端设备需要对第一磁盘分区进行文件系统检测(filesystemcheck,fsck)。由于在前述步骤中,终端设备已经将第一磁盘分区的元数据缓存至第一页面缓存中,因此,在用户态中,可以通过对第一页面缓存中的缓存数据进行文件系统检测,代替读取第一磁盘分区并对第一磁盘分区的元数据进行文件系统检测。

具体的,在用户态中,可通过初始化进程(init)启动文件系统检测流程,此时,文件系统检测通过访问第一磁盘分区的地址“dev/block/userdata”,获取缓存数据,该缓存数据为第一页面缓存中缓存的第一磁盘分区的元数据。

在用户态中的“dev/block/userdata”与内核态中第一索引关系“bdev-bd_inode-i_mapping”具有关联关系。因此,可以通过访问“dev/block/userdata”,读取第一地址空间所对应的第一页面缓存中的缓存数据。当文件系统检测流程中需要进行读写操作时,读写操作的对象均是“dev/block/userdata”。需要说明的是,“dev/block/userdata”中的“userdata”仅做示例性说明,根据实际磁盘分区的情况,还可能为其它地址名。

当文件系统检测的结果为正常,则执行步骤107;当文件系统检测的结果为异常,则进入系统的原有文件系统检测流程,对第一磁盘分区进行修复。

107、若文件系统检测的结果为正常,则进行挂载。

本实施例中,当文件系统检测结束后,且磁盘分区的文件系统检测结果为正常,终端设备需要对磁盘分区进行挂载(mount)。该挂载是磁盘分区的一种挂载命名,磁盘分区需要以某种文件系统挂载后,例如闪存友好文件系统(flashfriendlyfilesystem,f2fs)或第四代扩展文件系统(fourthextendedfilesystem,ext4),用户才可以访问分区上的文件。

因此,当步骤106中对缓存数据(也就是第一磁盘分区的元数据)的文件系统检测的结果为正常,则进入步骤107中。

首先,终端设备调用第五函数,启动挂载流程,通过第五函数调用第四函数,查询第一页面缓存中是否存在缓存数据。第四函数既可以是独立的函数,也可以是第五函数下的子函数,此处不作限定。

具体的,用户态中,终端设备通过第五函数获取第一索引关系。然后,第四函数根据第一索引关系,获知第一页面缓存。

在一种可选的实现方式中,当第一磁盘分区挂载为f2fs文件系统,第五函数中携带“sbi”,“sbi”第五函数中的一个变量。该“sbi”指向“sb”,该“sb”为linux系统中一种标准超级块(superblock)结构体指针,而该“sb”进一步指向“s_bdev”,该“s_bdev”指向文件系统被安装的块设备,在本实施例中,“s_bdev”指向的是第一磁盘分区所对应的块设备,也就是“bdev”,而“bdev”中存放有第一磁盘分区所对应的第一索引节点“bd_inode”,第一索引节点中管理着第一地址空间“i_mapping”。

因此,第五函数可通过“sbi-sb-s_bdev”获取到第一索引关系“bdev-bd_inode-i_mapping”,最终获得索引关系:“sbi-sb-s_bdev-bd_inode-i_mapping”。第五函数将第一索引关系传递给第四函数,第四函数可以通过第一索引关系,获取第一地址空间,该第一地址空间管理第一页面缓存。在本实施例中,第五函数可以是“get_meta_page_ex()”,第四函数可以是“page=find_lock_page(mapping,index)”,其中,“mapping”为第四函数读取的位置,在本实施例中,该“mapping”为“i_mapping”。

当第四函数检测到第一地址空间所对应的存储区域(第一页面缓存)中存在缓存数据时,终端设备使用该缓存数据进行挂载。在挂载成功后,终端设备调用“blkdev_put”释放第一页面缓存中的数据;当第四函数检测到第一地址空间所对应的存储区域中,不存在缓存数据时,第四函数将检测结果范围给第五函数。第五函数根据该检测结果从第一磁盘分区中,读取第一磁盘分区的元数据。在一种可选的实现方案中,若第四函数为第五函数的子函数,则第五函数根据该检测结果,调用第五函数中除第四函数外的函数,从第一磁盘分区中,读取第一磁盘分区的元数据。

第五函数使用第一磁盘分区的元数据,进行mount流程。

本申请实施例中,在内核态中,第一线程将磁盘分区的元数据预先缓存至页面缓存中,后续用户态中的fsck流程以及mount流程,可以直接从该页面缓存中读取磁盘分区的元数据。由于用户态中的fsck流程以及mount流程,可通过读取第一页面缓存中的缓存数据,代替读取第一磁盘分区并对第一磁盘分区的元数据进行fsck以及mount。而第一页面缓存中的数据缓存于内存中,因此读取第一页面缓存的速度远大于读取第一磁盘分区的速度。同时,第一线程将磁盘分区的元数据预先缓存至页面缓存这一动作,可以与其它系统启动流程并行执行,降低了系统启动的耗时。因此,可有效避免终端设备系统启动时发生拥塞的情况,降低系统启动的耗时。

除了通过上述实施例流程,降低系统启动的耗时。本申请还提出了另一种系统启动的方法,用以降低系统启动的耗时。请参阅图2,图2为本申请实施例提供的另一种系统启动方法的实施例示意图。本申请实施例中,同样以终端设备的系统为linux系统为例进行举例说明。

201、内核态中的内核驱动检测磁盘分区。

本实施例中,与前述步骤101类似,此处不再赘述。

202、当内核驱动检测到第一磁盘分区时,创建第一线程。

本实施例中,与前述步骤102类似,此处不再赘述。

203、通过第一线程申请第一内存空间。

本实施例中,内核态中,当终端设备检测到第一磁盘分区后,创建第一线程。终端设备使用该第一线程在内存中申请第一内存空间。第一内存空间的大小与由第一磁盘分区的元数据大小决定。通常第一磁盘分区的总容量为64吉字节(gigabyte,gb)时,第一磁盘分区的元数据大小为200兆字节(mbit,mb)。因此,所申请的第一内存空间的大小为200mb,即申请200mb的内存块;若第一磁盘分区的总容量为512gb时,第一内存空间的大小为500mb。需要说明的是,当第一磁盘分区的元数据大小为300mb时,该需要读取的数据量的大小可以小于300mb,例如为100mb;也可以大于300mb,例如为400mb,此处不作限定。

204、读取第一磁盘分区的元数据。

本实施例中,当通过第一线程申请第一内存空间后,通过第一线程读取第一磁盘分区的元数据。

在一种可选的实现方式中,第一线程通过调用页面操作函数,读取第一磁盘分区的元数据,具体读取的方法与步骤104类似,此处不再赘述。

205、将第一磁盘分区的元数据写入第一内存空间。

本实施例中,第一线程将读取到的第一磁盘分区的元数据,写入第一内存空间。具体写入的方法与步骤105类似,此处不再赘述。

206、通过第一线程建立第一文件节点。

本实施例中,为了使得后续步骤可以对第一内存空间中,缓存的第一磁盘分区的元数据进行操作。需要通过第一线程建立第一文件节点,该第一文件节点映射至第一内存空间。

在一种可选的实现方式中,该第一文件节点可以是“proc”目录下的文件节点。该第一文件节点的地址名可以是“proc/block/xxx”,该“xxx”可以根据实际情况进行变动,例如第一文件节点的地址名可以是“proc/block/userdata”,还可以是“proc/block/123”此处不作限定。

具体的,在linux系统中,“proc”目录是一种文件系统,即proc文件系统。proc文件系统是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,可以通过更改其中某些文件来改变内核的运行状态。

207、对第一内存空间中缓存的第一磁盘分区的元数据,进行文件系统检测。

本实施例中,用户态中,终端设备对第一内存空间中缓存的第一磁盘分区的元数据,进行文件系统检测。

在一种可选的实现方式中,用户态中的初始化进程(init),通过访问第一文件节点,实现对第一内存空间中缓存的第一磁盘分区的元数据的读取操作。进行文件系统检测的过程中,若需要进行写操作时,除了对第一内存空间进行写操作,还需要同时对第一磁盘分区进行写操作。以记录文件系统检测的结果为例,终端设备通过访问第一文件节点,向第一内存空间中写入该文件系统检测的结果;同时,向第一磁盘分区中写入该文件系统检测的结果。通过对内存块与磁盘的同步写入数据,以保证内存块中的数据与磁盘中对应位置的数据一致。

具体的,通过访问第一磁盘分区的地址“dev/block/userdata”访问第一磁盘分区。需要说明的是,该第一磁盘分区的地址仅做示例性说明,此处不作限定。

当文件系统检测结果为正常,终端设备释放第一内存空间。后续进行挂载(mount),通过访问第一磁盘分区的地址,读取第一磁盘分区的元数据。并使用该第一磁盘分区的元数据进行挂载。

本申请实施例中,终端设备系统启动时,在内核态中,通过调用第一线程,将第一磁盘分区的元数据缓存至第一内存空间。后续用户态中,进行文件系统检测时,直接读取第一内存空间中缓存的第一磁盘分区的元数据即可。由于第一线程将第一磁盘分区的元数据缓存至第一内存空间,这一动作可以与其它开机流程并行执行,因此,可有效降低系统启动的耗时。

上述主要方法的角度对本申请实施例提供的方案进行了介绍。可以理解的是,上述终端设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本申请实施例可以根据上述方法示例对终端设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块301中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

下面对本申请中的终端设备进行详细描述,请参阅图3,图3为本申请实施例中终端设备的一种实施例示意图。终端设备30包括:

处理模块301,用于当内核态中的内核驱动检测到第一磁盘分区时,创建第一线程;

读取模块302,用于在内核态中,通过第一线程读取第一磁盘分区的元数据;

写入模块303,用于通过第一线程将第一磁盘分区的元数据,写入第一页面缓存。

在本申请的一些实施例中,终端设备30包括:

处理模块301,具体用于通过内核态中的内核驱动检测当前磁盘分区是否为第一磁盘分区;

处理模块301,具体用于当通过内核驱动确定当前磁盘分区为第一磁盘分区时,调用第一函数创建第一线程;

处理模块301,具体用于向第一线程传递第一磁盘分区的第一结构体指针和第一分区号,其中,第一结构体指针为第一磁盘分区的通用磁盘结构体指针,第一分区号为第一磁盘分区的分区号。

在本申请的一些实施例中,终端设备30包括:

读取模块302,具体用于通过第一线程调用第三函数打开第一磁盘分区;

读取模块302,具体用于通过第一线程调用页面操作函数,并通过页面操作函数读取第一磁盘分区的元数据。

在本申请的一些实施例中,终端设备30包括:

读取模块302,还用于根据第一磁盘分区的第一结构体指针和第一分区号,通过第一线程调用第二函数以获得第一块指针,

其中,第一块指针为第一磁盘设备对应的块设备结构体指针;

读取模块302,还用于通过第一线程调用第三函数,并向第三函数传递第一块指针;

读取模块302,还用于根据第一块指针,通过第三函数打开第一磁盘分区。

在本申请的一些实施例中,终端设备30包括:

读取模块302,具体用于通过第一线程向页面操作函数传入需要读取的数据量的大小,以及需要读取的数据量的偏移情况,

根据读取的数据量的大小,以及需要读取的数据量的偏移情况,通过页面操作函数读取第一磁盘分区的元数据。

在本申请的一些实施例中,终端设备30包括:

写入模块303,具体用于通过页面操作函数,将读取的第一磁盘分区的元数据,写入第一页面缓存。

在本申请的一些实施例中,终端设备30包括:

处理模块301,还用于用户态中,对第一磁盘分区进行文件系统检测,若第一磁盘分区的文件系统检测fsck结果为正常,

处理模块301,还用于根据第一索引关系,并通过调用第四函数,查询第一页面缓存中,是否存在缓存数据,其中,第一索引关系包括管理第一页面缓存的第一地址空间,以及管理第一地址空间的第一索引节点;

处理模块301,还用于若存在,则使用缓存数据进行挂载。

在本申请的一些实施例中,终端设备30包括:

处理模块301,还用于若不存在,则通过调用第五函数读取第一磁盘分区的元数据;

处理模块301,还用于使用第一磁盘分区的元数据进行挂载。

在本申请的一些实施例中,终端设备30包括:

处理模块301,还用于内核态中,通过第一线程申请第一内存空间;

处理模块301,还用于通过第一线程读取第一磁盘分区的元数据;

处理模块301,还用于通过第一线程将第一磁盘分区的元数据,写入第一内存空间。

在本申请的一些实施例中,终端设备30包括:

处理模块301,还用于通过第一线程建立第一文件节点,第一文件节点映射于第一内存空间;

处理模块301,还用于用户态中,通过访问第一文件节点,读取第一内存空间中缓存的第一磁盘分区的元数据;

处理模块301,还用于对缓存的第一磁盘分区的元数据进行文件系统检测,并记录文件系统检测的结果。

在本申请的一些实施例中,终端设备30包括:

处理模块301,还用于在通过访问第一文件节点,向第一内存空间中写入结果的同时,向第一磁盘分区中写入结果。

上面从模块化功能实体的角度对本申请实施例中的终端设备进行描述,下面从硬件处理的角度对本申请实施例中的终端设备进行描述。图4为本申请实施例中的终端设备的硬件结构示意图。如图4所示,该终端设备可以包括:

图4是本申请实施例中的终端设备的硬件结构一个示意图。如图4所示,该终端设备可以包括:

该终端设备包括至少一个处理器401,通信线路407,存储器403以及至少一个通信接口404。

处理器401可以是一个通用中央处理器(centralprocessingunit,cpu),微处理器,特定应用集成电路(application-specificintegratedcircuit,服务器ic),或一个或多个用于控制本申请方案程序执行的集成电路。

通信线路407可包括一通路,在上述组件之间传送信息。

通信接口404,使用任何收发器一类的装置,用于与其他装置或通信网络通信,如以太网等。

存储器403可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其他类型的静态存储装置,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其他类型的动态存储装置,存储器可以是独立存在,通过通信线路407与处理器相连接。存储器也可以和处理器集成在一起。

其中,存储器403用于存储执行本申请方案的计算机执行指令,并由处理器401来控制执行。处理器401用于执行存储器403中存储的计算机执行指令,从而实现本申请上述实施例提供的系统启动方法。

可选的,本申请实施例中的计算机执行指令也可以称之为应用程序代码,本申请实施例对此不作具体限定。

在具体实现中,作为一种实施例,终端设备可以包括多个处理器,例如图4中的处理器401和处理器402。这些处理器中的每一个可以是一个单核(single-cpu)处理器,也可以是一个多核(multi-cpu)处理器。这里的处理器可以指一个或多个装置、电路、和/或用于处理数据(例如计算机程序指令)的处理核。

在具体实现中,作为一种实施例,终端设备还可以包括输出装置405和输入装置406。输出装置405和处理器401通信,可以以多种方式来显示信息。输入装置406和处理器401通信,可以以多种方式接收用户的输入。例如,输入装置406可以是鼠标、触摸屏装置或传感装置等。

本申请还提供了一种芯片系统,请参阅图5,该芯片系统包括处理器501、存储器502,该存储器502,用于保存终端设备必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。

在一种可能的设计中,芯片系统还包括电源以及收发器(图5中未示出),用于支持上述终端设备实现其所涉及的功能,例如,通过收发器接收上述方法实施例中所涉及的数据和/或信息,如第一磁盘分区的元数据等。收发器在接收到上述方法实施例中所涉及的数据和/或信息后,将这些数据和/或信息发给处理器501,以便处理器501对这些数据和/或信息进行处理。

另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用cpu、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、u盘、移动硬盘、rom、ram、磁碟或者光盘等,包括若干指令用以使得一台终端设备执行本申请各个实施例所述的方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。

所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、训练集构建装置、计算设备或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、训练集构建装置、计算设备或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的训练设备、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。

应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

另外,本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

应理解,在本申请实施例中,“与a相应的b”表示b与a相关联,根据a可以确定b。但还应理解,根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。

总之,以上所述仅为本申请技术方案的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1