模拟请求分页系统中的地址变换过程(java)

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

创建请求页表,通过编程模拟缺页中断和地址变换,实现请求调页功能和页面置换功能。

环境

JDK8+eclipse

步骤

(一)请求页表及快表的创建

012345
页号物理块号状态位P访问字段A修改位M外存地址

物理块号:当页在外存时为外存的物理块号,在内存时为内存的物理块号。
状态位P:0为此页在外存,1为此页在内存。
访问字段A:该页被访问的次数。
修改位M:0为该页未被修改,1为该页被修改。
外存地址:等于该页的外存物理块号。

  分析页表发现由于涉及多行多列数据的输入输出,所以需要创建一个二维数组,一行作为一页,各列作为组成页表的状态位P、修改位M等元素。但通过实际操作发现,在调用页表的i页中某一元素时,需要通过page[i][j]的方式,这样很难区分各个元素。因此将页表的各个元素分别用一维数组表示,页号用一维数组的下标表示,便解决了区分困难的问题,例如:页号为i的页的访问字段“visitA[i]”。

  而分析快表发现其结构与页表相同,因此只需要创建一个一维数组来存放从页表中调入的页的页号即可。

(二)分析请求分页系统中的地址变换过程(下面出现的各方法均在(三)中展示)

分析流程图整理编程思路:
在这里插入图片描述
  在进行地址变换时,首先输入请求访问的逻辑地址然后pageNum()方法计算出页号,if判断此页页号是否大于页表长度,如果大于则越界中断。(下图)
在这里插入图片描述

  如果小于则for循环检索快表,if语句判断所要访问的页是否在快表里,如果找到,则修改访问位和修改位并输出物理地址(由于此操作需要在代码中多次出现所以将其写成一个方法,即方法changeAM())。(下图)
在这里插入图片描述

  如果在快表中未找到要访问页,则应到内存中去查找该页,即if判断该页的页表项中状态位statusP[pageNum()]是否为1。若为1则表示已调入内存,这时应将该页写入快表(修改快表的方法为changeFast()),然后修改访问位和修改位并输出物理地址。(下图)
在这里插入图片描述
  若该页尚未调入内存,即状态位statusP[pageNum()]为0,这时应产生缺页中断(缺页中断方法为MPI()),请求OS从外存把该页调入内存。(下图)
在这里插入图片描述
  缺页中断(方法MPI()),请求OS将所缺之页调入内存,这时需要 if 判断内存是否已满,即内存大小 inStore 是否等于0,不为0则内存未满,将此页调入内存,内存空间大小减去为此页分配的空间(下图),
在这里插入图片描述
  修改页表,修改快表,形成物理地址。为0则内存已满,需要将内存中访问次数(即访问位 visitA[])最少的页换出,即将状态位 statusP[min] 置为0,并将换出页所占的内存物理块分配给换入页。(下图)
在这里插入图片描述
  同时需要 if 判断换出页是否被修改,即判断修改位 ChangeM[min] 是否为1,为1则被修改,将该页写回内存,为0则未被改变。(下图)
在这里插入图片描述
  修改页表,修改快表,形成物理地址。(下图)
在这里插入图片描述
(三)构建的方法
1、pageNum() 方法:页号等于逻辑地址整除页面大小,返回页号(下图)
在这里插入图片描述
2、pageAdd() 方法:偏移量等于逻辑地址除以页面大小取余,返回偏移量(下图)
在这里插入图片描述
3、changeAM() 方法:修改访问位和修改位,形成物理地址(下图)
在这里插入图片描述
4、changePage() 方法:从外存读缺页,将请求页换入内存,修改页表,即换入页的状态位置为1( statusP[pageNum()]=1 )(下图)
在这里插入图片描述
5、changeFast() 方法:修改快表
(1)如果快表满(下图)
在这里插入图片描述
(2)如果快表未满(下图)
在这里插入图片描述
6、TrueAdd() 方法:形成物理地址(下图)
在这里插入图片描述
7、putFP() 方法:输出快表方法(下图)
在这里插入图片描述
8、putPage() 方法:输出页表方法(下图)
在这里插入图片描述
(四)运行结果示范

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  (注:页表中物理块号和外存地址相同时,说明该页在外存,此时的物理块号是此页在外存的物理块号,当该页被调入内存后,物理块号才会变成分配给它的内存物理块号)

结论

  想要实现模拟请求分页系统中的地址变换,首先要分析页表的各个元素所代表的含义以及页表与外存、内存和快表之间的联系。页表就相当于一个记录本,上面记录着各个页的当前状态,系统通过检索页表上页的状态来对页进行调入调出操作。

代码文件下载

链接: https://download.csdn.net/download/qq_49101550/15481871

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开朗小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值