精华内容
下载资源
问答
  • 实验二 存储管理

    2018-07-03 20:05:59
    掌握分页存储管理的基本原理及分页存储管理中的地址变换过程,编制一个模拟地址变换过程的程序并能采用先进先出页面置换算法实现页面置换。 二、实验内容 1、复习分页想念管理的基本概念、基本原理、及地址变换过程...
  • 三、实验内容 (1) 通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: 1. 50%的指令是顺序执行的; 2. 25%的指令是均匀分布在前地址部分; 3. 25%的指令是均匀分布在后地址部分;...
  • 上海大学操作系统实验三(请求页式存储管理
  • 存储管理实验

    2017-07-12 08:37:54
    1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。 2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 二 . 例题  设计一个请求页式存储...
  • 教育资料 操作系统实验报告 实验序号7 实验项目名称Linux存储管理操作实践 学 号 姓 名 专业班 实验地点 指导教师 实验时间 一实验目的及要求 通过本实验的学习使学生掌握Linux存储管理相关操作的基本方法 以学生...
  • c语言,运行成功,比较基础,模拟存储管理(页面调度),页面淘汰算法采用先进先出(FIFO)
  • 基本分页存储管理的理解

    千次阅读 2020-09-19 11:21:51
    近日在学基本分页管理,想必一定会有人跟我一开始一样对于多个概念理论不理解,这里写下我的理解,有不足之处望指正。 分页基本的目的是为了让程序分散的存放内存中,将进程分成一个个小块,内存也分成小块。进程的...

    近日在学基本分页管理,想必一定会有人跟我一开始一样对于多个概念理论不理解,这里写下我的理解,有不足之处望指正。
    分页基本的目的是为了让程序分散的存放内存中,将进程分成一个个小块,内存也分成小块。进程的小块叫做页(页面) 内存的小块叫页框(物理块) !!!这个概念要记一开始容易混淆
    分页的基本思想将逻辑地址转换为物理地址 怎么转换呢?
    逻辑地址结构+页表
    1⃣️逻辑地址 高地址部分为页号 低地址为偏移量。
    2⃣️页表 第一部分页号 第二部分内存中的块号
    这里一个用高地址 一个用第一部分描述在下文会有解释
    要求出逻辑地址对应的物理地址
    1⃣️取出高位的页号,先与页表长度进行比较如果没有溢出说明正确。
    2⃣️**逻辑地址中页号对应了页表中的页号!!! ** 页表根据页号找到了起始物理块。
    3⃣️逻辑地址中的偏移量(低地址部分)➕上起始的物理块号便找到了对应的物理地址。

    上面的三步便是转化
    1⃣️系统中存放的页表的起始地址,地址里面存放的是物理块号,如何找到页号对应的物理块,看下图中的3⃣️
    对应的页表地址 = 页表始址 + 页号* 页表项长度
    这里会有一个疑问 页表项长度是什么 页表项存放的就是一个物理块号
    所以我们就可以根据页号找到页表中对应的地址,取出物理块号。
    在这里插入图片描述

    2⃣️上文讲到逻辑地址中的页号对应着页表的页号,所以我们就可以根据逻辑地址中的页号得到物理块号始址+偏移量,得到物理地址。
    3⃣️ 偏移量是什么,打个比方就像是一百人分组,10个人一组,一共有10组,每个小组从1编号,那么偏移量就相当于这个小组中的第几个人。

    讲一个题目加深印象
    页面大小为1KB ,页面2对应的物理块为8,逻辑地址2500对应的物理地址:
    先求出页号,2500/1K=2 (进程每一页大小为1KB,2500对应的就是第2页)
    偏移量,2500%1K =452 (每一页1KB,找到第二页的物理始址➕452即可)
    物理地址 81024+452= 8644
    题目中讲到页面2对应第8块物理地址,一块大小为1024那么第8块对应的物理始址便为8
    1024 然后再往前数452便是对应的物理地址,从这个地址中取出内容。在这里插入图片描述

    页表项大小介绍
    页表项在内存中是连续存放的!!! 所以我们在求页号对应的页表项时候 通过页表始址➕页号✖️页表项大小得到!!!
    例子 32位的逻辑地址,一页4KB,地址空间中就有2^32/ 4KB =1M 页
    意思是100百个十个人一组分成了10组,你需要十组存放这些人,1M个页,每个页放4KB,在计算机存储时要用二进制啦,log2 1M =20 bit
    20位相当于要用3B 存储,所以一个页表项大小要3B,那么1M个页都有一个对应的家啦,用二进制表示第0页就是0000 0000 0000 0000 0000 0000 第1页就是 0000 0000 0000 0000 0000 0001……第1M-1页就是1111 1111 1111 11111 1111 11111(因为是从0号页开始所以最后一页是1M-1)每一个地址中都有对应的物理块

    不知道我有没有表示清楚,对于基本分页存储管理还是需要进一步的了解,在这里分享我的理解也是为了让大家指出问题之处,共勉.在这里插入图片描述

    展开全文
  • 实验五 存储管理.docx

    2020-10-21 09:36:16
    通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。 [实验学时] 4学时 [实验类型] 设计...
  • 操作系统之存储管理

    2021-06-10 00:55:54
    “取指令,执行指令”,这是冯诺依曼式计算机的基本原则,进程管理...本课程首先介绍存储管理的研究对象和目的,明确存储管理的基本功能和相关的基本概念;然后从实存和虚存两个角度,分别介绍常用的几种存储管理方案。
  • 本实验的目的是通过请求页式存储管理中页面置换算法模拟设计 了解虚拟存储技术的特点 掌握请求页式管理的页面置换算法 2 实验要求 1 通过随机数产生一个指令序列 共320条指令 指令的地址按下述原则生成: 50%的...
  • 教育资料 教育资料 操作系统实验报告 实验序号 7 实验项目名称 Linux 存储管理操作实践 学号 姓名 专业班 实验地点 指导教师 实验时间 一实验目的及要求 通过本实验的学习使学生掌握 Linux 存储管理相关操作的基本...
  • 软 件 学 院 操作系统实验报告 专 业 软件工程 班 级 RB软工互 学 号 学生姓名 指导教师 PAGE 第 PAGE 16 页 共 NUMPAGES 16 页 实验四请求页式存储管理 一实验目的 深入理解请求页式存储管理的原理重点认识其中的...
  • 熟悉主存的分配与回收 理解在不同的存储管理方式下如何实现主存空间的分配与回收 掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理 方式及其实现过程 实验原理 建立两张表空闲表和已分配表分别将未...
  • 操作系统实验报告 实验序号 7 实验项目名称 Linux 存储管理操作实践 学 号 姓 名 专业班 实验地点 指导教师 实验时间 一实验目的及要求 通过本实验的学习使学生掌握 Linux 存储管理相关操作的基本方法 以学生自主...
  • 编写并调试一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。 对分区的分配算法是首次适应算法 注视很详细~
  • 存储管理-存储管理的功能

    千次阅读 2019-11-20 15:32:00
    存储管理-存储管理的功能 存储器为什么比较重要? 存储器是计算机系统的重要资源之一。任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因此,存储管理直接影响系统性能。 存储器的组成 内存:存由...

    存储管理-存储管理的功能

    存储器为什么比较重要?

    存储器是计算机系统的重要资源之一。任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因此,存储管理直接影响系统性能。

    存储器的组成

    • 内存:存由顺序编址的块组成,每块包含相应的物理单元
    • 外存

    内存外存的信息交换式谁控制的?

    CPU控制相应的输入输出设备实现外存与内存信息的交换。

    C语言.c源程序文件变成.exe可执行文件的过程

    预编译->编译->汇编->链接

    预编译

    1.删除所有#define,展开所有宏定义;
    2.处理所有条件预编译指令,如#if,#ifdef,#elif,#else,#endif;
    3.处理#include预编译指令,将被包含的文件插入到该预编译指令的位置(该过程是递归进行的);
    4.删除所有注释(实际上是被替换为一个空格);
    5.添加行号和文件名标识;
    6.保留所有#pragma编译器指令。

    编译过程

    (编译之后生成.s文件)将预处理完的文件进行一系列的词法分析,语法分析,语义分析以及优化产生相应的汇编代码文件。

    汇编过程

    汇编之后生成.o文件,可重定位目标文件)将汇编代码转化成机器可以识别的指令。

    链接过程(重要的步骤,涉及地址和空间的分配)

    (链接之后生成.exe文件,可执行目标文件)合并多个可重定位目标文件生成可执行目标文件,需要完成的工作包括:地址和空间的分配;符号决议;重定位。
    1734701-20191120144625108-1063810418.png

    虚拟存储器

    为什么要有虚拟存储器?

    内存虽然访问速度快,但是太小了,而外存访问速度慢但是好处是空间大。引出问题,怎么相互弥补一下呢?不经常访问的数据和程序放到外存中去,只有在需要的时候才调入内存中。

    虚拟存储器是干什么用的?

    1.当物理内存不够用的时候,在硬盘上也就是外存开辟一块空间当内存用,但是这块内存不是内存条提供的,所以叫虚拟内存。
    例子:玩游戏的时候,你电脑内存1G,如果没有虚拟内存的话是没办法玩的,但是有了虚拟内存就可以玩了

    2.执行程序尽管向操作系统申请内存,而不管内存够不够用,好像有无限的内存一样

    3.编译链接程序
    什么是编译链接程序?源程序要由编译程序编译成CPU可以执行的代码,链接程序要把一个进程的不同程序段链接起来来让程序跑起来.
    1734701-20191120145415317-1030949311.png

    4.为进程提供虚拟空间

    虚拟存储器的定义

    进程中的目标代码、数据等的虚拟地址组成的虚拟空间称为虚拟存储器(virtual store或virtual memory)。

    虚拟存储器的特点

    1.虚拟存储器不考虑物理存储器的大小和信息存放的实际位置,只规定每个进程中互相关连信息的相对位置
    2.每个进程拥有自己的虚拟存储器,且虚拟存储器的容量由计算机的地址结构和寻址方式确定的,直接寻址时,如果CPU的有效地址长度为16位,则其寻址范围为0到64K
    3.要实现虚拟存储器到物理存储器的变换,必须有相应的硬件支
    4.每个进程都拥有自己的虚存,且每个虚存的大小不受实际物理存储器的限制
    5.内存只能存放经常被访问的程序和数据段,访问或在某一段时间内不会被访问的信息。进程执行过程中需要这些信息时,从外存中自动调入主存

    地址变换

    虚拟地址映射到物理地址涉及两个问题一个是分区问题,一个是虚拟空间的划分,另外一个是地址映射

    虚拟空间的分区

    虚拟空间的划分与计算机系统结构有关。一般划分为系统空间和进程空间两个部分,进程空间分为程序区和控制区
    1734701-20191120150914618-575782817.png

    地址映射

    把虚拟空间中已链接和划分好的内容装入内存,并将虚拟地址映射为内存地址

    静态地址重定位

    静态地址重定位在虚拟空间程序执行之前由装配程序完成地址映射工作

    特点:

    • 对于虚拟空间内的指令或数据来说,静态地址重定位只完成一个首地址不同的连续地址变换
    • 所有待执行的程序必须在执行之前完成它们之间的链接

    优点:不需要硬件支持。
    缺点:无法实现虚拟存储器;必须占用连续的内存空间,并且难以做到程序和数据的共享。

    动态地址重定位

    动态地址重定位在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。

    特点:动态重定位依靠硬件地址变换机构完成

    优点:

    • 可以对内存进行非连续分配
    • 动态重定位提供了实现虚拟存储器的基础
    • 有利于程序段的共享

    地址重定位机构需要一个(或多个)基地址寄存器BR和一个(或多个)程序虚拟地址寄存器VR。指令或数据的内存地址MA与虚拟地址的关系为:MA=(BR)+(VR)
    1734701-20191120151504786-1170651639.png

    内外存数据传输控制

    目的

    实现内存扩充

    过程

    内存和外存之间必须经常地交换数据,即将执行的程序和数据段调入内存,处于等待状态的程序和数据段调出内存

    基本控制方法

    用户自己控制:

    覆盖:
    1.要求用户清楚地了解程序的结构,并指定各程序段调入内存的先后次序
    2.覆盖技术不能实现虚拟存储器

    操作系统控制

    交换(swapping)方式

    1.交换方式由操作系统把那些在内存中处于等待状态的进程换出内存,而把那些等待事件已经发生、处于就绪态的进程换入内存
    2.交换方式一般不进行部分交换,每次交换除去常驻内存部分后的整个进程
    3.交换方式能完成内存扩充任务,但不能实现进程大小不受内存容量限制的虚拟存储器

    请求调入(on demand)方式和预调入(on prefetch)方式

    请求调入方式是在程序执行时,如果所要访问的程序段或数据段不在内存中,则操作系统自动地从外存将有关的程序段和数据段调入内存

    预调入由操作系统预测在不远的将来会访问到的程序段和数据段部分,并在它们被访问之前选择适当的时机调入内存

    请求调入方式和预调入方式可以实现进程大小不受内存容量限制的虚拟存储器

    内存的分配与回收

    存储管理模块要为每一个并发执行的进程分配内存空间。另外,当进程执行结束之后,存储管理模块要及时回收该进程所占用的内存资源,以便给其他进程分配空间

    策略:

    (1) 分配结构:登记内存使用情况,供分配程序使用的表格与链表。例如内存空闲区表、空闲区队列等。

    (2) 放置策略:确定调入内存的程序和数据在内存中的位置。这是一种选择内存空闲区的策略。

    (3) 交换策略:在需要将某个程序段和数据调入内存时,如果内存中没有足够的空闲区,由交换策略确定内存中的哪些程序段和数据段调出内存,以便腾出足够的空间。

    (4) 调入策略:外存中的程序段和数据段什么时间按什么样的控制方式进入内存。调入策略与内外存数据交换的控制方式有关。

    (5) 回收策略:回收策略包括两点,一是回收的时机,二是调整回收空闲区和已存在空闲区。

    内存信息的共享与保护

    共享

    在多道程序设计环境下,内存中的许多用户或系统程序和数据段可供不同的用户进程共享。这种资源共享将会提高内存的利用率

    保护

    内存信息保护方法有硬件法、软件法和软硬件结合三种:

    上下界保护法是一种常用的硬件保护法

    为每个进程设置一对上下界寄存器,分别放置被保护程序和数据段的起始地址和终止地址。
    程序执行过程中,对内存进行访问操作时首先进行访址合法性检查,即检查重定位后的内存地址是否在上、下界寄存器规定的范围之内。
    在规定的范围之内,访问是合法的;否则是非法的,并产生访址越界中断。

    1734701-20191120152843274-1268988512.png

    保护键法也是一种常用的存储保护法
    为每一个被保护存储块分配一个单独的保护键。在程序状态字中设置相应的保护键开关字段,不同进程赋予不同的开关代码与被保护的存储块中的保护键匹配。保护键可设置成对读写同时保护或只对读、写进行单项保护。

    保护键0对2K到4K的存储区进行读写同时保护的,保护键2对4K到6K的存储区进行写保护。

    如果开关字与保护键匹配或存储块未受到保护,则访问该存储块是允许的,否则将产生访问出错中断。

    1734701-20191120152901770-1133045141.png

    界限寄存器与CPU的用户态或核心态工作方式相结合的保护方式

    在这种保护模式下,用户态进程只能访问界限寄存器规定范围内的内存部分,核心态进程可以访问整个内存地址空间

    展开全文
  • 操作系统 存储管理实验报告

    万次阅读 多人点赞 2020-06-19 10:05:40
    本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 二、实验内容 (1) 通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对...

    实验要求

    实验目的
    存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。
    本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
    二、实验内容
    (1) 通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影响。
    页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。
    在本实验中,假定页面大小为1k,用户虚存容量为32k,用户内存容量为4页到32页。
    (2) produce_addstream通过随机数产生一个指令序列,共320条指令。
    A、 指令的地址按下述原则生成:
    1) 50%的指令是顺序执行的
    2) 25%的指令是均匀分布在前地址部分
    3) 25%的指令是均匀分布在后地址部分
    B、 具体的实施方法是:
    1) 在[0,319]的指令地址之间随机选取一起点m;
    2) 顺序执行一条指令,即执行地址为m+1的指令;
    3) 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;
    4) 顺序执行一条指令,地址为m’+1的指令
    5) 在后地址[m’+2,319]中随机选取一条指令并执行;
    6) 重复上述步骤1)~5),直到执行320次指令
    C、 将指令序列变换称为页地址流
    在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
    第0条~第9条指令为第0页(对应虚存地址为[0,9]);
    第10条~第19条指令为第1页(对应虚存地址为[10,19]);
    。。。。。。
    第310条~第319条指令为第31页(对应虚存地址为[310,319]);
    按以上方式,用户指令可组成32页。
    (3) 计算并输出下属算法在不同内存容量下的命中率。
    1) 先进先出的算法(FIFO);
    2) 最近最少使用算法(LRU);
    在这里插入图片描述
    四、运行结果
    运行程序:
    a、 终端先显示:
    Start memory management.
    Producing address flow, wait for while, please.
    b、 地址流、地址页号流生成后,终端显示:
    There are algorithms in the program
    1、 Optimization algorithm
    2、 Least recently used algorithm
    3、 First in first out algorithm
    4、 Least frequently used algorithm
    Select an algorithm number, please.
    用户输入适当淘汰算法的号码,并按回车,若是第一次选择,输出相应的地址页号流。然后输出该算法分别计算的用户内存从2k32k时的命中率,若输入的号码不再14中,则显示:
    there is not the algorithm in the program,并重复b。
    c、 输出结果后,终端显示 “do you try again with anther algorithm(y/n)”。若键入y则重复b,否则结束。(一般讲四种算法都用过后结束,以便比较)。
    五、运行结果讨论
    1、 比较各种算法的命中率
    2、 分析当用户内存容量增加是对命中率的影响

    实验报告

    1.实验目的

    存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。

    本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

    2.实验内容与要求

    ①实验内容
    (1) 通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影响。

    页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。

    在本实验中,假定页面大小为1k,用户虚存容量为32k,用户内存容量为4页到32页。

    (2) produce_addstream通过随机数产生一个指令序列,共320条指令。
    A、 指令的地址按下述原则生成:
    1) 50%的指令是顺序执行的
    2) 25%的指令是均匀分布在前地址部分
    3) 25%的指令是均匀分布在后地址部分

    B、 具体的实施方法是:
    1) 在[0,319]的指令地址之间随机选取一起点m;
    2) 顺序执行一条指令,即执行地址为m+1的指令;
    3) 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;
    4) 顺序执行一条指令,地址为m’+1的指令
    5) 在后地址[m’+2,319]中随机选取一条指令并执行;
    6) 重复上述步骤1)~5),直到执行320次指令

    C、 将指令序列变换称为页地址流
    在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
    第0条~第9条指令为第0页(对应虚存地址为[0,9]);
    第10条~第19条指令为第1页(对应虚存地址为[10,19]);
    。。。。。。
    第310条~第319条指令为第31页(对应虚存地址为[310,319]);
    按以上方式,用户指令可组成32页。

    (3) 计算并输出下属算法在不同内存容量下的命中率。
    1) 先进先出的算法(FIFO);
    2) 最近最少使用算法(LRU);

    ②实验要求
    运行程序:
    a、 终端先显示:
    Start memory management.
    Producing address flow, wait for while, please.

    b、 地址流、地址页号流生成后,终端显示:
    There are algorithms in the program
    1、 Optimization algorithm
    2、 Least recently used algorithm
    3、 First in first out algorithm
    4、 Least frequently used algorithm
    Select an algorithm number, please.
    用户输入适当淘汰算法的号码,并按回车,若是第一次选择,输出相应的地址页号流。然后输出该算法分别计算的用户内存从2k32k时的命中率,若输入的号码不再14中,则显示:
    there is not the algorithm in the program,并重复b。

    c、 输出结果后,终端显示 “do you try again with anther algorithm(y/n)”。若键入y则重复b,否则结束。(一般讲四种算法都用过后结束,以便比较)。法

    3.流程图与模块调用

    在这里插入图片描述

    4.实验分析

    想要完成操作系统算法,首先要弄清楚操作系统相关的专业术语。弄清各个算法的流程和目的要求。才能模拟出相关算法的过程。
    在我的理解中,
    为什么要进行页面置换?

    在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入。

    这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断。操作系统在处理缺页中断时,要把所需页面从外存调入到内存中。如果这时内存中有空闲块,就可以直接调入该页面;如果这时内存中没有空闲块,就必须先淘汰一个已经在内存中的页面,腾出空间,再把所需的页面装入,即进行页面置换。

    先进先出法(FIFO)
    算法描述:由于认为最早调入内存的页不再被使用的可能性要大于刚调入内存的页,因此,先进先出法总是淘汰在内存中停留时间最长的一页,即先进入内存的页,先被换出。先进先出法把一个进程所有在内存中的页按进入内存的次序排队,淘汰页面总是在队首进行。如果一个页面刚被放入内存,就把它插在队尾。

    最近最少使用置换法(LRU)
    算法描述:最近最少使用置换法(LRU)是选择在最近一段时间里最久没有使用过的页面予以淘汰。借鉴FIFO算法和OPT算法,以“最近的过去”作为“不久将来”的近似。

    5.运行情况

    ①程序正常运行测试:
    在这里插入图片描述
    在这里插入图片描述
    ② 比较各种算法的命中率、分析当用户内存容量增加是对命中率的影响:
    利用如下语句,可以直观对比区别:

    for i in range(2,33):
        print('memory={} FIFO/LRU命中率:{} / {}'.format(i,FIFO(i),LRU(i)))
    

    在这里插入图片描述
    由上图可以直观看出:
    ①当用户内存容量增加对命中率会相应增加;
    ②对于FIFO与LRU两种算法,在内存容量为20左右时,命中率差不多;
    在内存容量小于20时,FIFO算法命中率更高;
    在内存容量大于20时,LRU算法命中率更高;

    6.实验体会

    通过本次实验,我深刻的理解了操作系统中资源的分配方式和存储管理的调度方式。操作系统实验重在理解每一个算法的意图和目的,那么就选择适当的数据结构模拟过程就可以完成相关算法了。

    对于FIFO算法,这个算法原理简单,就是先进先出。对于这个结构最好采用的就算队列了,对于python而言,我用的是list集合,每次添加数据的时候添加到第0位置(list的insert(0,num)),而如果移除的时候移除末尾的页数(list的pop())。在这个过程中,每执行一条指令的时候,如果这个指令对应的地址(指令/10)在list中,那么就命中,否则就是缺页,需要移除尾,在0位置添加元素。

    对于LRU算法,这个算法跟FIFO其实还是挺像的,但是有一点区别,最近最少使用。也就是说在一个正常序列的时候如果命中的话,就会把这个地址的页号移动到首位(或者链表首位)。而如果缺页的时候,要把这个链表的末尾位置移除,因为末尾的元素是最近用的最少的(很久前才有的)。对于数据结构,依然选择list。其实这个是典型的堆栈的数据结构,利用python的list的pop()和append()就可以完美完成。

    本次实验采用python完成,IDE是pycharm,python的列表list的insert()、pop()、append()方法可以把列表很好的模拟成堆栈或者队列,这些在算法的编写过程中否起到了很大的作用。

    【附】实验代码

    import random
    
    num = [0 for i in range(0, 325)]  # 生成随机数会有溢出,所以数组长度设置大一点
    page = [0 for i in range(0, 320)]
    
    
    # 按照题目的算法生成随机数
    def createRandomNum():
        i = 0
        while i < 320:
            m = random.randint(0, 318)
            num[i] = m + 1  # 顺序执行了一条指令
            m1 = random.randint(0, m + 1)
            i += 1
            num[i] = m1  # 在[0,m+1]之间执行了一条指令
            i += 1
            num[i] = m1 + 1  # 顺序执行了一条指令
            if m1 < 317:
                m2 = random.randint(m1 + 2, 319)
                i += 1
                num[i] = m2  # 在[m1+2,319]之间执行了一条指令
    
        print('**********生成320个随机数**********')
        str = ''
        for index, i in enumerate(num):
            if index < 320:
                str += '{}\t'.format(i)
                if (index + 1) % 20 == 0:
                    str += '\n'
        print(str)
    
    
    # 将指令序列变换称为页地址流
    def changeAsPage():
        for index, i in enumerate(num):
            if index < 320:
                page[index] = int(i / 10)
        print('**********转化为320个页码数**********')
        str = ''
        for index, i in enumerate(page):
            str += '{}\t'.format(i)
            if (index + 1) % 20 == 0:
                str += '\n'
        print(str)
    
    # 先进先出法
    def FIFO(msize):
        Q = []  # 定义队列
        queYeTimes = 0  # 缺页次数
        for item in page:
            if len(Q) < msize:
                Q.insert(0, item)  # 压入队列
            elif item in Q:
                Q.remove(item)
            else:
                Q.pop()
                Q.insert(0, item)
                queYeTimes += 1
        return (1-queYeTimes/320)
    
    # 最近最少使用置换法
    def LRU(msize):
        L = []  # 定义堆栈
        queYeTimes = 0  # 缺页次数
        for item in page:
            if item in L:
                [L[0],L[len(L)-1]]=[L[len(L)-1],L[0]]
            elif len(L)<msize:
                L.append(item)
            else:
                L.append(item)
                del L[0]
                queYeTimes+=1
        return (1 - queYeTimes / 320)
    
    
    print('Start memory management.\nProducing address flow, wait for while, please.\n')
    print('There are algorithms in the program\n1、	Optimization algorithm\n2、	Least recently used algorithm\n3、	First in first out algorithm\n4、	Least frequently used algorithm\nSelect an algorithm number, please.')
    key = int(input())
    createRandomNum()
    changeAsPage()
    
    i=2
    while i<33:
        if key==2:
            print('memory={} LRU命中率:{}'.format(i,LRU(i)))
            flag = input('do you try again with anther algorithm(y / n):')
            if flag=='y':
                key = int(input('input the num:'))
                i+=1
            else:
                break
        elif key == 3:
            print('memory={} FIFO命中率:{}'.format(i,FIFO(i)))
            flag = input('do you try again with anther algorithm(y / n):')
            if flag == 'y':
                key = int(input('input the num:'))
                i += 1
            else:
                break
    
    # for i in range(2,33):
    #     print('memory={} FIFO/LRU命中率:{} / {}'.format(i,FIFO(i),LRU(i)))
    
    
    展开全文
  • 这是我自己写的操作系统储存管理算法的实验报告,希望可以帮助到你。。。
  • 一实验目的 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解熟悉可变分区存 储管理的内存分配和回收 二实验内容 确定内存空间分配表 采用最优适应算法完成内存空间的分配和回收 编写主函数对所做工作...
  • 一设计任务 完成存储器动态分区分配算法的模拟实现 二...实现分区存储 管理的内存回收算法在这些存储管理中间必然会有碎片的产生当碎片产 生时进行碎片的拼接等等相关的内容 三预期目的 让我们了解操作系统的基本概念理
  • 操作系统储存管理功能

    千次阅读 2019-05-12 11:32:59
    操作系统的存储管理功能分为四个部分 地址映射 虚拟储存 内存分配 储存保护 一:地址映射 1. 固定地址映射 在编程或编译确定逻辑地址和物理地址的映射关系 特点:程序加载时必须放在指定的内存区域 容易产生地址冲突...

    操作系统的存储管理功能分为四个部分

    • 地址映射
    • 虚拟储存
    • 内存分配
    • 储存保护

    一:地址映射

    1. 固定地址映射

    在编程或编译确定逻辑地址和物理地址的映射关系
    特点:程序加载时必须放在指定的内存区域
    容易产生地址冲突,运行失败

    2. 静态地址映射

    程序装入时由操作系统完成逻辑地址到物理地址的映射
    MA = VA + BA
    特点:程序运行之前确定映射关系,装入后不能移动,占用连续的内存空间

    3. 动态地址映射

    在程序执行过程中把逻辑地址转换为物理地址
    MA = VA + BA
    特点:程序占用的内存空间可动态变化,不要求连续的内存空间,便于多个进程共享代码,缺点是硬件支持(MMU),软件复杂

    二:虚拟存储

    借助辅存在逻辑上扩充内存,解决内存不足的问题
    过程:

    • 迁入:将要运行的部分装入内存
    • 迁出:把不运行的部分暂时放在辅存
      前提
      短时间内进程不运行的部分往往占大部分

    程序局部性原理
    时间局部性
    空间局部性

    实现虚拟存储的前提:
    足够的辅存
    适当容量的内存
    地址变换机构

    三:内存分配

    为程序分配足够的内存空间

    Windows虚拟地址空间分配

    在32位的机器上,地址空间从0x00000000~ 0xFFFFFFFF,总大小为4GB。一般而言,低地址空间,从0x00000000~ 0x7FFFFFFF使用户空间,高地址空间被分配给系统。

    总体:

    虚拟内存范围功能
    0x00000000 ~ 0x0000FFFF这段内存为空指针区,不可以同时访问
    0x00010000 ~ 0x7FFEFFFF这段供进程使用,包括所有的数据,静态或动态加载的exe和dll模块,以及内存映射文件
    0x7FFF0000 ~ 0x7FFFFFFF此64KB是禁止访问的,因为它挨着内核区域,防止内核区域被覆盖,以破坏内核的正确性和完整性,试图改写此区域,会产生异常,以阻拦进一步改写内存区域
    0x80000000 ~ 0xFFFFFFFFF内核区域,用于线程调度,内存管理,文件系统支持,网络支持和所有设备驱动的代码全部在次分区加载,驻留在这个分区中的一切均可被所有进程共享

    用户低2GB空间分配:

    虚拟内存地址范围功能
    0x0 ~ 0xFFFF拒绝访问区域,用于帮助程序员避免引用错误的指针
    0x00010000 ~ 0x7FFEFFFF专用进程地址空间
    0x7EFDE000 ~ 0x7EFDEFFF用于第一个线程的线程环境块(TEB),系统会在这一页的前面创建附加的TEB(从0x7FFDD000开始向上)
    0x7FFDF000 ~ 0x7FFDFFFF进程环境块(PEB)
    0x7FFE0000 ~ 0x7FFE0FFF共享的用户数据页,这个只读方式的页面被映射到系统空间中包含系统时间,时钟计数和版本号信息的一个页面,这个页面的存在使数据在用户态下可以直接读取而不必请求核心态的转换
    0x7FFE1000 ~ 0x7FFEFFFF拒绝访问区域
    0x7FFF0000 ~ 0x7FFFFFFF拒绝访问区域,用于防止线程跨越用户/系统空间边界传送缓存区,在变量MmUserProbeAddress中包含此页的起始地址

    核心高2GB空间分配:

    虚拟内存地址范围功能
    0x80000000 ~ 0xc0000000内核执行体,HAL和硬件驱动程序
    0xc0000000 ~ 0xc0800000进程页和超空间
    0xc0800000 ~ 0xFFBE000系统高速缓存,分页缓冲池,非分页缓冲池
    0xFFBE000 ~ 0xFFC0000崩溃储存驱动程序区域
    0xFFC0000 ~ 0xFFFFFFF留给HAL使用

    内存管理

    每个进程都拥有自己的4G(32位机)虚拟内存地址,各个进程之间是相互独立的,每个进程的数据可由其中线程共享。虚拟内存地址本身不对应任何物理地址,直接引用会引发错误,虚拟内存地址必须映射物理地址后才能储存数据。内存分配其实指的是虚拟内存地址映射物理内存,内存回收就是指解除映射关系。

    四:储存保护

    保证在内存中的多道程序只能在给定的储存区域内活动并互不干扰

    1. 防止访问越界
    2. 防止访问越权

    方法:界址寄存器
    在CPU中设置一对下限寄存器和上限寄存器存放程序在内存中的下限地址和上限地址
    程序访问内存时硬件自动将目的地址与下限寄存器和上限寄存器中存放的地址界限进行比较,判断是否越界

    关于计算机硬件存储系统详细见计算机存储系统

    展开全文
  • 分页存储管理和分段存储管理 一、实验目的 加深对分页存储管理方式和分段存储管理方式的理解,特别是要掌握地址转换的方法。 二、实验原理 分页存储管理方式 页面:将一个进程的逻辑地址空间分成若干个大小相等的片...
  • 存储管理——页式存储管理

    千次阅读 2020-01-16 15:07:38
    一、页式存储管理的基本思想 *把主存划分成多个大小相等的页架 *程序受页架尺寸限制,程序的逻辑地址也自然分成页 *不同的页可以放在不同页架中不需要连续 *页表用于维系进程的主存完整性。 1、页式存储管理中的地址...
  • 真正的模拟操作系统中 内存的分配 (分页存储管理)(操作系统模拟多进程内存分配) 连续的分配方式会形成许多碎片,虽然通过紧凑的方法将血多碎片拼接成可用的大块空间 但须付出很大的开销。如果允许将一个进程...
  • 1. 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解; 2. 熟悉虚存管理的各种页面淘汰算法; 3. 通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 【实验准备】 1.虚拟存储器的...
  • 操作系统原理(虚拟存储管理技术)蒲晓蓉老师讲解
  • 目录页式存储管理段式存储管理分页和分段存储管理的主要区别段页式存储管理 页式存储管理 1. 基本原理 页式存储管理是把主存储器划分成大小相等的若干区域,每个区域称为一块,并对它们加以顺序编号,如0#块、1#块...
  • 大学计算专业,操作系统实验报告,存储管理
  • C语言模拟实现虚拟存储管理(请求分页存储管理

    千次阅读 多人点赞 2020-06-25 23:19:08
    本实验的目的是:通过编程模拟实现请求分页存储管理中硬件地址转换过程、缺页中断处理过程,以及先进先出页面置换算法,加深对页式虚拟存储管理的理解,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换方法...
  • 通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。 二、实验内容 1、实现固定分区存储管理方式下存储空间的分配和去配。 2、已知当前内存分配表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 526,640
精华内容 210,656
关键字:

存储管理的目的