无线传感器网络节点内存管理方法

文档序号:6601813阅读:397来源:国知局
专利名称:无线传感器网络节点内存管理方法
技术领域
本发明主要属于无线传感器网络系统软件技术领域,特指一种应用于无线传感器 网络操作系统的内存资源管理方法。
背景技术
随着普适计算技术的发展,运行在微型嵌入式设备上的应用程序日趋复杂,无线 传感器网络是这方面的一个典型代表。在无线传感器网络的研究中,资源及能耗的限制、 软件的复杂度,以及支持多跳传输的网络协议等均带来了大量的研究问题,而需要综合考 虑上述因素的传感器网络系统软件,则更面临重大的挑战。如美国的Crossbow公司制造的 MICA2无线传感器网络节点(以下简称传感节点),采用8位的ATMegal28L单片机作为处 理器,普通干电池作为电源,并且仅具有4KB数据内存,却需要担负传感、拓扑维护、路由控 制、电源管理、信号处理等多项任务。为了有效利用硬件资源,且增强系统的可靠性,需要特 殊的系统软件作为支持。内存是传感节点中最紧缺的资源之一,以常见的MICA2为例,它包含128KB的程序 内存和4KB的数据内存,前者采用Flash作为存储介质,虽然容量相对较大,但写操作的耗 电量和延迟都比较大,通常只适合存放程序代码;后者容量极为有限,在复杂的应用中还需 要被多个任务共享,一方面每个任务都有严格的容量限制,另一方面,不同任务对同一块内 存区域的写操作也容易相互影响,降低系统的可靠性。因此,传感节点所用的系统软件对内 存资源的有效管理是一个重要的研究问题。传统的通用操作系统或嵌入式操作系统通常依靠硬件支持实现内存管理。由于 CPU支持虚拟地址映射,可以为每个进程提供独立、连续的虚拟内存空间,并根据实际需求 为其分配物理内存。从而使内存能够有效利用,且各个进程之间通常不会互相干扰。而在 目前较常用的微型(mote level)传感器网络节点中,由于能耗、成本、体积等诸多限制,其 结构通常较为简单,处理器无法支持虚拟内存,也难以增加物理内存容量,甚至其内存容量 连传统操作系统中的页表(为支持虚拟地址映射,而需占用部分物理内存的数据结构)都 难以存放。这意味着传统的内存管理机制难以适用于资源受限的传感节点,需要设计专用 的操作系统,以缓解有限的硬件资源和复杂的应用任务之间的矛盾。TinyOS(http://www. tinyos. net)是目前在无线传感器网络中应用最广泛的专用 操作系统,具有一定的实用性。但由于TinyOS不支持抢占式多任务,各个任务只能串行执 行,也就是一个任务执行完成后,下一个才能够开始执行。因此它的内存管理可以做得比较 简单。TinyOS中的所有任务共享一个固定大小的堆和一个可以动态增长的栈,这种简单的 内存管理机制使得编写应用程序时,必须显式的保存和恢复每个任务的状态信息,而且程 序的错误可能导致各个任务和系统的数据相互覆盖,进而造成整个节点的崩溃。由于上述不足,使得TinyOS在面临一些比较复杂的应用的时候,显得过于薄弱, 编写应用程序比较困难。因此,很多研究工作都提出和实现了支持抢占式多任务的传感节 点操作系统,除了把各个任务所用的物理内存区域相互分离之外,还包括很多其他的实用特性。R. Kumar, E. Kohler, and M. Sr i vastava. Harbor software-based memoryprotection for sensor nodes. In Proceedings of the 6th internationalconference on Information processing in sensor networks, pages 340-349. ACM,2007.H. Cha, S.Choi, I. Jung, H. Kim, et al. RET0S :resilient, expandable, andthreaded operating system for wireless sensor networks. In Proceedings ofthe 6th international conference on Information processing in sensornetworks,pages 148-157. ACM,2007.上面两篇论文出自不同的研究机构,也各有不同的特点。但对于内存管理这部分, 两篇论文的做法非常类似,既实现了对不同任务的区域划分,也支持内存访问越界的检测。 但这两篇论文在两个方面存在不足首先是缺乏逻辑空间的概念,需要重新编写应用程序, 不能和现有的TinyOS应用程序兼容;其次是内存空间在应用程序启动时就确定了,不能进 行调整。Lin Gu and John A. Stankovic. t-kernel -providing reliable OS support towireless sensor networks. In Proceedings of the 4th international conferenceon embedded networked sensor systems, pages 1-14. ACM,2006这篇论文最大的特点是采用基于Flash介质的外部存储实现类似传统计算机的 内存换页,但由于Flash介质的寿命问题,这一特点并不实用。而对于物理内存分配,则完 全是手动的,也就是需要编写程序的人员对内存使用情况进行估计,并根据估计结果指定 每个任务所占用的物理内存区域。对于内存冲突问题,仅能防止应用程序访问内核的内存 区域,而对于各个任务之间的内存操作产生冲突没有任何处理手段。Qing Cao, Tarek Abdelzahe r, John Stankovic, and Tian He. The LiteOSoperating system :Towards unix—like abstractions for wireless sensornetworks. In Proceedings of the 7th international conference on Informationprocessing in sensor networks, pages 233-244. IEEE Computer Society, 2008.这篇论文同样提出了为各个任务划分不同内存区域的思想,而且,为了避免在运 行时对内存操作指令进行地址转换,论文中还提出了一种发现和修改访存相关指令的方 法,但上述方法的可行性尚未经过严格论证,而且在原型系统中,该方法并未真正实现,仍 然需要程序员为每个任务分配固定的内存区域。综上所述,在上述支持抢占式多任务的系统中,比较共性的问题是不支持逻辑空 间的概念,从而与现有的大量TinyOS应用程序难以兼容,并且每个任务所使用的物理内存 区域都是固定的,为了合理划分有限的物理内存,需要在运行之前就自动或人工估计每个 任务的内存使用量。然而应用和环境的复杂性,使这样的估计非常困难。通常为了确保任 务的内存够用,需要比较保守的估计一个较大的数目,但由于物理内存的容量太小,很难同 时满足多个任务的需求。事实上,由于无线传感器网络应用的动态性较强,对内存的需求也经常随时间而 变化,按照每个任务所用的最大内存量来分配显然是非常不合理的。因此,本发明在传感节点专用的操作系统(下文简称“传感节点操作系统”)中引入动态内存管理机制,使每个任 务所用的内存能够按需分配,从而有效克服了现有的传感节点操作系统的不足。为简化应 用程序的设计,还需要使这种动态的内存管理机制对应用透明,这就需要进一步为应用提 供与物理地址分离的逻辑地址空间,使编写应用程序时只需要关注固定的逻辑地址,而在 实际运行时,再由操作系统将逻辑地址转换为具体的物理地址,依靠这种地址转换的过程, 传感节点操作系统一方面能够确保不同的任务所使用的物理内存互不干扰,另一方面也能 够实现对各个任务所使用的内存的调整和重分配。目前主流的传感节点硬件并不支持虚拟 地址映射等功能。因此,需要从软件的角度设计和实现上述机制。

发明内容
本发明的技术解决问题是提供一种无线传感器网络节点多任务操作系统的内存 管理方法,该方法在不支持虚拟地址映射的传感节点上,采用软件技术,为每个任务提供独 立的逻辑地址空间,以及逻辑地址向物理地址的映射机制,并且基于这种地址空间的分离 和解耦,支持不同任务之间的内存隔离和内存按需分配。本发明的技术解决方案是无线传感器网络的节点内存管理方法,包括下列步 骤(1)将物理内存空间划分为边界固定的I/O映射区、应用区和系统区;I/O映射区 由所有任务共享访问,应用区被分为N段,每段分配给一个任务,每个任务的访问权限仅限 于所分配的段,系统区仅由系统内核使用,所有任务都不能访问;(2)将传感器网络应用程序进行编译,生成二进制执行代码;(3)为每个任务提供大小与整个物理内存相同的逻辑地址空间;(4)对步骤(2)中生成的二进制执行代码进行分析和翻译;识别每个任务二进制 执行代码中所有的内存操作指令,并将其修改为对相应的内核服务的调用;(5)内核服务在运行时被调用,并对每个任务的内存操作指令进行合法性判断,若 识别的内存操作指令不合法,直接中止任务;否则,根据内存操作指令的访存地址落入I/O 映射区、堆或者栈的不同情况,采用不同的地址转换方法,具体如下(5. 1)内存操作指令对I/O映射区进行随机访问,除非所访问的是栈指针,需要按 方法(5.4)处理之外,其他都不进行地址转换;(5. 2)内存操作指令对堆进行随机访问,把访问地址作为逻辑地址,计算在当前任 务的逻辑空间中的偏移,并加上当前段在物理内存中的起始地址,形成堆访问的实际物理 地址;(5. 3)内存操作指令对栈进行随机访问,把访问地址作为逻辑地址,计算在当前任 务的逻辑空间中的偏移,并加上当前段在物理内存中的结束地址,形成栈访问的实际物理 地址;(5. 4)内存操作指令设置栈指针位置,按照(5. 3)所述的方法进行地址转换;内存 操作指令为获取栈指针位置,则将物理地址反向转换为逻辑地址;(5. 5)内存操作指令对栈进行后进先出LIF0的访问,不进行地址转换;(6)内核服务在各个任务对栈进行操作时,监视任务的栈增长情况,当栈的大小高 于预设的警戒线时,暂时挂起该任务,进行物理内存重分配,当某个任务的栈持续增长,已经不存在其他具有空闲内存的任务可供调整时,中止该任务,收回其物理内存,重新分配给 其他任务使用。将高于物理地址上限的逻辑空间作为共享内存区,当其他任务访问到高于该物理 地址上限的逻辑空间地址时,将该段逻辑空间映射到共享内存区。所述步骤(4)中的翻译过程中,对识别的内存操作指令进行现场敏感性分析、转 换合并性能优化。所述的现场敏感性分析是指对下列情况进行判断当地址转换之后的指令序列并 不依赖于在地址转换中被修改的寄存器时,可以不需要进行现场保存和恢复,从而节省开 销,提高效率。所述的转换合并是指对同一种访存模式的相邻的访存指令仅进行一次地址转换, 后续指令按照该模式下第一条指令的地址转换结果,加上在逻辑地址上相对于第一条指令 的偏移,再进行访问。所述步骤(6)中的物理内存重分配通过调整浮动内存块的方式进行,具体如下当任务m的空闲区域即将不能容纳其栈增长的时候,任务被暂时挂起,系统内核 查找另外一个任务n,其空闲区域充足,且空闲区域在所有任务中最大;若n所在的段的物 理地址高于m所在段的物理地址,则把从任务m的栈指针到任务n的堆边界之间的内存块 作为浮动内存块,否则,把从任务n的栈指针到任务m的堆边界之间的内存块作为浮动内存 块,通过移动浮动内存块在物理内存中的位置,并相应的修改从m到n之间的所有任务的段 边界,从而实现把n的空闲区域分配给m。本发明与现有技术相比有益效果为(1)通过将物理内存空间划分为I/O映射区、用户区和系统区,从而有效管理容量 有限的内存资源,支持抢占式多任务的传感节点操作系统,确保每个任务所能够访问的内 存空间相互独立,不会发生干扰。(2)在硬件受限的传感节点上引入各任务独立的逻辑地址空间机制,支持逻辑 地址到物理地址的运行时动态映射。通过逻辑地址和物理地址的解耦,全面兼容现有的 TinyOS应用程序。(3)根据任务的需要,动态调整每个任务的物理内存占用情况,从而降低多任务的 传感器网络应用开发难度,增加可靠性。


图1为TinyOS所采用的物理内存组织方式;图2为本发明的方法流程图;图3为采用本发明的传感节点物理内存空间组织方式和逻辑空间组织方式;图4为本发明对内存空间进行调整前后的效果。
具体实施例方式以下将结合附图对本发明做进一步详细说明。目前本发明已有原型系统在MICA2 传感节点上实现,并支持采用ATMegal28L单片机的MICAZ、XSM等节点。为方便叙述,下面以常用的MICA2传感节点为例进行说明。该节点采用8位的
7ATMegal28L单片机,包含4KB数据内存(由于本发明不涉及程序内存,因此,下文将数据内 存简称“内存”)。由于存在三个主要障碍,使得难以对该节点实施有效的内存管理1)由于能耗的限制,内存容量很难有本质性的扩大,使得一个传感节点在运行多 个任务时,难以有效分配内存。2)由于不支持特权级,任何访存指令都能够访问到任意内存地址,一个任务的程 序错误可能会影响到整个节点的可靠性。3)由于不支持虚拟地址映射,应用直接访问物理地址,堆和栈的位置都无法调整。 并且,由于栈通常是一块连续的内存,因此必须在物理内存中也保持这种连续性。由于上述困难,在目前最常用的TinyOS操作系统中,采用了一种简化的内存组织 方式如图1所示,内存地址0 OxFF是I/O映射区,0x100 OxlOFF是用户区。用户区 只有一个从0x100开始、大小固定的堆和一个从OxlOFF开始、可向下增长的栈。所有任务 共享这一个堆和一个栈,每个任务都有可能访问到物理内存的任何位置,操作系统不考虑 访问冲突的问题。根据TinyOS所采用的内存组织方式,几乎所有应用程序的内存操作都可以被归 纳为以下的几种模式1)对1/0映射区进行随机访问,包括直接寻址和间接寻址访问,下同。2)对堆进行随机访问,通常在读写全局变量或静态变量时发生。3)对栈进行随机访问,通常在读写局部变量时发生。4)获取栈指针位置或者设置栈指针位置,通常在为函数调用构造栈帧(stack frame)时发生。5)对栈进行 LIF0 (Last In, First Out,后进先出)的访问,如 PUSH/P0P/CALL/RET 等指令。由于1/0映射区、堆和栈都有明确的边界,因此,对于一般的TinyOS应用来说,可 以很明确的判断任意一条内存操作指令属于以上的哪种模式。本发明针对上述问题及TinyOS特点,提供地址转换的内核服务,采用代码翻译的 方式识别内存操作指令并将其修改为对该内核服务的调用,从而实现运行时的逻辑地址到 物理地址的转换,并能够保持逻辑地址不变,仅对物理内存进行调整,总之,基于这种地址 空间的分离和解耦,支持不同任务之间的内存隔离和内存按需分配,具体来说,如图2所 示,包括如下步骤(以MICA2传感节点为例)1.对物理内存空间进行有效组织,如图3所示,将物理内存空间划分为1/0映射 区、应用区和内核区。用户区进一步划分为N个段,每个段分配给一个任务。系统区由系统 内核保留使用。所有任务均可访问1/0映射区,对用户区的访问仅限于当前任务所分配的 段,所有任务都不能访问系统区。2.为了最大程度支持现有的大量TinyOS应用,令已有的TinyOS程序几乎不需要 人工修改源代码就能够在本发明所述的传感节点操作系统中执行,甚至是多个TinyOS程 序作为不同的任务,在同一个传感节点上并发执行。需要提供逻辑地址空间的机制,通过这 种机制,TinyOS程序仍然可以保持已有的内存组织方式,但其所感知和所操作的内存只是 逻辑空间,其逻辑地址会在运行时动态的映射到一个物理地址,如图3所示。本发明为每个 任务提供与整个物理内存相对应的逻辑地址空间,在进行应用编程时可以假设每个任务都独占全部物理内存,具体使用情况将由系统进行分配。3.由于常见的传感节点并不支持特权级和虚拟地址映射,无论是访存限制还是逻 辑地址的机制,都需要由操作系统通过软件方法实现。本发明采取了代码翻译的方法。代 码翻译无论在传统计算机中还是在传感器网络中都是一种常用的技术,技术细节也各有不 同,本发明并不把代码翻译的细节问题作为重点,而直接沿用已有技术,识别二进制执行代 码中所有的内存操作指令,包括直接、间接读写内存指令、栈操作指令等等;并且通过翻译 将上述指令修改为对某个内核服务的调用。内核是一段预编译的二进制代码,包含了一系 列内核服务。内核代码所用的程序内存空间是预先保留的,其基地址固定,所以内核服务的 地址也可以预先确定。4.在TinyOS中,应用程序总是直接访存,而在本发明中,访存之前需要经过多条 指令组成的地址变换、地址保护以及必要的现场保护和恢复等操作,降低了系统性能。虽然 大多数传感器网络应用都是周期性工作,且工作时间往往很短,但为了增强本发明的适用 范围,仍需要在翻译的过程中,同时考虑内存操作指令周围的若干条指令,并对其进行现场 敏感性分析、转换合并等性能优化。在地址转换之前和之后,分别需要进行保存现场(包括多个寄存器)和恢复现场 的工作,影响了性能。但实际上,并不是所有的情况都需要保存和恢复现场。当地址转换之 后的指令序列并不依赖于在地址转换中被修改的寄存器时(称之为对现场不敏感),可以 不需要进行现场保存和恢复。这项优化方法称为现场敏感性分析。MICA2的访存指令每次只能读写一个字节,而应用往往需要读写两个或者四个字 节。因此,在应用的代码中经常出现两条或者四条连续的访存指令,且都属于同一种访存模 式。可以对这些访存指令仅进行一次地址变换,后续指令按照该模式下第一条指令的地址 转换结果进行访问,从而减少开销。这项优化方法称为转换合并。5.由于逻辑地址和物理地址的映射关系随时可能会在运行时改变,即使对于逻辑 地址已经确定的直接访存指令,也无法在翻译中预先知道该地址所对应的物理地址,因此, 本发明采取了若干个内核服务进行运行时的动态转换,并通过翻译,把应用程序中的内存 操作指令重定向到相应的内核服务,从而在运行时,由内核服务进行地址转换后,再进行实 际的内存操作。通过上述方法,能够在应用程序对内存进行操作时,由内核服务进行快速地址变 换,从而实现了逻辑地址和物理地址的分离和解耦。借助这种机制,除了能够实现任务之间 的内存隔离之外,还可以在应用无感知的情况下,对各个任务所实际占用的物理内存进行调整。根据前文所述的TinyOS应用程序的内存操作模式,应用所占用的内存发生变化 源于栈的向下增长。由于栈增长往往难以在运行之前预测,当多个任务并发执行时,很难分 配内存空间以满足每个任务。常见的支持多任务的传感节点操作系统往往为每个任务分配 均等的内存,或者由程序设计人员手动指定分配情况。而本发明通过为每个任务提供独立 的逻辑地址,使每个任务都可以认为在4KB的逻辑空间中,除了 I/O映射区和堆之外,剩下 的部分(直到栈底)全部能够用于栈增长。而实际上,由系统内核进行物理内存的动态分 配。多数情况下,由于任务对栈的需求高峰只是暂时发生,只需要错开各个任务的高峰期即 可;即使出现了最坏的情况,内核已无法分配物理内存以满足每个任务的需求,也可以中止某个任务,回收其所用的物理内存,确保其他任务的正常运行。2.内核在系统初始化时,将应用区等分为N段,其中N是任务的个数,每个任务都 分配一个段,段的初始大小相等,但随着系统的运行可能发生调整,每段的边界地址由内核 维护。3.每个任务都包含一个堆和一个栈,其中堆的位置和大小相对固定,栈的边界位 置由栈指针表示,允许增长和缩小。4.由于应用程序预先经过翻译,每个任务的访存指令都会经由内核服务进行地址 转换。内核服务根据堆和栈的相关信息,判断访存操作是否合法,如果不合法,直接中止该 任务,而不影响其他任务。5.对于合法的访存操作,根据访存地址落入堆、栈,或者I/O映射区的不同情况, 采用不同的地址转换方法。为了均衡内存组织的便利性和地址转换的快捷性,本发明采取 了分段线性映射的方法,如图2所示,具体步骤如下1)如果当前指令对I/O映射区进行随机访问,除非所访问的是栈指针,需要按方 法4)处理之外,其他都不进行地址变换。这是因为I/O映射区是所有任务共享的,无论是 逻辑空间还是物理空间,其地址都不发生变化。2)如果当前指令对堆进行随机访问,计算当前访问地址相对0x100的偏移,并加 上当前段在物理内存中的起始地址,形成堆访问的实际物理地址。相当于把当前任务的逻 辑地址0x100和当前段的起始物理地址左对齐,进行线性映射。3)如果当前指令对栈进行随机访问,计算当前访问地址相对OxlOFF的偏移,并加 上当前段在物理内存中的结束地址,形成栈访问的实际物理地址。相当于把当前任务的逻 辑地址OxlOFF和当前段的结束物理地址右对齐,进行线性映射。4)如果当前指令设置或获取栈指针位置,按照方法3)所述,进行地址转换或反向 地址转换。具体来说,当任务设置栈指针位置时,由于其设置地址为逻辑地址,需转换为物 理地址。反之,当获取栈指针位置时,则需反向转换为逻辑地址。使应用程序所感知的栈指 针位置总是在逻辑地址,而实际的栈指针则总是指向物理地址。5)如果当前指令是PUSH/POP/CALL/RET等需要对栈进行LIF0访问的指令,不进行 地址转换,这是因为实际的栈指针寄存器所指向的已经是物理地址。但是,内核要在进行这 些操作的同时,监视可能带来的栈增长,如果物理内存中当前段的堆和栈之间的空闲区域 不足,则试图依靠对物理内存的组织方式进行调整来获得足够的空间。6)虽然各个任务的所使用的物理内存互不交叠,但有时也需要依靠在任务之间共 享内存来实现数据交换等功能。本发明提供了一系列系统调用,使一个任务可以将其段内 的某个物理内存块设为共享,当其他任务访问到高于OxlOFF的逻辑地址时,将其线性映射 到被共享的物理内存块中。6.内核监视每个任务的栈增长情况,当栈的大小高于警戒线,也就意味着任务预 置的物理内存段即将不足以容纳栈的增长,即将破坏到堆的时候。此时,挂起该任务,进行 物理内存重分配。由于物理地址和逻辑地址的解耦,这一调整对应用程序透明。理论上,当对物理内存的分配情况进行调整时,只需修改逻辑地址到物理地址的 映射关系即可。但在本发明中,为了保证逻辑地址的快速转换,对于每个任务的堆和栈,其 地址映射关系都是线性的。因此,在调整物理内存分配时,也必须维持这种线性关系,也就是说,任务的堆或栈在移动后必须仍然是连续的地址。本发明通过“浮动内存块”解决了这 一问题当一个任务m的栈持续增长,系统内核监测得知堆和栈之间的空闲区域已经缩小 到警戒线以下的时候,会暂时挂起任务m,并试图找到另外一个任务n,其空闲区域充足,且 空闲区域在所有任务中最大。如果存在这样的任务n,且n > m(即n所在的段的物理地址 高于m所在段的物理地址),则把从任务m的栈指针到任务n的堆边界之间的内存块作为 浮动内存块,通过移动这块内存,并相应的修改从m到n之间的所有任务的段边界,即可在 不改变各个堆或栈的线性映射关系的情况下,把n的一部分物理内存分配给m。反之,若n < m,则把从任务n的栈指针到任务m的堆边界之间的内存块作为浮动内存块,并向反方向 移动内存,从而实现把n的物理内存分配给m。通过上述方法调整前后的内存关系如图4所
7J\ o7.当某个任务的栈持续增长,已经不存在其他具有空闲内存的任务可供调整时, 中止该任务,回收其所占的所有物理内存,重新分配给其他任务使用。本发明未详细说明部分属于本领域技术人员公知常识。
1权利要求
无线传感器网络节点内存管理方法,其特征在于包括下列步骤(1)将物理内存空间划分为边界固定的I/O映射区、应用区和系统区;I/O映射区由所有任务共享访问,应用区被分为N段,每段分配给一个任务,每个任务的访问权限仅限于所分配的段,系统区仅由系统内核使用,所有任务都不能访问;(2)将传感器网络应用程序进行编译,生成二进制执行代码;(3)为每个任务提供大小与整个物理内存相同的逻辑地址空间;(4)对步骤(2)中生成的二进制执行代码进行分析和翻译;识别每个任务二进制执行代码中所有的内存操作指令,并将其修改为对相应的内核服务的调用;(5)内核服务在运行时被调用,并对每个任务的内存操作指令进行合法性判断,若识别的内存操作指令不合法,直接中止任务;否则,根据内存操作指令的访存地址落入I/O映射区、堆或者栈的不同情况,采用不同的地址转换方法,具体如下(5.1)内存操作指令对I/O映射区进行随机访问,除非所访问的是栈指针,需要按方法(5.4)处理之外,其他都不进行地址转换;(5.2)内存操作指令对堆进行随机访问,把访问地址作为逻辑地址,计算在当前任务的逻辑空间中的偏移,并加上当前段在物理内存中的起始地址,形成堆访问的实际物理地址;(5.3)内存操作指令对栈进行随机访问,把访问地址作为逻辑地址,计算在当前任务的逻辑空间中的偏移,并加上当前段在物理内存中的结束地址,形成栈访问的实际物理地址;(5.4)内存操作指令设置栈指针位置,按照(5.3)所述的方法进行地址转换;内存操作指令为获取栈指针位置,则将物理地址反向转换为逻辑地址;(5.5)内存操作指令对栈进行后进先出LIFO的访问,不进行地址转换;(6)内核服务在各个任务对栈进行操作时,监视任务的栈增长情况,当栈的大小高于预设的警戒线时,暂时挂起该任务,进行物理内存重分配,当某个任务的栈持续增长,已经不存在其他具有空闲内存的任务可供调整时,中止该任务,收回其物理内存,重新分配给其他任务使用。
2.根据权利要求1所述的无线传感器网络节点内存管理方法,其特征在于将高于物 理地址上限的逻辑空间作为共享内存区,当其他任务访问到高于该物理地址上限的逻辑空 间地址时,将该段逻辑空间映射到共享内存区。
3.根据权利要求1或2所述的无线传感器网络节点内存管理方法,其特征在于所述 步骤(4)中的翻译过程中,对识别的内存操作指令进行现场敏感性分析、转换合并性能优 化。
4.根据权利要求3所述的无线传感器网络节点内存管理方法,其特征在于所述的现 场敏感性分析是指对下列情况进行判断当地址转换之后的指令序列并不依赖于在地址转 换中被修改的寄存器时,可以不需要进行现场保存和恢复,从而节省开销,提高效率。
5.根据权利要求3所述的无线传感器网络节点内存管理方法,其特征在于所述的转 换合并是指对同一种访存模式的相邻的访存指令仅进行一次地址转换,后续指令按照该模 式下第一条指令的地址转换结果,加上在逻辑地址上相对于第一条指令的偏移,再进行访 问。
6.根据权利要求1或2所述的无线传感器网络节点内存管理方法,其特征在于所述步 骤(6)中的物理内存重分配通过调整浮动内存块的方式进行,具体如下当任务m的空闲区域即将不能容纳其栈增长的时候,任务被暂时挂起,系统内核查找 另外一个任务n,其空闲区域充足,且空闲区域在所有任务中最大;若n所在的段的物理地 址高于m所在段的物理地址,则把从任务m的栈指针到任务η的堆边界之间的内存块作为 浮动内存块,否则,把从任务η的栈指针到任务m的堆边界之间的内存块作为浮动内存块, 通过移动浮动内存块在物理内存中的位置,并相应的修改从m到η之间的所有任务的段边 界,从而实现把η的空闲区域分配给m。
全文摘要
无线传感器网络节点内存管理方法,(1)将物理内存空间划分为边界固定的I/O映射区、应用区和系统区;(2)将传感器网络应用程序进行编译,生成二进制执行代码;(3)为每个任务提供逻辑地址空间;(4)对步骤(2)中生成的二进制执行代码进行分析和翻译;(5)内核服务在运行时被调用,并对每个任务的内存操作指令进行合法性判断,若指令不合法,直接中止任务;否则,进行地址转换;(6)内核服务在各个任务对栈进行操作时,监视任务的栈增长情况,当栈的大小高于预设的警戒线时,暂时挂起该任务,进行物理内存重分配,当某个任务的栈持续增长,已经不存在其他具有空闲内存的任务可供调整时,中止该任务,收回其物理内存,重新分配给其他任务使用。
文档编号G06F12/02GK101853209SQ20101016356
公开日2010年10月6日 申请日期2010年4月29日 优先权日2010年4月29日
发明者卢锡城, 张一鸣, 彭宇行, 徐传福, 李东升, 王勇献, 王意洁, 田甜, 褚瑞, 车永刚, 陈振邦 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1