《深刻理解计算机系统》 第三版html
第二遍读这本书,每周花两到三小时时间,能读多少读多少(此次看了 1 ~ 9 页)sql
第一遍对应笔记连接 http://www.javashuo.com/article/p-outpbrlm-ha.html数据库
信息就是位 + 上下文,即位和上下文环境可肯定信息的内容,位不能脱离上下文环境而表示某种确切的信息。编程
编译系统由预处理器、编译器、汇编器和连接器组成缓存
我以为能够重点记忆编译器和汇编器的做用框架
编译器将源程序转化为汇编程序spa
汇编器将汇编程序转化为二进制的可执行程序操作系统
即,汇编程序做为中间结果而存在设计
为何须要汇编程序的存在呢?书中给出的解释以下:htm
“汇编语言是很是有用的,由于它为不一样高级语言的不一样编译器提供了通用的输出语句。”
结合实际工做中的项目状况来看,其实就是封装和解耦,好比,咱们有一套系统给客户使用,若是这个系统颇为复杂,那么针对每一个客户都从新开发的话,会形成不少没必要要的浪费
因此咱们须要将其分为几个部分,通常是在数据的来源和目标之间设置一个或多个中间结果,与客户对接的那一部分代码是定制化代码,根据每一个客户不一样的状况进行定制化开发,这部分定制化开发的目标就是生成固定格式的中间结果,而后由系统中不多变化的部分读取中间结果进行处理产生最终结果,可是无论客户是谁,后面这部分代码都不用重复开发了,它只要独立地进行版本的升级、迭代便可
“了解编译器是如何工做是大有益处的”
这里能够类比于实际工做中使用框架,对于框架源码中的细节能够不了解,可是咱们得大体知道它是如何工做的,这样咱们使用它的时候,就可以更高效地利用它,让他为咱们提供更好的服务
字长的概念
硬件系统中的总线,一般被设计成传送定长的字节块,也就是字(word),字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。
咱们常说的 32 和 64 位操做系统,分别对应 4 和 8 个字长。
重要的局部性原理
程序具备访问局部区域里的数据和代码的趋势,这个思想对于缓存来讲很是重要
处理器、主存与磁盘之间巨大的速度差别
因为这种差别的存在,再结合局部性原理的理论基础,就引出了缓存的概念
一、处理器与主存之间差别的解决:
ps:“处理器从寄存器文件中读数据比从主存中读取几乎要快 100 倍”
因而有了 L一、L二、L3 等分级的高速缓存(L1 与 寄存器速度差很少,L1 比 L2 快 5 倍,L2 比 主存快 5~10 倍)
二、主存与磁盘之间差别的解决:
ps:“对于处理器而言,从磁盘驱动器上读取一个字的时间开销要比从主存中读取的开销大 1000 万倍”
因为磁盘 I/O 太过消耗时间,因此,在程序中处理大量数据时,应该尽可能避免磁盘 I/O,实在避免不了,也要想办法减小磁盘 I/O 的次数
因而出现了数据库的索引技术(尽可能少的磁盘 I/O),以及用 Redis 等对 Mysql 作一层缓存(能避免磁盘 I/O 就避免)
疑问:
一、Java 中的字节码程序跟这里的汇编程序有什么区别?
二、JVM 中有没有连接器之类的东西?
三、控制器与适配器的区别?
四、内存和磁盘 I/O 时,不须要 CPU 的参与,是由于有这个直接存储器存取(DMA)技术(书中第 8 页提到了这个技术)吗?