《程序是怎样跑起来的》读书笔记

第一章,从功能方面来看,CPU的内部由寄存器、控制器、运算器和时钟四个部分构成,各部分之间由电流信号相互连通。程序是把寄存器作为对象来描述的,了解寄存器即可。
第二章,数据是用二进制数表示的。计算机内部是由IC(Integrated Circuit 集成电路)这种电子部件构成的,IC的所有引脚,只有直流电压0V或5V两个状态。IC的一个引脚,只能表示两个状态。IC的这个特性,决定了计算机的信息数据只能用二进制来处理。
第三章,计算机进行小数运算时出错的原因。比如,0.1,用二进制无法正确表示,所以计算机计算小数时会出错。如何避免计算机计算出错?第一,回避策略,很小的偏差完全可以忽略。第二,把小数转换成整数来计算。
第四章,内存IC中有电源、地址信号、数据信号、控制信号等用于输入输出的大量引脚(IC的引脚),通过为其指定地址(address),来进行数据的读写。
第五章,内存和磁盘的关系。从都具有存储程序命令和数据这点来看,内存和磁盘的功能是相同的。不过,内存利用电流来实现存储,磁盘利用磁效应来实现存储。从存储容量来看,内存是高速高价,而磁盘则是低速廉价。
计算机中主要的存储部件是内存和磁盘。磁盘中存储的程序,必须要加载到内存后才能运行。在磁盘中保存的原始程序是无法直接运行的。这是因为,负责解析和运行程序内容的CPU,需要通过内部程序计数器来指定内存地址,然后才能读出程序。即使CPU可以直接读取并运行磁盘中保存的程序,由于磁盘读取速度慢,程序的运行速度还是会降低。总之,存储在磁盘中的程序需要读入到内存后才能运行。
第六章,压缩数据。几种压缩算法的对比,哈夫曼算法能够大幅提升压缩比率。哈夫曼算法采用哈夫曼树进行编码,从出现频率较低的数据开始,这就意味着出现频率越低的数据到达根部的枝条数就越多,而枝条数越多,编码的位数也就随之增多了。相反,出现频率越高的数据到达根部的枝条数越少,对应的编码位数就越少。所以哈夫曼算法很好的对数据进行了最优化的压缩。
多数情况下,并不要求压缩后的图像文件必须还原到与压缩前同等的质量,只要肉眼看不出什么区别,有一些模糊也可以接受,因此,我们把无法还原到压缩前状态的压缩称为非可逆压缩。与之相比,程序的EXE文件以及每个字符、数值都有具体含义的文本文件则必须要还原到和压缩前同样的内容,因此,我们把能还原到压缩前状态的压缩称为可逆压缩。
第七章,运行环境=操作系统+硬件。比如,在Macintosh上直接运行Windows用的程序,基本上是无法实现的。操作系统和硬件决定了程序的运行环境。CPU只能解释其自身固有的机器语言,不同的CPU能解释的机器语言的种类也是不同的。Windows克服了CPU以外的硬件差异,在Windows的应用软件中,键盘输入、显示器输出等并不是直接向硬件发送指令,而是通过向Windows发送指令来间接实现的。而即便是Windows,也依然无法吸收CPU类型的差异,这是因为,市面上销售的Windows应用软件,都是用特定的CPU的本地代码来完成的。
第八章,计算机只能运行本地代码。所有的源代码最终都会转换成本地代码以让计算机运行。编译器能够把C语言等高级编程语言编写的源代码转换成本地代码。每个编写源代码的编程语言都需要用其专用的编译器。
第九章,操作系统和应用的关系。通过利用操作系统提供的功能来编写应用,在操作系统这个运行环境下,应用并不是直接控制硬件,而是通过操作系统来间接控制硬件的。
第十章,汇编语言和本地代码是一一对应的。用汇编语言编写的源代码,最终也必须要转换成本地代码才能运行。负责转换工作的程序称为汇编器,转换这一处理本身称为汇编。用汇编语言编写的源代码,和本地代码是以一一对应的,因而,本地代码也可以反过来转换成汇编语言的源代码。持有该功能的逆变换程序称为反汇编程序,逆变换这一处理本身称为反汇编。
第十一章,硬件控制方法。Windows提供了通过应用来间接控制硬件的方法,利用操作系统提供的系统调用功能就可以实现对硬件的控制。在Windows中,系统调用称为API。各API就是应用调用的函数。这些函数的实体被存储在DLL文件中。
Windows控制硬件时借助的是输入输出指令。其中最有代表性的两个输入输出指令就是IN和OUT,这些指令也是汇编语言的助记符。IN指令通过指定端口号的端口输入数据,并将其存储在CPU内部的寄存器中。OUT指令则是把CPU寄存器中存储的数据,输出到指定端口号的端口。
第十二章,用程序来表示人类的思考方式、思考习惯。比如,人工智能(AI,Artificial Intelligence),人工智能是用计算机来实现人工智能的尝试。不过,计算机本身并不智能,它只是运行了表现人类思考方式的程序而已。
附录,C语言的一些基础语法。

你可能感兴趣的:(读书笔记)