具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1A为本发明提供的内存文件系统加载方法实施例一流程图,图1B为本发明提供的内存文件系统加载方法实施例一中内存文件系统的目录结构和制作过程示意图。本发明实施例,内存文件系统启动时必须的启动文件和不影响内存文件系统系统启动的应用数据文件分别挂载在不同的目录中,其中,应用数据文件被制作成高压缩比的文件系统(例如Squash文件系统,Cramfs文件系统)挂载在在根目录下的应用数据文件目录中。如图1B所示,根目录下包括bin、etc、init、lib、proc、home、root、sys、dev和APP等目录,bin、etc、init、lib、proc、home、root、sys和dev等目录下的文件为启动文件。在本实施例中,将Squash文件系统挂载在/APP目录下,即/APP目录下包括应用数据文件app.img(本实施例中应用数据文件制作成的Squash文件系统的镜像文件为app.img)。将上述目录文件一起打包后形成内存文件系统(如图1B所示,制作成的内存文件系统的镜像文件为initrd.img)。如图1A所示,本实施例包括:
步骤11:操作系统内核根据内存文件系统在内存中的信息从内存读取内存文件系统。
Bootloader将内存文件系统拷贝到系统内存并进行校验。在校验通过后,Bootloader引导操作系统内核启动并将内存文件系统在内存的信息,例如在系统内存的位置和大小等信息,发送给操作系统内核。操作系统内核启动时,根据Bootloader发送的有关内存文件系统的信息,从内存读取内存文件系统。
步骤12:解压内存文件系统后,操作系统内核将内存文件系统挂载为根文件系统,在解压内存文件系统的过程中不对内存文件系统中包括的高压缩比的应用数据文件解压。
操作系统内核读取内存文件系统后对以压缩包形式存在的内存文件系统进行解压,解压时不对内存文件系统中包括的高压缩比的应用数据文件进行解压。高压缩比的文件系统的特点是:压缩比率高,在使用时可只对使用的文件和所在目录进行解压,而不需对整个高压缩比文件系统进行解压。操作系统将解压后的内存文件系统挂载为根文件系统。在操作系统挂载根文件系统过程中,内存文件系统中的应用数据文件仍以高压缩比的文件形式存在。由于Bootloader已对内存文件系统进行过校验,可以保证内存文件系统的正确性。因此,操作系统在加载内存文件系统过程中,对内存文件系统不进行校验。
通过步骤11和步骤12,操作系统启动过程中的内存文件系统加载已结束。在上述加载过程中,只解压了与系统启动相关的启动文件,没有对内存文件系统中与具体应用相关的应用数据文件(例如app.img)进行解压,因此,占用系统内存空间较小,同时系统的启动速度也得到了提高。
步骤13:操作系统将内存文件系统中高压缩比的应用数据文件挂载到根文件系统的应用数据文件目录。
操作系统启动完成后,引导用户级进程Init运行。Init进程通过Loop设备方法将内存文件系统中的应用数据文件(例如,/APP/app.img)挂载到根文件系统的应用数据文件目录。Init进程挂载内存文件系统中的应用数据文件后,根文件系统中即可呈现出应用数据文件。
后续使用到应用数据文件中数据时,再对需要使用的数据进行解压,即边使用边解压。如图2所示,在步骤13之后,还包括:
步骤14:操作系统读取并解压需要使用的应用数据文件中的数据并启动该应用数据文件的相应进程。
内存文件系统中的应用数据文件以高压缩比文件系统形式存在,由于高压缩比文件系统的特性,在调用高压缩比文件系统中某一应用数据文件时可以只对使用到的应用数据文件中数据进行解压,而不对整个高压缩比文件数据进行解压,因而系统过程中占用的空间也相对较小。
本实施例内存文件系统加载方法,在操作系统挂载根文件系统过程中只解压了内存文件系统中与启动相关的启动文件,没有对包含在内存文件系统中的高压缩比应用数据文件进行解压。因此,提高了操作系统的启动速度,减少了系统内存的占用率,从而提高了内存文件系统的加载效率。进一步,操作系统在使用内存文件系统中的应用数据时,只对使用到的应用数据文件中数据进行解压,并不对内存文件系统中所有的应用数据进行解压,因而减少了系统运行过程中内存空间的占用率。
图3A为本发明提供的内存文件系统加载方法实施例三流程图,图3B为本发明提供的内存文件系统加载方法实施例三中内存文件系统的目录结构和制作过程示意图。本实施例与实施例一、实施例二的区别在于:本实施例以采用NDS(condition access,为一家专门从事数据安全加密的认证机构)安全规范的linux系统和Initrd内存文件系统为例,说明本发明内存文件系统的制作过程和加载方法的技术方案。
采用本发明实施例加载内存文件系统之前,需对内存文件系统的目录结构和文件进行处理。按照NDS规范裁减mini型root目录文件,如图3B所示,在root目录下建立bin、etc、init、lib、proc、home、root、sys、dev和NDS等目录。其中,与内存文件系统启动相关的启动文件挂载在bin、etc、init、lib、proc、home、root、sys和dev等目录中;NDS目录用于挂载不影响内存文件系统启动的应用数据文件。将不影响内存文件系统启动的(与具体应用相关,例如中间件)应用数据文件形成目录树后,使用工具将目录树制作成高压缩比文件系统,例如Squash文件系统,之后将高压缩比文件系统拷贝至root目录文件的/NDS目录中。最后将root目录文件打包制作成Initrd内存文件系统(如图3B所示,制作成的Initrd内存文件系统的镜像文件为initrd.img)烧至FLASH中。
如图3A所示,本实施例包括:
步骤31:FGDL将Initrd内存文件系统拷贝到系统内存。
FGDL(Foregroud Down Loader)为NDS的引导加载程序Bootloader。
步骤32:FGDL引导Kernel启动,并将Initrd内存文件系统在内存的信息发送给Kernel。
FGDL将Initrd内存文件系统拷贝到系统内存中检验通过后,引导Kernel启动。
步骤33:Kernel根据Initrd内存文件系统在内存中的信息从内存读取Initrd内存文件系统。
步骤34:Kernel解压Initrd内存文件系统后,将Initrd内存文件系统挂载为根文件系统。Kernel在解压Initrd内存文件系统的过程中不对其中包括的高压缩比的应用数据文件进行解压。
Kernel将Initrd内存文件系统挂载为root文件系统。
步骤35:Init进程将内存文件系统中的/NDS/nds.img挂载到根文件系统的/NDS目录。
Init进程使用脚本,利用linux的loop设备方法/NDS/nds.img挂载到/NDS。Loop设备是一种设备驱动程序,通过Loop设备可将文件作为块设备挂载在系统中,使系统可识别文件。
步骤36:操作系统读取并解压/NDS目录下需要使用的应用数据文件中数据后,启动该应用数据文件的进程。
在启动一应用数据文件的进程时,只解压启动该应用数据文件的进程所使用到的数据。后续使用到该应征文件中其它数据时,再对需要使用的数据进行解压。对于高压缩比文件系统,采用边使用边解压的方式调用其中的应用数据,从而节省了系统内存。
本实施例内存文件系统加载方法,在Kernel挂载根文件系统过程中只解压了Initrd内存文件系统中与启动相关的启动文件,没有对包含在Initrd内存文件系统中的高压缩比文件系统/NDS/nds.img进行解压。因此,提高了操Kernel的启动速度,减少了系统内存的占用率,从而提高了Initrd内存文件系统的加载效率。
图4为本发明提供的内存文件系统加载装置实施例一结构示意图。如图4所示,本实施例包括:读取模块41、解压模块42、根系统挂载模块43和应用数据文件挂载模块44。
读取模块41,用于根据内存文件系统在内存中的信息从内存读取内存文件系统;内存文件系统包括启动文件和高压缩比的应用数据文件。
解压模块42,用于解压内存文件系统,在解压内存文件系统的过程中不对内存文件系统中包括的高压缩比的应用数据文件进行解压。
根系统挂载模块43,用于将内存文件系统挂载为根文件系统。
应用数据文件挂载模块44,用于将内存文件系统中高压缩比的应用数据文件挂载到根文件系统的应用数据文件目录。
具体地,读取模块41用于根据内存文件系统在内存中的信息从内存读取内存文件系统。解压模块42用于解压读取模块41读取的内存文件系统,在解压内存文件系统的过程中不对内存文件系统中包括的高压缩比的应用数据文件进行解压。根系统挂载模块43用于将解压模块42解压后的内存文件系统挂载为根文件系统。应用数据文件挂载模块44,用于将解压模块42解压后的内存文件系统中的应用数据文件挂载到根文件系统的应用数据文件目录。
如图5所示,在图4的基础上还包括:接收模块45。
接收模块45,用于接收引导加载程序发送的内存文件系统在内存中的信息。
上述各模块的工作机理参见图1A对应实施例中描述,在此不赘述。
如图6所示,在图5的基础上还包括:应用数据文件解压模块46。
应用数据文件解压模块46,用于读取并解压需要使用的应用数据文件中的数据,并启动应用数据文件的相应进程。
上述各模块的工作机理参见图2、图3A和和图3B对应实施例中描述,在此不赘述。
本实施例内存文件系统加载装置,在操作系统内核挂载根文件系统过程中解压模块42只解压了内存文件系统中与启动相关的启动文件,没有对包含在内存文件系统中的高压缩比应用数据文件进行解压。因此,提高了操作系统内核的启动速度,减少了系统内存的占用率,从而提高了内存文件系统的加载效率。进一步,操作系统在使用内存文件系统中的应用数据时,应用数据文件解压模块46只对使用到的应用数据文件中数据进行解压,并不对内存文件系统中所有的应用数据进行解压,因而减少了系统运行过程中内存空间的占用率。
图7为本发明提供的内存文件系统加载装置实施例四结构示意图。如图7所示,在图6基础上,本实施例还包括:高压模块61和打包模块62、
高压模块61,用于将具有目录树结构的应用数据文件进行高压比压缩后,拷贝到内存文件系统的应用数据文件目录中。
打包模块62,用于将启动文件与经高压比压缩的应用数据文件打包成内存文件系统。
上述各模块的工作机理参见图3A和图3B对应实施例中描述,在此不赘述。
本实施例内存文件系统加载装置,通过高压模块61将内存文件系统的应用数据文件进行高压比压缩后,再通过打包模块62将启动文件与经高压比压缩的应用数据文件打包成内存文件系统,使启动文件和应用数据文件分别存储在不同的目录中,有利于后续内存文件系统挂载过程中提高操作系统启动速度。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。