页面置换算法:本质是为了让有限内存能满足无线进程。

先说明一下处理缺页错误的过程:

分页硬件在通过页表转换地址时会注意到无效位被设置,从而陷入操作系统,这种陷阱是因为操作系统未能将所需要的页面调入内存引起的。

处理缺页错误:

1、检查这个进程的内部表,确定该引用是否为有效的内存访问(可以理解为这个内存能被当前进程使用),如果无效那么直接终止进程;如果有效但是尚未调入页面,就将该页面调入内存。

2、然后从空闲帧链表上找到一个空闲帧。

3、调度磁盘将进程所需要的内存读入页帧中,

4、磁盘读取完成,修改页表,使空闲帧对应到该页号上。并且修改页表有效-无效位 为有效。

注意页表中的一些标志位:

修改位:如果有效为位1,表明被修改,那么替换页面时需要将内存写入磁盘中;如果为0,表明未被修改,那么使用页面替换算法直接释放

保护位:可以标记为只读,写。

有效-无效位:i:表示逻辑页号不对应物理页帧,为V表示有对应的物理页帧

页面替换算法:

FIFO:算法

操作系统总时替换出在内存中停留时间最久的页面,可以用一个指针来指向这个位置(开销很小,可以使用一个队列来实现,每次缺页时移出末尾的页面,再队列头添加新的页面,未发生缺页错误就不需要对队列进行操作)

LRU算法:操作系统总时替换在内存中最久没有使用的页面:我么可以使用链表来实现这个算法,表头表示的是最近被使用的页面,表尾表示最久没被使用的页面,每一次不管是否发生缺页,都需要对这个链表进行从新增删改查,来保证每一次的链表都是我们需要的(开销太大)

近似LRU算法:我们在页表中添加一个引用位clock,当clock为1时,不能移出,当clock为0时,表明可以移除

procedure t: {  指针p:指向当前的页面  p = 0;//指向初始位置  boolean :标志位clock  进程包含的所有页面组成的循环链表:linklist//当进程在运行时,链表存在,进程结束时,链表也消失  while(进程运行){        if(p.clock == 1){      p.clock = 0;      p++;//指针指向下一个    }    if(p.clock == 0){      删除p指向的页面并且在p处添加新的页面;      p.clock = 1;      p++;    }  }}
procedure t: {  指针p:指向当前的页面  p = 0;//指向初始位置  boolean :标志位clock  boolean : 修改位m  进程包含的所有页面组成的循环链表:linklist//当进程在运行时,链表存在,进程结束时,链表也消失  while(进程运行){          if(p.(clock,m) == (0,0)){            删除p指向的页面并且在p处添加新的页面;      p.(clock,m) = (1,0);      p++;    }    if(p.(clock,m) == (0,1)){                  p.(clock,m) = (0,0);      p++;    }    if(p.(clock,m) == (1,0)){                  p.(clock,m) = (0,0);      p++;    }    if(p.(clock,m) == (1,1)){            p.(clock,m) = (0,1);      p++;    }    if(修改页面){      p.(clock,m) = (1,1);      p++    }    if(读页面){      p.(clock,m) = (1,0);      p++;    }  }}

当发生缺页错误时,所需要的页面就读取空闲帧,并且将替换的牺牲帧放入缓冲池,在调页空闲时期将缓冲池中的牺牲帧中的内容写入(如果页表上的修改位为1)磁盘中(减少了操作系统的调页时直接访问磁盘的过程,提高了调页效率).

第二种方法:将牺牲帧中的内容写入磁盘,但是不释放帧中的内容,因为进程有可能调用之前的页,这样就将缓冲池中的帧直接写入内存,减少了(从磁盘读取数据的操作)。

更多相关文章

  1. 《Android和PHP最佳实践》官方站
  2. android用户界面之按钮(Button)教程实例汇
  3. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  4. Android(安卓)UI开发第十七篇——Android(安卓)Fragment实例(Lis
  5. Android——Activity四种启动模式
  6. Android布局(序章)
  7. Android发送短信方法实例详解
  8. Android(安卓)读取资源文件实例详解
  9. android 蓝牙通讯

随机推荐

  1. android Linearlayout中有关gravity与lay
  2. 【Arcgis for android】保存地图截图到sd
  3. android 缓存Bitmap
  4. android XML下searchable.xml
  5. Android UI开发第三十三篇——Navigation
  6. [小代码]在Android和PHP之间的加密/解密,
  7. android AudioManager类 详解
  8. android 使用Intent传递数据之剪切板
  9. Android获取运营商代码
  10. Android(安卓)中如何复制文件的操作