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

  • 相关阅读:
    伪多项式时间 Pseudo-polynomial time
    Aho-Corasick算法
    写给十八岁以下的你
    网络流算法
    Java static关键字
    带有负权边的最短路径问题
    Miller_Rabin(米勒拉宾)素数测试
    关于同余与模运算的总结
    UVa1585
    UVa修改版02
  • 原文地址:https://www.cnblogs.com/gotodsp/p/4300083.html
Copyright © 2011-2022 走看看