Linux如何管理内核的数据段?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

杨冬芳 2016-07-11 15:25:06 1329

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

Linux
分享到
取消 提交回答
全部回答(2)
  • jesuszhu_
    2019-07-17 19:54:15

    kernel data segment的物理页如何变成user space的物理页?以及user space的物理页如何变成kernel data segment的物理页?

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

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

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

    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程