操作系统实验四
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统实验四
实验过程及结果1、实验内容
1、通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:A:50%的指令是顺序执行的
B:25%的指令是均匀分布在前地址部分C:25%的指令是均匀分布在后地址部分2、将指令序列变换为页地址流
设:页面大小为1K;
用户内存容量4页到32页;
用户虚存容量为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0 条-第9 条指令为第0页(对应虚存
地址为[0,9])
第10条-第19条指令为第1页(对应虚存地址为[10,19])………………………………
第310条-第319条指令为第31页(对应虚存地址为[310,319])
3、计算并输出下述算法在不同内存容量下的命中率。
1)最佳淘汰算法(OPT)
2)先进先出的算法(FIFO)
3)最近最久未使用算法(LRU)
命中率=(1-页面失效次数)/页地址流长度
实验流程图
核心代码
/*先进先出算法total_pf:用户进程的内存页面数*/
int FIFO(int total_pf)
{
int i,j;
pfc_type *p; /*中间变量*/
initialize(total_pf); /*初始化相关页面控制用数据结构*/
busypf_head=busypf_tail=NULL; /*忙页面队列头,队列尾链接*/
for(i=0;i { if(pl[page[i]].pfn==INV ALID) /*页面失效*/ { diseffect+=1; /*失效次数*/ if(freepf_head==NULL) /*无空闲页面*/ { p=busypf_head->next; pl[busypf_head->pn].pfn=INV ALID; freepf_head=busypf_head; /*释放忙页面队列的第一个页面*/ freepf_head->next=NULL; /*表明还是缺页*/ busypf_head=p; } p=freepf_head->next; /*按照FIFO方式调新页面入内存页面*/ freepf_head->next=NULL; freepf_head->pn=page[i]; pl[page[i]].pfn=freepf_head->pfn; if(busypf_tail==NULL) busypf_head=busypf_tail=freepf_head; else { busypf_tail->next=freepf_head; /*free页面减少一个*/ busypf_tail=freepf_head; } freepf_head=p; } } printf("FIFO:%6.4f\n",1-(float)diseffect/ 320); return 0; OPT(最佳置换算法) 设计原理:需要进行页面置换,把内存中以后一段时间都不使用或是使用时间离现在最远的页面换出。 2.FIFO(先进先出算法) 3.LRU(最久未使用算法) 实 验 总 结 在做这个实验时,遇到很多的困难,第一将课本上的关于虚拟存储的概念理解清楚,然后将几种置换算法的优缺点,例如OPT 算法作用多是作为一个标准算法来衡量其他算法的性能,FIFO 算法比较容易实现,对于具有按线性顺序地址访问空间的程序是比较合适的,而对其他情况则 效率不高。对于LRU算法来讲算是最为接近OPT算法的但是其相比于FIFO算法又比较难以实现。 评语成绩:签名: