【实验】请求调页存储管理方式的模拟
2013-01-12 13:30
369 查看
实验目的
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
实验内容
(1) 通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
a、50%的指令是顺序执行的。
b、25%的指令是均匀分布在前地址部分
c、25%的指令是均匀分布在后地址部分
具体的实施方法是:
a、
在[0,319]的指令地址之间随机选取一起点m;
b、
顺序执行一条指令,即执行地址为m+1的指令
c、
在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;
d、
顺序执行一条指令,其地址为m’+1;
e、
在后地址[m’+2,319]中随机选取一条指令并执行
f、
重复上述步骤,直至执行320次指令
(2) 将指令序列变换成为页地址流
设:
a、
页面大小为1K
b、
用户内存容量为4页到32页
c、
用户虚存容量为32K
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方法为:
第0条至第9条指令为第0页(对应虚存地址为[0,9]);
第10条至第19条指令为第1页(对应虚存地址为[10,19]);
……………………
第310条至第319条指令为第31页(对应虚存地址为[310,319]);
按以上方式,用户指令可组成32页。
(3) 计算并输出下述各种算法在不同内存容量下的命中率。
a、先进先出置换算法(FIFO)
b、最近最少使用置换算法(LRU)
c、最佳置换算法(OPT)
在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
3.随机数产生办法
关于随机数产生办法,Linux系统提供函数srand()和rand(),分别进行初始化和产生随机数。
例如:
srand();
语句可初始化一个随机数;
a[0]=10*rand()/32767*319+1;
a[1]=10*rand()/32767*a[0];
………………………
语句可用来产生a[0]与a[1]中的随机数。
1.假设每个页面中可存放10条指令,分配给作业的内存块数为4。
2.通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解
3.用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。
4.置换算法:最佳置换(OPT)算法。
实验的运行结果为:
地址流序列:1 4 7 3 3 1 2 1 3 1 7 3 6 6
M=3时FIFO的命中率为:26.6667% M=3时LRU的命中率为:30%
M=4时FIFO的命中率为:36.6667% M=4时LRU的命中率为:36.6667%
M=5时FIFO的命中率为:50% M=3时LRU的命中率为:46.6667%
M=6时FIFO的命中率为:66.6667% M=6时LRU的命中率为:63.3333%
潭浩强《C++程序设计》清华大学出版社 2004
任满杰等《操作系统原理实用教程》电子工业出版社 2006
汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社 2001
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
实验内容
(1) 通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
a、50%的指令是顺序执行的。
b、25%的指令是均匀分布在前地址部分
c、25%的指令是均匀分布在后地址部分
具体的实施方法是:
a、
在[0,319]的指令地址之间随机选取一起点m;
b、
顺序执行一条指令,即执行地址为m+1的指令
c、
在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;
d、
顺序执行一条指令,其地址为m’+1;
e、
在后地址[m’+2,319]中随机选取一条指令并执行
f、
重复上述步骤,直至执行320次指令
(2) 将指令序列变换成为页地址流
设:
a、
页面大小为1K
b、
用户内存容量为4页到32页
c、
用户虚存容量为32K
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方法为:
第0条至第9条指令为第0页(对应虚存地址为[0,9]);
第10条至第19条指令为第1页(对应虚存地址为[10,19]);
……………………
第310条至第319条指令为第31页(对应虚存地址为[310,319]);
按以上方式,用户指令可组成32页。
(3) 计算并输出下述各种算法在不同内存容量下的命中率。
a、先进先出置换算法(FIFO)
b、最近最少使用置换算法(LRU)
c、最佳置换算法(OPT)
在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
3.随机数产生办法
关于随机数产生办法,Linux系统提供函数srand()和rand(),分别进行初始化和产生随机数。
例如:
srand();
语句可初始化一个随机数;
a[0]=10*rand()/32767*319+1;
a[1]=10*rand()/32767*a[0];
………………………
语句可用来产生a[0]与a[1]中的随机数。
1.假设每个页面中可存放10条指令,分配给作业的内存块数为4。
2.通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解
3.用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。
4.置换算法:最佳置换(OPT)算法。
实验的运行结果为:
地址流序列:1 4 7 3 3 1 2 1 3 1 7 3 6 6
M=3时FIFO的命中率为:26.6667% M=3时LRU的命中率为:30%
M=4时FIFO的命中率为:36.6667% M=4时LRU的命中率为:36.6667%
M=5时FIFO的命中率为:50% M=3时LRU的命中率为:46.6667%
M=6时FIFO的命中率为:66.6667% M=6时LRU的命中率为:63.3333%
#include <iostream.h> #include<stdlib.h> #include<conio.h> #include<stdio.h> #define Bsize 4 typedef struct BLOCK//声明一种新类型——物理块类型 { int pagenum;//页号 int accessed;//访问字段,其值表示多久未被访问 }BLOCK; int pc;//程序计数器,用来记录指令的序号 int n;//缺页计数器,用来记录缺页的次数 static int temp[320];//用来存储320条随机数 BLOCK block[Bsize]; //定义一大小为4的物理块数组 //************************************************************* void init(); //程序初始化函数 int findExist(int curpage);//查找物理块中是否有该页面 int findSpace();//查找是否有空闲物理块 int findReplace();//查找应予置换的页面 void display();//显示 void suijishu();//产生320条随机数,显示并存储到temp[320] void pagestring();//显示调用的页面队列 void OPT();//OPT算法 //------------------------------------------------------------- void init() { for(int i=0;i<Bsize;i++) { block[i].pagenum=-1; block[i].accessed=0; pc=n=0; } } //------------------------------------------------------------- int findExist(int curpage) { for(int i=0; i<Bsize; i++) { if(block[i].pagenum == curpage ) return i;//检测到内存中有该页面,返回block中的位置 } return -1; } //------------------------------------------------------------- int findSpace() { for(int i=0; i<Bsize; i++) { if(block[i].pagenum == -1) return i;//找到空闲的block,返回block中的位置 } return -1; } //------------------------------------------------------------- int findReplace() { int pos = 0; for(int i=0; i<Bsize; i++) { if(block[i].accessed >block[pos].accessed) pos = i;//找到应予置换页面,返回BLOCK中位置 } return pos; } //------------------------------------------------------------- void display() { for(int i=0; i<Bsize; i++) { if(block[i].pagenum != -1) { printf(" %02d",block[i].pagenum); } } cout<<endl; } //------------------------------------------------------------- void suijishu() { int flag=0; cin>>pc; cout<<"******按照要求产生的320个随机数:*******"<<endl; for(int i=0;i<320;i++) { temp[i]=pc; if(flag%2==0) pc=++pc%320; if(flag==1) pc=rand()% (pc-1); if(flag==3) pc=pc+1+(rand()%(320-(pc+1))); flag=++flag%4; printf(" %03d",temp[i]); if((i+1)%10==0) cout<<endl; } } //------------------------------------------------------------- void pagestring() { for(int i=0;i<320;i++) { printf(" %02d",temp[i]/10); if((i+1)%10==0) cout<<endl; } } //------------------------------------------------------------- void OPT() { int exist,space,position ; int curpage; for(int i=0;i<320;i++) { //if(i%100==0) getch(); pc=temp[i]; curpage=pc/10; exist = findExist(curpage); if(exist==-1) } } void main() { int select; cout<<"请输入第一条指令号(0~320):"; suijishu(); cout<<"*****对应的调用页面队列*******"<<endl; pagestring(); cout<<"最佳置换算法OPT:"<<endl; cout<<"*****************"<<endl; OPT(); }
潭浩强《C++程序设计》清华大学出版社 2004
任满杰等《操作系统原理实用教程》电子工业出版社 2006
汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社 2001
相关文章推荐
- 请求调页存储管理方式的模拟
- 操作系统——请求调页存储管理方式的各种模拟
- 请求调页存储管理方式的模拟-python实现
- 通信实验 动态分区存储管理方式的主存分配回收 查错
- 内存管理模拟实验之实现一个简单的固定(可变)分区存储管理系统
- 编写程序模拟完成动态分区存储管理方式的内存分配和回收。
- OS 请求调页存储管理方式的FIFO、LRU、OPT、LFU置换算法模拟
- 存储管理之分页存储管理方式C语言模拟(实验五)
- 【操作系统】请求分页存储管理方式
- Rails的静态资源管理(六)—— Asset Pipeline缓存存储方式、预处理、升级等
- 主动队列管理算法与拒绝服务攻击模拟实验平台
- 实验二 总结线性表的几种主要存储方式
- 存储管理之动态分区分配(实验四)
- Elasticsearch 存储方式和管理优化细节
- 内存管理方式:页存储、段存储、段页存储
- 实验项目3――基本线性表运算(顺序存储方式)
- C++内存管理__内存管理(栈、堆(new/delete)、自由存储区(malloc/freee)、全局/静态存储区、常量区)!堆栈内存管理方式的区别
- 分页存储管理方式附网易校招笔试题
- 第3章 存储管理实验
- 12.基本分页、请求分页存储管理方式