机制与策略

学习linux驱动编程的时候接触到了一个机制和策略的概念,下面我也来理解这个概念。 Unix/Linux的接口设计有一句通用的格言“提供机制而不是策略”? 区别对待机制(mechanism)和策略(policy)是Unix设计中的一大亮点。大部分的编程问题都可以被切割成两个部分:“ 需要提供什么功能(机制)”和“怎样实现这些功能(策略) ”。如果程序可以由独立的部分分别完成机制与策略的实现,那么开发软件就更加容易,也更加容易适应不同的需求,这就有一点类似接口和实现的概念,第一次我理解的时候,还有一点像,但后来我发现还是有很大的区别:机制和策略是依据功能来区分的,机制是需要提供什么功能,这个功能是最小实现的,而接口只是单纯的接口,没有什么的实现,只是一种抽象。
    操作系统的本质是什么?管理者?亦或服务者?但归根到底,操作系统是一个执行者
    执行用户程序--所谓为用户服务;执行中断--所谓为外设服务;所谓系统调用--所谓解放程序员(姑且说它为广大的程序员服务,因为程序员不再与繁杂的硬件打交道了);执行内核线程--为操作系统自身服务。而这些所有,它们执行的核心,无非是在恰当的时机,让哪个对象(程序、线程、中断服务程序、中断的下半部分、系统调用)占有CPU。换句话说,Unix/Linux抽象出对这些对象的执行机制:
        程序的执行机制  --  进程  ;
        内核函数的执行机制  --  线程; 
        中断服务程序的执行机制  --  中断信号触发;  
        中断下半部的执行机制  --  softirq, tasklet, 工作队列;
        系统调用的执行机制  --  软中断(int $0x80触发) 

   从机制和策略的角度看问题,也许,你对曾经困惑的问题有豁然开朗之感,其实上面的这么多东西的理解更像是砖和房子类似,机制更像是砖。而策略更像房子。
   如果说机制是一种框架,那么,策略就是填充框架的一个个具体的实体。机制提供的是一种开放而宽松的环境,而策略就是在这个环境下赖以生存的生命个体。比如,我们编写的一个程序,fork()以后,就成为一个个进程的生命个体。而操作系统所提供给我们创建、执行以及结束进程的各种原语--fork(),exec(),exit()等是统管各种进程的机制。我们所创建进程的死活并不会影响机制本身。
   
如此看来,也许我们对原理之困惑有所醒悟。我们任何人在任何时候都可一调用fork()创建n多个进程。这样一个简单的fork()壳,想追根溯源者,剥开这个壳,可以看到其本质。fork()如果出现任何一个小的bug,直接影响到我们任何程序员和任何进程。

   如此看来,我们在设计的时候,更应该要提供一种最基本的原子操作(机制),一种没有逻辑,没有策略的操作,这样用户按自己的策略组织功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值