阅读:1709回复:0
linux2.6内核中的面向对象编程方法介绍
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 |
|
|