天天看点

2.6 Linux存储管理-物理页面的使用和周转

说明一些概念: 虚拟页面:指虚拟空间中,一段固定大小、边界与页面大小对齐的区间及其内容。 物理页面:虚拟页面映射到的介质上,可以在内存上( 内存页面),也可以在磁盘上( 盘上页面)。 页面的换进换出指的是页面内容

页面的换进换出也需要一个数据结构 内核定义了swap_infp_struct,用来描述用以管理页面交换的文件和设备

  1. 49 struct swap_info_struct {
  2. 50 unsigned int flags;
  3. 51 kdev_t swap_device;
  4. 52 spinlock_t sdev_lock;
  5. 53 struct dentry * swap_file;
  6. 54 struct vfsmount *swap_vfsmnt;
  7. 55 unsigned short * swap_map;
  8. 56 unsigned int lowest_bit;
  9. 57 unsigned int highest_bit;
  10. 58 unsigned int cluster_next;
  11. 59 unsigned int cluster_nr;
  12. 60 int prio; /* swap priority */
  13. 61 int pages;
  14. 62 unsigned long max;
  15. 63 int next; /* next entry on swap list */
  16. 64 };

页面的周转: 周转主要包括两部分 第一,页面的分配、使用和回收,不涉及交换 第二,页面的交换,交换的最终是页面的回收 notice:只有用户空间的页面才会换进换出,而内核页面则不会,内核空间可以访问所有的物理页面

用户空间页面: 1 普通的用户空间页面:包括进程的代码、数据、堆栈,以及动态堆 2 通过mmap映射的文件内容 3 进程的共享内存区 这些页面涉及页面周转的 两部分

内核空间页面: 内核中使用的内存页面只涉及第一部分,也就是 页面的分配、使用和回收,但是不涉及交换(只在内存中) 1 使用直接释放    都是一些使用kmalloc和vmalloc申请的临时性结构 2 使用完后仍有保留价值    其内容有保留的价值。条件允许时,把这些页面“养起来”,可以提高以后的操作效率

   比如一些缓存的文件目录结构、 缓存的一些inode结构、 文件读写的缓冲区等等    这些页面释放后立即回收亦可,但是会付出更多代价

页面交换: 1 消极的页面交换: 有空闲的页面就直接分配; 当没有没有空闲时,将一个或几个内存页面换到磁盘上 notice:这种做法比较消极,忙碌的时候没有调度的余地 2 积极的页面交换 定期的,或者在系统比较空闲的时候挑选一些页面进行换进换出

挑选的规则一般都是LRU(最近最久未使用),但是这样也带来一些问题,因为实际上没有一种方法可以准确的预测对页面的访问,所以完全有可能发生抖动(刚换出就被访问) 3 带有暂存的积极页面交换

继续阅读