开发者社区> 问答> 正文

Linux如何管理内核的数据段?

我目前知道的或自以为知道的(以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的物理页?

展开
收起
杨冬芳 2016-07-11 15:25:06 2393 0
2 条回答
写回答
取消 提交回答
  • kernel data segment的物理页如何变成user space的物理页?以及user space的物理页如何变成kernel data segment的物理页?

     这俩没什么大区别, 对于buddy来说都是正常分配出去的物理页. kernel data segment的物理页被释放后再被用户态程序分配到就变成了user space的物理页, 反之亦然.

    而属于kernel code segment的物理内存页则没有这个问题。

    这是因为kernel code segment不会被释放, 除非是内核模块占据的那些页.

    2019-07-17 19:54:15
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载