资源简介
一、实验目的
1、了解虚拟存储器的基本原理和实现方法。
2、掌握几种页面置换算法。
二、实验内容
设计模拟实现采用不同内外存调度算法进行页面置换,并计算缺页率。
三、实验原理
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Window中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。
虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。它是采用一定的方法将一定的外存容量模拟成内存,同时对程序进出内存的方式进行管理,从而得到一个比实际内存容量大得多的内存空间,使得程序的运行不受内存大小的限制。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。
虚拟内存的设置主要有两点,即内存大小和分页位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间。
1. 最佳置换算法(OPT):选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。
2. 先进先出置换算法(FIFO):选择最先进入内存即在内存驻留时间最久的页面换出到外存。
3. 最近最久未使用置换算法(LRU): 以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存

代码片段和文件信息
#include
#include
#include
#include
#define Myprintf printf(“|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n“) //*表格控制*/
int M;
int N;
typedef struct page
{
int num; /*记录页面号*/
int time; /*记录调入内存时间*/ //(lru那用到)
int index; //记录调入内存的先后次序 //从1开始(FIFO那用到)
}Page; /* 页面逻辑结构,结构为方便算法实现设计*/
Page b[10]; /*内存单元数*/ //从0开始
int c[10][150]; /*暂保存内存当前的状态:缓冲区*/
int queue[100]; /*记录调入队列*/
int K; /*调入队列计数变量*/
/*初始化内存单元、缓冲区*/
void Init(Page *bint c[10][150])
{
int ij;
for(i=0;i {
b[i].num=-1;
b[i].time=M-i-1;
b[i].index=i+1;
}
for(i=0;i for(j=0;j c[i][j]=-1;
}
/*取得在内存中停留最久的页面默认状态下为最早调入的页面*/
int GetMaxTime(Page *b)
{
int i;
int max=-1;
int tag=0;
for(i=0;i {
if(b[i].time>max)
{
max=b[i].time;
tag=i;
}
}
return tag;
}
int GetMinTime(Page *b)
{
int i;
int min=1000;
int tag=0;
for(i=0;i {
if(b[i].time {
min=b[i].time;
tag=i;
}
}
return tag;
}
/*判断页面是否已在内存中*/
int Equation(int foldPage *b)
{
int i;
for(i=0;i {
if (fold==b[i].num)
return i;
}
return -1;
}
//LRU核心部分 最近最久未使用置换算法
void Lru(int foldPage *b)
{
int i;
int val;
val=Equation(foldb); //判断页面是否已在内存中,val代表在内存中的位置
if (val>=0) //在内存中
{
b[val].time=0; //存在就把那个东西的时间变成0
for(i=0;i if (i!=val)
b[i].time++; // 其他的时间就要累加
}
else
{
queue[++K]=fold;/*记录调入页面*/
val=GetMaxTime(b); //取得在内存中停留最久的页面默认状态下为最早调入的页面,val代表在内存中的位置
b[val].num=fold;
b[val].time=0;
for(i=0;i if (i!=val)
b[i].time++;
}
}
//先进先出置换算法
void FIFO(int foldPage *b)
{
int i;
int val;
bool flag=false;
val=Equation(foldb); //判断页面是否已在内存中,val代表在内存中的位置
if (val<0) //不在内存中
{
queue[++K]=fold;/*记录调入页面*/
for(i=0;i {
if (b[i].num<0)
{
b[i].num=fold;
b[i].index=i+1;
flag=true;
break;
}
}
if (flag==false)
{
for(i=0;i {
if(b[i].index==1)
{
val=i;
}
}
b[val].num=fold;
b[val].index=M;
for(i=0;i {
if(i!=val)
b[i].index--;
}
}
}
}
//最佳置换算法
void Optimal(int a[150]int posPage *b)
{
int ij;
int val;
int fold=a[pos];
bool flag=false;
val=Equation(foldb); //判断页面是否已在内存中,val代表在内存中的位置
if (val<0) //不在内存中
{
queue[++K]=fold;/*记录调入页面*/
for(i=0;i {
if (b[i].num<0)
{
b[i].num=fold;
flag=true;
break;
}
}
if (flag==false)
{
for(i=0;i {
for(j=pos+1;j {
if (b[i].num!=a[j])
{ b[i].time= 1000; }
else
{
b[i].time=j;
break;
}
}
}
val=Ge
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6732 2011-12-14 18:05 虚拟存储器.cpp
文件 111616 2012-01-15 12:17 虚拟存储器.doc
----------- --------- ---------- ----- ----
118348 2
相关资源
- EPSON XP225 xp235 xp245打印机清零软件+教
- Microsoft Forms 2.0107770
- PID_AutoTune_v0.rar
- IAR FOR 430 破解工具
- ModelGoon-4.4.1-site.zip
- AsyncTask文件控制暂停和继续,在状态
- Visio大全模具(含Cisco、IBM等常用拓扑
- Remote Desktop Organizer v1.4.7 支持win10
- 虚拟光驱deamon 适用于64位服务器的
- AXURE移动端素材元件库68580
- 酒店管理系统基于Qt Creator5)
- SpringBoot+H2+mybatis-plus59130
- AE开发Windows最短路径分析
- 条码字体barcode128
- Rational Rose Common破解文件
- 易语言播放器组件无缝转换(Demo2.e)
- res10_300x300_ssd_iter_140000.caffemodel与dep
- Pythonamp;课堂amp;笔记(高淇amp;400;集第
- umeshmotion网格推移
- ddos压力测试工具99657
- 04741计算机网络原理知识点整理.docx(
- Wolfram Mathematica 矩阵初等变换函数(
- pscad近海风电模型 Fortran语言
- 程序员专用字体YaHei.Consolas.1.11b42517
- 易语言OTG串口通信
- AutoCAD永久去教育版破解补丁
- 用Beckhoff(倍福)PLC读写巴鲁夫RFID
- CVSNT 完整覆盖版防TortoiseCVS中文乱码
- Xamarin forms 手势事件
- pfc 使用说明.doc
评论
共有 条评论