一种基于龙芯处理器平台的待机方法

文档序号:6441302阅读:488来源:国知局
专利名称:一种基于龙芯处理器平台的待机方法
技术领域
本发明涉及一种待机方法,特別是ー种基于龙芯处理器平台的待机方法。
背景技术
电源管理是计算机操作系统的ー个重要组件,其根本目的是节能并且不影响性能。这在通过电池供电的笔记本电脑、平板电脑等设备上显得尤为重要。通常来说,电源管理的方法策略主要包括三个方面运行时电源管理,待机管理,以及休眠管理。ACPI (Advanced Configuration Power Interface, , ^ρ )
源管理规范,其实现需要软件、硬件和固件的高度协作配合。图1是ACPI所定义的各种电源状态,详细解释如下1,睡眠状态与全局状态睡眠状态中的计算机具有很低的功耗,可以接近于零。 ACPI定义了 6中睡眠状态,SO S5,值越大睡眠越深,SO是正常运行,S5是软关机。另外还定义了 GO G3四种全局状态,其中GO对应SO,Gl对应Sl到S4,G2对应S5,G3是彻底的硬关机,切断一切电源。2,CPU状态与设备状态当CPU或者I/O设备空闲时,可以让它们单独进入某种程度的低功耗状态或者停止运行的电源状态。而这时整个系统还是处于so。这些状态在 ACPI里面称为C状态(也称Cx或C-Mate,用于CPU)或D状态(也称Dx或Dltate,用于设备),从C0/D0直到Cn/Dn,η越大表示关闭的子部件越多,功耗越低。3,性能状态在系统的负载不是很高吋,可以让CPU或设备处于低于峰值的某种较低性能状态,较低的性能也意味着较低的功耗。ACPI定义的性能状态称为P状态(也称 Px或P-Mate),从PO直到Ρη,η越大表示性能和功耗越低。所有的P状态都是C0/D0的子状态。4,发热状态当系统出现过热状态时,可以改变系统状态减少发热(被动散热), 或者开启风扇等设备进行散热(主动散热)。被动散热可以通过调节P状态实现(这种方式叫TM2),如果到了功耗最低的P状态仍然不够,可以调节T状态(屏蔽部分时钟周期)进一歩降低功耗(这种方式叫TMl),从TO到Τη,η值越大功耗越低。待机是ー种电源管理方法,它让系统在空闲时候进入ー种可以快速唤醒的睡眠状态,功耗很低。待机也叫Suspend To RAM(挂起到内存,简称STR),对应ACPI S3。其特征如下CPU和外设全部断电,内存供电但处于低耗能的自刷新状态(内容保持不变)。功耗为开机状态的左右,唤醒时间5 8秒。可以通过电源按键唤醒。待机在基于X86处理器的平台早有实现。X86的待机功能严重依赖于ACPI,需要支持ACPI的硬件、ACPI感知的BIOS以及ACPI感知的操作系统。龙芯平台与X86平台有着较大的差异,其BIOS和操作系统不是ACPI感知的。因此,为了节省电能,延长笔记本电脑的电池续航时间,本发明具有十分重要的意义。

发明内容
3
本发明所要解决的技术问题是提供一种基于龙芯处理器平台精简而高效的待机方法。为了解决上述的技术问题,本发明的技术方案是一种基于龙芯处理器平台的待机方法,其包括以下步骤1)冻结进程;2)外设停止工作;3)关闭外设电源;4)关闭辅核;5)保存主核执行上下文;i.调整堆栈指针,留出ー个栈帧来保存上下文;ii.将1 7号通用寄存器保存到栈帧;iii.将16 23号通用寄存器保存到栈帧;iv.将沈 31号,除四号寄存器外的其他通用寄存器保存到栈帧;v.将协处理0的寄存器保存到栈帧;6)主核执行操作进入待机状态i.将堆栈指针的当前值写入非易失性存储器;ii.将唤醒入口地址写入非易失性存储器;iii.刷回并无效化ー级高速缓存;iv.刷回并无效化ニ级高速缓存;v.通过BIOS调用接ロ,将控制权转交给BIOS ;vi. BIOS将内存设置成自刷新模式;vii. BIOS通知EC关闭除内存以外所有部件的电源;7)恢复主核执行上下文i.从栈帧恢复协处理0的部分寄存器;ii.从栈帧恢复1 7号通用寄存器;iii.从栈帧恢复16 ぬ号通用寄存器;iv.从栈帧恢复沈 31号,除四号寄存器外的其他通用寄存器;v.调整堆栈指针,丢弃没有用处的栈帧;8)开启辅核;9)开启外设电源;;10)外设开始工作;11)恢复进程。这里主核是指编号为0的CPU核,也叫启动处理器(Bootstrap Processor,简称 BP);辅核是指编号不为0的CPU核,也叫辅助处理器(Auxiliary I^rocessor,简称AP)。X86平台上的待机功能实现比较复杂,因为其BIOS和操作系统必须是ACPI感知的。ACPI感知的BIOS包含若干个ACPI表,这些表里面有大量的ACPI代码,就待机功能来说,这些ACPI代码主要实现的功能有定义电源管理寄存器、定义ー些电源管理对象 (如判断S3功能是否可用)、定义唤醒入口地址的保存场所、定义操作系统调用的BIOS接
ACPI感知的操作系统需要有解析ACPI表和执行BIOS调用接ロ的功能。本发明采取的是ー种精简而高效的方法唤醒入口地址使用固定的保存场所,对操作系统只需要开放唯一一个BIOS调用接ロ,因此BIOS不需要冗长的ACPI代码,操作系统也不需要复杂的ACPI子系统。关键的技术点是如何保存唤醒入口地址、如何让操作系统内核与BIOS能够在内存中共存以及开放什么样的BIOS接ロ。本发明具有以下优点1.精简而易于实现。龙芯平台的待机功能使用固定的操作方式,因而不需要ACPI表来动态维护大量的信息。也正因为如此,BIOS和操作系统都变得易于实现,健壮性好,不易有隐含的各种缺陷。2.高效而执行快捷。如果是基于ACPI的待机实现,其执行过程中多数步骤(尤其是对设备的操作)都有操作系统和BIOS的交互,这些交互让执行过程变得缓慢。龙芯平台的待机功能只需要进行一次交互,因此高效。


下面结合附图和具体实施方式
对本发明作进ー步详细的说明。图1是ACPI状态关系图;图2是待机的执行流程图。
具体实施例方式本发明所采用的硬件平台(处理器)是龙芯3A,软件平台(操作系统)是Linux 内核,版本为2. 6. 36,但本发明不限于龙芯3A的硬件平台。本发明待机方法如图2所示,其具体步骤是1)冻结进程;2)外设停止工作;3)关闭外设电源;4)关闭辅核;5)保存主核执行上下文;i.调整堆栈指针(SP寄存器),目的是留出一个栈帧来保存上下文;ii.将1 7号通用寄存器(用于汇编器的AT寄存器、用于存放函数返回值的V 系列寄存器以及用于存放函数參数的A系列寄存器)保存到栈帧;iii.将16 23号通用寄存器(函数调用时需要调用者保存的S系列寄存器)保存到栈帧;iv.将沈 31号通用寄存器(内核专用的K系列寄存器、全局指针GP,帧指针FP 和返回地址RA寄存器)保存到栈帧,但四号寄存器(堆栈指针SP)除外;v.将协处理0的部分寄存器(状态寄存器、配置寄存器、上下文寄存器和页面掩码寄存器等)保存到栈帧;
6)主核执行操作进入待机状态i.将堆栈指针的当前值写入非易失性存储器;ii.将唤醒入口地址写入非易失性存储器;iii.刷回并无效化ー级高速缓存(Li Cache);iv.刷回并无效化ニ级高速缓存(L2 Cache);v.通过BIOS调用接ロ,将控制权转交给BIOS ;vi. BIOS将内存设置成自刷新模式;vii. BIOS通知EC(嵌入式控制器)关闭除内存以外所有部件的电源;7)恢复主核执行上下文i.从栈帧恢复协处理0的部分寄存器(状态寄存器、配置寄存器、上下文寄存器和页面掩码寄存器等);ii.从栈帧恢复1 7号通用寄存器(用于汇编器的AT寄存器、用于存放函数返回值的V系列寄存器以及用于存放函数參数的A系列寄存器);iii.从栈帧恢复16 23号通用寄存器(函数调用时需要调用者保存的S系列寄存器);iv.从栈帧恢复沈 31号通用寄存器(内核专用的K系列寄存器、全局指针GP, 帧指针FP和返回地址RA寄存器),但四号寄存器(堆栈指针SP)除外;v.调整堆栈指针(SP寄存器),目的是丢弃已经没有用处的栈帧;8)开启辅核;9)开启外设电源;;10)外设开始工作;11)恢复进程。本发明方法中,步骤5)、6)、7)要解决如下几个关键问题1.唤醒入口地址待机睡眠过程中,除了内存、实时钟(RTC)、嵌入式控制器(EC) 以外,包括CPU在内的大多数部件都不供电。因此,唤醒的第一个阶段是BIOS在执行的, BIOS需要判断这次上电是普通的冷启动还是待机唤醒,如果是唤醒,需要把控制权转交给操作系统。睡眠过程虽然内存内容不变,但处于自刷新状态而不能直接访问,因此转交时操作系统的入口地址必须保存在ー个不断电、可访问并且相对固定的地方。本发明采用的方法是将入口地址(以及内核堆栈指针)保存在实时钟的自带内存区里面。该入口地址同时也作为区别冷启动和待机唤醒的标记,如果值为0,表示普通冷启动。2. BIOS与操作系统共存BI0S代码保存在非易失性的只读存储器(ROM)芯片中, 但是为了提高性能(执行效率)和灵活性(如动态分配内存),通常会解压到系统内存 (RAM)中执行。待机睡眠和冷启动不同,内存里面的内容是有用的,不能让BIOS随意使用, 否则就会破坏操作系统的数据。因此BIOS必须能够和操作系统共存而不互相干扰,这种共存是通过专用内存区实现的。龙芯电脑的最低物理内存配置是256MB,本发明将240 256MB之间的16MB范围划分给BIOS专用。假设系统有2GB内存,那么OMB MOMB范围操作系统使用;240MB 256MB 范围BI0S 专用;256MB 2GB范围操作系统使用。
3. BIOS操作接ロ BI0S和操作系统需要唯一的一个调用接ロ 断电进入待机。这个接ロ是必须的,无法由操作系统独立完成。其原因在于进入待机之前必须先将内存置于自刷新状态,而一旦内存进入该状态,处于内存中的操作系统代码便无法运行。而BIOS在 ROM芯片中有一个备份,可以不受此限制。真正的断电(以及上电)时序控制是由EC完成的,所以这个唯一的BIOS接ロ实现起来也很简単,只需要发送几个简单的EC控制命令即可兀成。上述实施例不以任何方式限制本发明,凡是采用等同替换或等效变换的方式获得的技术方案均落在本发明的保护范围内。
权利要求
1. 一种基于龙芯处理器平台的待机方法,其特征在于包括以下步骤1)冻结进程;2)外设停止工作;3)关闭外设电源;4)关闭辅核;5)保存主核执行上下文;i.调整堆栈指针,留出一个栈帧来保存上下文; .将1 7号通用寄存器保存到栈帧;iii.将16 ぬ号通用寄存器保存到栈帧;iv.将沈 31号,除四号寄存器外的其他通用寄存器保存到栈帧;v.将协处理0的寄存器保存到栈帧;6)主核执行操作进入待机状态i.将堆栈指针的当前值写入非易失性存储器; .将唤醒入口地址写入非易失性存储器;iii.刷回并无效化ー级高速缓存;iv.刷回并无效化ニ级高速缓存;v.通过BIOS调用接ロ,将控制权转交给BIOS;vi.BIOS将内存设置成自刷新模式;vii.BIOS通知EC关闭除内存以外所有部件的电源;7)恢复主核执行上下文i.从栈帧恢复协处理0的部分寄存器; .从栈帧恢复1 7号通用寄存器;iii.从栈帧恢复16 ぬ号通用寄存器;iv.从栈帧恢复沈 31号,除四号寄存器外的其他通用寄存器;v.调整堆栈指针,丢弃没有用处的栈帧;8)开启辅核;9)开启外设电源;10)外设开始工作;11)恢复进程。
全文摘要
本发明公开了一种基于龙芯处理器平台的待机方法,其过程包括以下步骤1)冻结进程;2)外设停止工作;3)关闭外设电源;4)关闭辅核;5)保存主核执行上下文;6)主核执行操作进入待机状态;7)恢复主核执行上下文;8)开启辅核;9)开启外设电源;10)外设开始工作;11)恢复进程。本发明方法不需要ACPI表来动态维护大量的信息,BIOS和操作系统都变得易于实现,健壮性好,不易有隐含的各种缺陷;本发明待机功能只需要和BIOS进行一次交互,因此高效。
文档编号G06F1/32GK102541246SQ20111041925
公开日2012年7月4日 申请日期2011年12月15日 优先权日2011年12月15日
发明者吴少刚, 陈华才 申请人:江苏中科梦兰电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1