×
嵌入式 > 嵌入式开发 > 详情

嵌入式操作系统休眠唤醒后自动运行程序的方法

发布时间:2020-05-22 发布时间:
|

为了提高系统的启动速度,通常采用基于休眠技术的方式来实现嵌入式系统的快速启动。例如,在一些数字电视中,采用休眠技术以后的启动时间要比原来的启动时间约快1/3。但基于休眠技术的启动方法有其不足之处:在保存内存内容时只能把内存中的信息以快照的形式保存到磁盘或其他外部存储设备,原来系统内某些正在运行的动态进程及进程本身的执行过程不能被完全保存下来,从而导致系统重新启动后此部分进程不能正常运行;基于休眠技术的启动方式一旦以快照的形式保存后其里面的内容将无法改动。基于此,本文运用一种新方法,实现了基于休眠的嵌入式操作系统启动后,可自动运行任何形式的目标脚本和应用程序。

1 休眠唤醒后程序自动运行的方法

最新的Linux2.6内核都支持休眠和待机机制,PC系统中的实现方式有suspend2、swsusp、TuxOnIce等技术,既可以把镜像文件保存到交换分区,也可以保存到一个文件。Linux中这些休眠的具体实现方式有内核方式和软件方式两种,但两种方式都把休眠过程分为两个阶段: (1)SUSPEND阶段:保存当前系统各种状态到非易失性存储设备并关机;(2)RESUME阶段:系统重新启动,引导后恢复已保存的状态。一般嵌入式操作系统的休眠过程如图1所示,休眠后恢复过程如图2所示。

本文提出一种基于休眠开关如图3所示的唤醒后程序自动运行方法。此方法的系统整体框架分为自动执行引擎、开关控制进程、休眠开关和配置文件4个部分。

1.1 自动执行引擎

自动执行引擎采用守护进程实现的方式。所谓守护进程就是Daemon进程,是Linux中的后台服务程序,是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些事件的发生[5]。守护进程常常在系统引导装入时启动,在系统关闭时终止。把要运行的目标脚本和应用程序放到守护进程中,并定义一个全局变量Autoflg作为标志位。运用此模块的目的是让其在操作系统后台运行,通过标志位实时监控目标脚本和应用程序的运行状态。守护进程的整体结构图如图4所示。

1.2 开关控制模块

此模块的功能是控制守护进程中的Autoflg标志位,此标志位是在守护进程中的主调函数程序中设置的,用来控制目标脚本和应用程序的运行状态。其具体程序框图如图6所示。

1.3 休眠模块

此模块实现守护进程和控制模块之间的通信,采用系统调用的方式,目的是通过控制模块的执行来控制守护进程中标志位的变化,而这种控制是通过在内核中插入信号传递模块来实现。

1.4 配置文件

配置文件(即方法执行)过程:

(1)执行时首先运行守护进程,但要通过Autoflg标志位保证目标脚本和应用程序处于不运行状态。

(2)运行控制标志位函数修改Autoflg,让其保证目标脚本和应用程序可以运行。

(3)执行快速启动,系统执行快速启动程序同时确保保存到磁盘或其他存储设备中的标志位是处于可以使目标脚本和应用程序运行的状态。

(4)因为基于休眠的快速启动方法是以快照的方式把内存内容保存到磁盘或其他存储设备中,并且一旦执行,里面的内容将无法修改,所以以后每次操作系统启动时都能保证守护进程的正常运行,同时也能保证守护进程中的标志位处于能够使目标脚本和应用程序处于运行的状态,从而使目标脚本和应用程序能够正常运行。

(5)为了提高CPU的运行速度和整个系统的使用效率,本方法设置守护进程在每次启动目标脚本和应用程序后都自动退出。因为设置守护进程的目的就是在每次操作系统启动时,使其启动目标脚本和应用程序,待这项工作完成以后,它的使命也随之完成(即从系统的运行速度和运行效率角度来看,已没有其存在的必要性)。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
寻找半导体产业未来10年的驱动力