本文首先简单介绍了 CMPI(Common Manageability Programming Interface) 规范与 Open Pegasus, 说明了 CMPI 规范中对多线程及内存管理方面的要求,然后以 Open Pegasus 中的实现为例,分析了为实现上述要求所需要的关键数据结构,最后全文进行了总结。
CMPI(Common Manageability Programming Interface) 是由 Open Group(www.opengroup.org) 维护的一套规范。其中定义了一系列基于C语言的编程接口。基于这些编程接口, CMPI 隔离了 CIMOM(CIM Object Manager, 又称 Management Broker )和 CIM Provider (又称 Management Instrumentation, 以下简称 Provider )中的相关实现,从而使 Provider 的开发和运行不再依赖于某种特定的 CIMOM。 因此无需重新编译链接, Provider 可以发布到任何一种支持 CMPI 的 CIMOM 中。
Open Pegasus(www.openpegasus.org, 以下简称 Pegasus )是一个开源的企业级的 CIMOM。它实现了对 CMPI 规范的支持。本文就以 Pegasus (2.7.1版)为例,研究了 CMPI 实现中的多线程内存管理的问题。
本文讨论的默认平台为 Linux。
CMPI 需要同时解决的两个问题就是其所驱动的 Provider 代码的线程安全与可重入性以及 CMPI 对象的内存管理。
CMPI 规范要求 CMPI 的实现是线程安全以及是可重入的。这是因为通常 CIMOM 为了同时响应多个 CIM 的请求,会为每个 CIM 请求生成一个线程。这