论坛登陆 注册 教程 笑话 影视 投稿
首页 | 页界资讯 | 网络应用 | 软件应用 | 组网技术 | 网络原理 | 聊天通讯 | 网管知识 | 帮助
笑话 | 操作系统 | 注 册 表 | 编程开发 | 数 据 库 | 媒体动画 | 网页设计 | 图形图象 | 地图
论坛 | 网络安全 | 安全防范 | 服 务 器 | 硬件学堂 | 路由技术 | 搜索研究 | 站长经验 | 投稿
影院 | 教育频道 | 特色专题 | 精文荟萃 | 注 册 码 | 论坛社区 | 网站地图 | 广告服务 | 旧版
设为首页 加入收藏
当前位置:首页>>文章>>操作系统>>FreeBSD>>正文

FreeBSD系统内核对象

www.xker.com 作者: 来源:网络转载 加入日期:2006-2-23 8:00:01

【问题提问、论坛交流】内核对象,也就是Kobj,为操作系统内核提供了一种面向对象的C语言编程方式被操作的数据也承载操作它的方法这使得在不破坏二进制兼容性的前提下,某一个接口能够增/减相应的操作Kobj工作时,产生方法的描述每个描述有一个唯一的标识和一个缺省函数某个描述的地址被用来在一个类的方法表里唯一的标识方法 构建一个类,就是要建立一张方法表,并将这张表关联到一个或多个函数(方法);这些函数(方法)都带有方法描述使用前,类要被编译编译时要为这个类分配一些缓存在方法表中的每个方法描述都会被指派一个唯一的标识,除非已经被其它引用它的类在编译时指派了标识对于每个将要被使用的方法,都会由脚本生成一个函数(方法查找函数),以解析外来参数,并在被查询时给出方法描述的地址被生成的函数(方法查找函数)凭着那个方法描述的唯一标识按Hash的方法查找对象的类的缓存如果这个方法不在缓存中,函数会查找使用类的方法表如果这个方法被找到了,类里的相关函数(也就是某个方法的实现代码)就会被使用否则,这个方法描述的缺省函数将被使用//小新技术网 xker.com 这些过程可被表示如下: 对象->缓存<->类
  
  如何使用Kobj
  
  结构
  struct kobj_method
  
  函数
  void kobj_class_compile(kobj_class_t cls);
  void kobj_class_compile_static(kobj_class_t cls, kobj_ops_t ops);
  void kobj_class_free(kobj_class_t cls);
  kobj_t kobj_create(kobj_class_t cls, struct malloc_type *mtype, int mflags);
  void kobj_init(kobj_t obj, kobj_class_t cls);
  void kobj_delete(kobj_t obj, struct malloc_type *mtype);
  
  宏
  KOBJ_CLASS_FIELDS
  KOBJ_FIELDS
  DEFINE_CLASS(name, methods, size)
  KOBJMETHOD(NAME, FUNC)
  
  头文件
  <SYS param.h>lt;SYS kobj.h>
  
  建立一个接口的模板
  
  使用Kobj的第一步是建立一个接口建立接口包括建立模板的工作建立模板可用脚本src/sys/kern/makeobjops.pl完成,它会产生申明方法的头文件和代码,脚本还会生成方法查找函数 在这个模板中如下关键词会被使用: #include, INTERFACE, CODE, METHOD, STATICMETHOD, 和 DEFAULT. #include语句的整行内容将被一字不差的复制到被生成的代码文件的头部
  
  例如: #include 关键词INTERFACE用来定义接口名这个名字将与每个方法名接合在一起,形成 [interface name]_[method name]语法是:INTERFACE [接口名]; 例如: INTERFACE foo; 关键词CODE会将它的参数一字不差的复制到代码文件中语法是CODE { [任何代码] }; 例如:
  CODE {
  struct foo * foo_alloc_null(struct bar *)
  {
  return NULL;
  }
  };
  
  关键词METHOD用来描述一个方法语法是: METHOD [返回值类型] [方法名] { [对象 [, 参数若干]] }; 例如:
  METHOD int bar {
  struct object *;
  struct foo *;
  struct bar;
  };
  
  关键词DEFAULT跟在关键词METHOD之后,是对关键词METHOD的补充它给这个方法补充上缺省函数语法是: METHOD [返回值类型] [方法名] { [对象; [其它参数]] }DEFAULT [缺省函数]; 例如:
  METHOD int bar {
  struct object *;
  struct foo *;
  int bar;
  } DEFAULT foo_hack;
  
  关键词STATICMETHOD类似关键词METHOD对于每个Kobj对象,一般其头部都有一些Kobj专有的数据METHOD定义的方法就假设这些专有数据位于对象头部;假如对象头部没有这些专有数据,这些方法对这个对象的访问就可能出错而STATICMETHOD定义的对象可以不受这个限制:这样描述出的方法,其操作的数据不由这个类的某个对象实例给出,而是全都由调用这个方法时的操作数(译者注:即参数)给出这也对于在某个类的方法表之外调用这个方法有用//小新技术网 xker.com
  
  其它完整的例子:
  src/sys/kern/bus_if.m
  src/sys/kern/device_if.m
  建立一个类
  
  使用Kobj的第二步是建立一个类一个类的组有名字、方法表;假如使用了Kobj的“对象管理工具”(Object Handling Facilities),类中还包含对象的大小建立类时使用宏DEFINE_CLASS()建立方法表时,须建立一个kobj_method_t数组,用NULL项结尾每个非NULL项可用宏KOBJMETHOD()建立 例如:

本新闻共2页,当前在第1页  1  2  

编辑:xker.com

上一篇:freebsd硬盘安装
下一篇:没有了
关闭窗口】【浏览次数:】【收藏此页
相关文章
·freebsd硬盘安装·点评FreeBSD 6.0:速度快、稳定和使用·安装FreeBSD
·FreeBSD下载·FreeBSD操作系统的boot2阶段·FreeBSD的boot0阶段介绍
·FreeBSD操作系统的引导·FreeBSD实实在在的选择·FreeBSD的发展历史
·使用FreeBSD的原因·什么是FreeBSD
推荐文章 最新文章 热门文章
·分析网页的几种加密技术
·读懂Windows“虚拟内存”问题
·ASP中调用存储过程、语法、写法-sql
·深入浅出VC++串口编程之DOS的串口编程
·ADSL Modem设置含义及功能全知道(四)
·Asp.Net细节性问题回答精萃
·ADSL Modem设置含义及功能全知道(一)
·AJAX.NET用户开发指南
·EFS加密技巧
·详解EFS加密
·嵌入浏览器 关于Alexa工具条的解说与
·利用AJAX+J2EE开发组织机构管理系统
·Alexa 世界网站排名研究
·自己动手:电子图书制作之PDF格式篇
·VS2005中使用强类型DataSet简化开发
·FreeBSD系统内核对象
·freebsd硬盘安装
·点评FreeBSD 6.0:速度快、稳定和使用
·安装FreeBSD
·FreeBSD下载
·密码终结者?微软专家谈InfoCard
·电脑重启后硬盘失踪的原因
·让你的QQ个人头像背景也有色彩
·CSS中的滑动门技术研究
·分析网页的几种加密技术
·不要讨一时之巧 在网页优化中进行作弊
·网页优化 向搜索引擎提交网站的技巧
·网络命令跟我学之NET GROUP命令小档案
·Linux操作系统打包命令使用技巧详解
·Visual Studio 2005中的新DataSet特性
·个人简历表格
·免费代理IP(每日更新)
·QQ密码丢失后能做的事情:快速找回密码
·Norton AntiVirus 2006 注册码(激活
·WinRAR 3.51 注册码
·豪杰超级解霸V9.1正版注册码
·系统优化 专题
·找回QQ密码的注意事项 
·史上最强QQ个人档案资料欣赏
·Ajax技术开发指南
·最经典的黑客入门教材
·求职简历封皮
·ACDSee v8.0注册码
·怎样查找对方的IP地址
·FlashFXP 3.3.1 build 1089注册码
评论

设为首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyright © 2003-2006 xker.com All rights reserved. 网站合作、广告联系QQ:12231446
小新技术网 冀ICP备05002857号