面置换算法模拟程序附代码
- 格式:docx
- 大小:96.45 KB
- 文档页数:15
****学院计算机科学系课程设计报告设计名称:软件课程设计设计题目:页面置换算法模拟程序学生学号:****专业班级:学生姓名:学生成绩:指导教师(职称):课题工作时间:2010.5.31至2010.6.11说明:1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个学生;四、五两项(中英文摘要)由学生在完成综合设计后填写。
2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。
3、指导教师评语一栏由指导教师就学生在整个设计期间的平时表现、设计完成情况、报告的质量及答辩情况,给出客观、全面的评价。
4、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。
答辩小组成员应由2人及以上教师组成。
5、报告正文字数一般应不少于3000字,也可由指导教师根据本门综合设计的情况另行规定。
6、平时表现成绩低于6分的学生,取消答辩资格,其本项综合设计成绩按不及格处理。
计算机科学系课程设计任务书王渊博哈夫曼编码的另一种实现算法[J] 安徽教育学院学报2009(6)严蔚敏.吴伟民数据结构[M] 高等教育2004指导教师:系主任:日期:2010 年 5 月 28 日计算机科学系课程设计进度安排表指导教师签名:2010年5 月 28 日指导教师评语答辩记录表成绩评定表学生姓名:学号:班级:摘要操作系统(英语;Operating System,简称OS)是一管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石。
操作系统身负诸如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。
操作系统是管理计算机系统的全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机界面;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面。
操作系统是一个庞大的管理控制程序,大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理。
页⾯置换算法之Clock算法1.前⾔缓冲池是数据库最终的概念,数据库可以将⼀部分数据页放在内存中形成缓冲池,当需要⼀个数据页时,⾸先检查内存中的缓冲池是否有这个页⾯,如果有则直接命中返回,没有则从磁盘中读取这⼀页,然后缓存到内存并返回。
但是内存的价值较⾼,⼀般来说服务器的内存总是⼩于磁盘⼤⼩的,⽽且内存不能完全分配给数据库作为缓冲池。
这就意味着数据库基本上⽆法将所有的数据都缓冲到内存中。
当缓冲池满后,如果还有新的页⾯要被缓冲到池中,就要设计⼀种页⾯置换的算法,将⼀个旧的页⾯替换成新的页⾯。
⼀般来说我们熟悉的算法有下⾯⼏种:下⾯逐⼀介绍各种算法。
2. 最佳置换算法如果被替换掉的页是以后再也不会使⽤的,那么这种算法⽆疑是最优秀的。
因为不管什么算法,替换掉的页也有可能再次被缓存,替换掉其它的页。
但是这种算法是⽆法实现的,我们不可能知道哪个页⾯以后也在不会被使⽤。
或者我们退⼀步,将这个算法改成被替换掉的页是以后很长⼀段时间都不会再次被使⽤的,那么这种算法⽆疑也是最优秀的。
但是还是会⾯对⼀个⽆法实现的问题,我们还是不知道哪些页⾯会在未来多长⼀段时间内不会被再次访问。
页⾯⽆法确认,时间也⽆法确定。
虽然这种算法⽆法被实现,但是可以作为⼀种度量,如果有⼀种算法其效率最接近OPT,那么这种算法⽆疑是优秀的算法。
3. 先进先出算法先进先出算法是⼀种很简单的算法,其基本思想是形成⼀个队列,最先⼊队的页⾯最先被逐出。
我们⽤⽰意图来模拟⼀下FIFO算法:我们的内存假设只能保存4个页⾯,此时的访问请求按照时间顺序是1->2->3->4->5,那么按照时间顺序,当访问到4号页⾯时队列正好填满,当要访问5号页⾯时,会将最先⼊队的1号页⾯逐出。
这种算法实现起来很简单,但是从实现上来看,性能和OPT算法差距最⼤。
因为被替换出去的页⾯很有可能是最常使⽤的页⾯,因此这个算法很少见出现在数据库缓冲池管理中的。
FIFO算法会出现⼀个叫做Belay异常的现象,就这个现象我们解释如下。
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <malloc.h>#define M 4 //物理页数#define N 20 //需要调入的页数#define LEN sizeof(struct node)/** @auther by 12281201 sunyangwei*/typedef struct page{int num;int time;}Page; //物理页项,包括调入的页号和时间struct node //定义空闲链表数据结构{int num;struct node *next;};Page mm[M]; //3个物理页int K=0,S=0,T=0,Q=0; //记录缺页率int pos=0;//记录存在最长时间项//初始化内存页表项及存储内存情况的空间void INIT(){int i;for(i=0;i<M;i++){mm[i].num =-1;mm[i].time =0;}}//建立链表struct node* create(){struct node *head;head = (struct node*)malloc(LEN);head->next = NULL;return (head);}//打印链表void print(struct node * head)struct node * p;printf("Now,链表页面:");p=head->next;if(p==NULL){printf("链表为空\n");}else {do{printf("%3d",p->num);p=p->next;}while(p!=NULL);}printf("\n");}//链表插入结点(页)struct node* insert(struct node* head,struct node * newnode){struct node *p1;p1=head->next;if(p1==NULL)//原来的链表是空表,新的节点直接插到头结点后面{head->next=newnode;newnode->next = NULL;}else//如果不是空表,则遍历寻找合适的插入位置{while((p1->next!=NULL)){p1=p1->next;//后移}p1->next = newnode;newnode->next = NULL;}return(head);}//删除结点struct node* delete(struct node* head,int num){struct node *p1,*p2;p1=head->next;p2 = head;while(p1!=NULL&&num!=p1->num){p2=p1;p1=p1->next;}if(p1!=NULL&&num==p1->num){p2->next=p1->next;}return (head);}//取得内存中存在时间最久的位置int GetMax(){int max=-1;int i;for(i=0;i<M;i++){if(mm[i].time > max){max=mm[i].time ;pos=i;}}return pos;}//检查最长时间不使用页面int longesttime(int i,int array[]){int max=-1;mm[0].time=0;mm[1].time=0;mm[2].time=0;for(int q=0;q<M;q++){for(int count=i;count<N;count++){if(mm[q].num==array[count]){mm[q].time=count;break;}}}for(int iii=0;iii<M;iii++){if(mm[iii].time==0){pos = iii;break;}else if((mm[iii].time!=0) && (mm[iii].time>max) ){max=mm[iii].time;pos=iii;}}return pos;}int getPrePos(int i,int array[])//得到最久没有使用的页面位置{int min=20;mm[0].time=0;mm[1].time=0;mm[2].time=0;for(int r=0;r<M;r++){for(int p=i;p>=0;p--){if(mm[r].num == array[p]){mm[r].time = p;break;}}}for(int j=0;j<M;j++){if(mm[j].time<min){min = mm[j].time;pos=j;}}return pos;}int is_intable(int pagenum,struct node * head){struct node *temp;temp=head->next;/*取得链表的头指针*/while(temp!=NULL)/*只要是非空表*/{if(pagenum ==temp->num){return 1;}temp=temp->next;/*跟踪链表增长*/}return 0;}//检查某页是否在内存,不存在返回-1,存在返回物理块编号int Equation(int fold){int i;for(i=0;i<M;i++){if(mm[i].num == fold)return i;}return -1;}//检查物理内存是否已满,-1表满,其他不满int Check(){int i;for(i=0;i<M;i++){if(mm[i].num == -1)return i;}return -1;}//先进先出void FIFO(int fold){int i;int a,b,c;a=Equation(fold);//a代表物理块编号//页已存在if(a != -1){}//页不存在b=Check();//内存还有空闲if(b != -1){mm[b].num = fold;}//内存已满,需要置换else {c=GetMax();mm[c].num = fold;mm[c].time = 0;K++;}}printf("访问页面%d",fold);for(int j=0;j<M;j++){printf("%3d",mm[j].num);}printf("\n");for(i=0;i<M;i++){if(mm[i].num != -1){mm[i].time ++;}}}void OPT(int i,int array[]){int a,b,c;a=Equation(array[i]);if(a == -1){//页不在内存b=Check();//内存还有空闲if(b != -1){mm[b].num = array[i];}//内存已满,需要置换else{c=longesttime(i,array);mm[c].num = array[i];T++;}printf("访问页面%d",array[i]);for(int j=0;j<M;j++){printf("%3d",mm[j].num);}printf("\n");}void LRU(int i,int array[]){int a,b,c;a = Equation(array[i]);if(a == -1){//页不在内存b=Check();//内存还有空闲if(b != -1){mm[b].num = array[i];}//内存已满,需要置换else{c=getPrePos(i,array);mm[c].num = array[i];S++;}}printf("访问页面%d",array[i]);for(int j=0;j<M;j++){printf("%3d",mm[j].num);}printf("\n");}void PBA(int i,int array[],struct node * head)//与fifo算法类似,只是置换下来的页面存放在链表里面{int a,c;struct node * newnode;if(Equation(array[i]) !=-1){}//页已在内存else {//页不在内存a=Check();if(a != -1){//检查内存是否有空闲,有空闲,则不需要调换mm[a].num = array[i];}else{//内存没有空闲,需要置换页面//页面在链表里面if(is_intable(array[i],head)==1) {//页面在链表里面c=GetMax();//得到物理块中要被置换出来的页面//从链表里删除节点(页面)head = delete(head,array[i]);//在表尾插入置换下来的节点(页面)newnode=(struct node*)malloc(LEN);newnode->num= mm[c].num;head = insert(head,newnode);mm[c].num =array[i];mm[c].time = 0;}else{//不在链表里面c=GetMax();newnode=(struct node*)malloc(LEN);newnode->num= mm[c].num;head = insert(head,newnode);mm[c].num = array[i];mm[c].time = 0;Q++;printf("Q:%d\n",Q);print(head);}}}printf("访问页面%d",array[i]);for(int j=0;j<M;j++){printf("%3d",mm[j].num);}printf("\n");for(int p=0;p<M;p++){if(mm[p].num != -1){mm[p].time ++;}}}/*符合局部访问特性的随机生成算法确定虚拟内存的尺寸pageNum,工作集的起始位置p,工作集中包含的页数e,工作集移动率m(每处理m个页面访问则将起始位置p +1),以及一个范围在0和1之间的值t;生成m个取值范围在p和p + e间的随机数,并记录到页面访问序列串中;生成一个随机数r,0 ≤r ≤1;如果r < t,则为p生成一个新值,否则p = (p + 1) mod N;如果想继续加大页面访问序列串的长度,请返回第2步,否则结束。
数学建模常用的30个常用算法(python代码) 数学建模中使用的算法涉及多个领域,包括优化、统计、机器学习等。
以下是一些在数学建模中常用的30个算法的简要说明和Python代码示例。
请注意,这只是一小部分,具体应用场景和需求可能需要使用其他算法。
1.线性规划(Linear Programming):from scipy.optimize import linprog2.整数规划(Integer Programming):from scipy.optimize import linprog3.非线性规划(Nonlinear Programming):from scipy.optimize import minimize4.蒙特卡洛模拟(Monte Carlo Simulation):import numpy as np5.差分方程(Difference Equations):import numpy as np6.梯度下降法(Gradient Descent):import numpy as np7.贪心算法(Greedy Algorithm):def greedy_algorithm(values, weights, capacity):n = len(values)ratio = [(values[i] / weights[i], i) for i in range(n)]ratio.sort(reverse=True)result = [0] * ntotal_value = 0current_weight = 0for _, i in ratio:if weights[i] + current_weight <= capacity: result[i] = 1current_weight += weights[i]total_value += values[i]return result, total_value8.动态规划(Dynamic Programming):def dynamic_programming(weights, values, capacity): n = len(values)dp = [[0] * (capacity + 1) for _ in range(n + 1)]for i in range(1, n + 1):for w in range(capacity + 1):if weights[i - 1] <= w:dp[i][w] = max(dp[i - 1][w], values[i - 1] + dp[i - 1][w - weights[i - 1]])else:dp[i][w] = dp[i - 1][w]return dp[n][capacity]9.遗传算法(Genetic Algorithm):import numpy as np10.模拟退火算法(Simulated Annealing):import numpy as np11.马尔可夫链(Markov Chains):import numpy as np12.蒙特卡洛树搜索(Monte Carlo Tree Search):import numpy as np13.K均值聚类(K-means Clustering):from sklearn.cluster import KMeans14.主成分分析(Principal Component Analysis):from sklearn.decomposition import PCA15.支持向量机(Support Vector Machine):from sklearn.svm import SVC16.朴素贝叶斯分类器(Naive Bayes Classifier):from sklearn.naive_bayes import GaussianNB17.决策树(Decision Tree):from sklearn.tree import DecisionTreeClassifier18.随机森林(Random Forest):from sklearn.ensemble import RandomForestClassifier19.K最近邻算法(K-Nearest Neighbors):from sklearn.neighbors import KNeighborsClassifier20.多层感知器(Multilayer Perceptron):from sklearn.neural_network import MLPClassifier21.梯度提升机(Gradient Boosting):from sklearn.ensemble import GradientBoostingClassifier22.高斯混合模型(Gaussian Mixture Model):from sklearn.mixture import GaussianMixture23.时间序列分析(Time Series Analysis):import statsmodels.api as sm24.马尔科夫链蒙特卡洛(Markov Chain Monte Carlo):import pymc3 as pm25.局部最小二乘回归(Local Polynomial Regression):from statsmodels.nonparametric.kernel_regression import KernelReg26.逻辑回归(Logistic Regression):from sklearn.linear_model import LogisticRegression27.拉格朗日插值法(Lagrange Interpolation):from scipy.interpolate import lagrange28.最小二乘法(Least Squares Method):import numpy as np29.牛顿法(Newton's Method):def newton_method(f, df, x0, tol=1e-6, max_iter=100):x = x0for i in range(max_iter):x = x - f(x) / df(x)if abs(f(x)) < tol:breakreturn x30.梯度下降法(Gradient Descent):def gradient_descent(f, df, x0, learning_rate=0.01, tol=1e-6, max_iter=100):x = x0for i in range(max_iter):x = x - learning_rate * df(x)if abs(df(x)) < tol:breakreturn x以上代码只是简单示例,实际应用中可能需要根据具体问题进行调整和扩展。
清华大学操作系统公开课(五)页面置换算法下面介绍在虚拟存储管理中有哪些页面置换算法。
局部页面置换算法最优页面置换算法(OPT,optimal)? 先进先出算法(FIFO)? 最近最久未使用算法(LRU,Least Recently Used)? 时钟页面置换算法(Clock)? 最不常用算法(LFU,Least Frequently Used)? Belady现象? LRU、FIFO和Clock的比较全局页面置换算法工作集模型? 工作集页置换算法? 缺页率置换算法2.页面置换算法当缺页中断发生,需要调入新的页面而内存已满时,选择内存当中哪个物理页面被置换。
尽可能地减少页面的换进换出次数(即缺页中断的次数)。
具体来说,把未来不再使用的或短期内较少使用的页面换出,通常只能在局部性原理指导下依据过去的统计数据来进行预测。
页面锁定(frame locking)页面锁定技术是用来锁定物理内存中不应该被换出的内存数据。
用于描述必须常驻内存的操作系统的关键部分或时间关键(time-critical)的应用进程。
实现的方法是:在页表中添加锁定标志位(lock bit)。
我们该如何评估不同页面置换算法的优劣?通过程序运行时的效率来比较是不容易实现的,可以记录下一个进程对页面的访问轨迹,然后模拟一个页面置换的行为并且记录产生页缺失的数量,以此比较优劣。
3.最优页面置换算法基本思路当一个缺页中断发生时,对于保存在内存当中的每一个逻辑页面,计算在它下一次访问之前,还需要等待多长时间,从中选择等待时间最长的那个,作为被置换的页面。
这只是一种理想情况,在实际系统中是无法实现的,因为操作系统无从知道每一个页面要等待多长时间后才会再次被访问。
可用作其它算法的性能评价的依据(在一个模拟器上运行某个城西,并记录每一次的页面访问情况,在第二遍运行时即可使用最优算法)。
物理内存大小为4个帧,刚开始存入的物理帧是a、b、c、d,一共需要载入5个帧,当访问e时发生缺页中断,此时置换入e,置换出d,因为下一次访问d的等待时间最长,暂时用不到d,可以让d待在外存。
“计算机操作系统”课程设计大作业页面置换算法模拟实验(含完整资料,可直接提交)一、题目: 页面置换算法模拟实验二、目的分别采用最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最少使用(LRU)置换算法对用户输入的页面号请求序列进行淘汰和置换,从而加深对页面置换算法的理解。
三、内容和要求请用C/C++语言编一个页面置换算法模拟程序。
用户通过键盘输入分配的物理内存总块数,再输入用户逻辑页面号请求序列,然后分别采用最佳(Optimal)置换算法、先进先出(FIFO)页面置换算法和最近最少使用(LRU)置换算法三种算法对页面请求序列进行转换,最后按照课本P150页图4-26的置换图格式输出每次页面请求后各物理块内存放的虚页号,并算出总的缺页率(缺页次数/总的请求次数)。
最后三种页面置换算法的优缺点。
三种页面置换算法的思想可参考教材P149-P152页。
假设页面号请求序列为4、3、2、1、4、3、5、4、3、2、1、5,当分配给某进程的物理块数分别为3块和4块时,试用自己编写的模拟程序进行页面转换并输出置换图和缺页次数、缺页率。
四、提交内容本大作业每个人必须单独完成。
最后需提交的内容包括:源程序(关键代码需要注释说明)、可运行程序、运行结果、算法思路及流程图、心得体会。
大作业严禁抄袭。
发现抄袭一律以不及格论。
请大家严格按照大作业题目来编写程序,不要上交以前布置的大作业。
如果提交的大作业题目与本文档要求不符,成绩一律为及格。
目录摘要 (2)正文 (2)1、设计思路 (3)2、各模块的伪码算法 (6)3、函数的调用关系图 (8)4、测试 (13)设计总结 (15)参考文献 (16)致谢 (17)附录:部分源程序代码 (18)摘要UNIX中,为了提高内存利用率,提供了内外存进程对换机制;内存空间的分配和回收均以页为单位进行;一个进程只需将其一部分(段或页)调入内存便可运行;还支持请求调页的存储管理方式。
页面置换算法实验报告一、实验目的本次实验的目的是通过模拟页面置换算法的过程,了解不同算法的优缺点,掌握算法的实现方法,以及对算法的性能进行评估。
二、实验原理页面置换算法是操作系统中的一个重要概念,它是为了解决内存不足的问题而产生的。
当系统中的进程需要使用内存时,如果内存已经被占满,就需要将一些页面从内存中置换出去,以便为新的页面腾出空间。
页面置换算法就是用来决定哪些页面应该被置换出去的算法。
常见的页面置换算法有以下几种:1. 最佳置换算法(OPT)最佳置换算法是一种理论上的最优算法,它总是选择最长时间内不会被访问的页面进行置换。
但是,由于无法预测未来的页面访问情况,因此最佳置换算法无法在实际中使用。
2. 先进先出置换算法(FIFO)先进先出置换算法是一种简单的置换算法,它总是选择最先进入内存的页面进行置换。
但是,这种算法容易出现“抖动”现象,即频繁地将页面置换出去,然后再将其置换回来。
3. 最近最久未使用置换算法(LRU)最近最久未使用置换算法是一种比较常用的置换算法,它总是选择最长时间未被访问的页面进行置换。
这种算法可以避免“抖动”现象,但是实现起来比较复杂。
4. 时钟置换算法(Clock)时钟置换算法是一种改进的FIFO算法,它通过维护一个环形链表来实现页面置换。
当需要置换页面时,算法会从当前位置开始扫描链表,如果找到一个未被访问的页面,则将其置换出去。
如果扫描一圈后都没有找到未被访问的页面,则将当前位置的页面置换出去。
三、实验过程本次实验使用Python语言编写了一个页面置换算法模拟程序,可以模拟上述四种算法的过程,并输出算法的性能指标。
程序的主要流程如下:1. 读取输入文件,获取页面访问序列和内存大小等参数。
2. 根据选择的算法,初始化相应的数据结构。
3. 遍历页面访问序列,模拟页面置换的过程。
4. 输出算法的性能指标,包括缺页率、页面置换次数等。
下面分别介绍四种算法的实现方法。
1. 最佳置换算法(OPT)最佳置换算法需要预测未来的页面访问情况,因此需要遍历整个页面访问序列,找到最长时间内不会被访问的页面。
页面淘汰算法一、什么是页面淘汰算法?页面淘汰算法是指在计算机系统中,为了减少内存的使用,将一些不常用的页面从内存中移除,以便为其他需要更多内存的程序腾出空间。
页面淘汰算法根据不同的策略选择要移除的页面,以最大化系统性能和资源利用率。
二、常见的页面淘汰算法有哪些?1. 最近最少使用算法(LRU)LRU算法是一种基于时间局部性原理的页面置换算法。
它认为如果一个页面最近被访问过,那么它可能在不久的将来也会被访问。
因此,LRU算法选择最近最少使用的页面进行淘汰。
2. 先进先出算法(FIFO)FIFO算法是一种简单而直观的页面置换策略。
它按照进入内存时间顺序进行淘汰,即先进入内存的页面先被淘汰。
3. 时钟置换算法(Clock)时钟置换算法是一种改进版FIFO算法。
它通过维护一个“指针”,指向最老的未被访问过的页面,并将该指针逐个往后移动。
当需要淘汰一个页面时,如果该页已被访问过,则将其标记为“未访问过”并继续移动指针,直到找到一个“未访问过”的页面为止。
4. 最不经常使用算法(LFU)LFU算法是一种基于统计局部性原理的页面置换算法。
它认为如果一个页面在一段时间内被访问的频率很低,那么它在未来也很少被访问。
因此,LFU算法选择最不经常使用的页面进行淘汰。
5. 随机置换算法(Random)随机置换算法是一种简单而随意的页面置换策略。
它随机选择一个页面进行淘汰,没有任何规则可言。
三、如何选择合适的页面淘汰算法?选择合适的页面淘汰算法需要考虑以下几个方面:1. 系统负载情况如果系统负载较重,应该选择效率较高、实现简单的置换算法,如FIFO和Clock;如果系统负载较轻,则可以选择效果更好但实现更复杂的LRU和LFU算法。
2. 计算资源不同的置换算法对计算资源的要求不同。
LRU和LFU需要记录每个页面最近或最少被访问的时间或次数,因此需要更多计算资源;而FIFO 和Random则只需要记录页面进入内存的时间或随机数,计算资源要求较低。
页面置换算法模拟实现学院专业学号学生姓名指导教师姓名2014年3月 19日一.课程设计的目的:操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
l 进一步巩固和复习操作系统的基础知识。
l 培养学生结构化程序、模块化程序设计的方法和能力。
l 提高学生调试程序的技巧和软件设计的能力。
l 提高学生分析问题、解决问题以及综合利用C 语言进行程序设计的能力。
二.设计内容:根据设计要求实现对页面置换算法的模拟三 .设计要求:设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率。
用C 语言实现,要求设计主界面以灵活选择某算法,且以下算法都要实现1、先进先出算法(FIFO);2、最近最久未使用算法(LRU)3、最佳置换算法(OPT)四、程序流程图1、主函数2、FIFO3、LRU五、系统测试程序进行实例如下:1.开始界面,按任意键继续:2.算法结果:运行界面:(1)FIFO算法结果:(2)OPT算法结果:(3)LRU算法结果六. 源程序及系统文件使用说明#include< iostream.h >#include"stdlib.h"typedef int QElemType;#define ok 1#define overflow 0#define error 0typedef struct Qnode { QElemType data;struct Qnode *next;}Qnode,*Queueptr;typedef struct {Queueptr front;Queueptr rear;}LinkQueue;InitQueue( LinkQueue &Q ) {Q.front = Q.rear = ( Queueptr )malloc( sizeof( Qnode )); if( !Q.front ) exit ( overflow );Q.front->next =NULL;return ok;}EnQueue( LinkQueue &Q,QElemType e ) {Queueptr p;p = ( Queueptr )malloc( sizeof( Qnode ));if( !p ) exit( overflow );p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;return ok;}DeQueue( LinkQueue &Q,QElemType &e ) {Queueptr p;if( Q.front == Q.rear ) return error;p = Q.front->next;e = p->data;Q.front->next = p->next;if( Q.rear == p ) Q.rear = Q.front;free( p );return ok;}void VisitQueue( LinkQueue Q ) {Queueptr p;p = Q.front->next;while( p ) { cout << p->data << " ";p = p->next; } }CompareQueue( LinkQueue Q,int page ) {Queueptr p;p = Q.front->next;while( p ) {if( p->data == page ) return ok;p = p->next;}return error;}void FIFO( int *a,int n,int m ) {LinkQueue Q;int page, t = 0,flag = 0,x;InitQueue( Q );for( int i = 1;i <= m;i++ ){page = a[ i ];t++;if( t <= n ) { EnQueue( Q,page );cout << a[ i ] << " "; }else {for( int j = 1;j <= n;j++ )if( CompareQueue( Q,page ) ) { t--;flag = 1;break; }if( flag == 0 ) { DeQueue( Q,x );cout << x << " was taken out "<< page << " was taken in";EnQueue( Q,page );}cout << endl;VisitQueue( Q );cout << ":";}flag = 0;}cout << "缺页中断数为:" << endl;cout << "t= " << t << endl;}void LRU( int *a,int n,int m ) {LinkQueue Q;int page, t = 0,flag = 0,x,e;InitQueue( Q );for( int i = 1;i <= m;i++ ){page = a[ i ];t++;if( t <= n ) { EnQueue( Q,page );cout << a[ i ] << " "; } else { for( int j = 1;j <= n;j++ )if( CompareQueue( Q,page ) ) { t--;DeQueue(Q,e);EnQueue(Q,e);flag = 1;break; }if( flag == 0 ) { DeQueue( Q,x );cout << x << " was taken out " << page << " was taken in";EnQueue( Q,page );}cout << endl;VisitQueue( Q );cout << ":";}flag = 0;}cout << "缺页中断数为:" << endl;cout << "t= " << t << endl;}int max( int *t,int n ){int max =t[ 1 ],s = 1;for( int i = 1;i <= n;i++ )if( t[ i ] > max ) {max = t[ i ];s = i;} return s;}void OPT( int a[ 21 ],int n,int m ) {int w = 0,flag = 0;int *t =new int[ n + 1 ];for( int i = 1;i <= m;i++ ){w++;if( w <= n ) cout << a[ i ] << " " ;else{for( int q = 1;q <= n;q++ )if( a[ i ] == a[ q ] ) { w--;flag = 1;break; }if( flag == 0 ){for( int j = 1;j <= n;j++ )for( int k = i;k <= m;k++ ){if( a[ j ] != a[ k ] ) t[ j ]++;else break;}cout << a[ max( t,n ) ] << " " << "was taken out" << " " << a[ i ] << " was taken in ";a[ max( t,n ) ] = a[ i ];}cout << endl;for( int s = 1;s <= n;s++ )cout << a[ s ] << " ";cout << ":";}for( int r = 1;r <= n;r++ ) t[ r ] = 0; flag = 0;}cout << "缺页中断数为:" << endl;cout << "w = " << w << endl;delete [] a;}main(){int m,n;cout << "输入页面数:" << endl;cin >> m;int *a = new int[ m + 1 ];cout << "输入驻留集大小:" << endl;cin >> n;cout << "input the pages" << endl;for( int i = 1;i <= m;i++ )cin >> a[ i ];cout << endl;cout << "The result of FIFO:" << endl;FIFO( a,n,m );cout << endl;cout << "The result of LRU:" << endl;LRU( a,n,m );cout << endl;cout << "The result of OPT:" << endl;OPT( a,n,m );cout << endl;return 0;delete [] a;}七.结论此次C语言程序设计,我收获颇多,不仅巩固了书本上的知识,尤其是数据结构相关的知识点的回顾,例如指针链队列,头指针尾指针,以及队列结点的删除和添加等等。
操作系统实验报告三存储器管理实验操作系统实验报告三:存储器管理实验一、实验目的本次存储器管理实验的主要目的是深入理解操作系统中存储器管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收的算法,以及页面置换算法的工作过程和性能特点,从而提高对操作系统资源管理的认识和实践能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验内容1、内存分配与回收算法实现首次适应算法(First Fit)最佳适应算法(Best Fit)最坏适应算法(Worst Fit)2、页面置换算法模拟先进先出页面置换算法(FIFO)最近最久未使用页面置换算法(LRU)时钟页面置换算法(Clock)四、实验原理1、内存分配与回收算法首次适应算法:从内存的起始位置开始,依次查找空闲分区,将第一个能够满足需求的空闲分区分配给进程。
最佳适应算法:在所有空闲分区中,选择能够满足需求且大小最小的空闲分区进行分配。
最坏适应算法:选择空闲分区中最大的分区进行分配。
2、页面置换算法先进先出页面置换算法:选择最早进入内存的页面进行置换。
最近最久未使用页面置换算法:选择最近最长时间未被访问的页面进行置换。
时钟页面置换算法:给每个页面设置一个访问位,在页面置换时,从指针指向的页面开始扫描,选择第一个访问位为0 的页面进行置换。
五、实验步骤1、内存分配与回收算法实现定义内存分区结构体,包括分区起始地址、大小、是否已分配等信息。
实现首次适应算法、最佳适应算法和最坏适应算法的函数。
编写测试程序,创建多个进程,并使用不同的算法为其分配内存,观察内存分配情况和空闲分区的变化。
2、页面置换算法模拟定义页面结构体,包括页面号、访问位等信息。
实现先进先出页面置换算法、最近最久未使用页面置换算法和时钟页面置换算法的函数。
编写测试程序,模拟页面的调入和调出过程,计算不同算法下的缺页率,比较算法的性能。
《操作系统课程设计》任务书
设计题目:Clock及改进Clock置换算法实现
课程设计的目的:
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
●进一步巩固和复习操作系统的基础知识。
●培养学生结构化程序、模块化程序设计的方法和能力。
●提高学生调试程序的技巧和软件设计的能力。
●提高学生分析问题、解决问题以及综合利用C 语言进行程序设计的能力。
设计内容:
模拟实现Clock及改进Clock置换算法,程序应按照Clock置换算法及改进Clock置换算法模拟实现页面的置换.
设计要求:
1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。
对程序其它部分也进行必要的注释。
2.对系统进行功能模块分析、画出总流程图和各模块流程图.
3.用户界面要求使用方便、简洁明了、美观大方、格式统一。
所有功能可以反复使用,最好使用菜单.
4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。
5.所有程序需调试通过。
设计结束需提交下列资料:
1、课程设计报告。
报告中至少应包括:相关操作系统的知识介绍,程序总的功能说明、程序各模块的功能说明、程序设计的流程图、源程序清单.
2、源程序和编译连接后的可执行程序文件.
时间安排:
分析设计贮备阶段(1天)
编程调试阶段(7天)
写课程设计报告、考核(2天)。
数学与计算机学院课程设计说明书课程名称: 计算机操作系统-课程设计课程代码: 8404061题目: 页面置换模拟程序年级/专业/班: 2009级计科4班学生姓名: X X X 学号: 3120**********5422 开始时间:2011 年12月05日完成时间:2011 年12月25 日课程设计成绩:指导教师签名:年月日西华大学数计学院课程设计说明书目录1 引言 (1)1.1 问题的提出 (1)1.2国内外研究的现状 (1)1.3任务与分析 (1)2.程序的主要功能 (2)2.1生成页表 (2)2.2 FIFO算法 (2)2.3 LRU算法 (2)2.4显示功能 (2)3.程序运行平台 (3)4 总体设计 (4)5 程序说明 (5)6 模块分析 (6)6.1 页表模块 (6)6.2内存块模块 (6)6.3 先进先出(FIFO)算法模块 (7)6.4 最近未使用算法(LRU) (10)6.5 显示模块 (14)8 结论 (19)I西华大学数计学院课程设计说明书1 引言1.1 问题的提出在传统的操作系统中,进程运行过程,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲时间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。
但应将哪个页面调出,须根据一定的算法来确定。
通常,把选择换出换出的页面的称为页面置换算法。
1.2国内外研究的现状目前,普遍的计算机都用几种相同的页面置换算法,这些页面置换算法,都具有较低的页面更换率,都试图更接近于理论上的目标。
将那些以后不再访问的页面换出,或把那些在较长时间内不会再访问的页面调出。
目前最常用的有最佳置换算法和先进先出算法、最近未使用置换算法、CLOCK置换算法等。
1.3任务与分析本课题主要的目的是编制页面置换算法的模拟程序,并测试。
先进先出算法就是淘汰最先进入内存的页面,只要把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老页面。
目录1.问题的提出 (2)1.1关于页面置换算法模拟程序问题的产生 (2)1.2任务分析 (2)2.需求分析 (2)3.方案设计 (3)4.总体设计 (4)4.1程序N-S图 (4)4.2主要的函数 (4)4.3主要流程图及代码 (5)4.3.1 FIFO(先进先出) (5)4.3.2 LRU(最近最久未使用) (6)4.3.3 OPT(最佳置换算法) (8)4.4实现结果 (11)5.程序测试 (14)5.1设计测试数据 (14)5.2测试结果及分析 (15)摘要随着计算机的普及人们的物质生活得到了极大的满足,人们在精神生活方面同样也需要提高,所以越来越多的人进行着各种各样的学习。
操作系统是计算机教学中最重要的环节之一,也是计算机专业学生的一门重要的专业课程。
操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。
一个精心设计的操作系统能极扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。
由于操作系统涉及计算机系统中各种软硬件资源的管理,容比较繁琐,具有很强的实践性。
要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果.本课程设计是学生学习完《操作系统教程》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
熟悉页面置换算法及其实现,引入计算机系统性能评价方法的概念。
关键词:编制页面置换算法模拟程序、打印页面、FIFO页面算法、LRU页面置换算法、OPT页面置换算法。
引言1.问题的提出1.1关于页面置换算法模拟程序问题的产生在各种存储器管理方式中,有一个共同的特点,即它们都要求将一个作业全部装入存方能运行,但是有两种情况:(1)有的作业很大,不能全部装入存,致使作业无法运行;(2)有大量作业要求运行,但存容量不足以容纳所有这些作业。
而虚拟存技术正式从逻辑上扩充存容量,将会解决以上两个问题。
lru页面置换算法课程设计一、课程目标知识目标:1. 理解操作系统中内存管理的重要性,掌握LRU(最近最少使用)页面置换算法的基本原理;2. 掌握LRU算法在虚拟内存中的应用,了解其在提高内存利用率方面的作用;3. 学会分析不同页面置换算法的优缺点,并能够比较LRU算法与其他算法的性能差异。
技能目标:1. 能够运用所学知识编写简单的LRU页面置换算法程序,实现虚拟内存的页面置换功能;2. 培养学生的编程实践能力,提高问题分析、解决能力;3. 学会通过实验数据分析页面置换算法的性能,培养科学研究和评价的能力。
情感态度价值观目标:1. 培养学生对计算机操作系统领域的学习兴趣,激发学生主动探索精神;2. 培养学生团队合作意识,学会倾听、交流、协作,提高人际沟通能力;3. 引导学生关注科技发展,了解页面置换算法在现实生活中的应用,培养学生的社会责任感。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,以培养学生的实际操作能力和创新精神为核心。
通过本课程的学习,使学生能够掌握LRU页面置换算法的基本原理,具备一定的编程实践能力,同时培养学生的团队合作意识和人际沟通能力,为将来的学习和工作打下坚实基础。
二、教学内容1. 理论知识:- 操作系统内存管理概述,理解内存分配、回收和页面置换的基本概念;- LRU页面置换算法的原理与实现步骤,对比其他常见页面置换算法;- 虚拟内存的工作原理,分析LRU算法在虚拟内存管理中的作用。
2. 实践操作:- 编写LRU页面置换算法的伪代码或程序,实际操作演示;- 设计实验,模拟不同场景下页面访问序列,分析LRU算法的性能表现;- 优化LRU算法,探讨提高页面置换效率的方法。
3. 教学大纲:- 第一课时:操作系统内存管理概述,介绍内存分配与回收;- 第二课时:页面置换算法原理,分析LRU算法的优势与局限;- 第三课时:虚拟内存与LRU算法,讲解LRU在虚拟内存中的应用;- 第四课时:实践操作,编写LRU页面置换算法程序,进行性能分析;- 第五课时:课程总结,探讨优化策略,拓展相关知识。
综合性实验报告一、实验目的1.学习常见的4种页面置换算法:最佳置换算法(OPT),先进先出页面置换算法(FIFO),最近最久未使用页面算法(LRU),最少使用置换算法(LFU)。
2.编写函数并计算输出上述各种算法的命中率。
二、总体设计(设计原理、设计方案及流程等)设计原理:OPT页面置换算法OPT所选择被淘汰的页面是已调入内存,且在以后永不使用的,或是在最长时间内不再被访问的页面。
因此如何找出这样的页面是该算法的关键。
可为每个页面设置一个步长变量,其初值为一足够大的数,对于不在内存的页面,将其值重置为零,对于位于内存的页面,其值重置为当前访问页面与之后首次出现该页面时两者之间的距离,因此该值越大表示该页是在最长时间内不再被访问的页面,可以选择其作为换出页面。
FIFO页面置换算法FIFO总是选择最先进入内存的页面予以淘汰,因此可设置一个先进先出的忙页帧队列,新调入内存的页面挂在该队列的尾部,而当无空闲页帧时,可从该队列首部取下一个页帧作为空闲页帧,进而调入所需页面。
LRU页面置换算法LRU是根据页面调入内存后的使用情况进行决策的,它利用“最近的过去”作为“最近的将来”的近似,选择最近最久未使用的页面予以淘汰。
该算法主要借助于页面结构中的访问时间time来实现,time记录了一个页面上次的访问时间,因此,当须淘汰一个页面时,选择处于内存的页面中其time值最小的页面,即最近最久未使用的页面予以淘汰。
LFU页面置换算法LFU要求为每个页面配置一个计数器(即页面结构中的counter),一旦某页被访问,则将其计数器的值加1,在需要选择一页置换时,则将选择其计数器值最小的页面,即内存中访问次数最少的页面进行淘汰。
设计流程:1.通过随机数产生一个指令序列,共320条指令。
2.指令序列变换成页地址流3.计算并输出下述各种算法在不同内存容量下的命中率。
4.在主函数中生成要求的指令序列,并将其转换成页地址流;在不同的内存容量下调用上述函数使其计算并输出相应的命中率。
操作系统之页⾯置换算法(最佳置换OPT,先进先出FIFO,最近最久未使⽤LRU)最近学习操作系统时,实验要求实现常见的三种页⾯置换算法,博主按照书上要求试着编写,实现了案例,并记录在博客随记中,以便后续⾃⼰复习并也给需要的同学分享参考⼀下!⽔平有限,若有错,请悄悄告诉博主!博主好⽴即改正。
最佳置换算法(optimal replacement,OPT)是从内存中选择今后不再访问的页⾯或者在最长⼀段时间后才需要访问的页⾯进⾏淘汰。
如下例⼦:根据页⾯⾛向依次处理,得到最终的置换结果如下图表,整个页⾯缺页次数为7,缺页率为7/12=58%。
1 #include <iostream>2 #include <stdio.h>3 #include <stdlib.h>4#define N 125#define B 36using namespace std;78int pageArr[N]={1,2,3,4,1,2,5,1,2,3,4,5};//页⾯⾛向9int block[B]={0};//物理块3个,其数值是页号10 typedef struct FLAG {11int flags[B];12int counts;13 } FLAG;1415void opt(int pageArr[],int block[]);16int inBlock(int which);17int findFar(int next);18void Replace(int index,int value);19void disPlay();2021int main(void){22 cout << "begin:" <<endl;23 opt(pageArr,block);24 cout << "end!" <<endl;25return0;26 }2728void opt(int pageArr[],int block[]){29int getIndex;30for(int i=0;i<N;i++){31if(i<3){//前3页号#短缺#进队列32 block[i]=pageArr[i];33 printf("缺页:(null)-->%d\n",pageArr[i]);34 }35else {36if(i==3){37 disPlay();3839 }40if(inBlock(pageArr[i])!=-1){//下⼀个页⾯if在物理块中返回index并跳过,反-141 disPlay();4243continue;44 }45 getIndex=findFar(i+1);//从下⼀个页号,找到最远出现的页⾯,替换的下标46if(getIndex==-1){47 cout<<"error,not replace obj!"<<'\t';48 }49else{50 Replace(getIndex,pageArr[i]);//由下标找到上⼀组替换⽬标,⽤第⼆参数替换51 disPlay();5253 }54 }55 }56return;57 }5859//替换block中的物理块60void Replace(int index,int value){61 printf("缺页:%d--被替换为-->%d\n",block[index],value);62 block[index]=value;63return;64 }656667//找到最远出现的页⾯68int findFar(int next){69int index=-1;//error,默认返回不存在的索引70 FLAG myflag;71 myflag.flags[0]=0;72 myflag.flags[1]=0;73 myflag.flags[2]=0;74 myflag.counts=0;75int stop = N-next;76while(stop--){77 index=inBlock(pageArr[next++]);78if(index!=-1){79 myflag.flags[index]=1;80 myflag.counts++;83break;84 }85 }86for(index=0;index<B;index++){87if(myflag.flags[index]==0)88break;89 }90return index;91 }929394//下⼀个页⾯if在物理块中返回index,反-195int inBlock(int which){96//int i=0;97//while(i<B)98// if(block[i++]==which)99// return i-1;100for(int i=0;i<B;i++){101if(block[i]==which)102return i;103 }104return -1;105 }106107//打印⼀元组108void disPlay(){109int i=0;110while(i<B){111 printf("%d\t",block[i++]);112 }113 printf("\n");114return;115 }上⾯是博主使⽤C++(基本是C语法)编写的代码,运⾏结果如下://////////////////////////////////////////////////////////////////////////begin:缺页:(null)-->1缺页:(null)-->2缺页:(null)-->31 2 3缺页:3--被替换为-->41 2 41 2 41 2 4缺页:4--被替换为-->51 2 51 2 51 2 5缺页:1--被替换为-->33 2 5缺页:3--被替换为-->44 2 54 2 5end!//////////////////////////////////////////////////////////////////////////先进先出算法:先进先出置换算法(first in first out,FIFO)是淘汰最先进⼊内存的页⾯,即选择在内存中驻留时间最长的页⾯进⾏淘汰的算法。
目录摘要随着计算机的普及人们的物质生活得到了极大的满足,人们在精神生活方面同样也需要提高,所以越来越多的人进行着各种各样的学习。
操作系统是计算机教学中最重要的环节之一,也是计算机专业学生的一门重要的专业课程。
操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。
一个精心设计的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。
由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。
要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果.本课程设计是学生学习完《操作系统教程》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
熟悉页面置换算法及其实现,引入计算机系统性能评价方法的概念。
关键词:编制页面置换算法模拟程序、打印页面、FIFO页面算法、LRU页面置换算法、OPT页面置换算法。
引言1.问题的提出关于页面置换算法模拟程序问题的产生在各种存储器管理方式中,有一个共同的特点,即它们都要求将一个作业全部装入内存方能运行,但是有两种情况:(1)有的作业很大,不能全部装入内存,致使作业无法运行;(2)有大量作业要求运行,但内存容量不足以容纳所有这些作业。
而虚拟内存技术正式从逻辑上扩充内存容量,将会解决以上两个问题。
从内存中调出一页程序或数据送磁盘的对换区中,通常,把选择换出的页面的算法称为页面置换算法(Page-Replacement Algorithms)。
进而页面置换算法模拟程序能客观的将其工作原理展现在我们面前。
任务分析首先,定义宏变量,设置所占最大内存长度。
编辑以时间为种子,初始化随即发生器。
进行相关页面输入程序的编写以及页面的打印。
尔后,寻找最近最近最久未使用的页面、记录当前内存块中页面离下次使用间隔长度等相关程序的代码编写。
最后,进行)FIFO 、LRU、 OPT三种算法的编写。
2.需求分析1.用随机数方法产生页面走向,页面走向长度为L。
2.根据页面走向,分别采用FIFO和LRU算法进行页面置换,统计缺页率;为简化操作,在淘汰一页时,只将该页在页表中抹去,而不再判断它是否被改写过,也不将它写回到辅存。
3.假定可用内存块和页表长度 (作业的页面数)分别为m和k,初始时,作业页面都不在内存。
随机数产生程序:int i,j;j=time(NULL);um=rand( )%10+1;ime=0;cout<<p[i].num<<" ";}上述随机数发生函数产生的随机数为~,稍另变化就可得到0~n 1之间的随机数。
程序开始时,应对变量Seed (实型)赋初值。
根据页面置换算法的理论操作及要求,首先要进行页面长度的确定,定义结构体用以储存数据,进行主界面代码及FIFO、LRU、OPT页面置换算法代码的编写。
3.方案设计首先,定义宏变量,设置所占最大内存长度。
编辑以时间为种子,初始化随即发生器。
进行相关页面输入程序的编写以及页面的打印。
其次,寻找最近最近最久未使用的页面、记录当前内存块中页面离下次使用间隔长度等相关程序的代码编写。
最后,进行FIFO 、LRU、 OPT三种算法的编写。
.程序运行平台VC++具体操作如下:在VC++的环境下准备用时钟函数调用库函数(#include <>)、取时钟时间并存入t调用库函数(t=time(NULL))、用时间t初始化随机数发生器调用库函数(srand(t)返回一个1~10之间的随机数(x=rand( )%10+1)。
编写三种算法。
4.总体设计程序N-S图主要的函数Input(int m,Pro p[L])(打印页面走向状态);void print(Pro *page1)(打印当前的页面);int Search(int e,Pro *page1 )(寻找内存块中与e相同的块号);int Max(Pro *page1)(寻找最近最长未使用的页面);int Count(Pro *page1,int i,int t,Pro p[L])(记录当前内存块中页面离下次使用间隔长度);int main()(主函数);.随机数发生器";{int temp=0,s;for(t=0;t<M;t++) um=p[i].num; n++;cout<<p[i].num<<" ";print(page);i++;}}}cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;}实现结果程序在运行的情况下,进入主界面输入菜单,如图3-3所示:输入14:图4-5 输入14后的输出图输入25:图5-6输入数据25后输出图输入数据18:图5-7 输入数据18后的输出图输入数据:图5-8输出图选1,进入FIFO页面置换:图5-9 FIFO的输出图选2,进入LRU页面置换:图5-10 LRU的输出图输入3,进入OPT页面置换:图5-11 OPT的输出图5.程序测试设计测试数据A 14 25 18 ;2 6 4 ;B 1C 2D 3测试结果及分析1)测试A结果及分析进入主菜单后输入14、25,显示输入不满足要求。
输入18 显示相关信息; 输入2 、6不满足要求,输入4 显示出相关信息。
2)测试结果及分析显示出FIFO页面置换算法的缺页信息及缺页率。
3)测试C结果及分析显示出LRU页面置换算法的缺页信息及缺页率。
4)测试D结果及分析显示出OPT页面置换算法的缺页信息及缺页率结论通过这次课程设计,不仅让我了解了页面置换算法,开始我一味的进行调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没没有成功,我仔细的分析题目,分析材料,在原由的基础上我进行了改正,我最后还是调试成功了,还是经过了一翻努力,这次操作系统实习,不仅让我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握。
通过努力,三个页面置换算法程序都已经完成,此时此刻,我心里多了些成就感。
虽然自己所做的很少也不够完善,但毕竟也是努力的结果。
主要有以下几点收获:1.通过对上网和看书查阅相关资料,使自己对VC ++语言的基本框架有新的了解,加深了对可视化程序的认识。
2.在使用VC++语言来实现功能时,不像以往用的其他语言,它比较简练,更容易理解,实用性很强。
3.先进先出页面置换和LRU以及OPT算法各有特点,但是实践起来却很大,使自己对页面置换算法有了新的认识。
一周半的课程设计就要结束了,不但对专业知识有了更深的理解,更使的自己认识到实践的重要性,理论、实践相结合才能达到很好的学习效果,特别是程序语言的学习。
致谢本次课程设计能顺利完成,感谢学校的大力支持,感谢数学与计算机学院为我们提供实练的机会,感谢老师的细心教导。
此次的课程设计收获很多,虽然经过了一段漫长而又痛苦的过程,但是自己还是完成了,这是与自己的努力是分不开的,但是自己在调试过程当中遇到的一些问题,自己仍然不懂,是在同学、老师的帮助下完成的,在这里还要再次对他们的付出表示崇高的敬意。
参考文献《面向对象程序设计与VisualC++教程》陈天华编着《C程序设计(第三版)》谭浩强编着《C++入门经典》《面向对象程序设计与C++实现》刘晋萍编着《计算机操作系统教程》徐甲同等编着《操作系统》罗宇等编着《操作系统实验教程》张丽芬, 刘利雄, 王全玉编着《计算机操作系统》梁红兵、哲风屏、汤子瀛编着《操作系统教程》陈向群、杨芙清编着代码:#include<>#include <>#include <>#include <>#define L 20um=rand( )%10+1;ime=0;cout<<p[i].num<<" ";}cout<<endl;return m;}void print(Pro *page1)um<<" ";cout<<endl;}int Search(int e,Pro *page1 )um)return i;ime,i=0;while(i<M) ime) e=page[i].time;i++;}for( i=0;i<M;i++)if(e==page[i].time)return i;um==p[j].num )break;um=0;page[i].time=m-1-i;}i=0;cout<<"1:FIFO页面置换"<<endl;cout<<"2:LRU页面置换"<<endl;cout<<"3:OPT页面置换"<<endl;cout<<"按其它键结束程序;"<<endl;cin>>c;system("cls");if(c==1)um,page)>=0) um<<" "; umcout<<"不缺页"<<endl;i++; um=p[i].num; um<<" ";print(page); um,page);if(t>=0)ime=0;ime++;um<<" ";cout<<"不缺页"<<endl;}else um=p[i].num; ime=0; um<<" ";print(page);for(a=0;a<M;a++)if(a!=t)page[a].time++; um,page)>=0)um<<" ";cout<<"不缺页"<<endl;i++;}elseum==0)a++;um==0&&q>t)q=t;um=p[i].num;n++;cout<<p[i].num<<" ";print(page);i++;}else{int temp=0,s;for(t=0;t<M;t++)um=p[i].num;n++;cout<<p[i].num<<" ";print(page);i++;}}}cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl;}}while(c==1||c==2||c==3);return 0; }。