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

      学习系统调用时,书上提到机制与策略,是一种设计模式,帮助我们理解操作系统的设计。 
      Unix/Linux的接口设计有一句通用的格言“提供机制而不是策略”。

      区别对待机制(mechanism)和策略(policy)是Unix设计中的一大亮点。大部分的编程问题都可以被切割成两个部分:“需要提供什么功能机制怎样实现这些功能策略”。如果程序可以由独立的部分分别完成机制与策略的实现,那么开发软件就更加容易,也更加容易适应不同的需求。 

      开源 --- 展现在我们面前的是数以千计的代码,在那一行行的代码背后,到底蕴藏着怎样的设计思想,高手们曾怎样苦思冥想?在一堆堆的代码面前,有时候,我们很容易迷失曾经进来的入口,而调入符号、变量以及函数堆积而成的沼泽地。 

      操作系统的本质是什么?管理者?亦或服务者?但归根到底,操作系统是一个执行者
      执行用户程序 --- 所谓为用户服务;执行中断 --- 所谓为外设服务;所谓系统调用 --- 所谓解放程序员(姑且说它为广大的程序员服务,因为程序员不再与繁杂的硬件打交道了);执行内核线程 --- 为操作系统自身服务。而这些所有,它们执行的核心,无非是在恰当的时机,让哪个对象(程序、线程、中断服务程序、中断的下半部分、系统调用)占有CPU。换句话说,Unix/Linux抽象出对这些对象的执行机制:
              程序的执行机制 --- 进程  ;
              内核函数的执行机制 --- 线程; 
              中断服务程序的执行机制 --- 中断信号触发;  
              中断下半部的执行机制 --- softirq, tasklet, 工作队列;
              系统调用的执行机制 --- 软中断(int $0x80触发) 
    从机制和策略的角度看问题,也许,你对曾经困惑的问题有豁然开朗之感。

      如果说机制是一种框架,那么,策略就是填充框架的一个个具体的实体。机制提供的是一种开放而宽松的环境,而策略就是在这个环境下赖以生存的生命个体。比如,我们编写的一个程序,fork()以后,就成为一个个进程的生命个体。而操作系统所提供给我们创建、执行以及结束进程的各种原语 --- fork(),exec(),exit()等是统管各种进程的机制。我们所创建进程的死活并不会影响机制本身。

      如此看来,也许我们对原理之困惑有所醒悟。我们任何人在任何时候都可一调用fork()创建n多个进程。这样一个简单的fork()壳,想追根溯源者,剥开这个壳,可以看到其本质。fork()如果出现任何一个小的bug,直接影响到我们任何程序员和任何进程。

      如此看来,也许我们对开发者所承担的角色有所领悟。系统分析员和设计人员任重道远。说到此,设计模式等系列的书,对于有志于从编码走向设计的开发者或许有所启发。

    摘自陈老师的博文:http://www.lupaworld.com/home-space-uid-26540-do-blog-id-204505.html

  • 相关阅读:
    OSG-提示“error reading file e:1.jpg file not handled”
    OSG-加载地球文件报0x00000005错误,提示error reading file simple.earth file not handled
    QT-找开工程后,最上方提示the code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.
    我的书《Unity3D动作游戏开发实战》出版了
    java中无符号类型的第三方库jOOU
    Windows批处理备份mysql数据
    使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A
    Java版本,Java版本MongoDB驱动,驱动与MongoDB数据库,Spring之间的兼容性
    Jrebel本地激活方法
    wget下载指定网站目录下的所有内容
  • 原文地址:https://www.cnblogs.com/gotodsp/p/4300083.html
Copyright © 2011-2022 走看看