• 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( 尽管任何其他的组织可能是奇怪的 和稀少的).
  • 相关阅读:
    了解基本的bash shell命令
    实验七:Xen环境下cirrOS的安装配置
    实验六:通过grub程序引导本地磁盘内核启动系统(busybox)
    实验五:Xen环境下多虚拟机的桥接配置
    实验四:xl命令的常见子命令以及操作
    实验三:xen环境下的第一个虚拟机的安装
    练习1
    Linux网站运维工程师基础大纲
    实验二:Linux下Xen环境的安装
    实验一:通过bridge-utils工具创建网桥并实现网络连接
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11147455.html
Copyright © 2020-2023  润新知