06 2014 档案

摘要:大话Linux内核中锁机制之RCU、大内核锁在上篇博文中笔者分析了关于完成量和互斥量的使用以及一些经典的问题,下面笔者将在本篇博文中重点分析有关RCU机制的相关内容以及介绍目前已被淘汰出内核的大内核锁(BKL)。文章的最后对《大话Linux内核中锁机制》系列博文进行了总结,并提出关于目前Linux内... 阅读全文
posted @ 2014-06-30 10:13 Jessica程序猿 阅读(1830) 评论(0) 推荐(0)
摘要:大话Linux内核中锁机制之完成量、互斥量在上一篇博文中笔者分析了关于信号量、读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题。八、完成量下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等待另一个执行单元完成某事后方可执行,它是一种轻量级机制。事实上... 阅读全文
posted @ 2014-06-30 10:11 Jessica程序猿 阅读(2205) 评论(0) 推荐(0)
摘要:大话Linux内核中锁机制之信号量、读写信号量在上一篇博文中笔者分析了关于内存屏障、读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量、读写信号量的内容。六、信号量关于信号量的内容,实际上它是与自旋锁类似的概念,只有得到信号量的进程才能执行临界区的代码;不同的是获取不到信号量时,进程不会原... 阅读全文
posted @ 2014-06-30 10:10 Jessica程序猿 阅读(2683) 评论(0) 推荐(0)
摘要:大话Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障、读写自旋锁以及顺序锁的相关内容。下面首先讨论内存屏障的相关内容。三、内存屏障不知读者是是否记得在笔者讨论自旋锁的禁止或使能的时候,提到过一个内存屏... 阅读全文
posted @ 2014-06-30 10:07 Jessica程序猿 阅读(1530) 评论(0) 推荐(0)
摘要:转至:http://blog.sina.com.cn/s/blog_6d7fa49b01014q7p.html很多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实是由于操作系统中存在多进程对共享资源的并发访问,从而引起了进程间的竞态。这其中包括了我们所熟知的SM... 阅读全文
posted @ 2014-06-30 10:06 Jessica程序猿 阅读(2121) 评论(1) 推荐(0)
摘要:由于X86平台上面,内存是划分为低端内存和高端内存的,所以在两个区域内的page查找对应的虚拟地址是不一样的。一. x86上关于page_address()函数的定义在include/linux/mm.h里面,有对page_address()函数的三种宏定义,主要依赖于不同的平台:首先来看看几个宏的... 阅读全文
posted @ 2014-06-29 23:14 Jessica程序猿 阅读(1306) 评论(0) 推荐(0)
摘要:在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; /***second***/susecond_t tv_usec;/***microsecond*... 阅读全文
posted @ 2014-06-29 22:53 Jessica程序猿 阅读(1348) 评论(0) 推荐(0)
摘要:flashcache中跟磁盘相关的读写分为以下两类:1)磁盘跟内存的交互2)磁盘跟磁盘之前的交互比如说读不命中时就是直接从磁盘读,属于第1种情况,那读命中呢?也是属于第1种情况,不过这时候是从SSD读。磁盘跟磁盘之间交互是用于写脏数据,将SSD中脏cache块拷贝到磁盘上去。现在介绍下两种情况使用的... 阅读全文
posted @ 2014-06-28 16:22 Jessica程序猿 阅读(1169) 评论(0) 推荐(0)
摘要:前言插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止.直接插入排序基本思想假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n].从i = 2起直到i = n ... 阅读全文
posted @ 2014-06-27 16:59 Jessica程序猿 阅读(6332) 评论(0) 推荐(0)
摘要:虽然左式堆每次操作花费O(logN),这有效的支持了合并,插入和DeleteMin,但还是有改进的余地,因为我们知道,二叉堆以每次操作花费常数平均时间支持插入。二项队列支持所有这种操作,每次操作的最坏情形运行时间为O(logN),而插入操作平均花费常数时间。二项队列结构二项队列不同于左式堆和二叉堆等... 阅读全文
posted @ 2014-06-27 15:29 Jessica程序猿 阅读(922) 评论(3) 推荐(0)
摘要:简介设计一种堆结构像二叉堆那样高效的支持合并操作而且只使用一个数组似乎很困难。原因在于,合并似乎需要把一个数组拷贝到另一个数组中去,对于相同大小的堆,这将花费O(N)。正因为如此,所有支持高效合并的高级数据结构都需要使用指针。像二叉堆那样,左式堆也有结构性和堆序性。不仅如此,左式堆也是二叉树,它和二... 阅读全文
posted @ 2014-06-27 15:25 Jessica程序猿 阅读(1066) 评论(0) 推荐(0)
摘要:二叉堆简介平时所说的堆,若没加任何修饰,一般就是指二叉堆。同二叉树一样,堆也有两个性质,即结构性和堆序性。正如AVL树一样,对堆的以此操作可能破坏者两个性质中的一个,因此,堆的操作必须要到堆的所有性质都被满足时才能终止。结构性质堆是一棵完全填满的二叉树,因为完全二叉树很有规律,所以它可以用一个数组表... 阅读全文
posted @ 2014-06-27 15:21 Jessica程序猿 阅读(1268) 评论(0) 推荐(0)
摘要:今天下午闲着没事尝试在自己的PC中的CentOS上装一个Code::Blocks,因为是Linux菜鸟折腾了一下午才基本算搞定但依然有疑惑:在网上各种谷哥度娘最后才发现还是官方的文档最靠谱:看这里。上面讲的比较详细,下面简单总结一下安装的步骤:wxWidgets安装Code::Blocks的界面依赖... 阅读全文
posted @ 2014-06-26 16:21 Jessica程序猿 阅读(2617) 评论(0) 推荐(0)
摘要:实现优先队列结构主要是通过堆完成,主要有:二叉堆、d堆、左式堆、斜堆、二项堆、斐波那契堆、pairing 堆等。1. 二叉堆1.1. 定义完全二叉树,根最小。存储时使用层序。1.2. 操作(1). insert(上滤)插入末尾 26,不断向上比较,大于26则交换位置,小于则停止。(2). delet... 阅读全文
posted @ 2014-06-26 10:10 Jessica程序猿 阅读(4441) 评论(0) 推荐(0)
摘要:#include#include"fatal.h"typedef char* ElementType;typedef unsigned int Index;typedef Index Position;struct HashTbl;typedef struct HashTbl *HashTable;... 阅读全文
posted @ 2014-06-25 19:13 Jessica程序猿 阅读(477) 评论(0) 推荐(0)
摘要:#include#includetypedef char* ElementType;typedef unsigned int Index;#define MinTableSize 15struct ListNode;typedef struct ListNode *Position;struct H... 阅读全文
posted @ 2014-06-25 18:08 Jessica程序猿 阅读(469) 评论(0) 推荐(0)
摘要:1、函数指针(指向函数的指针)在c语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址(入口地址),所以函数名跟数组名很类似,都是指针常量。函数指针就是指向这个入口地址的指针变量,注意函数指针是一个变量。#includevoid f(int);int main(){ ... 阅读全文
posted @ 2014-06-24 22:02 Jessica程序猿 阅读(448) 评论(0) 推荐(0)
摘要:#include#include "fatal.h"struct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;typedef int ElementType;SearchTree Mak... 阅读全文
posted @ 2014-06-24 20:02 Jessica程序猿 阅读(1426) 评论(0) 推荐(0)
摘要:#include#include "fatal.h"struct AvlNode;typedef struct AvlNode *Position;typedef struct AvlNode *AvlTree;typedef int ElementType ;AvlTree MakeEmpty(A... 阅读全文
posted @ 2014-06-24 19:58 Jessica程序猿 阅读(591) 评论(0) 推荐(0)
摘要:AVLTree即(Adelson-Velskii-Landis Tree),是加了额外条件的二叉搜索树。其平衡条件的建立是为了确保整棵树的深度为O(nLogn)。平衡条件是任何节点的左右子树的高度相差不超过1.在下面的代码中,编程实现了AVL树的建立、查找、插入、删除、遍历等操作。采用C++类封装。... 阅读全文
posted @ 2014-06-24 19:55 Jessica程序猿 阅读(765) 评论(0) 推荐(0)
摘要:排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高。查找的最差情况是树的高度。这里就有问题了,将无序数列转化为二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况。【如图1】: 这样的一颗二叉排序树就是一颗比较极端的情况。我们在查找时候,效率依赖树的高度,所以不希望这样... 阅读全文
posted @ 2014-06-24 16:16 Jessica程序猿 阅读(594) 评论(0) 推荐(0)
摘要:先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char *(p)定义了一个指针P;char *p[4],为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故... 阅读全文
posted @ 2014-06-24 10:51 Jessica程序猿 阅读(853) 评论(0) 推荐(1)
摘要:二叉搜索树最大特征是:左边子结点的值#include #include typedef struct NODE{ NODE * pleft; NODE * pright; int ivalue;} node;/* 错误示例,实际上这个函数并没有连接起新建的结点void inser... 阅读全文
posted @ 2014-06-24 10:39 Jessica程序猿 阅读(1732) 评论(0) 推荐(0)
摘要:1、序详细实现了二叉查找树的各种操作:插入结点、构造二叉树、删除结点、查找、 查找最大值、查找最小值、查找指定结点的前驱和后继2、二叉查找树简介它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值... 阅读全文
posted @ 2014-06-24 10:37 Jessica程序猿 阅读(696) 评论(0) 推荐(1)
摘要:首先,从wine的官网下载页面http://www.winehq.org/download/可以了解到centos安装wine需要EPEL软件仓库。那么首先安装EPEL软件仓库,从http://mirrors.sohu.com/fedora-epel/6/i386/repoview/epel-rel... 阅读全文
posted @ 2014-06-22 20:31 Jessica程序猿 阅读(1282) 评论(0) 推荐(0)
摘要:linux内核netfilter连接跟踪的hash算法linux内核中的netfilter是一款强大的基于状态的防火墙,具有连接跟踪(conntrack)的实现。conntrack是netfilter的核心,许多增强的功能,例如,地址转换(NAT),基于内容的业务识别(l7,layer-7 modu... 阅读全文
posted @ 2014-06-21 23:25 Jessica程序猿 阅读(4684) 评论(0) 推荐(0)
摘要:一、TRACE宏当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了。但在程序的Release版本中,它们是被完全禁止的。下面是一个典型的TRACE语句:… int nCount =9;CString strDesc("total"); TRA... 阅读全文
posted @ 2014-06-21 23:24 Jessica程序猿 阅读(1823) 评论(0) 推荐(0)
摘要:Solaris ZFS ARC的改动(相对于IBM ARC)如我前面所说,ZFS实现的ARC和IBM提出的ARC淘汰算法并不是完全一致的。在某些方面,它做了一些扩展:· ZFS ARC是一个缓存容量可变的缓存算法,它的容量可以根据系统可用内存的状态进行调整。当系统内存比较充裕的时候,它的容量可以自动... 阅读全文
posted @ 2014-06-20 12:23 Jessica程序猿 阅读(2880) 评论(0) 推荐(0)
摘要:在Solaris ZFS 中实现的ARC(Adjustable Replacement Cache)读缓存淘汰算法真是很有意义的一块软件代码。它是基于IBM的Megiddo和Modha提出的ARC(Adaptive Replacement Cache)淘汰算法演化而来的。但是ZFS的开发者们对IBM... 阅读全文
posted @ 2014-06-20 11:20 Jessica程序猿 阅读(3024) 评论(0) 推荐(0)
摘要:从前面的文章中,我们已经了解到了缓存设计的目标,缓存设计应该考虑的因素。今天我们来看看一系列缓存算法以及它们如何去解决问题的。同时,我们也会涉及到各种缓存算法的优缺点。这里我并不想讨论与预取(pre-fetch)相关的算法,主要是考虑各种淘汰算法。因为相比于预取算法,淘汰算法具有更大的通用性,对缓存... 阅读全文
posted @ 2014-06-20 11:18 Jessica程序猿 阅读(1473) 评论(0) 推荐(0)
摘要:每当我们讨论缓存时,总是会对如下几个词比较熟悉,Write-back, write-through, write-around似乎,缓存主要是为“写”设计的,其实这是错误的理解,写从缓存中获得的好处是非常有限的,缓存主要是为“读”服务的。之所以我们要顺带提一下,在一个缓存系统中,如何处理写的顺序,是... 阅读全文
posted @ 2014-06-20 11:17 Jessica程序猿 阅读(288) 评论(0) 推荐(0)
摘要:Caching(缓存)在现代的计算机系统中是一项最古老最基本的技术。它存在于计算机各种硬件和软件系统中,比如各种CPU, 存储系统(IBM ESS, EMC Symmetrix…),数据库,Web服务器,中间件等。它的一个重要的作用就是用于弥补不同速度的硬件之间的存取速度的差距,cache可以完全通... 阅读全文
posted @ 2014-06-20 11:16 Jessica程序猿 阅读(306) 评论(0) 推荐(0)
摘要:#include #include #includeusing namespace std;struct Node { double coef; int expn; Node *next;};void CreatPolynomial(Node *&head, int n) ... 阅读全文
posted @ 2014-06-19 14:13 Jessica程序猿 阅读(632) 评论(0) 推荐(0)
摘要:以上关于shell的总结,全部转载至下面的博客。。Linux Shell常用技巧(一)http://www.cnblogs.com/stephen-liu74/archive/2011/11/10/2240461.html一. 特殊文件: /dev/null和/dev/tty二. 简单的命令跟踪三.... 阅读全文
posted @ 2014-06-17 12:47 Jessica程序猿 阅读(368) 评论(0) 推荐(0)
摘要:二十三. Bash Shell编程:1. 读取用户变量: read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY。下面的列表给出了read命令的常用方式:命令格式描... 阅读全文
posted @ 2014-06-17 12:46 Jessica程序猿 阅读(841) 评论(0) 推荐(0)
摘要:二十二. 交互式使用Bash Shell: 1. 用set命令设置bash的选项: 下面为set主要选项的列表及其表述:选项名开关缩写描述allexport-a打开此开关,所有变量都自动输出给子Shell。noclobber-C防止重定向时文件被覆盖。noglob-d在路径和文件名中,关闭通配符。 ... 阅读全文
posted @ 2014-06-17 12:44 Jessica程序猿 阅读(371) 评论(0) 推荐(0)
摘要:二十. 通过管道组合Shell命令获取系统运行数据:1. 输出当前系统中占用内存最多的5条命令: #1) 通过ps命令列出当前主机正在运行的所有进程。 #2) 按照第五个字段基于数值的形式进行正常排序(由小到大)。 #3) 仅显示最后5条输出。/> ps aux | sort -k 5n | tai... 阅读全文
posted @ 2014-06-17 12:43 Jessica程序猿 阅读(225) 评论(0) 推荐(0)
摘要:十九. 和系统运行进程相关的Shell命令:1. 进程监控命令(ps): 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过... 阅读全文
posted @ 2014-06-17 12:42 Jessica程序猿 阅读(271) 评论(0) 推荐(0)
摘要:十八. 和系统运行状况相关的Shell命令: 1. Linux的实时监测命令(watch): watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的手动运行。该命令最为常用的两个选项是-d和-n,其中-n表示间隔多少秒执行一次"command",-d表示高亮发生变化的... 阅读全文
posted @ 2014-06-17 12:41 Jessica程序猿 阅读(698) 评论(0) 推荐(0)
摘要:十六. 文件查找命令find: 下面给出find命令的主要应用示例: /> ls -l #列出当前目录下所包含的测试文件 -rw-r--r--. 1 root root 48217 Nov 12 00:57 install.log -rw-r--r--. 1 root root 37 Nov 12 ... 阅读全文
posted @ 2014-06-17 12:39 Jessica程序猿 阅读(192) 评论(0) 推荐(0)
摘要:十二. 行的排序命令sort: 1. sort命令行选项:选项描述-t字段之间的分隔符-f基于字符排序时忽略大小写-k定义排序的域字段,或者是基于域字段的部分数据进行排序-m将已排序的输入文件,合并为一个排序后的输出数据流-n以整数类型比较字段-o outfile将输出写到指定的文件-r倒置排序的顺... 阅读全文
posted @ 2014-06-17 12:38 Jessica程序猿 阅读(178) 评论(0) 推荐(0)
摘要:十一. awk编程: 1. 变量:在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表:符号含义等价形式=a = 5a = 5+=a = a + 5a... 阅读全文
posted @ 2014-06-17 12:37 Jessica程序猿 阅读(219) 评论(0) 推荐(0)
摘要:九. awk实用功能: 和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行“选择”动作。如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上。如果一个动作没有模板,所有被动作指定的行都被处理。 1. awk的基本格式: /> awk 'pattern... 阅读全文
posted @ 2014-06-17 12:29 Jessica程序猿 阅读(244) 评论(0) 推荐(0)
摘要:八. 流编辑器sed: sed一次处理一行文件并把输出送往屏幕。sed把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space)。一旦sed完成对模式空间中的行的处理,模式空间中的行就被送往屏幕。行被处理完成之后,就被移出模式空间,程序接着读入下一行,处理,显示,移出......文... 阅读全文
posted @ 2014-06-17 12:28 Jessica程序猿 阅读(237) 评论(0) 推荐(0)
摘要:七. grep家族: 1. grep退出状态: 0: 表示成功; 1: 表示在所提供的文件无法找到匹配的pattern; 2: 表示参数中提供的文件不存在。 见如下示例: /> grep 'root' /etc/passwd root:x:0:0:root:/root:/bin/bash opera... 阅读全文
posted @ 2014-06-17 12:21 Jessica程序猿 阅读(227) 评论(0) 推荐(0)
摘要:一. 特殊文件:/dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty。其中/dev/null将会丢掉所有写入它的数据,换句换说,当程序将数据写入到此文件时,会认为它已经成功完成写入数据的操作,但实际上什么事都没有做。如... 阅读全文
posted @ 2014-06-17 12:20 Jessica程序猿 阅读(283) 评论(0) 推荐(0)
摘要:1. find find pathname -options [-print -exec -ok] 让我们来看看该命令的参数: pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print find命令将匹配的文件输出到标准输出。 -exec ... 阅读全文
posted @ 2014-06-17 12:19 Jessica程序猿 阅读(808) 评论(0) 推荐(0)
摘要:算法如下:#include#includevoid Sieve(int n){ int p,j,i; int A[n+1],L[n+1]; for(p=2;p<=n;p++) A[p]=p; for(p=2;p<=sqrt(n);p++) { ... 阅读全文
posted @ 2014-06-16 14:26 Jessica程序猿 阅读(498) 评论(0) 推荐(0)
摘要:#includeint MinSubsequenceSum(const int A[],int n){ int i,sum,MinSum; sum=MinSum=0; for(i=0;i0) sum=0; } return MinSum;}void... 阅读全文
posted @ 2014-06-16 14:22 Jessica程序猿 阅读(535) 评论(0) 推荐(0)
摘要:#includeint MinSubsequenceSum(const int A[],int n){ int i,sum,MinSum; sum=MinSum=0; for(i=0;i0) sum=0; } return MinSum;}void... 阅读全文
posted @ 2014-06-16 14:21 Jessica程序猿 阅读(295) 评论(0) 推荐(0)
摘要:动态规划的算法:#includeint MaxSubsequenceSum(const int A[],int n){ int i,sum,MaxSum; sum=MaxSum=0; for(i=0;iMaxSum) MaxSum=sum; if... 阅读全文
posted @ 2014-06-16 14:20 Jessica程序猿 阅读(204) 评论(0) 推荐(0)
摘要:#includevoid equal(int a[],int N){ int i; for(i=0;i<N;i++) { if(i<a[i]) { printf("no exist\n"); printf("%... 阅读全文
posted @ 2014-06-16 14:19 Jessica程序猿 阅读(370) 评论(0) 推荐(0)
摘要:#include#includevoid bubbleSort(int arr[],int n){ int i,j; for(i=n-1;i>0;i--) for(j=n-2;j>=n-i-1;j--) { if(arr[j+1]>arr... 阅读全文
posted @ 2014-06-16 14:17 Jessica程序猿 阅读(270) 评论(0) 推荐(0)
摘要:主要问题是math.h这个头文件虽然在/lib/include下有定义,但是该文件内并没有sqrt()的定义。解决的办法是;在编译的时候在后面加上-lm,意思是链接到math函数库。在gcc下用到数学函数,如sqrt。在gcc时要加上-lm参数,这样告诉编译器我要用到数学函数了 。如:gcc a.c... 阅读全文
posted @ 2014-06-16 13:18 Jessica程序猿 阅读(3824) 评论(0) 推荐(0)
摘要:这篇文章将讨论:1) 分治策略的思想和理论2) 几个分治策略的例子:合并排序,快速排序,折半查找,二叉遍历树及其相关特性。说明:这几个例子在前面都写过了,这里又拿出来,从算法设计的策略的角度把它们放在一起来比较,看看分治是如何实现滴。由于内容太多,我将再花一篇文章来写4个之前没有写过的分治算法:... 阅读全文
posted @ 2014-06-16 09:25 Jessica程序猿 阅读(811) 评论(0) 推荐(0)
摘要:#include #include // 第一题// 找出N个数的第k个最大者// 方法1:排序(冒泡),降序找出第k个值// 方法2:选前k个点进行降序排序,后面的数进行比较,// 如果数比第k个数小则忽略, 复杂度低于方法1#define TYPE int#define TESTBUBLESOR... 阅读全文
posted @ 2014-06-15 20:59 Jessica程序猿 阅读(792) 评论(0) 推荐(0)
摘要:介绍IOPS和Throughput吞吐量两个参数是衡量存储性能的主要指标。IOPS表示存储每秒传输IO的数量,Throughput吞吐量则表示每秒数据的传输总量。两者在不同的情况下都能表示存储的性能状况,但应用的场景不尽相同。同时,两者之间也存在着相互的联系,本文就IOPS和Throughput吞吐... 阅读全文
posted @ 2014-06-15 15:22 Jessica程序猿 阅读(3712) 评论(0) 推荐(0)
摘要:SAN和NAS存储一般都具备2个评价指标:IOPS和带宽(throughput),两个指标互相独立又相互关联。体现存储系统性能的最主要指标是IOPS。IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),指的是系统在单位时间内能处理的最大的I/O频度,是衡量磁... 阅读全文
posted @ 2014-06-15 15:20 Jessica程序猿 阅读(16337) 评论(0) 推荐(2)
摘要:一、什么是库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库。Linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib... 阅读全文
posted @ 2014-06-13 21:50 Jessica程序猿 阅读(481) 评论(0) 推荐(0)
摘要:最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include “unp.h” 相当有个性并且也很便捷于是我把第三版的源代码编译实现了这个过程,算是一种个性化的开发环境的搭建吧,顺便把过程记录下来,以便自己以后查阅。首先去网上找到源代码包unpv.13e.tar.g... 阅读全文
posted @ 2014-06-13 15:08 Jessica程序猿 阅读(974) 评论(0) 推荐(0)
摘要:最近在读 Richard Stevens 的大作《UNIX环境高级编程》,相信很多初读此书的人都会与我一样遇到这个问题,编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个文件或目录”。apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Uni... 阅读全文
posted @ 2014-06-13 15:04 Jessica程序猿 阅读(632) 评论(0) 推荐(0)
摘要:一、引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,... 阅读全文
posted @ 2014-06-12 23:00 Jessica程序猿 阅读(25541) 评论(1) 推荐(4)
摘要:建立一个 TCP 连接时会发生下述情形:1. 服务器必须准备好接受外来的连接。这通常通过调用 socket、bind 和 listen 这三个函数来完成,我们称之为被动打开。2. 客户通过调用 connect 发起主动打开,这导致客户TCP发送一个SYN(同步)分节,标识希望连接的服务器端口以及初始... 阅读全文
posted @ 2014-06-12 22:34 Jessica程序猿 阅读(490) 评论(0) 推荐(0)
摘要:很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端socket后还是有这个问题。正如下面的这段简单的socket程序。server.c#include ... 阅读全文
posted @ 2014-06-12 22:25 Jessica程序猿 阅读(1725) 评论(0) 推荐(0)
摘要:1 socket函数为了执行网络I/O,一个进程必须做的一件事情就是调用socket函数,指定期望的通信协议类型(使用Ipv4的TCP,使用Ipv6的UDP,Unix域字节流协议等)。# includeint socket(int family,int type,int protocol);返回:若... 阅读全文
posted @ 2014-06-12 16:54 Jessica程序猿 阅读(497) 评论(0) 推荐(0)
摘要:关于TCP/IP协议,建议参考Richard Stevens的《TCP/IP Illustrated,vol1》(TCP/IP详解卷1)。关于第二层面,依然建议RichardStevens的《Unix network proggramming,vol1》(Unix网络编程卷1),这两本书公认是Uni... 阅读全文
posted @ 2014-06-12 11:53 Jessica程序猿 阅读(4663) 评论(0) 推荐(0)
摘要:是的,之前Google就说了,由于CentOS/RHEL 6已经是过期的系统,所以不再会有Chrome了。虽然后来由于引起了社区的抗议,从而改口,不再提CentOS/RHEL 6是过期系统了;但是,目前在CentOS/RHEL 6上已经没有Chrome可以下载使用了。其实,根本的原因不是CentOS... 阅读全文
posted @ 2014-06-10 19:51 Jessica程序猿 阅读(715) 评论(0) 推荐(0)
摘要:进程是通过文件描述符(file descriptor,fd)来访问文件的,每个进程最多能同时使用NR_OPEN个文件描述符,这个值在include/linux/limits.h中定义为1024。每一个进程用一个打开文件表files_struct来描述进程的文件描述符使用情况。每一个文件都有一个文件指... 阅读全文
posted @ 2014-06-10 15:22 Jessica程序猿 阅读(1283) 评论(0) 推荐(1)
摘要:先说明一下,linux内核中各种数据结构也不停的在变,所以不同版本的内核各个数据结构的定义可能会差别很大,这一组关于linux 文件系统的文章中的代码都摘自linux-2.6.34.1。VFS依赖于数据结构来保存其对于一个文件系统的一般表示。超级块结构:存放已安装的文件系统的相关信息索引节点结构:对... 阅读全文
posted @ 2014-06-10 15:18 Jessica程序猿 阅读(1701) 评论(0) 推荐(0)
摘要:系统 根文件系统首先是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。 我们首先从主机上所安装的Linux操作系... 阅读全文
posted @ 2014-06-10 14:27 Jessica程序猿 阅读(7278) 评论(0) 推荐(0)
摘要:一、文件系统测试工具简介 1、LTP 参考网站:http://oss.sgi.com/projects/ltp/ LTP(Linux Test Project)是由SGI和IBM联合发起的项目,提供一套验证Linux系统可靠性、健壮性、稳定性的测试套件,也可用来进行POSIX兼容测试和功能性测试。... 阅读全文
posted @ 2014-06-09 15:07 Jessica程序猿 阅读(11693) 评论(2) 推荐(1)
摘要:一、Postmark原理 Postmark是由着名的NAS提供商NetApp开发,用来测试其产品的后端存储性能。 Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特点是:需要频繁、大量地存取小文件。 Postmark的测试原理是创建一个测试文件池。文件的数量和最大... 阅读全文
posted @ 2014-06-09 10:38 Jessica程序猿 阅读(556) 评论(0) 推荐(0)
摘要:VFS的层次文件系统实现与用户进程(或C库)之间。文件系统分类基于磁盘的文件系统(ext2/3 fat iso9660…)、虚拟文件系统(proc)、网络文件系统(nfs)通用文件模型VFS提供一种结构模型,包含了一个强大的文件系统所应具备的所有组件。所有的文件系统实现,都必须提供与VFS定义的结构... 阅读全文
posted @ 2014-06-06 11:17 Jessica程序猿 阅读(516) 评论(0) 推荐(0)
摘要:一、目的 内核加载完initrd文件后,为挂载磁盘文件系统做好了必要的准备工作,包括挂载了sysfs、proc文件系统,加载了磁盘驱动程序驱动程序等。接下来,内核跳转到用户空间的init程序,由init完成创建磁盘设备文件、加载磁盘文件系统、从rootfs切换到磁盘根文件系统等工作。 由于在不同... 阅读全文
posted @ 2014-06-05 10:26 Jessica程序猿 阅读(1171) 评论(0) 推荐(1)
摘要:一、目的 上文详细介绍了CPIO格式的initrd文件,本文从源代码角度分析加载并解析initrd文件的过程。 initrd文件和linux内核一般存储在磁盘空间中,在系统启动阶段由bootload负责把磁盘上的内核和initrd加载到指定的内存空间中;然后,再由内核读取和解析initrd文件,... 阅读全文
posted @ 2014-06-05 10:13 Jessica程序猿 阅读(1434) 评论(0) 推荐(0)
摘要:一、目的 linux把文件分为常规文件、目录文件、软链接文件、硬链接文件、特殊文件(设备文件、管道文件、socket文件等)几种类型,分别对应不同的新建函数sys_open()、sys_mkdir()、sys_symlink()、sys_link()、sys_mknod()。 系统初始化阶段成功... 阅读全文
posted @ 2014-06-05 10:13 Jessica程序猿 阅读(1214) 评论(0) 推荐(0)
摘要:一、目的 本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd。 initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可执行程序和驱动程序。在linux初始化的初级阶段,它提供了一个基本的运行环境。当成功加载磁盘文件系统后,系统将切换到磁盘... 阅读全文
posted @ 2014-06-05 10:09 Jessica程序猿 阅读(1394) 评论(0) 推荐(0)
摘要:一、目的 本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统。 rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统... 阅读全文
posted @ 2014-06-05 10:03 Jessica程序猿 阅读(4152) 评论(0) 推荐(0)
摘要:术语表:struct task:进程struct mnt_namespace:命名空间struct mount:挂载点struct vfsmount:挂载项struct file:文件struct super_block:超级块struct dentry:目录struct inode:索引节点一、目... 阅读全文
posted @ 2014-06-05 09:56 Jessica程序猿 阅读(1378) 评论(0) 推荐(0)
摘要:Blktrace简介: blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求提交,入队,合并,完成等等一些列的信息),是由Linux内核块设备层的维护者开发的,目前已经集成到内... 阅读全文
posted @ 2014-06-04 17:20 Jessica程序猿 阅读(4624) 评论(0) 推荐(0)
摘要:Blktrace简介Blktrace是一个用户态的工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求提交,入队,合并,完成等等一些列的信息)。块设备层处于下图(借用褚霸的图)中的“block layer”Blktrace工作原理(1)b... 阅读全文
posted @ 2014-06-04 17:18 Jessica程序猿 阅读(3009) 评论(0) 推荐(0)
摘要:声明template参数时, 前缀关键字class和typename可以互换;使用关键字typename标识嵌套从属类型名称, 但不需在基类列表和成员初始化列表内使用.从属名称(dependent names):模板(template)内出现的名称, 相依于某个模板(template)参数, 如T ... 阅读全文
posted @ 2014-06-03 17:26 Jessica程序猿 阅读(3113) 评论(0) 推荐(0)
摘要:1. //在C++中typename一般用来声明模板的模板参数(template parameter): template class X; //T是一个模板参数 2. /*但是还有一个关键的用法。首先是两个概念: 1). qualified name 例如:std::c... 阅读全文
posted @ 2014-06-03 11:03 Jessica程序猿 阅读(13091) 评论(1) 推荐(3)
摘要:最近学习了太多与MacOS与Iphone相关的东西,因为不会有太多人有兴趣,学习的平台又是MacOS,不太喜欢MacOS下的输入法,所以写下来的东西少了很多。 等我学习的东西慢慢的与平台无关的时候,可能可以写下来的东西又会慢慢多起来吧。。。。。不过我想早一批订阅我博客的人应该已经不会再看了,因为已经... 阅读全文
posted @ 2014-06-03 09:51 Jessica程序猿 阅读(328) 评论(0) 推荐(0)
摘要:为什么赋值运算符要返回引用??因为赋值操作会改变左值,而 + 之类的运算符不会改变操作数,所以说赋值运算符重载要返回引用以用于类似 (a=b)=c 这样的再次对a=b进行写操作的表达式。+ 返回一个临时对象是合情合理的 ,你若返回引用大多数情况下也不会出错或导致某个操作数被意外修改,但这就使(a+b... 阅读全文
posted @ 2014-06-01 17:40 Jessica程序猿 阅读(3894) 评论(0) 推荐(1)