文件名称:事件内存管理-《中国2060年前碳中和研究报告》
文件大小:4.49MB
文件格式:PDF
更新时间:2024-06-28 01:03:12
UML 状态图 实用C设计 实用C++设计 中文全文
6.5 事件内存管理 在任何事件驱动型系统里,事件被频繁的产生和消费,因此它们自然是高度活跃的。每个实时框架最关 键的一个方面是管理被事件使用的内存,因为显然这个内存必须被频繁的重用,因为新的事件一直在产 生。对框架的主要的挑战是担保事件内存在全部活动对象完成了它们对这个事件的RTC处理前,没有被 重用。事实上,如我在第四章 4.7.10 节所描叙的,在当前的事件还在被使用时破坏它,会形成对 RTC语 义的破坏,这是最难以解决的缺陷之一。 6.5.1 复制全部事件 4.7.10 节提供了一个通用解决方法,就是使用事件队列。实际上,如图 6.11 所示,全部事件可以被复制 进一个事件队列,然后在它们可以被处理前,又被复制出队列。许多 RTOS 通过消息队列来支持这种事 件交换的方式。例如 VxWorks RTOS 提供了函数 msgQSend()来复制一块内存(消息)到一个消息队 列,函数 msgQReceive()把整个消息消息复制出事件队列到所提供的内存缓存区。 图 44 把整个事件复制进事件队列和复制出事件队列 尽管复制整个事件可以对付过早破坏事件内存的全部潜在性问题,这个方法在空间和时间方面的 开销都是非常昂贵的。对于框架的需求,一个消息队列必须非常大,这样在队列的所有位置都可以接收 最大的所期望的事件。另外,没个事件产生者需要一个大的内存缓冲去,每个事件消费者需要另一个打 保留中文简体翻译的全部版权 anymcu@gmail.com 2010 212