cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
阅读:1709回复:0

linux2.6内核中的面向对象编程方法介绍

楼主#
更多 发布于:2007-03-26 09:59
  linux2.6内核中的面向对象编程方法介绍

author: cyliu

1 简介

面向对象编程通常使用c++的语言实现比较常见,使用c语言使用的比较少。但是面向对象编程有着其独特的优势,linux内核也引入了使用c实现的面向对象编程思想。废话少说,下面把我所了解的简单介绍一下,不对的地方希望大家指正。

2 方法介绍

linux内核面向对象技术中接口分为两类:
    
    1 主动数据包发送类型:含义是A对象主动发送数据包给下一个处理对象B。
    
    2 被动请求数据包类型:含义是A对象对对象B发送数据包请求,B对象把数据包传给A对象。
    
linux内核中组件的定义按照unix编程艺术中所说(组件功能单一,接口简单实用的原则)把组件分为4类:
    
    1 操作类组件:实现算法对数据包等进行一定的算法计算。一般有一个进口,多个出口。
    
    2 容器组件:以某种方式组织组件
    
    3 进出容器组件
    
    4 管理组件:有效组织以上的组件以形成复杂的功能。
    
linux内核中使用面向对象技术编程同时结合了类型动态注册和操作HOOK相结合的方式

    1 类型动态注册:确定内核支持该类型数据,以方便对象与类型的实现有效的分离。
    
    2 HOOK技术:对数据包操作扩充功能

3 类/对象的定义

类的实现:类是对象的模版,保存通用的操作和信息;对象是类的实例,保存有自己独特的数据参数和现实的算法。

linux内核中类型与对象的关系如下表示:

                          data_type                
                          |------>----------------      |--->----------------
data_type_list|---->    |      next        | ----|--->|      next      |
                          |                ----------------      |    ----------------
                          |                |priv_data_size |     |    |priv_data_size |
                          |                ----------------      |    ----------------
                          |                |int(*enqueue)()|     |    |int(*enqueue)()|
                          |                ----------------      |    ----------------
                          |                |    ...        |     |    |    ...        |
                          |                ----------------      |    ----------------
                          |                                      |
                          |                                      |
                          |                     data             |
                          |            -------------------        |    -------------------
    data_list---|---> |    next         |-----|--->|    next         |
                            |            -------------------     |    -------------------
                            ----- | data_type type  |     ---- | data_type type  |
                                        -------------------          -------------------
                            -----    |   priv_data     |          |   priv_data     |
                            |            -------------------          -------------------
                            |            |int(*get_size)() |          |int(*get_size)() |
                            |            -------------------          -------------------
                            |            |    ...   ...    |          |    ...   ...    |
                            |            -------------------            -------------------                                
                          |                
                          |            
                          |               priv_data
                          |---->------------------
                                      |  int a         |
                                      ------------------
                                      |  ... ...       |
                                      ------------------
                                      
      data_type 是类型,是对象的通用操作。
      
      data是对象的类,既有通用操作又有自己的私有数据。
      
      priv_data是data的私有数据结构。    
      
4 应用

    1 data_type类型使用前需要注册到系统中,以便声明对象时能够确定类型已经被支持。
    
    2 在数据处理汇集的地方声明hook点,以便能够扩充服务。
    
    如:
    
    |
    | 数据包  (1)
    V                    
 ------    (2)          (3)
 |hook|-------> 扩展1 ------->扩展2
 |    |<------        <------
 ------    (5)          (4)
  |
  | 数据包  (6)
  V
走走看看开源好 Solaris vs Linux
游客

返回顶部