- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络设备轮询设计与实现讲解
网络设备轮询设计与实现
--BSD操作系统核心新技术
作者:xie_minix(谢小荣)
1.1 引言
polling(轮询)技术是一种在一定时间内不断的探测目标,以获取目标在满足条件后进行相应处理的技术。从大多数情况来讲,这种技术并没有以中断为代表的技术先进。但是在一些特定场合,如主机作为一个大型的网关,并且流量巨大,选用轮询技术还是比较合适的。本文是针对FreeBSD操作系统及其代码来进行分析其设计思路和实现过程。目前BSD类操作系统中只有FreeBSD4.10和FreeBSD5.3以上版本才加入了对轮询的支持,NetBSD和OpenBSD还未实现。作为大多数防火墙首选的操作系统OpenBSD到是应该实现轮询技术。
在《TCP/IP详解》第二卷中,书中作者曾经提到过该技术,而且好象冯.杰克布森已经在一些实验中实现过。直到不久前我们才看到这些代码在FreeBSD中实现,要知道在核心中加入一项新的技术工作量是非常之大,轮询代码不但是要在核心中增加一些代码文件,而且把所有网卡驱动程序都要进行大量相应的改动。我们以VIA Rhine(威盛的莱因型芯片,通常的DLINK 530TX网卡使用的芯片)的驱动程序if_vr.c和他的头文件if_vrreg.h(后面具体涉及到硬件驱动程序的代码都以vr代码做实例分析)来简单讲述代码的一些改动。
XX_softc结构中的改动:
XX是代表各芯片的简称,本文使用的是vr芯片代码,所以是vr_softc结构。在结构的最后部分,增加了以下代码:
#ifdef DEVICE_POLLING
int rxcycles;
#endif 以上代码出现在源代码if_vrreg.h中的第472行中。DEVICE_POLLING是由核心配置决定。如果核心配置文件中加入了该定义,则在#ifdef 和#endif行之间的代码将编译进核心。也就是说,所有的支持POLLING的代码都应该在#ifdef DEVICE_POLLING定义之下和#endif之上。图中的rxcycles变量是用来存放在核心进入vr驱动程序时,POLLING要求驱动程序的底半部分(即读出和写入)进行多少次的循环。
在连接该设备驱动程序到设备程序链表时的一些改动:
任何以太网络设备在探测到该设备存在后(xx_probe函数,xx在这是代表芯片在系统中的简称),紧接着执行设备链入函数(xx_attach),他的工作主要是进行硬件的一些初始化(中断的分配、网卡缓存的内存映射等等)和ifnet结构的初始化。
#ifdef DEVICE_POLLING
ifp-if_capabilities |= IFCAP_POLLING;
#endif 上图是if_vr.c中的第742行中关于对POLLING支持时候的一段代码。if_capabilities成员是用来判断网卡支持性能的成员。比如对VLAN技术的支持,POLLING技术的支持等标志都是放在此成员中。
1.2代码介绍
所有的轮询代码主体在1个C文件和各支持轮询的网络设备驱动程序中,以及一些相关的支撑文件。图1-1中没有列出所有的网络设备驱动程序。
文件 说明 net/if_var.h
pci/if_vrreg.h 申明一些函数
修改ifnet结构以支持轮询 kern/kern_poll.c
kern/kern_clock.c
net/netisr.c
pci/if_vr.c
… 轮询的核心部分代码
一段定时调用kern_poll.c中轮询代码
网络软中断代码
网络设备驱动程序(基于vr芯片的卡)
其他的网络设备驱动程序 图 1-1 本文包含的文件
1.2.1 全局变量
从第106行开始,都是POLLING相关的全局变量.首先是建立一SYSCTL树的节点.下图中的SYSCTL_NODE宏代表在父节点_kern下建立一个_kern_polling节点.
SYSCTL_NODE(_kern, OID_AUTO, polling, CTLFLAG_RW, 0,
Device polling parameters); 下图中的变量全部可用sysctl来查看,大部分都可以调整设置.这些全局变量都是使用宏SYSCTL_UINT把他们加入到_kern_polling节点下,成为该节点的叶子.之所以这样,是因为可以通过用户区来调整这些参数.
static u_int32_t poll_burst = 5; ------ kern_poll.c
stat
您可能关注的文档
- 现浇钢筋混凝土楼板配筋设计计算书重点.doc
- 现浇钢筋混凝土框架结构厂房工程施工组织设计重点.doc
- 第一章 沥青概述解析.ppt
- 网店客服第二至最后章讲解.ppt
- 现网-中国电信集团网络发展指导意见重点.doc
- 现浇箱梁架体搭设专项施工方案(工字钢跨路)重点.doc
- 网店推广的N种方法讲解.doc
- 网店客服话术流程讲解.ppt
- 现浇混凝土楼梯踏步模板加固方法创新重点.doc
- 网店运营与开发营销讲解.doc
- 10.3 整式的加法和减法(第1课时)(教学课件)-2024-2025学年七年级数学上册考试满分全攻略同步备课备考系列(沪教版2024).pdf
- 2018-2024年中国文化创意行业前景研究与未来发展趋势报告(目录).pdf
- 2024-2025学年冀教版9年级下册期末测试卷(历年真题)附答案详解.docx
- 2024-2025学年冀教版9年级下册期末测试卷附答案详解(巩固).docx
- 出版传媒(601999)公司2024年财务分析研究报告.doc
- 机科股份(835579)公司2024年财务分析研究报告.doc
- 秋冬季科研机构疫情防控工作措施.docx
- 2024-2025学年冀教版9年级下册期末试卷【有一套】附答案详解.docx
- 2024-2025学年冀教版9年级下册期末试卷【重点】附答案详解.docx
- 10.1 整式(教学课件)-2024-2025学年七年级数学上册考试满分全攻略同步备课备考系列(沪教版2024).pdf
最近下载
- 2025年中国铁路武汉局集团有限公司招聘毕业生(四)【135人】笔试参考题库附带答案详解.docx
- 最新高二语文下学期期末试卷附答案一套.docx VIP
- 外研版高中《英语》(新标准)必修二Unit6 单元整体教学设计附作业设计.docx
- 毛概电子书.doc
- 紫外线钣金灰行业报告.pptx
- 外研版高中《英语》(新标准)必修二Unit5 单元整体教学设计附作业设计.doc
- CQC13464225-2024电力储能用锂离子电池安全与性能认证规则.pdf
- 外研版高中《英语》(新标准)必修二Unit1 单元整体教学设计附作业设计.doc
- 洪洞悦昌煤业副斜井施工组织设计方案.docx
- (四调)武汉市2025届高中毕业生四月调研考试 数学试卷(含答案详解).pdf
文档评论(0)