• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 12
    • 下载费用:30 金币  

    重庆时时彩开奖公正吗: 一种内存分配方法及装置.pdf

    关 键 词:
    一种 内存 分配 方法 装置
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201010114512.2

    申请日:

    2010.02.12

    公开号:

    CN102156675A

    公开日:

    2011.08.17

    当前法律状态:

    授权

    有效性:

    有权

    法律详情: 授权|||实质审查的生效IPC(主分类):G06F 12/02申请日:20100212|||公开
    IPC分类号: G06F12/02 主分类号: G06F12/02
    申请人: 中兴通讯股份有限公司
    发明人: 王继刚; 李翌
    地址: 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部
    优先权:
    专利代理机构: 北京安信方达知识产权代理有限公司 11262 代理人: 李健;龙洪
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201010114512.2

    授权公告号:

    102156675B||||||

    法律状态公告日:

    2014.03.19|||2011.12.28|||2011.08.17

    法律状态类型:

    授权|||实质审查的生效|||公开

    摘要

    本发明公开了一种内存分配方法及装置,包括:将内存空间划分为内存普通区和内存保留区;当接收到应用的内存申请请求后,判断内存普通区中的内存量是否达到应用申请的内存量,如果未达到,则判断应用是否为紧急应用,如果该应用为紧急应用,则从内存保留区中为该紧急应用分配内存资源。本发明通过设置独立的内存保留区,防止系统因内存资源紧张而导致一些关键应用无法运行,保证了系统的稳定运行,同时,按阈值分配内存资源可以有效减少因大量小内存分配而产生的内存碎片,使嵌入式系统能够最大限度地高效可靠运行。

    权利要求书

    1: 一种内存分配方法, 包括 : 将内存空间划分为内存普通区和内存保留区 ; 当接收到应用的内存申请请求后, 判断所述内存普通区中的内存量是否达到所述应用 申请的内存量, 如果未达到, 则判断所述应用是否为紧急应用, 如果该应用为紧急应用, 则 从所述内存保留区中为该紧急应用分配内存资源。
    2: 如权利要求 1 所述的方法, 其特征在于, 所述从所述内存保留区中为该紧急应用分 配内存资源的方法包括 : 从所述内存保留区的空闲内存链表中查找一个容量大于所述紧急应用所申请内存量 的空闲内存块 ; 将该空闲内存块的容量与预先配置的内存容量阈值进行比较, 若该空闲内存块的容量 大于所述内存容量阈值, 则将该空闲内存块拆分为使用块和未用块, 所述使用块的容量等 于所述内存容量阈值, 将所述使用块分配给所述紧急应用。
    3: 如权利要求 2 所述的方法, 其特征在于, 该方法还包括 : 将所述使用块从所述空闲内存链表中删除, 将所述未用块添加到块链表和所述空闲内 存链表中。
    4: 如权利要求 2 所述的方法, 其特征在于 : 若所述空闲内存块的容量小于所述内存容量阈值, 则将该空闲内存块分配给所述紧急 应用, 并将该空闲内存块从所述空闲内存链表中删除。
    5: 如权利要求 1 所述的方法, 其特征在于, 该方法还包括 : 当所述紧急应用结束后, 将为该紧急应用分配的内存块释放给所述内存保留区。
    6: 如权利要求 5 所述的方法, 其特征在于, 所述将为该紧急应用分配的内存块释放给 所述内存保留区的方法包括 : 从块链表中查询所释放的内存块的前一内存块的状态, 若该前一内存块为空闲状态, 则将该释放的内存块与该前一内存块合并, 并将所述释放的内存块从所述块链表中删除 ; 若该前一内存块为使用状态, 则将所要释放的内存块添加到空闲内存链表中。
    7: 如权利要求 6 所述的方法, 其特征在于, 该方法还包括 : 从所述块链表中查询所要释放的内存块的后一内存块的状态, 若该后一内存块为空闲 状态, 则将该释放的内存块与该后一内存块合并, 并将该后一内存块从所述块链表和空闲 内存链表中删除。
    8: 一种内存分配装置, 包括 : 引导??楹湍诖婀芾碜酉低?; 所述引导???, 用于将内存空间划分为内存普通区和内存保留区 ; 所述内存管理子系统, 用于在接收到应用的内存申请请求后, 判断所述内存普通区中 的内存量是否达到所述应用申请的内存量, 如果未达到, 则判断所述应用是否为紧急应用, 如果该应用为紧急应用, 则从所述内存保留区中为该紧急应用分配内存资源。
    9: 如权利要求 8 所述的装置, 其特征在于, 所述内存管理子系统从所述内存保留区中 为该紧急应用分配内存资源的方法包括 : 从所述内存保留区的空闲内存链表中查找一个容量大于所述紧急应用所申请内存量 的空闲内存块 ; 将该空闲内存块的容量与预先配置的内存容量阈值进行比较, 若该空闲内存块的容量 2 大于所述内存容量阈值, 则将该空闲内存块拆分为使用块和未用块, 所述使用块的容量等 于所述内存容量阈值, 将所述使用块分配给所述紧急应用。
    10: 如权利要求 9 所述的装置, 其特征在于 : 所述内存管理子系统, 还用于当所述紧急应用结束后, 将为该紧急应用分配的内存块 释放给所述内存保留区, 具体包括 : 从块链表中查询所释放的内存块的前一内存块的状态, 若该前一内存块为空闲状态, 则将该释放的内存块与该前一内存块合并, 并将所述释放的 内存块从所述块链表中删除 ; 若该前一内存块为使用状态, 则将所要释放的内存块添加到 空闲内存链表中。

    说明书


    一种内存分配方法及装置

        【技术领域】
         本发明涉及嵌入式系统, 尤其涉及一种内存分配方法及装置。背景技术 随着后 PC( 个人电脑 ) 时代的到来, 嵌入式系统已日益广泛地应用于航空航天、 国 防通讯、 交通运输、 核电能源和医疗卫生等诸多安全关键实时系统 (Safety Critical Real Time System, SCRTS), 上述系统之所以称为 SCRTS, 是因为它们一旦失效将会导致生命财产 的重大损失以及对环境的严重破坏。
         内存管理是嵌入式系统的一个非常重要的问题, 如果处理不好内存资源的分配, 系统的可靠性将会大大降低, 导致关键应用的中止、 系统的崩溃, 甚至引发灾难性事故, 这 当然是人们不愿看到的结果。
         现有技术中, 对嵌入式系统的内存管理通常采用分块方法和虚拟内存机制, 实现 地对系统内存资源进行分配与管理。
         分块的内存管理方法思想比较简单, 即将内存资源分成若干块, 当需要内存资源 时, 获取一个资源块, 使用完毕之后再将资源块释放, 归还给系统。该方法存在如何确定资 源块大小的问题, 如果资源块过大, 则利用率下降, 如果资源块过小, 则无法满足分配的需 求。针对这个问题, 提出了块资源池的思想, 每个池中的块大小都不同, 应用提出内存资源 需求后, 系统会根据需求在合适的池中获取资源块 ; 应用结束后, 再将资源块释放到对应的 池中, 分块的内存管理方法虽然效率较高, 但由于内存资源有限, 在系统满负荷运行时, 很 容易出现系统内存不足, 导致一些关键应用无法运行, 造成严重后果。
         虚拟内存技术是一种有效的内存管理方法, 通过虚拟内存技术可以将逻辑内存和 物理内存分开, 程序运行在逻辑内存空间, 对于每个任务而言都能看到一个很大的内存空 间。
         图 1 为典型的虚拟内存分配方式, 整个系统内存空间分为物理地址空间、 虚拟地 址空间和交换地址空间三部分, 嵌入式系统中一般不需要交换地址空间, 物理地址空间和 虚拟地址空间分别由操作系统的物理地址管理??楹托槟獾刂饭芾砟?楣芾?, 交换地址空 间由交换空间管理??楣芾?, 虚拟内存和实际的物理内存通过页表进行动态映射, 页面管 理??槎砸趁娼泄芾?, 这使得应用可以申请比实际内存更大的内存资源运行。物理地址 管理???、 虚拟地址管理??楹鸵潮砉芾砟?榛褂胍趁嬉斐9芾砟?榱?, 实现异常管理。
         但是, 由于虚拟内存技术涉及到页表的映射查找, 因此实现效率比较低下, 系统的 实时性得不到保障, 这对于安全关键实时系统而言也是致命的。 同时, 虚拟内存技术往往需 要硬件加速, 这个硬件加速单元就是 MMU(memory management unit, 内存管理单元 ), 其本 质上就是一个 lookup table( 查找表 ), 这要求采用虚拟内存技术的嵌入式系统都需要 CPU 集成 MMU, 否则, 该套机制很难实现。
         针对目前嵌入式系统内存管理所存在的问题, 国内外的研究人员开发出了一些更 完善的内存管理机制。在目前公开的关于嵌入式内存管理的文献中, 绝大多数都是基于分
         块方法提出的改进优化手段, 目的在于减少大量内存碎片产生, 减少内存浪费, 保证应用程 序的需求。
         例如, 中国专利申请公开说明书 CN200810056891.7 的 “嵌入式系统的内存管理 方法及装置” ; 中国专利申请公开说明书 200710121449.3 的 “嵌入式系统内存管理的方 法” ; 中国专利申请公开说明书 200410087169.1 的 “一种分配内存的方法” 等, 上述方案中 均没有提及由于内存不足导致关键应用无法运行的解决方法。中国专利申请公开说明书 200410041459.2 的 “一种嵌入式实时操作系统中内存分配的方法” , 提出了动态调整内存 分配策略, 当内存资源分配完后, 通过强制释放低优先级应用的内存, 以保证高优先级应用 的运行, 然而, 在目前应用交互越来越密切的趋势下, 该方案很可能会导致整个系统的不稳 定。 发明内容
         本发明要解决的技术问题是提供一种内存分配方法及装置, 解决嵌入式系统中由 于内存不足导致应用无法运行的问题, 实现在系统内存用尽后, 为应用提供内存资源。
         为解决上述技术问题, 本发明的一种内存分配方法, 包括 :
         将内存空间划分为内存普通区和内存保留区 ;
         当接收到应用的内存申请请求后, 判断内存普通区中的内存量是否达到应用申请 的内存量, 如果未达到, 则判断应用是否为紧急应用, 如果该应用为紧急应用, 则从内存保 留区中为该紧急应用分配内存资源。
         进一步地, 从内存保留区中为该紧急应用分配内存资源的方法包括 :
         从内存保留区的空闲内存链表中查找一个容量大于紧急应用所申请内存量的空 闲内存块 ;
         将该空闲内存块的容量与预先配置的内存容量阈值进行比较, 若该空闲内存块的 容量大于内存容量阈值, 则将该空闲内存块拆分为使用块和未用块, 使用块的容量等于内 存容量阈值, 将使用块分配给紧急应用。
         进一步地, 该方法还包括 :
         将使用块从空闲内存链表中删除, 将未用块添加到块链表和空闲内存链表中。
         进一步地, 若空闲内存块的容量小于内存容量阈值, 则将该空闲内存块分配给紧 急应用, 并将该空闲内存块从空闲内存链表中删除。
         进一步地, 该方法还包括 :
         当紧急应用结束后, 将为该紧急应用分配的内存块释放给内存保留区。
         进一步地, 将为该紧急应用分配的内存块释放给内存保留区的方法包括 :
         从块链表中查询所释放的内存块的前一内存块的状态, 若该前一内存块为空闲状 态, 则将该释放的内存块与该前一内存块合并, 并将释放的内存块从块链表中删除 ; 若该前 一内存块为使用状态, 则将所要释放的内存块添加到空闲内存链表中。
         进一步地, 该方法还包括 :
         从块链表中查询所要释放的内存块的后一内存块的状态, 若该后一内存块为空闲 状态, 则将该释放的内存块与该后一内存块合并, 并将该后一内存块从块链表和空闲内存 链表中删除。进一步地, 一种内存分配装置, 包括 : 引导??楹湍诖婀芾碜酉低?;
         引导???, 用于将内存空间划分为内存普通区和内存保留区 ;
         内存管理子系统, 用于在接收到应用的内存申请请求后, 判断内存普通区中的内 存量是否达到应用申请的内存量, 如果未达到, 则判断应用是否为紧急应用, 如果该应用为 紧急应用, 则从内存保留区中为该紧急应用分配内存资源。
         进一步地, 内存管理子系统从内存保留区中为该紧急应用分配内存资源的方法包 括:
         从内存保留区的空闲内存链表中查找一个容量大于紧急应用所申请内存量的空 闲内存块 ;
         将该空闲内存块的容量与预先配置的内存容量阈值进行比较, 若该空闲内存块的 容量大于内存容量阈值, 则将该空闲内存块拆分为使用块和未用块, 使用块的容量等于内 存容量阈值, 将使用块分配给紧急应用。
         进一步地, 内存管理子系统, 还用于当紧急应用结束后, 将为该紧急应用分配的内 存块释放给内存保留区, 具体包括 : 从块链表中查询所释放的内存块的前一内存块的状态, 若该前一内存块为空闲状态, 则将该释放的内存块与该前一内存块合并, 并将释放的内存 块从块链表中删除 ; 若该前一内存块为使用状态, 则将所要释放的内存块添加到空闲内存 链表中。 综上所述, 本发明通过设置独立的内存保留区, 防止系统因内存资源紧张而导致 一些关键应用无法运行, 保证了系统的稳定运行, 同时, 按阈值分配内存资源可以有效减少 因大量小内存分配而产生的内存碎片, 使嵌入式系统能够最大限度地高效可靠运行。
         附图说明
         图 1 为现有技术中的虚拟内存分配机制的模型图 ;
         图 2 为本发明内存分配方法的流程图 ;
         图 3 为本发明中块链表的结构示意图 ;
         图 4 为本发明方法应用于 Linux 系统时内存保留区的结构示意图 ;
         图 5 为本发明方法应用于 Linux 系统时的流程图 ;
         图 6 为本发明内存分配装置的架构图。 具体实施方式
         本实施方式通过设置独立于系统内存的内存保留区, 在系统内存用尽后, 为应用 提供内存资源, 保证了嵌入式系统的可靠运行。
         下面结合附图对本发明的具体实施方式进行说明。
         图 2 所示为本实施例的内存分配方法, 包括 :
         步骤 201 : 操作系统在初始化过程中, 从内存中划分出一个区域作为内存保留区, 供紧急情况下分配使用 ;
         操作系统可分为两个部分, 引导程序和内核, 内存保留区是由操作系统的引导程 序划分的。
         内存保留区以外的内存资源作为内存普通区, 供正常分配使用。步骤 202 : 操作系统在接收到应用的内存申请请求后, 判断内存普通区中的内存 量是否达到应用所申请的内存量, 如果达到, 则执行步骤 203 ; 否则, 执行步骤 204 ;
         步骤 203 : 操作系统直接从内存普通区中为应用分配内存, 结束 ;
         步骤 204 : 操作系统判断应用是否为紧急应用, 如果不是紧急应用, 则执行步骤 205 ; 否则, 执行步骤 206 ;
         应用在运行时需要申请内存, 每个应用均有一个标识, 可预先保存紧急应用的标 识, 接收到内存申请请求后, 可根据申请内存的应用的标识判断该应用是否是紧急应用。 紧 急应用可能是紧急救生的应用等。
         步骤 205 : 操作系统将该应用挂起, 等待内存普通区中的内存资源释放, 结束 ;
         步骤 206 : 操作系统从内存保留区中为紧急应用分配内存资源 ;
         步骤 207 : 紧急应用运行结束后, 将紧急应用占用的资源释放给内存保留区。
         上述步骤 206 具体包括如下子步骤 :
         2061 : 搜索内存保留区中保存的该内存保留区的空闲内存链表, 查找一个容量大 于紧急应用所申请内存的空闲内存块 ;
         2062 : 将查找到的空闲内存块的容量值与所设定的内存容量阈值进行比较, 如果 查找到的空闲内存块的容量值大于所设定的内存容量阈值, 则执行步骤 2063 ; 否则, 执行 步骤 2065 ; 2063 : 将此空闲内存块拆分为两个部分, 一部分作为使用块, 容量为设定的内存容 量阈值, 另一部分为未用块, 是阈值以外的剩余部分, 将使用块分配给紧急应用 ;
         2064 : 将使用块从空闲内存链表中删除, 将未用块添加到块链表和空闲内存链 表;
         块链表的作用是管理内存池中所有内存块, 而空闲内存链表主要管理尚未使用的 内存块。
         将空闲内存块拆分为两部分后, 使用块使用原空闲内存块的链表头已链接在块链 表中, 而未用块与块链表和空闲内存链表均无链接, 因此, 需要进行链接。
         由于已对空闲内存块进行拆分, 因此, 需要在块链表中完成使用块和未用块的重 链接。
         2065 : 将查找到的空闲内存块分配给紧急应用, 并从空闲内存链表中删除。
         上述步骤 207 具体包括如下子步骤 :
         步骤 207 是将内存归还给内存保留区, 此时要进行相邻空闲内存块的合并。
         2071 : 从块链表中查询当前释放的内存块的前一块的状态, 若为空闲, 将此块与前 块合并, 并将所释放的内存块的链接信息从块链表中删除 ; 如果前块为使用装置, 则将当前 内存块增加到空闲内存链表中 ;
         释放的内存块的前一块的状态可通过查看块链表中的链接信息获知, 如果在前一 块在空闲内存链表中, 则为空闲块 ; 否则, 为使用块。
         释放的内存块与前块合并后, 两个内存块变成了一个, 所以释放的内存块的链接 信息应删除, 以前一块的链接信息为准。
         2072 : 从块链表中查询后一块的状态, 如果为空闲, 则与后块合并, 并且将后一块 的链接信息从块链表和空闲内存链表中删除。
         如果后一块为空闲, 完成合并后, 释放的内存块与前一块及后一块将组成一个内 存块, 如果后一块不为空闲, 则不与后一块合并。
         图 3 为块链表结构, 从块链表中可以查询到内存块的前一内存块、 后一内存块、 前 一空闲内存块和后一空闲内存块等信息。
         本实施例的方法可应用在各种操作系统中, 下面以在 Linux 操作系统中实现为例 进一步说明本方法。实施例主要针对标准 Linux 内核的内存子系统进行了完善, 提供了相 应的增强功能。
         本实施例在标准 Linux 版本的内存管理的基础上增加了在紧急情况下分配内存 的机制, UB(user memory block, 用户内存区 ) 池中管理的内存实际分为两部分, 一部分 为在系统启动时预留的 BIGPHYSAREA 区域, 此区域为系统启动时从物理内存中保留的内存 区, 对 Linux 内核不可见 ; 另一部分为 Linux 内核所管理的普通内存区域。
         如图 4 所示, 本实施例中根据 Linux 系统的特性和功能对系统中的物理内存池进 行了重划分, 包括 : 内核管理空间 ( 内存普通区 ) 和 BIGPHYSAREA 区域, 该 BIGPHYSAREA 区 域包括 DMA 内存保留区、 通用内存保留区、 紧急情况 UB 池分配区和系统重启不破坏数据区, 其中系统重启不破坏数据区位于 BIGPHYSAREA 空间的高端地址部分。
         为保证本实施例方法在 Linux 中的实现, 还在 Linux 中增加了以下关键的数据结构: struct UB_info : UB 头信息结构, 系统每分配一个内存块都要增加头信息结构, UB_info 里边包含了该内存块的相关信息。
         struct UB_info{
         Int_t type ; ( 记录 UB 块分配方式 )
         Int32_t crc ; ( 校验字 )
         struct list_head list ; (UB 块链表 )
         }
         struct slab_area_info : 记录了 UB 池信息结构。
         struct slab_area_info{
         Unsigned long size ; (UB 池总大小 )
         Unsigned long UB_cnt ; (UB 块个数 )
         }
         struct arena_header : 从 BIGPHYAREA 空间分配的紧急 UB 块结构。
         struct arena_header{
         size_t type ; (UB 块状态, 空闲还是被使用 )
         size_t size ; ( 当前 UB 块大小 )
         struct free_arena_header*next, *prev ; (UB 块链表 )
         };
         struct free_arena_header : 保留内存区中内存管理的主要结构, 它驻留在各个 内存块的顶端, 图 3 示出了此种内存管理方式内存块之间链表指向关系。
         struct free_arena_header{
         struct arena_header a ; (UB 块头地址 )
         struct free_arena_header*next_free, *prev_free ; ( 空闲 UB 块地址 )
         };
         struct free_arena_header_malloc_head : 预留 BIGPHYAREA 区域 UB 块的链表头。
         对于紧急 UB 池的分配, 当从 Linux 无法分配出内存时, 只有从系统启动时预留的 BIGPHYAREA 空间中进行分配, 以下就是此内存区域分配内存的具体步骤, 如图 5 所示, 包 括:
         501 : 在系统启动初始化之后, 创建空闲内存链表头 ( 即空闲内存链表的第一个节 点 ), 并且此头的双向链表指针指向系统启动后获取的 BIGPHYAREA 空间, 链表所指的空闲 区域大小为初始化后的整个 BIGPHYAREA 空间 ;
         502 : 应用在运行过程中申请内存, 系统判断普通内存区中资源是否充足 ;
         503 : 如果充足, 则直接分配内存 ;
         从普通内存区中分配资源的具体步骤包括 :
         5031 : 对 申 请 分 配 的 内 存 空 间 进 行 修 正, 将 申 请 分 配 空 间 大 小 改 为 size = size+sizeof(struct UB_info) ;
         5032 : 调 用 kmalloc 进 行 分 配 (kmalloc 分 配 的 内 存 在 物 理 上 是 连 续 的 ), 如 果 kmalloc 分配成功, 则在 UB 头中设置 UB_MALLOC_K 标志, 返回给用户使用地址为 p = address+sizeof(struct UB_info), 如果分配失败, 则调用 vmalloc 进行分配 (vmalloc 分 配的内存在逻辑上连续, 在物理上不要求连续 ) ;
         5033 : 如果 vmalloc 分配成功, 则在 UB 头中设置 UB_MALLOC_V 标志, 返回给用户使 用地址为 p = address+sizeof(struct UB_info), 如果 vmalloc 也分配失败, 说明此时内核 管理内存已不能分配出用户需求大小, 此时将判断申请内存的应用是否为紧急应用。
         504 : 如果普通内存区中已无足够内存可以分配, 进一步判断该应用是否为紧急应 用;
         505 : 若不是则将该应用挂起, 等待普通区内存资源释放 ;
         506 : 如果该应用为紧急应用, 则调用 malloc_from_big() 函数搜索 BIGPHYAREA 区 域的保留内存区, 并找到一个空闲块大小大于 size 的空闲块进行分配 ;
         为紧急应用分配内存的具体方法如下 :
         5061 : 如果当前空闲块大于 size+2*sizeof(struct free_arena_header), 则将此 块拆分为两部分, 拆分出来的即将被使用的块标记为被使用, 剩下的块链接同时链接到块 链表和空闲内存链表, 将使用块从空闲内存链表中删除 ;
         5062 : 如果当前空闲块小于 size+2*sizeof(struct free_arena_header), 则直接 将当前块标记为使用, 从空闲内存链表删除 ;
         5063 : 分配成功后在 UB 头中设置 UB_MALLOC_BIG 标志, 返回给应用使用地址为 p = address+sizeof(struct UB_info) 位置 ;
         507 : 紧急应用运行结束后, 则从保留内存区释放内存空间。
         释放此内存空间按如下步骤进行。
         5071 : 对输入地址的有效性进行检查 ;
         5072 : 从释放地址 p+sizeof(UB_info) 找到 UB 头, 根据 UB 头信息记录判断出是 kmalloc 分配的内存, vmalloc 分配的内存, 还是从 BIGPHYAREA 中分配的内存 ;5073 : 对释放地址进行修正 address = p-sizeof(UB_info), 并根据分配方式调用 相应底层接口, 与 kmalloc 和 vmalloc 相对应的释放接口分别为 kfree 和 vfree, 如果是通 过 malloc_from_big 申请的内存, 则调用 kmem_free 接口, 用修正后地址进行内存释放 ;
         5074 : 释放保留区内存时首先通过块链表判断当前释放块的前面块状态, 当为空 闲时, 将此块和前面块合并, 并从块链表中删除 ; 如果前面块不为空闲块, 则将当前块增加 到空闲内存链表 ;
         5075 : 判断后面块特性, 如果也为空闲, 则和后面块合并, 并且将后面块从块链表 和空闲内存链表中删除。
         图 6 为本实施方式的内存分配装置, 包括 : 引导??楹湍诖婀芾碜酉低?;
         引导???, 用于将内存空间划分为内存普通区和内存保留区 ;
         内存管理子系统, 用于在接收到应用的内存申请请求后, 判断内存普通区中的内 存量是否达到应用申请的内存量, 如果未达到, 则判断应用是否为紧急应用, 如果该应用为 紧急应用, 则从内存保留区中为该紧急应用分配内存资源, 内存管理子系统从内存保留区 中为该紧急应用分配内存资源的方法包括 : 从内存保留区的空闲内存链表中查找一个容量 大于紧急应用所申请内存量的空闲内存块 ; 将该空闲内存块的容量与预先配置的内存容量 阈值进行比较, 若该空闲内存块的容量大于内存容量阈值, 则将该空闲内存块拆分为使用 块和未用块, 使用块的容量等于内存容量阈值, 将使用块分配给紧急应用。 内存管理子系统, 还用于当紧急应用结束后, 将为该紧急应用分配的内存块释放 给内存保留区, 具体包括 : 从块链表中查询所释放的内存块的前一内存块的状态, 若该前一 内存块为空闲状态, 则将该释放的内存块与该前一内存块合并, 并将释放的内存块从块链 表中删除 ; 若该前一内存块为使用状态, 则将所要释放的内存块添加到空闲内存链表中。
         本装置各部分的其它功能请参考方法内容的描述。
         以上所述仅为本发明的优选实施例而已, 并不用于限制本发明, 对于本领域的技 术人员来说, 本发明可以有各种更改和变化。 凡在本发明的精神和原则之内, 所作的任何修 改、 等同替换、 改进等, 均应包含在本发明的?;し段е?。
        

    关于本文
    本文标题:一种内存分配方法及装置.pdf
    链接地址://www.4mum.com.cn/p-5868160.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 宁夏11选5前三走势图 五分彩骗局能举报吗 彩票网黑龙江11选5 棋牌游戏有规律吗 今日体彩开奖直播 体彩天津11选5开奖结果 河南快赢481是真的吗 红兰分布图 陕西11选5中奖助手 南通棋牌官网下载安装 排列3中奖计算公式 广东11选5彩乐乐 股票配资网站 广西十一选五玩法 中国七星彩开奖现场 幸运飞艇直播开奖记录