Linux内核源代码情景分析-内存管理

    用户空间的页面有下面几种:

    1、普通的用户空间页面,包括进程的代码段、数据段、堆栈段、以及动态分配的“存储堆”。

    2、通过系统调用mmap()映射到用户空间的已打开文件的内容。

    3、进程间的共享内存区。

    这些页面的的周转有两方面的意思。

    1、页面的分配,使用,回收。如进程压栈时新申请的页面,这类页面不进行盘区交换,不使用时释放得以回收。

    这部分通过一个场景来解释:

    Linux内核源代码情景分析-内存管理之用户堆栈的扩展。

    2、盘区交换。如要执行硬盘上的对应代码段。把硬盘上的代码段换入内存才能执行。

    这部分通过三个场景来解释:

    Linux内核源代码情景分析-内存管理之用户页面的换入。

    Linux内核源代码情景分析-内存管理之用户页面的分配。

    Linux内核源代码情景分析-内存管理之用户页面的定期换出。


    内核空间的页面有下面几种:

    1、内核代码和内核中全局量所占的内存页面既不需要经过分配也不会被释放。这部分空间是静态的。

    2、内核通过kmalloc后者vmalloc分配、用作某些临时性使用和为管理目的而设的数据结构,如vma_area_struct数据结构等,这些数据结构一旦使用完毕便无保存价值,所以立即便可释放。不过由于一个页面中往往有多个同种数据结构,所以要到整个页面都空闲时才能把页面释放。

    3、内核中通过调用alloc_pages(),为某些临时使用和管理目的而分配的页面,例如,每个进程的内核栈所占的两个页面、从内核空间复制参数时所使用的页面等等。这些页面也是一旦使用完毕便无保存价值,所以立即释放。

    4、在内核中还有一种页面,虽然使用完毕,但其内容仍有保存价值,因此,并不立即释放。这类页面“释放”之后进入一个LRU队列,经过一段时间的缓冲让其“老化”。如果在此期间又要用到其内容了,就又将其投入使用,否则便继续让其老化,直到条件不再允许时才加以回收。这种用途的内核页面大致有以下这些: · 文件系统中用来缓冲存储一些文件目录结构dentry的空间 · 文件系统中用来缓冲存储一些索引节点inode的空间 · 用于文件系统读/写操作的缓冲区。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。