内存管理实现

如需源码请参见文章末尾链接(包含OPT,FIFO,LRU内存管理算法

【设计目的】

掌握物理内存和虚拟内存的基本概念;

掌握重定位的基本概念及其要点,理解逻辑地址与绝对地址;

掌握各种存储管理的实现方法,包括基本原理、地址变换和缺页中断、主存空间的分配及分配算法;掌握常用淘汰算法。

【设计内容】

编写模拟的动态页式存储管理程序,实现对动态页式存储的淘汰算法的模拟(包括先进先出淘汰算法、最近最少使用淘汰算法、最不经常使用淘汰算法三种算法均进行模拟)并计算各个算法的缺页率;并且页面淘汰算法在淘汰一页时,只将该页在页表中抹去,而不再判断它是否被改写过,也不将它写回到辅存。

【设计步骤】

以OPT算法为例说明动态页式存储管理的实现过程:

    1.指定内存页表的最大长度,并对页表进行初始化;

    2.每访问一个地址时,首先要计算该地址所在的页的页号,然后查页表,判断该页是否在主存——如果该页已在主存,则打印页表情况;如果该页不在主存且页表未满,则调入一页并打印页表情况;如果该页不足主存且页表已满,则按OPT页面淘汰算法淘汰一页后调入所需的页,打印页表情况; 逐个地址访问,直到所有地址访问完毕。

    3.OPT存储管理算法的流程图如下图所示:

  1. 根据图4编写并运行程序,给出程序运行界面。(篇幅有限,仅展示模拟OPT算法)
主要代码:
/**
 * READ:主要写的是OPT,FIFO算法自不必说,简单
 * 而LRU也是根据OPT小改而来,仅向前倒序排列得到淘汰序列
 * OPT注释较全为保留所有思考的痕迹,而LRU全部精简
 *
 *   !!!!主要看OPT!!!!
 */
static void OPT(int []pageSequence){
            //  int OUT[] = new int[pageSequence.length-PageFrame.length];                  List<Integer> OUT = new ArrayList<>();
            List<Integer> listOut = new ArrayList<>();       
            int OutPage;
            while (true){
                //  !asList(PageFrame).contains(PageSequence[Request]))           // 
                if (PageFrame.size() != PageFrameSize&&!PageFrame.contains(PageSequence[Request])){                                             X80++;                       
                    PageFrame.add(list.get(Request));     //调页
                    Request++;                    //处理下次请求
                    for (int e :                //测试输出
                            PageFrame) {
                        System.out.println(e);
                    }
                    System.out.println("---------------");


                    if (Request - 1 == pageSequence.length)
                        break;          
                } else if (PageFrame.size() == PageFrameSize&&!PageFrame.contains(PageSequence[Request])){                           
                    for (int i = Request + 1; i <= list.size() - 1; i++) {
                        listOut.add(list.get(i));
                    }

                    for (int e = Request + 1, i = 0; e <= pageSequence.length && i < PageFrame.size(); e++, i++) {        //!!!!重要 用Request+1后续进行遍历 (此处当页框遍历完时或当访问序列遍历完时才会停止,此处要保证页框必须大于访问序列)
                        OUT.add(listOut.indexOf(PageFrame.get(i)));
                    }

//                    OUT.indexOf(-1);
//                    Collections.max(OUT);
//                    OUT.indexOf(Collections.max(OUT));

                    if (OUT.contains(-1)) {                  //有以后不会访问元素时
                        OutPage = OUT.indexOf(-1);
                    } else {                                //没有则找第一次访问索引最大项
                        OutPage = OUT.indexOf(Collections.max(OUT));
                    }
                    X80++;
                    System.out.println("第" + Request + "页到来时淘汰的是:  " + OutPage);
                    PageFrame.set(OutPage, list.get(Request));       //调页


                    for (int e :                //测试输出
                            PageFrame) {
                        System.out.println(e);
                    }
                    System.out.println("---------------");

                    Request++;              //处理下次请求
                    if (Request == PageSequence.length)
                        break;

                    OUT.clear();
                    //Arrays.fill(OUT,0);  //同下
                    listOut.clear();        //清除所有,避免新new,节约空间

                }else {         //页框内页面请求调入,请求指针后移
                    Request++;
                    if (Request == PageSequence.length) {
                        break;
                    }
                }

            }

    }

访问页面:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

预期结果

运行结果

实现源码资源链接:

OPT+FIFO+LRU内存管理算法设计实现

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻歌吟松风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值