一种系统启动方法以及相关设备技术方案

技术编号:27029906 阅读:30 留言:0更新日期:2021-01-12 11:13
本申请实施例公开了一种系统启动方法以及相关设备,包括:当内核态中的内核驱动检测到第一磁盘分区时,创建第一线程;在内核态中,通过第一线程读取第一磁盘分区的元数据;通过第一线程将第一磁盘分区的元数据,写入第一页面缓存。在内核态中,第一线程将磁盘分区的元数据预先缓存至页面缓存中,后续用户态中的流程,可以直接从该页面缓存中读取磁盘分区的元数据。由于,该页面缓存存储的区域为内存,相较于磁盘而言读写操作速率较大,因此,可有效避免终端设备系统启动时发生拥塞的情况,降低系统启动的耗时。

【技术实现步骤摘要】
一种系统启动方法以及相关设备本申请要求于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本文档来自技高网...

【技术保护点】
1.一种系统启动方法,其特征在于,包括:/n当内核态中的内核驱动检测到第一磁盘分区时,创建第一线程;/n在内核态中,通过所述第一线程读取所述第一磁盘分区的元数据;/n通过所述第一线程将所述第一磁盘分区的元数据,写入第一页面缓存。/n

【技术特征摘要】
20190712 CN 20191063142211.一种系统启动方法,其特征在于,包括:
当内核态中的内核驱动检测到第一磁盘分区时,创建第一线程;
在内核态中,通过所述第一线程读取所述第一磁盘分区的元数据;
通过所述第一线程将所述第一磁盘分区的元数据,写入第一页面缓存。


2.根据权利要求1所述的方法,其特征在于,所述当内核态中的所述内核驱动检测到所述第一磁盘分区时,创建所述第一线程,包括:
通过内核态中的所述内核驱动检测当前磁盘分区是否为所述第一磁盘分区;
当通过所述内核驱动确定当前磁盘分区为所述第一磁盘分区时,调用第一函数创建所述第一线程;
向所述第一线程传递所述第一磁盘分区的第一结构体指针和第一分区号,其中,所述第一结构体指针为所述第一磁盘分区的通用磁盘结构体指针,所述第一分区号为所述第一磁盘分区的分区号。


3.根据权利要求2所述的方法,其特征在于,所述通过所述第一线程读取所述第一磁盘分区的元数据,所述方法包括:
通过所述第一线程调用第三函数打开所述第一磁盘分区;
通过所述第一线程调用页面操作函数,并通过所述页面操作函数读取所述第一磁盘分区的元数据。


4.根据权利要求3所述的方法,其特征在于,所述通过所述第一线程调用所述第三函数打开所述第一磁盘分区之前,所述方法还包括:
根据所述第一磁盘分区的所述第一结构体指针和所述第一分区号,通过所述第一线程调用第二函数以获得第一块指针,
其中,所述第一块指针为所述第一磁盘设备对应的块设备结构体指针;
通过所述第一线程调用所述第三函数,并向所述第三函数传递所述第一块指针;
根据所述第一块指针,通过所述第三函数打开所述第一磁盘分区。


5.根据权利要求3所述的方法,其特征在于,所述通过所述页面操作函数读取所述第一磁盘分区的元数据,包括:
通过所述第一线程向所述页面操作函数传入需要读取的数据量的大小,以及需要读取的数据量的偏移情况,
根据所述读取的数据量的大小,以及所述需要读取的数据量的偏移情况,通过所述页面操作函数读取所述第一磁盘分区的元数据。


6.根据权利要求5所述的方法,其特征在于,所述通过所述页面操作函数读取所述第一磁盘分区的元数据,包括:
通过所述页面操作函数,将读取的所述第一磁盘分区的元数据,写入所述第一页面缓存。


7.根据权利要求1-6中任一项所述的方法,其特征在于,所述方法还包括:
用户态中,对所述第一磁盘分区进行文件系统检测,若所述第一磁盘分区的文件系统检测fsck结果为正常,
根据所述第一索引关系,并通过调用第四函数,查询所述第一页面缓存中,是否存在缓存数据,其中,所述第一索引关系包括管理所述第一页面缓存的第一地址空间,以及管理所述第一地址空间的第一索引节点;
若存在,则使用所述缓存数据进行挂载。


8.根据权利要求7所述的方法,其特征在于,所述查询所述第一页面缓存中,是否存在所述缓存数据之后,所述方法还包括:
若不存在,则通过调用第五函数读取所述第一磁盘分区的元数据;
使用所述第一磁盘分区的元数据进行挂载。


9.根据权利要求1所述的方法,其特征在于,所述创建所述第一线程之后,所述方法还包括:
内核态中,通过所述第一线程申请第一内存空间;
通过所述第一线程读取所述第一磁盘分区的元数据;
通过所述第一线程将所述第一磁盘分区的元数据,写入所述第一内存空间。


10.根据权利要求9所述的方法,其特征在于,所述通过所述第一线程将所述第一磁盘分区的元数据,写入所述第一内存空间之后,所述方法还包括:
通过所述第一线程建立第一文件节点,所述第一文件节点映射于所述第一内存空间;
用户态中,通过访问所述第一文件节点,读取所述第一内存空间中缓存的所述第一磁盘分区的元数据;
对所述缓存的第一磁盘分区的元数据进行文件系统检测,并记录文件系统检测的结果。


11.根据权利要求10所述的方法,其特征在于,所述记录文件系统检测的结果,包括:
在通过访问所述第一文件节点,向所述第一内存空间中写入所述结果的同时,向所述第一磁盘分区中写入所述结果。


12.一种终端设备,其特征在于,包括:
处理模块,用于当内核态中的内核驱动检测到第一磁盘分区时,创建第一线程;
读取模块,用于在内核态中,通过所述第一线程读取所述第一磁盘分区的元数据;
写入模块,用于通过所述第一线程将所述第一磁盘分区的元数据,写入第一页面缓存。


13.根据权...

【专利技术属性】
技术研发人员:龚晨何彪俞超方炜
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1