组成原理 - 必学原理
组成原理 - 必学原理
先来看个例子, 感性认识为什么要学组成原理
int sumarrayrows(int a[M][N])
{
int i, j, sum =0;
for(i = 0; i < M; i++)
for(j = 0; j < N; j++)
sum += a[i][j];
return sum;
}
int sumarraycols(int a[M][N])
{
int i, j, sum =0;
for(j = 0; j < N; j++)
for(i = 0; i < M; j++)
sum += a[i][j];
return sum;
}
直接给结论, 第二个函数将比第一个函数慢非常多.
因为第二个函数完美避开局部性原理, 而这正是组成原理的内容之一.
组成原理, 是除了计算机导论这门课之后, 讲述硬件组成,数据存储等原理的一门课程.
这门课程也是很重要的基础
.学好了,以后的时间就可以吃它的利息了.
计算机组成原理主要有四大块内容。
第一块,计算机的基本组成,主要包含:
-
硬件设备组成:CPU、主板、内存、硬盘、显示器等;
-
冯诺依曼体系结构:运算器、控制器、存储器、输入设备、输出设备;
-
计算机性能:CPU 主频、响应时间、吞吐率
第二块,计算机的指令和运算,主要包含:
-
计算机指令:机器码(编译 -> 汇编 -> 机器码、指令格式和跳转、函数调用和程序栈)、程序的编译、链接、装载和执行;
-
计算机运算:二进制编码(整数、反码、补码、浮点数、定点数)、数字电路(门电路、加法器、乘法器);
第三块,处理器设计,主要包含:
- CPU:建立数据通路、面向流水线和设计、控制冒险和数据冒险、分支预测、异常和中断、并行计算
第四块,存储器和 I/O 系统,主要包含:
-
存储器的层次结构:SRAM 存储技术、寄存器、CPU 高速缓存、内存、固态硬盘、机械硬盘;
-
存储器和 I/O 系统:虚拟内存、CPU和内存的通信、DMA技术、访问输入输出设备;
-
CPU 高速缓存:局部性原理、缓存一致性协议、伪共享问题、write through 和 write back;
-
虚拟存储:缺页异常、TLB 加速地址转化、MMU 虚拟地址和物理地址转换;
其中第一、第二、第四是对开发者而言是比较重要的内容,而第三部分处理器的设计如果没时间可以先不用去了解。
在组成之上,其实还有一层, 叫计算机体系(系统)结构.搞清楚他们的区别.
这里内容太多, 不能写到博客里, 还是建议:
- 仔细阅读
大话计算机
.国内不多的写的很详细的好书. - B站,mooc等公开课去找 计算机组成原理 的
好课
(下面推荐几门). - 书:
艾伦克莱门茨的计算机组成原理
+存储与外设
,英文版是一本,中文分开了.
编程卓越之道
第一篇深入理解计算机
.
Andrew Tanenbaum的计算机组成 结构化方法
;
David Patterson & John Hennessy的计算机组成与设计 硬件软件接口
,
与计算机体系结构 量化研究方法
.
等等,很多书都很好. 可以在网上搜. - 之前导论文章里推荐的 【精校中英字幕】2015 CMU 15-213 CSAPP 深入理解计算机系统,【高清-中字-公开课】依据基本原理构建现代计算机:从与非门到俄罗斯方块
这两个公开课.
麻省理工
的 MIT计算机组成原理 公开课.
伯克利
的 CS61C 计算机组成原理 公开课
计算机组成原理(哈工大刘宏伟) https://www.bilibili.com/video/BV1t4411e7LH?p=1
王道的计算机组成原理考研视频.
北大的计算机组成也很不错,数电没学好又不想补的,可以看北大的视频.
北大的计组是把知识点分切开讲的,每一集也就10来分钟.
这么多内容, 已经够了.
知识点就那么多, 基本已经完全覆盖了.
对于后面能不能写出好程序, 至关重要
的一门课程.
如果上面都不想看, 可以看我总结的详细的知识内容:
https://github.com/TonyK922/Computer-Organization