上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 31 下一页
摘要: tcp socket的发送缓冲区实际上是一个结构体struct sk_buff的队列,我们可以把它称为发送缓冲队列,由结构体struct sock的成员sk_write_queue(struct sk_buf_head)表示。sk_write_queue是一个结构体struct sk_buff_head类型,这是一个struct sk_buff的双向链表,其定义如下: struct sk_buff_head { struct sk_buff *next; //后指针 struct sk_buff *prev; //前指针 __u32 qlen; //队列长度(即含有几个struct sk_.. 阅读全文
posted @ 2012-01-12 20:45 balaamwe 阅读(6081) 评论(0) 推荐(1) 编辑
摘要: 2.1 网络驱动程序的结构所有的Linux网络驱动程序遵循通用的接口。设计时采用的是面向对象的方法。一个设备就是一个对象(device 结构),它内部有自己的数据和方法。每一个设备的方法被调用时的第一个参数都是这个设备对象本身。这样这个方法就可以存取自身的数据(类似面向对象程序设计时的this引用)。一个网络设备最基本的方法有初始化、发送和接收。------------------- ---------------------|deliver packets | |receive packets queue||(dev_queue_xmit()) | |them(netif_rx()) |-- 阅读全文
posted @ 2012-01-12 20:44 balaamwe 阅读(451) 评论(0) 推荐(0) 编辑
摘要: Linux操作系统网络驱动程序编写一.Linux系统设备驱动程序概述1.1 Linux设备驱动程序分类1.2 编写驱动程序的一些基本概念二.Linux系统网络设备驱动程序2.1 网络驱动程序的结构2.2 网络驱动程序的基本方法2.3 网络驱动程序中用到的数据结构2.4 常用的系统支持三.编写Linux网络驱动程序中可能遇到的问题3.1 中断共享3.2 硬件发送忙时的处理3.3 流量控制(flow control)3.4 调试四.进一步的阅读五.杂项一.Linux系统设备驱动程序概述1.1 Linux设备驱动程序分类Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益 阅读全文
posted @ 2012-01-12 20:43 balaamwe 阅读(437) 评论(0) 推荐(0) 编辑
摘要: Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时 阅读全文
posted @ 2012-01-12 20:40 balaamwe 阅读(468) 评论(0) 推荐(0) 编辑
摘要: Linux内核中的等待队列Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表,如下图所示。在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待队列项中都包含一个list_head类型的域作为"连接件"。由于我们只需要对队列进行添加和删除操作,并不会修改其中的对象(等待队列项),因此,我们只需 阅读全文
posted @ 2012-01-12 20:39 balaamwe 阅读(2489) 评论(0) 推荐(1) 编辑
摘要: ●IP转发,或称IP路由,简单地说,就是路由器接收一个IP包后,下一步就决定往路由器的哪个端口发送该数据包出去。具体地分析,大概有如下几个步骤:1)路由器接收到数据帧并检查其校验码(FCS)。如果有错误发生,帧被丢弃。路由器不负责恢复丢失的包。2)如果没有错误发生,路由器接下来检查包的类型(Ethernet Type字段),并解包。数据链路层包头和包尾被丢弃。3)假设该包为IP包,路由器检查其路由表,找到和包中目的IP地址最匹配的前缀。4)匹配的路由表记录了包含外发接口和下一跳路由器;利用这些信息可以重组一个新的数据链路帧。5)在创建一个新帧之前,路由器会更新其IP包头的TTL字段,并重新计算 阅读全文
posted @ 2012-01-12 20:37 balaamwe 阅读(2219) 评论(0) 推荐(0) 编辑
摘要: http://www.ibm.com/developerworks/cn/linux/l-hisock.html 阅读全文
posted @ 2012-01-12 20:22 balaamwe 阅读(168) 评论(0) 推荐(0) 编辑
摘要: SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stag,不同资源消耗的Stag使用不同数量的线程来处理,Stag间使用事件驱动的异步通信模式。 更进一步,在每个Stage中可以动态配置自己的线程数,在超载时降级运行(如输出纯文字页面)或拒绝服务。 在每个Stage的通常有如下组件: Incoming Event Queue ,事件队列。 Admission Controller 阀门,拒绝服务。 Dynamically sized Thread Pool, 线程池。 Event Handler ,实际处理业务的Com... 阅读全文
posted @ 2012-01-12 11:14 balaamwe 阅读(328) 评论(0) 推荐(0) 编辑
摘要: http://chinaliwee.blog.163.com/blog/static/34118206200871081847280/Apache MINA 线程模型配置2007-04-27 09:54本文内容是配置基于MINA的应用中的线程模型。1 禁止缺省的ThreadModel设置 MINA2.0及以后版本已经没有ThreadModel了,如果使用这些版本的话,可以跳过本节。 ThreadModel设置是在MINA1.0以后引入的,但是使用ThreadModel增加了配置的复杂性,推荐禁止掉缺省的TheadModel配置。 IoAcceptor acceptor = .... 阅读全文
posted @ 2012-01-12 10:41 balaamwe 阅读(1460) 评论(0) 推荐(0) 编辑
摘要: http://scholers.iteye.com/blog/730429我们知道,进行SOCKET tcp/ip通信的时候,不知道每次接受的报文到底有多长?也就是是判断不了报文(消息)的边界。 一般的做法有下面几种:1。设定固定长度的报文头,在固定的报文头上增加消息长度。每次读取的时候先读这个报文头,得到本次消息的总体长度。2。在报文中设定特殊字符作为边界。比如:***************************之类的特殊符号等。MINA2(我采用的版本是MINA2 RC1版本)中我采用第一种方式来读取消息报文。具体代码:可以利用IoBuffer的prefixedDataAvailabl 阅读全文
posted @ 2012-01-11 13:55 balaamwe 阅读(1476) 评论(0) 推荐(1) 编辑
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 31 下一页