• 请求分页中的内存分配


    在为进程分配内存时,将涉及到三个问题:第一,为保证进程能正常运行,所需要的最小物理快数的确定;第二,在为每个进程分配物理块时,应采取什么样的分配策略,即所分配的物理块是固定的,还是可变的;第三,为不同进程所分配的物理块数是采取平均分配算法,还是根据进程的大小按比例分配。

    先来介绍几个概念:

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

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

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

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

    在这里,我撇开第一和第三这两个问题不谈,我们来重点说说第二个内存分配策略的问题。

    在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可以采取两种策略,即全局置换和局部置换。于是,可组合出以下三种适用的策咯(其实这也是我为什么要写这篇文章的原因)。

    1)固定分配局部置换(Fixed Allocation,Local Replacement)

    采用该策略时,为每个进程分配多少物理块是根据进程类型(交互型或批处理型等)或者根据程序员、程序管理员的建议来确定的。

    实现这种策略的困难在于:应为每个进程分配多少个物理块难以确定。若太少,会频繁地出现缺页中段,降低系统吞吐量。若太多,又必然会使内存中驻留的进程数目减少,进而可能造成CPU空闲或者其他资源空闲的情况,而且在实现进程对换时,会花费更多的时间。

    2)可变分配全局置换(Variable Allocation,Global Replacement)

    可变分配全局置换这可能是最易于实现的一种物理块分配和置换策略,已用于若干个OS中。在采用这种策略时,凡产生缺页(中断)的进程,都将获得新的物理块,仅当空闲物理块队列中的物理块用完时,OS才能从内存中选择一页调出。被选择调出的页可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,这将导致其缺页率增加。

    3)可变分配局部置换(Variable Allocation,Local Replacement)

    该策略同样是基于进程的类型或者是根据程序员的要求,为每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中选择一页换出,这样就不会影响其它进程的运行。如果进程在运行中频繁地发生缺页中断,则系统再为该进程分配若干附加物理块,直至该进程的缺页率减少到适当程度为止。反之,若一个进程在运行过程中缺页率特别低,则此时可适当减少分配给该进程的物理块数,但不应引起其缺页率的明显增加。

    看到这里,你可能会发现,以上只有三种分配置换策略,按理应该有四种,是不是还差固定分配全局置换(Fixed Allocation,Global Replacement)?

    同样,看到这里我也想了一下,为什么没有第四种搭配。我也在寻找答案,期待我找到答案吧!

  • 相关阅读:
    单线程的JavaScript是如何实现异步的
    前端优化之 -- 使用 require.context 让项目实现路由自动导入
    插入排序
    选择排序
    冒泡排序
    强缓存和协商缓存
    ES6 Set求两个数组的并集、交集、差集;以及对数组去重
    实现一个new操作符
    我理解的浅拷贝和深拷贝
    javascript专题系列--js乱序
  • 原文地址:https://www.cnblogs.com/mahuangping/p/5468577.html
Copyright © 2020-2023  润新知