避免启动代码在数据段搬移时自我覆盖的方法

文档序号:6609979阅读:181来源:国知局
专利名称:避免启动代码在数据段搬移时自我覆盖的方法
技术领域
本发明属于启动代码搬移数据段方法领域,尤其是对于含有内存管理单元或启动重映射逻辑处理器芯片,取得源^:据段的逻辑地址和 目标数据段的逻辑地址,通过判断源数据段的逻辑地址和目标数据段 的逻辑地址的相对位置关系,以选择合适的搬移顺序来搬移数据段, 从而避免启动代码在数据段搬移时自我覆盖的方法。
背景技术
目前,对于含有内存管理单元或启动重映射逻辑处理器芯片来 说,启动代码在进行数据段的搬移或复制时,大都采用从头至尾或从 尾至头的单一固定的顺序搬移。但是,由于内存管理单元或启动重映 射逻辑的采用,形成了处理器的物理空间和逻辑空间的分离,由此一 个物理地址可能对应多个逻辑地址,而处理器进行的读写操作都是基 于逻辑地址进行的,那么启动代码在对应有多个逻辑空间的物理空间 上进行数据段的搬移或复制时,如果单一固定地采用从头至尾或从尾 至头的顺序搬移,都有可能导致数据段的头部或尾部被自我覆盖。说明书附1-图4,每一附图中显示的上下两个逻辑空间对应 着同一个物理空间,每一附图都是为说明一个数据段的搬移,数据段 的搬移都是在在同一物理空间内进行的。对于说明书附1来说,源数据段逻辑地址基值M等于1,目 标数据段逻辑地址基值N等于11,逻辑地址1-7和逻辑地址11-17 映射到同 一物理地址空间。将位于逻辑地址1-3内数据段ABC搬移到 逻辑地址为15-17内,无论采用从头至尾或从尾至头的顺序都可以正 确搬移,对于说明书附3来说,源数据段逻辑地址基值M等于1, 目标数据段逻辑地址基值N等于11,逻辑地址1-7和逻辑地址ll-l7 映射到同一物理地址空间。将位于逻辑地址5-7内数据段ABC搬移到
逻辑地址为11-13内,无论采用从头至尾或从尾至头的顺序也都可以 正确搬移。而对于说明书附2来说,源数据段逻辑地址基值M等于1, 目标数据段逻辑地址基值N等于11,逻辑地址1-7和逻辑地址11-17 映射到同 一物理地址空间。将将位于逻辑地址2-4内数据段ABC搬移 到逻辑地址为14-16内,如果采用从头至尾的顺序搬移,即按照数据 A到逻辑地址14、数据B到逻辑地址15、数据C到逻辑地址16顺序 搬移,由于逻辑地址6与逻辑地址14对应同 一个物理地址,因此, 第一步数据A搬移到逻辑地址14时,会将位于该逻辑地址内的数据 C进行覆盖,导致尾部数据被头部数据覆盖,第二步将数据B从逻辑 地址5搬移到逻辑地址15,第三步,将数据C从逻辑地址6搬移到 逻辑地址16,但是逻辑地址6内的数据已经变成数据A,因此逻辑地 址16内的数据为A,逻辑地址14-16最后的数据段结果为ABA,这样 就发生数据段搬移的错误。但是,如果采用从尾至头的顺序搬移,第 一步将数据C从逻辑地址6搬移到逻辑地址16,第二步将数据B从 逻辑地址5搬移到逻辑地址15,第三步将数据A从逻辑地址4搬移 到逻辑地址14,最终在逻辑空间14-16内形成数据段ABC,就能够实 现数据段正确搬移。同理,对于说明书附4来说,如果采用从尾至头的顺序搬移, 则导致头部数据被尾部数据覆盖,而如果采用从头至尾顺序搬移,则 能够正确搬移数据段。发明内容本发明的目的是解决现有技术存在的启动代码数据段搬移时,可 能出现数据自我覆盖而不能正确搬移数据段的问题,提供一种可避免 启动代码在数据段搬移时自我覆盖的方法。本发明的技术方案是避免启动代码在数据段搬移时自我覆盖的 方法,其特征是包括下列步骤(1 )读取源数据段的起始及结束逻辑地址和目标数据段的起始及 结束逻辑地址;(2 )计算源数据段的起始及结束逻辑地址的偏移数值和目标数据 段的起始及结束逻辑地址的偏移数值;(3 )通过判断目标数据段的逻辑地址的偏移数值与源数据段的逻 辑地址偏移数值之间的位置关系,确定采用搬移数据段的顺序。所述源数据段起始及结束逻辑地址的偏移数值,为所述源数据段 起始及结束位置的逻辑地址数值与源数据段逻辑地址基值之间的差值,源数据段逻辑地址基值标记为M,所述目标数据段起始及结束逻辑地址的偏移数值,为所述目标数据段起始及结束位置的逻辑地址数 值与目标数据段逻辑地址基值之间的差值,目标数据段逻辑地址基值标记为M,其中以M和N为起始的逻辑地址空间映射到同 一物理地址 空间。还包括下列步骤(1 )判断目标数据段起始逻辑地址的偏移数值 与源数据段起始逻辑地址偏移数值关系,如果目标数据段的起始逻辑 地址的偏移数值处于源数据段的起始和结束逻辑地址的偏移数值区 间之内,包括区间两端的数值在内,则启动代码采用乂人尾至头的顺序 搬移数据段;(2 )如果目标数据段的起始逻辑地址的偏移数值处于源 数据段的起始结束逻辑地址的偏移数值区间之外,继续判断目标数据 段的结束逻辑地址偏移数值与源数据段的起始结束逻辑地址偏移数 值的关系,如果目标数据段的结束逻辑地址的偏移数值位于源数据段 的起始结束逻辑地址偏移数值区间内,包括区间两端的数值在内,则 启动代码采用从头至尾的顺序搬移数据段;如果目标数据段的结束逻 辑地址偏移数值位于源数据段的起始结束逻辑地址的偏移数值区间 外,则启动代码采用从头至尾或从尾至头的顺序^:移数据段。上述方法利用含有内存管理单元或启动重映射逻辑的处理器芯 片,通过G而-LD链接脚本取得源数据段及目标数据段的起始及结束 逻辑地址。本发明的效果是通过读取源数据段的起始结束逻辑地址和目标 数据段起始结束逻辑地址、计算源数据段的起始及结束逻辑地址的偏 移数值和目标数据段的起始及结束逻辑地址的偏移数值、判断目标数 据段的逻辑地址的偏移数值与源数据段的逻辑地址偏移数值之间的 位置关系,确定采用搬移数据段的顺序。能够选择出数据段正确的搬 移顺序,避免数据段搬移时自我覆盖的发生,保证系统正确运行。下面结合附图和实施例对本发明做进一步的说明。


图1为数据段搬移例1示意图; 图2为数据段搬移例2示意图; 图3为数据段搬移例3示意图; 图4为数据段搬移例4示意图; 图5实施本发明方法的程序框图。
具体实施方式
图5中,是避免启动代码在数据段搬移时自我覆盖方法的程序框 图,包括下列步骤步骤101,读取源数据段的起始及结束逻辑地址和目标数据段的 起始及结束逻辑地址。步骤102,计算源数据段的起始及结束逻辑地址的偏移数值和目 标数据段的起始及结束逻辑地址的偏移数值,通过判断目标数据段的 逻辑地址的偏移数值与源数据段的逻辑地址偏移数值之间的位置关 系,确定采用搬移数据段的顺序。所述源数据段起始及结束逻辑地址 的偏移数值,为所述源数据段起始及结束位置的逻辑地址数值与源数 据段逻辑地址基值之间的差值,所述目标数据段起始及结束逻辑地址 的偏移数值,为所述目标数据段起始及结束位置的逻辑地址数值与目 标数据段逻辑地址基值之间的差值。步骤103,判断目标数据段起始逻辑地址的偏移数值与源数据段 起始逻辑地址偏移数值关系,如果目标数据段的起始逻辑地址的偏移 数值处于源数据段的起始和结束逻辑地址的偏移数值区间之内,包括 区间两端的数值在内,则启动代码采用从尾至头的顺序搬移数据段 105;如果目标数据段的起始逻辑地址的偏移数值处于源数据段的起 始结束逻辑地址的偏移数值区间之外,继续判断目标数据段的结束逻 辑地址偏移数值与源数据段的起始结束逻辑地址偏移数值的关系 104,如果目标数据段的结束逻辑地址的偏移数值位于源数据段的起 始结束逻辑地址偏移数值区间内,包括区间两端的凄史值在内,则启动 代码釆用从头至尾的顺序搬移数据段106;如果目标数据段的结束逻 辑地址偏移数值位于源数据段的起始结束逻辑地址的偏移数值区间
外,则启动代码采用从头至尾或从尾至头的顺序搬移数据段107。上述方法利用含有内存管理单元或启动重映射逻辑的处理器芯 片,通过GNU-LD链接脚本取得源数据段及目标数据段的起始及结束 逻辑地址。结合图1-图4所示的数据段搬移情况,具体说明本发明方法的 应用。图1中所示的同一物理空间有两个逻辑空间,即对应两个逻辑地 址区间, 一个逻辑地址区间为1-7,另一个逻辑地址区间为11-17, 源数据段的逻辑地址区间为1-3,目标逻辑地址区间为15-17。源数 据段逻辑地址基值M为1,计算源数据段的起始及结束逻辑地址的偏 移数值,源数据段的起始及结束逻辑地址的偏移数值为0 (即起始逻 辑地址1减去逻辑地址基值1 )和2 (即结束逻辑地址3减去逻辑地 址基值1 )。目标数据段逻辑地址基值N为11,计算目标数据段的起 始及结束逻辑地址的偏移数值,目标数据段的起始及结束逻辑地址的 偏移数值为15-11=4,和17-11=6,目标数据段的结束逻辑地址偏移 数值4和6,位于源数据段的起始结束逻辑地址的偏移数值区间l-3 之外,启动代码采用从头至尾或从尾至头的顺序搬移数据段。图2中所示的同一物理空间有两个逻辑空间, 一个逻辑地址区间 为1-7,另一个逻辑地址区间为11-17,源数据段的逻辑地址区间为 2-4,目标逻辑地址区间为14-16。源数据段逻辑地址基值M为1,计 算源数据段的起始及结束逻辑地址的偏移数值,源数据段的起始及结 束逻辑地址的偏移数值为l(即起始逻辑地址2减去逻辑地址基值1 ) 和3 (即结束逻辑地址4减去逻辑地址基值1 )。目标数据段逻辑地址 基值N为11,计算目标数据段的起始及结束逻辑地址的偏移数值, 目标数据段的起始及结束逻辑地址的偏移数值为14-11=3,和 16-11=5,目标数据段的起始逻辑地址偏移数值3,位于源数据段的 起始结束逻辑地址的偏移数值区间1-3之内,采用从尾至头的顺序搬 动数据块,如果采用从头至尾的顺序搬移,则导致尾部数据被头部数据覆盖。图3中所示的同一物理空间有两个逻辑空间,即对应两个逻辑地 址区间, 一个逻辑地址区间为1-7,另一个逻辑地址区间为11-17, 源数据段的逻辑地址区间为5-7,目标逻辑地址区间为11-13。源数 据段逻辑地址基值M为1,计算源数据段的起始及结束逻辑地址的偏
移数值,源数据段的起始及结束逻辑地址的偏移数值为4 (即起始逻辑地址5减去逻辑地址基值1)和6 (即结束逻辑地址7减去逻辑地 址基值1 )。目标数据段逻辑地址基值N为11,计算目标数据段的起 始及结束逻辑地址的偏移数值,目标数据段的起始及结束逻辑地址的 偏移数值为11-11=0,和13-11=2,目标数据段的结束逻辑地址偏移 数值G和2,位于源数据段的起始结束逻辑地址的偏移数值区间4-6 之外,启动代码采用从头至尾或从尾至头的顺序搬移数据段。图4中所示的同一物理空间有两个逻辑空间, 一个逻辑地址区间 为1-7,另一个逻辑地址区间为11-17,源数据段的逻辑地址区间为 4-6,目标逻辑地址区间为12-14。源数据段逻辑地址基值M为1,计 算源数据段的起始及结束逻辑地址的偏移数值,源数据段的起始及结 束逻辑地址的偏移数值为3(即起始逻辑地址4减去逻辑地址基值1 ) 和5 (即结束逻辑地址6减去逻辑地址基值1 )。目标数据段逻辑地址 基值N为11,计算目标数据段的起始及结束逻辑地址的偏移数值, 目标数据段的起始及结束逻辑地址的偏移数值为12-11=1,和 14-11=3,目标数据段的起始逻辑地址偏移数值1,位于源数据段的 起始结束逻辑地址的偏移数值区间3-5之外,目标数据段的起始逻辑 地址偏移数值3,位于源数据段的起始结束逻辑地址的偏移数值区间 3-5之内,采用从头至尾的顺序搬动数据块,如果采用从尾至头的顺 序搬移,则导致头部数据被尾部数据覆盖。
权利要求
1、避免启动代码在数据段搬移时自我覆盖的方法,其特征是包括下列步骤(1)读取源数据段的起始及结束逻辑地址和目标数据段的起始及结束逻辑地址;(2)计算源数据段的起始及结束逻辑地址的偏移数值和目标数据段的起始及结束逻辑地址的偏移数值;(3)通过判断目标数据段的逻辑地址的偏移数值与源数据段的逻辑地址偏移数值之间的位置关系,确定采用搬移数据段的顺序。
2、 根据权利要求1所述的避免启动代码在数据段搬移时自我覆 盖的方法,其特征是所述源数据段起始及结束逻辑地址的偏移数值, 为所述源数据段起始及结束位置的逻辑地址数值与源数据段逻辑地 址基值之间的差值,源数据段逻辑地址基值标记为M,所述目标数据 段起始及结束逻辑地址的偏移数值,为所述目标数据段起始及结束位 置的逻辑地址数值与目标数据段逻辑地址基值之间的差值,目标数据 段逻辑地址基值标记为N,其中以M和N为起始的逻辑地址空间映射 到同一物理地址空间。
3、 根据权利要求1或2所述的避免启动代码在数据段搬移时自 我覆盖的方法,其特征是包括下列步骤(1 )判断目标数据段起始逻辑地址的偏移数值与源数据段起始逻 辑地址偏移数值关系,如果目标数据段的起始逻辑地址的偏移数值处 于源数据段的起始和结束逻辑地址的偏移数值区间之内,包括区间两 端的数值在内,则启动代码采用从尾至头的顺序i^移数据段;(2 )如果目标数据段的起始逻辑地址的偏移数值处于源数据段的 起始结束逻辑地址的偏移数值区间之外,继续判断目标数据段的结束 逻辑地址偏移数值与源数据段的起始结束逻辑地址偏移数值的关系, 如果目标数据段的结束逻辑地址的偏移数值位于源数据段的起始结 束逻辑地址偏移数值区间内,包括区间两端的数值在内,则启动代码 采用从头至尾的顺序搬移数据段;如果目标数据段的结束逻辑地址偏 移数值位于源数据段的起始结束逻辑地址的偏移数值区间外,则启动 代码采用从头至尾或从尾至头的顺序搬移数据段。
4、 根据权利要求3所述的避免启动代码在数据段搬移时自我覆盖的方法,其特征是利用含有内存管理单元或启动重映射逻辑的处理器芯片,通过G而-LD链接脚本取得源数据段及目标数据段的起始及结束逻辑地址。
全文摘要
可避免启动代码在数据段搬移时自我覆盖的方法。技术方案是是包括下列步骤(1)读取源数据段的起始及结束逻辑地址和目标数据段的起始及结束逻辑地址;(2)计算源数据段的起始及结束逻辑地址的偏移数值和目标数据段的起始及结束逻辑地址的偏移数值;(3)通过判断目标数据段的逻辑地址的偏移数值与源数据段的逻辑地址偏移数值之间的位置关系,确定采用搬移数据段的顺序。
文档编号G06F9/445GK101398759SQ200710118138
公开日2009年4月1日 申请日期2007年6月29日 优先权日2007年6月29日
发明者尹文超 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1