分类: LINUX
2012-10-14 22:51:02
页面回收牵扯到内存管理、文件系统、块设备驱动的相关知识。在内核学习中建议安排在靠后一点的位置。首先来说页面回收机制,主要是目前正在看相关的内容,于是将相关的内容分析记录。
页面回收就是将已经分配出去的页面释放出来,提供给伙伴系统做后续的页面申请分配。可被回收的也有多种:1、进程中被映射文件的页面;2、进程中的匿名页面;3、磁盘高速缓存;而内核中动态申请的页面是不能并回收的。
可回收页面可以分为两大类,一类就是像映射了文件的映射页面和磁盘高速缓存,这种页面都有后备存储设备,回收页面只需要将页面写入到后备存储器后就能将页面回收。而另外一种就是匿名页面,这个需要在系统中建立交换分区,将页面写入交换分区,才能回收释放页面。
1、交换分区
交换分区可以是一个独立的磁盘分区也可以是一个分区上面的一个文件。
为了管理每一个交换区,内核定义了一个数据结构
Prio是交换分区的优先级,系统中可以设置多个交换分区,不同磁盘的速度不同,如果不同磁盘上设置了交换分区,可以为这些分区设置不同的优先级。系统优先将换出的页面保存到优先级高的交换分区中。
Swap_file 和 bdev保存分区所在的文件或者硬盘分区的file和block_device结构体指针。
Curr_swap_extent保存了一个链表,由于交换分区有可能使用的是交换文件,交换文件在磁盘上占据的block不一定都是连续的。所以,swap_extent结构体就是表示page槽位和block对应关系的一个数据结构
Swap_map表示该交换区中对应的页槽是否被分配出去。0表示空闲,正数表示被页表项引用的计数,还有页表槽位不可用的标识
lowest_bit和highest_bit分别表示有空闲page槽位的最小索引值和最大索引值。cluster_next表示分配下一个page槽位的索引值。