loongarch架构介绍(四)TLB异常处理

loongarch架构介绍(四)TLB异常处理,​想了解更多关于开源的内容,请访问:​,​​51CTO 开源基础软件社区​​,​​https://ost.51cto.com​​,上一篇文章中介绍了loongarch架构中的地址翻译模式及其配置方法,涉及到虚拟内存系统中页表相关的管理。本文中则介绍TLB相关的异常处理,并结合代码进行分析。因为loongarch架构中采用的是一种软件管理TLB的方法,所以其处理流程和软件所需要进行的管理操作与很多常见的架构不同。,首先介绍TLB表项和页表项的格式,作基本的了解。,下图为loongarch中的页表项格式:,# loongarch架构介绍# [四] TLB异常处理-开源基础软件社区,下面为各位的说明:,其中,大页的页表项和基本页的页表项在格式上的主要区别是H位和G位。并且基本页的页表项在末级页表,而大页的页表项实际上是替代了原来的页目录项。,另外,对于基本页的页表项,loongarch中每个页表项存放了相邻的一对奇偶相邻页表信息。如下图:,# loongarch架构介绍# [四] TLB异常处理-开源基础软件社区,下图为loongarch中的TLB表项格式:,# loongarch架构介绍# [四] TLB异常处理-开源基础软件社区,其中,每个TLB表项分为两个部分:第一行为比较部分,下面两行为物理转换部分。,TLB表项的比较部分包括:,因为TLB和页表双页存储的特性,每个TLB表项中有两个物理转换信息。物理转换信息中PPN即物理页号,其他和上文中页表中的对应。,类似于MIPS架构,loongarch中使用的是一种软件管理TLB的方式。在大多数其他的架构中,采用的都是通过硬件管理TLB的方式。软件管理TLB带来了更多的灵活性,但性能相对较差。,硬件管理TLB中,在忽略page fault的细节和cache的情况下,虚拟地址转换到物理地址的过程如下图:,# loongarch架构介绍# [四] TLB异常处理-开源基础软件社区,其中,TLB miss后查找页表的这个过程是由硬件自动完成的,软件只需处理后面产生的page fault。整个过程中最多产生一次page fault。,下图则为软件管理TLB方案中虚拟地址转换到物理地址的过程:,# loongarch架构介绍# [四] TLB异常处理-开源基础软件社区,具体解释如下:,可以看到,TLB miss后查找页表的这个过程需要软件进行处理,并且整个过程中最多能产生三次异常。,另外,硬件上会保证在TLB重填异常中不能再次产生TLB重填异常。,loongarch中TLB相关的异常有:,其中,TLB重填异常时需遍历页表进行重填工作。TLB重填异常于一般的异常不同,其拥有独立的异常入口、独立的用于维护现场的控制状态寄存器和一套独立的TLB访问接口控制寄存器,并且因此TLB重填异常可以在其他异常处理过程中被触发。而当进入TLB重填异常时,硬件会自动设置CSR.CRMD.DA=1和CSR.CRMD.PG=0,即进入直接地址翻译模式,从而避免在TLB重填异常中不能再次产生TLB重填异常。,而如load操作页无效异常等异常,则需要完成类似于page fault的工作。,在介绍TLB相关异常的处理之前,先对loongarch中相关的指令进行介绍。,具体案例可见后文相关代码分析。,具体案例可见后文相关代码分析。,下面结合linux源码对TLB相关异常处理进行分析。,linux中TLB相关异常和相关处理函数的对应关系如下:,这里分析handle_tlb_refill、handle_tlb_load和handle_tlb_protect函数。其中handle_tlb_store和handle_tlb_modify实际上流程与handle_tlb_load基本一致,只是更新页表项时更新的位不同。,TLB重填异常(handle_tlb_refill)触发前后硬件中的处理与一般异常存在差异,主要是TLB重填异常相关有独立的一套寄存器。但都会有相应保存和恢复现场、跳转和返回操作。值得注意的是,TLB重填异常中出错的地址保存在CSR.TLBRBADV寄存器,而一般异常出错的地址保存在CSR.BADV寄存器。,TLB重填异常的软件处理过程如下:,代码分析如下:,load/取指操作页无效异常触发前后硬件中的处理与一般异常相同。,handle_tlb_load处理的过程如下:,代码分析如下:,页不可读/不可写/特权不合规异常触发前后硬件中的处理与一般异常相同。,handle_tlb_protect处理的过程实际上就是调用缺页处理函数,来填入页表。,代码分析如下:,本文介绍了loongarch架构中软件管理TLB的机制、TLB重填异常和其他TLB相关的异常,以及相应的异常处理和代码分析。,软件管理TLB机制、处理TLB相关异常,算是loongarch架构中TLB相关软件维护中较为特别的地方。下一篇文章将继续介绍loongarch中其他的TLB维护和相关指令。,​想了解更多关于开源的内容,请访问:​,​​51CTO 开源基础软件社区​​,​​https://ost.51cto.com​

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/21501.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月5日 上午12:00
下一篇 2023年3月7日 下午10:34