关于几种情况的TLB映射关系,帮看下理解是否正确

发布于 2022-10-15 05:46:43 字数 147 浏览 22 评论 0

1. 用户进程调用系统调用切换到内核空间后,系统调用的代码可以直接访问该进程的数据,原因是TLB映射关系没有变化还是进程的。
2.内核线程和用户进程运行时,都是各自的TLB映射关系(mmu中),尽快内核空间权限高,但由于内核线程没有用户进程的TLB映射关系,也无法直接访问用户数据。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

过期情话 2022-10-22 05:46:43

回复 1# longzexd

个人感觉理解有点问题,能不能访问用户地址空间和TLB根本就没有直接关系,TLB映射关系是否变化主要取决于是否被刷新,而被刷新的条件就是CR3是否发生变化或内核强制要求刷新,当系统调用进入内核后,并没有发生进程的切换,CR3没有变化,所以TLB的映射关系也没有变化,但是并不能认为是因为TLB没有变化才导致的能访问用户关系,二者根本没有关系。

另外,内核线程是不能访问用户空间是由于os的安全性检查限定的,通常内核线程的mm_struct=NULL,所以不会访问用户空间,如果OS允许的情况下,把active_mm赋值为内核线程借用的 它抢占的那个进程的mm_struct, 只要没有操作系统的安全性检查,完全可以访问用户空间。

最冷一天 2022-10-22 05:46:43

这块我也有些想不明白。用户进程呼叫系统调用后,系统进入内核态,此时并没有进程切换所以cr3寄存器没有变化,当前页表没有变化(TLB也没被刷新),这就是所谓的“内核态,运行于进程上下文”吧。

这时系统调用运行的应该是内核的代码,这个线性地址是怎么转成物理地址的?是像用户程序一样通过MMU和页表一级一级转换的吗(因为所有页表的最高1GB都是一样的),还是因为内核的线性地址和物理地址有线性对应关系直接减去偏移得来的?

栖迟 2022-10-22 05:46:43

用户进程呼叫系统调用后
liwangli1983 发表于 2011-05-30 10:10

这个翻译很另类啊。。。。

你是怎么会有这个疑问的,只要开启了分页,不管什么时候都是依页表转换地址。

谎言 2022-10-22 05:46:43

回复 3# liwangli1983

    在开启了分页机制后,无论内核态还是用户态,从CPU的角度,即硬件的角度,都是经过也页表进行计算的,因为MMU就是这么设计的。但是从编程者的角度来说,比方说驱动编程,内核编程就可以直接通过-3G来得到物理地址。

不知道我说明白没有?

梦冥 2022-10-22 05:46:43

用户通过系统调用进入内核空间,可以理解为还是这个进程在运行,只不过由于这部份工作比较特别需要特别的权限来执行而已。实际上每个进程的的内存映射表包括其用户空间和内核空间两个部分(32位机器上分别是3G和1G),只不过所有用户进程在内核空间部分的映射关系都是一样的而已,

难以启齿的温柔 2022-10-22 05:46:43

嗯,我也觉得分页开启后,好像就应该全部用页表计算了。
但觉得这样内核虚拟地址和物理地址的线性对应关系好像没起什么作用。。。
我以为能配置MMU对3G以上地址特殊处理,毕竟用偏移比索引页表应该快很多。

大体上是理解了,细节还得再研究。。。谢谢楼上各位

星光不落少年眉 2022-10-22 05:46:43

直接减去偏移是内核计算虚拟地址和物理地址转换关系方便是使用的,对所有地址的访问在硬件上是通过mmu来控制的,只要开了mmu,肯定是要页表来映射到物理地址的.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文