Giter Club home page Giter Club logo

page_management_project's Introduction

请求调页存储管理方式模拟说明文档

项目说明

  • 基本任务

    • 假设每个页面可存放10条指令,分配给一个作业的内存块为4
    • 模拟一个作业的执行过程
    • 该作业有320条指令(即地址空间为32页),且目前所有页还没有调入内存。
  • 模拟过程

    • 在模拟过程中,如果所访问指令在内存中,则显示其物理地址,并转到下一条指令
    • 如果没有在内存中,则发生缺页,此时需要记录缺页次数,并将其调入内存
    • 如果4个内存块中已装入作业,则需进行页面置换
      • 置换算法可以选用FIFO或者LRU算法
    • 所有320条指令执行完成后,计算并显示作业执行过程中发生的缺页率。
    • 作业中指令访问次序要求:
      • 50%的指令顺序执行
      • 25%是均匀分布在前地址部分
      • 25%是均匀分布在后地址部分

功能实现

主要变量

本项目代码中,主要使用到了如下变量

变量名 作用
isBeginLoop 判断是否开始连续执行
selectedID 表示执行命令的地址,以配合高亮显示
totalAssignmentNum 总指令数(320条)
instructionPerPage 每页的指令数(10条)
usePageNum 目前已经使用的页数(范围:[0,4])
usePages 目前正在使用的页的数组(Array[4])
curStep 当前执行指令数
missingPage 缺页次数
missingRate 缺页率(=missingPage/curStep)
order FIFO先入先出
timePerExecution 连续执行指令的间隔(可设置)

主要函数

  • generateTask()

    • 目的:产生下一条指令的地址
    • 步骤:
      • 读取上一条指令
        • 若为undefined,则表示还未开始执行,直接随机抽取一条
        • 否则,随机random一个数字,并且
          • 50%概率设成下一条
          • 25%概率设成后地址中随机一条
          • 25%概率设成前地址中随机一条
        • 设置上一条指令及selectedID,并返回
  • move(pageID, memoryID)

    • 目的:封装步骤,将pageID代表的页移入到内存中地址为memoryID的位置
  • jumptoNext(nextAddress)

    • 目的:根据nextAddress,跳转到下一条指令
    • 步骤:
      • 首先查找nextAddress是否在内存中
      • 若有,则直接调换
      • 否则,
        • 若内存未被装满,则将新页面装入
        • 否则,按照FIFO算法,将最先进入内存的页面替换
      • 输出相关信息
  • moveOneStep()

    • 目的:执行一条指令
    • 步骤:在未完成的情况下,调用jumptoNext(generateTask())
  • moveForward()

    • 目的:连续执行指令
    • 步骤:
      • 若未开始连续执行,则设定定时器,按照指定间隔执行moveOneStep()
      • 若已开始连续执行,则清除原有定时器。
  • reset()

    • 目的:重设页面

运行逻辑

  • 点击单步执行按钮,则运行moveOneStep()函数,执行一条指令,内存表中对应调用地址的标签会从灰色变成蓝色,右侧表格会输出执行命令的相关信息,包括执行地址,是否缺页,换出页,输入页。若指令已执行完毕,则会给出提示。

  • 点击开始连续执行按钮,则运行moveForward()函数,按指定的执行速度不断执行moveOneStep()函数。再次点击(此时提示文字为暂停连续执行按钮)则停止执行。若指令已执行完毕,则会给出提示。

  • 更改左侧执行速度下输入框中的数字,可更改连续执行任务的间隔时间(单位:ms)

运行方法

本项目采用Vue+Node.js开发

运行示意图

示意图

示意图

示意图

项目总结

项目亮点

  • 采用Vue+Node.js开发,可以动态反映内存中运作情况
  • 界面采用element-plus美化,较为美观
  • 可以自己设置执行速度,调整连续执行快慢

改进方向

  • 增加移动端的适配
  • 增加更多算法

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.