操作系统——(5)虚拟存储器

一、虚拟存储器

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

  • 一次性

  • 驻留性

2、局部性原理

1968年,指出程序在执行时将呈现出局部性规律,即在一较短时间内,程序的执行积案局限于某个补个部分,相应地,它所访问的存储空间也局限于某个区域

  • 局部性原理的几个论点:程序执行时,除了少部分的转移和过程调用指令外,在大多数情况下是顺序执行的;过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域,过程调用的深度在大多数情况下都不超过5;程序中存在许多循环结构,这些结构虽然只有少数指令构成,但是他们将被多次执行;程序中还包括许多对数据结构的处理,如对数组进行操作,这些处理往往都局限于很小的范围内

  • 局限性表现在两个方面:时间局限性;空间局限性

3、虚拟存储器的定义

是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统,其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度

4、虚拟存储器的特征

  1. 顺序性

  2. 多次性

  3. 对换性

  4. 虚拟性

5、虚拟存储器的实现方法(均建立在离散分配存储管理方式的基础上)

(1)、分页请求系统

在分页系统的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统,它允许用户程序只装入少数页面的程序(及数据)即可即启动运行

  • (主要)硬件支持

    1. 请求分页的列表机制

    2. 缺页中断机构

    3. 地址变换机构

  • 实现请求分页的软件

(2)、请求分段系统

在分段系统的基础上,增加了请求调段及分段置换功能后所形成的段式虚拟存储系统,它允许用户程程序只要装入少数段(而非所有的段)的程序和数据即可启动运行。

  • (主要)硬件支持

    1. 请求分段的段表机制

    2. 缺段中断机构

    3. 地址变换机构

  • 软件支持

二、请求分页存储管理方式

1、请求分页虚拟存储管理的基本原理

    1. 首先,物理的内存空间被划分为等长的物理块,并对块编号。同时,用户程序也进行分页,这些与页式存储管理相同。

    2. 在用户程序开始执行前,不将该程序的所有页都一次性装入内存,而是先放在外存。当程序被调度投入运行时,系统先将少数页装入内存,随着程序运行,如果所访问的页在内存中,则对其管理与分页存储管理情况相同。

    3. 若发现所要访问的数据或指令不在内存中,就会产生缺页中断,到外存寻找包含所需数据或指令的页,并将其装入到内存的空闲块中。

    4. 在装入一页的过程中,若发现内存无空闲块或分配给该进程的物理块已用完,则需要通过页面置换功能从已在内存的页中挑选一个将其淘汰,释放所占用的物理块后将新的页面装入该块,进程继续运行。

    5. 被淘汰的页面如果刚才被修改过,则还需要将其回写到外存,以保留其最新内容。

2、请求页表中的硬件支持

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

      • 状态位(存在位)P

      • 访问字段A

      • 修改位M

    • 缺页中断机构

      1. 缺页中断机构与一般的中断机构区别

        1. 在执行指令期间产生和处理中断信号

        2. 一条指令在执行期间可能产生多次缺页中断

    • 地址变换机构

3、请求分页中的内存分配

(1)、最小物理块数

是只能保证进城正常运行所需的最小物理块数,当系统未进程分配的物理块数少于此值时,进程将无法运行。进程应获得的最少物理块数与计算机的硬件结构有关,取决于指令的格式、功能和选址方式;若是单地址指令,且采用直接寻址方式,则所需的最少物理块数为2,其中一块用于存放指令的页面,另一块则用于存放数据的页面。如果该机器允许间接寻址,则至少要求有三个物理块。

(2)、内存分配策略

固定分配局部置换

    • 固定分配:是指每个进程分配一组固定数目的物理块,在进程运行期间不改变。

    • 局部置换:是指如果进程在运行中发现缺页,则只能从分配给该进程的n个页面中选出一页换出,然后再调入一页,以保证分配给该进程的内存空间不变。

可变分配全局置换

  • 可变分配:是指先为每个进程分配一定数目的物理块,在进程运行期间可根据情况做适当的增加或减少。

  • 全局置换:是指如果进程在运行中发现缺页,则将OS所保留的空闲物理块(一般组织为一个空闲物理块队列)取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块换出,然后将所缺之页调入。

可变分配局部置换

    1. 页面调入策略

      1. 页面调入策略有两种:

        1. 请求页调入

        2. 预先页调入

      2. 何时调入页面:当进程在运行中需要访问某个部分程序和数据时,若发现其所在的页面不在内存,便立即提出请求,由OS将其所需页面调入内存。

      3. 从何处调入页面:用于存放兑换页面的对换区通常是采用连续分配方式;用于存放文件的文件区通常采用离散分配方式,所以兑换区的数据存取(磁盘I/O)速度比文件区的高。当发生缺页请求时,分三种情况进行:

        • 系统拥有足够的兑换区空间,这时可以全部从对换区调入所需页面,以提高调页速度。

        • 系统缺少足够的对换区空间,这时凡是不会被修改的文件都直接从文件区调入;而当换出这些页面时,由于它们未被修改,则不必再将他们从写到磁盘(换出),以后再调入时,仍从文件区直接调入。

        • Unix方式:由于与进程有关的文件都放在文件区,故凡是未运行过的页面都从文件区调入,而对于曾经运行过但又被换出的页面,由于是被放在对换区,因此在下次调入时应从对换区调入。

      4. 页面调入过程

        • 每当程序所要访问的页面未在内存时(存在位为“0” ),便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后转入缺页中断处理程序。该程序通过查找页表得到该页在外存的物理块后,如果此时内存能容纳新页则启动磁盘I/O,将所缺之页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法,从内存中选出一页 准各换出:如果该页未被修改过(修改位为“1” ),则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位为“1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表形成所要访问数据的物理地址,再去访问内存数据,整个页面的调入过程对用户是透明的。

      5. 缺页率

        1. 衡量页面置换算法的重要的指标是缺页率。

        2. 影响缺页率的因素如下:

          1. 进程分得的内存物理块数越多,缺页率越低。

          2. 划分的页面越大,缺页率越低。

          3. 如果程序局部性好,则缺页率低。

          4. 如果选取的置换算法优,则缺页率低。

三、页面置换算法

1、先进先出置换算法(FIFO)

(1)、基本思想

优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。但该算法与进程实际运行时的规律不适应,因为在进程中,有的页面经常被访问。

先进先出页面置换算法开销低、容易编程实现,适合于线性顺序特性好的程序。但是该算法没有考虑到页面的访问频率,很可能刚被换出的页面马上又要被访问,使得缺页率偏高。

缺点:FIFO算法还会产生当所分配的物理块数增大而页故障数不减反增的异常现象,这是由Belady于1969年发现,故称为Belady异常。

(2)、实现过程

假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:7, 0, 1, 2, 0, 3, 0,4,2,3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1。釆用FIFO算法进行页面置换,进程访问页面2时,把最早进入内存的页面7换出。然后访问页面3时,再把2, 0, 1中最先进入内存的页换出。由下图可以看出,利用FIFO算法时进行了12次页面置换。

2、最佳页面置换算法(OPT)

(1)、基本思想

在选择页面置换时应该考虑该页面将来使用的情况,将来最长时间不用的页面被淘汰。在进程采用固定页面分配的情况下,最佳页面置换算法具有最低的缺页率。

(3)、实现过程

假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:1,2,3,4,1,2,5,1,2,3,4,5。釆用OPT算法进行页面置换,进程访问页面4时, 如果每个物理块都会再次被访问,那么其中最长未来时间内不再被访问的页面为淘汰页面。缺页率为7/12=58%。

3、最近最不常用页面置换算法(LRU)

LRU算法能够合理地预测程序运行状态,具有很好的置换性能,被公认为是一种性能好且可以实现的页面置换算法,但是LRU算法在实现起来比较复杂。

实现过程:当需要淘汰某页面时,选择当前一段时间内最久未使用过的页先淘汰, 即淘汰距当前最远的上次使用的页。

缺页7次,总访问次数12次

缺页率:7/12=58.3%

4、时钟置换算法

(1)、基本思想

将内存中所有的页面组织成一个循环队列,形成一个类似于时钟表面的环形表,循环队列指针类似于钟的指针,用来指向可能被淘汰的页面,指针开始时指向最先进入内存的页面。

(2)、实现过程

时钟置换算法需要在页表中为每一页增加一个访问位R。当页面首次装入内存时,R的初值设置为“0”。当某个页面面被访问过后,R的值被设置为“1”。

选择淘汰页面的方法是从指针当前指向的页面位置开始扫描时钟环,如果某个页面页表中的R为“1”,表明该页被访问过,将R清“0”,并跳过该页;如果某个页面页表中的R为“0”,表明该页没有被访问过,该页被淘汰,指针推进一步;如果所有的页面都被访问过,指针绕环一圈,将所有页面的R清“0”,指针回到起始位置,选择该页淘汰,指针推进一步。

(3)、抖动

  • 抖动:由于缺页而引起的一种系统现象,即处理器频繁地处理页面的换出和调入,使得处理器实际处理程序的能力大大减小。“抖动”现象常在缺页率非常高时发生。即刚被换出的一页很快又要被访问,需要将他重新调入,此时又需要再选一页调出,而此刚被调出的页很快又被访问,又需将它调入,如此频繁的更换页面,以致一个进程在运行中把大部分时间都花费在页面置换工作上,我们称该进程发生了抖动。

  • 抖动的预防方法(基本采用调节多道程序度来控制“抖动”发生)

      1. 采取局部置换策略

      2. 把工作集算法融入到处理机调度中

      3. 利用准则“L=S”准则调节缺页率

      4. 选择暂停的进程

四、请求分段存储管理方式

1、请求分段基本思想

请求分段的基本思想是:将用户程序的所有段首先放在辅助存储器中,当用户程序被调度投入运行时,首先把当前需要的一段或几段装入内存,在执行过程中访问到不在内存的段时再把它们从外存装入

2、请求分段中的硬件支持

  • 请求段表机制

  • 缺段中断机构

  • 地址变换机构

猜你喜欢

转载自blog.csdn.net/qq_41819893/article/details/121328976