操作系统报告3

更新时间:2023-03-08 10:10:26 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软 件 学 院 实 验 报 告

课程名称: 操作系统原理 实验项目: 虚拟内存页面置换算法 实 验 室: 姓 名: 学 号: 专业班级: 实验时间: 2014.12.21

实验成绩

评阅教师

一、 实验目的及要求 通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。结合Linux的内层的分析方法查看内存的分配过程及linux kernel的内存管理机制。 二、 实验性质 设计性 三、实验学时 2学时 四、实验环境 1.实验环境: C与C++程序设计学习与实验系统 2.知识准备: (1)使用Linux的基本命令; (2)了解Linux vmstat、free、top等命令查看linux系统的内存分配情况; (3)掌握虚拟内存页面置换算法FIFO等基本算法理论。 五、实验内容及步骤 假设有n个进程分别在T1, … ,Tn时刻到达系统,它们需要的服务时间分别为S1, … ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。 通过已知最小物理块数、页面个数、页面访问序列、及采用置换方式可以得出页面置换的缺页次数和缺页率,及每次缺页时物理块中存储。 1.输入的形式 int PageOrder[MaxNumber];//页面序列 int PageNum,LackNum=0,BlockNum;//页面个数,缺页次数,最小物理块数 2. 输出的形式 double LackPageRate//缺页率 缺页个数 每次缺页时物理块中存储 程序所能达到的功能 模拟先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, … ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。 程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。 int PageOrder[MaxNumber];//页面序列 int PageCount[MaxNumber]={0};//计算内存内数据离下一次出现的距离 int PageNum,LackNum=0,BlockNum;//页面个数,缺页次数,最小物理块数 double LackPageRate=0; bool found=false; 3.程序流程图 程序流程图如图5-3-1所示。 图5-3-1 算法流程图 六、实验数据及结果分析 (一)调试过程中出现的问题及解决方法 1.遇到的问题 调试中,中文字符出现编码错误; 2.解决方法 更改终端的编码方式。 (二)实验执行的结果 1.FIFO算法执行结果如图6-2-1所示。 2.OPT算法执行结果如图6-2-2所示。 图6-2-1 FIFO算法执行结果 3.LRU算法执行结果如图6-2-3所示。 图6-2-2 OPT算法执行结果 图6-2-3 LRU算法执行结果

} public void setId(int id) { this.id = id; } public int getCount() { return count; } public void inc() { count ++; } public void setCount(int count) { this.count = count; } } 4.import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Scanner; public class LRU { /** * 最近最久未使用算法 */ private static final int PRO_MEMORY = 5;//系统分配的内存块数 private static Page[] pages = new Page[PRO_MEMORY]; private static int count ;//纪录当前在使用的总页面数 private static int lackTime;//缺页次数 private List usePageNumList = new ArrayList();//页面使用列表 public static void main(String[] args) { System.out.println(\最近最久未使用算法------------\ LRU lru = new LRU(); lru.init(); lru.input(); lru.running(); } //初始化 public void init(){ for(int i=0;i it = usePageNumList.iterator(); //列表置入替换 while(it.hasNext()){ int inPageId = it.next(); //查找内存中是否有该页面 if(search(inPageId)){ System.out.println(\内存中有ID为\这个页面,不进行替换\ } else if(count

本文来源:https://www.bwwdw.com/article/uuu6.html

Top