大家好,我是小林。
很早之前分享过我学计算机 络和操作系统的心得,详见:怎么学操作系统和计算机 络呀/p>
期间一直有不少读者问计算机组成原理怎么学,大部分人觉得这个学科跟硬件有关系就非常怕。
计算组成原理确实是分为两个方向,一个是硬件电路的,一个是软件程序的。
我自己本身是干开发的,所以我这次分享的机组资料是跟软化程序有关的,也就是不会涉及到硬件电路的东西,即使你不会数字电路、微机原理也是可以直接学习的。
好了,不多废话,直接开车了!
计组学习心得
- 学计组有什么用/li>
- 计组怎么学/li>
- 计组 – 入门学习
-
- 计算机科学速成课
- 《计算机是怎么样跑起来》和《程序是怎么跑起来的》
- 《编码》
- 计组 – 深入学习
-
- 《计算机组成与设计:硬件 / 软件接口》
- 计算机组成原理视频课程
- 《深入理解计算系统》
- 絮叨絮叨
学计组有什么用/h2>
我猜应该很多人都有这样的困惑,就是觉得学计组有什么用觉实际工作过程中用不到,感觉理论学了个寂寞。
这个困惑很正常,因为学计组这东西主要是为了搞懂计算机是如何工作的,计算机怎么工作的都是被前辈们实现好的,我们一般也不会参与到造计算机这种工作中。
但是学了计组后,你能看到的视角是和别人不一样的,而这个不一样的视角就能在一些关键的问题上得到突破。
我这里举个简单例子,你觉得下面这两个 循环哪个效率会更高呢什么会更高呢/p>
CPU Cache 的数据是从内存中读取过来的,它是以一小块一小块读取数据的,而不是按照单个数组元素来
读取数据的,在 CPU Cache 中的,这样一小块一小块的数据,称为 Cache Line(缓存块)。
如果 L1 Cache Line 大小是 64 字节,也就意味着 L1 Cache 一次载入数据的大小是 64 字节。
比如,有一个 int array[100] 的数组,当载入 array[0] 时,由于这个数组元素的大小在内存只占 4 字节,不足 64 字节,CPU 就会顺序加载数组元素到 array[15] ,意味着 array[0]~array[15] 数组元素都会 被缓存在 CPU Cache 中了,因此当下次访问这些数组元素时,会直接从 CPU Cache 读取,而不用再从内 存中读取,大大提高了 CPU 读取数据的性能。
CPU Cache 的概念简单介绍完了,再来说说刚才的 for 循环问题。
我直接说答案:形式一 执行时间比形式二 快好几倍。
之所以有这么大的差距,是因为二维数组 所占用的内存是连续的,比如长度 的指是 的话,那么内存中的数组元素的布局顺序是这样的:
你可以看到,访问的方式跳跃式的,而不是顺序的,那么如果 N 的数值很大,那么操作 时,是没办法把 也读入到 CPU Cache 中的,既然 没有读取到 CPU Cache,那么就需要从内存读取该数据元素了。很明显,这种不连续性、跳跃式访问数据元素的方式,可能不能充分利用到了 CPU Cache 的特性,从而代码的性能不高。
那访问 元素时,CPU 具体会一次从内存中加载多少元素到 CPU Cache 呢个问题,在前面我们也提到过,这跟 CPU Cache Line 有关,它表示 CPU Cache 一次性能加载数据的大小,可以在 Linux 里通过 配置查看 它的大小,通常是 64 个字节。
对于入门计算机组成,可以先看前 10 个视频,看完这 10 个视频也就不到 2 个小时,看完前 10 个视频对计算机的工作方式就有一个基本的了解了。
看完前 10 个视频就可以开始看书了。
我也整理一套系统化学习cs的书籍,数据结构,计算机 络,数据库,计算机组成原理,操作系统这些统统都有。
这次分享给大家,点击获取方式:计算机必读书籍(含下载方式)包含据结构与算法、计算机 络、数据库、计算机组成原理、操作系统、Java、C/C++
《计算机是怎么样跑起来》和《程序是怎么跑起来的》
讲真,不太建议小白一上来就看那些厚的不行的计算机组成原理的黑皮书,这些书是经典的没错,也正是由于它们是经典的,所以这些书的知识体系很全、很多、很厚。
但是这样很容易让初学者迷失在里头,可能刚兴致勃勃看几十页就放弃了,于是这些厚的不行的书就成为了你们的垫书神器,知识没学多少,颈椎病倒是治好了。
这两本不用 1 个月就能看完,因为在看这两本书的时候,你会看的很顺畅,相比学习的心态,你更多的是会带着「好奇心」的心态去读。
其中**《程序是怎么跑起来的》是一个「微缩版本」的计算机组成原理**,你可以只选择看这一本,从这本书的名字也可以知道,它是从计算机是怎么运行程序的视角来讲的,然后把涉及到的计算机硬件和它们之间是如何协作的一点一点的给大家带出来,让大家能瞬间明白这些计算机硬件的作用。
计组 – 深入学习
《计算机组成与设计:硬件 / 软件接口》
想要深入学习计算机组成原理的同学,我首先推荐《计算机组成与设计:硬件 / 软件接口》这本书,
这本书确实很厚,差不多 500 多页,但是**书从来没有人规定一定要从头读到尾,一页页的读的。**重要的不是看完一本书,而是从书上学到多少,解决了什么问题。
大家可以挑这几个章节看,跟开发者关系比较大的章节:
- 第一章:计算机抽象以及相关技术,这个章节主要是介绍了计算机组成的思想,可以简单快读看,不用重点读;
- 第二章:指令,大体上讲的是计算机是如果识别和运行指令的,以及代码到指令的过程;
- 第三章:计算机的算数运算,介绍的是计算机是如何进行加减乘除法的,以及浮点数的运算;
- 第五章:层次化存储,讲的是计算机的存储层次结构,而且重点讲的是 CPU Cahe。
计算机组成原理视频课程
看书觉得很累,也可以结合视频一起看,这里推荐哈工大的《计算机组成原理》视频,在 b 站就可以直接看,大家自己去搜索就可以。
这个视频虽然是针对考研的,但是也是可以作为学习计组的资料,讲的内容不会太深,适合你快速建立计算机组成原理体系,和梳理计组知识的脉络。
《深入理解计算系统》
另外,在推荐一本《深入理解计算系统》这本书,人称 CSAPP。
如果你是在校生,有了一定 C 语言基础后,非常建议你就开始看这本书,有精力也可以做做 CSAPP 的 lab。越早开始看,你的收益就越大,因为当计算机体系搭建起来后,你后面再深入每一个课程的时候,你会发现学起来会比较轻松些。
对于已经工作了,但是计算机系统没有一个清晰认识的读者,也可以从这本书开始一点一点学起来,这本书是很厚,但是并不一定要把书完完看完,每个章节的知识点还是比较独立的,有关硬件的章节我们可以选择跳过。
絮叨絮叨
小林在 CSDN 写了很多图解 络和操作系统的系列文章,很高兴收获到很朋友的认可和支持,正好最近图解 络和操作系统的文章连载的有 20+ 篇了,也算有个体系了。

站内容共 1000 张图 + 50 万字, 站宗旨让天下没有难懂的八股文!(口嗨一下,大家不要当真), 站地址:https://xiaolincoding.com。
希望图解 站成为你们上班摸鱼必备 站哈哈!
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91286 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!