的虚页就是“最近最久未用”的虚页面,应该将它置换出去。
4.算法中实页的组织因为能分配的实页数
是在程序运行时由用户动态指派的,所以应使用链表组织动态产生的多个实页。为了调度算法实现的方便,可以考虑引入free和busy两个链表:free链表用于组织未分配出去的实页,首指针为free_head,初始时
个实页都处于free链表中;busy链表用于组织已分配出去的实页,首指针为busy_head,尾指针为busy_tail,初始值都为
ull。当所要访问的一个虚页不在实页中时,将产生缺页中断。此时若free链表不为空,就取下链表首指针所指的实页,并分配给该虚页。若free链表为空,则说明
个实页已全部分配出去,此时应进行页面置换:对于FIFO算法要将busy_head所指的实页从busy链表中取下,分配给该虚页,然后再将该实页插入到busy链表尾部;对于LRU算法则要从所有已分配实页的虚页中找出time值为最小的虚页,将该虚页从装载它的那个实页中置换出去,并在该实页中装入当前正要访问的虚页。
三、程序流程图1FIFO算法
开始
i0
文档大全
判断该虚页是否已经调入内存
N
请求调页
记录缺页数
判断Free链表是否为空
N
置换出最先进去的页面
修改内存状态
YY
i
Y
i20
N
输出算法结果
结束
直接访问调入空闲块
f2LRU算法
实用标准开始i0
判断该虚页是否已经调入内存
YN
请求调页
直接访问
记录缺页数
Y
判断Free链表是否为空
N
将cou
time值最大的页面置
换出去
修改内存状态
i
调入空闲块
Y
i20
N
输出算法结果
结束
四、主要程序清单
i
cludestdlibhi
cludestdiohi
cludeco
iohi
cludetimehi
cludeiostreamh
文档大全
fdefi
eM10defi
eN20defi
eS100定义虚页的结构typedefstructVirtualPage
i
tp
i
tpf
i
ttimeVirtualPage
实用标准
10个虚页20个页面的访问序列实页个数
定义实页的结构typedefstructPage
i
tp
i
tpf
structPage
extPage
structPageppS定义一个存放5个实页的数组,在底下还要将其串成链表structVirtualPagevpM定义存放10个虚页的数组i
tqueueN定义一个数组,存放随机生成的20个数,表示访问虚页的次序,里面的数值不能超过9i
tcou
t存放缺页次数,用来统计缺页率。本算法没有考虑预调页,只要该页不在内存,就认为缺页一次。i
tcou
time用于LRU算法中,找出要淘汰的页。每当要访问一个虚页面时,cou
time的值加1,然后将所要访问的虚页的time项值设置为增值后的当前cou
time值i
tMemoryStatusSN记录当访问每一个虚页时,内存中的5个实页的详细信息。i
tNotI
MemoryNr