实验5分页式存储管理 - 范文中心

实验5分页式存储管理

03/30

实验五 分页式存储管理

一、实验目的

通过编写分页式存储管理的模拟程序,加深对页式存储管理方式的理解,熟悉逻辑地址到物理地址的转换过程,掌握虚拟存储管理中的页面调度算法,认识分页式虚拟存储系统中缺页中断的处理过程。

二、实验内容

1、设计一个分页式虚拟存储系统,用程序模拟实现,假设页面大小为1K,每个作业分配三个页面。

2、页面调度分别采用FIFO调度算法和最佳置换算法。(淘汰页面时直接将该页面从内存中直接淘汰,不考虑该页面是否被修改,是否需要保存到外存。)

3

4操作符 页号1 页内地址1 页号2 页内地址2 表示将页面1内地址为011单元的

内容和页面2中地址为051的单元的内容相加。例如:

5面调度算法,淘汰之前内存中相应页,然后该页放进内存。

6、要求每执行上述指令流中的一条逻辑指令,输出相应的物理指令,若页表有修改,则显示修改后的页表。

这次试验是用Java 写的。

首先,在页表类中,该类定义为:

Page.java:

package 操作系统;

public class Page {

private int pageNo; //表示页号码

private int mark; //表示标志

private int blockNo; //表示主存块号

public Page(int pageNo, int mark, int blockNo) {

super();

this.pageNo = pageNo;

this.mark

this.blockNo = blockNo;

}

public int getPageNo() {

return pageNo;

}

public void setPageNo(int pageNo) {

this.pageNo = pageNo;

}

public int getMark() {

return mark;

}

public void setMark(int mark) {

this.mark = mark;

}

public int getBlockNo() {

return blockNo;

}

public void setBlockNo(int blockNo) {

this.blockNo = blockNo;

}

}

其次,我将操作指令封装成一个类,该类为:

Command.java:

package 操作系统;

public class Command {

private static int fifoindex=0; //下面有解释

private static int optimalIndex = 0; //跟上面 一个一样 private int pageNo; //表示页号

private String pageAdd; //表示业内地址

public Command() {

}

public Command(int pageNo, String pageAdd) {

super();

this.pageNo = pageNo;

this.pageAdd = pageAdd;

}

public int getPageNo() {

return pageNo;

}

public void setPageNo(int pageNo) {

this.pageNo = pageNo;

}

public String getPageAdd() {

return pageAdd;

}

public void setPageAdd(String pageAdd) {

this.pageAdd = pageAdd;

}

前面部分就是设置与获取操作指令中的私有属性。

下半部分分别是Fifo算法和最优置换算法。

//该函数用来判断指令中的页号是否在主存当中

boolean isInMain(Page page[] ,Command first) {

if(page[first.getPageNo()].getMark() == 1) {

return true;

}

return false;

}

//用来输出当前主存中的页表

void printPage(Page page[] ,Command first,Command

second,String oper) {

System.out.println("当前主存的页表为:");

System.out.println("页号 " + " 标志 " + " 主存块号" );

for(int i=0;i

System.out.print(" " + page[i].getPageNo()); System.out.print(" " + page[i].getMark());

System.out.println(" " + page[i].getBlockNo()); }

System.out.println();

System.out.println("当前的物理指令为:"

+ oper + " " + first.getPageNo() + " " + first.getPageAdd() + " " + second.getPageNo() + " " +

second.getPageAdd());

}

//用来表示输出结果

void print(Command first, String oper,Command second ,Page page[]) {

int index1 = 0,index2 = 0;

for(int i=0;i

if(first.getPageNo() == page[i].getPageNo()) { index1 = i;

}

if(second.getPageNo() == page[i].getPageNo()) { index2 = i;

}

}

if(oper.equals("读")) {

System.out.println("(" + page[index1].getBlockNo() + first.getPageAdd() + ")" + "(" +

page[index2].getBlockNo() +second.getPageAdd() + ")" );

}else {

System.out.println("(" + page[index1].getBlockNo() + first.getPageAdd() + ")" + (String)oper + "(" + page[index2].getBlockNo() +second.getPageAdd() + ")" );

}

}

//该函数是将在外存的页号调入主存中

void fifoChangeLocation(Page page[] ,Command first) {

/*如果不在主存当中,那么最最最最最最最最最最最最起初当然是删除第一个,

* 然后把该页号送进这块主存的地方,然后fifoindex递增一次,当到达最后一个时候要返回第一个,

* 所以要设置循环,所以fifoindex= fifoindex%3

*/

page[fifoindex].setMark(0);

page[fifoindex].setPageNo(first.getPageNo());

fifoindex++;

fifoindex = fifoindex % 3;

}

//FIFO算法

void fifoOperate(String oper, Command first, Command second, Page page[] )

{

//首先进来对两个页号进行判断,看其是否在主存之中.如果不在主存块中,那么根据先进先出原则,把

if(!isInMain(page,first)) {

//如果不在内存中,实行调换

fifoChangeLocation(page,first);

}

if(!isInMain(page,second)) {

fifoChangeLocation(page,second);

}

printPage(page,first,second,oper);

print(first,oper,second,page);

System.out.println();

}

//y用来判断主存中三个页号最晚出现的页号

int min(int a,int b,int c) {

int min = a;

if(min

min = b;

if(min

min = c;

}

}

return min;

}

//最优置换算法将外存的页号调入内存

//用来进行调换外存页号与要被替换的主存页号

void optimalChangeLocation(Page page[],Command

character[],Command first ) {

int firstNum = -1; //用来记录外存中

int secondNum = -1;

int thirtNum = -1;

for(int i=0;i

if(page[0].getPageNo() == character[i].getPageNo()) { firstNum = i;

}

if(page[1].getPageNo() == character[i].getPageNo()) { secondNum = i;

}

if(page[2].getPageNo() == character[i].getPageNo()) { thirtNum = i;

}

//这边我只在乎谁最后一个出现

if(firstNum != -1 && secondNum != -1 && thirtNum != -1) {

break;

}

}

int = min(firstNum,secondNum,thirtNum);

page[optimalIndex].setMark(0);

page[optimalIndex].setPageNo(first.getPageNo());

optimalIndex++;

optimalIndex = optimalIndex % 3;

}

//最优置换算法操作

void optimalOperate(Command character[],Page page[],String oper, Command first,Command second) {

if(!isInMain(page,first)) {

optimalChangeLocation(page,character,first);

}

if(!isInMain(page,second)) {

optimalChangeLocation(page,character,second);

}

printPage(page,first,second,oper);

print(first,oper,second,page);

System.out.println();

}

}

在主函数中:

即在TestMain.java:

package 操作系统;

public class TestMain {

public static void main(String[] args) {

//首先对页表进行初始化

Page A = new Page(0,1,3);

Page B = new Page(1,1,4);

Page C = new Page(2,1,5);

Page D = new Page(3,0,0);

Page E = new Page(4,0,0);

Page F = new Page(5,0,0);

Page page[] = {A,B,C,D,E,F};

//然后再植入指令序列

Command a = new Command(0, "030");

Command b = new Command(2, "003");

Command c = new Command(1, "050");

Command d = new Command(2, "005");

Command e = new Command(2, "001");

Command f = new Command(5, "004");

Command g = new Command(3, "007");

Command h = new Command(1, "031");

Command i = new Command(4, "034");

Command j = new Command(3, "025");

Command character[] = {a,b,c,d,e,f,g,h,i,j};

Command operate = new Command();

operate.fifoOperate("+", a, b, page);

operate.fifoOperate("-", c, d, page);

operate.fifoOperate("*", e, f, page);

operate.fifoOperate("/", g, h, page);

operate.fifoOperate("读", i, j, page);

//(3030 + 5003 4050-5005 5001*3004 4007/5031 3034 读 4025)

System.out.println("最优置换算法输出结果:");

operate.optimalOperate(character,page,"+", a, b); operate.optimalOperate(character,page,"-", c, d); operate.optimalOperate(character,page,"*", e, f); operate.optimalOperate(character,page,"/", g, h); operate.optimalOperate(character,page,"读", i, j); }

}

最后的实验结果:


相关内容

  • 实验二(存储管理)虚拟页式管理
    实验二 虚拟页式管理 1.实验内容:模拟请求页式存储管理中硬件的地址转换和缺页中断,并用先进先出调度算法(FIFO )处理缺页中断: 2.要求: ① 指令序列的设定可以执行拟定,格式如表3: ② 在完成了FIFO 换页策略后,可以选做LRU ...
  • 数据库原理实验指导书(Mysql)
    数据库原理实验指导书 实验项目列表 实验一:数据库的定义实验 一.实验目的: 1.理解MySQL Server 6.0 服务器的安装过程和方法: 2.要求学生熟练掌握和使用SQL .T-SQL .SQL Server Enterpriser ...
  • 单片机实用技术
    单片机实用技术 作者:shenxq301 1 首先介绍经济使用的单片机AVR 使用学习板快速入门,尤其实用于在校学生和刚刚工作的工程技术人员. AVR mega16学习板 单价:240 元 该学习板可以从正规途径买到正版,当然也可从旧货市场 ...
  • 交通灯课程设计内容
    硬件大型实验周设计说明书11.1引言设计背景 自从 1886 两个德国人发明了第一辆汽车交通灯改变了交通路况,交通问题也渐渐被人们所重视.从英国伦敦街头的第一个以燃煤气为光源的红,蓝两色的机械 扳手式信号灯,到现在以电为光源的红黄绿三色交通 ...
  • 存储器实验报告
    存储器扩展实验报告 班级 姓名 学号 日期 一. 相关知识: 1. 教学机配置了6个存储器芯片插座,其中4个28芯插座可插只读存储器,2个24芯插座可插静态随机存储器6116. 2. 在教学机中,已经放置了2片8K×8位的ROM和2片2K× ...
  • 物流实验室实训报告
    物流实验室实践报告 课题名称:物流实验室参观报告 学院系别: 指导老师: 专业:工商管理 班级:12级工商2班 组号:1组 成员: 时间:2014年12月12日(第15周)上午9.30-10.20 地点:七系教学楼A201物流实验室 一.序 ...
  • 20**年考研择校:计算机专业院校排名
    2017考研择校:计算机专业院校排名 2017考研择校:计算机专业院校排名 中国研究生教育计算机专业排名计算机系统结构前20名(总共47所高校) 1. 清华大学(招生办) ,2. 华中科技大学,3. 西安交通大学,4. 上海交通大学,5. ...
  • 上海大华电子秤实验指导
    上海大华电子秤系统概述 上海大华电子秤系统有上位机和条码电子秤两部分组成,该系统主要通过对上位机软件的的设置来实现对条码电子秤的控制,来输出商品信息(Plu ).同时也可以独立操作条码电子秤,对尚未录入系统的商品进行单独的称重计价.系统主要 ...
  • 三菱PLC可编程控制器教材
    第一章 可编程控制器概况 可编程控制器(PROGRAMMABLE CONTROLLER,简称PC ).与个人计算机的 PC 相区别,用PLC 表示. PLC 是在传统的顺序控制器的基础上引入了微电子技术.计算机技术.自 动控制技术和通讯技术 ...
  • 浅谈多媒体技术及在教育领域中的应用_论文
    浅谈多媒体技术及在教育领域中的应用 随者计算机多媒体技术的突飞猛进,多媒体凭借着自身的优势越来越受到广泛关注和应用,它的出现已经改变了传统意义上的人们的工作与生活方式,对人类社会的的发展产生了巨大的影响. 多媒体技术是当今信息技术领域发展最 ...