type
status
date
slug
summary
tags
category
icon
password
请求调页存储管理方式模拟设计方案
请求调页存储管理方式模拟设计方案一、项目简介二、系统架构三、核心算法3.1 指令访问序列生成算法3.2 置换算法 - FIFO3.3 置换算法 - LRU四、请求调页系统的原理和实现过程五、用户界面设计5.1 初始界面5.2 实验结果展示六、心得体会6.1 设计过程中遇到的问题及解决办法6.2 经验
一、项目简介
- 项目内容
本项目是一个模拟请求分页分配的系统,目的是为了加深理解请求调页系统的原理和实现过程。在这个模拟系统中,我们模拟一个含有320条指令的作业执行过程,通过特定的算法模拟指令的执行顺序,并采用FIFO和LRU来处理处理可能出现的页面缺页和置换问题。
- 开发环境
- 系统:Windows 11 家庭中文版
- IDE:Visual Studio Code
- HTML 版本:HTML5
- CSS 版本:CSS3
- JavaScript 版本:ES6
二、系统架构
请求分页分配模拟系统采用前端技术实现,包括HTML、CSS和JavaScript,用于展示和模拟请求调页系统的执行过程。系统的架构主要包括以下几个组件:
- 前端界面: 使用HTML和CSS构建用户界面,提供交互元素和可视化展示。用户可以通过点击按钮来执行模拟过程,查看缺页次数和缺页率等结果。
- JavaScript逻辑: 通过JavaScript编写的逻辑代码,实现了模拟系统的核心功能。它包括生成符合要求的指令序列、执行页面分配、地址转换和页面置换等操作,并更新界面上的数据和状态。
- 数据交互: 使用JavaScript与HTML页面进行数据交互,将模拟过程中的结果实时更新到界面上。通过DOM操作,动态添加和修改表格中的数据,显示缺页次数、缺页率等信息。
- CSS样式: 采用CSS样式设计,为界面提供美观的外观和交互效果。通过定义样式类、选择器和样式属性,调整页面元素的布局、颜色和样式。
设计的两个数据结构如下:
Page
:表示进程的页面,其包括id(页号),instructions(包含的指令,10条)
Memory
:表示内存,其包括method(置换方法)、frames(页框数组,4个),lastUsedTime(一个数组,记录各个页框最近被访问的时间)
三、核心算法
核心算法部分包括指令访问序列的生成以及置换算法(FIFO与LRU)。
3.1 指令访问序列生成算法
其实现方法与作业中提供的相同,即①在0~319之间随机取一个起始指令m;②顺序执行m+1;③通过随机数跳转到m前地址部分并执行该指令;④顺序执行指令+1;⑤通过随机数,跳转到m的后地址部分并执行该指令;⑥顺序执行指令+1;重复上面的步骤直到产生320条指令。
3.2 置换算法 - FIFO
FIFO算法(First-In-First-Out,先进先出算法)是一种简单的页面置换算法,它基于先进入内存的页面先被替换的原则。该算法维护一个页面队列,当需要置换页面时,选择队列中最早进入的页面进行替换。在这里使用index来指示该发生置换的页框。
3.3 置换算法 - LRU
LRU算法(Least-Recently-Used,最近最久未使用算法)是一种基于页面使用频率的页面置换算法,它认为最近最少使用的页面是最有可能被再次使用的,因此优先选择最久未使用的页面进行替换。在实现上,使用Memory.lastUsedTime数组来标记每个页框的最近访问时间,当需要置换时,优先选择数组中最小的位置。
四、请求调页系统的原理和实现过程
请求调页系统的原理和实现过程是指操作系统中一种内存管理技术。在请求调页系统中,内存被分为固定大小的页框(page frame),进程的地址空间被分为相同大小的页面(page)。当进程需要访问某个页面时,如果该页面已经在内存中,直接访问即可;否则,需要将该页面从磁盘中读入内存。当内存中没有足够的空闲页框时,需要使用页面置换算法将某些页面置换出去,以便为新的页面腾出空间。请求调页系统的实现需要解决许多问题,如页面分配、地址转换、页面缺页和置换等。
在本项目中,采用了FIFO和LRU两种页面置换算法,模拟了请求调页系统的执行过程。在模拟过程中,我们生成了320条指令,通过特定的算法模拟指令的执行顺序,并使用FIFO和LRU算法处理可能出现的页面缺页和置换问题。在模拟过程中,记录了每一条指令的执行情况以及内存中页框的状态,以便分析缺页率和置换次数等数据。通过模拟实验,可以更清楚地了解请求调页系统的原理和实现过程,加深对操作系统内存管理的理解。
五、用户界面设计
5.1 初始界面
5.2 实验结果展示
点击FIFO算法和LRU算法的“Start”按钮便可以开始进行实验。
实验结果的展示:编号(指令序号)、指令代号(指令的内容)、内存块1~4(展示每个页框中存放的页面页号,蓝色表明发生了置换或装入)、缺页(“是”则表示装入该指令时发生缺页,为“否”时整行会变成灰色)、放入(该页面放入的存储块的编号)、换出(展示换入内存块中原有的页号)
六、心得体会
6.1 设计过程中遇到的问题及解决办法
- 在生成指令执行序列的时候出现循环卡死的情况,导致界面一直没有反应。 解决方案:使用控制台进行调试,观察过程中sequence序列的变化,发现问题所在while循环,不再使用while判断是否找对,采用规定上下界的方式来处理特殊情况。改正后的代码见5.1。
6.2 经验
- 本次实验让我更深入地了解了操作系统中请求调页存储管理方式的原理和实现过程。通过编写JavaScript代码模拟实验过程,我更加清楚地了解了请求调页系统中的页面分配、页面置换、地址转换等过程,同时也更加熟悉了FIFO和LRU两种页面置换算法的原理和实现方式。
- 学会使用chorme的“检查”中的控制台进行调试,使用console.log可以输出一些程序在执行过程中的信息,进而对代码进行修正;同时也可以使用“调试”模式,看到每一步值的变化。
- 作者:王大卫
- 链接:https://tangly1024.com/article/homework:os-lab2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。