Linux 内核Ksets 对象
很多情况, 一个 kset 看来象一个 kobj_type 结构的扩展; 一个 kset 是一个嵌入到相 同类型结构的 kobject 的集合. 但是, 虽然 struct kobj_type 关注的是一个对象的类 型, struct kset 被聚合和集合所关注. 这 2 个概念已被分开以至于一致类型的对象可 以出现在不同的集合中.
因此, 一个 kset 的主要功能是容纳; 它可被当作顶层的给 kobjects 的容器类. 实际上, 每个 kset 在内部容纳它自己的 kobject, 并且它可以, 在许多情况下, 如同一个 kobject 相同的方式被对待. 值得注意的是 ksets 一直在 sysfs 中出现; 一旦一个
kset 已被建立并且加入到系统, 会有一个 sysfs 目录给它. kobjects 没有必要在 sysfs 中出现, 但是每个是 kset 成员的 kobject 都出现在那里.
增加一个 kobject 到一个 kset 常常在一个对象创建时完成; 它是一个 2 步的过程.
kobject 的 kset 成员必须 ???; 接着 kobject 应当被传递到:
int
kobject_add(struct kobject *kobj);
如常, 程序员应当小心这个函数可能失败(在这个情况下它返回一个负错误码)并且相应地 反应. 有一个内核提供的方便函数:
extern int kobject_register(struct kobject *kobj); 这个函数仅仅是一个
kobject_init 和 kobject_add 的结合.
当一个
kobject 被传递给 kobject_add, 它的引用计数被递增. kset 中容纳的, 毕竟, 是一个对这个对象的引用. 某种意义上, kobject
可能要必须从 kset 中移出来清除这个 引用; 完成这个使用:
void
kobject_del(struct kobject *kobj);
还有一个
kobject_unregister 函数, 是 kobject_del 和 kobject_put 的结合.
一个
kset 保持它的子女在一个标准的内核链表中. 在大部分情况下, 被包含的 kobjects 也有指向这个 kset 的指针( 或者, 严格地, 它的嵌入
kobject)在它们的 parent 的成员. 因此, 典型地, 一个 kset 和它的 kobjects 看来有些象你在图 一个简 单的 kset 层次中所见.
记住:
所有的被包含的 kobjects 实际上被嵌入在一些其他类型中, 甚至可能其 他的 ksets.
- 一个 kobject 的 parent 不要求是包含 kset( 尽管任何其他的组织可能是奇怪的 和稀少的).
最新文章
- Mysql常用命令详解
- easyui DataGrid 工具类之 列属性class
- javascript --- 将共享属性迁移到原型中去
- DataTable 分页
- Hibernate criteria 混合sql语句多表关联时查询注意事项
- panel控件 换行
- XStream 用法汇总
- C socket udp方式发数据
- IntelliJ IDEA创建多模块依赖项目
- css scroll bug
- JPA javax.persistence.TransactionRequiredException
- python之Django学习笔记(三)---URL调度/URL路由
- 设计模式七: 策略(Strategy)
- 偏差(Bias)和方差(Variance)——机器学习中的模型选择zz
- 一款开源免费的WPF图表控件ModernuiCharts
- Linux常用命令1-50(持续更新中)
- Hibernate session FlushMode的五种设置
- python入门-文件
- Git入门及常用命令(1)(window环境下)
- 常见的错误:FTP连接时出现“227 Entering Passive Mode”