硬件结构

1. 冯诺依曼模型

  • CPU

通⽤寄存器

程序计数器

指令寄存器

  • 总线

地址总线

数据总线

控制总线

2. 32位和64位对比

  • 如果计算的数额不超过 32 位数字的情况下, 32 位和 64 位 CPU 之间没什么区别的,只有当计算超过 32 位数字的情况下, 64 位的优势才能体现出来
  • 32 位 CPU 最⼤只能操作 4GB 内存,
  • 32位操作系统可以运行在64位CPU上面吗?反过来?

如果32位指令在64位机器上执⾏,需要⼀套兼容机制,就可以做到兼容运⾏了

但是如果64位指令在32位机器上执⾏,就⽐较困难,因为 32 位的寄存器存不下64位的指令

32位操作系统、64位操作系统,其代表意义就是操作系统中程序的指令是多少位,⽐如64位操作系统,指令也就是64位,因此不能装在32位机器上

  • 总之,硬件的64位和32位指的是CPU的位宽,软件的64位和32位指的是指令的位宽

3. CPU缓存

  • L1缓存

L1 Cache 通常会分为「数据缓存」和「指令缓存」

CPU执行会读取L1缓存,通常是以Line的形式存储一个内存地址连续的数据。这涉及到连续数据读取通常效率高,以及伪共享的问题

  • L2缓存

L1 Cache 和 L2 Cache 都是每个 CPU 核⼼独有的

  • L3缓存

L3 Cache 是多个 CPU 核⼼共享的

  • 程序执⾏时,会首先将内存中的数据加载到共享的 L3 Cache中,再加载到每个核⼼独有的 L2 Cache,最后进⼊到最快的 L1 Cache,之后才会被 CPU 读取
  • 提高数据缓存的效率:就是采用数组存放连续读取的变量或值
  • 提高指令缓存的效率:CPU的分⽀预测器 ,对于if~else做了很好的优化,但是连续的指令对于缓存来说可以预加载更多内容,提高执行效率。因此先排序再遍历效率大于先遍历再排序
  • 提升多核CPU的缓存命中率:如果⼀个进程在不同核⼼来回切换,各个核⼼的缓存命中率就会受到影响,我们可以把线程绑定在某⼀个 CPU 核⼼上。Linux提供了API

4. 缓存一致性

  • 写直达

如果数据已经在 Cache ⾥⾯,先将数据更新到 Cache ⾥⾯,再写⼊到内存⾥⾯

如果数据没有在 Cache ⾥⾯,

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

后端开发面试高频八股+算法 文章被收录于专栏

涵盖各大厂考官最爱问知识点,22年最新整理!

全部评论

相关推荐

05-26 09:07
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务