我目前知道的或自以为知道的(以32位Linux、3G+1G的配置为例):
1. Linux里的每个进程都有4G的地址空间,其中0至3G是用户空间,3G至4G是内核。内核被共享在每个进程的地址空间中。
2. 每个进程的地址空间内大约有4个段,即内核代码段、内核数据段、用户代码段、用户数据段。
3. 我以为属于内核的物理内存,是不能被交换(swap)到硬盘上的,也就是常驻在内存中的。
但是我现在在看一篇文献,上面大约这样说:
...上面提到的那种设计不好(注:具体这个设计是什么就不讨论了),因为物理内存页会频繁地在属于kernel data segment和属于user space之间切换。而属于kernel code segment的物理内存页则没有这个问题。
这好像和我之前理解的不符啊?求高手解惑:kernel data segment的物理页如何变成user space的物理页?以及user space的物理页如何变成kernel data segment的物理页?