自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 md raid5实现分析

这里写自定义目录标题raid5设计与实现概念不同链表raid5设计与实现概念raid5代码复杂,它通过对stripe_head的多轮次处理,最终完成上层的读写请求每个轮次,stripe_head根据状态被放入不同的链表,连接件为stripe_head.lru不同链表所有链表通过struct r5conf进行管理released_stripes:临时的链表,等待do_release...

2019-01-06 20:17:34 1076 1

原创 shell脚本学习笔记

echo "name 'YUYUFEN'" echo -n "name :";不换行 可以用 set命令来显示一份完整的当前环境变量列表 有两种方法可以将命令输出赋给变量``$()wcq 文本的行数q 文本的词数q 文本的字节数内联输入重定向(inline input redirection)$wc << EOF> test string 1&...

2017-10-31 22:40:20 390

原创 kvm理解

http://www.cnblogs.com/sammyliu/p/4543110.html

2017-06-04 21:40:17 611

原创 linux内存管理——kmalloc和vmalloc

进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。  内核空间中,从3G到vmalloc_start这段地址是物理内存映射区域(该区域中包含了内核镜像、物理页框表mem_map等等),比如我们使用 的 VMware虚拟系统内存是160M,那么3G~3G

2016-09-23 15:26:35 1120

转载 linux进程调度

进程从非TASK_RUNNING状态变为TASK_RUNNING状态,是由别的进程(也可能是中断处理程序)执行唤醒操作来实现的。执行唤醒的进程设置被唤醒进程的状态为TASK_RUNNING,然后将其task_struct结构加入到某个CPU的可执行队列中。于是被唤醒的进程将有机会被调度执行。   而进程从TASK_RUNNING状态变为非TASK_RUNNING状态,则有两种途径:

2016-09-10 18:42:07 418

原创 IO模型(select, poll, epoll的区别和原理)

参考http://blog.csdn.net/blueboy2000/article/details/4485874参考http://blog.csdn.net/suxinpingtao51/article/details/46314097参考《unix网络编程》五种I/O模型阻塞I/O:应用程序调用一个IO函数,导致应用程序阻塞,如果数据已经准备好,从内核拷贝到用

2016-09-08 11:28:18 8090 2

转载 内核页表和进程页表

初学内核时,经常被“内核页表”和“进程页表”搞晕,不知道这到底是个啥东东,跟我们平时理解的页表有和关系。。内核页表:即书上说的主内核页表,在内核中其实就是一段内存,存放在主内核页全局目录init_mm.pgd(swapper_pg_dir)中,硬件并不直接使用。进程页表:每个进程自己的页表,放在进程自身的页目录task_struct.pgd中。在保护模式下,从硬件角度看,其运行的基本对

2016-09-07 15:52:57 2542

转载 排序算法的总结

每种排序的总结见http://www.cnblogs.com/gaochundong/p/comparison_sorting_algorithms.html#intro_sort内省排序(Introsort)是由 David Musser 在 1997 年设计的排序算法。这个排序算法首先从快速排序开始,当递归深度超过一定深度(深度为排序元素数量的对数值)后转为堆排序。采用这个方法

2016-09-06 21:24:47 358

转载 B树、B+树和B*树

参考http://blog.csdn.net/v_july_v/article/details/6530142大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下,那么如何减少树的深度(当然是不能减少查询的数据量),一个

2016-09-04 12:03:17 520

原创 linux中process, kernel thread, user thread的区别

进程的contex switch开销较大:因为需要change 地址空间,但change address space is simply a register change in the CPU?改变页表寄存器中的地址即可啊,为什么开销大呢,其实是因为需要"flusing the translation look-aside buffer"线程间的contex switch开销较小:但是会有c

2016-09-03 10:24:25 4108

原创 Linux内核同步方式总结

阅读《深入理解linux内核》笔记内核抢占:如果进程正在执行内核函数时(即它在内核态运行时),允许发生内核切换(被替换的进程是正在执行内核函数的进程),这个内核就是抢占的。运行在内核态的进程可以自动放弃cpu,称为计划性进程切换,抢占式内核中,进程被迫放弃CPU,称为强制性进程切换。抢占内核的主要特点是:一个内核态运行的进程,可能在执行内核函数期间被另一个进程取代。内核抢占就会发生一种

2016-09-02 21:49:20 3658

原创 死锁及其解决方案(避免、预防、检测)

死锁的产生的条件

2016-09-02 11:00:14 20813

原创 《深度探索C++对象模型》读书笔记

第三章(The Semantics of Data)一个空的class的大小并不为0;class x { };//sizeof(x) = 1;即空的class并不是真的空,它有一个隐晦的1bytes,那是编译器安插进去的一个char,这使得这个class的两个objects得以在内存中配置独一无二的地址:X a, b;if(&a == &b) cout class的大小受到三

2016-08-28 18:25:29 450

原创 C++内存池(memory pool)管理

程序员在使用C++中的动态内存分配器时,new/delete, malloc/free等操作时,可能会出现以下问题:Memory Leak:new一块空间,但中间抛出错误,最后没有释放成功,导致memory leak;这个问题可以采用智能指针auto_ptr, shared_ptr, unique_ptr来解决Mismatching Operators:new和delete没有配对使用

2016-08-28 10:23:23 2697

原创 《STL源码剖析》阅读笔记

STL中的分配器,vector, list, deque, map和set的实现

2016-08-27 22:00:26 941

转载 C++中的智能指针——auto_ptr, unique_ptr, shared_ptr和weak_ptr

http://www.cnblogs.com/lanxuezaipiao/p/4132096.htmlSTL一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr和weak_ptr所有的智能指针类都有一个explicit构造函数,以指针作为参数。比如auto_ptr的类模板原型为:templetclass T>class a

2016-08-24 22:52:30 1093

原创 C++中的虚函数

1.虚函数的实现原理(http://www.cnblogs.com/malecrab/p/5572730.html)如果一个类含有虚函数,那么编译器会为该类生成一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的虚函数指针。虚函数表每一行对应一个虚函数的地址。那么类的对象是如何找到虚函数表的呢?对于含有虚函数的类,构造该类的对象时,会自动的为其添加一个虚函数表指针vptr,vptr...

2016-08-23 16:08:07 281

转载 C++中内存管理

http://www.cnblogs.com/lancidie/archive/2011/08/05/2128318.html1 分配方式简介  在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。  栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效

2016-08-19 10:59:55 289

原创 unix网络编程

TCP的连接(1)服务器,调用socket, bind和listen,被动打开(2)客服,调用connect,主动打开为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型,客户端和服务器端都需要socket()函数(该套接字从socket()开始为CLOSED状态)#include int socket(int

2016-08-15 10:07:58 395

原创 TCP和UDP协议的对比

UDP是一个简单的,不可靠的数据报协议。TCP是一个复杂的、可靠的字节流协议UDP的特点如下:(1)无链接(2)UDP使用尽最大努力交付,不保证可靠性(3)UDP是面向报文的,UDP对应用层交付下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文(4)UDP没有拥塞控制(5)UDP支持一对一、一对多

2016-08-14 22:03:58 7356

原创 Linux中动态内存的分配与回收(heap, buddy system, stab)

1.malloc 和free的原理(http://m.blog.csdn.net/article/details?id=39496057)从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。1、brk是将数据段(.data)的最高地址指针_edata往高地址推;2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射

2016-08-14 11:30:20 5057

原创 C++的封装、多态、继承在C中的对应实现方式

C++的特点:封装、多态、继承1.封装是面向对象最重要的特征之一(C++中的类class),封装就是指隐藏。 对象隐藏了数据(例如private属性),避免了其他对象可以直接访问使用对象属性而造成耦合度过高,过度依赖。同时也可以阻止其他对象随意修改对象内部的数据而引起对象的不一致,要访问对象的数学,必须使用对象提供的相关函数。 对象隐藏方法的实现细节。 a)使用者只能使用公有方法而

2016-08-11 17:40:09 1736

原创 linux的常用命令和awk的基本用法

1.awkawk是Unix/Linux提供的样式扫描与处理工具,非常擅长处理结构化数据和生成表单命令行方式awk '{pattern + action}' {filenames}通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。awk [-F field-separator] 'commands' input-file(

2016-08-11 11:49:24 385

原创 操作系统——进程管理

1.进程地址空间2.进程调度和切换3.进程间的通信

2016-07-29 10:06:05 247

原创 操作系统——中断机制(trap, interrupts)

中断描述符表(Interrupt Descriptor Table,IDT)将每个异常或中断向量分别与它们的处理过程联系起来,IDT也是由8字节长描述符组成的一个数组。IDT表可以存放在线性地址空间的任何地址,处理器使用IDTR寄存器来定位IDT表的位置。IDTR寄存器中含有32位的基地址和16位的长度值。LIDT和SIDT指令分别用于加载和保存IDTR寄存器的内容。LIDT指

2016-07-28 21:22:50 8594 1

原创 操作系统——虚拟内存管理

os中有物理地址和虚拟地址(逻辑地址)的区别物理地址就是实际的物理内存的地址,逻辑地址是程序指令使用的地址。页表的作用就是实现逻辑地址到物理地址的映射。x86的32位地址,前20位用于查找页表1.地址的转换?2.页表的作用,页表项3.缺页中断,中断机制4.地址的保护机制

2016-07-28 17:57:03 1858

原创 linux的文件系统和虚拟文件系统(VFS)

http://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/1.软链接和硬链接的区别我们知道文件都有文件名与数据,数据分两部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建

2016-07-23 10:24:01 3458

原创 C/C++面试问题汇总

1.C/C++中的static关键字1.C语言中的static关键字的作用(a)static作用于变量:分两种情况:在文件内的全局静态变量,在函数体内的局部静态变量1.static的全局变量:会存入到进程的.data区域,静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它...

2016-07-22 22:29:29 804

原创 读书笔记:Effective C++(二)

条款20:宁以pass-by-reference-to-const替换pass-by-valueclass Person{public: Person(); virtual ~Person();private: std::string name; std::stringi address;};class Student: public Persion{

2016-07-20 21:32:49 243

原创 错题解答与汇总

1.多级队列调度和多级反馈队列调度的区别时间片轮转调度算法:将所有的就绪进程按先来先服务的原则排成一个队列,每次调度,把CPU分配给队首进程,并令其执行一个时间片。时间片用完时,由计时器发出时钟中断请求,停止该进程,并将其放置到队列尾。时间片设置太大,退化成FCFS(Fisrt Come First Service),时间片设置太短,频繁的中断和进程上下文的切换,增加系统的开销多级队列...

2016-07-05 17:35:49 471

原创 笔记:进程间通信——同步(互斥锁、读写锁、条件变量、信号量)以及Linux中的RCU

1.互斥锁多个线程的IPC,需要同步,同步有隐式的和显示的:比如unix提供的管道和FIFO,由内核负责同步,比如read发生在write之前,那么read就会被内核阻塞,这中同步是由内核负责的,用户不会感知。但如果使用共享区作为生产者和消费者之间的IPC,那么程序员就需要负责同步,这种称为显示同步。2.条件变量互斥锁,当消费者等待生产者的数据时,需要不断的测试(即sp

2016-06-20 20:17:01 3400

原创 笔记:Effective C++

1.const的修饰,mutable可以释放变量的const属性记住就近原则另外:void f1(const Widget *pw);void f2(Widget const *pw);以上两者是等价的。2.迭代器是以指针为根据塑造出来的,所以迭代器的作用就像个T*指针。声明迭代器为const就像声明指针为const一样(T* const),表示迭代器本身不能被修改,即不能

2016-06-19 22:40:59 308

原创 笔记:进程间通信——消息传递(管道、FIFO、posix消息队列)

管道的创建, fd[0]:从管道读;fd[1]:向管道写管道是单个进程创建的,它却很少在单个进程内使用。管道的典型用途是:两个进程(一个父进程,一个子进程)提高进程间通信的手段。步骤:首先,父进程创建一个管道,fork一个自进程(子进程中也有该管道,管道相当与文件,子进程可以共享父进程的?);然后,父进程关闭管道的读出端,子进程关闭同一个管道的写入端。这样父子进程间变形成了一个

2016-06-19 21:51:46 2471

原创 RAID磁盘阵列

RAID(独立硬盘冗余阵列)Redundant Array of Independent Disks基本思想:把多个相对便宜的磁盘组合起来,成为一个测盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。采用RAID的好处(两个关键目标):(1)并发地在多个磁盘上读写数据来提高存储系统的I/O性能(2)提高系统的容错性和可靠性主要是通过牺牲空间换取更高的可靠性和性能

2016-05-30 20:49:23 287

原创 c中枚举类型enum, struct, union

1.枚举类型的定义enum 枚举类型名{枚举常量1[=整型常量], 枚举常量2[=整型常量], ...},这种方式可以替代constenum color { WRITE, BLACK, GRAY};默认情况下从0开始编号,之后每次+1(上述为WRITE=0, BLACK=1, GRAY=2)也可以自己定义特定的enum color { WRITE=7, BLACK=2, GRAY}...

2016-05-03 11:43:07 279

原创 shell脚本学习资源

Linux shell 之 提取文件名和目录名的一些方法 http://blog.csdn.net/ljianhui/article/details/43128465

2016-04-28 10:39:26 252

原创 线程使用共享堆而非私有堆的原因分析

进程创建线程,每个线程可以共享进程的地址空间;但同时线程需要保留一些自己私有的数据unix中的thread独自持有的资源:Stack pointerRegistersscheduling properties(policy and priority)set of pending and blocked signalsThread specific data线程操作的特点:

2015-11-19 10:42:50 4323 1

原创 C++中变量的声明与定义的异同

分离式编译机制允许将程序分割为若干个文件,每个文件可以被独立编译。这种方式必须解决一个问题,即如何在多个文件之间共享代码?(例如一个全局变量,在一个一个文件中被定义,如何在其他文件中被使用?)为了解决这个问题,即多个文件中使用同一个变量,C++将声明和定义分开:(1)变量在其中一个文件中定义,且只能在一个变量中定义(2)在其他需要使用的文件中,必须对该变量进行声明声明(

2015-11-10 21:20:10 523

原创 线程同步的方式——Mutex(互斥量)、 Condition variable(条件变量)和Semaphore(信号量)

1.不同的同步方式的实现方法2.相互之间的对比?区别?

2015-10-30 09:50:22 1113

原创 操作系统中锁和信号量的作用与区别

OS中锁和信号量的作用与区别???

2015-10-29 09:35:29 869

空空如也

空空如也

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

TA关注的人

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