随笔分类 - 收藏
此分类的文章均为转载的,如果忘了加原文链接希望谅解,希望能提供原文链接给我,谢谢。
摘要:内存管理是操作系统的核心之一,最近在研究内核的内存管理以及C运行时库对内存的分配和管理,涉及到进程在内存的布局,在此对进程的内存布局做一下总结:1. 32位模式下的linux内存布局图上的各个部分描述得比较清楚,不需再做过多的描述。从上图可以看到,栈至顶向下扩展,并且栈是有界的。堆至底向上扩展,mmap映射区域至顶向下扩展,mmap映射区域和堆相对扩展,直至耗尽虚拟地址空间中的剩余区域,这种结构便于C运行时库使用mmap映射区域和堆进行内存分配。上图的布局形式是在内核2.6.7以后才引入的,这是32位模式下的默认内存布局形式。看看cat命令在2.6.36上内存布局:08048000-08051
阅读全文
摘要:2006年的OSDI有两篇google的论文,分别是BigTable和Chubby。Chubby是一个分布式锁服务,基于Paxos算法;BigTable是一个用于管理结构化数据的分布式存储系统,构建在GFS、Chubby、SSTable等google技术之上。相当多的google应用使用了BigTable,比如Google Earth和Google Analytics,因此它和GFS、MapReduce并称为谷歌技术"三宝"。与GFS和MapReduce的论文相比,我觉得BigTable的论文难懂一些。一方面是因为自己对数据库不太了解,另一方面又是因为对数据库的理解局限于关
阅读全文
摘要:江湖传说永流传:谷歌技术有"三宝",GFS、MapReduce和大表(BigTable)!谷歌在03到06年间连续发表了三篇很有影响力的文章,分别是03年SOSP的GFS,04年OSDI的MapReduce,和06年OSDI的BigTable。SOSP和OSDI都是操作系统领域的顶级会议,在计算机学会推荐会议里属于A类。SOSP在单数年举办,而OSDI在双数年举办。那么这篇博客就来介绍一下MapReduce。1. MapReduce是干啥的因为没找到谷歌的示意图,所以我想借用一张Hadoop项目的结构图来说明下MapReduce所处的位置,如下图。Hadoop实际上就是谷歌
阅读全文
摘要:题记:初学分布式文件系统,写篇博客加深点印象。GFS的特点是使用一堆廉价的商用计算机支撑大规模数据处理。虽然"The Google File System "是03年发表的老文章了,但现在仍被广泛讨论,其对后来的分布式文件系统设计具有指导意义。然而,作者在设计GFS时,是基于过去很多实验观察的,并提出了很多假设作为前提,这等于给出了一个GFS的应用场景。所以我们自己在设计分布式系统时,一定要注意自己的应用场景是否和GFS相似,不能盲从GFS。GFS的主要假设如下:GFS的服务器都是普通的商用计算机,并不那么可靠,集群出现结点故障是常态。因此必须时刻监控系统的结点状态,当结点
阅读全文
摘要:内核地址空间分布直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。永久内存映射区:该区域可访问高端内存。访问方法是使用alloc_page(_GFP_HIGHMEM)分配高端内存页或者使用kmap函数将分配到的高端内存映射到该区域。固定映射区:该区域和4G的顶端只有4k的隔离带,其每个地址项都服务于特定的用途,如ACPI_
阅读全文
摘要:经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, Swapped size (kb)CODE, Code size (kb)DATA, Data+Stack size (kb)nFLT, Page Fault countnDRT, Dirty Pages count尽管有注释,但依然感觉有些晦涩,不知所指何意?进程内存空间正在运行的程序,叫进程。每个
阅读全文
摘要:linux和os:netstat tcpdump ipcs ipcrm (如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率较小,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验)cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握awk sed需掌握共享内存的使用实现原理(必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?)c 进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)ELF是什么?
阅读全文
摘要:如今,但凡说精通网络的,第二个意思就是“精通TCP”,事实上,很多自称精通TCP的家伙们只是精通socket接口而已,对TCP行为精通的并不多,笔者也不算精通,但绝对是中等以上水平。如果你真的精通TCP行为,那么本文不读也罢,直接发邮件给我,我们切磋一下,如果只是了解socket接口,那么建议读本文,然后一定再看一下《TCP协议疑难杂症全景解析》0.UDP协议和TCP协议UDP是用户数据报协议的简称,对于分组交换网络,它实际上扮演了传统邮局的角色,而TCP则是扮演了电话运营商以及物流公司的角色,对于分组交换网络而言,UDP要比TCP更加基本一些,可以说,TCP则是实现一种基于流的通信过程,在I
阅读全文
摘要:说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,学习网络更好的资源是RFC5).本文给出一个提纲,如果想了解细节,请直接查阅RFC6).翻来覆去,终于找到了这篇备忘,本文基于这篇备忘文档修改。1.网络协议设计ISO提出了OSI分层网络模型,这种分层模型是理论上的,
阅读全文
摘要:源于网络1.如何判断单链表里面是否有环?设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:bool IsExitsLoop(slist *head){ slist *slow = head, *fast = head; while ( fast && fast->next ) { slow = slow->next; fast = fast->next->ne...
阅读全文
摘要:TCP提供一种面向连接的、全双工的、可靠的字节流服务。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。TCP的接收端必须丢弃重复的数据。TCP对字节流的内容不作任何解释。对字节流的解释由TCP连接双方的应用层解释。TCP通过下列方式来提供可靠性:应用数据被分割成TCP认为最适合发送的数据块,称为报文段或段。TCP协议中采用自适应的超时及重传策略。TCP可以对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。TCP的接收端必须丢弃重复的数据。TCP还能提供流量控制。TCP报文段格式 源端口和目的端口字段——各占2字节。端...
阅读全文
摘要:8月27起持续更新....综合http://www.cnblogs.com/rollenholt/category/300627.htmlhttp://www.thegeekstuff.com/2012/08/c-interview-questions/析构函数http://www.cnblogs.com/daoluanxiaozi/archive/2011/12/09/2281796.html代码实现(strcpy)http://www.chinaunix.net/old_jh/23/25356.html(memcpy)http://liangbing8612.blog.51cto.com/
阅读全文
摘要:4. 二叉查找树(BST)Technorati 标记:二叉查找树,BST,二叉查找树合并4.1 BST数据结构定义使用C++语言,如果需要使用BST,那么不用重新造轮子了,C++语言里的map, set等STL容器应该可以满足需求了(虽然STL里这些容器大多是以红黑树作为其底层实现),如果你需要使用小/大根堆(也叫优先队列,特殊的、自平衡的BST),STL也能满足你的需求(可以参考这里:http://www.cnblogs.com/dskit/archive/2009/12/13/1623152.html)。先来看下BST的定义,BST是满足如下3个条件的二叉树:1. 节点的左子树包含的节点的
阅读全文
摘要:1. 打靶问题的递归解法Technorati 标记:递归算法,字典法,二分法,打靶问题,日期问题,求幂,多项式求值伦敦奥运会火热进行中,让我们来看个打靶的问题:一个射击运动员打靶,靶一共有10环,求连开10枪打中90环的可能行有多少种?分析:这是一个典型递归求解问题。假设第10枪打x环,则将问题转换为剩下9枪打90-x环的可能有多少种,x的取值范围为[0, 10],根据加法原理,则:10枪打90环的可能 = 第10枪打0环,剩下9枪打90环的可能 + 第10枪打1环,剩下9枪打89环的可能 + 第10枪打2环,剩下9枪打88环的可能+ 第10枪打3环,剩下9枪打87环的可能 + 第10枪打4环
阅读全文
摘要:排序是计算机算法中非常重要的一项,而排序算法又有不少实现方法,那么哪些排序算法比较有效率,哪些算法在特定场合比较有效,下面将用C++实现各种算法,并且比较他们的效率,让我们对各种排序有个更深入的了解。minheap.h 用于堆排序: 1 //使用时注意将关键码加入 2 #ifndef MINHEAP_H 3 #define MINHEAP_H 4 #include <assert.h> 5 #include <iostream> 6 using std::cout; 7 using std::cin; 8 using std::endl; 9 using std::ce
阅读全文
摘要:from:http://www.nowamagic.net/librarys/veda/detail/5191. 以下三条输出语句分别输出什么?1 char str1[] = "abc";2 char str2[] = "abc";3 const char str3[] = "abc"; 4 const char str4[] = "abc"; 5 const char* str5 = "abc";6 const char* str6 = "abc";7 cout <&
阅读全文
摘要:1、算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。(2)快速排序的基本思想 设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:①分解: 在R[low..high]中任选一 个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pi...
阅读全文
摘要:linux启动序列1、CPU初始化 CPU自身初始化,从某个固定位置(0xfffffff0)取指令并执行,该指令为跳转指令,跳转到BIOS代码的首部。2、装载BIOS BIOS被固化在主板上的一个ROM中,它首先进行自检(POST),随后加载内核引导程序。 POST阶段进行系统硬件的检测,包括内存检测,系统总线检测等。3、读取MBR POST之后,BIOS会读取启动设备的第一个扇区(MBR),即512字节的信息,MBR保存了内核引导程序的开始部分,BIOS将其加载到内存并且执行。 MBR中的主引导程序,包含了446字节的程序代码和64字节的分区表。4、加载系统内核 执行MBR中的主引导程序程序
阅读全文
摘要:C++的auto_ptr, auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。1 构造函数与析构函数auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性:int* p = new int(0);auto_ptr<int> ap(p);从此我们不必关心应该何时释放p, 也不用担心发生异常会有内存泄漏。这里我们有几点要注意:1) 因为auto_ptr析构的时候肯定会删除他所拥有的那个对象,所有我们就要注意了,一个萝卜一个坑,两个auto_ptr不能同时拥有同一个对象。像这样
阅读全文
摘要:在 c++ 98 里面只有一种智能指针,就是 std::auto_ptr,因为具有唯一所有权的特征,所以限制了它的使用范围,比如你无法在容器中使用它。而我们知道 stl 容器是值语义的,如果不能用智能指针管理的话,只有两种办法来使用。一种是类似这样:std::vector<std::string> names;names.push_back("cyberscorpio");std::string name("news818");names.push_back(name);每次向容器中添加内容的时候,实际上产生了该内容的另一份拷贝,对于简单的内
阅读全文

浙公网安备 33010602011771号