虚拟存储,虚拟内存什嘛关系???内存如何分配???页面又按何种方式置换???
虚拟存储器:为什么会出现虚拟存储器呢???(之前的要求是:将一个作业全部装入内存后方能运行)
1,有的作业很大,其所要求的内存空间超过了内存的总容量,作业并不能完全被装入内存,致使作业无法执行
2,有大量作业要求运行,但由于内存容量不足以容纳所有这些作业,只能将少数作业装入内存让他们先运行,
而其他大量的作业留在外存上等待.
一个显而易见的解决方法是:从物理上增加内存容量,但这往往会收到机器自身的限制,而且无疑要增加系统成本
另外一种:从逻辑上扩充内存容量
而常规存储器管理方式的特征:
一次性(作业在运行之前需要一次性的全部装入内存,但是许多作业在运行时,并非其全部程序和数据都要用到,如 果一次性的装入内存,那么也是对内存空间的一种浪费)
驻留性(作业装入内存后,便一直驻留在内存中,直至作业运行结束,并且占用极为宝贵的内存资源)
局部性原理:
1,时间局限性:如果程序中的某条指令一旦执行,则不久后该指令可能再次执行;如果某个数据被访问过,则不久 后该数据可能再次被访问(程序中存在大量的循环操作)
2,空间局限性:一旦访问某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问
的地址集中在一定的范围内
虚拟存储器:
基于局部性原理,应用程序在运行之前,没有必要完全装入内存,仅须将那些当前要运行的少数页面或段先装入内存运行便可运行.程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所需要的页(段)尚未调入内存(称为缺页或缺段),此时程序应利用OS所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去.如果此时内存已满,无法再装入新的页(段),则还须在利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,将在访问的页(段)调入内存,使程序继续执行下去.这样,便可以使一个大的用户程序能在较小的内存空间中运行;也可以在内存中装入更多的进程使它们并发执行.
从用户的角度看:该系统所具有的内存容量,将比实际内存容量大的多.但必须说明:我们所看到的大容量只是一种感觉,是虚的,故人们把这样的存储器称为虚拟存储器.
所以说:虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统.其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本又接近于外存.
可见及其优越.....
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。
虚拟内存别称:虚拟存储器(virtual memorty),电脑中所运行的程序须经由内存执行,若执行程序所占用的内存很大很多,则会导致内存消耗殆尽
虚拟存储器的实现方法:
1,在虚拟存储器中,允许将一个作业分多次调入内存.如果采用连续分配方式时,应将作业装入一个连续的内存区 域中.为此,须事先为它一次性的申请足够的内存空间,以便将整个作业先后分多次的装入内存.这不仅会使相 当一部分内存空间都处于暂时或"永久"的空闲状态,造成内存资源的严重浪费,而且也无法从逻辑上扩大内存
容量.因此,虚拟存储器的实现,都毫无例外的建立在离散分配的存储管理方式的基础上.目前,所有的虚拟存 储器都是采用下述方式之一实现的
1,分页请求系统:在分页系统的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统.它 允许只装入少数页面的程序(及数据),便启动运行.以后,再通过调页功能及页面置换功能陆续的把即将 要运行的页面调入内存,同时把暂不运行的页面换出到外存上
硬件支持:请求分页的页表机制,它是在纯分页的页表机制上增加若干项而形成的,作为请求分页的数据结 构;缺页中断机构;地址变换机构
2,请求分段系统:增加了请求调段及分段置换功能后所形成的段式虚拟存储系统.类似于分页,一切是以段为
基础的.硬件也是类似的
特征:1,多次性(一个作业被分成多次调入内存运行)
2,对换性(允许作业在运行过程中换进换出)
3,虚拟性(指能够从逻辑上扩充内存容量)
1,页表机制
在请求分页系统中所需要的主要数据结构是页表.其基本作用是将用户地址空间中的逻辑地址变换为内存空间中
的物理地址.由于只将应用程序的一部分调入内存,还有一部分仍在盘上,故需要在页表中再增加若干项,供
程序(数据)在换进,换出时参考.在请求分页系统中的每个页表项如下:
状态位p:用于指示该页是否已调入内存,供程序访问时参考
访问字段A:用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问,供选择换出页 面时参考
修改位M:表示该页在被调入内存后是否被修改过.由于内存中的每一页都在外存上保留一份副本,因此:若未
被修改,在置换该页时就不需再将该页写会到外存上,以减少系统的开销和启动磁盘的次数;若已经
被修改,则必须将该页重新写到外存上,以保证外存中所保留的始终是最新副本.
外存地址:用于指出该页在外存上的地址,通常是物理块号
2,缺页中断机构
在请求分页系统中,每当所要访问的页面不存在时,便产生一缺页中断,请求os将所却之页调入内存.缺页中 断作为中断,它们同样需要经历诸如保护CPU环境,分析中断原因,转入缺页中断处理程序处理,回复cpu 环境等几个步骤.但缺页中断又是一种特殊的中断,它与一般的中断相比,有着明显的区别:
1,在指令执行期间产生和处理中断信号.通常,cpu都是在一条指令执行完后,才检查是否有中断请求到 达.若有,便去响应,不然,继续执行下一条指令.然而,缺页中断是在指令执行期间发现所要访问的指令
或数据不在内存时所产生和处理的.
2,一条指令执行期间,可能产生多次缺页中断.如下图:
在执行一条指令COPY A TO B
可能要产生6次中断:指令本身跨了两个页面,A和B又分别是一个数据块,也都跨了两个页面
3,地址变换机构
请求分页系统中的地址变换机构,是在分页系统地址变换机构的基础上,再为实现虚拟存储器而增加了某些
功能而形成的,如产生和处理缺页中断,以及从内存中换出一页的功能等.如下产生和处理缺页中断,以及
从内存中换出一页的索快表,试图从中找出索要访问的页.(摘自:计算机操作系统:(三)146)
4,内存分配策略和分配算法
1,在为进程分配内存时,将涉及到三个问题:第一,最小物理块的确定;第二,物理块的分配策略;第三,物 理块的分配算法
2,最小物理块数的确定
这里所说的最小物理块数,是指保证进程正常运行所需的最小物理块数.当系统为进程分配的物理块数小于
此值时,进程将无法进行.最小的物理块数与计算机的硬件结构有关,取决于指令的格式,功能和寻址方式
,对于某些简单的机器,若是单地址指令且采用直接寻址方式,则所需的最少物理块数为2.其中,一块用 于存放指令的页面,另一块则用于存放数据的页面.如果该机器允许间接寻址时,则至少要求有三个物理块
.对于某些功能较强的机器,其指令长度可能是两个字节或多于两个字节,因而其指令本身有可能跨两个页 面,且源地址和目标地址所设计的区域也都有可能跨两个页面
3,物理块的分配策略
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略.在进行置换时,也可采取两种策略
,即全局置换和局部置换
1,固定分配局部置换:基于进程的类型,或根据程序员的建议,为每个进程分配一定数目的物理块,在整 个运行期间都不在改变.采用该策略时,如果进程在运行过程中发现缺页,则只能从该进程在内存的n
个页面中选出一个页换出.然后在调入一页,以保证分配给该进程的内存空间太少.
但是:应为每个进程分配多少各物理块难以确定.若太少,会频繁的出现缺页中断,降低了系统的吞吐 量;若太多,又必然使得内存中驻留的进程的数目太少,进而可能造成cpu空闲或其他资源的浪费
2,可变分配全局置换
可能是最易实现的一种物理块和置换策略,已用与若干os中.在采用这种策略时,先为系统分配一定 数目的内存块,而os本身也保持一个空闲物理块队列.当某进程发现缺页时,由系统从空闲物理队列
中取出一个物理块分配给进程,并将预装入缺页装入其中.这样,凡是产生缺页(中断)的进程,都将
获得新的物理块,仅当空闲物理块队列中的物理块用完的时候,os才能从内存中选择一页调出,该页 可能是任一进程的页,这样,自然又会使那个进程的物理块减1,进而增加缺页率
3,可变分配局部置换
同样是基于进程的类型或根据程序员的要求,为每个进程分配一定数目的物理块,但当进程发现缺页 时,只允许从该进程在内存的页面中选出一页换出,这样就不会影响其他进程的运行.如果进程在运行
中频繁的发生缺页中断,则系统须再为该进程分配若干附加的物理块,直至该进程的缺页率减少到适当
程度为止;反之,若一个进程在运行过程中的缺页率特别低,则此时可适当减少分配给该进程的物理块
数,但不应引起其缺页率明显增加
4,物理块分配算法
在采用固定的分配策略时,如何将系统中所有可供分配的物理块平均分配给各个进程,可以采用以下几种算 法
1,平均分配(将系统中所有可供分配的物理块平均分配给各个进程.例如:当系统中有100个物理块 ,有5个进程正在运行,每个进程可分得20个物理块.这种方法貌似公平,但实际上是不公平的,因 为它没有考虑到各个进程本身的大小,如果一个进程其大小为200页,只分给20页,那么缺页率自 然很高)
2,按比例划分
根据进程的大小按比例分配物理块的算法
3,考虑优先权的分配算法
为了照顾到重要的,紧迫的作业能尽快的完成,应为它分配较多的内存空间.通常采取的是把内存中可
分配的所有物理块分成两部分:一部分按比例分配给各个进程;另一部分则根据各进程的优先权.在有 的系统中,实时控制系统中,则可能完全按照优先权来为各进程分配其物理块
4,页面置换算法
在进程的运行过程中:若其所要访问的页面不在内存而需要把它们调入内存,但内存已经没有空闲空间,为了保 证该进程能正常运行,系统必须从内存中调入一页程序或数据送磁盘对换区,但是应该将那个页面调出呢???
当然,我们的目的很明确,我们一定要减少页面置换频率
1,最佳置换算法
其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面,采用最佳
置换算法,通常可保证获得最低的缺页率.但是,最大的问题就是:我们现在还无法知道一个进程在内存的
若干个页面中,哪一个页面是未来最长时间内不再被访问的.
假如:系统为某进程分配了三个物理块,并考虑有以下页面号
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
此时,进程运行时,先将7,0,1三个页面装入内存.以后,当进程要访问页面2时,将会产生缺页中断
,此时os根据最佳置换算法,将选择页面7予以淘汰.这是因为页面0将作为第五个被访问的页面,页面 1是第14个被访问的页面,而页面7是第18次页面访问时才需要调入.所以,出7
如下图:
2,先进先出页面置换算法
该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰
还是如上情况:
7,0,1,2,0,3,0,4,2,6
3,最近最久未使用的置换算法
FIFO置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不 能反映页面的使用情况,而最近最久未使用的页面置换算法,是根据页面调入内存后的使用情况来进行决策 的.
如下:7,0,1,2,0,3,0,4