硬件基础知识
CPU的制作过程
Intel cpu的制作过程
https://haokan.baidu.com/v?vid=11928468945249380709&pd=bjh&fr=bjhauthor&type=video
CPU是如何制作的(文字描述)
https😕/www.sohu.com/a/255397866_468626
CPU的原理
计算机需要解决的最根本问题:如何代表数字
晶体管是如何工作的:
https://haokan.baidu.com/v?vid=16026741635006191272&pd=bjh&fr=bjhauthor&type=video
晶体管的工作原理:
https://www.bilibili.com/video/av47388949?p=2
汇编语言(机器语言)的执行过程
汇编语言的本质:机器语言的助记符 其实它就是机器语言
计算机通电 -> CPU读取内存中程序(电信号输入)
->时钟发生器不断震荡通断电 ->推动CPU内部一步一步执行
(执行多少步取决于指令需要的时钟周期)
->计算完成->写回(电信号)->写给显卡输出(sout,或者图形)
计算机的组成:
核心:CPU和内存
CPU的组成
PC:Program Counter 程序计数器(记录当前指令的地址)
Registers(寄存器): 暂时存储CPU计算需要用到的数据
ALU:Arithmetic & Logic Unit运算单元
CU -> Control Unit 控制单元
MMU -> Memory Management Unit 内存管理单元
超线程:一个ALU对应多个PC| Registers所谓的四核八线程
因为寄存器速度很,主存和磁盘的速度慢,寄存器一次计算需要等很久,因此在中间加入了缓存的概念。
按块读取:读取相邻的一系列数字。
不管是从硬盘往内存读还是内存往缓存读,都是应用的按块读取。
程序局部性原理,可以提高效率
充分发挥总线CPU针脚等一次性读取更多数据的能力
数据会从内存将一个缓存行一层层从L3往L1读。
如果两个CPU需要保持一致,需要准从MESI CACHE 一致性协议
总线锁:从内存和缓存L1之间将线程锁住,直至多个CPU之间的数据修改完毕。因为其他所有线程停止工作效率低,所以一般能用一致性协议使用一致性协议。
缓存行:
缓存行越大,局部性空间效率越高,但读取时间慢
缓存行越小,局部性空间效率越低,但读取时间快
取一个折中值,目前多用:64字节
缓存行对齐:
对于有些特别敏感的数字,会存在线程高竞争的访问,为了保证不发生伪共享,可以使用缓存行对齐的编程方式。
JDK7中,很多采用long padding提高效率
JDK8,加入了@Contended注解(实验)需要加上:JVM -XX:-RestrictContended。(可以让变量放在不同的缓存行)
以让变量放在不同的缓存行)
[外链图片转存中…(img-TM7gPN4d-1611513152257)]