【计算机组成原理面试】
程序员文章站
2022-07-06 12:28:30
...
【计算机硬件组成】
1、P半导体 N半导体》PN结》二极管》场效应管》逻辑开关
2、基本逻辑电路》组成加法器》进行逻辑运算
3、高级语言》编译器》机器语言(汇编)
4、 volatile:可见性《》禁止指令重排序(只能顺序执行)《》禁止 CPU优化,一般物理上用锁实现
synchronize(同步):同一时间只能有一个线程调用该方法。
【存储器层次(存取速度)】:寄存器高主储存速差一百倍
5、超线程:一个ALU对应多个PC|register,所谓四核八线程就是一个核两个寄存器和指令寄存器
线程是cpu执行最小单位,执行指令A的时候,指令放在PS(指令寄存器),数据放在寄存器,
但当系统想暂停执行指令A的时候,会将此时的执行状态(包括寄存器中的数据)
都转存到内存,以便继续执行A时恢复线程,而超线程就是在cpu只有一个运算器的情况下,增加
寄存器和指令寄存器,让暂停执行的线程不用存到内存,提高恢复时资源调用速度。
【多级缓存】:多核共享三级缓存,都有各自的一级,二级缓存
【缓存行】
6、缓存行:cpu每次从内存读数据都是读一行(一般取64个字节byte:64byte*8 bit)而不是一个字节,这就是cache line。
也即是当cpu需要数据时的寻找顺序是: L1》L2》L3》主存 ,当从主存中找到数据时,会读取一行数据
到L3缓冲区》L2》L1》寄存器。
--行对齐:字节对齐(按最大对齐)
--伪共享:当一块数据同时被AB两个线程读取,假设A中数据被volatile绑定,由于volatile的可见性,所以B必须通知B,
这就需要用到一个缓存一致性协议(缓存锁),来让缓存区保持一致性。而对于缓存一致性协议来说,A中的
数据被标记为修改的状态,则B中该数据会被标记为无效(invalid),需要重新从内存中读取新的已经被修改的数据。
【MESI CACHE: 其中一种缓存一致性协议】
7、DCL单例中需要用到volatile吗?
一般DCL(Double Cheack Lock)单例是利用两个synchronize 设置双重锁,以保证多线程只创建唯一单例
if(fun)[第一次检查] --多线程等待--synchronize(每次进入一个线程) if(fun)[第二次检查] --功能主体实现--
—但是必须添加volatile:
因为对于类对象的创建过程,它的反汇编后的步骤是分配内存》初始化》创建关联,在高并发情况下不加volatile时
创建关联的指令可能会在初始化之前执行,导致对象绑定的是默认值,然后因为对象此时已经不为空,所以初始化指令
不会进行,导致对象参数出错,而volatile禁止内存重排序,所以是必须的。
【volatile禁止指令重排序】
8、合并写技术:
-当CPU需要进行写操作时,会先写到WC buffer(介于L1缓冲区和缓冲寄存器BUFF之间,只有4byte),
一下写四个字节, 然后再转存到L1>L2>L3>主存。
上一篇: 跟女朋友去买TT
下一篇: ROS(kinetic)机器人仿真
推荐阅读
-
编程必备基础知识|计算机组成原理篇(02):计算机的分类
-
编程必备基础知识|计算机组成原理篇(01):计算机的发展历史
-
hashmap源码扩容(hashmap底层原理面试)
-
hashmap源码扩容(hashmap底层原理面试)
-
Mybaits 源码解析 (五)----- 面试源码系列:Mapper接口底层原理(为什么Mapper不用写实现类就能访问到数据库?)
-
C语言入门1-计算机工作原理
-
编程必备基础知识|计算机组成原理篇(08):存储器
-
重学计算机组成原理(七)- 程序无法同时在Linux和Windows下运行?
-
定点数和浮点数加减乘除运算详解【计算机组成原理】---真的建议收藏啊!!!
-
面试官再问你 HashMap 底层原理,就把这篇文章甩给他看