zoukankan      html  css  js  c++  java
  • 【转】策略与机制分离

      策略与机制相分离的本质是什么 分层逻辑策略是针对问题域问题解决得逻辑描述。是设计。是形而上的。机制是对策略的实现,可以有多种方法,不同的机制可以实现同样的策略,是形而下的。

        软件是策略,硬件是机制。
        授权是策略,访问控制是机制。
        命令是策略,实施是机制。
        宏观是策略,微观是机制。
        战略是策略,战术是机制
      案例如:在控制系统复杂度的一种重要方法就是把策略从机制中分离出来。通过使大多数存储管理器作为用户级进程运行,就可以把该原则应用到存储管理中。在Mach(Young 等人,1987)中首先应用了这种分离。下面的讨论基本上是基于Mach的。
      一个如何分离策略和机制的简单例子可以参见图3-30。

                                   

      其中存储管理系统被分为三个部分:
        1) 一个底层MMU处理程序。
        2) 一个作为内核一部分的缺页中断处理程序。
        3) 一个运行在用户空间中的外部页面调度程序。
      所有关于MMU工作的细节都被封装在MMU处理程序中,该程序的代码是与机器相关的,而且操作系统每应用到一个新平台就要被重写一次。缺页中断处理程序是与机器无关的代码,包含大多数分页机制。策略主要由作为用户进程运行的外部页面调度程序所决定。

      策略与机制分离

      当一个进程启动时,需要通知外部页面调度程序以便建立进程页面映射,如果需要的话还要在磁盘上分配后备存储。当进程正在运行时,它可能要把新对象映射到它的地址空间,所以还要再一次通知外部页面调度程序。一 旦进程开始运行,就有可能出现缺页中断。缺页中断处理程序找出需要哪个虚拟页面,并发送一条消息给外部页面调度程序告诉它发生了什么问题。外部页面调度程 序从磁盘中读入所需的页面,把它复制到自己的地址空间的某一位置。然后告诉缺页中断处理程序该页面的位置。缺页中断处理程序从外部页面调度程序的地址空间 中清除该页面的映射,然后请求MMU处理程序把它放到用户地址空间的正确位置,随后就可以重新启动用户进程了。
      这个实现方案没有给出放置页 面置换算法的位置。把它放在外部页面调度程序中比较简单,但会有一些问题。这里有一条原则就是外部页面调度程序无权访问所有页面的R位和M位。这些二进制 位在许多页面置换算法起重要作用。这样就需要有某种机制把该信息传递给外部页面调度程序,或者把页面置换算法放到内核中。在后一种情况下,缺页中断处理程 序会告诉外部页面调度程序它所选择的要淘汰的页面并提供数据,方法是把数据映射到外部页面调度程序的地址空间中或者把它包含到一条消息中。两种方法中,外 部页面调度程序都把数据写到磁盘上。这种实现的主要优势是有更多的模块化代码和更好的适应性。主要缺点是由于多次交叉“用户-内核”边界引 起的额外开销,以及系统模块间消息传递所造成的额外开销。现在看来,这一主题有很多争议,但是随着计算机越来越快,软件越来越复杂,从长远来看,对于大多 数实现,为了获得更高的可靠性而牺牲一些性能也是可以接受的。

    不知博客源头在哪里,作者请私信!

  • 相关阅读:
    caffe常用层: batchNorm层和scale层
    简述configure、pkg-config、pkg_config_path三者的关系
    python删除list中元素的三种方法
    Leetcode 872. Leaf-Similar Trees
    Leetcode 508. Most Frequent Subtree Sum
    Leetcode 572. Subtree of Another Tree
    Leetcode 894. All Possible Full Binary Trees
    Leetcode 814. Binary Tree Pruning
    Leetcode 557. Reverse Words in a String III
    python 多维list声明时的小问题
  • 原文地址:https://www.cnblogs.com/gotodsp/p/4300289.html
Copyright © 2011-2022 走看看