请求调页存储器管理方式的模拟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
课程设计名称:计算机操作系统课程设计
专业班级:计算机科学与技术班
学生姓名:
学号:
指导教师:
课程设计时间: 2010.12.20 ~ 2010.12.24
计算机科学与技术专业课程设计任务书
一需求分析
请求调页存储管理方式的模拟是基于LRU算法的设计而设计的,通过学习计算机操作系统中的请求调页存储管理方式的几种算法,我选择了最近最久未使用算法即LRU算法实现请求调叶存储管理,通过具体的程序来模仿LRU的工作机制。二概要设计
1.数据结构
依据给定的数据信息,数组必须以结构体实现,结构类型的层次结构如下: typedef struct BLOCK//声明一种新类型——物理块类型
{
int pagenum;//页号
int accessed;//访问字段,其值表示多久未被访问
}BLOCK;
2.函数原型清单:
Void main();//主函数
void init(int Bsize); //程序初始化函数
int findExist(int curpage);//查找物理块中是否有该页面
int findSpace(int Bsize);//查找是否有空闲物理块
int findReplace();//查找应予置换的页面
void display(int Bsize);//显示
void suijishu(int r);//产生320条随机数,显示并存储到temp[320]
void pagestring();//显示调用的页面队列
void LRU(int Bsize);// LRU算法
3.全局变量:
int Bsize;
int pc;//程序计数器,用来记录指令的序号
int n;//缺页计数器,用来记录缺页的次数
static int temp[320];//用来存储320条随机数
BLOCK block[Bsize]; //定义一大小为4的物理块数组
三运行环境(软硬件环境)
硬件:CPU,主板,内存,显示器,硬盘,显卡,键盘等等.
软件:WINDOWS XP, Visual c++应用软件.
四开发工具和编程语言
开发工具:Visual c++
编程语言:c语言
五详细设计
#include
#include
#include
#include
typedef struct BLOCK//声明一种新类型——物理块类型
{
int pagenum;//页号
int accessed;//访问字段,其值表示多久未被访问
}BLOCK;
int Bsize;
BLOCK block[32]; //模拟内存块
int pc;//程序计数器,用来记录指令的序号
int n;//缺页计数器,用来记录缺页的次数
static int temp[320];//用来存储320条随机数
//*************************************************************
void init(int Bsize); //程序初始化函数
int findExist(int curpage);//查找物理块中是否有该页面
int findSpace(int Bsize);//查找是否有空闲物理块
int findReplace();//查找应予置换的页面
void display(int Bsize);//显示
void suijishu(int r);//产生320条随机数,显示并存储到temp[320] void pagestring();//显示调用的页面队列
void LRU(int Bsize);// LRU算法
//************************************************************* void init(int Bsize)
{
int i;
for(i=0;i { block[i].pagenum=-1; block[i].accessed=0; pc=n=0; } } //------------------------------------------------------------- int findExist(int curpage,int Bsize) { int i; for(i=0;i { if(block[i].pagenum == curpage ) return i;//检测到内存中有该页面,返回block中的位置 } return -1; } //------------------------------------------------------------- int findSpace(int Bsize) { int i; for(i=0; i { if(block[i].pagenum == -1) return i;//找到空闲的block,返回block中的位置} return -1; } //------------------------------------------------------------- int findReplace(int Bsize) { int i,pos = 0; for(i=0; i { if(block[i].accessed >block[pos].accessed) pos = i;//找到应予置换页面,返回BLOCK中位置 } return pos; } //------------------------------------------------------------- void display(int Bsize) {