课程设计任务书。
目录。一、 课程设计目的及要求 2
二、相关知识 2
三、题目分析 3
四、概要设计 3
五、**及流程 4
六、运行结果 9
七、设计心得 10
参考文献 11
页面置换算法。
实验目的:深入掌握内存调度算法的概念原理和实现方法。
设计要求:编写程序实现:
1)先进先出页面置换算法(fifo)
2)最近最久未使用页面置换算法(lru)
3)最佳置换页面置换算法(opt)
专题:设计一个虚拟存储区和内存工作区,编程序演示以上三种算法的具体实。
现过程,并计算访问命中率。
演示页面置换的三种算法。
1 先进先出(fifo)算法。
这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按照先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总指向最老的页面。
但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,fifo算法并不能保证这些页面不被淘汰。
2 最近最久未使用(lru)算法。
fifo置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(lru)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法**各页将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,lru置换算法是选择最近最久未使用的页面予以淘汰。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
3 最佳(optimal)算法。
最佳置换算法是由belady于2024年提出的一种理论上的算法。其所选择的被淘汰的页面,将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。
但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是将来最长时间内不再访问的,因而该算法时无法实现的,但可以利用该算法评价其他算法。
熟悉页面置换算法及其实现,引入计算机系统性能评价方法的概念。页面置换算法是虚拟存储管理实现的关键,通过本次课程设计理解内存页面调度的机制,在模拟实现fifo、lru和opt几种经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。
4.1进入系统模块。进入登陆界面,输入内存页面数和实际页数。
int input(int x,pro p[x])
cout<<"请输入实际页数:";
dowhile(1);
4.2页面号打印模块。打印输入的页面号。
void print(pro* page1)
pro*page=new pro[y];/定义一个指针。
page=page1;
for(int i=0;i if(page[i].num==-1)
cout<<"
elsecout< cout<}
4.3菜单选择模块。选择相应的页面的置换方式,选择相应的字母,进入相应的功能。
4.4算法模块。选择相应的页面置换算法。
4.5显示输出模块。显示页面被置换的情况。
4.6缺页次数和缺页率模块。计算页面号输入的结果。
4.7退出系统模块。退出置换页面。
#include<>
#define x 40
int y;
struct pro//内存页的结构体。
int num,time;
int input(int x,pro p[x]) 输入函数,输入实际页号和实际页数。
cout<<"请输入实际页数:";
dowhile(1);
cout< for(int i=0;i
return x;//x 代表实际页面走向数。
void print(pro* page1) /打印当前内存中存放的页面。
pro*page=new pro[y];/定义一个指针。
page=page1;
for(int i=0;i if(page[i].num==-1)
cout<<"
elsecout< cout<}
int search(int z,pro*page1) /查找内存中是否存在要调入的页面。
pro*page=new pro[y];
page=page1;
for(int i=0;i return -1;
int max(pro*page1)//找出离现在时间最长的页面。
pro*page=new pro[y];
page=page1;
int z=page[0].time,i=0;
while(i
for(i=0;i if(z==page[i].time) return i;//找最长时间的下标。
return -1;
int compfu(pro*page1,int i,int t,pro p[x])/找到最久不使用的页面。
pro*page=new pro[y];
page=page1;
int count=0;
for(int j=i;j
return count;
int main()
cout<<"可用内存页面数"< cin>>y;
pro p[x];
pro*page=new pro[y];
char z;
int x=0,t=0;
float y=0;
m=input(x,p);
doint i=0;
cout<<"f:fifo页面置换"< cout<<"l:lru 页面置换"< cout<<"o:opt 页面置换"< cout<<"按其它键结束"< cin>>z;
if(z=='f') fifo页面置换。
if(z=='l') lru页面置换。
if(t==1)
if(t==2)
if(k==-1) print(page);
i++;cout<<"缺页次数:"<
if(z=='o')/opt页面置换。
y=0;//记录缺页数。
while(i
if(search(p[i].num,page)>=0)i++;
操作系统课程设计报告
西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...
操作系统课程设计报告
实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...