第2章 内存管理:2.8 页换出和淘汰

2.8 页换出和淘汰:

当物理内存变得短缺时, L i n u x内存管理子系统必须试着释放物理页。这项任务落在内核
交换守护进程( k s w a p d )头上。内核交换守护进程是一种特殊类型的进程—一个内核线程。内
核线程是没有虚拟内存的进程,它们在核态下的物理地址空间中运行。内核交换守护进程的
命名有一点不准确,因为它并不仅是把页面交换到系统交换文件中。它的作用是确保系统中
有足够空闲页来保持内存管理系统高效运行。
内核交换守护进程( k s w a p d )在启动时由内核初始化进程启动,并等待内核交换定时器周
期性超时。每当定时器超时,交换守护进程就去看系统中空闲页的数目是否太少了。它使用
两个变量, free_pages_high 和f r e e _ p a g e s _ l o w来决定是否应释放一些页。只要系统中空闲页数
目多于f r e e _ p a g e _ h i g h,内核交换守护进程就什么也不做,它再次“睡眠”直到其定时器再次
超时。在进行这次检查时,内核交换守护进程把当前正被写出到交换文件的页也计算在内。
它保持一个这种页的计数于n r _ a s y n c _ p a g e s中,每当有一页排队等待被写出到交换文件时,则
递增;而当交换设备的写完成后递减。F r e e _ p a g e s _ l o w和f r e e _ p a g e s _ h i g h在系统启动时被置值
并与系统中物理页数有关。如果系统中的空闲页数少于f r e e _ p a g e s _ h i g h ,甚至少于
f r e e _ p a g e s _ l o w,则内核交换守护进程将试用三种方法来减少系统中使用的物理页数:
• 减少缓冲区和页缓存的大小。
• 交换出System V共享内存页。
• 换出及淘汰页。
如果系统中空闲页数低于f r e e _ p a g e s _ l o w,内核交换守护进程将在下次运行前试着释放6
页,否则将试着释放3页。上面三种方法将依次被使用直到足够的页被释放。内核交换守护进
程会记住上次它是用哪种方法来释放物理页。每当运行时它将开始试着用上次成功的方法释
放页。
当释放完足够页后,交换守护进程再次睡眠直到定时器超时。如果内核交换守护进程释
放页的原因是系统中空闲页数少于f r e e _ p a g e s _ l o w,那么它仅睡眠通常一半的时间。一旦系统
中空闲页多于f r e e _ p a g e s _ l o w,内核交换守护进程将在检查前睡眠长些。

2.8.1 减少缓冲区和页缓存大小:

保存在页缓存和缓冲区缓存中的页是被释放到free_area 向量中的很好的候选。页缓存(包
含内存映射文件),可能包含着不必要的占据系统内存的页。缓冲区缓存与此类似,它包含将
从物理设备中读出或写入的缓冲区,也可能包含不需要的缓冲区。当系统中物理页用完后,
从这些缓存中淘汰页相对要容易些,因为它不需要写物理设备(不像把页交换出内存)。淘汰这
些页除了使对物理设备和内存映射文件的访问变慢外,没有其他太多不良作用。然而,如果
从这些缓存中进行页淘汰是公平进行的,那么所有的进程将受到相同影响。

每次内核交换守护进程试图压缩这些缓存时,就检查m e m _ p a g e向量中的一块页面来看是
否有页面能被淘汰出物理内存。各内核交换守护进程在强制交换时,所检查的那块页面将很
大,也就是系统中的空闲页数已经降到非常低了。页面块用循环方式检查,每次试图压缩缓
存时都将检查不同的一块页面。这也被称为时钟算法,因为就像时钟的分针一样,每次检查
整个m e m _ m a p页向量的几页。 

2.8.2 换出System V共享内存页:

System V共享内存是一种进程间通信机制,它使得两个或多个进程可以共享虚拟内存用
以在它们之间传递信息。

内核交换守护进程在换出System V共享内存页时同样使用时针算法。每次运行时它都记
住最近换出了哪个共享虚拟内存区中的哪一页。它通过两个索引完成这种功能,一个是
s h m i d _ d s数据结构集的索引,另一个是这个System V共享虚拟内存区中页表项列表的索引。
这将保证它公平地牺牲System V共享虚拟内存区。

因为对于一个给出的System V共享内存页来说,其物理页帧号包含在所有共享了虚拟内
存区的进程的页表中,内核交换守护进程必须修改所有这些页表来表明现在该页不再位于内
存中而是保存在交换文件中。对于每个交换出去的共享页,内核交换守护进程找到每一个共
享进程的页表中的页表项(通过v m _ a r e a _ s t r u c t数据结构中的一个指针)。如果此System V共享
内存页的这个进程页表项有效,则把它变成无效且换出该页表项并把该(共享)页的使用者计数
减1。一个交换的系统V共享页表项格式包含一个s h m i d_d s数据结构集的索引和一个此S y s t e m
V共享内存区页表项的索引。
如果所有共享进程的页表被修改后页的使用计数为0,则共享页就可以被写到交换文件中。
该System V共享内存区的s h m i d _ d s数据结构所指向的页表项列表将被一个换出页表项替代。
一个换出页表项是无效的但包含一个打开的交换文件集的索引和一个该文件中的偏移,从偏
移处可以找到换出页,在此页需要被读回物理内存时将使用这些信息

2.8.3 换出和淘汰页:

交换守护进程依次查看系统中每个进程来看它是否是交换出的好的候选。好的候选是指
那些可以被换出(有些不能)的进程,并且它有一个或多个页可以被换出或从内存中淘汰。仅当
页中的内容不能从另一种方法获得时,页面才会被从物理内存交换出到系统的交换文件中。

 

一个可执行映像的许多内容来自于映像的文件并且可以容易地从文件中重读出来。

 

一旦将被交换的进程被定位,交换守护进程查看它所有的共享内存区来寻找未共享并且
锁住的区域。L i n u x并不是把所选中进程的全部可交换页换出,而是只移出少量的页。页面如
果被锁住就不能被换出或淘汰。
L i n u x交换算法使用页年龄。每一个页有一个计数器(保存在m e m _ m a p _ t数据结构中)以提
供给内核交换守护进程一些该页是否值得换出的信息。页面在不用时会变老而被访问时将重
新年轻;交换守护进程只换出老的页面。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值