首页 > 其他分享 >OS(八):存储器管理之请求分页存储管理方式

OS(八):存储器管理之请求分页存储管理方式

时间:2023-08-22 17:13:59浏览次数:39  
标签:存储管理 请求分页 调入 内存 页表 该页 缺页 OS 页面

  请求分页系统建立在基本分页基础上,为能支持存储器功能增加了请求调页和页面置换功能。

  页面 作为调入和换出的基本单位。

1、请求分页的硬件支持

1.1、页表机制

  页表将用户地址空间中逻辑地址变换为内存空间的物理地址。只将部分应用程序调入内存,页表增加若干项,详情如下:

   状态P:用于指示该页是否已调入内存,供程序访问参考;

  访问字段A:记录本页在一段时间内被访问的次数,或记录记录本页最近有多长时间未被访问,供选择换出页面时参考;

  修改为M:表示该页在调入内存后是否被修改过。M位供置换页面时参考。

  外存地址:指出该页在外存上的地址,通常是物理块号,供调入该页时参考。

1.2、缺页中断机构

1、缺页中断

  请求分页系统中,当索要访问的页面不再内存时,产生缺页中断,请求OS将所缺的页面调入内存。

2、缺页中断的特点

  缺页中断也需要保护CPU环境、分析中断原因、转入中断处理程序,恢复CPU等步骤,但与一般中断有区别:

2.1、在指令执行期间产生和处理中断信号

  通常,CPU在一条指令执行完后,才检查是否有中断请求到达,若有,便去响应,否则继续执行下一条指令;

  缺页中断时在指令执行期间。

2.2、一条指令在执行期间可能产生多次缺页中断

1.3、地址变换机构

  请求分页系统中的地址变换过程:

    

  检索快表,若快表中有要访问的页,修改页表项中的访问位。对于写指令,需将位置修改成1,然后利用页表项给出的物理块号和页内地址形成物理地址。

  若快表中未找到该页的页表项,到内存中查找页表,再从找到的页表项中的状态位P,判断该页是否已调入内存,若已调入内存,将此页的页表项写入快表,当快表已满,按某种算法确定页的页表项后,再写入该页的页表项;若该页尚未调入内存,产生缺页中断,请求OS从外存把该页调入内存。

2、内存分配策略和算法

  请求分页系统中,内存分配策略可分为 固定 和 可变 策略;

  进行置换时,可分为 全局置换 和 局部置换。

2.1、物理块的分配策略

  固定内存分配局部置换:为每个进程分配一定数目的物理块,在整个运行期间不再改变,若发生缺页,在内存中的页面中选出一个换出,再调入一页,保证分配给该进程的内存空间不变。

  可变分配全局置换:为每个进程分配一定数目的物理块,OS自身维护一个空闲物理块队列,若发生缺页,系统从空闲物理块队列中取出一个物理块分配给该进程,并将调入的页装入,当队列中的物理块用完,OS从内存中选择一页调出。

  可变分配局部置换:为每个进程分配一定数目的物理块,若发生缺页,在内存中的页面中选出一个换出,若频繁的而发生缺页中断,系统为该进程分配若干个附加的物理块。

2.2、物理块的分配算法

1、平均分配算法

  将所有可供分配的物理块平均分给各进程。

2、按比例分配算法

  根据进程的大小按比例分配物理块。

3、优先权分配算法

  根据进程的优先权分配物理块。

2.3、调页策略

1、调入页面的时机

1.1、预调页策略

  预测为基础的预调页策略,将预计在不久之后会被访问的页面预先调入内存。

1.2、请求调页策略

  进程在运行中需要访问某部分程序和数据,发现所在的页面不在内存,向OS提出请求将所需页面调入内存。

2、何处调入页面

  请求分页系统中外存分为两部分:存放文件的文件区 和 存放对换页面的对换区。

  对换区采用连续分配的方式,文件区采用离散分配方式,对换区的磁盘I/O比文件区高。

1、系统拥有足够的对换区空间

  全部从对换区调入所需页面,提高调页速度。

  进程运行前,将该进程有关文件从文件区拷贝到对换区。

2、系统缺少足够的对换区空间

  不会被修改的文件从文件区调入,换出这些页面时,由于未被修改不必将它们换出,再调入时直接从文件区调入;

  可能被修改的文件,换出时,调到对换区,需要时再从对换区调入。

3、页面调入过程

程序访问的页面不在内存中:

  1、向CPU发出缺页中断,中断程序保留CPU环境,分析中断原因后转入缺页中断处理程序;

  2、程序通过查找页表,得到该页在外存的物理块;

  3、若此时内存能容纳新页,启动磁盘I/O将所缺之页调入内存,在修改页表;若内存已满,按某种置换算法从内存中换出一页,若该页已被修改,必须写回磁盘,然后将所缺的页调入内存;

  4、修改页表中的表项,存在为设置为1,将此项写入快表。

  在缺页调入内存后,利用修改后的页表,形成所要访问数据的物理地址,再去访问内存数据。

3、页面置换算法

  进程运行时,发生缺页中断,需要将缺少的页面调入内存,此时内存无空闲空间,必须从内存中调出一页至磁盘的对换区。

  在物理内存和对换区之间进行换入换出操作,把选择换出页面的算法 称为 页面置换算法。

3.1、最佳置换(OPT)算法

  保障最低缺页率,每次选择淘汰最不可能再次被使用的页面、无法实现。

3.2、先进先出(FIFO)页面置换算法

  保障顺序上的公平,每次选择淘汰最早进入内存的页面。

3.3、最近最久未使用(LRU)置换算法

  保障时间和距离上的公平,每次选择淘汰最久最近未使用的页面、需要硬件支持,开销大

3.4、时钟置换算法NRU

  保障性能和开销均衡,为页面设置访问位(0/1),并链接成循环队列,进程访问页面后置为1。淘汰时为1置为0并跳过,为0时淘汰。最多需要两轮扫描

3.5、改进型时钟置换算法

  额外考虑是否修改,保障最少I/O操作,增加修改位(0/1),第一轮找(0,0),第二轮找(0,1)并修改访问位为0,第三轮找(0,0),第四轮找(0,1);最多需要四轮。

 

标签:存储管理,请求分页,调入,内存,页表,该页,缺页,OS,页面
From: https://www.cnblogs.com/RunningSnails/p/17648993.html

相关文章

  • OS(九):储存器管理之请求分段存储管理方式
    1、段表机制段表的段表项:存取方式:标识本分段的存储属性是只执行、只读、还是允许读/写;访问字段A:记录该段被访问的频繁程度;修改为M:该段在进入内存后是否已被修改过;存在为P:该段是否已调入内存;增补位:表示本段在运行过程中是否做过动态增长;外存始......
  • Postgresql检查点
    一、 检查点触发机制在PostgreSQL中,检查点(后台)进程执行检查点;当发生下列情况之一时,其进程将启动:1、检查点间隔时间由checkpoint_timeout设置(默认间隔为300秒(5分钟))2、在9.5版或更高版本中,pg_xlog中WAL段文件的总大小(在10版或更高版本中为pg_WAL)已超过参数max_WAL......
  • OS(七):存储器管理之内存管理方式
    1、连续分配方式连续分配方式:为用户程序分配一个连续的内存空间。连续分配有4种方式,分别为单一连续分配、固定分区分配、动态分区分配及动态重定位分配。1.1、单一连续分配作用与单用户、单任务操作系统。内存被分为系统区和用户区,系统区供OS使用,通常放在......
  • Django项目在CentOS7下部署
    Ubuntu部署Django项目方法详解:请看此文https://www.django.cn/article/show-22.html Django所有的部署都是基于asgi和wsgi,所以django早就设计好了,你们使用对应的方式部署都好,这里不做细讲,看相关文章即可。 部署是基于:centos7+nginx+uwsgi+python3+django之上做的软件版......
  • iOS开发之--获取验证码倒计时及闪烁问题解决方案
    大家在做验证码的时候一般都会用到倒计时,基本上大家实现的方式都差不多,先贴出一些代码来..-(void)startTime{__blockinttimeout=59;//倒计时时间dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);dispatch_source......
  • 使用docker-compose安装Milvus向量数据库及Attu可视化连接工具
    服务器需要安装docker-compose如何没有安装可以参考这篇博客https://www.cnblogs.com/likecoke/p/17596918.html1、创建宿主机上存储的目录mkdir-p/home/milvus/dbmkdir-p/home/milvus/confmkdir-p/home/milvus/etcd2、下载milvus官网的docker-compose.yml文件wgethtt......
  • ios开发之--NSNumber的使用
    什么是NSNumber?NSArray/NSDictionary中只能存放oc对象,不能存放基本数据类型,如果想把基本数据类型放进去,需要先把基本数据类型转换成OC对象,代码如下:inta=10;intx=100;floatf1=3.23f;doubled1=2.34;//int--->obj//numberWithInt把in......
  • ios开发之--UISearchDisplayController的简单使用
    控件就不介绍了,UISearchDisplayController就是把searbar和tableview结合到一块了,直接上代码:.h#import<UIKit/UIKit.h>@interfaceThirdViewController:UIViewController<UITableViewDelegate,UITableViewDataSource>{NSArray*_array;NSArray*_filterData;UI......
  • ios开发之--pop到指定页面
    1推出到根视图控制器[self.navigationControllerpopToRootViewControllerAnimated:YES];2推出到指定的视图控制器 for(UIViewController*controllerinself.navigationController.viewControllers){if([controllerisKindOfClass:[AViewControllerclass]]){......
  • ios开发之--ios11适配:TableView的heightForHeaderInSection设置高度无效/UISearchBar
    更新到ios11,然后使用x-code9运行项目,发现tableview的-(CGFloat)tableView:(UITableView*)tableViewheightForHeaderInSection:(NSInteger)section方法不走,所以页面也华丽丽的变成了一排的cell,通过查看文档和资料,原来是ios11默认开启self-sizing,把这个属性关系即可,具体代码如下:sel......