《程序是怎样跑起来的》总结

作者矢泽久雄,YAZAWA股份有限公司董事长兼总经理。本书以通俗易懂的方式来解析程序的运行机制,可以了解CPU的寄存器和内存的运行方式。无论任何事情,了解其本质非常重要,只有了解本质才能利用效率。这样一来,即时有了新技术出现也能容易的理解并掌握。

一、对程序员来说CPU是什么

CPU(Central Processing Unit,中央处理器)是计算机的大脑,它的内部由数百万至数亿个晶体管构成。CPU有四个构成部分:控制器、寄存器、运算器、时钟。程序员只需了解寄存器即可,因为程序是把寄存器作为对象来描述的,CPU是寄存器的集合体。

程序运行流程示例

二、数据是用二进制表示的

要想对程序的运行机制形成亿大致的印象,就要了解信息(数据)在计算机内部是以怎样的形式来表现的,又是以怎样的方法进行运算的。在C和Java等高级语言编写的程序中,数值、字符串和图像等信息在计算机内部都是以二进制数值的形式来表现的。通过电流信号,我们可以给CPU发送指令或者传递数字信息等,比如让电脑计算1+2的时候,就要把进行加法计算的命令和1和2这两个数字通过电流的方式传递给CPU。CPU的引脚有电流通过的时候数值为1,没有电流通过时数值为0,所以只能用二进制数来表示计算机的信息。

用单精度浮点数表示的数据

三、计算机进行小数运算时出错的原因

当遇到无限循环小数时,计算机无法正确表示数值,最后都变成了近似值。计算机这个功能有限的机器设备,是无法处理无限循环的小数的。因此,在遇到循环小数时,计算机就会根据变量数据类型所对应的长度将数值从中间截断或者四舍五入。我们知道,将0.333……这样的循环小数从中间阶段会变成0.3333,则是它的3倍是无法得出1的,计算机运算出错也是同样的道理。

四、数量使用有棱有角的内存

计算机是进行数据处理的设备,而程序表示的就是处理顺序和数据结构。由于处理对象数据是存储在内存和磁盘上的,因此程序必须能自由地使用内存和磁盘。

内存IC的引脚配置示例

上图是内存IC的引脚配置示例,虽然这是一个虚拟的内存IC,但它的引脚和实际的内存IC是一样的。VCC和GND是电源,A0~A9是地址信号的引脚,D0~D7是数据信号的引脚,RD和WR是控制信号的引脚。将电源连接到VCC和GND后,就可以传递比如0或1这样的信号。大多数情况下,+5V的直流电压表示1,0V表示0。数据信号引脚有D0~D7共八个,表示一次可以输入输出8位(=1字节)的数据。此外,地址信号引脚有A0~A9共十个,表示可以指定0000000000~1111111111共1024个地址。而地址用来表示数据的存储场所,因此我们可以得出这个内存IC中可以存储1024个1字节的数据。因为1024=1K,所以该内存的IC的容量就是1KB。

五、内存和磁盘的亲密关系

从都具有存储程序命令和数据这点看,内存和磁盘的功能是相同的。在计算机的5大部件中,内存和磁盘也都是被归类为存储部件。不过利用电流来实现存储的内存,同利用磁效应来实现存储的磁盘,还是有差异的。而从存储容量来看,内存是高速高价,而磁盘是低俗廉价。

六、亲自尝试压缩数据

RLE(Run Length Encoding,行程长度编码)算法,是把内容用“数据 x 重复次数”的形式来表示的压缩方法。例如:AAAAAABBCDDEEEEEF = A6B2C1D2E5F1。哈夫曼算法是指:为各压缩对象文件分别构造最佳的编码体系,并以该编码体系为基础来进行压缩。压缩算法的种类大概有一二十种,之所以会存在如此多得压缩算法,是因为压缩比率、压缩需要的处理时间(压缩的复杂程度)以及各种文件的需求等是不一样的,因此,至今学界都不能提出一个万能的压缩算法。

哈弗曼树的编码顺序

七、程序是在何种环境中运行的

由于同一个程序能被大量用户使用,所以说程序具有很大的价值。如果将程序拿来出售的话,只要销量大,肯定就能收到非常可观的利润。即便是自由软件,若有大量的用户使用的话,那也是一件让人高兴的事。大家也都希望自己编写的程序被尽可能多得用户喜欢并使用吧。但是,如果环境不同,程序是无法运行的。例如,在Macintosh上直接运行Windows用的程序,基本上无法实现的,这是因为运行环境不同造成的。运行环境 = 操作系统 + 硬件。

八、从源文件到可执行文件

把EXE文件的内容Dump一下,Dump是指把文件内容,每个字节用2位十六进制数来表示的方式。本地代码的内容就是各种数值的罗列,这些数值就是本地代码的真面目。每个数值都表示某一个命令或数据,而计算机就是把所有的信息作为数值的集合来处理的。能够把C语言等高级程序语言编写的源代码转换成本地代码的程序称为编译器。编译器转化生成的本地文件,并不能直接运行,还要链接处理。

九、操作系统和应用的关系

利用计算机运行程序大部分都是为了提高处理效率。例如,Microsoft Word这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft Excel 等表格计算软件,是用来提高账本处理效率的程序。类似于文字处理软件这样,为了提高特定处理效率的程序总称为“应用”。程序员的工作就是编写各种各样的应用来提高业务效率。而应用的运行环境,也就是操作系统,则直接从软件商店等处购买就可以了。不过,一定不能忽略操作系统,否则就无法编写应用。这是因为,程序员是通过利用操作系统提供的功能来编写应用的。

十、通过汇编语言了解程序的实际构成

在加法运算的本地代码中加上add(addition的缩写)、在比较运算的本地代码中加上cmp(compare的缩写)等,这些缩写称为助记符,使用助记符的编程语言称为汇编语言,汇编语言和本地代码是一一对应的关系。通过编译器输出汇编语言的源代码,不会转化成本地代码的伪指令,汇编语言的语法是“操作码+操作数”

十一、硬件控制方法

“计算机如果没有软件,就仅仅是个箱子”,也就是说,即使计算机这种看起来很了不起的设备(硬件),离开了软件依然什么也做不了,因为软件的存在是硬件正常运行的必要条件。虽然说计算机领域的新技术在不断涌现,但计算机能处理的事情始终只是对数据进行运算,并把结果输出,这一点是不会发生任何变化的。不管程序内容是什么,最终都是数据的输入输出和运算。

十二、让计算机“思考”

程序就如同是由计算机执行的各种指令罗列起来的文章,计算机内部的CPU,通过对该文章的内容进行解析和运行,来控制连接到计算机的各种外围设备。具体来说,控制就是指CPU和各种设置之间配合进行数据的输入输出处理。计算机并不智能,它只是运行了表现人类思考方式的程序而已。也就是说,开发程序的程序员,赋予了计算机这些智能,程序只是人类的想法在计算机上进行了重现。

读后感:对程序的运行机制有了大致的了解,明白了如何用二进制表示小数、部分压缩算法、程序运行流程。但是对汇编语言还是很晦涩难懂,内存和寄存器的相关知识还不够全面,有需要的话还会深入学习。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容