当几个app同时运行时
1 它们同时保存在 sdram 上
2 它们的地址各不相同
程序运行时,所处地址 一般情况下编译某个app时,需要单独指定它的链接地址
linux 上app 的程序起始地址都是一样的。 当cpu 运行app 读取指令的时候,都是从上述相同的地址去读。
引入虚拟地址的原因 1 让app以同样的链接地址,进行编译。 (好的可移植性)
如何实现 1g 的app,可以在 64M的内存上运行 1 首先app时存储在 emmc 上的 2 当运行app 时,linux设备一般都会把数据搬到 ddr上 3 app 的 va0 映射到实际地址上的 pa0 va1 到 映射到实际地址的pa 1上。 运行 va2时,没用了实际物理地址可用,那么可能把 pa0 的数据置换出来,放进va2的数据。
TCB 是什么? cpu内核发出 va 请求读数据,TCB 接收到该地址。 那为什么 TCB 先接收该地址呢? 因为TCB是mmu中的一块高速缓存(也是一种 cache 是cpu内核和物理内存之间的cache)。 它缓存了最近查找过的VA对应的页表项,如果TCB缓存了va的页表项,就不必做 translation table walk 了,否则就去物理内存中读取页表保存在TCB中,TCB缓存可以减少访问物理内存的次数
mmu 权限管理 app1 不能访问 app2的内存空间 a 完全不允许访问 b 允许系统模式访问 不允许用户模式访问 c 用户模式下,根据描述符中的ap决定 参考:MMU部件以及对内存权限的控制
怎么使用 mmu a 在内存中创建页表 b 把页表的基址告诉mmu c 启动mmu