快速业务通道

Linux的kobject和Windows的GUID

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-05
e = device_release,
.sysfs_ops = &dev_sysfs_ops,
};
8.2.所有的8.1中注册的device的属性读写操作(show/store)全部通过以下的dev_sysfs_ops代理:
static struct sysfs_ops dev_sysfs_ops = {
.show = dev_attr_show,
.store = dev_attr_store,
};
static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr, char *buf)
{
struct device_attribute *dev_attr = to_dev_attr(attr);
struct device *dev = to_dev(kobj);
ret = dev_attr->show(dev, dev_attr, buf);
}
8.3.对于每一个单独的属性,要单独定义,比如对于devt属性:
static struct device_attribute devt_attr =
__ATTR(dev, S_IRUGO, show_dev, NULL);
定义完之后,通过device_create_file加入sysfs文件系统:
device_create_file(dev, &devt_attr);
8.4.当dev_attr_show中调用dev_attr->show时,执行流被路由到show_dev函数:
static ssize_t show_dev(struct device *dev, struct device_attribute *attr, char *buf)
{
return print_dev_t(buf, dev->devt);
}
9.每一个kobject代表一个目录,其sd字段将kobject树转换成了sysfs文件系统的文件目录树.注意,sysfs使用dentry中的d_fsdata字段和kobject解除了耦合,所有的操作只有在接口层面上操作dentry和inode,进入后就会通过dentry的d_fsdata字段和inode的i_private字段转换为kobject机制的结构,比如sysfs_dirent结构.
四.和Windows管理方式的对比
1.windows使用GUID来管理设备,驱动,总线,类型,块设备,电源等等...它本身就很统一.
2.windows使用注册表来管理这些,例如HKEY_LOCAL_MACHINESYSTEMControlSet001ControlClass键下面保存有各种类型的被管理实体,对应于linux的sysfs的根目录.
3.GUID是个无结构的大数,通过复杂的算法生成,只求唯一性,GUID之间没有关联性,耦合性更低.kobject恰恰相反,它在本机范围内构建了一个树型的被管理实体结构.
4.sysfs便于查找,而GUID某种意义上只能遍历,消耗很大,这就是注册表随着时间增加会拖慢系统速度的原因之一.
5.GUID方式的管理也支持属性,并且节点也可以包含到其它节点的链接,这点和sysfs很相似.
6.微软希望使用GUID来管理所有它能管理的实体,甚至包括office文档,然而这被证明不是一个好主意,虽然一个大数耦合性很低,内聚性很强,然而内聚性过强也会导致不能和外界通信.
7.总之,GUID的方式没有做到恰到好处.
五.总结
1.Linux使用kobject-一个组合模式的数据结构.
2.Windows使用GUID-一个无耦合全内聚的数字.
3.处处都存在设计模式.
3.1.面向对象的思想(OO)在kobject的设计中表现的很淋漓,具体就在kobj_type,虽然使用了type这个词,但实际上就是class,一个kobject的具体attitude就是一个kobj_type这个class的一个实例,kobject是表征凌乱不堪的实体的,因此kobject肯定区分了不同的类型,每一种类型的“操作attitude的方式(方法)”肯定相同,因此出现了kobj_type这个数据结构来解除分类的kobject与无类别的attitude之间的耦合.
3.2.锚点的设计方式其实在我们日常生活中也很普遍,比如身份证就代表某个人,人与人不同,然而身份证的格式是一样的,个人就是杂乱不堪的被管理实体,身份证就是kobject

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号