摘要: 写了一个多线程的代码,在主线程中申请了一块内存,在另一个线程中释放内存,老出错误,不知道是怎么回事。*** glibc detected *** /home/ydx/vehicle-program/vehicle-v1.0/t: double free or corruption (!prev): 0x080644c8 ***======= Backtrace: =========/lib/libc.so.6[0x7c7261]/home/ydx/vehicle-program/vehicle-v1.0/t[0x804991e]/home/ydx/vehicle-program/vehicle 阅读全文
posted @ 2012-01-12 22:25 balaamwe 阅读(1435) 评论(0) 推荐(0) 编辑
摘要: 写了一个多线程的代码,在主线程中申请了一块内存,在另一个线程中释放内存,老出错误,不知道是怎么回事。*** glibc detected *** /home/ydx/vehicle-program/vehicle-v1.0/t: double free or corruption (!prev): 0x080644c8 ***======= Backtrace: =========/lib/libc.so.6[0x7c7261]/home/ydx/vehicle-program/vehicle-v1.0/t[0x804991e]/home/ydx/vehicle-program/vehicle 阅读全文
posted @ 2012-01-12 22:25 balaamwe 阅读(1732) 评论(0) 推荐(0) 编辑
摘要: 应用程序:#include <syswait.h>usleep(n) //n微秒Sleep(n)//n毫秒sleep(n)//n秒驱动程序:#include <linux/delay.h>mdelay(n) //milliseconds 其实现#ifdef notdef#define mdelay(n) (\{unsigned long msec=(n); while (msec--) udelay(1000);})#else#define mdelay(n) (\(__builtin_constant_p(n) && (n)<=MAX_UDELA 阅读全文
posted @ 2012-01-12 22:19 balaamwe 阅读(3330) 评论(0) 推荐(0) 编辑
摘要: 很多情况下我们需要修改IP地址和DNS等内容,如果是动态的修改,在电脑启动后还要重新设定,非常麻烦,许多网上的资料都不能真正的实现永久性的修改,甚至是错误的,这里将正确的设置内容共享给大家学习,如有转载请注明出处:无名博客http://qinjiana0786.cublog.cn,个人著作《追踪LINUX TCP/IP代码运行》将会由北航出版社于4月中旬出版,希望对爱好网络的朋友们有所帮助。以下内容是在Ubuntu上设置的,同样对其它LINUX系统有效。sudo ifconfig eth0 downsudo ifconfig eth0 hw ether XX:XX:XX:XX:XX:XXsud 阅读全文
posted @ 2012-01-12 22:17 balaamwe 阅读(879) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/chingliu/archive/2011/08/29/2223803.html尽管内核模块不象应用程序一样顺序执行, 内核做的大部分动作是代表一个特定进程的. 内核代码可以引用当前进程, 通过存取全局项 current, 它在 <asm/current.h> 中定义, 它产生一个指针指向结构 task_struct, 在 <linux/sched.h> 定义. current 指针指向当前在运行的进程. 在一个系统调用执行期间, 例如 open 或者 read, 当前进程是发出调用的进程. 内核代码可以通过使用 curre 阅读全文
posted @ 2012-01-12 20:47 balaamwe 阅读(1646) 评论(0) 推荐(0) 编辑
摘要: 第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有 阅读全文
posted @ 2012-01-12 20:46 balaamwe 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 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 阅读(2220) 评论(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) 编辑