某学院操作系统课程设计报告(存储管理实验).doc
文本预览下载声明
存储管理实验
存储管理实验
城院03软件工程(1)班第一组
城院03软件工程(1)班第一组
指导老师:古新生(教授)
组长:冯XX 学号:20034931104
组员:聂XX 学号:20034931108
陈XX 学号:20034931111
林XX 学号:20034931113
叶XX 学号:20034931115
秦XX 学号:20034931121
提交日期:2005年5月1日
存储管理
内存页面调度算法比较
【实验目的】
理解内存页面调度的机理,掌握几种理论调度算法实现,并通过实验比较各种调度算法的优劣。此外通过实验了解HASH表数据结构的使用。
【准备知识】
C++。指针、结构体(类)。
据结构HASH表查找方式。
作系统相关内存交换知识。
4.可能用到的几个LINUX函数:
= 1 \* GB2 ⑴ int getpid() //获得当前进程的id
⑵ void srand(int a) //以a为种子,为后面产生随机数作准备
⑶ int rand() //根据前面的种子,返回一个随机数
【实验内容】
对比几种算法的命中率。
1.先进先出的算法。FIFO(First In First Out)
2.最近最少使用的算法。LRU(Least Recently Used)
3.最近未使用算法。NUR(Never Used Recently)
4.最佳置换算法。OPT(Optimal Replacement)
【实验指导】
拥有页面交换机制的操作系统总是把当前进程中急需处理的部分页面换入到内存当中,而把更多暂时不需处理的页面放置在外存当中,由于进程需要处理页面的顺序不同,而需要在内存与外存之间进行页面交换,交换算法也就应运而生。
本实验并没有进入系统空间对实际进程页面进行控制,而是在用户空间用线性表的连续存储方式对进程页面交换进行的模拟。
一.FIFO
1.原理简述:
(1)在分配内存页面数(AP)小于进程页面数(PP)时,当然是最先的AP个页面放入内存;
(2)这时有需要处理新的页面,则将原理在内存中的AP个页面中最先进入的调出(是以称为FIFO),然后放入新页面;
(3)以后如果有新页面需要调入,按(2)之规则进行。
算法特点:所使用的内存页面构成一个队列。
2.图表描述:
假设某个进程在硬盘上被化为5个页面(PP=5),以1、2、3、4、5分别表示,而下面是处理机调用它们的顺序(这取决于进程本身):
1、4、2、5、3、3、2、4、2、5
而内存可以控制的页面数为3(AP=3),那么在使用FIFO算法时,这3个页面的内存使用情况应该是这样的:
队列第1位
1
4
2
5
3
3
3
4
2
5
队列第2位
1
4
2
5
5
5
3
4
2
队列第3位
1
4
2
2
2
5
3
4
页面5进入,而最先进入的页面1被调出
页面5进入,而最先进入的页面1被调出
页面3进入,而此时3个页面中最先进入的页面4被调出
虽然有页面需要处理,但是页面本身以在内存中,不需再调入了
图 1?1
不难看出本例共换入页面8次,diseffect=8。
3.算法实现提示:
要得到“命中率”,必然应该有一个常量total_instruction记录页面总共使用次数;此外需要一个变量记录总共换入页面的次数(需要换出页面,总是因为没有命中而产生的)diseffect。利用公式可以得到命中率。
= 1 \* GB2 ⑴ 初始化。设置两个数组page[ap]和pagecontrol[pp]分别表示进程页面数和内存分配的页面数,并产生一个的随机数序列main[total_instruction](当然这个序列由page[]的下标随机构成),表示待处理的进程页面顺序,diseffect置零。
= 2 \* GB2 ⑵ 看main[]中是否有下一个元素,有就由main[]中获取该页面下标,并转到 = 3 \* GB2 ⑶;没有,就转到 = 7 \* GB2 ⑺。
= 3 \* GB2 ⑶ 如果该page业已在内存中,就转到 = 2 \* GB2 ⑵;否则就到 = 4 \* GB2 ⑷,同时未命中的diseffect加1。
= 4 \* GB2 ⑷ 观察pagecontrol是否占满,如果占满需将使用队列( = 6 \* GB2 ⑹中建立的)中最先进入的(
显示全部