CN101853209A - 无线传感器网络节点内存管理方法 - Google Patents
无线传感器网络节点内存管理方法 Download PDFInfo
- Publication number
- CN101853209A CN101853209A CN 201010163562 CN201010163562A CN101853209A CN 101853209 A CN101853209 A CN 101853209A CN 201010163562 CN201010163562 CN 201010163562 CN 201010163562 A CN201010163562 A CN 201010163562A CN 101853209 A CN101853209 A CN 101853209A
- Authority
- CN
- China
- Prior art keywords
- task
- address
- memory
- stack
- physical
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
无线传感器网络节点内存管理方法,(1)将物理内存空间划分为边界固定的I/O映射区、应用区和***区;(2)将传感器网络应用程序进行编译,生成二进制执行代码;(3)为每个任务提供逻辑地址空间;(4)对步骤(2)中生成的二进制执行代码进行分析和翻译;(5)内核服务在运行时被调用,并对每个任务的内存操作指令进行合法性判断,若指令不合法,直接中止任务;否则,进行地址转换;(6)内核服务在各个任务对栈进行操作时,监视任务的栈增长情况,当栈的大小高于预设的警戒线时,暂时挂起该任务,进行物理内存重分配,当某个任务的栈持续增长,已经不存在其他具有空闲内存的任务可供调整时,中止该任务,收回其物理内存,重新分配给其他任务使用。
Description
技术领域
本发明主要属于无线传感器网络***软件技术领域,特指一种应用于无线传感器网络操作***的内存资源管理方法。
背景技术
随着普适计算技术的发展,运行在微型嵌入式设备上的应用程序日趋复杂,无线传感器网络是这方面的一个典型代表。在无线传感器网络的研究中,资源及能耗的限制、软件的复杂度,以及支持多跳传输的网络协议等均带来了大量的研究问题,而需要综合考虑上述因素的传感器网络***软件,则更面临重大的挑战。如美国的Crossbow公司制造的MICA2无线传感器网络节点(以下简称传感节点),采用8位的ATMega128L单片机作为处理器,普通干电池作为电源,并且仅具有4KB数据内存,却需要担负传感、拓扑维护、路由控制、电源管理、信号处理等多项任务。为了有效利用硬件资源,且增强***的可靠性,需要特殊的***软件作为支持。
内存是传感节点中最紧缺的资源之一,以常见的MICA2为例,它包含128KB的程序内存和4KB的数据内存,前者采用Flash作为存储介质,虽然容量相对较大,但写操作的耗电量和延迟都比较大,通常只适合存放程序代码;后者容量极为有限,在复杂的应用中还需要被多个任务共享,一方面每个任务都有严格的容量限制,另一方面,不同任务对同一块内存区域的写操作也容易相互影响,降低***的可靠性。因此,传感节点所用的***软件对内存资源的有效管理是一个重要的研究问题。
传统的通用操作***或嵌入式操作***通常依靠硬件支持实现内存管理。由于CPU支持虚拟地址映射,可以为每个进程提供独立、连续的虚拟内存空间,并根据实际需求为其分配物理内存。从而使内存能够有效利用,且各个进程之间通常不会互相干扰。而在目前较常用的微型(mote level)传感器网络节点中,由于能耗、成本、体积等诸多限制,其结构通常较为简单,处理器无法支持虚拟内存,也难以增加物理内存容量,甚至其内存容量连传统操作***中的页表(为支持虚拟地址映射,而需占用部分物理内存的数据结构)都难以存放。这意味着传统的内存管理机制难以适用于资源受限的传感节点,需要设计专用的操作***,以缓解有限的硬件资源和复杂的应用任务之间的矛盾。
TinyOS(http://www.tinyos.net)是目前在无线传感器网络中应用最广泛的专用操作***,具有一定的实用性。但由于TinyOS不支持抢占式多任务,各个任务只能串行执行,也就是一个任务执行完成后,下一个才能够开始执行。因此它的内存管理可以做得比较简单。TinyOS中的所有任务共享一个固定大小的堆和一个可以动态增长的栈,这种简单的内存管理机制使得编写应用程序时,必须显式的保存和恢复每个任务的状态信息,而且程序的错误可能导致各个任务和***的数据相互覆盖,进而造成整个节点的崩溃。
由于上述不足,使得TinyOS在面临一些比较复杂的应用的时候,显得过于薄弱,编写应用程序比较困难。因此,很多研究工作都提出和实现了支持抢占式多任务的传感节点操作***,除了把各个任务所用的物理内存区域相互分离之外,还包括很多其他的实用特性。
R.Kumar,E.Kohler,and M.Srivastava.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.RETOS: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)内存操作指令对栈进行后进先出LIFO的访问,不进行地址转换;
(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传感节点上实现,并支持采用ATMega128L单片机的MICAZ、XSM等节点。
为方便叙述,下面以常用的MICA2传感节点为例进行说明。该节点采用8位的ATMega128L单片机,包含4KB数据内存(由于本发明不涉及程序内存,因此,下文将数据内存简称“内存”)。由于存在三个主要障碍,使得难以对该节点实施有效的内存管理:
1)由于能耗的限制,内存容量很难有本质性的扩大,使得一个传感节点在运行多个任务时,难以有效分配内存。
2)由于不支持特权级,任何访存指令都能够访问到任意内存地址,一个任务的程序错误可能会影响到整个节点的可靠性。
3)由于不支持虚拟地址映射,应用直接访问物理地址,堆和栈的位置都无法调整。并且,由于栈通常是一块连续的内存,因此必须在物理内存中也保持这种连续性。
由于上述困难,在目前最常用的TinyOS操作***中,采用了一种简化的内存组织方式:如图1所示,内存地址0~0xFF是I/O映射区,0x100~0x10FF是用户区。用户区只有一个从0x100开始、大小固定的堆和一个从0x10FF开始、可向下增长的栈。所有任务共享这一个堆和一个栈,每个任务都有可能访问到物理内存的任何位置,操作***不考虑访问冲突的问题。
根据TinyOS所采用的内存组织方式,几乎所有应用程序的内存操作都可以被归纳为以下的几种模式:
1)对I/O映射区进行随机访问,包括直接寻址和间接寻址访问,下同。
2)对堆进行随机访问,通常在读写全局变量或静态变量时发生。
3)对栈进行随机访问,通常在读写局部变量时发生。
4)获取栈指针位置或者设置栈指针位置,通常在为函数调用构造栈帧(stack frame)时发生。
5)对栈进行LIFO(Last In,First Out,后进先出)的访问,如PUSH/POP/CALL/RET等指令。
由于I/O映射区、堆和栈都有明确的边界,因此,对于一般的TinyOS应用来说,可以很明确的判断任意一条内存操作指令属于以上的哪种模式。
本发明针对上述问题及TinyOS特点,提供地址转换的内核服务,采用代码翻译的方式识别内存操作指令并将其修改为对该内核服务的调用,从而实现运行时的逻辑地址到物理地址的转换,并能够保持逻辑地址不变,仅对物理内存进行调整,总之,基于这种地址空间的分离和解耦,支持不同任务之间的内存隔离和内存按需分配,具体来说,如图2所示,包括如下步骤(以MICA2传感节点为例):
1.对物理内存空间进行有效组织,如图3所示,将物理内存空间划分为I/O映射区、应用区和内核区。用户区进一步划分为N个段,每个段分配给一个任务。***区由***内核保留使用。所有任务均可访问I/O映射区,对用户区的访问仅限于当前任务所分配的段,所有任务都不能访问***区。
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)如果当前指令对栈进行随机访问,计算当前访问地址相对0x10FF的偏移,并加上当前段在物理内存中的结束地址,形成栈访问的实际物理地址。相当于把当前任务的逻辑地址0x10FF和当前段的结束物理地址右对齐,进行线性映射。
4)如果当前指令设置或获取栈指针位置,按照方法3)所述,进行地址转换或反向地址转换。具体来说,当任务设置栈指针位置时,由于其设置地址为逻辑地址,需转换为物理地址。反之,当获取栈指针位置时,则需反向转换为逻辑地址。使应用程序所感知的栈指针位置总是在逻辑地址,而实际的栈指针则总是指向物理地址。
5)如果当前指令是PUSH/POP/CALL/RET等需要对栈进行LIFO访问的指令,不进行地址转换,这是因为实际的栈指针寄存器所指向的已经是物理地址。但是,内核要在进行这些操作的同时,监视可能带来的栈增长,如果物理内存中当前段的堆和栈之间的空闲区域不足,则试图依靠对物理内存的组织方式进行调整来获得足够的空间。
6)虽然各个任务的所使用的物理内存互不交叠,但有时也需要依靠在任务之间共享内存来实现数据交换等功能。本发明提供了一系列***调用,使一个任务可以将其段内的某个物理内存块设为共享,当其他任务访问到高于0x10FF的逻辑地址时,将其线性映射到被共享的物理内存块中。
6.内核监视每个任务的栈增长情况,当栈的大小高于警戒线,也就意味着任务预置的物理内存段即将不足以容纳栈的增长,即将破坏到堆的时候。此时,挂起该任务,进行物理内存重分配。由于物理地址和逻辑地址的解耦,这一调整对应用程序透明。
理论上,当对物理内存的分配情况进行调整时,只需修改逻辑地址到物理地址的映射关系即可。但在本发明中,为了保证逻辑地址的快速转换,对于每个任务的堆和栈,其地址映射关系都是线性的。因此,在调整物理内存分配时,也必须维持这种线性关系,也就是说,任务的堆或栈在移动后必须仍然是连续的地址。本发明通过“浮动内存块”解决了这一问题:当一个任务m的栈持续增长,***内核监测得知堆和栈之间的空闲区域已经缩小到警戒线以下的时候,会暂时挂起任务m,并试图找到另外一个任务n,其空闲区域充足,且空闲区域在所有任务中最大。如果存在这样的任务n,且n>m(即n所在的段的物理地址高于m所在段的物理地址),则把从任务m的栈指针到任务n的堆边界之间的内存块作为浮动内存块,通过移动这块内存,并相应的修改从m到n之间的所有任务的段边界,即可在不改变各个堆或栈的线性映射关系的情况下,把n的一部分物理内存分配给m。反之,若n<m,则把从任务n的栈指针到任务m的堆边界之间的内存块作为浮动内存块,并向反方向移动内存,从而实现把n的物理内存分配给m。通过上述方法调整前后的内存关系如图4所示。
7.当某个任务的栈持续增长,已经不存在其他具有空闲内存的任务可供调整时,中止该任务,回收其所占的所有物理内存,重新分配给其他任务使用。
本发明未详细说明部分属于本领域技术人员公知常识。
Claims (6)
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的栈指针到任务n的堆边界之间的内存块作为浮动内存块,否则,把从任务n的栈指针到任务m的堆边界之间的内存块作为浮动内存块,通过移动浮动内存块在物理内存中的位置,并相应的修改从m到n之间的所有任务的段边界,从而实现把n的空闲区域分配给m。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010163562XA CN101853209B (zh) | 2010-04-29 | 2010-04-29 | 无线传感器网络节点内存管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010163562XA CN101853209B (zh) | 2010-04-29 | 2010-04-29 | 无线传感器网络节点内存管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101853209A true CN101853209A (zh) | 2010-10-06 |
CN101853209B CN101853209B (zh) | 2011-08-10 |
Family
ID=42804713
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010163562XA Expired - Fee Related CN101853209B (zh) | 2010-04-29 | 2010-04-29 | 无线传感器网络节点内存管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101853209B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105512091A (zh) * | 2015-12-03 | 2016-04-20 | 青岛海信移动通信技术股份有限公司 | 一种内存分配方法及装置 |
CN103631648B (zh) * | 2012-08-20 | 2017-02-22 | 华为技术有限公司 | 一种任务处理方法及*** |
CN106547625A (zh) * | 2016-11-04 | 2017-03-29 | 深圳市证通电子股份有限公司 | 金融终端的内存分配方法及装置 |
CN107643943A (zh) * | 2016-07-20 | 2018-01-30 | 大唐移动通信设备有限公司 | 一种任务栈的管理方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1729456A1 (en) * | 2005-05-30 | 2006-12-06 | Sap Ag | Method and system for selection of network nodes |
US7272698B2 (en) * | 2003-03-19 | 2007-09-18 | Autodesk, Inc. | Heap memory management |
CN101207602A (zh) * | 2006-12-22 | 2008-06-25 | 中国科学院计算技术研究所 | 一种用于无线传感器网络节点上的处理芯片 |
CN101282265A (zh) * | 2008-04-18 | 2008-10-08 | 西安交通大学 | 一种基于无线传感器网络节点的视觉传感器驱动方法 |
-
2010
- 2010-04-29 CN CN201010163562XA patent/CN101853209B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7272698B2 (en) * | 2003-03-19 | 2007-09-18 | Autodesk, Inc. | Heap memory management |
EP1729456A1 (en) * | 2005-05-30 | 2006-12-06 | Sap Ag | Method and system for selection of network nodes |
CN101207602A (zh) * | 2006-12-22 | 2008-06-25 | 中国科学院计算技术研究所 | 一种用于无线传感器网络节点上的处理芯片 |
CN101282265A (zh) * | 2008-04-18 | 2008-10-08 | 西安交通大学 | 一种基于无线传感器网络节点的视觉传感器驱动方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103631648B (zh) * | 2012-08-20 | 2017-02-22 | 华为技术有限公司 | 一种任务处理方法及*** |
CN105512091A (zh) * | 2015-12-03 | 2016-04-20 | 青岛海信移动通信技术股份有限公司 | 一种内存分配方法及装置 |
CN105512091B (zh) * | 2015-12-03 | 2019-03-12 | 青岛海信移动通信技术股份有限公司 | 一种内存分配方法及装置 |
CN107643943A (zh) * | 2016-07-20 | 2018-01-30 | 大唐移动通信设备有限公司 | 一种任务栈的管理方法及装置 |
CN106547625A (zh) * | 2016-11-04 | 2017-03-29 | 深圳市证通电子股份有限公司 | 金融终端的内存分配方法及装置 |
CN106547625B (zh) * | 2016-11-04 | 2021-01-12 | 深圳市证通电子股份有限公司 | 金融终端的内存分配方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101853209B (zh) | 2011-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7937419B2 (en) | Garbage collection via multiobjects | |
US9244883B2 (en) | Reconfigurable processor and method of reconfiguring the same | |
US9183053B2 (en) | Migrating threads across NUMA nodes using corresponding page tables and based on remote page access frequency | |
KR101694977B1 (ko) | 통합 메모리 서비스를 위한 소프트웨어 구조 및 이 소프트웨어 구조를 이용한 통합 메모리 서비스 제공 방법 | |
CN102693188B (zh) | 用于在可控运行时环境中进行基于硬件的动态逸出检测的方法和装置 | |
CN101739358B (zh) | 利用虚存机制对片上异构存储资源动态分配的方法 | |
CN102073596B (zh) | 针对指令的可重构片上统一存储器管理方法 | |
CN104487953A (zh) | 用于层次型存储器***的存储器管理 | |
RU2641244C2 (ru) | Унифицированный доступ к совместно используемой и управляемой памяти | |
CN103677654A (zh) | 一种存储数据的方法及电子设备 | |
EP2316074A1 (en) | Copying entire subgraphs of objects without traversing individual objects | |
CN101853209B (zh) | 无线传感器网络节点内存管理方法 | |
WO2023133990A1 (zh) | 一种基于嵌入式实时操作***实现轻量级安全容器的设计方法 | |
CN103793255A (zh) | 可配置的多主模式多os内核实时操作***架构与启动方法 | |
CN104102460A (zh) | 一种基于云计算的内存管理方法及装置 | |
CN102567220A (zh) | Cache存取的控制方法及装置 | |
US9262162B2 (en) | Register file and computing device using the same | |
Gao et al. | The HTMT program execution model | |
Jones et al. | Unity: unified memory and file space | |
Hu et al. | A novel design of software system on chip for embedded system | |
US11474832B2 (en) | Intelligently determining a virtual machine configuration during runtime based on garbage collection characteristics | |
KR101512716B1 (ko) | 가상 스토리지 이미지 경량화 시스템 및 가상 스토리지 이미지 경량화 시스템의 입출력 방법 및 가상 스토리지 이미지 생성 방법 | |
West et al. | A hybrid approach to processing big data graphs on memory-restricted systems | |
Haine et al. | A middleware supporting data movement in complex and software-defined storage and memory architectures | |
CN101482851A (zh) | 二进制翻译器中线程共享目标本地码缓存替换方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110810 Termination date: 20140429 |