- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三 内存管理
实验目的
理解内存页面调度的机理。
掌握几种理论页面值换算法的实现方法
通过实验比较各种调度算法的优劣。
实验内容
随机给出一个页面执行序列,如:1,5,3,4,2,1,3,4,5,7,9,……。要求计算以下几种置换算法的缺页数、缺页率和命中率。
最佳置换算法OPT(Optimal)
先进先出算法FIFO(First In First Out)
最近最少使用算法LRU(Least Recently Used)
实验环境
PC + Linux Red Hat操作系统 + GCC
或 Windows xp + VC
实验中遇到的主要问题及其解决方式
这次实验其实不一定要在linux操作系统下做,在windows操作系统一样可以实现,只要把头文件稍作修改即可。 一开始做这个实验时,首先是看书,先把书上的替换算法知识点弄明白,要明白各种算法的优缺点和相互之间衍生互补关系。这四个算法中,难以实现的是LRU算法,因为它涉及到访问时间的计算,而且它的开销也比较大。OPT算法次难,它需要计算最近访问时间,并替换最近访问时间最大的页。而FIFO和CLOCK实现起来比较容易,FIFO算法的实现和CLOCK算法的实现很相似,FIFO可视为CLOCK的退化版。我先写了CLOCK算法,再删去一些约束条件就退化为FIFO算法。这就是两者的相同之处。理论上,CLOCK算法需要维持一个循环的主存缓冲区,需要一个循环队列去实现,并且,FIFO算法保持先进先出,因此需要一个先进先出队列。
源代码
#include stdio.h
#include stdlib.h
#include unistd.h //在window操作系统下要屏蔽此条指令
#include string.h
#ifndef _UNISTD_H
#define _UNISTD_H
#include IO.H
#include PROCESS.H
#endif
#define TRUE 1
#define FALSE 0
#define INVALID -1
#define total_instruction 320 //指令流长
#define total_vp 32 //虚页长
#define clear_period 50 //清周期
typedef struct //页面结构
{
int pn, //页面序号
pfn, //页面所在内存区的帧号
counter, //单位时间内访问次数
time; //上次访问的时间
}pl_type;
pl_type pl[total_vp]; //页面结构数组
struct pfc_struct{ //页面控制结构
int pn, //页面号
pfn; //内存区页面的帧号
struct pfc_struct *next; //页面指针,用于维护内存缓冲区的链式结构
};
typedef struct pfc_struct pfc_type; //主存区页面控制结构别名
pfc_type pfc[total_vp], //主存区页面控制结构数组
*freepf_head, //主存区页面控制结构的空闲页面头指针
*busypf_head, //主存区页面控制结构的忙页面头指针
*busypf_tail; //主存区页面控制结构的忙页面尾指针
int diseffect; //页错误计数器,初次把页面载入主存时也当做页错误
int a[total_instruction]; //随即指令流数组
int page[total_instruction]; //指令对应的页面号
int offset[total_instruction]; //指令所在页面中的偏移量
int initialize(int); //初始化页面结构数组和页面控制结构数组
int FIFO(int); //先进先出算法
int LRU(int); //最近最久未使用算法
int OPT(int); //最佳置换算法
int CLOCK(int); //简单时钟(钟表)算法
int main( )
{
int s; //随机数
int i;
srand(10*getpid()); /*每次运行时进程号不同,用来作为初始化随机数队列
您可能关注的文档
- 如何制定海上搜救计划.doc
- 如何制定计划_工作计划_计划解决方案_实用文档.ppt
- 如何制定年度营销计划.ppt
- 如何制定职业生涯规划书.ppt
- 如何制作动画.ppt
- 如何做一个成功的店长.ppt
- 儒家经典名句.doc
- 儒家经典入门-孝经.ppt
- 入侵检测技术分析与应用毕业论文论文.doc
- 软件版本控制规范.doc
- 部编版一年级语文下册第四单元《8 夜色》教学课件(2025年春-新编教材).pptx
- 江苏省盐城市五校2024-2025学年高一下学期4月期中联考数学试卷(含答案).pdf
- 2025年高一语文教师工作总结简单版(六).docx
- 第12课《台阶》课件 2024—2025学年统编版语文七年级下册(共39张PPT).pptx
- 部编版一年级语文下册第四单元《语文园地四》教学课件(2025年春-新编教材).pptx
- 部编版一年级语文下册第四单元《9 端午粽》教学课件(2025年春-新编教材).pptx
- 指导技能的关键要素与提升的策略研究与分享.docx
- 湖南省永州四中直升班2025届高三(下)适应性数学试卷(含答案).pdf
- 湖北省荆荆宜襄·四地七校联盟2024-2025学年高一(下)期中联考数学试卷(含答案).pdf
- 2025年04月17日袁荣的初中历史组卷.docx
文档评论(0)