作为软件工程师,我们自然而然地会假设模块A和模块B可以魔术般地连接,数据则可随意地从一端流向另一端。内存的实际工作机制其实非常复杂,但抽象出来呈现给程序员的只是一组大平面的字节排列。硬件并不象这样工作。各个部件之间并不能魔法般地自动连接。模块A和模块B并非抽象概念,而是具体的物理设备,实际上可以看作是非常小的机器,在硅片上占有实际的物理空间。芯片都有平面图,是真正的2D地图。如果你想连接A和B,就需要一条实际的导线来连接。
导线也占空间,而且需要消耗电力(越远消耗越多)。用一大捆线连接A和B意味着物理上这一块区域会阻碍其他区域的连接。(当然,芯片可以使用多层连接,如果你有兴趣,可以搜索‘routing
congestion’)。 在芯片里移动数据实际上是一个物流问题,并且超级复杂。所以尽管办公室的故事只是半开玩笑的类比,‘谁需要和谁谈’、‘这个系统的几何构造如何——是有意义的布局吗?’这些问题其实对系统设计和硬件相关并有巨大的影响。
利用空间的隐喻来概念化实际情况是十分有效的。
Intel CPU漏洞技术解读:都是缓存惹的祸!原因一切还是要从CPU指令执行的框架——流水线说起。Intel当然不至于明知你要用一个用户态的进程读取Kernel内存还会给你许可。但现代CPU流水线的设计,尤其是和性能优化相关的流水线的特性,让这一切充满了变数。给所有还没有看过云杉网络连载的系列文章《__86高性能编程笺注系列》的读者一点背景知识的介绍:__86
CPU为了优化性能,在处理器架构方面做了很多努力。诸如“多级缓存”这一类的特性,是大家都比较熟悉的概念。还有一些特性,比如分支预测和乱序执行,也都是一些可以从并行性等方面有效提升程序性能的特性,并且它们也都是组成流水线的几个关键环节。
电脑常见英文词汇
routine 常式 例程
runtime 执行期 运行期、运行时
common language runtime (CLR) 译为「通用语言执行层」
rvalue 右值 右值
save 储存 存储
schedule 排程 调度
scheduler 排程器 调度程序
scheme 结构纲目、组织纲目
scroll bar 卷轴 滚动条
scope 生存空间、生存范围、范畴、作用域 生存空间
scope operator 生存空间(范围决议)运算子 :: 生存空间操作符
scope resolution operator
生存空间决议运算子 生存空间解析操作符