自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

godleading的专栏

关注Linux Kernel/网络协议栈

  • 博客(36)
  • 收藏
  • 关注

原创 git使用

git使用git clone时报如下错误原因解决方法TortoiseGit clone时报错问题原因解决方法git log使用git回归代码git使用本文记录的是工作中git是使用问题,无脑模式,遇到什么记录什么,谨慎阅读。git clone时报如下错误。[email protected]:vim/vim.gitbash: git@github

2018-01-08 12:21:11 666

翻译 字节序与比特序详解

[TOC]字节序的定义字节序就是说一个对象的多个字节在内存中如何排序存放,比如我们要想往一个地址a中写入一个整形数据0x12345678,那么最后在内存中是如何存放这四个字节的呢?  0x12这个字节值为最高有效字节,也就是整数值的最高位(在本文中0x12=0x12000000),0x78为最低有效字节。  这里就分为大端字节序和小端字节序  大端字节序:便是指最高有效字节落在低地址上的字节

2017-12-22 20:43:06 8288 3

转载 C语言字节对齐问题详解

C语言字节对齐

2017-10-31 18:07:39 1274

转载 Linux进程间通信方式

进程与进程通信的概念进程通信的应用场景进程通信的几种方式管道管道简介管道原理管道如何通信管道如何创建管道读写实现管道api与用法普通管道流管道命名管道实现原理api与应用匿名管道和有名管道总结信号信号来源信号生命周期和处理流程api使用消息队列实现原理api与应用以Posix为例共享内存实现原理api和应用system V

2017-10-30 11:09:40 16637 5

转载 Linux内核中的各种锁

Linux内核中的各种锁在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量(rw_se

2017-10-17 14:12:42 20412

转载 各种算法复杂度

数据结构 注解: Skip_List:跳跃表 Cartesian_Tree:笛卡尔树是一种特定的二叉树数据结构,可由数列构造,在范围最值查询、范围top k查询(range top k queries)等问题上有广泛应用。数组排序算法 图操作 堆操作 大O复杂度

2016-11-21 14:27:35 635

原创 Linux内核中的软中断、tasklet和工作队列详解

[TOC] 本文基于Linux2.6.32内核版本。引言软中断、tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来。下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任务队列的函数都消失了,只剩下了前三者。 介绍这三种下半部实现之前,有必要说一下上半部与下半部的区别。 上半部指的是中断处理程序,下半部则指的

2016-10-30 14:26:32 32732 7

转载 理解tcp关闭连接中的time_wait状态

首先看一下tcp关闭连接时的四次握手过程:1.Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包。此后Client不能再向Server发送数据,但能读取数据。2.Server收到FIN包后向Client发送ACK包,然后进入CLOSE_WAIT状态,此后Server不能再读取数据,但可以

2016-03-10 19:16:56 3881

转载 Linux Shell参数

在shell编程时.可以使用参数。Shell有位置参数和内部参数1、 位置参数  由系统提供的参数称为位置参数。位置参数的值可以用$N得到,N是一个数字,如果为1,即$1.类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始。第0号为程序名字,从1开始就表示传递给程序的参数。如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。2、 内部参数

2015-06-08 14:17:02 611

转载 Linux进程状态

众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。linux就是这样的一个操作系统。在linux系统中,每个被运行的程序实例对应一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。linux内核对进程的这种管理分两个方面:进程状态管理,和进程调度。进程状态在linux下,通过ps命令我们能够查看到系统中

2015-04-22 19:06:16 792

原创 IO多路复用总结

本文基于Linux2.6.32内核版本。一、基本概念  IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:  (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。  (3)如果一个TCP服务器

2015-04-14 17:33:19 4300

转载 组播MAC地址和各类IP地址

MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置。MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique identifier),后24位由厂商自行分配。    MAC地址有单播、组播、广播之分。单播地址(unicast address)表示单一设备、节点,多播地址或者组播地址(multicast ad

2014-03-17 14:17:30 29476

转载 linux iptables实现

Xtables提供的资源 struct  xt_af  xt[]结构数组该数组用于挂载各个协议的match和target资源。由于写者(添加、删除)和读者(查找)都是在内核空间进程上下文执行,所以它们只需要用xt[n].mutex信号量进行互斥。读者(查找)在将规则关联上一个match或target时会增加它们所在模块的引用计数,在它释放这个引用计数之前该模块是不会被卸载的,所

2014-02-26 14:43:16 5612

转载 Linux nf_conntrack连接跟踪的实现

连接跟踪,顾名思义,就是识别一个连接上双方向的数据包,同时记录状态。下面看一下它的数据结构:struct nf_conn {        /* Usage count in here is 1 for hash table/destruct timer, 1 per skb, plus 1 for any connection(s) we are `master' for */   

2014-02-26 12:07:30 28150

转载 Understanding a Kernel Oops

Understanding a kernel panic and doing the forensics to trace the bug is considered a hacker’s job. This is a complex task that requires sound knowledge of both the architecture you are working on, an

2014-01-27 17:53:57 1264

转载 程序的内存分配

一、预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其    操作方式类似于数据结构中的栈。    2、堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回    收   。注意它与数据结构中的堆是两回事,分配方式倒是类...

2014-01-24 11:34:45 810

转载 进程栈和内核栈

1.进程的堆栈       内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。2.进程用户栈和内核栈的切换(堆栈指

2014-01-23 17:40:34 3696

转载 Linux用户进程内存空间

经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, Swapped size (kb)CODE, Code size (kb)

2014-01-23 14:41:50 2163

原创 Linux中的地址空间以及I/O地址空间

解惑—Linux中的地址空间(一)有这么一系列的问题,是否在困扰着你:1. 用户程序编译连接形成的地址空间在什么范围内?2. 内核编译后地址空间在什么范围内?3. 要对外设进行访问,I/O的地址空间又是什么样的?先回答第一个问题。Linux最常见的可执行文件格式为elf(Executable and Linkable Format)。在elf格式的可执行代码中,ld总是从0

2014-01-23 14:33:43 10552

转载 Linux内核bridge浅析

Linux内核bridge浅析 Linux网桥模型:  Linux内核通过一个虚拟的网桥设备来实现桥接的,这个设备可以绑定若干个以太网接口设备,从而将它们桥接起来。如下图所示:  网桥设备br0绑定了eth0和eth1。对于网络协议栈的上层来说,只看得到br0,因为桥接是在数据链路层实现的,上层不需要关心桥接的细节。于是协议栈上层需要发送的报文被送到br0,网桥设备的处理代码再

2013-05-22 19:53:58 6006

转载 LINUX TCP/IP 协议栈的关键数据结构SOCKET BUFFER(SK_BUFF )

sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。这个结构在linux内核的发展过程中改动过很多次,或者是增加新的选项,或者是重新组织已存在的成员变量以使得成员变量的布局更加清晰。它的成员变量可以大致分为以下几类:Layout 布局General 通用Featur

2013-04-09 15:26:30 1959

转载 进程上下文和中断上下文

进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间

2013-04-02 16:56:19 1276

转载 如何安装ccashe

ccache(“compiler cache”的缩写)是一个编译器缓存,该工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息, 比如头文件,这样就节省了通常使用 cpp 解析这些信息所需要的时间。如果您编译清单 2 中的文件,假定foobar.h 中包含对其他头文件的引用,ccache 会用那个文件的 cpp-parsed 版本来 取代 include 声明。就那么简单。不

2013-01-18 15:20:50 828

原创 svn copy error: Entry has unexpectedly changed special status

最近为项目做了一个自动编译脚本,但是在用svn打tag时却打印如下错误导致无法加tag.svn copy -m "make a tag for trunk" gpon https://192.168.25.4/svn/GPON-subcard/tags/GPON_V1R0B1D20130106svn: Entry 'gpon/kernel/include/asm' has unex

2013-01-07 15:36:18 8170

转载 Linux信号量

一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。 二.信号量的分类在学习信号量之前,我们必须先知道——Linux提供两种信号量:(1)      内核信号量,由内核控制路径使用(2)

2012-12-14 17:06:56 842

转载 setsockopt设置socket详细用法

1. closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制

2012-10-23 17:02:29 7230

转载 内存对齐算法

字节对齐是在分配内存时需要考虑的问题,两个小算法:(1)最容易想到的算法:unsigned int calc_align(unsigned int n,unsigned align){ if ( n / align * align == n) return n; return (n / align + 1) * align;}

2012-10-19 18:05:58 4625 3

转载 Linux 系统内核空间与用户空间通信的实现与分析

多数的 Linux 内核态程序都需要和用户空间的进程交换数据,但 Linux 内核态无法对传统的 Linux 进程间同步和通信的方法提供足够的支持。本文总结并比较了几种内核态与用户态进程通信的实现方法,并推荐使用 netlink 套接字实现中断环境与用户态进程通信。1 引言Linux 是一个源码开放的操作系统,无论是普通用户还是企业用户都可以编写自己的内核代码,再加上对标准内核的裁

2012-10-10 17:09:28 1190

转载 线程堆栈大小 pthread_attr_setstacksize 的使用

pthread_create 创建线程时,若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下:# ulimit -s8192#上述表示为8M;单位为KB。也可以通过# ulimit -a 其中 stack size 项也表示堆栈大小。ulimit -s  value 用来重新设置stack 大小。一般来说 默认堆栈大小为 8388608; 堆栈最小为 1

2012-09-19 20:20:57 15555

转载 宏定义中的# ## @# \

# (stringizing)字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。如:#define example(instr) printf("the input string is:\t%s\n",#instr)#define example1(instr) #instr当使用该宏

2012-09-13 18:47:14 852

转载 内存对齐详解

首先由一个程序引入话题:1 //环境:vc6 + windows sp2 2 //程序1 3 #include 4 5 using namespace std; 6 7 struct st1 8 { 9 char a ;10 int b ;11 short c ;12 };13 14 struct st215 {16 sh

2012-08-22 19:26:44 980

原创 FireFox与IE不兼容的一个案例:FixFox中无法显示文本框内容

65 to 127 Byte 包数目 下面的一段php代码为该文本框赋值echo 'document.getElementById("sum_127packets").value = "100";';在IE下没有问题,可以赋值,但在FireFox中却无法赋值,即文本框没有显示。原因如下:注意到html代码中该文

2012-08-10 16:28:14 1968

转载 Linux中select函数分析

select在socket编程中还是比较重要的,可是对于初学socket的人来说都不太爱用select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式

2012-06-05 17:34:02 691

转载 CVS常用命令详解

一.checkout 签出    cvs checkout [-ANPRcflnps] [-r rev| -D date] [-d dir] [-j rev1] [-j rev2] [-k kopt] modules...        -A    重置所有粘性标记/日期/kopts    -N    如果指定了-d选项,不要使用短模块路径    -P    删除空目录

2012-05-25 13:31:53 1212

原创 CVS ERROR:CVS directory without administration files present. Cannot continue until this directory

在CVS上import新加的项目目录时出现标题所示错误。原因是我新加的目录以前在别的cvs项目工作副本下,移植过来后在该文件夹下存在隐藏的原项目cvs目录,导致问题。删除该目录后重新添加即可。

2012-05-23 10:09:38 1093

原创 html中嵌套php实现隐藏table中tr

源码如下: <? if(get_custom_info("sub_customer")=="***") { echo ' document.getElementById("epon_state").style.display="none"; ';

2012-05-23 09:56:46 3669

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除