外存及虚拟存储器管理

 外存资源管理

外存空间划分
静态等长,2i, 称为一块(block),块是外存分配的基本单位,也是IO传输的基本单位。
如果需求不足一个完整块,会形成块内“零头”。由于外存空间很大,块内零头忽略。
外存空间分配
空闲块链(慢):所有空闲块连成一个链
空闲块表(UNIX):相连的空闲块记录在同一表项中

字位映像图:用1位表示一个块的状态

界地址
每进程占一组外存连续块;
每进程占二组外存连续块(双对界)。
页式
内存一页,外存一块。内存页与外存块长度相同。
段式
每段占外存若干连续块,进程的多个段之间在外存可以不连续。
段页式

内存一页,外存一块。内存页与外存块长度相同。段内多页所对应的外存块可以不连续,一个进程的多段可以分散在外存的不同区域中。

虚拟存储系统

虚拟存储
进程部分装入内存,部分(或全部)装入外存,运行时访问在外存部分动态调入,内存不够淘汰。

虚拟页式存储管理

进程运行前:
      部分(全部)装入外存,部分装入内存。
进程运行时:
   访问页不在内存,发生缺页中断,中断处理程序:
        找到访问页在外存的地址;
        在内存找一空闲页面;
              如没有,按淘汰算法淘汰一个
             如需要,将淘汰页面写回外存,修改页表和总页表
       读入所需页面(切换进程);
       重新启动中断指令。



内存页框分配策略(静态策略)

1. 平均分配:将内存中的所有物理页框等分给进入系统中的进程。如内存128页,进程25个,每个进程5个页框

 2. 按进程长度比例分配:按程序长度的比例确定分配内存的物理页框数。

         pi共si个页面;S=si;内存共m个页框
         分配给进程pi的物理页框数ai=(si/S)*m
例:内存物理页框62,系统2个进程,p1逻辑页面127,p2逻辑页面10,则p1分得57个物理页框,p2分得5个物理页框。

3. 按进程优先级比例分配:根据优先级别按比例分配内存物理页面。方法2中si表示进程pi的优先级。    
4. 按进程长度和优先级别比例分配:方法2和方法3的结合。此时,方法2中si为进程pi逻辑页面数与优先级之和。


     以上4种方法都是静态的,静态策略没有反映:
  (1)程序结构;
  (2)程序在不同时刻的行为特性。

外存块的分配策略

 1. 静态分配:
            外存保持进程的全部页面, 当某一外存页面被调入内
            存,所占用的外存页面并不释放:

            优点:速度快--淘汰时不必写回(未修改情况)
            缺点:外存浪费
    2. 动态分配
            外存仅保持进程不在内存的页面,当某一外存页面被调
            入内存,将释放所占用的外存页面:

            优点:节省外存
            缺点:速度慢--淘汰时必须写回

页面调入时机

 1.  请调(demand paging)
         upon page fault, 发生缺页中断
时调入。
         缺点:从缺页中断到所需页面被调入内存,期间对应的进
         程需要等待,将影响进程的推进速度。
    2.  预调(prepaging)
         before page fault, 将要访问时调入
(根据程序顺序行为,
         不一定准)。预调可以节省因页故障而等待的时间。
         当访问预先未调入内存的页面时,会发生缺页中断,因此
         预调必须辅以请调。

置换算法(replacement algorithm)

最佳淘汰算法(OPT--optimal):淘汰以后不再需要的或者在最长时间以后才会用到的页面。

先进先出(FIFO):淘汰最先调入内存的页面。
         依据: 先进入的可能已经使用完毕。
         实现:将所有页面按照进入内存的次序排成一个队列,当一个页面由外存调入内存时排入队尾,当需要淘汰时取队头页面。

使用过最久的先淘汰(LRU)
         淘汰最近一次访问时间距离当前时间间隔最长的页面。stack
      当一页面被访问时,如在栈中,取出压到栈顶;否则直接压入栈顶,满时淘汰栈底。
最近不用的先淘汰(not used recently,NUR):淘汰最近一段时间未用过的页面。
在实现时,为每一个页面增加两个硬件位,分别为
①引用位=0,此页未被访问过;
②引用位=1,此页曾被访问过;
③修改位=0,此页未被修改过;
④修改位=1,此页曾被修改过。

一个页面由外存调入内存时,其引用位和修改位均为0.当对某页面执行写操作时,其引用位和修改位均为1;当对某页执行读操作时,其引用位为1;每隔固定时间将所有引用位清零。


 最不经常使用的先淘汰(LFU):  淘汰使用次数最少的。

    依据: 活跃访问页面应有较大的访问次数.

最经常使用的先淘汰(MFU)

    淘汰使用次数最多的。

二次机会:淘汰装入最久且最近未被访问的页面。

实现时:采用拉链数据结构。

时钟算法:将页面组织成环形,有一个指针指向当前位置。每次需要淘汰页面时,从指针所指的页面开始检查。如果当前页面的访问位为0,即从上次检测到目前,该页没有访问过,则将该页替换。如果当前页面的访问位为1,则将其清0,并顺时针移动指针到下一个位置。重复上述步骤直至找到一个访问位为0的页面。

考虑修改标志m
r=0, m=0:最佳
r=0, m=1:次佳,淘汰前回写
r=1, m=0:再次
r=1, m=1:最后,淘汰前写回

改进时钟算法:

步骤1:
由指针当前位置开始扫描,选择最佳淘汰页面,不改变引用位,将第一个遇到的r=0且m=0的页面作为淘汰页面;
步骤2:
如步骤1失败,再次从原位置开始,找r=0且m=1的页面,将第一个满足上述要求的页面作为淘汰页面,同时将扫描过页面的r位清0;
步骤3:
若步骤2失败,指针再次回到原位置,重新执行步骤1。若还失败再次执行步骤2,此时定能找到。

颠簸(thrashing)

    页面在内存与外存之间频繁换入换出
    原因: (1) 分给进程物理页架过少;
                (2) 淘汰算法不合理;
                (3) 程序结构不好。

    处理:(1) 增加分给进程物理页架数;
    (2) 改进淘汰算法;
    (3) 改善程序结构。
在某些虚拟页式存储管理系统中,内存中总保持一个空闲的物理页框,这样做有什么好处?
       答:在内存没有空闲页框的情况下,需要按照置换算法淘汰一个内存页框,然后读入所缺页面,缺页进程一般需要 等待两次I/O传输

      若内存总保持一个空闲页框,当发生页故障时,所缺页面可以被立即调入内存,缺页进程只需等待一次I/O传输时间。读入后立即淘汰一个内存页面,此时可能也需执行一次I/O传输,但对缺页进程来说不需等待,因而提高了响应速度。

工作集模型:进程在一段时间内所访问页面的集合。


与时间和窗口尺寸有关

页故障率反馈模型

PFFB(Page Fault Feed Back):动态调整页面的分配
页故障率高(达到某上界阈值):内存页框少,增加。
页故障率低(达到某下界阈值):内存页框多,减少。

虚拟段式存储系统

进程运行前,主程序段装入内存,其它段装入外存,访问段不再内存时,发生缺段中断。
若内存空间不够
紧凑:将内存中的所有空闲区合并
淘汰:
将内存中的某段移至外存


段的动态连接

动态连接 vs. 静态连接
静态连接:运行前连接,由link完成(对程序库进行扫描,将整个程序涉及到的目标模块逐个调入内存并连接在一起);一个程序共有多少个段是确定的,因而link可以为每一个段分配一个段号;
动态连接:运行时连接,由OS完成.(在程序运行过程中需要某一个段时才将该段连接上);一个程序共有多少个段是不确定的,因而段名到段号的转换需要由操作系统来完成的。




动态连接与共享的矛盾

动态连接:修改连接字(代码)
段的共享:要求纯代码(pure code)
解决方法
共享代码分为“纯段”和“杂段”
纯段共享,
杂段私用。

 虚拟段页式存储系统

一个段对应一个程序单位,是二维地址
方便存储共享和保护
可以实现段长度的动态变化,以及段间的动态连接

但对存储空间的分配和去配较复杂,可能形成碎片


中断处理:

 连接中断  缺页中断   越界中断  (段号,段内页号)  越权中断

分页对用户是透明的,分段对用户是可见的


猜你喜欢

转载自blog.csdn.net/liudongdong19/article/details/80725718
今日推荐