中断处理程序
do_no_page()缺页中断
时钟中断
MMU查页表的时候修改引用位
颠簸
分配页框
二次整理
首先,要计算空闲页还够不够,不够的话就要先换出,再换入。
get_free_page()这个函数是在中断处理程序中的。

image.png
调度和淘汰没有本质区别,都是选择一个物品,调度是分配,淘汰则是剥夺。
频繁地换入换出会导致时间太长,类比不断地去仓库取东西放到店面,有些失败。
算法1
FIFO显然不行
算法的评价准则,缺页。也就是看换入了多少次。

算法2MIN
有些不切实际

image.png
算法3LRU
拥有局部性特点
前面讲的快表也拥有局部性这个特点,计算机中关于局部性的特点是很重要的,一定要会把握。

image.png
逻辑页
找逻辑页需要用MMU查询页表
时间戳可能会溢出

image.png
实现算法2页码栈:准确实现代价太大

不能准确实现,要近似实现,所以不是最近最少使用,而是使用最近没有使用来替换最近最少使用。
R被放在页表项中,MMU在查表的时候会顺便改R的值为1。
代价低的原因是,这个只需要改对应位置的R的值即可,不像时间戳和页码栈,还需要移动其他位置。

image.png
长指针:用来将R从1变成0,放在时钟中断中。
短指针:换出页面,放在缺页的程序中。

需要给一个进程分配多少个物理内存页?
时钟算法就是用来换出的。
缺页就需要调页,调页就需要启动磁盘,CPU就要等着,那么多个进程就都要等着,这样CPU的利用率就低了。
CPU利用率下降的根本原因是缺页。进程增多,给进程分配的页就会变少。
颠簸:磁盘不断地在内存中读写,换入换出,CPU只能等着。
分配多少个页框,要根据局部性来决定。
一般的话,分配页框的个数需要动态调整,进程太多的话也要限制进程的数量。
clock算法->页面的换出(页面的淘汰)->内存的换出

image.png
时钟中断
缺页中断
磁盘管理,磁盘驱动

image.png