罗泽兵 发表于 2024-4-15 08:34:52

14.第14节课第五章虚拟存储器

好同学们,大家好,今天呢,我们来为大家介绍一下操作系统当中。管理功能当中的虚拟存储器这样一部分。虚拟存储器呢,作为现代操作系统中存储器管理的一项重要技术,实现了内容扩充功能,但该功能呢,并非从物理上实际的扩大内存的容量。而是呢,从逻辑上呢,实现对内存容量的扩充,让用户呢感所感觉到的实际的内存容量呢。比我们的内存容量大,

于是呢,便可以让比内存空间更大的程序呢运行。或者让更多的系统呢,用户呢,并发执行,那么这样呢,满足了用户的需要,又改善了系统的性质。又改善了,实现了它的性能,增加了它的这样一个功能。好吧,我们来看一下虚拟存储器的这样一个概述部分。那么刚才我们之前讲过,讲过的各种存储器管理方式呢,

有一个共同的特点就是呢,他们要求了这样一个作业的全部装完漏子后呢,才能够运行。那么于是呢,那么就有这样一些情况,有的作业很大,其要求的内存空间超过了内存总容量。作业不能全部被装入内存,只只拽该作业了,无法运行。第二个呢?有大作业需要运行,但由于。内存容量不足以容纳这些作业,只能将少数作业呢装入内存当中的先运行,

而让其他的大作业呢留在外层。出现这两种情况的原因呢?都是由于内存容量不够大,一个显而易见的解决方法呢?是从物理上增加内存容量,但这往往会受到机器自身的限制,无疑呢,要增加内系统成本。因此呢,这种方法是受到一定限制的,另一种方法是从逻辑上扩大我们的内存容量,这呢,正是虚拟存储技术所要解决的主要问题。我们来看一下常规存储管理它的特征和局部性原理。那么,

我们把之前介绍过的各种存储器管理方式呢?称为传统存储器管理方式。它们全都具有了两个特征,一个呢,叫做一次性,一个呢,叫做驻留性。那么,什么是一次性呢?一次性呢?是指作业必须一次性的全部装入内存后呢?才能开始运行。在传统存储器管理中呢,都是要求作业了,全部装入内存后才能运行,

那么正是这一特征呢,导致了大作业无法在小内存中运行。以及呢,无法提高系统的多道程序度,直接限制了对处理器的利用率和系统的吞吐量的提高。事实上呢,许多作业呢,在运行时并非需要用到全部的程序和数据,如果一次性的装入其余全部程序和数据呢?显然也是对内存空间有一定的浪费。那么,驻留性是什么呢?驻留性是指作业被装入内存后,整个作业呢都一直驻留在内存中,其中任何部分都不会被换出,

直至作业呢运行结束。尽管运行中的进程会因为IO操作等原因被阻塞,可能处于长期等待状态,或者有的程序模块呢,在运行一次过后呢,就不再需要运行了。它们都将驻留在内存中,继续占用内存资源,那么从这里呢,我们就可以看出。这样一次性以及驻留性特征呢,许多使得许多在进程序运行中不用,或者说暂时不用的程序呢,占用了大量的内存空间。而一些需要运行的作业呢,

又无法进入运行,显然呢,这是在浪费内存资源,那么。我们可以呢,采取一些方法是我们来看一下一次性和助读性呢是。是否是程序在运行时所必须和不可改变的,我们来看一下它是什么样的,这样一个改变的,这样一个转换的。联系的这样一个方式。程序在运行时呢,不存在局部性原理。那么,一位这样一个研究人员的指出,

程序在执行时呢,将呈现出局部性规律。也就是说,在一较短的时间内。程序的执行呢,只局限于某个部分相应的,它所访问的存储空间呢,也局限于某个部分。也就是说。程序在执行时除了。少部分的转移和过程调用指令外,大多数情况下呢,是顺序执行的。过过程调用呢,将会使程序的执行轨迹呢,

由一部分区域转移到另一部分区域。但是呢,都会在一些范围内呢,进行这样一个部分程序中存在着许多循环结构,这些结构虽然只有小数指令构成,但它们呢,将被多次执行。另外呢,程序中还包括多处对数据的处理,比如说对数组操作,这些处理往往都局限于很小的范围。所以说局限性呢,又包含包表,包含在表述表,又又表现在两个方面,

第一个呢是时间局限性。第二个了,是空间局限性。时间局限性呢,是如果程序中的某条指令被执行,则不久以后呢,该指令呢,可能会再次执行。如果某数据被访问过,则不久后呢?该数据呢?可能再被访问产生实践性的实践,局限性的典型原因呢?是程序中实现着出现,出现着大量的循环操作,

这里大家要记住。时间局限性指的是程序或者指令或者数据。被执行过后呢,不久之后可能再被执行,产生它的原因呢,可能是典型原因呢,是程序中存在的大量的循环操作,这是时间局限性。那么,空间局限性是什么呢?一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问。也就是说,程序在一段时间内所访问的地址呢?

可能集中在一定的范围之内,其典型情况呢,是程序的顺序执行,也就是说。空间局限性什么含义呢?比如说程序,一旦访问了某个存储单元,不久之后,其附近的存储单元呢?也将被访问。这个也就是说,程序在一段时间内访问的地址呢,可能局限在一定的范围之内,那么这样一个典型。情况呢,

就是程序的顺序执行,接下来我们看一下虚拟存储器的基本工作情况。基于局部性原理,可以知道了应用程序在运行之前没有必要呢,将它全部装入内存,而景区将那些当前要运行的少数页面。或段呢,先装入内存,便可以运行,其余部分呢,留在盘上,程序在运行时,如果它所要访问的段或者页已经掉入内存。便可以继续执行下去,如果程序要访问的页或段尚未调入内存呢,

便发出缺页中断请求,此时呢,操作系统将利用请求调页功能呢,将它们调入内存使程序呢能够。继续运行下去,如果此时内存已满,无法再调入新的页面或者段操作系统呢?还在还需要利用页或者段的置换功能。将内存中暂时不用的页和段调至磁盘上,腾出足够的内存空间后,再将要访问的页或电调入内存使程序呢,继续直流下去。进行下去,这样呢,可以使一个大的用户程序在较小的内存空间中运行,

也可以呢,在内存中同时装入更多的进产,使它们呢,并发执行。接下来我们看一下虚拟存储器的定义和特征,虚拟存储器呢,就是用户看到自己的程序能在系统中正常运行时,他会认为该系统所具有的内存容量一定比自己的程序大。或者说用户所感觉到的内存容量会比实际的内存容量呢大很多,但用户所看到的大容量呢只是一种。讲一种一种错觉的一种一种。假的,这一种假的这样一个。表示出来的现象的这种情况,所以呢,

人们把这样的存储器呢称为虚拟存储器。也就是说,所谓虚拟存储器呢,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量呢,由内存容量和外存容量所决定,其运行速度呢,接近于内存速度。而美味的成本呢,又接近于外存,那么可以知道虚拟存储技术呢,是一种性能非常优越的存储器管理技术,所以呢,被广泛的应用于大中小型机器和微型机中。

那么,这是我们的虚拟存储器的部分,我们看一下虚拟存储器的特征与传统的存储器的管理方式相比。虚拟存储器呢,具有几个重要特征,一个是多次性,一个是堆兑换性,一个是虚拟性,多次性呢,是指相对于传统的存储器管理方式。一次性而言的。是指一个作业中的程序和数据,无需在作业运行时一次性全部装入内存,而是允许了被分成多次调入内存运行,即只需要当当前运行。

的部分程序和数据呢?装入内存呢?便可以开始运行,以后每当要运行到尚未调入的那部分程序时呢?再将它调入内存。那么,正是由于虚拟管理存储器的多次性特征,才使它具有从逻辑上扩大内存的功能。也就是说,多次性的是虚拟存储器最重要的特征。它是任何的存储管理系统上所其他的不具有的,因此我们可以认为呢,虚拟存储器呢,是具有多次性特征的存储器管理系统。接下来我们看一下兑换性,

兑换性呢,是相当于传统存储器管理系统而言的强度性,而言的是指一个作业中的程序和数据,无需在作业运行时呢一直。常驻内存,而是允许了在作业的运行过程中呢,进行换进,换出,也就是说在程序呢,运行期间允许那些暂时不用的代码和数据呢,从内。内存调至外存的兑换区,换出以后呢,需要它的时候呢,再从外存调至内存换用。

甚至还允许将暂时不运行的进程呢,调至外层,将它们又重新具备运行条件的时候再调入内存换进,换出了能够有效的提高v内存利用率。虚拟存储器呢,具有兑换性特征,也正是由于这一特征呢,才使得虚拟存储器能够正常运行。另外呢,虚拟性虚拟性呢,是指能够从逻辑上呢扩大内存容量,使用户看到的内存容量呢,远大于实际内存容量。这样呢,就可以在小的内存中实现大的作业,

或者呢,能提高多大程序度,那么它不仅能有效的改善内存的利用率。还可以提高程序并发的这样一个程度,从而呢,增加系统的吞吐量,这是操作系统的虚拟存储器所表现出来的重要的特征。那么,也是实现虚拟存储器最重要的目标。那么也就是说,虚拟存储器呢,是以多次性和兑换性为基础的,也就是说当系统呢,允许将作业多次调入内存。并且能将系内存中暂时不运行的程序和数据放置外存上时,

才有可能实现虚拟性,而多次性和兑换性呢?又必须建立在离散分配的基础上。那么我们看一下虚拟存储器的实现方法,比如说它要求一个我们首先来看一下,请分页请求系统。在序列存储器中呢,允许将一个作业分多次调入内存,如果采取连续分配方式时,要求必须将作业装入一个连续的内存区域中。则必须事先为作业一次性的申请一个足够容纳整个作业的内存空间,以便呢,将该作业先后多次的装入内存,这不仅会使一部分的内存空间呢处于暂时或永久的空闲状态。造成内存资源的严重浪费,

无法使用,并且呢,也不能从逻辑上呢,扩大内存容量,因此呢,虚拟存储器呢,能够建立在离散分配,这管理方式的基础上。那么,这是我们的虚拟存储器的这样一个方式,我们来看一下分页,请求系统分页请求系统呢,是在分页基础上呢?增加了请求调阅功能和页面置换功能所形成的夜视虚拟存储系统,它允许用户程序呢只装入。

少数页面的程序便可以启动运行,以后呢,再通过调页功能及页面置换功能呢,把即将要运行的页面呢,调入内存。同时,把暂时不运行的页面呢,换出到外存上置换时呢,以页面为单位。我们来看一下它的硬件,支持主要的硬件支持呢,有请求分页的页表机制。缺页中断机构地址变换机构。请求分页的页表机制呢,它是在纯分页的页表机制上增加了若干项而形成的,

作为请求分页的数据结构。缺页中断机构呢?每当用户程序要访问的页面尚未调入内存时呢,便产生一缺页中断,以请求操作系统所缺的页呢?调入内存。地址变换机构呢,同样是在纯分页,地址变换基础上呢,发展形成这样一个部分,接下来我们看一下,请实现请求分页的软件。实现请求分析的软件呢,包括有用于实现请求调用的软件和实现页面置换的软件,他们在硬件的支持下呢,

将程序正在运行时所需要的。页面调入内存,再将内存中暂时不用的页面呢置换到磁盘上。接下来我们再看一下请求分段系统,请求分段系统呢,是在分段系统的基础上增加了请求分段及分段置换功能后所形成的段式虚拟存储系统。它允许用户程序呢,只要装入少数段的程序和数据呢,即可启动运行,以后通过调段功能和段的置换功能呢,将暂时不用的段调出,将需要调入的。运行的段的调入置换的以段为单位,我们同样呢行要实现请求分段需要必要的硬件支持和软件支持。主要的硬件支持呢,

有请求分段的断表机制,削页削段中断机构以及呢?地址变换机构,那么请求分段的段表机制呢?它是在纯分段的段表机制上增加了若干页面形成的作为了。请求分段的数据结构,另外呢,还有缺段中断机构,缺段中断机构呢,是每当用户程序呢,要访问的段呢,尚未调入内存时便产生一缺段中断。以请求操作系统呢,将所缺的段呢调入内存地址变换机构呢,它同样是在纯分段地址变换机构的基础上呢,

发展形成的这样一个部分。我们来看一下软件,支持软件支持呢,包括有用于实现请求掉段的软件和实现断置换的软件,他们在硬件的支持下呢,先将内存中暂时不用的一段呢。从内存调入到磁盘上,再将程序时,运行时所需要的段呢调入内存。虚拟存储器呢,在实验上是有一定难度的,相对于请求分段系统,因为请求分页系统的换进和串出的基本单位呢,是是大小固定的页面。所以呢,

实现起来比较容易,而请求分段系统,换句话说,基本单位是段长度可变,分段的分配类似于动态分区方式,在内存分配和回收上呢,比较复杂,那么这是我们的请求,分段的这样一个。部分的这样一个内容。那么,接下来我们再看一下请求分页存储管理方式,为了超请求分页系统呢?是实现在。基本分页基础上的,

为了能支持虚拟存储器功能,增加了请求调验功能和页面置换功能,相应的每次调入和调出的基本单位呢,都是长度固定的页面。这使得请求分页系统呢,在时间上呢,比请求分段呢,更要简单,因此呢,请求分页呢,成为目前常用的一种虚拟寻址器的方式。请求分页系统的硬件支持了,为了实现请求分页系统必须提供一定的硬件支持,系统计算机呢,为除了一定容量的内存和外存外还。

还需要有请求,请求页表机制缺页,终端机构以及呢地址变换机构,那么请求页表机制呢?在请求分页系统中主要的数据结构呢?是请求页表。其基本作用呢,是将用户地址空间的逻辑地址呢,映射为内存空间中的物理地址。为了满足页面换进换出的需要呢,在请求列表中呢,又增加了四个字段。因此呢,在请求分页中的每个页表项呢,应该包含页号,

物理块号,状态位,访问字段,修改位和外层地址。好吧,我们来说明一下,这样一些碰撞。状态位呢?状态位在请求分页系统中,仅需将应用程序的一部分调入内存,还有一部分呢,存放在磁盘上,所以说在列表中增加一个存在位状态位字段。该字段呢,只有一位。

又称为位字,它用于表示该页呢,是否已调入内存供程序,访问时参考第二个呢?是访问字段。用于记录本页在一段时间内被访问的次数或记录本页最近有多长时间未被访问提供给置换算法的,再选择换出页面时的进行参考。修改为,修改为了。用来标识该页在调入内存后是否被修改过,由于内存中的每一页呢,都在外层上保留一份副本,因此呢,在置换该页时呢,若被修改,

若未被修改,就不需要再将该页写。回到外层上,以减少系统的开销和启动磁盘的次数,若已被修改,则必须将该页呢重新写到外层上,以保证外层中所保留的副本呢,始终是最新的。而外存地址用于指出,该页在外存上的地址通常是物理括号供调入该页时参考。接下来我们看一下中缺段中断机构,缺页中断机构在请求分页系统中当所要访问的页面,不存在内存时便产生一定的冲断页,一个冲页中断。请求操作系统呢,

将所缺的页面呢,调入内存缺页中断呢,作为中断,他们同样呢需要经历,如比如说CPU保护CPU环境分析中断原因,转入充电中断处理程序进行处理。以及在中断处理完后呢,再恢复CPU环境等几个步骤,但是区域中断呢,又是一种特殊的中断,那么它与一些一般的中断有着明显的区别。在缺页,在指令缺页中断机构呢?在指执行指令期间呢?产生和处理中断信号一条指令,

在执行期间呢?可能产生多次缺页中断。比如说我们看一下这个区域中断的这样一个情况,那么这是我们的,比如说在执行一条copy at ob的指令之后呢?那么可能产生六次区域中断,该指令呢?跨跨跨越了两个页面。a和b又是一个数据块,也跨越了两个页面,那么这样呢?这些特征呢,操作系统的硬件能够保证多次中断时的状态,并且能够保证最后回到中断前呢,产生中断的这样一个指令的继续执行的这样一个实质应用部分。

我们看一下地址变换机构,请求分页系统中的地址变换机构呢,是在分页系统地址变换机构的基础上,为实现虚拟存储器再增加了某些功能所形成的,比如说产生缺页中断。从内存中换出一定的功能,我们来看一下缺列中断的地址,变换机构的这样一个过程的这样一个部分,那么在进行地址变换的时候呢?首先。检索块表检索块表了,找出试图要找出所访问的页页,如果找到的话呢,便修改页表上的访问位。提供置换算法,

灌出页面时的考这样一个参考,对于企业指令,还必须将修改为了改成一。表示该页呢,在调入内存后呢,已被修改。然后利用页表项给出的物理块号和页内地址形成地址,形成物理地址,地址变换呢,就这样一个变换的这样一个部分,如果在会表上呢,没有找到。这样一个。该页的列表项变到内存中呢,去找该页表,

再从找到的页表项中的状态位呢,来了解该页呢,是否掉入内存,如果该页呢,已掉入内存,则应该将该页的页表项呢?写入块表,如果当块表满时,则应调先调出某种算法所确定的页的页表项,再写入该页的页表项。如果该页尚未调入内存,这个时候呢,产生缺页中断,产生缺页中断呢,这个时候呢,

请求操作系统呢,从外存把页呢。调入。内存那么这是我们请求分页时的地址变换过程的这样一个方式,那么大家看一下这个部分,那么这是请求分页中的地址变换过程的这样一个部分。也就是说,先进行地址变换的时候呢,首先检索块表,试图呢,从中找出要访问的页,如果找到了修改页表箱中的访问位供置换算法的,选出页表页面时的参考,对于写指令还需要。将修改位置呢,

换成一表示该页在调入内存后已被修改,然后利用列表项呢,给出物理块号和页内地址呢,形成物理地址,地址变换过程呢,就是这样一个使用的,这样一个部分。如果在块表中呢,还没有找到该页的页表项,则应该在内存中呢,去寻找该页表,再从找到的页表上的状态位了,来了解该页是否掉入内存,如果该内页呢,已掉入内存呢,

再从。再将该页的页表上写入块表,当块表已满时,则应该按某种算法所确定的调出了这样一个部分呢。确定的页的页表项进行调出,然后再写入该页的页表项,若页尚未调入内存呢,还应该产生缺页中断,请求操作系统呢,把该页呢调入内存。我们来看一下请求分页中的内存分配,在为进程分配内存时,那么将涉及到三个运问题,第一个为了保证进程能够正常运行所需要的最小物理快速的确定。第二个,

在为每个进程分配物理块时,应该采用什么样的分配策略?就是说分配的物理块数呢?是固定的还是可变的?第三个,为不同的进程分配?物理快速是采用平均分配算法,还是根据进程的大小呢?按比例进行分配好了,我们来看一下最小物理快速的确定。那么一个随着每个进程所分配的物理快速的减少了,将使进程在执行的过程当中的缺力上升。因从而呢,降低进程的执行速度,为了使进程能有效的工作呢,

应当为它分配一定数目的物理块,但这并不是最小物理块的概念,那么最小物理块呢,是只能保证。正进程能正常运行的最小的物理块数,当系统能为进程分配的物理块少于此值时,进程将无法运行。至于进程应获得的最小物理块数与计算机硬件结构有关。取决于指定的格式以及呢?功能和选取方式。那么,这是我们最小物理快速确定的这样一个部分,那么内存请求分配策略呢?在请求分页系统中可以采用两种内存分配策略,即固定和可变分配策略,

在进行置换时也可以采用两种。策略,即全局置换和局部置换,那么局部置换我们看一下局部分配。固定分配局部置换呢,那么所谓的固定分配呢,是指为每个进程分配一组固定数目的物理块,在进程运行期间不再改变所谓的局部置换呢,是指如果进程在运行中发现区域。只从分配给该进程的n个页中选择一页换出,然后再调出一页,以保证分配给该进程的内存空间不变。那么,采用这样一个策略的时候呢?为每个进程分配多少物理块?

是根据进程或者程序员程序管理员的建议来这样一个实现。这样要求来确定的。在这种策略的困难在于呢,因为每个进程分配多少个物理块的难以。确定那么如果太少,会频繁的出现缺页中断,降低系统的吞吐量,若太多,又会使内存中驻留的进程数目太少,进而呢,可能造成CPU的空闲或者其他资源的。让其他资源的空闲,而且呢,在实现进程兑换时呢,会发生更多的时间,

我们再看一下可变分配全局置换所谓的可变分配呢,是指先为每一个进程分配一定数目的物理块。在进程运行期间呢,可以根据情况呢,做适当的增加或减少所谓的全局置换呢,是指如果进程在运行过程中发生缺页协商操作系统,所有保留的空闲物理块。取出一块分配给该进程。或者以所有进程的全部卧底块为标为目标,那为为这样一个运用的这样一个部分选择一块换出,然后呢,将所有的所缺的页呢调入,这样分配给该进程的这样一个内存空间呢就增加。采用可变分配全局置换这种方法,实现最容易实现一种物理块分配和置换策略,

以那么采取这种策略时呢,凡是产生缺页中断时呢?就会获得新的物理块,当这几张物理块队列中的物理块用完时,操作系统呢,才从内存中选择一页换出。对于被调出的页呢,可能是系统中的任何一个进程的页,因此呢,这个被选用的进程呢,它物理快速会减少,这会导致其缺页率增加。那么我们再看一下可变分配全局,局部置换可变分配,局部置换呢?

该策略呢?同样是基于进程的类型或根据程序员的要求,为每个进程呢?分配一定数目的物理块。但当该进程发现缺页时呢?仅从该进程内存的页面中选择一页换出,这样就不会影响其他进程的运行。如果进程在运行中频繁的出现出页中断。则系统呢,再为该进程呢,分配若干附加的物理块,直到了该进程的确立了,减少到适当的程度为止,那么反过来呢,有若一个进程在运行中确立了特别低,

则此时呢,可适当的减少分配给该。进程的物理块,但不应该引起其缺液率的增加,这个明显增加增加的这样一个过多的这样一个部分好了,我们来看一下物理块的分配算法。在采用固定分配策略时呢,如何将系统中可分配的所有物理块呢?分配给多个进程,那么我们可以采取这些算法,比如说平均分配算法,即将系统中所有可供分配的物理块呢?平均分配每个进程。第二个是按比例分配算法,即根据进程的比例大小呢,

按比例分配物理块,比如说进程中呢,有n个进程系统中呢,有n个进程,每个进程的页面数量为si则系统中各进程页面数的总。和了为s=I=1到n si,那么又假定。系统中可用的物理块呢,为m则每个进程呢,所能分配到的物理块数BI呢,等于si比上s来乘以m,这个时候呢BI应该取整它必须大于最小的物理块数。那么,第三个考虑到优先权的分配算法。在实际应用中,

为了照顾重要的,紧迫的作业,能尽快的完成,因为它分配较多的内存空间,通常采用的方法呢,是把内存中可供分配的所有物理块呢,分成两部分。一部分呢,按比例分配给各进程,另一部分呢,则根据各进程的优先权来进行分配,为高优先进程呢,适当的增加其相应的部分。而在有的系统中呢,比如说实时控制系统中则有可能是完全按优先权呢,

为各进行了分配五块。


页: [1]
查看完整版本: 14.第14节课第五章虚拟存储器