3G/1G vm split 有啥好处? 32位Linux内核
Posted
技术标签:
【中文标题】3G/1G vm split 有啥好处? 32位Linux内核【英文标题】:What's the advantage of 3G/1G vm split ? 32bit linux kernel3G/1G vm split 有什么好处? 32位Linux内核 【发布时间】:2012-02-01 12:40:09 【问题描述】:虚拟内存 I:问题 [LWN.net] http://lwn.net/Articles/75174/
特别是,硬件的地址转换缓冲区可以在内核和用户空间之间共享。
我对此感到非常困惑。为什么他们可以在 vm 拆分时共享 TLB?我知道某些 CPU 中有页面全局位
表示TLB条目对不同进程是通用的,不需要刷新。
TLB和vm split 3G/1G是什么关系?请详细评论。提前致谢。
更新:为什么不使用页面全局位来指示TLB条目被OS(内核空间)使用?如果是这样,为什么还需要拆分 vm 空间?示例:TLB 中有两个条目(vm 班轮地址相同),但其中一个设置了全局位。 ?当上下文切换时,只需刷新未设置全局位的条目。这可能吗?
Update2:我查看了intel-ia-32架构软件开发手册,发现TLB条目中没有全局位(存在于PDE和PTE中)。但是上下文切换时,CPU如何判断TLB entry global bit set or unset呢?
【问题讨论】:
【参考方案1】:地址空间分为用户空间和内核空间。内核地址空间始终相同,并使用本文所讨论的全局标志。它非常需要它。
另一方面,另外 3GB 保留给用户进程:它们有不同的地址空间每个进程(注意:每个进程,线程通过clone(CLONE_VM)
共享相同的地址空间) .这意味着,当发生进程上下文切换时,MMU 只需替换与用户地址空间相关的 TLB 条目,而不是内核的。
【讨论】:
看你说的“上”是什么意思,但是从0开始算,下3GB是虚拟用户空间。我想这就是你的意思。 @gnometorule 差不多明白了,但还是有些困惑。请查看更新。谢谢【参考方案2】:TLB 还包括一个主管标志,它指示映射是否可以被常规进程使用,或者它是否仅在进程运行并设置了主管标志时才可用——即,当进程在内核上下文中执行时。
这个监督标志允许 TLB 对进程有用(它不会自动获得对内核千兆字节数据的权限)和允许内核完全访问所有在内核模式下执行时进程的内存。
这意味着进程可以进入和退出内核模式而不会导致 TLB 刷新惩罚。
如果内存没有被分割(例如,4:4 补丁给用户空间 4GB 和 4GB 给内核空间),那么 TLB 必须在每个内核进入/退出时刷新以映射特权空间或者用户空间和所有被复制进出内核的数据都必须经过繁琐的重新映射机制。
【讨论】:
以上是关于3G/1G vm split 有啥好处? 32位Linux内核的主要内容,如果未能解决你的问题,请参考以下文章