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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: linux远程备份工具Rsync下一篇: linux下的生产者与消费者
关于Linux的kobject和Windows的GUID的所有评论