javascript 可以获取计算机上任意数据吗?
对于这个问题, 答案: 通过 spectre 和 meltdown 攻击或许可以
想要探寻这个问题的答案, 需要先了解一下计算机的基础知识.
然后, 再给大家介绍一下 spectre
和 meltdown
计算机的组成
计算机组成主要分为五个部分:控制器,运算器,存储器,输入设备,输出设备。
对应我们现实中的计算机则为
- cpu: 控制器 + 运算器
- 主板: I/O 总线,输入输出系统
- 存储器: 内存+硬盘
- I/O 设备:键盘,鼠标,打印机等等
程序是如何工作的
计算机中的内存里放着各种各样的应用程序.
每个程序运行时,CPU 为了防止进程间互相保持独立,它们都拥有属于自己的某块内存区域,假设程序 A 存在一条想要直接越界访问程序 B 内存的指令,这在 CPU 是属于非法的,它不会执行这条指令,而会选择抛出异常并终止程序,然后将其相应的内存数据清零。
cpu 的执行速度非常快, 需要高频地向内存读取数据;
内存的速度是跟不上 cpu 的. 所以,为了提高 cpu 的执行效率, 在内存与 cpu 之间创建了缓存(cache).
cache 是一种又小又快的存储器。它存在的意义是弥补 Memory 与 CPU 之间的速度差距。
缓存的工作原理大致是: 从内存中复制一份数据, 当下次 cpu 需要的时候, 就直接返回给 cpu.
而不需要向内存获取, 从而减少的等待时间;
如图所示:
预测执行 speculative execution
CPU 的执行速度很快, 为了进一步提升 CPU 的利用率;
现代的 CPU 拥有了预测执行的能力, 可以提前推测接下来可能需要计算的内容, 进行执行, 然后放到缓存中;
例如: 我们在看视频的时候, cpu 可以一次多处理一些画面.