《深入理解Linux网络技术内幕》阅读笔记(五)

原创 2015年09月26日 13:02:51

通过中断,NIC能够告知其驱动程序几种不同的事情,包括:
1.接收一帧。
2.传输失败。
3.DMA传输已成功完成。给定一个帧传输,当帧上载至NIC的内存准备在此媒介上传输时,驱动程序就会将持有该帧的缓冲区释放掉。使用同步传输时(无DMA),当该帧已上传至NIC,驱动程序就会立刻知道。但使用DMA时,也就是使用异步传输,设备驱动程序必须等待NIC发出明确的中断事件。
4.设备有足够内存处理新传输。该情况包括了一种巧妙的传送节流方式,做的恰当的话,可以改善效率。在此系统中,设备驱动程序会在队列空间缺乏时关闭输出,同时要求NIC当可用内存大于给定量时(一般而言就是该设备的MTU),就发出一个中断,然后当中断到来时重启传输。
驱动程序可以用netif_stop_queue停止设备队列,因此能禁止内核提交后续的传输请求。然后,驱动程序会检查设备的内存是否有足够的空间容纳一个1536个字节的包。如果有,驱动程序就会启动队列,允许内核再次提交传输请求;否则,就会指示设备(通过一个outw调用写一个配置寄存器),当条件满足时,产生一个中断。中断处理例程将使用netif_start_queue重启设备队列,使内核能够重新继续传输。
中断处理例程组织:
这里写图片描述
随机数:
随机数的产生是通过一个辅助函数,内核借此函数令其自身某些活动随机化。例如,那些网络子系统通常会对定时器的延时加入一个随机组件,使得定时器不太可能同时执行,而且通过后台处理使得CPU的负载下降。随机化也可防御某些试图猜出特定数据结构组织的而人所进行的Dos(服务拒绝)攻击。
与用户空间交互:
这里写图片描述
这里写图片描述
1.当管理员使用ifconfig配置一张设备驱动程序尚未加载的网卡,如设备eth0时,则内核向/sbin/modprobe发送一个请求,以加载名称为eth0的模块。如果/etc/prorobe.conf包含“alias eth0 3c59x”条目,则/sbin/modprobe会尝试加载模块3c59x.ko。
2.当管理员以IPROUTE2包的tc命令配置一个设备的流量控制时,可能会涉及不在内核内的队列规则或分类器。这种情况下,内核向/sbin/modprobe发送一个请求,以加载相关的模块。
热拔插:
当你编译内核模块时,目标文件默认在/lib/modules/kernel_version/目录下,而kernel_version是指内核版本,如2.6.12.在同一目录下,你可以发现两个有趣的文件:modules.pcimap和modules.usbmap。这些文件分别包含内核所支持的设备的PCI ID和USB ID。此外,这些文件还包含了相关联的内核模块的引用。当用户空间辅助程序接收到一个可热拔插设备正插入的通知信息时,就会使用这些文件找出正确的设备驱动程序。
内核会调用kobject_hotplug函数以响应一个设备的插入和删除以及其它事件。kobject_hotplug会把arg[0]的初值设为/sbin/hotplug,把arg[1]设为要使用的代理程序。/sbin/hotplug是一个简单脚本,把事件的处理委托给arg[1]指定的另一个脚本(代理程序)。
虚拟设备
这里写图片描述

gdb时发出SIGTRAP信号的处理

在大多数系统,gdb对使用fork创建的进程没有进行特别的支持。当父进程使用fork创建子进程,gdb仍然只会调试父进程,而子进程没有得到控制和调试。这个时候,如果你在子进程执行到的代码中设置了断点,...

Linux工程师面试题C部分

1、"匈牙利命名法"有什么优缺点?(2分) 2、下面x, y, *p的值是多少,有什么问题?(2分) int x, y, z = 2; int *p=&z; x=sizeof*p; y=...

《深入理解Linux网络技术内幕》阅读笔记(十五)

注意Netfilter钩子函数位置: 当开启STP时: 1.处理入口BPDU。 2.BPDU也可能是本地产生的。 3,入口网络数据不是转发到正确端口就是扩散到所有端口。 4.STP阻...

《深入理解Linux网络技术内幕》阅读笔记(九)

当特定事件发生时,设备驱动程序会代表内核指示设备产生硬件中断。处理函数会把该帧排入队列某处,然后通知内核。该技术是低流量负载下的最佳选择。遗憾的是,在高流量负载下就无法良好运作:每接收一个帧就强制产生...

《深入理解Linux网络技术内幕》阅读笔记(十四)

这棵树的叶子就是主机。主机链接到所谓的接入网桥上:能把网络连通能力给予主机的网桥。接入网桥主要是用于在连到同一个网桥上的主机间转发流量。 分发层的网桥主要是用于在和一些接入网桥直接相连的主机间桥接流...

《深入理解Linux网络技术内幕》阅读笔记(十六)

当copied被设定时,若封包需要分段,IP层就必须把该选项拷贝至每个片段。class会根据四条准则对此选项分类;这些字段可根据IP选项过滤封包,或者把不同的Qos参数施加至这些封包。 不含选项的I...

《深入理解Linux网络技术内幕》阅读笔记(二十六)

neigh_sysctl_register函数中最复杂的部分是如何将四个参数gc_xxx参数从neigh_table结构中提取出来。实现过程巧妙地利用了neigh_table结构在内存中的安排:与垃圾...

《深入理解Linux网络技术内幕》阅读笔记(十一)

准备接收: 准备传输: 每个cpu都有一个output_queue队列,里面包含有数据要传输的设备。每个设备有自己的qdisc队列(若设备的队列规则存在时),里面包含该设备需要发送的sk_...

《深入理解Linux网络技术内幕》阅读笔记(二十七)

简单地讲,路由器就是一台网络设备,它配备多个网络接口卡,能利用它的网络知识正确转发入口流量。 决定一个入口封包应该送给本地主机还是转发所需要的信息,以及在转发时正确转发封包所需要的信息,都存储在一个...

《深入理解Linux网络技术内幕》阅读笔记(二十八)

假设需要执行以下两个策略: 1.从校园网1到校园网3的流量要通过路由器RT1,从校园网2到校园网3的流量要通过RT2。 2.从校园网1到因特网的流量要经过DG1(默认网关1),从校园网2到因特网的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《深入理解Linux网络技术内幕》阅读笔记(五)
举报原因:
原因补充:

(最多只允许输入30个字)