自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鱼思故渊的专栏

不积跬步,无以至千里;不积小流,无以成江海

转载 高性能网络服务器3--TCP消息的接收

这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。 为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读: 1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的? 2...

2014-04-28 22:10:47

阅读数 2332

评论数 2

转载 高性能网络服务器7--TCP连接的内存使用

当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突...

2014-04-28 22:09:34

阅读数 1921

评论数 0

转载 高性能网络服务器6--reactor反应堆与定时器管理

反应堆开发模型被绝大多数高性能服务器所选择,上一篇所介绍的IO多路复用是它的实现基础。定时触发功能通常是服务器必备组件,反应堆模型往往还不得不将定时器的管理囊括在内。本篇将介绍反应堆模型的特点和用法。 首先我们要谈谈,网络编程界为什么需要反应堆?有了IO复用,有了epoll,我们已经可以使服务...

2014-04-28 22:08:22

阅读数 1420

评论数 0

转载 高性能网络服务器5--IO复用与并发模型

对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接。同时处理多个并行发生事件的连接,简称为并发;同时处理万计、十万计的连接,则是高并发。服务器的并发编程所追求...

2014-04-28 22:07:03

阅读数 1338

评论数 0

转载 高性能网络服务器4---TCP连接的关闭

TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。 为方便阅读,我们可以带着以下5个问题来阅读本文: 1、当socket被多进程或者多线程共享时,关闭连接时有何区别? 2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理? 3、关连接时,若...

2014-04-28 22:05:17

阅读数 1411

评论数 0

原创 nginx源码分析--配置文件解析

ngx-conf-parsing 对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其它作用域。同一作用域的不同的配置指令没有先后顺序;同一作用域是否能使用相同的指令,和对相 同指令的处理由各模块自行决定整个 Nginx 的运行时各模块行为都和配置指令密切...

2014-04-26 10:53:37

阅读数 1313

评论数 0

转载 nginx源码分析--配置文件解析

Nginx的配置解析相关的部分比较绕,比如为何要有4重指针,比如NGX_MAIN_CONF , loc_conf,NGX_DIRECT_CONF有什么区别呢?这些我前面的blog都有些涉及,这次主要是把配置这块完全拿出来然后来分析下。 首先来看配置解析时的数据结构,这里主要是ngx_conf_t...

2014-04-26 09:44:37

阅读数 893

评论数 0

原创 nginx源码分析--配置文件详解

对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其它作用域。同一作用域的不同的配置指令没有先后顺序;同一作用域是否能使用相同的指令,和对相 同指令的处理由各模块自行决定整个 Nginx 的运行时各模块行为都和配置指令密切相关每个配置指令都只能在预先定...

2014-04-25 17:41:36

阅读数 1739

评论数 0

原创 nginx源码分析--nginx上下文结构初始化

说在前面: 本文的讨论基于的nginx版本是1.2.1。 文章对于nginx的一些背景知识(如什么是模块,上下文等)没有过多提及,本文适合对nginx有一定了解的同学。   ngx_conf_t *cf; 做过nginx模块开发,或者是有学习过nginx源码的同学会对这个结构体非常眼熟了。...

2014-04-25 16:30:27

阅读数 2257

评论数 1

原创 nginx源码分析--event事件驱动初始化

1.在nginx.c中设置每个核心模块的index ngx_max_module = 0; for (i = 0; ngx_modules[i]; i++) { ngx_modules[i]->index = ngx_max_module++; } ...

2014-04-24 08:15:38

阅读数 1445

评论数 0

原创 VM tools安装错误The path "" is not a valid path to the xx generic kernel headers.

VMWARE TOOLS安装提示THE PATH IS NOT A VALID PATH TO THE GENERIC KERNEL HEADERS I solved this problem, I guess. Perhaps the version.h does not exists at...

2014-04-21 19:39:48

阅读数 5855

评论数 0

原创 ubuntu 下出现E: Sub-process /usr/bin/dpkg returned an error code

在用apt-get安装软件时出现了类似于 install-info: No dir file specified; try –help for more information.dpkg:处理 gettext (–configure)时出错: 子进程 post-installation scri...

2014-04-21 19:37:30

阅读数 70597

评论数 11

转载 高性能网络编程2--TCP消息的发送

在上一篇中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时,能保证TCP...

2014-04-19 14:57:55

阅读数 1783

评论数 2

原创 TCP网络编程--非阻塞accept和非阻塞connect

非阻塞accept     当一个已完成的连接准备好被accept的时候,select会把监听socket标记为可读。因此,如果用select等待外来的连接时,应该不需要把监听socket设置为非阻塞模式,因为如果select告诉我们连接已经就绪,accept就不应该被阻塞。不过这样做的时候有一...

2014-04-19 14:55:19

阅读数 2878

评论数 0

原创 TCP/IP详解--nagle算法和TCP_NODELAY

在客户端一直给服务器发送小数据的时候,接受到一个回应会在很长的时间以后,但是将多个小数据写操作合并成一个写操作,问题就没了。这个事件的缘由可能是TCP_NODELAY的原因 现在大概明白,是由于nagle算法在捣乱。 TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,...

2014-04-19 14:38:38

阅读数 2321

评论数 2

转载 高性能网络编程--accept建立连接

最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。 编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心...

2014-04-19 14:13:15

阅读数 1757

评论数 0

转载 谈谈守护进程与僵尸进程

04年时维护的第一个商业服务就用了两次fork产生守护进程的做法,前两天在网上看到许多帖子以及一些unix书籍,认为一次fork后产生守护进程足够了,各有道理吧,不过多了一次fork到底是出于什么目的呢? 进程也就是task,看看内核里维护进程的数据结构task_struct,这里有两个...

2014-04-16 22:16:51

阅读数 803

评论数 0

转载 常用Makefile模板

在linux下面,我们不得不自己写makefile,makefile的确博大精深,但是实际上对于日常的使用来说,无非就是 1:编译可执行程序。2:编译lib库 3:编译so库 本博针对上面三种目的各自写出了makefile模版,希望对大家有所帮助。 一.编译可执行程序 当前目录下制定文件编...

2014-04-16 21:34:38

阅读数 916

评论数 0

原创 TCP/IP详解--TIME_WAIT状态的必要性

1 TCP关闭时的四次握手 Tcp连接在关闭的的时候,执行的是一个四次握手的过程,下图是客户端发起的关闭时客户端和服务器的状态转换图 具体过程如下: 1、 客户端发送FIN报文段,进入FIN_WAIT_1状态。 2、 服务器端收到FIN报文段,发送ACK表示确认,进入CLOSE_WAIT状态。...

2014-04-16 17:47:15

阅读数 3053

评论数 1

原创 linux中断--中断下半部机制的使用 & 中断编程

tasklet的实现 tasklet(小任务)机制是中断处理下半部分最常用的一种方法,其使用也是非常简单的。正如在前文中你所知道的那样,一个使用tasklet的中断程序首先会通过执行中断处理程序来快速完成上半部分的工作,接着通过调用tasklet使得下半部分的工作得以完成。可以看到,下半部分被...

2014-04-14 21:33:25

阅读数 2545

评论数 0

原创 linux中断--中断嵌套&中断请求丢失

关于中断嵌套: 在linux内核里,如果驱动在申请注册中断的时候没有特别的指定,do_irq在做中断响应的时候,是开启中断的,如果在驱动的中断处理函数正在执行的过程中,出现同一设备的中断或者不同设备的中断,这时候新的中断会被立即处理,还是被pending,等当前中断处理完成后,再做处理。 在2....

2014-04-14 20:06:04

阅读数 6469

评论数 0

原创 linux中断--内核中断编程

Linux中断内核编程 前言 在前面分析了中断的基本原理后,就可以写一个内核中断程序来体验以下,也可以借此程序继续深入来了解内核中断的执行过程 一.内核中断程序: 我们还是来看一看成程序: 在看程序之前,要熟悉如何进行模块编程,和了解module_pararm()的用法。如果不熟悉的话请大家看,m...

2014-04-14 19:24:44

阅读数 2968

评论数 0

原创 linux中断--中断原理分析

中断之原理篇 前言: 中断是计算机发展中一个重要的技术,它的出现很大程度上解放了CPU,提高了CPU的执行效率。 在中断出现之前,CPU对IO采用的是轮询的方式进行服务,这使的CPU纠结在某一个IO上,一直在等待它的响应,如果它不响应,CPU就在原地一直的等下去。这样就导致了其他IO口也在等待CP...

2014-04-14 18:48:28

阅读数 2904

评论数 0

原创 linux内核分析--浅析内存管理机制

linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别(一) linux内存管理---物理地址、线性地址、虚拟地址。逻辑地址之间的转换(二) linux内存管理--linux内核高端内存 linux内存管理--Linux中的物理和虚拟存储空间布局

2014-04-12 21:09:45

阅读数 6913

评论数 0

原创 linux内存管理--linux内核高端内存

Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。 段页式机制如下图。   Linux内核地址空间划分 通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地...

2014-04-12 20:28:32

阅读数 2289

评论数 0

原创 linux内核分析--中断处理流程

linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处理思想. 于是整理一下~ 第一阶段--获取中断号 每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核提供的中断服务程序. 在进入中断服务程序时,...

2014-04-12 15:04:19

阅读数 2966

评论数 0

原创 linux内核分析--浅析中断处理机制解析

linux内核--中断和中断处理(一) linux内核--中断和中断处理(二) linux内核--中断处理程序 linux内核--中断嵌套&ARM中断来源 linux内核分析--中断中的下半部 linux内核分析--中断和中断处理程序 linux内核分析--中断的分类

2014-04-12 14:47:50

阅读数 1393

评论数 0

原创 linux内核分析--中断中的下半部

1.软中断   实际上软中断使用的并不多,反而是后面的tasklet比较多,但tasklet是通过软中断实现的,软中断的代码位于/kernel/softirq.c中。软中断是在编译期间静态分配的,由softirq_action结构表示,它定义在linux/interrupt.h中: 1...

2014-04-12 14:06:51

阅读数 2046

评论数 0

原创 linux内核分析--中断和中断处理程序

在前面的这篇文章linux内核分析--中断的分类

2014-04-12 12:00:05

阅读数 2053

评论数 0

原创 linux内核分析--中断的分类

什么是中断 Linux 内核需要对连接到计算机上的所有硬件设备进行管理,毫无疑问这是它的份内事。如果要管理这些设备,首先得和它们互相通信才行,一般有两种方案可实现这种功能: 轮询(polling) 让内核定期对设备的状态进行查询,然后做出相应的处理;中断(interrupt) 让硬件在需要的时...

2014-04-12 10:38:24

阅读数 2404

评论数 0

原创 UNIX网络编程--非阻塞connect的实现

一、《UNIX网络编程》-非阻塞connect          在一个TCP套接口被设置为非阻塞之后调用connect,connect会立即返回EINPROGRESS错误,表示连接操作正在进行中,但是仍未完成;同时TCP的三路握手操作继续进行;在这之后,我们可以调用select来检查这个链接是...

2014-04-11 11:40:03

阅读数 2726

评论数 0

原创 linux守护进程的详解与创建

一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程...

2014-04-11 08:29:14

阅读数 1876

评论数 0

原创 linux内存映射mmap原理分析

一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。   原理 首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建...

2014-04-10 22:12:54

阅读数 10197

评论数 5

原创 带缓冲I/O 和不带缓冲I/O的区别与联系

首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲,当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进...

2014-04-10 15:38:45

阅读数 4005

评论数 1

原创 标准I/O库的缓冲机制

标准I/O库提供缓冲的目的是尽可能减少使用read和write调用的次数。它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。 标准I/O提供了三种类型的缓冲: (1)全缓冲。这种情况下,在填满标准I/O缓冲区后才进行实际的I/O操作。对于驻留在磁盘上的文件通常...

2014-04-10 15:35:03

阅读数 1689

评论数 0

原创 标准IO库的缓冲机制引起的问题

在介绍有缓冲机制I/O和无缓冲机制I/O的区别之前。先看一个例子预热一下,如果知道为什么,就说明关于两者的区别是很明了的,如果看到结果很吃惊,就说明还有一点偏差 #include #include int main() { int i=10,pid; printf("nBefo...

2014-04-10 15:17:13

阅读数 1131

评论数 0

原创 栈的区别_堆栈的访问效率_关键字static的作用是什么_关键字const有什么含意

关键字static的作用是什么?             这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1) 无论在函数体内,类内,还是全局变量,全局静态变量,在程序启动的时候,静态变量,全局变量的空间已经分配好了。 2) 在模块内(但在函数体外),一个被声明...

2014-04-08 16:53:50

阅读数 1413

评论数 0

原创 C/C++中static关键字的用法

一、在面向过程设计中的static关键字 1、静态全局变量  定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量。  特点:    A、该变量在全局数据区分配内存。    B、初始化:如果不显式初始化,那么将被隐式初始化为0。    C...

2014-04-08 16:29:34

阅读数 1210

评论数 0

原创 标准库函数和系统调用的区别

写在前面:所谓标准库函数,这里暂时讨论C语言的标准库函数。库函数是语言本身的一部分,而系统函数是内核提供给应用程序的接口,属于系统的一部分。函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。 一、标准库函数和系统调用的区别 函数库调用 系统...

2014-04-08 14:17:17

阅读数 4288

评论数 0

原创 linux内核中异步通知机制--信号处理机制

什么是异步通知:很简单,一旦设备准备好,就主动通知应用程序,这种情况下应用程序就不需要查询设备状态, 特像硬件上常提的“中断的概念”。 比较准确的说法其实应该叫做“信号驱动的异步I/O”,信号是在软件层次上对中断机制的一种模拟。阻塞I/O意味着一直等待设备可访问再访问,非阻塞I/O意味着使用pol...

2014-04-08 11:09:44

阅读数 5513

评论数 0

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