基于C#的可视化虚拟存储器管理(LUR算法)

学习是我快乐

发布日期: 2020-07-06 10:01:38 浏览量: 191
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、目的要求

理解虚拟存储器概念,并掌握分页式存储管理地址转换和缺页中断的处理过程。用高级语言模拟请求分页式虚拟存储器的工作过程和页面置换算法LRU。

二、准备知识

2.1 分页式存储管理原理

在存储器管理中,连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。

如果允许将一个进程直接分散地装入到许多不相邻的分区中,则无须再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式。在分页存储管理方式中,如果不具备页面对换功能,则称为基本分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。

请求式分页系统是建立在基本分页基础上的,为了能支持虚拟存储器功能,而增加了请求调页功能和页面置换功能。

2.2 LRU(Least recently used,最近最少使用)算法

根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

2.3 实现LRU的常用方法

  • 用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。当数组空间已满时,将时间戳最大的数据项淘汰

  • 利用一个链表来实现,每次新插入数据的时候将新数据插到链表的头部;每次缓存命中(即数据被访问),则将数据移到链表头部;那么当链表满的时候,就将链表尾部的数据丢弃

三、实验内容

设计程序模拟请求分页式虚拟存储器的地址变换和缺页中断处理过程。

页面置换算法:最近最少使用(LRU)算法。

  • 建立一个存储分块表(MBT),表示内存所有物理页的当前状态,是否空闲。此表用来为进程分配所需的内存空间,每个进程可分配5个物理页

  • 页面大小为1K个存储单元

  • 允许多进程并发执行,为每个进程建立一个页表,表示该进程中各逻辑页是否已经调入内存,如果已经调入,该逻辑页对应的内存物理页号

  • 当进程发生缺页中断,并且对应的5个物理页没有空闲时,实现采用LRU算法页面置换

  • 程序模拟输出进程的访存过程:输入逻辑地址,转换为逻辑页号和页内地址,判断是否产生缺页中断完成调页,然后实现地址变换,查页表得到对应的物理页号,从而得到物理地址

四、实验结果

主界面

随机生成序列

置换算法

上传的附件 cloud_download sy3.rar ( 192.02kb, 1次下载 )
error_outline 下载需要11点积分

发送私信

43
文章数
9
评论数
最近文章
eject