操作系统原理实验报告
为计算命中率,需要统计在 20 次的虚页访问中命中的次数。为此,程序应
设置一个计数器 count,来统计虚页命中发生的次数。每当所访问的虚页的 pfn
项值不为-1,表示此虚页已被装入某实页内,此虚页被命中,count 加 1。最终
命中率=count/20*100%。
(3)LRU 算法中“最近最久未用”页面的确定
为了能找到“最近最久未用”的虚页面,程序中可引入一个时间计数器
countime,每当要访问一个虚页面时,countime 的值加 1,然后将所要访问的虚
页的 time 项值设置为增值后的当前 countime 值,表示该虚页的最后一次被访问
时间。当 LRU 算法需要置换时,从所有已分配实页的虚页中找出 time 值为最小
的虚页就是“最近最久未用”的虚页面,应该将它置换出去。
(4)算法中实页的组织
因为能分配的实页数 n 是在程序运行时由用户动态指派的,所以应使用链表
组织动态产生的多个实页。为了调度算法实现的方便,可以考虑引入 free 和 busy
两个链表:free 链表用于组织未分配出去的实页,首指针为 free_head,初始时
n 个实页都处于 free 链表中;busy 链表用于组织已分配出去的实页,首指针为
busy_head,尾指针为 busy_tail,初始值都为 null。当所要访问的一个虚页不
在实页中时,将产生缺页中断。此时若 free 链表不为空,就取下链表首指针所
指的实页,并分配给该虚页。若 free 链表为空,则说明 n 个实页已全部分配出
去,此时应进行页面置换:对于 FIFO 算法要将 busy_head 所指的实页从 busy
链表中取下,分配给该虚页,然后再将该实页插入到 busy 链表尾部;对于 LRU
算法则要从所有已分配实页的虚页中找出 time 值为最小的虚页,将该虚页从装
载它的那个实页中置换出去,并在该实页中装入当前正要访问的虚页。
3、 实验步骤
(1) 理解好相关实验说明。
(2) 根据实验说明,画出相应的程序流程图。
(3) 按照程序流程图,用
C/C++/Java
语言编程并实现。
4、流程图