
深入理解计算机系统
文章平均质量分 91
esli
01
展开
-
CSI-S4:动态存储器分配-malloc与GC
用户级存储器映射 之前我们介绍过关于程序加载的详细内容,我们知道在其加载执行之前要对程序进行存储器映射,Unix进程可以使用mmap函数来创建新的虚拟存储器区域,并将对象映射到这些区域。Mmap函数要求内核创建一个新的虚拟存储器区域,最好是从start开始的地址,并将文件描述fd标识对象的一个连续的片映射到这个新的区域。连续的对象片大小为length,从距文件开始处原创 2014-04-14 13:43:34 · 2606 阅读 · 0 评论 -
CSI-IV:程序的机器级表示-反汇编基础
CSI:程序的机器级表示-反汇编基础前言 看到标题,可能你就失去了继续阅读的兴趣,反汇编?跟我的工作有关?汇编还记的?反正写程序用不到?的确,你可能几年都没碰过汇编,对于汇编指令记得更是寥寥无几,又或者你的工作永远也不会用到汇编了,所以很少去关注。但我想学习汇编并不是要求我们去从事跟其相关的领域,而是给了我们另一个从机器角度去看待程序的方式。这样,当下次处理我们程序中的原创 2014-04-09 16:07:34 · 1049 阅读 · 0 评论 -
CSI系列-读<深入理解计算机系统>
《深入理解计算机系统》是由作者原创 2014-04-08 14:57:34 · 903 阅读 · 1 评论 -
CSI-II:信息的表示与处理-数值陷阱(一)
CSI:信息的表示与处理-数值陷阱(一) 前言 在程序中,我们经常会涉及到数值计算操作,比如从最简单的数值的表示,到加、减、乘除,再到移位等等,而对于这些往往我们都信心十足,常常用直觉告诉自己:这么做没错!但是,计算机并不是靠直觉来感知数值的,它可是个很严谨的家伙,如果你只是用直觉告诉它你要做的事,那么它也会告诉你:哼!想要我帮你做事情,那么就按我的规则来吧!原创 2014-04-09 09:56:24 · 1887 阅读 · 1 评论 -
CSI-S1:程序的机器级表示~缓冲区溢出详解
CSI-S1:程序的机器级表示~缓冲区溢出详解 缓冲区溢出是一种非常普遍、非常危险的漏洞,在各个系统、应用软件中都广泛存在。因此,这也是一些hacker喜欢利用缓冲区溢出漏洞进行攻击的原因之一。另一方面,通过缓冲器溢出可以让攻击者很轻易地植入攻击代码并执行,从而获取到被控主机的控制权。当然,各个系统对于缓冲区溢出漏洞也引入了各自的防范机制,这让缓冲原创 2014-04-21 10:15:00 · 2508 阅读 · 0 评论 -
CSI-S3:虚拟存储器(二)-再谈hello程序
在CSI-IX一篇中,我们详细的介绍了虚拟存储器的相关概念和技术。但了解这些往往不能揭开我们心中的很多疑团。比如,程序的加载执行过程是怎么样,磁盘的可执行文件怎么虚拟存储器机制关联起来并运行于整个生命周期,虚拟存储机制如是如何组织虚拟页面?或许,学习完操作系统我们还并未完全理解虚拟存储器,或者,我们只记住了一大堆诸如页表,段式,页式存储的概念和一些页面置换的算法等等。不过,这些并不能完全归责于我们原创 2014-04-14 13:22:48 · 1563 阅读 · 0 评论 -
CSI-VII:存储器层次结构-神秘“金字塔”
前言 我们大多数的编码者并不清楚存储器层次结构和编写程序到底如何联系起来,或者只是简单的以为程序的执行无非和内存或者磁盘有关系。的确,我们可以把程序的执行简单的理解为从磁盘加载,然后再到内存中执行。但我们通过第一篇(CSI-I)的内容应该已经知道,程序的执行其实贯通了整个存储器层次结构,如果我们理解了系统是如何将数据在存储器层上上下下移动的,这将对我们提高程序的性能有所帮助。因原创 2014-04-10 13:12:38 · 5596 阅读 · 0 评论 -
CSI-I:计算机系统漫游-由hello程序所联想到的问题
前言 这章内容是对整本书内容的概括和描述,你可以通过本篇文章快速的了解本书所涉及的内容,了解学习书中所列内容的必要性。之后你就会明白学习本书其实是非常有趣的历程,你会知道计算机是怎么工作,自己的写的程序是如何工作的,以及对如何对程序进行优化,同时对进程、线程、虚拟存储器也会有更加清楚的认识。 其次,我要说明的是每章内容并没有必要的联系,所以你完全可以随心所欲原创 2014-04-08 14:31:46 · 1200 阅读 · 0 评论 -
CSI-VI:程序性能优化-写出快速、高效代码
前言 我们常常关注程序的性能,而程序性能的一个重要参考就是:运行时间,同时,我们都知道,这也是衡量一个算法好坏的重要标准。在一个程序保证正确的前提下,其运行得快慢往往决定了其性能的好坏。当然,并不是所有的程序都有很严格的性能要求,往往这些程序更加倾向于保证程序的正确性及稳定性,性能是其次需要考虑的。但对于某些实时性要求比原创 2014-04-10 11:11:35 · 1512 阅读 · 0 评论 -
CSI-III:信息的表示与处理-数值陷阱(二)
CSI:信息的表示与处理-数值陷阱(二)前言本篇继续上一篇,进行浮点数的介绍,浮点数的表示并不像整型那样简单,其在计算机中的运算也会使用更多地时钟周期。我们都知道计算机并不能绝对正确的表示浮点数,都是在允许的精度范围内进行计算,这是由计算的信息表示方式(0和1)所决定的。所以,对于浮点数的误差,我们更应该谨慎和小心,这样才能够在编写的程序中避免可能的病态问题。 谈到浮点数,或许你能原创 2014-04-09 15:27:28 · 2119 阅读 · 0 评论 -
CSI-IX:虚拟存储器-走进系统内核
前言 如果别人问我,从开发人员的角度来讲,操作系统的哪部分内容是最为重要的,那么,我会毫不犹豫的说:虚拟存储器。可能从开始接触计算机系统到现在,我们对于虚拟存储器的概念和原理都还半知半解。甚至很多人,错误的以为理解虚拟存储器并不能给开发工作带来直接的好处,所以干脆放弃去了解虚拟存储器到底是什么样的,是如何贯穿整个系统层面。事实上,了解虚拟存储器如何工作是理解整个系统如何工作的关原创 2014-04-14 13:11:10 · 1740 阅读 · 0 评论 -
CSI-V:测试程序的执行时间
前言 人们经常会问:“程序X在机器Y上运行得有多快?”,而我们一般的回答都是给定一个可以估算出该程序执行时间的一个大概的描述,比如:程序在N分钟跑出了多少的数据;据此我们可以推测程序的运行性能。而很少有人去关注程序到底运行的准确时间,除非我们需要了解程序是否在优化后的性能提升程度,或者想比较两个相似算法的执行效率。这时我们可能需要测量出许多运行数据,来得到程序运行时的CPE原创 2014-04-10 09:19:58 · 1597 阅读 · 0 评论 -
CSI-S2:编写高速缓存友好的代码
在CSI-VII一篇中,我们了解了存储器系统的层次结构,并知道了层次结构自上而下使用了缓存(cashing)技术,因此我们着重介绍了存储系统中高速缓存的工作原理。本篇内容,我们通过分析几个代码实例来分析告诉缓存如何影响程序,并提出如何编写高速缓存友好代码的方法。 代码实例 1. 首先让我们看第一个方法transpose,这是一个矩阵转置函数,定义如下:原创 2014-04-10 14:01:01 · 3154 阅读 · 0 评论