@wenshizhang
2017-05-04T15:06:53.000000Z
字数 4087
阅读 559
论文
开题分析
周报
启动
随着科学技术的蓬勃发展,计算机被更多的人使用,并与人类对额生活结合的越来越紧密,越来越多的智能产品出现在人们眼前。搭载智能操作系统的无人机、车载电脑、家庭智能设备等嵌入式终端成为了互联网关键入口和创新平台,目前,全球嵌入式终端市场正在以爆炸性的态势增长,嵌入式终端被应用到工业、医疗、交通、军事等各个领域。就近而言,智能手机、智能电视、智能洗衣机层出不穷,甚至整个家庭、房屋都可能出现全智能化的情况。
近年来,Linux凭借其开源和稳定等优良特性广泛应用与嵌入式系统上。随着Linux kernel的不断膨胀和智能设备提供功能不断复杂化,启动时间越来越长,对用户的影响越来越大。因此加快启动速度已经成为嵌入式待解决的关键问题之一。
根据国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是“控制、监视或者辅助装置,机器和设备运行的装置”。目前国内一个普遍被认同的定义是:以应用为中心,计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用操作系统。因此需要在启动速度、实时性、系统尺寸、电源管理等方面进行优化。
RTLinux是由美国新墨西哥州的fsmlabs(finite state machine labs, 有限状态机实验室)公司开发的、利用linux开发的面向实时和嵌入式应用的操作系统。RTLinux是Linux在实时性方面的扩展,采用已获得专利的双核技术:一个微型的RTLinux内核把原始的Linux内核作为它在空闲时的一个线程来运行。遵循传统的Linux启动流程,并没有做太大的优化。
QNX是加拿大Blackberry (黑莓)公司开发的一个分布式、嵌入式实时操作系统。目前QNX系统已普遍应用于车载终端。QNX启动过程是:打开设备电源,自动加载器(Boot Loader)为加载操作系统和软件做准备,加载器加载(OS kernel),kernel执行完后启动必要的驱动程序和服务,启动第一个应用程序,应用程序显示界面。为了更好的用户体验,生产商提出开机自动续播技术,在启动后自动续播关机前的播放源。这需要在启动第一个应用程序之后,启动额外的服务判断播放源。因此启动速度是十分不尽人意的。
目前对加速嵌入式设备启动的方式主要有三种:
kernel XIP(eXecute In Place)
芯片内执行,指应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。flash内执行是指nor flash 不需要初始化,可以直接在flash内执行代码。但往往只执行部分代码,比如初始化RAM.在arm处理器中,Nor flash就存放了引导系统启动的Bootloader,不过大小比较小(仅2M空间)。此种方式节约了从flash到内存的镜像拷贝时间,算法简单。然而,拷贝镜像只占用很少的时间,此种优化并不是很理想。
延迟设备检测
在启动过程中,系统需要初始化设备接口,这个过程花费了kernel启动的80%时间。因此,此种方式把在启动过程不需要使用的设备延迟到了启动完成后初始化,以此来减少启动事假。尽管启动速度提高了,但是在启动完成到设备初始化完成这个时间段内,设备不能使用。
Suspend/Resume机制
Suspend/Resume是基于Linux内核电源管理机制所提供的一项技术。正常开机进入系统后,通过Suspend技术将系统状态保存下来,下次开机时再用已经保存的系统装填讲系统恢复从而实现快速开机。该技术根据Suspend时将系统状态保存的位置分为两类:Suspend to Ram 和Suspend to Disk。
Suspend to Ram将内存的状态保存在Ram中,通过恢复Ram中保存的系统状态启动系统。Ram是易失存储介质,需要给Ram供电才能保证信息不丢失。由于系统装填存储在Ram中,而读取Ram的速度很快,该方法能实现快速的即开即用。
Suspend to Disk将Suspend生成的系统状态保存在外部存储设备上,快速启动则是从外存读取系统状态,然后恢复系统。由于外部存储是非易失性存储介质,在断电时其中保存的系统状态不会丢失,所以用该方法保存完系统状态后,系统可以完全断电,下一次快速启动给系统上电后,系统读取状态并恢复。
根据Suspend保存系统状态的次数可以将Suspend to Disk分为两种:一种是系统状态只保存一次,一种是每一次快速启动前都要保存系统状态。下面介绍这两种方式。
第一种只需要Suspend保存镜像一次即可,正常开机进入系统后,使用Suspend to Disk技术将当前系统状态制作成一个镜像文件并保存在外存上,以后每次启动都只用这个镜像来回付系统运行。这种方法每次快速启动都只用这个镜像文件而不许关机之前生成镜像,缩短了启动时间并且不会延长关机时间。但同时,用户在使用系统的过程中,会根据需要对系统进行相应的操作,这些操作会影响系统当前的状态,这些状态最终会以文件形式保存在存储设备上,而这种方法每次快速启动都使用同一个镜像,这样每次快速启动后的状态都是第一次正常开机的状态,这与用户操作完成后的系统实际状态完全不一样,这个问题实际给用户带来了极大的不方便,同时降低了快速启动技术的实际应用价值。同时,镜像文件创建完成后就不再修改,如果有恶意进程损坏了系统镜像,系统将一直无法快速启动。
另外一种方式是每次关机断电前需要用Suspend to Disk技术将当前系统状态保存在外部存储设备上,下次快速启动就可以直接度外部存储设备上的系统状态恢复系统,这种方式不会对一致性稳定性造成影响,但是由于外部存储设备的I/O读写速度远远低于CPU的执行速度,每次快速启动过程都需要读写存储设备一次,当前嵌入式设备的内存一直在增大,Suspend to Disk保存系统镜像大小必定随着内存尺寸的增大而增大。在这种背景下,这种方法带来的开销就很大。
本课题通过对suspend机制的分析,发现系统在关机之前,内核调用pm_suspend
函数检查状态标志,同步文件系统,分别调用suspend_freeze_processes
函数suspend_devices_and_enter
挂起系统进程和挂起设备。最后运行注册好的suspend_ops
函数保存系统状态。本课题在系统运行过程中记录系统状态,因此需要对上述过程进行修改。近年来,在vmware等虚拟机已经实现了系统运行中创建快照,可以参考其实现。综上,本课题可行。
本课题在ARM体系结构下,选用硬件平台是friendly arm 6410,软件平台是涉及到的语言有汇编语言和C语言。使用printk
得到优化前后的开机时间,进行对比得出结论。
本课题在研究原本的快照启动的前提下,提出安全的稳定的性能较高的快照创建优化策略,在不影响系统的正常运行且用户透明的前提下,下一次操作系统启动时使用此快照,缩短启动时间。
本课题的主要难点概括如下:
1.如何在系统运行情况下得到寄存器状态
2.如何在对用户透明的记录进程的全部数据
3.如照中的文件系统数据与元数据
4.如何增量式创建快照
5.在内核中调试困难
本课题创新之处在于:
1.快照创建采用增量方式,节省创建快照的开销
2.快照一致性问题在系统运行中解决,并不需要启动后扫描外存同步系统装填,加快了启动速度
本课题存在的主要问题有以下几个方面:
1.
本课题涉及的关键技术主要有:
1.基于Suspend/Resume机制的快照启动技术
2.Linux内核守护进程技术
3.Linux内存管理技术