自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

转载 Linux内核抢占与中断返回

1、上下文一般来说,CPU在任何时刻都处于以下三种情况之一:(1)运行于用户空间,执行用户进程;(2)运行于内核空间,处于进程上下文;(3)运行于内核空间,处于中断上下文。应用程序通过系统调用陷入内核,此时处于进程上下文。现代几乎所有的CPU体系结构都支持中断。当外部设备产生中断,向CPU发送一个异步信号,CPU调用相应的中断处理程序来处理该中断,此时CPU处于中断上下文。

2012-07-27 12:43:06 1804

转载 Linux中断机制(3)

4、下半部在中断处理过程中,不能睡眠。另外,它运行的时候,会把当前中断线在所有处理器上都屏蔽(在ack中完成屏蔽);更糟糕的情况是,如果一个处理程序是SA_INTERRUPT类型,它执行的时候会禁上所有本地中断(通过cli指令完成),所以,中断处理应该尽可能快的完成。所以Linux把中断处理分为上半部和下半部。上半部由中断处理程序完成,它通常完成一些和硬件相关的操作,比如对中断的到达的确认

2012-07-27 12:40:29 575

转载 Linux中断机制(2)

3、内核的中断处理3.1、中断处理入口由上节可知,中断向量的对应的处理程序位于interrupt数组中,下面来看看interrupt:341 .data #数据段342 ENTRY(interrupt)343 .text344345 vector=0346 ENTRY(irq_entries_start) 347 .rept NR_IRQS #348-3

2012-07-27 12:39:13 711

转载 Linux中断机制(1)

一直认为,理解中断是理解内核的开始。中断已经远远超过仅仅为外围设备服务的范畴,它是现代体系结构的重要组成部分。1、基本输入输出方式现代体系结构的基本输入输出方式有三种:(1)程序查询:CPU周期性询问外部设备是否准备就绪。该方式的明显的缺点就是浪费CPU资源,效率低下。但是,不要轻易的就认为该方式是一种不好的方式,通常效率低下是由于CPU在大部分时间没事可做造成的,这种轮询方式

2012-07-27 12:36:51 1172

转载 Linux开发环境下的动态库和静态库

1. 什么是库 在 windows 平台和  linux 平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于 windows 和  linux 的本质不同,因此二者库的二进制是不兼容的。  本文仅限于介绍 linux 下的库。 2. 库的种类 linux 下的库有两种:静态库和共享库(动态库)。 二者的不同点在于代码被载入的时刻

2012-07-20 19:40:03 823

转载 Linux进程调度机制

1.1. Linux调度时机Linux进程调度分为主动调度和被动调度两种方式:自愿的调度随时都可以进行,内核里可以通过schedule()启动一次调度,当然也可以将进程状态设置为TASK_INTERRUPTIBLE、TASK_UNINTERRUPTIBLE,暂时放弃运行而进入睡眠;用户空间可以通过pause()达到同样的目的;如果为这种暂时的睡眠放弃加上时间限制,内核态有sched

2012-07-19 16:06:59 4704

转载 使用sendfile() 提高网络文件发送性能

我们平时通过网络发送文件时会用到的两个系统调用:read(file, tmp_buf, len);write(socket, tmp_buf, len);调用过程示意图如下:在用户空间调用 read() 读取文件时发生两次内存拷贝:DMA引擎将文件读取到内核的文件缓冲区调用返回用户空间时将内核的文件缓冲区的数据复制到用户空间的缓冲区接着调用 wr

2012-07-16 14:10:29 1222

转载 Linux多线程编程

前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题:是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值为0;2) 在主线称中起动线程1,打印“this is thread

2012-07-16 11:27:52 824

转载 异步I/O机制

对于服务器程序,I/O是制约系统性能最关键的因素。对于需要处理大量连接的高并发服务器程序,异步I/O几乎是不二的选择。Linux和Windows都为异步I/O构建了大量的基础设施。本文总结了一下Linux和Windows下的异步I/O模型,并给出了一些使用这些模型的例子。      一般来说,服务器端的I/O主要有两种情况:一是来自网络的I/O;二是对文件(设备)的I/O。Wind

2012-07-10 14:56:35 3904

转载 Linux的I/O机制

Linux的I/O机制经历了一下几个阶段的演进:(1)同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。(2)同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。(3)异步阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数

2012-07-10 14:51:03 1314

转载 Linux网络协议栈 -- socket connect 发起连接请求

1、sys_connect 对于客户端来说,当创建了一个套接字后,就可以连接它了。                 case SYS_CONNECT:                         err = sys_connect(a0, (struct sockaddr __user *)a1, a[2]);                         break;[

2012-07-08 20:17:26 1830

转载 Linux网络协议栈 -- socket accept接收连接

一、tcp 栈的三次握手简述 进一步的分析,都是以 tcp 协议为例,因为 udp要相对简单得多,分析完 tcp,udp的基本已经被覆盖了。  这里主要是分析 socket,但是因为它将与 tcp/udp传输层交互,所以不可避免地接触到这一层面的代码,这里只是摘取其主要流程的一些代码片段,以更好地分析 accept的实现过程。  当套接字进入 LISTEN后,意味着服务器端

2012-07-08 20:06:34 5239 1

转载 Linux网络协议栈 -- socket listen监听

一、sys_listen 对面向连接的协议,在调用 bind(2)后,进一步调用 listen(2),让套接字进入监听状态: int listen(int sockfd, int backlog); backlog 表示新建连接请求时,最大的未处理的积压请求数。  这里说到让套接字进入某种状态,也就是说,涉及到套接字的状态变迁,前面 create 和bind 时,也遇到

2012-07-08 19:57:33 8083 1

转载 Linux网络协议栈 -- socket bind 地址绑定

1、bind()当创建了一个 Socket 套接字后,对于服务器来说,接下来的工作,就是调用 bind(2)为服务器指明本地址、协议端口号,常常可以看到这样的代码: strut sockaddr_in sin;  sin.sin_family = AF_INET; sin.sin_addr.s_addr = xxx; sin.sin_port = xxx; bind(s

2012-07-08 19:50:04 7428

转载 TCP/IP网络层

网络层的作用?网络层有哪些协议?IP数据包的格式?IP数据包传输的过程?为什么需要ARP协议?ARP协议通信过程是怎么样的?(ARP协议如何控制网络?)数据包的最大值?(分片的地方?分片重组的地方?分片的原则?)数据包在局域网内怎么从一台主机传送到另外一台主机?数据怎么实现跨网段传输?(路由如何实现跨网段传输?)什么是默认网关?代理ARP的作用?数据跨网段传输时在路由器中的具体情形?(所谓的穿过路

2012-07-08 19:23:21 8246 2

转载 TCP/IP传输层

1. 传输层的主要功能是什么?2. 传输层如何区分不同应用程序的数据流?3. 传输层有哪些协议?4. 什么是UDP协议?5. 为什么有了UDP,还需要TCP?6. 什么是TCP协议?7. 怎么理解协议和程序?8. TCP是否真的有链接?9. 链接是如何建立的(逻辑上)?10. 所谓的建立TCP链接开销很大,具体是指什么?11. 三次握手的目的是什么?12

2012-07-08 19:21:37 2077

转载 TCP连接的建立和关闭

TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的。建立一个 TCP 连接  TCP使用三次握手 ( three-way handshake ) 协议来建立连接,图 3-10 描述了三次握手的报文序列。这三次握手为:请求端(通常称为客户)发送一个 SYN 报文

2012-07-08 18:51:45 954

转载 Linux网络协议栈 -- socket创建(3)

五、初始化 sk 分配完成 sk 后,另一个重要的功能就是初始化它,sk 的成员相当复杂,其主要的初始化工作是在函数 sock_init_data()中完成的: void sock_init_data(struct socket *sock, struct sock *sk) {         /*  初始化其三个队列 */         skb_queue_h

2012-07-07 22:40:07 3666

转载 Linux网络协议栈 -- socket创建(2)

三、af_inet 协议簇的协议封装  接下来,函数调用之前已经注的 inet_family_ops的函数指针 create,也就是inet_create()函数,前面,可以说一个通用的 socket 已经创建好了,这里要完成与协议本身相关的一些创建 socket 的工作。这一部份的工作比较复杂,还是先来看看 af_inet.c 中的模块初  始化时候,做了哪些与此相关的工作。

2012-07-07 22:34:18 1248

转载 Linux网络协议栈 -- socket创建(1)

内核版本:2.6.12 一、系统总入口 Linux 内核为所有的与 socket 有关的操作的 API,提供了一个统一的系统调用入口,其代码在net/socket.c中: asmlinkage long sys_socketcall(int call, unsigned long __user *args) {         unsigned long

2012-07-07 22:20:25 1484

转载 Linux网络协议栈(四) -- 链路层(2)

2、协议相关2.1、第3层协议的管理在Linux内核中,有两种不同目的的3层协议:(1)    ptype_all管理的协议主要用于分析目的,它接收所有到达第3层协议的数据包。(2)    ptype_base管理正常的3层协议,仅接收具有正确协议标志符的数据包,例如,Internet的0x0800。注意sb_buff与net_device中几个字段的区别:sb_buf

2012-07-04 15:17:25 3255

转载 Linux网络协议栈(四) -- 链路层(1)

1、接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理。中断处理程序主要进行以下一些操作:(1)    分配sk_buff数据结构,并将接收到的数据帧从网络适配器I/O端口拷贝到sk_buff缓冲区中;(2)    从数据帧中提取出一些信息,并设置sk_buff相应的参数,这些参数将被上层的网络协议使用,例如s

2012-07-04 15:02:30 1931

转载 Linux网络协议栈(三) -- 网络设备(2)

2.1、网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序   网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载。无论初始化是否发生,所以由驱动程序控制的网卡都被注册。 (2)插入可热拔插网络设备   当用户插入一块热拔插网卡,内核通知其对应的驱动程序以注册设备。(为了简单化,我们假定设备驱动程序已经被加载)。两个主要的情

2012-07-04 14:58:20 1125

转载 Linux网络协议栈(三) -- 网络设备(1)

网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1)    作为基于硬件的网络适配器与基于软件的协议之间的接口;(2)    内核协议栈异步输入输出点。记住:网络设备软件对硬件的抽象网络设备与协议和网络适配器的关系如下:1、    net_device接口(net_devi

2012-07-04 14:55:19 1166

转载 Linux网络协议栈(二) -- 套接字缓存(socket buffer)

Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、    套接字缓存skb由两部分组成:(1)    报文数据:它保存了实际在网络中传输的数据;(2)    管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。当应用程序向一个socket传输数据之后,该socket将创建

2012-07-04 14:52:25 966

转载 Linux网络协议栈(一) -- socket入门(2)

3、套接字的实现套接字最先是在UNIX的BSD版本实现的,所以也叫做BSD套接字,它隐藏了各个协议之间的差异,并向上提供统一的接口。Linux中实现套接字的基本结构:3.1、BSD套接字3.1.1、核心数据结构为了实现BSD套接字,内核提供一个重要的数据结构struct socket,它的定义如下: //BSD套接字(include/linux/net.h)

2012-07-04 14:46:17 1520

转载 Linux网络协议栈(一) -- socket入门(1)

1、TCP/IP参考模型为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准。2、套接字(socket) s

2012-07-04 14:43:19 1143

转载 UDP协议疑难杂症全景解析

如今,但凡说精通网络的,第二个意思就是“精通TCP”,事实上,很多自称精通TCP的家伙们只是精通socket接口而已,对TCP行为精通的并不多,笔者也不算精通,但绝对是中等以上水平。如果你真的精通TCP行为,那么本文不读也罢,直接发邮件给我,我们切磋一下,如果只是了解socket接口,那么建议读本文,然后一定再看一下《TCP协议疑难杂症全景解析》0.UDP协议和TCP协议UDP是用户数

2012-07-04 12:57:47 1482

转载 TCP协议疑难杂症全景解析

说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,

2012-07-04 12:56:01 1318

转载 千兆TCP拥塞控制算法分析

作者:Geoff Huston,APNIC回顾30多年来的互联网从业经验,我发现:促使互联网协议套件成功地成为全球通信系统首选技术的关键,是互联网协议(IP)本身。作为一种重叠协 议,它能够支持几乎任何类型的通信介质。但是我还想指出IP中另外一个重要的角色,即位于IP之上的可靠传输协议--传输控制协议(TCP)。我之所以认 为它如此重要,是因为TCP所采用的端到端速率自适应控制

2012-07-04 12:53:22 4365

Linux内核的同步机制

关于Linux内核的同步机制,自旋锁,信号量等

2012-04-09

Linux多线程编程

关于Linux上多线程编程的方法和技巧。

2012-04-09

空空如也

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

TA关注的人

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