20170925_虚拟存储器

来源:互联网 发布:类似于zine的软件 编辑:程序博客网 时间:2024/05/20 02:54

20170925_虚拟存储器

1、虚拟存储器的定义:

(1)基于局部性原理,在程序装入内存时,可以先将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。

(2)在程序执行过程中,当所访问的信息不再内存中时,由操作系统将所需要的部分再调入内存,然后继续执行程序。

(3)另一方面,操作系统将内存中暂时用不到的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称之为“ 虚拟存储器 ”。

2、虚拟内存的实现方式:

虚拟存储器的三个过程:部分装入——> 请求调入——> 置换功能。

(1)请求分页式存储管理

(2)请求分段式存储管理

(3)请求段页式存储管理

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

(1)一定容量的内存和外存。

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

(3)中断机制,当用户程序要访问的部分尚未调入内存时,则产生中断。

(4)地址变换机构,逻辑地址到物理地址的变换。

4、请求分页系统,是建立在基本分页系统的基础之上,为了支持虚拟存储器功能而增加了“ 请求调页功能 ”和“ 页面置换功能 ”。

请求分页是目前最常用的一种实现虚拟存储器的方式。

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

5、常见的置换算法是:最佳置换算法(OPT),先进先出算法(FIFO),最近最久未使用算法(LRU)。

(1)最佳置换算法(OPT)

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

但是,该算法经常被用来评价其他算法。

(2)先进先出算法(FIFO)

优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。该算法实现比较简单,只需要把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。

但该算法与进程实际运行时的规律不适应,因为在进程中,有的页面经常被访问。

FIFO算法,还会产生当所分配的物理块数增加时、页面故障数不减反增的异常现象,这就是Belady现象。

注意:先进先出算法会出现Belady现象,而最佳置换算法和最近最久未使用未使用算法则不会出现Belady现象。

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

选择最近最长时间未被访问过的页面予以淘汰,它认为过去一段时间内未被访问过的页面,在最近的将来可能也不会被访问。

该算法为每一个页面都设置了一个访问字段,来记录该页面自从上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰。

6、实际上,LRU 算法根据各页以前的情况,是“ 向前看 ”,而OPT 算法是根据各页以后的情况,是“ 向后看的 ”。

LRU 是堆栈类算法,堆栈类算法是不会出现Belady 现象的,性能较好。

FIFO 是队列算法,可能会出现Belady 现象。

7、抖动:

在页面置换过程中的一种较为糟糕的情况是,刚刚换出的页面马上又要被换入内存中去,刚刚换入的页面马上又要被换出内存,这种频繁的页面调度行为被称之为“ 抖动 ”。

如果在一个进程中,在换页上用的时间多于执行时间,那么这个进程就在抖动。

频繁发生缺页中断,其主要原因就是,某个进程频繁访问的页面数要高于可用的物理块数。







原创粉丝点击