页面 table 中的内核 space 和用户 space 布局
Kernel space and user space layout in page table
假设我们有CPU有MMU,它的工作原理如下:
- 内存管理仅使用分页
- 每个进程都有自己的页面table
- 每个进程的虚拟地址被拆分为用户space和内核
space(像许多 CPU 一样有分页功能)
- kernel space(具体就是他的虚拟地址)是共享的
进程(例如更高地址)
现在想象一下,我们是运行几个进程(当然是在非特权模式下)。当我们想为任何进程分配额外的内存时,我认为它只适用于以下场景。我们执行系统调用,OS 通过更新进程页面 table 或报告一些错误代码来服务(在特权模式下)。
我的问题:但是现在,当我们想为内核分配一些内存时,我们必须更新所有table所有进程 在他们的内核部分地址?据我所知,在 CPUs 中没有任何内核页面 table 理论上可以解决该问题(但会带来其他问题)。那么如何解决这种情况,如果可能发生的话?
对不起我的英语。
终于,我找到了解决办法。我想,这个link说明一切:
了解 Table 6.13 非常重要。翻译 table 大小 。简而言之,每个进程的虚拟space当然分为内核space和用户space。但是,space 和 都有自己的 table。进程切换时,内核table指针不变,而用户table指针发生变化。我希望,你明白这一点。
对不起我的英语。
假设我们有CPU有MMU,它的工作原理如下:
- 内存管理仅使用分页
- 每个进程都有自己的页面table
- 每个进程的虚拟地址被拆分为用户space和内核 space(像许多 CPU 一样有分页功能)
- kernel space(具体就是他的虚拟地址)是共享的 进程(例如更高地址)
现在想象一下,我们是运行几个进程(当然是在非特权模式下)。当我们想为任何进程分配额外的内存时,我认为它只适用于以下场景。我们执行系统调用,OS 通过更新进程页面 table 或报告一些错误代码来服务(在特权模式下)。
我的问题:但是现在,当我们想为内核分配一些内存时,我们必须更新所有table所有进程 在他们的内核部分地址?据我所知,在 CPUs 中没有任何内核页面 table 理论上可以解决该问题(但会带来其他问题)。那么如何解决这种情况,如果可能发生的话?
对不起我的英语。
终于,我找到了解决办法。我想,这个link说明一切:
了解 Table 6.13 非常重要。翻译 table 大小 。简而言之,每个进程的虚拟space当然分为内核space和用户space。但是,space 和 都有自己的 table。进程切换时,内核table指针不变,而用户table指针发生变化。我希望,你明白这一点。
对不起我的英语。