摘要: Softnet_data的初始化:每个CPU的softnet_data是在net_dev_init中初始化的,代码如下: 1 "/net/core/dev.c" "static int __init net_dev_init(void)" 2 for_each_possible_cpu(i) { 3 struct softnet_data *queue; 5 queue = &per_cpu(softnet_data, i); 6 skb_queue_head_init(&queue->input_pkt_queue); 7 que 阅读全文
posted @ 2013-08-02 11:10 laughingLau 阅读(1061) 评论(0) 推荐(0) 编辑
摘要: POSⅨ thread 简称为pthread,Posix线程是一个POSⅨ标准线程.该标准定义内部API创建和操纵线程.编辑本段作用线程库实行了POSIX线程标准通常称为pthreads.POSIX线程具有很好的可移植的性,使用pthread编写的代码可运行于Solaris、FreeBSD、Linux 等平台,Windows平台亦有pthread-win32可供使用。Pthreads定义了一套 C程序语言类型、函数与常量,它以 pthread.h 头文件和一个线程库实现。[1]编辑本段数据类型pthread_t:线程句柄pthread_attr_t:线程属性编辑本段操纵函数pthread_cr 阅读全文
posted @ 2013-07-02 09:24 laughingLau 阅读(623) 评论(0) 推荐(0) 编辑
摘要: 在Posix线程规范中还有几个辅助函数难以归类,暂且称其为杂项函数,主要包括pthread_self()、pthread_equal()和pthread_once()三个,另外还有一个LinuxThreads非可移植性扩展函数pthread_kill_other_threads_np()。本文就介绍这几个函数的定义和使用。获得本线程IDpthread_t pthread_self(void)本函数返回本线程的标识符。在LinuxThreads中,每个线程都用一个pthread_descr结构来描述,其中包含了线程状态、线程ID等所有需要的数据结构,此函数的实现就是在线程栈帧中找到本线程的pth 阅读全文
posted @ 2013-07-01 22:55 laughingLau 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 线程终止方式一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。回页首线程终止时的清理不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源,就是一个必须考虑解决的问题。最经常出现的情形是资源独占锁的使用:线程为了访问临界资源而为其加上锁,但在访问过程中被外界取消, 阅读全文
posted @ 2013-07-01 22:54 laughingLau 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 概念及作用在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操作,最简单的办法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由Posix线程库维护,称为线程私有数据(Thread-specific Data,或TSD)。回页首创建和注销Posix定义了两个API分别用来创建和注销TSD:int pthread_key_cre 阅读全文
posted @ 2013-07-01 22:52 laughingLau 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 线程是有趣的了解如何正确运用线程是每一个优秀程序员必备的素质。线程类似于进程。如同进程,线程由内核按时间分片进行管理。在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同。而在多处理器系统中,如同多个进程,线程实际上一样可以并发执行。那么为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间。不同的线程可以存取内存中的同一个变量。所以,程序中的所有线程都可以读或写声明过的全局变量。如果曾用 fork() 编写过重要代码,就会认识到这个工具的重要性。为什么呢?虽然 fork() 允许创建多个进程,但它还会带来以下通信问题: 如何让多个 阅读全文
posted @ 2013-07-01 22:50 laughingLau 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 互斥锁尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同步的mutex函数。1. 创建和销毁有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mutex_t是一个结构,而PTHREAD_MUTEX_INITIALIZER 阅读全文
posted @ 2013-07-01 22:49 laughingLau 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 线程创建1.1 线程与进程相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。1.2 创建线程POSIX通过pthread_create()函数创建线程,API定义如下:int pthread_create(pthread_t * thread, pthread_attr_t * attr... 阅读全文
posted @ 2013-07-01 22:42 laughingLau 阅读(374) 评论(0) 推荐(1) 编辑
摘要: 如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率。本文将通过实例的方式向你介绍 history 命令的 15 个用法。使用 HISTTIMEFORMAT 显示时间戳当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身。如果你想要查看命令历史的时间戳,那么可以执行:# export HISTTIMEFORMAT='%F %T '# history | more1 2008-08-05 19:02:39 service network restart2 2008-08-05 19:02:39 exit3 20 阅读全文
posted @ 2012-12-01 10:06 laughingLau 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 一、当前防火墙技术分类 防火墙技术经历了包过滤、应用代理网关、再到状态检测三个阶段。 1.1 包过滤技术 包过滤防火墙工作在网络层,对数据包的源及目地IP具有识别和控制作用,对于传输层,也只能识别数据包是TCP还是UDP及所用的端口信息,如下图所示。现在的路由器、Switch Router以及某些操作系统已经具有用Packet Filter控制的能力。 由于只对数据包的IP地址、TCP/UDP协议和端口进行分析,包过滤防火墙的处理速度较快,并且易于配置。 包过滤防火墙具有根本的缺陷: 1.不能防范黑客攻击。包过滤防火墙的工作基于一个前提,就是网管知道哪些IP是可信网络,哪些是不... 阅读全文
posted @ 2012-11-08 12:49 laughingLau 阅读(889) 评论(0) 推荐(0) 编辑