虚拟地址长度大于有效地址长度的设计意义是什么?
核心误解澄清
你首先搞错了两个关键前提,才会觉得这个设计浪费:
- 这个80位VAddr是MMU内部转换的中间地址,不会在CPU外部总线传输,完全不存在浪费线路资源的问题
- ESID是进程私有地址空间的段标识,VSID是全局全系统唯一的段标识,二者不是一一对应的关系
设计的实际意义
1. 支撑多进程地址空间隔离,同时优化TLB性能
52位的VSID是全局唯一的,每个进程的同一段ESID可以映射到完全不同的VSID。你之前只算了单个进程最多用到236个VSID,但是系统里可以同时运行最多216个进程,每个进程都可以用满自己的236个ESID段,加起来刚好是252个全局VSID,刚好把VSID的空间用完,80位的VAddr刚好可以覆盖所有进程的总虚拟地址空间。
而且因为VSID全局唯一,TLB条目里直接存VSID即可,不需要额外存储进程PID。进程切换的时候完全不需要清空TLB,不同进程的TLB条目可以共存,命中判断时只需要比对VSID即可,大幅降低进程切换的开销。
2. 简化段级权限与共享内存实现
这种段映射机制可以在段层面直接配置读写执行权限,不需要每页单独配置,适合大段内存的权限管控。
如果需要实现多进程共享内存,只需要把不同进程的各自的ESID映射到同一个VSID即可,不需要修改页表,共享内存的配置效率非常高。
3. 兼容32位到64位的演进
这个设计是PowerPC架构从32位演进到64位时的扩展设计,32位模式下的段映射逻辑可以几乎无修改的适配到64位架构上,减少了架构升级的软件适配成本。
内容的提问来源于stack exchange,提问作者rcplusplus
相关产品推荐
相关产品推荐

