问题标签 [tlb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory-management - AMD 的页表扩展中的 ASID 何时不再有效?
IA-32 定义了 CPU 可能使整个 TLB 无效的各种情况。从 AMD 在 Opteron Rev-F 处理器(巴塞罗那?)中发布的 ASID 扩展开始,有些情况下只有某个 ASID 的 TLB 条目无效。
问题是,ASID 本身是否会停止有效?Hypervisor 在使用它之前是否必须检查 ASID 是否有效?
multithreading - 操作系统尝试最小化 TLB 刷新的难度有多大?
我想知道操作系统中是否实现了一种通用机制来最小化 TLB 刷新,例如通过将同一进程中的线程分组到“待调度”列表中。
我认为这是决定在线程上使用进程时的一个重要因素。如果操作系统不关心下一个线程是否在同一个进程空间中,那么线程“最小化 TLB 刷新”的所谓优势可能被高估了。是这样吗?
考虑一个具有数百个线程和数十个进程的系统。如果这些没有以串联方式在同一进程中调度线程的方式进行优化,我们对线程性能的期望可能不会那么大。
如果问题不是那么清楚,我会举例说明。
caching - Cache和Translation LookAside Buffer的区别[TLB]
Cache 和 Translation LookAside Buffer [TLB] 有什么区别?
copy - 可以通过修改页表来移动内存页吗?
是否有可能(在任何合理的操作系统上,最好是 Linux)仅通过修改页表而不实际移动任何数据来交换两个内存页的内容?
动机是密集矩阵转置。如果数据被页面大小阻塞,则可以在页面内转置数据(适合缓存),然后交换页面以将块移动到最终位置。一个大矩阵会移动很多页,所以希望刷新 TLB 不会造成麻烦。
operating-system - 操作系统 - TLB
我正在努力解决这个问题(好吧,tbh 在考试前一晚死记硬背:) 但我无法弄清楚(也无法在网上找到一个好的高级概述):
'页表条目可以映射到多个 TLB 条目。例如,如果每个页表条目都映射到两个 TLB 条目,这被称为 2-way set associative TLB'
我的问题是,为什么我们要不止一次地映射它?我们肯定希望在 TLB 中表示最大数量的可能条目,重复会浪费空间吗?我错过了什么?
非常感谢
performance - 在什么情况下大页面可以产生加速?
现代 x86 CPU 能够支持比传统 4K 更大的页面大小(即 2MB 或 4MB),并且有操作系统工具(Linux、Windows)可以访问此功能。
上面的微软链接指出大页面“提高了翻译缓冲区的效率,这可以提高频繁访问的内存的性能”。这对于预测大页面是否会改善任何给定情况并不是很有帮助。我对移动一些程序逻辑(或整个应用程序)以使用大页面导致一些性能改进的具体的、最好是量化的示例感兴趣。有人有成功案例吗?
我自己知道一个特殊情况:使用大页面可以显着减少分叉大型进程所需的时间(大概是因为需要复制的 TLB 记录的数量减少了大约 1000 倍)。我感兴趣的是大页面是否也可以在不那么奇特的场景中带来好处。
operating-system - MMU 和 TLB 未命中
假设如下。我有一个带有虚拟内存和一个杠杆分页的系统,我有一个 MMU,TLB 是由软件控制的。
好的..所以想象我是一个进程,我想在虚拟地址 vaddr 的 RAM 中读取一个单词。
因此,CPU 给出了 MMU vaddr,MMU 在 TLB 中检查是否存在(假设)5 个最高有效位 vaddr 的条目。如果它在那里......一切都很好,它会计算物理地址并且一切正常。
现在..假设它不在 TLB 中。在这种情况下,MMU 会产生中断(页面错误)。好的..现在我在页面错误的处理程序中。
在 PBR(页基址寄存器)中,我有页表的起始地址。我的问题在这里。这个地址是物理地址吗?我想是的,因为如果它是虚拟的,则意味着两件事:1)必须以某种方式保留在进程的虚拟地址空间中(从未听说过类似的东西)2)如果该地址不在 TLB 中,会导致再次页面错误,我将有一个无限循环。
关于表中地址的相同问题。如果我有两级分页。第一级表(指向第二级表)中的条目中的地址是虚拟的还是物理的?
谢谢。
memory-management - 构建基于软件的 MMU 和 TLB
我正在尝试破解旧的 unix 内核。我只想使用软件实现 MMU 和 TLB。有人可以告诉我在构建一个时使用的最佳数据结构和算法是什么。我看到很多人使用伸展树,因为它很容易实现 LRU。有没有更好的数据结构?在软件中将虚拟地址转换为物理地址的最有效方法是什么。假设它的 x86 架构和转换是任何基本的页表转换。
memory-management - 逻辑地址和物理地址的区别?
我正在阅读操作系统概念,我在第 8 章!但是,我可以使用一些澄清或保证我的理解是正确的。
逻辑地址:根据本书,逻辑地址是由 CPU 生成的。这到底是什么意思?(在执行生成的地址系统中..)我假设为程序编译代码时,程序不知道代码将在内存中加载到哪里。编译器所做的只是设置程序布局的一般草图以及图像的布局方式,但不会为其分配任何实际地址。当程序执行时,CPU 获取编译器制作的布局图像,并将一些地址(逻辑地址)分配给从代码生成的地址。
物理地址:直到 CPU 生成一组逻辑地址(由基地址和偏移量组成)之后才会生成物理地址。逻辑地址通过 MMU 或其他设备,并且沿线路的某处将逻辑地址映射到物理 RAM 地址。
那么实际的区别是什么?我可以看到一个好处。使用逻辑地址给应用程序更多的自由。如果物理地址是硬编码的,那么程序的成功将在很大程度上取决于物理计算机、可用的 RAM 地址等。
使用转换为物理地址的逻辑地址不是强加了两个步骤而不是一对一,因此不是更多的开销吗?
那么逻辑地址在生成后驻留在哪里?当 CPU 为进程提供服务时,它们可能存在于 CPU 上的寄存器中,但在此之前和之后,它们会去哪里?我知道这取决于实现。我假设它们可能存储在 CPU 上的某些特殊寄存器空间或缓冲区中,例如 TLB,对吗?如果不是,那么该表可能存在于实际的 RAM 本身中,并且 CPU 仅保存指向 RAM 中表的基地址的指针/地址,对吗?
将地址保存在 RAM 中似乎与逻辑内存地址的目的相反。我只能假设我的理解是不正确的。
caching - 什么是 TLB 击落?
什么是 SMP 中的 TLB 击落?
我无法找到有关此概念的太多信息。任何好的例子将不胜感激。