首页 文章
  • 1 votes
     answers
     views

    为什么Linux内核地址空间中存在1:1线性映射?

    据我所知,内核内存的下半部分是1:1与物理地址(RAM)映射,我想知道它带来了什么好处,特别是在x86的上下文中 . 启用MMU / TLB时,通过CPU地址总线发送的每个地址都被视为虚拟/逻辑地址 . 即使可以通过减去偏移来完成线性到物理的转换,但是MMU仍然会遍历页表以转换线性地址 . 我看不出任何表现上的好处 . 我错过了什么?
  • 1 votes
     answers
     views

    为什么ASID仅在ARMv8-A的TLB中?如何避免对表中存在但从TLB中弹出的内存的非故意访问?

    我有一个关于ARMv8-A中TLB和ASID的快速问题 .根据我的理解(来自ARM的程序员指南和架构参考手册): 页面/块描述符(叶MMU表条目)不包含ASID标识符,只包含nG(非全局)位,表示ASID应该用于此页面 . 与寄存器值匹配的实际ASID值驻留在TLB中 . 它在页面遍历发生时设置,并且相应的条目被添加到TLB(使用当前ASID,以便后续的TLB查找将检查新的ASID是否匹配) ....
  • 0 votes
     answers
     views

    内存 - 分页和TLB

    我对以下任务有疑问 . 考虑一个IA-32系统,其中MMU支持两级页表 . 第二级包含1024个页表条目,映射到4 KB页面帧 . 每个页表条目(两个级别)的大小为4个字节 . 系统仅支持4 KB页面大小 .我们希望从虚拟内存开始连续读取8 MB,从字节0开始 . 我们一次读取一个字(4个字节)我们有一个8项数据TLB . 读取上面指定的8 MB内存需要多少内存访问? 如果TLB有4个条目而不是8...
  • 1 votes
     answers
     views

    构建基于软件的MMU和TLB

    我试图破解旧的unix内核 . 我只想用软件实现MMU和TLB . 有人可以告诉我在构建一个时使用的最佳数据结构和算法是什么 . 我看到很多人使用splay树,因为它很容易实现LRU . 有没有更好的数据结构?在软件中将虚拟转换为物理地址的最有效方法是什么 . 假设其x86架构和翻译为任何基本页面表转换 .
  • 1 votes
     answers
     views

    MMU上的逻辑和物理地址?

    我对MMU如何处理内核物理和逻辑地址有些怀疑 . 我会试着用一个例子来解释我的问题 . 让我们假设我们在ARM架构上 . 系统从MMU关闭开始,因此在CPU内部传递的所有地址都是物理的 . 在我们启用MMU之前,我们创建一个页表,我们说所有物理地址都映射到虚拟地址 physical address + 0xC0000000 . 在此之后我们打开MMU . 所有这一切都很清楚 . 但现在问题开始了...
  • 2 votes
     answers
     views

    VIPT缓存:TLB和缓存之间的连接?

    我只是想澄清这个概念,并且可以找到足够详细的答案,这些答案可以说明一切在硬件中的实际效果 . 请提供任何相关细节 . 在VIPT高速缓存的情况下,存储器请求并行发送到TLB和高速缓存 . 从TLB我们得到了经过翻译的物理地址 . 从高速缓存索引中,我们得到标签列表(例如,来自属于一组的所有高速缓存行) . 然后将翻译的TLB地址与标签列表匹配以找到候选者 . 我的问题是这次检查在哪里进行? ...
  • 2 votes
     answers
     views

    转储x86 CPU的TLB缓冲区的内容

    是否有可能从TLB(转换后备缓冲区,这是CPU中的特殊缓存)获取翻译列表(从虚拟页面到物理页面) . 我的意思是现代x86或x86_64;我想以编程方式完成它,而不是使用JTAG并将所有TLB条目移出 .
  • 1 votes
     answers
     views

    VMM是否在主机上使用虚拟内存?

    我试图了解过去使用影子页表如何执行虚拟化 . articles我已经阅读了有关从访客虚拟内存到主机物理内存的翻译的所有内容 . 我理解Shadow Page表如何消除了Guest虚拟访客物理翻译的需要 . 我的问题是,Host Virtual to Host Physical步骤发生了什么 . (HVA - > HPA) . 在引用的文章中做虚拟机管理器,而不是在主机中使用虚拟内存?他...
  • 4 votes
     answers
     views

    用于处理Linux内核中TLB未命中的调用图

    我试图了解linux内核如何处理TLB未命中 . 具体来说,我知道页表行走发生在 mm/memory.c mm/memory.c 中,但是当TLB未命中时,如何调用follow_page . 如何将follow_page的返回值( struct page )传递回硬件?有人可以说明TLB未命中处理的调用图,从硬件引发TLB Miss异常到调用 follow_page 时是什么时候? 我在内核代...
  • 1 votes
     answers
     views

    处理指令流中的MMU转换错误 - MMU会发生什么?

    此问题并非特定于任何CPU实现,但欢迎特定于CPU的答案 . 我目前正在实现一个完整的MMU启用的CPU,并出现了一个简单的问题 . 因此,想象一下由指令流(或指令缓存)引起的简单TLB未命中的情况 . 这将触发TLB未命中 . 现在,如果未找到PTE,将触发一些异常,如“页面翻译错误” . 到目前为止,完全没问题 . 现在,为了调用错误处理程序,指令流(或缓存)需要获取异常处理程序代码 . 为此...
  • 1 votes
     answers
     views

    Windriver VxWorks模拟器自修改代码

    早上好 . 我有一个自修改代码的程序 . 真的,它构建二进制文件,然后由 ELFPatch 更改并更改某些函数的序言 . 我正在使用 Windriver WorkBench 3.3 & VxWorks 6.9 Update3 . 当我在模拟器上运行我的代码时,我创建了一个标准模拟器(PENTIUM): void replace_prolog(void* func_ptr) { c...

热门问题