蚂蚁文库
换一换
首页 蚂蚁文库 > 资源分类 > DOC文档下载
 

读书笔记之linux内核设计与实现(16)kobject和sysfs.doc

  • 资源ID:397573       资源大小:30.00KB        全文页数:4页
  • 资源格式: DOC        下载权限:游客/注册会员    下载费用:8积分 【人民币8元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信快捷登录 QQ登录  
下载资源需要8积分 【人民币8元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 微信支付    支付宝   
验证码:   换一换

 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

读书笔记之linux内核设计与实现(16)kobject和sysfs.doc

读书笔记之linux内核设计与实现(16)kobject和sysfs2011-01-101631转载自to_qgq最终编辑to_qgq2.6内核增加了一个引人注目的新特性统一设备模型(devicemodel)。设备模型提供一个独立的机制专门来表示设备,并描述了其在系统中的拓扑结构。17.1kobject设备模型的核心部分就是kobject,它由structkobject结构表示,定义于头文件(linux/kobject)中。kobject类似于C或java这些面向对象语言中的object对象类,提供了诸如引用计数、名称和父指针等字段,可以创建对象的层次结构。structkobject{char*k_name;charname[KOBJ_NAME_LEN];structkrefkref;structlist_headentry;structkobject*parent;structkset*kset;structkobj_type*ktype;structdentry*dentry;};k_name指针指向kobject名称的起始位置,如果名称长度小于KOBJ_NAME_LEN当前为20个字节,那么该kobject的名称便存放到name数组中,k_name指向数组头;如果名称大于20,则动态分配以讹足够大的缓冲区来存放kobject的名称,这时k_name指向缓冲区。parent指针指向kobject的父对象。因此,kobject就会在内核中构造一个对象层次结构,并且可以将对各对象间的关系表现出来,就如你看到的,这便是sysfs的真正面目一个用户空间的文件系统,用来表示内核中kobject对象的层次结构。dentry指针指向dentry结构体,在sysfs中该结构体就表示这个kobject,当然假设该kobject已反映在sysfs中。kobject通常是嵌入到其他结构中的,其单独意义其实并不大。相反,那些更为重要的结构体才真正需要用到kobject结构。比如structcdev。structcdev{structkobjectkobj;structmodule*owner;structfile_operations*ops;structlist_headlist;dev_tdevunsignedintcount;};当kobject被嵌入到其他结构体中时,该结构体便拥有了kobject提供的标准功能。更重要的一点是,嵌入kobject接结构体可以成为对象层次架构中的一部分。比如cdev结构体就可以通过其父进程指针cdev-kobj-parent和链表cdev-kobj-entry来插入到对象层次结构中。17.2ktypekobject对象被关联到一种特殊的类型,即ktype。ktype由kobj_type结构体表示,定义于中structkobj_type{void*releasestructkobject*;structsysfs_ops*sysfs_ops;structattribute**default_attrs;};ktype是为了描述一族kobject所具有的普遍特性。因此,不再需要每个kobject都分别定义自己的特性,而是将这些普遍的特性在ktype结构体中一次定义,然后所有“同类”的kobject都能共享一样的特性。release指针指向在kobject引用计数减至0时要被调用的析构函数。该函数负责释放所有kobject使用的内存和其它相关清理工作。sysfs_ops变量指向sysfs_ops结构体。该结构体描述了sysfs文件读写时的特性。default_attrs指向一个attribute结构体数组。这些结构体定义了该kobject相关的默认属性。属性给定了对象的特征,如果该kobject被导出到sysfs中,那么这些属性都将相应的作为文件而导出。17.3ksetkset是kobject对象的集合体。把它看成一个容器,可将所有相关的kobject对象,比如“全部的块设备”置于同一位置。kset可把kobject集中到一个集合中,而ktype描述相关类型kobject所共有的特性,它们之间的重要区别在于具有相同ktype的kobject可以分到不同的kset中(同一个kset中的kobject是否具有相同的ktype吗)。kobject的kset指针指向相应的kset集合。structkset{structsubsystem*subsys;structkobj_type*ktype;structlist_headlist;structkobjectkobj;structkset_hotplug_ops*hotplug_ops;};其中ktype指针指向集合(kset)中的kobject对象的类型(ktype),list连接该集合kset中所有的kobject对象。kobj指向的kobject对象代表了该集合的基类。hotplug_ops指向一个用于处理集合中kobject对象的热拔插操作的结构体。subsys指针指向该结构体相关的structsubsystem结构体。17.4subsystemsubsystem在内核中代表高层概念,它是一个或多个kset的大集合。structsubsystem{structksetkset;structrw_semaphorerwsem;};虽然subsystem结构体只指向一个kset,但是多个kset可以通过其subsys指针指向一个subsystem这种单向关系意味着不可能仅仅通过一个subsystem结构体就找到所有的ksets。subsystem中的kset字段指向的是subsystem中的默认kset,它在对象层次结构中起到了粘合剂的作用。rwsem是一个读写信号量,它用来对subsystem和它的所有kset进行并发访问保护。17.6管理和操作kobject17.7引用计数kobject的主要功能之一就是为我们提供了一个统一的引用计数系统。初始化后,kobject的引用计数设置为1。只要引用计数不为0,那么该对象就会继续保留在内存中,也可以说是被“钉”住了,任何包含对象引用的代码首先要增加该对象的引用计数,当代码结束后则减少它的引用计数。当引用计数减为0时,对象便可以被销毁,同时相关内存也都被释放。增加一个引用计数可通过kobject_get函数完成structkobject*kobject_getstructkobject*kobj;该函数正常情况下返回一个指向kobject的指针,如果失败,则返回NULL指针。减少引用计数通过kobject_put完成voidkobject_putstructkobject*kobj;17.8sysfssysfs文件系统是一个处于内存中的虚拟文件系统,它为我们提供了kobject对象层次结构的视图。帮助用户可以一个简单文件系统的方式来观察系统中各种设备的拓扑结构。借助属性对象,kobject可用导出文件的方式,将内核变量提供给用户读取或写入。sysfs的诀窍是把kobject对象与目录项紧密联系起来,这

注意事项

本文(读书笔记之linux内核设计与实现(16)kobject和sysfs.doc)为本站会员(芳华再现)主动上传,蚂蚁文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蚂蚁文库(发送邮件至2303240369@qq.com或直接QQ联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们


网站客服QQ:2303240369

copyright@ 2017-2027 mayiwenku.com 

网站版权所有  智慧蚂蚁网络

经营许可证号:ICP备2024020385号



收起
展开