diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index b68c1037..123b03c4 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -721,7 +721,23 @@ Linux 中管道通过空文件实现。 该算法会将那些经常被访问的页面也被换出,从而使缺页率升高。 -### 3. 最近最久未使用 +### 3. 最近未使用 + +> NRU, Not Recently Used + +首先,系统为毎一页面设置了两个状态位。当页面被访问(读或写)时设置R位;当页面(即修改页面)被写入时设置M位。当启动一个进程时,它的所有页面的两个位都由操作系统设置成0,R位被定期地(比如在每次时钟中断时)清零,以区别最近没有被访问的页面和被访问的页面。 + +当发生缺页中断时,操作系统检査所有的页面并根据它们当前的R位和M位的值,把它们分为4类: +* 第0类:没有被访问,没有被修改 +* 第1类:没有被访问,已被修改 +* 第2类:已被访问,没有被修改 +* 第3类:已被访问,已被修改 + +NRU算法随机地从类编号最小的非空类中挑选一个页面淘汰之。 + +算法隐含的意思是,在最近一个时钟滴答中(典型的时间是大约20ms)淘汰一个没有被访问的已修改页面要比一个被频繁使用的“十净”页面好。NRU主要优点是易于理解和能够有效地被实现,虽然它的性能不是最好的,但是已经够用了。 + +### 4. 最近最久未使用 > LRU, Least Recently Used @@ -733,7 +749,17 @@ Linux 中管道通过空文件实现。

-### 4. 时钟 +### 5. 第二次机会算法 + +FIFO算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改: + +当页面被访问(读或写)时设置该页面的R位为1。需要替换的时候,检查最老页面的R位。如果R位是0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是1,就将R位清0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索 + +

+ +第二次机会算法就是寻找一个最近的时钟间隔以来没有被访问过的页面。如果所有的页面都被访问过了,该算法就简化为纯粹的FIFO算法。 + +### 6. 时钟 > Clock diff --git a/pics/2018-05-29-15275543393037.jpg b/pics/2018-05-29-15275543393037.jpg new file mode 100644 index 00000000..4af67ef0 Binary files /dev/null and b/pics/2018-05-29-15275543393037.jpg differ