美文网首页系统计算机《深入理解计算机系统》
《深入理解计算机系统》| 计算机系统漫游

《深入理解计算机系统》| 计算机系统漫游

作者: 唐鱼的学习探索 | 来源:发表于2016-09-20 10:16 被阅读190次

    [阅读本书的目的]

         我们傻傻的编写程序,其实并不知道计算机是如何将源代码文件编译链接成可执行的程序,也不知道指令是如何被加载,如何一条一条的执行,到最后显示出结果。在这一过程中,写代码的人如何能编写出健壮的代码、如何很好的利用操作系统的特性优化代码、发生了问题如何学会自己去分析,而不做拿来主义google式的程序猿。这本书也许是这些终极问题的最好解答,正如作者在开篇说的一样:“如果你全力投入学习本书的概念中去,完全理解底层计算机系统以及它对程序的影响,那么你将逐渐成为凤毛麟角的权威程序猿”。

    [笔记内容]

         本章从一个程序的生命周期讲起,分别对程序的创建、编译、执行、输出、终止进行了详细的解读,从中引出了关于信息上下文、编译系统、高速缓存、操作系统等重要概念,并对上述问题进行了简单的讲解,其中作为程序猿应该要好好理解和利用的部分正是:高速缓存。

    1.信息就是如何解释:

    在我们编写程序源代码的时候,计算机系统其实为我们完成了源码与 ascii码的一一对应

    其实在计算机系统的内部,所有的信息——包括磁盘文件、程序、以及网络中的数据都是由一串位表示的,区分不同信息的关键在于对于这些内容如何解释,就比如同样的一串01010101,可以解释成:整数、浮点数甚至指令。

    2.编译系统

    预处理-编译器-汇编器-链接器

    这里简单讲解了从源程序:hello.c到可执行文件到四个阶段。每个阶段完成的工作和对应生成文件。

    1]预处理的工作比较简单:对应的就是展开#include中的.h头文件;

    2]编译器其实包含了一个汇编语言程序,讲程序语言转化成汇编语言;

    3]汇编阶段:生成可重定位的.o二进制目标文件,这一步完成汇编语言转机器指令;

    4]链接阶段:合并许多的.o文件,主要是我们在源程序中用到过的如:printf.o

    3.高速缓存

    产生原因是:程序需要大量复制信息

    举一个例子来讲述我们为什么需要高速缓存技术:“我们在月球上建立了一间厨房,可以做出许多美味的食物。由于月球离地球的距离太遥远,我们要炒一个番茄炒蛋,需要大老远大从地球上通过宇宙飞船运输过去,而厨师真正开始炒菜需要的时间并不多。如果这样来回的运输食材,厨师大部分时间上空闲的在等待食材,这对高薪聘请的厨师来说,实在是太浪费了。有没有什么办法能够加快厨师做菜的速度呢?在这个例子中厨师就相当于cpu,而食材就相当于数据,而解决方案就是:高速缓存”

    我们先来看看没用高速缓存中一个程序的运行干了什么:

    从程序的加载执行到最后显示结果:大量到复制信息

    当我们从外壳执行hello程序的时候,首先是将程序的数据和代码从磁盘复制到主存,处理器开始执行指令,并将需要显示的数据从主存复制到寄存器中,最后需要显示是将寄存器的数据复制到显示设备,最终显示出来的。这些复制操作就是开销,减缓了程序真正的工作。因此就需要高速缓存技术:暂时集结区域。

    我们来看看高速缓存存储器的位置:

    高速缓存存储器

    由于机械原理,访问速度越快的存储设备造价相对越高,拿硬盘和主存来说。硬盘的造价可能是主存的1000倍,但是访问的开销却要比主存大10000000倍。高速缓存就是为了存放可能经常访问到的数据,这就大大提高了访问的速度,减小了开销。

    主要思想是:一层上的存储器作为低一层存储器的高速缓存

    4.操作系统

    操作系统是软硬件之间的抽象

    操作系统提供了软件与硬件之间的一层抽象,既可以防止程序滥用硬件也方便了我们对于程序的编写。这里的抽象主要是指:1]对运行中程序的抽象(进程);2]对于存储器的抽象(虚拟存储器);3]对输入输出的抽象(文件)甚至包括网络;4]虚拟机等。

    这里的很多内容都是简单的提了一下,后续章节中还有详细的讲解。

    漫游至此,对于本书要讲解的内容有了大概的了解,本书的出发点是很好的,正如《圣经》约翰福音中说的一样:你们必晓得真理,真理必叫你们得以自由。

    相关文章

      网友评论

      • 破弓:我和同事都买了这书,拿来翻了下就没有然后了......博主请收下我的膝盖
        唐鱼的学习探索:@破弓 谢谢支持!

      本文标题:《深入理解计算机系统》| 计算机系统漫游

      本文链接:https://www.haomeiwen.com/subject/yktoettx.html