zoukankan      html  css  js  c++  java
  • 虚拟存储器1

    5.1.1 虚拟存储器的基本概念

    1.虚拟存储器的引入

    1) 常规存储管理方式的特征

    上一章所介绍的存储管理方式统称为常规存储管理方式,具有以下两个共同的 特征:

    (1)一次性。作业在运行前必须一次性地全部装入内存后方能开始运行。

    (2)驻留性。作业装入内存后,便一直驻留在内存中,直至作业运行结束。

    —次性及驻留性,使许多在程序运行中不用或暂时不用的程序或数据占据大设的内存 空间,使得一些需要运行的作业无法装入运行;而且若一个程序所要求的内存空间超过了 内存实际容M,则该程序必定无法装入内存运行。

    2) 局部性原理

    局部性可表现在以下两个方面:

    (1) 时间局部性。如果程序屮的某条指令一旦执行,.则不久以后该指令可能再次执行; 如果某个数据被访问,则不久以后该数据能被再次访问。产生时间局部性的典型原因是 程序存在很大的循环操作。

    (2) 空间局部性。程序访问了某个存储单元,则不久以后,附近的存储单元也 将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围内,其典型情况便 是程序的顺序执行。

     

    2.虚拟存储器的定义及特征

    基于局部性原理,应用程序在运行之前并不必全部装入内存,仅须将当前要运行的那部分程序和数据装入内存时启动程序的运行,其余部分仍驻留在外存上,当要执行的指令或访问的数据不在内存时,再由0S自动通过请求调入功能将它们调入内存,以使程序 能继续执行:如果此时内存已满,则还需通过置换功能,将内存中暂时不用的程序或数据 调至磁盘上,腾出足够的内存空间后,再将要访问的程序或数据调入内存,使程序继续执 行。这样,便吋使一个大的用户程序能在较小的内存空间中运行:也可在内存中同时装入 更多的进程使它们并发执行。从用户的角度看,该系统具有的内存容最比实际的内存容景 大得多,我们将这种具有请求调入功能和置换功能、能从逻辑上对内存容量加以扩充的存 储器系统称为虚拟存储器。

    虚拟存储器具有以下主要特征:

    (1) 多次性。与常规存储管理的“一次性”相反,虚拟存储器将一个作业分成多次调 入内存,多次性是虚拟存储器M重要的特征。

    (2) 对换性。与常规存储管理的“驻留性”相反,在作业运行期间,虚拟存储器允许 将那些暂不使用的程序或数据从内存调至对换K,待以后需要时再调入内存,从而有效地 提高内存利用率。

    (3) 虚拟性。虚拟存储器对内存的扩充是逻辑h的,用户所看到的大容墩只是一种感 觉,并不实际存在,因此是虚拟的。虚拟性是实现虚拟存储器的目标。

    5.1.2 虚拟存储器的实现方法

    1.分页请求系统

    分页请求系统是在分页系统的基础上增加了请求调页功能和页面置换功能所形成的页 式虚拟存储系统。它允许用户程序只装入少数页面的程序(及数据)即可启动运行。以后, 再通过调页功能及页面置换功能陆续地把即将运行的页面调入内存,同时把暂不运行的页 面换出到外存上。置换时以页面为单位。为了能实现请求调页和页面置换功能,系统必须 提供必要的硬件支持和实现请求分页的软件。

    硬件支持

    主要的硬件支持有:

    (1)请求分页的页表机制。它是在纯分页的页表机制上增加若千项而形成的,作为请 求分页的数据结构。

    (2)缺页中断机构。每当用户程序要访问的页面尚未调入内存时,便产生一缺页中断, 以请求0S将所缺的页调入内存。

    (3)地址变换机构。它同样是在纯分页地址变换机构的基础上发展形成的。

    1)请求实现分页的软件

    这里包括有用于实现请求调页的软件和实现页面置换的软件。它们在硬件的支持下, 将程序正在运行时所需的页面(尚未在内存中的)调入内存,再将内存中暂时不用的页面从内存置换到磁盘上。

    2.请求分段系统

    请求分段系统是在分段系统的基础上,增加了请求调段及分段置换功能后所形成的段 式虚拟存储系统。它允许用户程序只要装入少数段(而非所有的段)的程序和数据即可启动 运行。以后通过调段功能和段的置换功能将暂不运行的段调出,再调入即将运行的段。置 换是以段为单位进行的。为了实现请求分段,系统同样需要必要的硬件和软件支持。

    1)硬件支持

    主要的硬件支持有:

    (1)请求分段的段表机制。它是在纯分段的段表机制上增加若干项而形成的,作为请 求分段的数据结构。

    (2)缺页中断机构。每当用户程序要访问的段尚未调入内存时,便产生一缺段中断, 以请求OS将所缺的段调入内存。

    (3)地址变换机构。它同样是在纯分段地址变换机构的基础上发展形成的。

    2)软件支持

    这里包括有用于实现请求调段的软件和实现段置换的软件。它们在硬件的支持下,先将内存中暂时不用的段从内存置换到磁盘上,再将程序正在运行时所需的段(尚未在内存中 的)调入内存。

     

    5.2  请求分页存储管理方式

    5.2.1 请求分页的硬件支持

    1.请求页表机制

    在请求分页系统中需要的主要数据结构是请求页表,基本作用是将用户地址空间中的逻辑地址映射为内存空间的物理地址。

     

     

     

    现对其中各字段说明如下:

    (1) 状态位(存在位)P:由于在请求分页系统中,只将应用程序的一部分调入内存,还 有一部分仍在外存磁盘上,故须在页表中增加一个存在位字段。由于该字段仅有一位,故 又称位字。它用于指示该页是否己调入内存,供程序访问时参考。

    (2) 访问字段A:用于记录本页在一段时间内被访问的次数,或记录本页最近己有多 长时间未被访问,提供给置换算法(程序)在选择换出页面时参考。

    (3)  修改位M:标识该页在调入内存后是否被修改过。由于内存中的每一页都在外存 上保留一份副本,因此,在置换该页时,若未被修改,就不需再将该页写回到外存上,以 减少系统的幵销和启动磁盘的次数:若己被修改,则必须将该页重写到外存上,以保证外 存中所保留的副本始终是最新的。简而言之,M位供置换页面时参考。

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

    1. 内存分配

    (1) 最小物理块数

    (2) 内存分配

    ①固定<---->局部

    ②可变<---->局部

    ③可变<---->全局

    (3) 分配算法

    ①平均分配

    ②按比例

    ③按优先级

    1. 调用策略

    (1)何时(预调入,请求调入)

    (2)何处(小:修改过;中:调入内存;大:全部)

    4.地址变换机构

    请求分页系统地址变换机构是在分页系统的地址变换机构的基础上,为实现虚拟存储器,再增加了某些功能,如产生和处理缺页中断。

     

     

     

    在进行地址变换时,首先检索快表,试阁从中找出所要i方问的页。若找到,便修改页 表项屮的访问位,供置换算法选换出页面时参考。对于写指令,还须将修改位置成“1”, 表示该页在调入内存后己被修改。然后利用页表项中给出的物理块号和页内地址形成物理 地址。地址变换过程到此结束。

    如果在快表中未找到该页的页表项,则应到内存中去杏找页表,再从找到的页表项中 的状态位P来了解该页是否已调入内存。若该页己调入内存,这时应将该页的页表项写入 快表。当快表己满时,则应先调出按某种算法所确定的页的页表项,然后再写入该页的页 表项:若该页尚未调入内存,这时应产生缺页屮断,请求OS从外存把该页调入内存。

    5.3  页面置换算法

    1.FIFO

    把一个进程已调入内存的页面按先后次序链转成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。 但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如, 含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。这里,我们举个例子,采用FIFO算法进行页面置换。

     

     

     

    当进程第一次 访问页面2时,将把第7页换出,因为它是最先被调入内存的:在第一次访问页面3时,又将把第0页换出,因为它在现有的2、0、1三个页面中是最老的页。由图5-4可以看出, 利用FIFO算法时,进行了 12次页面置换,比最佳置换算法正好多一倍。

    1. LRU

    FIFO置换算法的性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。LRU的页面置换算法是根据页面调入内存后的使用情况做出决策的。由于无法预测各页面将来的使用情况, 只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次 被访问以来所经历的时间t,当需淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。 利用LRU算法例子如下。

     

     

     

    当进程第一次对页面2进行 访问时,由于页面7是最近最久未被访问的,故将它置换出去。当进程第一次对页面3进 行访问时,第1页成为最近最久未使用的页,将它换出。由图可以肴出,前5个时间的图 像与最佳買换算法时的相同,但这并非是必然的结果。因为最佳置换算法是从“向后看” 的观点出发的,即它是依据以后各页的使用情况进行判断:而LRU算法则是“向前看”的, 即根据各页以前的使用情况来判断,而页面过去和未来的走向之间并无必然的联系。

    附加一道例题,对FIFO和LRU理解更清晰

     

     

     

     

     

     

     

    顺便,belady现象介绍在这

  • 相关阅读:
    一个拖延症晚期患者的锦囊妙计
    阔别三十天后每天一博客卷土重来——互联网时代的个体户(上)
    阔别三十天后每天一博客卷土重来——互动交流新思路(下)
    阔别三十天后每天一博客卷土重来——互动交流新思路(中)
    阔别三十天后每天一博客卷土重来——互动交流新思路(上)
    渣渣小本求职复习之路每天一博客系列——想想大学里最后半年该怎么过(最终篇)
    渣渣小本求职复习之路每天一博客系列——回顾走过的四个礼拜
    渣渣小本求职复习之路每天一博客系列——Unix&Linux入门(5)
    渣渣小本求职复习之路每天一博客系列——Unix&Linux入门(4)
    渣渣小本求职复习之路每天一博客系列——Unix&Linux入门(3)
  • 原文地址:https://www.cnblogs.com/giaogiaogiao/p/12667062.html
Copyright © 2011-2022 走看看