自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (4)
  • 收藏
  • 关注

原创 HTTP协议状态码的含义

来自《TCP/IP协议详解》附录  状态代码状态信息含义100Continue初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP1.1新)101SwitchingProtocols服务器将遵从客户的请求转换到另外一种协议(HTTP1.1新200OK一切正常,对GET和POST请求的应答文档跟在后面。201Created服...

2019-03-28 22:44:31 167

转载 Linux内存管理----用户空间和内核空间

关于虚拟内存有三点需要注意:4G的进程地址空间被人为的分为两个部分--用户空间与内核空间。用户空间从0到3G(0xc0000000),内核空间占据3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。例外情况只有用户进程进行系统调用(代表用户进程在内核态执行)等时刻可以访问到内核空间。 用户空间对应进程,所以每当进程切换,用户空间就会跟着变化;而内核空间是由内...

2019-03-28 22:38:25 504

转载 Linux内存管理----进程在内存中的分布

一、进程与内存所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段;代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像...

2019-03-27 22:57:19 272

原创 multiple definition of编译问题

最重要的一点,不要把全局变量以及全局方法的定义放在头文件里!!!1.给每一个头文件加上条件编译:注:此方法不是解决上述问题的方法,只是解决multiple definition of的一个方法。当多个文件包含同一个头文件时,而头文件中没有加上条件编译,就会独立的解释,然后生成每个文件生成独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复...

2019-03-27 15:39:57 359

转载 Linux内存管理-----内核高端内存

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

2019-03-26 15:19:00 185

转载 Linux内存管理---物理地址、线性地址、虚拟地址、逻辑地址之间的转换

CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步(如下图):首先,将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,其次,再利用其页式内存管理单元,转换为最终物理地址。这样做两次转换,的确是非常麻烦而且没有必要的,因为直接可以把线性地址抽像给进程。之所以这样冗余,Intel完全是...

2019-03-26 14:21:10 309

原创 linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别

分析linux内存管理机制,离不了上述几个概念,在介绍上述几个概念之前,先从《深入理解linux内核》这本书中摘抄几段关于上述名词的解释:一、《深入理解linux内核》的解释逻辑地址(Logical Address)包含在机器语言指令中用来指定一个操作数或一条指令的地址(有点深奥)。这种寻址方式在80x86著名的分段结构中表现得尤为具体,它促使window...

2019-03-25 10:35:41 397

原创 数据结构之队列

队列 定义: 一种可以实现先进先出的存储结构 分类: 静态队列 链式队列循环队列程序示例队列算法: 入队 出队#include<stdio.h> #include<malloc.h> typedef struct Queue { int *pBase; int fron...

2019-03-21 10:19:26 139

转载 全面的算法和数据结构知识学习线路

在线练习LeetCode Virtual Judge CareerCup HackerRank CodeFights Kattis HackerEarth Codility Code Forces Code Chef Sphere Online Judge – SPOJ在线编程面试Gainlo Refdash数据结构链表链表是一种由节点(Node)组成的线...

2019-03-21 10:04:44 244

转载 Nginx源码分析—架构设计思想

nginx的源码可以分为三个部分,一个是在ngx_init_cycle之前,这个也算是为了重新启动nginx而准备的代码,比如说在这个时候可以接受外部的信号,也可以保存传递的参数,等等,当然在以后的函数中也考虑了是否正在重启nginx。至于ngx_init_cycle这个函数,是一个很庞大的函数,在这个函数中可以看到调用了各个模块的钩子函数,这里又设计到了nginx结构体的使...

2019-03-20 20:08:41 344

转载 nginx源码分析--框架设计 &master-worker进程模型

Nginx的框架设计—进程模型在这之前,我们首先澄清几点事实:nginx作为一个高性能服务器的特点,其实这也是所有的高性能服务器的特点,依赖epoll系统调用的高效(高效是相对select/poll这些系统调用的,底层有一个链表和红黑树,避免了轮询,减少了用户空间和系统空间之间的数据传递等),非阻塞(所有的操作都是非阻塞,这样),多进程(master-slave进程模型),这些事实使得ng...

2019-03-20 19:57:46 240

原创 链表插入和删除算法

#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct Node { int data;// 数据域 struct Node * pNext;// 指针域}NODE,*PNODE;//NODE 等价于 struct Node ,PNODE等价于 struct...

2019-03-20 16:02:38 313

原创 判断链表是否为空和求链表长度算法

#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct Node { int data;// 数据域 struct Node * pNext;// 指针域}NODE,*PNODE;//NODE 等价于 struct Node ,PNODE等价于 struct...

2019-03-20 15:31:48 2084

原创 数据结构之链表

定义:n 个节点离散分配;彼此通过指针相连;每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。如下图:专业术语:首节点:第一个有效节点尾节点:最后一个有效节点头节点:头节点的数据类型和首节点的数据类型相同。 第一个有效节点之前的那个节点;头节点并不存放存放有效数据;加头节点的目主要是为了方便对链表的操作。头指针:指向头节点的指针变量尾指针:指向尾节点的指针变量...

2019-03-20 14:24:40 133

原创 关于typedef的用法

见示例:CASE 1 #include<stdio.h> typedef int ZHAGNSAN;//为 int 再重新多取一个名字, ZHAGNSAN等价于 int typedef struct Student { int sid; char name[100]; char sex; }ST; int main(void) { int i...

2019-03-20 14:16:45 161

原创 跨函数使用内存讲解及其示例

CASE 1 #include<stdio.h> int f(); int main(void) { int i=10; i=f(); printf( “ i=%d n” ,i); for(i=0;i<2000;++i) f(); return 0; } int f() { int j=20; return j; } CAS...

2019-03-19 20:00:09 191

原创 连续存储数组的算法

模块一:线性结构[把所有的结点用一根直线穿起来] 连续存储【数组】 离散存储【链表】 线性结构的两种常见应用之一 栈 线性结构的两种常见应用之二 队列 专题:递归1. 1=2+3+4+...100 的和2. 求阶乘3. 汉诺塔4. 走迷宫模块二:非线性结构树图连续存储...

2019-03-19 17:47:54 221

原创 数据结构知识准备

数据结构概述定义我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个特定功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫作算法。数据结构 = 个体 + 个体的关系算法 = 对存储数据的操作算法解题的方法和步骤衡量算法...

2019-03-18 22:40:51 142

转载 nginx源码分析—启动流程

Content0. 序1. main()分析2. 注意问题2.1 几个初值2.2 nginx工作模式2.3 一些配置2.4 其他开关3. 小结0. 序本文主要分析nginx主程序。nginx主程序main()实现文件:./src/core/nginx.c。.表示nginx-1.0.4代码目录,本文为/usr/src/nginx-1.0.4。1. main()分析...

2019-03-17 22:03:09 443

转载 nginx源码分析—hash结构ngx_hash_t

Content0.序1.hash结构1.1ngx_hash_t结构1.2ngx_hash_init_t结构1.3ngx_hash_key_t结构1.4hash的逻辑结构2.hash操作2.1NGX_HASH_ELT_SIZE宏2.2hash函数2.3hash初始化2.4hash查找3.一个例子3.1代码3.2如何编译3.3运行结果3....

2019-03-15 22:12:11 753

转载 nginx源码分析—队列结构ngx_queue_t

Content0.序1.队列结构2.队列操作2.1在头节点之后插入2.2在尾节点之后插入2.3删除节点2.4分割队列2.5链接队列2.6获取中间节点2.7队列排序2.8如何获取队列节点数据3.一个例子3.1代码3.2如何编译3.3运行结果4.小结0.序本文继续介绍nginx的数据结构——队列。链...

2019-03-15 18:51:42 281

转载 nginx源码分析—链表结构ngx_list_t

Content1.链表结构1.2 ngx_list_t的逻辑结构2.1创建链表3.一个例子3.2如何编译4.小结0. 序本文继续介绍nginx的容器——链表。链表实现文件:文件:./src/core/ngx_list.h/.c。.表示nginx-1.0.4代码目录,本文为/usr/src/nginx-1.0.4。1. 链表结构1.1 ngx_...

2019-03-15 14:46:56 209

转载 Linux 中软件 RAID 的使用

一.简介在Linux系统中目前以MD (Multiple Devices)虚拟块设备的方式实现软件RAID,利用多个底层的块设备虚拟出一个新的虚拟块设备,并且利用条带化(stripping)技术将数据块均匀分布到多个磁盘上来提高虚拟设备的读写性能,利用不同的数据冗余算法来保护用户数据不会因为某个块设备的故障而完全丢失,而且还能在设备被替换后将丢失的数据恢复到新的设备上。关于不同冗余级别的定义和...

2019-03-14 16:16:16 1419

转载 nginx源码分析—数组结构ngx_array_t

Content0. 序1. 数组结构1.1 ngx_array_t结构1.2 ngx_array_t的逻辑结构2. 数组操作2.1 创建数组2.2 销毁数组2.3 添加1个元素3. 一个例子3.1 代码3.2 如何编译3.3 运行结果4. 小结0. 序本文开始介绍nginx的容器,先从最简单的数组开始。数组实现文件:文件:./src/...

2019-03-14 14:45:54 197

转载 nginx源码分析—内存池结构ngx_pool_t及内存管理

Content0. 序1. 内存池结构1.1 ngx_pool_t结构1.2 其他相关结构1.3 ngx_pool_t的逻辑结构2. 内存池操作2.1 创建内存池2.2 销毁内存池2.3 重置内存池2.4 分配内存2.4.1 ngx_palloc()函数分析2.4.2 ngx_palloc_block()函数分析2.5 释放内存2.6 注册c...

2019-03-14 14:24:58 201

转载 nginx源码分析—模块及其初始化

Content0. 序1. nginx有哪些模块?2. nginx如何描述这些模块?2.1 模块数据结构2.1.1 ngx_module_t结构2.1.2 ngx_command_t结构2.2 模块类图3. nginx如何组织这些模块?3.1 全局数组ngx_modules3.2 模块组织结构图4. nginx的模块种类5. nginx如何初始化这些...

2019-03-14 11:06:40 250

转载 Linux iostat监测IO状态

Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据。1. 基本使用$iostat -d -k 1 10参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。...

2019-03-13 16:55:43 108

转载 Blktrace原理简介及使用

Blktrace简介Blktrace是一个用户态的工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求提交,入队,合并,完成等等一些列的信息)。块设备层处于下图(借用褚霸的图)中的“block layer”Blktrace工作原理(1)blktrace测试的时候,会分配物理机上逻辑cpu个数个...

2019-03-13 16:48:41 1731

转载 【Linux深入】epoll源码剖析

引入之前讲了select、poll、epoll的区别,由于许多应用中都用到了epoll,例如Netty、Redis等等,所以就来深入学习一下,现在我们就来剖析一下epoll的源码我先来剖析理解epoll源码的基础:主要的数据结构,然后再来解析epoll主要的三个方法:epoll_create()、epoll_ctl()、epoll_wait()。主要的数据结构1.eventpoll...

2019-03-13 10:55:07 270

原创 段错误产生原因及调试总结

一、段错误是什么一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。二、段错误产生的原因1、访问不存在的内存地址#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;void main(){int *ptr = NULL;...

2019-03-13 09:51:00 6735

原创 TCP/IP详解--五层协议作用及对应设备

网络协议分层:链路层:有时也称作链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。他们一起处理与电缆的物理接口细节。网络层:有时也称为互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议簇中,网络层协议包括IP协议,ICMP协议(Internet互联网控制报文协议)、以及IGMP协议(Internet组管理协议)(ps:分片是在网络...

2019-03-12 17:46:43 2010

转载 TCP/IP详解--数据链路层 & 以太网帧格式

链路层上最常见的封装就是以太网和IEEE 802封装,这里就使用以太网作为讲解的对象。一、概述数据链路层属于计算机网络的底层,使用的信道主要有点对点信道和广播信道两种类型。在TCP/IP协议族中,数据链路层主要有三个目的:1)为IP模块发送和接收数据2)为ARP模块发送ARP请求和接收ARP应答3...

2019-03-12 17:41:11 1122

转载 TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免

TCP的拥塞控制1.拥塞:即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。...

2019-03-12 17:36:41 249

原创 关于内存分配

在GNU系统中,malloc或realloc返回的内存块地址都是8的倍数(如果是64位系统,则为16的倍数)。如果你需要更大的粒度,请使用memalign或valloc。这些函数在头文件“stdlib.h”中声明。在GNU库中,可以使用函数free释放memalign和valloc返回的内存块。但无法在BSD系统中使用,而且BSD系统中并未提供释放这样的内存块的途径。函数:void * m...

2019-03-12 17:31:50 170

原创 nigix学习框架

1、nigix初始化nginx有5中类型的模块,"CORE","CONF","EVNT","HTTP","MAIL" 2、数组结构ngx_array_t 3、ngx_listening_s结构体中unsigned open:1;这不是给open赋值,这是一种位域的结构体,这里的取值只能是0和1,因为它是用1位来表示的,使用位域可以节省很多空间。4、hash结构ngx_h...

2019-03-08 16:51:11 239

原创 Makefile模板

# Makefile2.6obj-m += hellomod.o # 产生hellomod 模块的目标文件CURRENT_PATH := $(shell pwd) #模块所在的当前路径LINUX_KERNEL := $(shell uname -r) #Linux内核源代码的当前版本LINUX_KERNEL_PATH := /usr/src/linux-heade...

2019-03-08 16:00:19 129

原创 编程之法:字符串反转

字符串反转 eg:"abcdef"----&gt;"defabc"解法1:蛮力移位void LeftShiftOne(char* s, int n){ char t = s[0]; for (int i = 0; i &lt; n; i++) { s[i-1] = s[i]; } s[n-1] = t;}void LeftRot...

2019-03-08 15:57:54 343

原创 类 String 的拷贝构造函数与赋值函数

// 拷贝构造函数String::String(const String &amp;other) { // 允许操作 other 的私有成员 m_data int length = strlen(other.m_data); m_data = new char[length+1]; strcpy(m_data, other.m_data);}/...

2019-03-08 15:36:39 528 1

原创 likely(x)和unlikely(x)宏的使用

在阅读Linux内核代码的时候,经常会看到likely(x)和unlikely(x)宏的使用。那这两个宏有什么作用呢?这两个宏在内核中的定义如下:# define likely(x) __builtin_expect(!!(x), 1)# define unlikely(x) __builtin_expect(!!(x), 0)可见这里使用了gcc的内建函数__builtin_e...

2019-03-08 15:33:32 1080

原创 MapReduce/GFS/BigTable三大技术资料

出处:MapReduce/GFS/BigTable三大技术资料首先是在孟岩博客中发现以下内容:Google的三大核心技术MapReduce、GFS和BigTable的论文都已经被翻译成高质量的中文;三篇论文的链接地址如下:MapReduce:http://blog.csdn.net/active1001/archive/2007/07/02/1675920.aspxGFS:http...

2019-03-07 19:35:28 351

嵌入式Linux应用开发完全手册

韦东山老师所著嵌入式软件开发教程,讲解环境搭建,最小系统,嵌入式开发流程及外围设备,以及常见驱动开发

2019-04-10

视频监控服务器端代码

视频监控编解码应用部分代码,对各个流程有详细的代码说明

2019-04-10

国嵌高级项目实验手册

几个项目实践过程,对项目的描述分析,流程图规划,代码详解,结果分析

2019-04-10

linux多线程手册

多线程编程手册,帮助读者尽快掌握多线程编程技术

2015-08-17

空空如也

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

TA关注的人

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