实验三内存管理.doc
《实验三内存管理.doc》由会员分享,可在线阅读,更多相关《实验三内存管理.doc(9页珍藏版)》请在三一文库上搜索。
1、实验三 内存管理一、 实验目的 n 理解内存页面调度的机理。n 掌握几种理论页面值换算法的实现方法n 通过实验比较各种调度算法的优劣。二、 实验内容 随机给出一个页面执行序列,如:1,5,3,4,2,1,3,4,5,7,9,。要求计算以下几种置换算法的缺页数、缺页率和命中率。u 最佳置换算法OPT(Optimal)u 先进先出算法FIFO(First In First Out)u 最近最少使用算法LRU(Least Recently Used)三、 实验环境n PC + Linux Red Hat操作系统 + GCCn 或 Windows xp + VC四、 实验中遇到的主要问题及其解决方式
2、这次实验其实不一定要在linux操作系统下做,在windows操作系统一样可以实现,只要把头文件稍作修改即可。一开始做这个实验时,首先是看书,先把书上的替换算法知识点弄明白,要明白各种算法的优缺点和相互之间衍生互补关系。这四个算法中,难以实现的是LRU算法,因为它涉及到访问时间的计算,而且它的开销也比较大。OPT算法次难,它需要计算最近访问时间,并替换最近访问时间最大的页。而FIFO和CLOCK实现起来比较容易,FIFO算法的实现和CLOCK算法的实现很相似,FIFO可视为CLOCK的退化版。我先写了CLOCK算法,再删去一些约束条件就退化为FIFO算法。这就是两者的相同之处。理论上,CLOC
3、K算法需要维持一个循环的主存缓冲区,需要一个循环队列去实现,并且,FIFO算法保持先进先出,因此需要一个先进先出队列。五、 源代码#include #include #include /在window操作系统下要屏蔽此条指令#include #ifndef _UNISTD_H#define _UNISTD_H#include #include #endif#define TRUE 1#define FALSE 0#define INVALID -1#define total_instruction 320 /指令流长#define total_vp 32 /虚页长#define clear_p
4、eriod 50 /清周期typedef struct /页面结构 int pn,/页面序号pfn,/页面所在内存区的帧号counter,/单位时间内访问次数time;/上次访问的时间pl_type;pl_type pltotal_vp; /页面结构数组struct pfc_struct /页面控制结构 int pn,/页面号 pfn;/内存区页面的帧号 struct pfc_struct *next;/页面指针,用于维护内存缓冲区的链式结构;typedef struct pfc_struct pfc_type; /主存区页面控制结构别名pfc_type pfctotal_vp, /主存区页面
5、控制结构数组*freepf_head, /主存区页面控制结构的空闲页面头指针*busypf_head, /主存区页面控制结构的忙页面头指针*busypf_tail; /主存区页面控制结构的忙页面尾指针int diseffect; /页错误计数器,初次把页面载入主存时也当做页错误int atotal_instruction; /随即指令流数组int pagetotal_instruction; /指令对应的页面号int offsettotal_instruction; /指令所在页面中的偏移量int initialize(int);/初始化页面结构数组和页面控制结构数组int FIFO(int)
6、/先进先出算法int LRU(int);/最近最久未使用算法int OPT(int);/最佳置换算法int CLOCK(int);/简单时钟(钟表)算法int main( ) int s;/随机数inti; srand(10*getpid(); /*每次运行时进程号不同,用来作为初始化随机数队列的种子*/ s = (int)(float)(total_instruction-1)*(rand()/(RAND_MAX+1.0);printf(n-随机产生指令流-n); for (i=0; itotal_instruction; i+=4) /产生指令队列 ai=s; /任选一指令访问点m ai
7、1=ai+1; /顺序执行一条指令 ai+2=(int)(float)ai*(rand()/(RAND_MAX+1.0); /执行前地址指令m ai+3=ai+2+1; /顺序执行一条指令 printf(%6d%6d%6d%6dn, ai,ai+1,ai+2,ai+3); s = (int)(float)(total_instruction-1)-ai+2)*(rand()/(RAND_MAX+1.0) + ai+2; printf(-n);for (i=0;itotal_instruction;i+) /将指令序列变换成页地址流 pagei=ai/10; offseti=ai%10; pr
8、intf(n-不同页面工作区各种替换策略的命中率表-n); printf(Paget FIFOt LRUt OPTt CLOCKn); for(i=4;i=32;i+) /用户内存工作区从个页面到个页面 printf( %2d t,i); FIFO(i); LRU(i); OPT(i); CLOCK(i); printf(n); return 0;/初始化页面结构数组和页面控制结构数组/total_pf; 用户进程的内存页面数int initialize(int total_pf) int i; diseffect=0; for(i=0;itotal_vp;i+)pli.pn=i;pli.pf
9、n=INVALID; /置页面所在主存区的帧号为-1.表示该页不在主存中pli.counter=0;/置页面结构中的访问次数为pli.time=-1;/置页面结构中的上次访问的时间为-1for(i=0;itotal_pf-1;i+)pfci.next=&pfci+1; /建立pfci-1和pfci之间的链接pfci.pfn=i; /初始化主存区页面的帧号pfctotal_pf-1.next=NULL;pfctotal_pf-1.pfn=total_pf-1;freepf_head=&pfc0;/主存区页面控制结构的空闲页面头指针指向pfc0return 0;/最近最久未使用算法/int tot
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 内存 管理
