精华内容
下载资源
问答
  • 操作系统课请求分页存储管理模拟模拟程序,程序相对简单,通过这模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。
  • 请求分页存储管理Python实现源代码+课设报告文档-海南大学信息学院操作系统课设。请求分页存储管理Python实现源代码+课设报告文档-海南大学信息学院操作系统课设。
  • 请求页式管理是种常用的虚拟存储管理技术。本设计通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。 (1)从置换算法中任选 2 种(OPT、 FIFO、LRU、Clock...
  • 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。
  • 若有采纳,请你的课设后面引用的参考文献中加入该条引用!!!望大家尊重版权!!!! 为了避免完全抄袭,里面的课设报告为PDF版,若需要word版,评价留言你的邮箱!!!!!!若觉得有用,记得好评!!绝对有用!...
  • 1、建立一张位示图,用来模拟内存的分配情况,利用随机数产生组0和1的数对应内存的使用情况。 2、输入块(页)的大小,通过模拟位示图为本作业分配内存空间建立相应的页表(长度不定); 3、录入逻辑地址转换成...
  • 请求分页存储管理

    2012-12-10 18:44:57
    操作系统实验,请求分页存储管理,无BUG版
  • 请求分页中的硬件支持 1.页表机制 ●基本作用:地址转换 ●增加页表字段,供程序换入换出时参考 状态位P:用于指示该页是否已调入内存 访问字段A:记录本页在一段时间内被访问的次数 修改位M:该页调入内存后是否被...

    请求分页中的硬件支持
    1.页表机制
    ●基本作用:地址转换
    ●增加页表字段,供程序在换入换出时参考
    在这里插入图片描述
    状态位P:用于指示该页是否已调入内存
    访问字段A:记录本页在一段时间内被访问的次数
    修改位M:该页在调入内存后是否被修改过
    外存地址:指示该页在外存上的地址(物理块号)
    2.缺页中断机构:
    ●缺页中断与其他中断的不同:
    (1)在指令执行期间产生和处理中断信号
    (2)一条指令在执行期间可能产生多次缺页中断
    在这里插入图片描述
    3.地址变换机构
    在这里插入图片描述
    内存分配策略和分配算法
    1.最小物理块数的确定:
    ●保证进程正常运行所需的最小物理块数;
    ●与硬件结构有关,取决于指令的格式、功能和寻址方式。
    2.物理块的分配策略:
    ●两种内存分配策略:
    ■固定分配:为进程分配的物理块数固定不变。
    ■可变分配:先为每个进程分配一定 数目的物理块,若发生缺页中断,再增加物理块数。
    ●两种置换策略:
    ■局部置换:只能将自己的某个内存页换出。
    ■全局置换:可将系统中任一进程的内存页换出。
    ●组合出以下三种适用策略:
    ■(1) 固定分配局部置换
    ■(2) 可变分配全局置换
    ■(3)可变分配局部置换
    3.物理块分配算法:
    ●(1)平均分配算法
    ●(2)按比例分配算法:根据进程大小按比例分
    配(Si/s)*m (m:物理块总数,S:各进程页面总数)
    ●(3)考虑优先权的分配算法:一-部分按比例分配;另一部分为优先权高的进程增加分配份额
    调页策略
    1.调入页面的时机:
    ●预调页策略:进程首次调入内存时,由程序员指出应该先调入哪些页。
    ●请求调页策略:进程运行中发生缺页时,提出请求,由OS将其所需页面调入内存。
    2.确定从何处调入页面:
    请求分页系统将外存分为两部分:
    文件区(离散分配)、 对换区(连续分配)
    ●发生缺页请求时,有以下三种情况:
    系统拥有足够的对换区空间
    系统缺少足够的对换区空间
    UNIX方式
    3.页面调入过程:
    ①若发生缺页,便向CPU发出缺页中断
    ②中断处理程序保存CPU环境,转中断处理程序
    ③该程序查找页表,得到该页在外存中的块号
    ④若内存未满,启动磁盘I/O调入页面;若内存已满,先置换再调入
    ⑤修改页表项内容,并写入快表。

    展开全文
  • 题目:1。存储管理 描述请求分页存储管理。 一. 产生一个作业及作业页面序列P(pi),例如:P(0,2,3,4,1,5,2,3,0,4,1,5)。 二.分配物理内存块数M。 三.采用FIFO,LRU置换算法。
  • 操作系统 请求分页存储管理

    千次阅读 2020-12-22 13:06:04
    请求分页存储管理中的页表机制 缺页中断机构 地址转换 页置换算法 页分配和页置换策略 工作集及抖动现象的消除 请求分页存储管理的优缺点 请求分页存储管理中的页表机制 系统需要解决的问题 系统如何获知进程当前...

    目录

    • 请求分页存储管理中的页表机制
    • 缺页中断机构
    • 地址转换
    • 页置换算法
    • 页分配和页置换策略
    • 工作集及抖动现象的消除
    • 请求分页存储管理的优缺点

    请求分页存储管理中的页表机制

    系统需要解决的问题

    • 系统如何获知进程当前所需页面不在主存
      当发现缺页时,如何把所缺页面调入主存
      当主存中没有空闲的页框时,为了要接受一个新页,需要把老的一页淘汰出去,根据什么策略选择欲淘汰的页面

    页表机制

    页描述子的扩充(页表机制 )

    • 状态位P(中断位)指示该页是在内存还是在外存
    • 访问位A 用于记录本页在一段时间内被访问的次数或记录本页在最近多长时间未被访问
    • 修改位M 表示该页在内存中是否被修改过
    • 外存地址 该页在外存上的地址,通常是物理块号

    在这里插入图片描述

    缺页中断机构

    • 在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断。相应的中断处理程序把控制转向缺页中断子程序,执行此子程序,即把所缺页面装入主存,然后处理机重新执行缺页时打断的指令。这时,就将顺利形成物理地址。
    • 缺页中断与一般中断的区别
      • 在指令执行期间产生和处理中断信号
      • 一条指令在执行期间可能产生多次缺页中断,例如:在请求分页存储管理中,当中断位反映出进程当前欲访问的页不在内存时(1表示该页在内存,0表示该页不在内存),就产生一次缺页中断。系统收到缺页中断信号后就立即执行相应的缺页中断处理程序。
      • 特点:
        (1)缺页中断的产生和处
        理(中断的响应)出现在一条指令的
        执行期内。
        (2)程序运行过程中,一条指令的执行
        期间内可能会产生多次缺页中断。
        在这里插入图片描述

    地址变换机构

    • 如果在快表中未找到该页的页表项,则应再到内存中去查找页表,再从找到的页表项中的状态位P,该页是否调入内存。其结果可能是:
      (1)该页已经调入内存,这是应将此页的页表项写入快表,当快表已满时,应先调出按某种算法所确定的页的页表项,然后再写入该页的页表项。
      (2)该页尚未调入内存,这时便应产生缺页中断,请求OS从外存中把该页调入内存。

    请求分页中的地址变换过程
    在这里插入图片描述
    页面调入过程

    在这里插入图片描述

    页置换算法

    缺页率

    • 假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m≤n)
    • 如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A=S+F,那么该进程在其运行过程中的缺页率即为
      在这里插入图片描述

    影响缺页率的因素

    • 分配给进程的物理页面数
    • 页面本身的大小
    • 程序的编制方法
    • 页面淘汰算法

    最佳(Optimal)置换算法

    • 最佳置换算法是由Belady于1966年提出的一种理论上的算法
    • 其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面
    • 采用最佳置换算法,通常可保证获得最低的缺页率
    • 采用最佳置换算法可保证获得最低的缺页率。
    • 由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法也是无法实现的,但是可利用该算法去评价其它算法。

    利用最佳页面置换算法时的置换图

    在这里插入图片描述

    先进先出(FIFO)页面置换算法

    • 该算法总是淘汰最先进入内存的页面,即选择在内存中的驻留时间最久的页面予以淘汰。
    • 该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老页面。
    • 但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,含有全局变量、常用函数、例程等的页面,FIFO置换算法并不能保证这些页面不被淘汰。

    利用FIFO置换算法时的置换图

    在这里插入图片描述

    最近最久未使用(LRU)置换算法

    • 最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况。
    • 由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似。
    • LRU置换算法是选择最近最久未使用的页面予以淘汰。

    LRU页面置换算法
    在这里插入图片描述

    LRU置换算法的硬件支持
    • 把LRU算法作为页面置换算法是比较好的,它对于各种类型的程序都能适用,但实现起来有相当大的难度,因为它要求系统具有较多的支持硬件。所要解决的问题有:

      • 一个进程在内存中的各个页面各有多久时间未被进程访问;
        如何快速地知道哪一页最近最久未使用的页面。
        为此,须利用以下两类支持硬件:
      1. 移位寄存器:
        定时右移
      2. 栈:
        当进程访问某页时,将其移出压入“栈顶”,“栈底”换出。
    • 寄存器

      • 为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为
        在这里插入图片描述

      • 访问时将Rn-1位置成1,定时信号每隔一时间间隔右移一位,则具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面
        在这里插入图片描述
        某进程具有8个页面时的LRU访问情况
        在这里插入图片描述

      • 进程访问某页时,将该页面的页号从栈中移出,再压入栈顶
      • 用栈保存当前使用页面时栈的变化情况
        在这里插入图片描述

    最少使用(LFU: Least Frequently Used)置换算法

    • 为内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率

    • 该算法选择在最近使用最少的页面作为淘汰页
      在这里插入图片描述

    • 与最近最少用算法LRU的区别

      • 只考虑一段时间内使用的次数,而不管其使用的

    注意:这种算法并不能真正反映出页面的使用情况,因在每一时间间隔内只是用寄存器的一位来记录页的使用情况,因此访问1次和10000次是等效的

    简单的Clock置换算法

    • 利用Clock算法时,只须为每页设置一位访问位,在将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只须检查其访问位。
      在这里插入图片描述
    • 各字段说明如下
      (1)状态位(存在位)P。用于指示该页是否调入内存,供程序访问时参考。
      (2)访问字段A。用于记录本页在一段时间内被访问的次数,或最近已有多长时间未被访问,提供给置换算法选择换出页面时参考
      (3)修改位M。表示该页在调入内存后是否被修改过。由于内存中的每一页都在外存上保留一份副本,因此,若未被修改,在置换该页时就不须将该写回到外存上,以减少系统的开销和启动磁盘的次数;若已被修改,则必须将该页重写到外存上,以保证外存中所保留的始终是最新副本。
      (4)外存地址。用于指出该页在外存上的地址,通常是物理块号,供调入该页时使用。

    简单的CLOCK置换算法(近似的LRU算法)

    • 当采用简单的CLOCK算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列
    • 当某页被访问时,其访问位被置1
    • 置换算法在选择一页淘汰时,只需检查页的访问位,是0换出,是1重新置0且暂不换出,再按FIFO检查下一个页面。检查到最后一个页面,若其访问位仍为1,则再返到队首检查
    • 由于该算法是循环地检查各页面的访问情况,故称为CLOCK算法,置换的是未使用过的页,又称为最近未用算法NRU(Not Recently Used)

    简单Clock置换算法的流程和示例
    在这里插入图片描述

    改进型Clock置换算法

    • 在将一个页面换出时,如果该页已被修改过,便须将它重新写到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。同时满足两条件的页面作为首选淘汰的页。

    在这里插入图片描述

    • 各字段说明如下:
      (1)状态位(存在位)P。用于指示该页是否调入内存,供程序访问时参考。
      (2)访问字段A。用于记录本页在一段时间内被访问的次数,或最近已有多长时间未被访问,提供给置换算法选择换出页面时参考。
      (3)修改位M。表示该页在调入内存后是否被修改过。由于内存中的每一页都在外存上保留一份副本,因此,若未被修改,在置换该页时就不须将该写回到外存上,以减少系统的开销和启动磁盘的次数;若已被修改,则必须将该页重写到外存上,以保证外存中所保留的始终是最新副本。

      (4)外存地址。用于指出该页在外存上的地址,通常是物理块号,供调入该页时使用。

    改进型Clock置换算法说明

    • 考虑使用情况和置换代价,换出的最好是未使用且未被修改过的
    • 由访问位A和修改位M组合:
      • 1类**(A=0, M=0)**:表示该页最近既未被访问,又未被修改,是最佳淘汰页
      • 2类**(A=0, M=1)**:表示该页最近未被访问,但已被修改,并不是很好的淘汰页
      • 3类**(A=1, M=0)**:最近已被访问,但未被修改, 该页有可能再被访问
      • 4类**(A=1, M=1)**:最近已被访问且被修改,该页可能再被访问
        在这里插入图片描述
    • 其执行过程可分成以下三步
    1. 从指针所指示的当前位置开始, 扫描循环队列, 寻找A=0且M=0的第一类页面, 将所遇到的第一个页面作为所选中的淘汰页。 在第一次扫描期间不改变访问位A
    2. 如果第一步失败,即查找一周后未遇到第一类页面, 则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位A都置0
    3. 如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位A复0。 然后重复第一步,如果仍失败,必要时再重复第二步,此时就一定能找到被淘汰的页

    改进型Clock置换算法-示例

    在这里插入图片描述

    未完待续。。。

    展开全文
  • 目的:(1)通过编写程序实现请求分页存储管理页面Optimal、FIFO、LRU调度算法,使学生掌握虚拟存储管理中有关缺页处理方法等内容,巩固有关虚拟存储管理的教学内容。 (2)了解Windows2000/XP中内存管理机制,掌握...
  • 操作系统的作业,用到就拿去。 注释相当多
  • 操作系统课程源代码,高效,凝练,C语言实现。
  • 请求分页虚拟存储管理技术是把作业地址空间的全部信息存放磁盘上。当作业被选中运行时,先把作业的开始几页装入主存并启动运行。为此为作业建立页表时,应说明哪些页已主存,哪些页不主存。
  • C++编写的请求分页储存管理的页置换算法模拟程序,模拟OPT,FIFO和LRU算法。可以输入序列也可以随机生成访问序列。可以输出整个调度的流程(表),缺页次数和缺页率。
  • 创建请求页表,通过编程模拟缺页中断和地址变换,实现请求调页功能和页面置换功能。
  • 模拟请求分页存储管理、实验内容二、实验要求三、实验过程1、设计思想2、数据结构四、实验代码五、实验结果 、实验内容 模拟请求分页存储管理方式。 二、实验要求 1、模拟请求分页存储管理方式,采用最近最久未...

    一、实验内容

    模拟请求分页存储管理方式。

    二、实验要求

    1、模拟请求分页存储管理方式,采用最近最久未使用替换算法;
    2、程序要添加适当的注释,程序的书写要采用缩进格式;
    3、程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应;
    4、程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

    三、实验过程

    1、设计思想

    1. 设内存大小为4MB,页面大小为4KB。
    2. 立进程:由用户输入进程大小,随机数分配给进程页框数;
    3. 请求访问:
      [1] 由用户输入一个十进制的逻辑地址;
      [2] 如果页面已装入内存,通过地址变换机构计算其物理地址即可;
      [3] 如果页面未装入内存,查看分配的页框是否已经占满。若占满则使用最近最久未使用替换算法替换页面;若没有占满则直接将页面存入内存。
    4. 地址变换机构(十进制):
      [1] 由用户输入一个十进制的逻辑地址A;
      [2] 则页号为P=INT[A/L],页内地址为d=[A] MOD L,L为页面大小;
      [3] 查询页表,找到页号对应的物理块号B,计算物理地址B×L+d。
    5. 最近最久未使用替换算法:
      赋予每个页面一个访问字段,用于记录一个页面自上次被访问以来所经历的时间t。当需要淘汰一个页面时,选择所有页面中t值最大的予以淘汰。

    2、数据结构

    1.定义一个pcb类,表示每一个进程,含有进程的编号、大小、页表等信息:

    class PCB {
    private:
    	unsigned size;                        //进程大小
    	unsigned page_item_num;               //为进程分配的页框数
    	unsigned occu;                        //占用的页框数
    	unsigned length;                      //页表长度
    	vector<page_table_item> page_table;   //页表
    public:
    	void init(unsigned ps);                             //初始化
    	void disp();                                        //显示页表信息
    	bool comp(unsigned a);                              //越界检查
    	unsigned trans(unsigned a, vector<unsigned>& s);    //查询页表
    	void LRU(vector<page_table_item>::iterator p);      //LRU置换算法
    };
    

    2.对于每一个页表项,建立类page_table_item,包含访问为、状态位等信息:

    class page_table_item {
    public:
    	page_table_item() {
    		chunk_no = NULL;
    		state = 0;
    		visit = 0;	
    	}
    public:
    	unsigned chunk_no;   //物理块号
    	bool state;          //状态位,1表示已调入内存
    	unsigned visit;      //访问位
    };
    

    四、实验代码

    pcb.h

    #include<vector>
    
    using namespace std;
    
    class page_table_item {
    public:
    	page_table_item() {
    		chunk_no = NULL;
    		state = 0;
    		visit = 0;	
    	}
    public:
    	unsigned chunk_no;   //物理块号
    	bool state;          //状态位,1表示已调入内存
    	unsigned visit;      //访问位
    };
    
    class PCB {
    private:
    	unsigned size;                        //进程大小
    	unsigned page_item_num;               //为进程分配的页框数
    	unsigned occu;                        //占用的页框数
    	unsigned length;                      //页表长度
    	vector<page_table_item> page_table;   //页表
    public:
    	void init(unsigned ps);               //初始化
    	void disp();                          //显示页表信息
    	bool comp(unsigned a);                              //越界检查
    	unsigned trans(unsigned a, vector<unsigned>& s);    //查询页表
    	void LRU(vector<page_table_item>::iterator p);      //LRU置换算法
    };
    

    pcb.cpp

    #include"pcb.h"
    #include<ctime>
    #include<random>
    #include<cmath>
    #include<iostream>
    
    using namespace std;
    
    //初始化PCB
    void PCB::init(unsigned ps) {
    	size = ps;
    	uniform_int_distribution<unsigned> u(3, 5);
    	default_random_engine e(time(0));
    	page_item_num = u(e);
    	cout << "为进程分配的页框数为:" << page_item_num << endl;
    	occu = 0;
    	length = size / 4;
    	if (size % 4 != 0)
    		length++;
    	for (unsigned i = 0; i < length; i++) {
    		page_table.push_back(page_table_item());
    	}
    }
    
    //显示页表信息
    void PCB::disp() {
    	int no = 0;
    	auto i = page_table.begin();
    	cout << "页号" << "\t" << "物理块号" << "\t"
    		<< "状态位" << "\t" << "访问字段" << "\t" << endl;
    	while (i != page_table.end()) {
    		if (i->state == 1) {
    			cout << no << "\t" << i->chunk_no << "\t\t"
    			<< i->state << "\t" << i->visit << "\t\t" << endl;
    		}
    		no++;
    		i++;
    	}
    }
    
    //越界检查
    bool PCB::comp(unsigned a) {
    	if (a >= length || a < 0)
    		return 1;
    	else
    		return 0;
    }
    
    //查询页表
    unsigned PCB::trans(unsigned a, vector<unsigned>& s) {
    	auto p = page_table.begin();
    	unsigned no,flag=0;
    	uniform_int_distribution<unsigned> u(0, unsigned(pow(2, 10.0)));
    	default_random_engine e(time(0));
    	for (unsigned i = 0; i < a; i++) {
    		p++;
    	}
    	//页在内存中
    	if (p->state == 1) {
    		return p->chunk_no;
    	}
    	//页不在内存中
    	if (occu < page_item_num) {
    		p->state = 1;
    		for (auto i = page_table.begin(); i != page_table.end(); i++) {
    			i->visit++;
    		}
    		p->visit=0;
    		no = u(e);
    		while (!flag) {
    			for (auto q = s.begin(); q != s.end(); q++) {
    			    if (*q == no) 
    					flag = 1;
    				break;
    			}
    			if (!flag) {
    				p->chunk_no = no;
    				s.push_back(no);
    				flag = 1;
    			}
    			else {
    				no++;
    				flag = 0;
    			}
    		}
    		occu++;
    	}
    	else if (occu >= page_item_num) {
    		LRU(p);		
    	}
    	return p->chunk_no;
    }
    
    void PCB::LRU(vector<page_table_item>::iterator p) {
    	auto q = page_table.begin();
    	while (q->state != 1) {
    		q++;
    	}
    	auto index = q;
    	while (q != page_table.end()) {
    		if(q->visit>index->visit&&q->state==1){//找到访问值最大的
    			index = q;
    		}
    		q++;
    	}
    	p->state = 1;
    	index->state = 0;
    	p->chunk_no = index->chunk_no;
    	index->chunk_no = NULL;
    	for (auto i = page_table.begin(); i != page_table.end(); i++) {
    		i->visit++;
    	}
    	p->visit = 0;
    }
    

    exp7.cpp

    #include"pcb.h"
    #include<iostream>
    #include<cmath>
    #include<string>
    
    using namespace std;
    
    //内存大小4MB,页面大小4KB
    //创建进程
    bool create(PCB& p) {
    	unsigned psize;
    	cout << "请输入进程大小(KB):";
    	cin >> psize;
    	p.init(psize); //初始化
    	return 0;
    }
    
    //地址转换机构
    void addr_trans(PCB& pro, vector<unsigned>& s) {
    	unsigned addr;
    	unsigned page_no, offset;
    	cout << "输入十进制地址:";
    	cin >> addr;
    	page_no = unsigned(addr / 4096);
    	//进行越界检查
    	while (pro.comp(page_no)) {
    		cout << "地址越界,重新输入十进制地址:";
    		cin >> addr;
    		page_no = unsigned(addr / 4096);
    	}
    	offset = unsigned(addr % 4096);
    	//访问页表
    	cout << "物理地址为:" << pro.trans(page_no, s) * 4096 + offset << endl;
    }
    
    int main() {
    	int choose = 0;
    	PCB pro;
    	vector<unsigned> s;   //记录占用的物理块号
    	cout << "1.创建进程\n"
    		<< "2.显示进程页表\n"
    		<< "3.请求访问\n"
    		<< "4.退出" << endl;
    	while (choose != 4) {
    		cout << "\n请选择:";
    		cin >> choose;
    		switch (choose) {
    		case 1:
    			if (create(pro))
    				cout << "创建失败!" << endl;
    			else
    				cout << "创建成功!" << endl;
    			break;
    		case 2:
    			pro.disp();
    			break;
    		case 3:
    			addr_trans(pro, s);
    			break;
    		default:
    			break;
    		}
    	}
    	return 0;
    }
    

    五、实验结果

    实验结果

    展开全文
  • 操作系统 请求分页存储管理模拟实现111111111111
  • 【操作系统】请求分页存储管理方式

    万次阅读 多人点赞 2016-12-19 17:45:35
    请求页表机制 状态位 P:指示该页是否已调入内存。 供程序访问时参考 访问字段 A:记录本页一段时间内被访问的次数或最近未...缺页中断机构在请求分页系统中,当访问的页不内存,便产生一个缺页中断。缺页中断与一

    请求页表机制

    图示

    • 状态位 P:指示该页是否已调入内存。 供程序访问时参考
    • 访问字段 A:记录本页在一段时间内被访问的次数或最近未被访问的时间。 供选择页面换出时参考
    • 修改位 M:表示该页在调入内存后是否被修改过。若修改过,则置换该页时需重写该页至外存。 供置换页面时参考
    • 外存地址:指出该页在外存上的地址。供调入该页时参考

    缺页中断机构

    在请求分页系统中,当访问的页不在内存,便产生一个缺页中断。

    缺页中断与一般中断的区别:

    • 缺页中断是在指令执行期间产生和处理中断信号(要访问的指令或数据不在内存) 。
    • 一条指令在执行期间,可能产生多次缺页中断。

    地址变换机构

    图示

    图示

    请求分页存储管理

    例:一个采用请求分页存储管理的计算机系统,其内存(实存)容量为 256M 字节,虚拟内存容量(给用户的最大地址空间)为 4G 字节,页面大小为 4K 字节,试问:

    1. 实存物理地址应设为多少位?
      256M = 2^28,所以为28位

    2. 实存中有多少物理块?
      256M/4K = 64K

    3. 实存中最大块号是多少?
      64K-1

    4. 虚存地址应设多少位?
      4G = 2^32,所以为32位

    5. 虚拟地址空间最多可以有多少页?
      4G/4K = 1M

    6. 页内最大偏移量是多少?
      4k-1 = 4*1024-1 = 4095

    请求分页中的内存分配

    最小物理块数的确定

    最小物理块数指能保证进程正常运行所需的最小的物理块数,最小物理块数与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。

    采用直接寻址方式,所需的最少物理块数为 2。一块是用于存放指令,另一块用于存放数据。

    间接寻址时,至少要求有三个物理块。 (间接寻址中一些物理块放的是其它物理块的块号)

    物理块的分配策略

    固定分配局部置换

    为每个进程分配固定数目 n 的物理块,在整个运行中都不改变。如出现缺页则从该进程的页面中置换一页。

    每个进程分配多少个物理块难以确定.

    若太少,会频繁地出现缺页中断,降低了系统的吞吐量。

    若太多,内存中驻留的进程数目减少,可能造成 CPU空闲或其它资源空闲的情况。

    可变分配全局置换

    为每个进程分配一定数目的物理块,但 OS 自留一空闲块队列,若发现缺页,则从空闲块队列中分配一空闲块与该进程,并调入缺页于其中。当空闲块队列用完时,OS 才从内存中任选择一页置换。

    可变分配局部置换

    为每个进程分配一定数目的物理块,若发现缺页,则从该进程的页面中置换一页,不会影响其它进程的运行。根据进程缺页率高低,则可增加或减少分配给该进程的物理块。

    物理块分配算法

    在采用固定分配策略时,可采用以下几种算法:

    平均分配算法:平均分配给各个进程。未考虑进程大小,小进程浪费物理块,大进程严重缺页。

    按比例分配算法:根据进程的大小按比例分配给各个进程。如果共有 n 个进程,每进程页面数 S i ,系统可用物理块总数为 m,则每进程分到的物理块数 b i :

    图示

    考虑优先权的分配算法:将系统提供的物理块一部分根据进程大小先按比例分配给各个进程,另一部分再根据各进程的优先权分配物理块数。

    页面调入策略

    何时调入页面

    预调页策略

    预调页:将预计在不久之后便会被访问的页面预先调入内存。

    进程的页一般存放在外存的一个连续区域中。一次调入若干个相邻的页会比一次调入一页更高效。

    但如果调入的一批页面中的大多数都未被访问,则浪费了内存。

    请求调页策略

    当进程在运行中发生缺页时,就立即提出请求,由系统将缺页调入内存。但这种策略每次仅调入一页,须花费较大的系统开销,增加了启动磁盘 I/O 的频率。

    从何处调入页面

    在请求分页系统中,外存分成了按离散分配方式存放文件的文件区和按连续分配方式存放对换页的对换区。进程发出缺页请求时,从何处将缺页调入内存呢?

    对换区:如果系统有足够的对换区空间,运行前可将与进程相关的文件从文件区复制至对换区,以后缺页时全部从对换区调页。

    文件区:如果系统没有足够的对换区空间,凡是不会被修改的文件,直接从文件区调页,不必回写(换出) 。对可能会修改的文件第一次直接从文件区调页,换出时换至对换区,以后从对换区调页。

    UNIX 方式:凡未运行过的页面均从文件区调页,运行过的页面和换出的页面均从对换区调页。

    页面调入过程

    图示

    缺页率

    如果一个进程的逻辑空间为 n 页,分配到的物理块为 m(m

    缺页中断处理时间

    页面置换时还需要考虑置换代价。

    没有被修改过的页面可以直接放弃,而修改过的页面必须进行保存。

    如果被置换页面被修改过的概率是 β,其缺页中断处理时间为 T a ,被置换页面没有被修改过的缺页中断处理时间为 T b ,显然 T a > T b 。则缺页中断处理时间 T:
    公式

    展开全文
  • 这是操作系统中请求分页存储管理中的页面置换算法,有先进先出算法,OPT置换算法,LRu置换算法。
  • 请求分页存储管理系统设计与实现可课程设计
  • 2.能够模拟内存的分页式分配和回收过程,可查看内存分配位示图和进程页表; 3.可根据内存分配状态进行地址转换。 4.能够模拟基于虚拟存储器的内存分配和回收过程,可查看交换空间位示图和扩 展的页表; 5.虚拟...
  • C语言模拟实现虚拟存储管理(请求分页存储管理)

    千次阅读 多人点赞 2020-06-25 23:19:08
    请求分页存储管理是种常用的虚拟存储管理技术。本实验的目的是:通过编程模拟实现请求分页存储管理中硬件地址转换过程、缺页中断处理过程,以及先进先出页面置换算法,加深对页式虚拟存储管理的理解,了解虚拟存储...
  • 文章目录1.1 虚拟存储器的定义1.2 虚拟存储器的特征1.3 虚拟内存技术的实现1.4 请求分页管理方式1.4.1 页表机制1.4.2 缺页中断机构1.4.3 地址变换机构1.5 页面置换算法1.6 页面分配策略1.6.1 驻留集大小1.6.2 调入...
  • 将虚拟技术和分页存储结合起来,那么当一个程序内存无法装下时,就先装入部分程序执行,分页存储管理方式是将程序分成一个个页,那么内存中也就是先存放部分页。 步骤: 虚拟技术的管理下,页表的属性不页号和...
  • 操作系统实验四 请求分页存储管理 题目描述: 、实验目的 通过编写分页式存储管理的模拟程序,加深对页式存储管理方式的理解,熟悉逻辑地址到物理地址的转换过程,掌握虚拟存储管理中的页面调度算法,认识分页式...
  • 先说下什么是页(页面):就是将用户的程序的的地址空间分成固定大小的区域,称为”页“,或者”页面...第5章虚拟存储器,学习了请求分页式管理方式(除了解决碎片问题外,又“扩充”了内存的大小(虚拟)) ...
  • 操作系统课设 请求分页存储管理系统

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,106
精华内容 30,442
关键字:

在一个请求分页存储