虚拟内存

                                                                          虚拟内存

  在程序装入时,可以将程序的一部分装入内存,而将其与部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大的多的存储器,称为虚拟内存。

  之所以称为虚拟内存,是因为这种存储器实际上不存在,只是由于操作系统提供了部分装入、请求调入和置换功能后(对用户完全透明),给用户的感觉是好像存在一个比实际物理内存大得多的内存。

虚拟内存的实现有以下3中方式:

a)  请求分页存储管理

b)  请求分段存储管理

c)  请求段页式存储管理

不管哪种方式,都需要一定的硬件支持。一般需要的支持有以下几个方面:

   i.     一定容量的内存和外存

 ii.     页表机制(或段表机制),作为主要的数据结构

iii.     中断机构,当用户程序要访问的部分尚未调入内存,则产生中断

 iv.     地址变换机构,逻辑地址到物理地址的变换。

请求分页式管理方式

请求分页系统建立在基本分页系统基础之上,为了支持虚拟内存功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟内存的方法。

在请求分页系统中,只要求当前需要的一部分页面装入内存,便可以启动作业运行。在作业执行过程中,当所要访问的页面不在内存时,再通过调页功能将其调入。还可以通过页面置换功能将暂时不用的页面换出到外存上,以便腾出内存空间。

为了实现请求分页,系统必须提供一定的硬件支持,除了需要一定容量的内存以及外存的计算机系统,还需要有页表机制,缺页中断机构以及地址变换机构。

常见的置换算法有以下3种:最佳置换算法(OPT),先进先出(FIFO)页面置换算法,最近最久未使用(LRU)置换算法。

1.  最佳置换算法(OPT)

最佳置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若干页面哪个是未来最长时间内不再被访问的,因而该算法无法实现。该算法可以用来评价其他算法。

2.  先进先出(FIFO)页面置算法

优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。但该算法与进程实际运行时候的规律不适应,因为在进程中,有的页面经常被访问。FIFO算法还会产生当所分配的物理块数增大而页故障数不减反增的异常现象。称为Belady异常。

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

选择最近最长时间未访问过的页面予以淘汰,他认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择页面中值最大的予以淘汰。

LRU性能较好,但是需要寄存器和栈的硬件支持。LRU是堆栈类的算法,不会出现Belady异常。FIFO算法基于队列实现,不是堆栈类算法。

抖动:在页面置换过程中最糟糕的情形:刚刚换出的页面又要被换入主存,刚刚换入的页面马上就要换出主存,这种频繁的页面调度行为称为抖动或颠簸。如果一个进程在换页上用的时间多于执行时间,那么这个进程就在颠簸。

工作集:或者驻留集,是指在某段时间间隔内,进程要访问的页面集合,经常被使用的页面需要在工作集中,而长期不使用的页面要从工作集中被丢弃。为了防止系统出现抖动现象,需要选择合适的工作集的大小。原理是让操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的物理块。如果还有空闲物理块,则可以在调用一个进程到内训以增加多道程序数。如果所有工作集之和超过了可用物理块的总数,那么操作系统会暂停一个进程,将其页面调出并且将其物理块分配给其他进程,防止抖动现象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值