机制与策略

来源:互联网 发布:php动态网页设计 编辑:程序博客网 时间:2024/06/04 19:02

转自陈老师的博文:http://www.lupaworld.com/home-space-uid-26540-do-blog-id-204505.html
区别对待机制(mechanism)和策略(policy)是Unix设计中的一大亮点。

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

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

转自宋宝华老师 linux设备驱动开发详解

在Richard Gooch和Greg Kroah-Hartman的争论中,
Greg Kroah-Hartman使用的理论依据就在于 policy(策略)不能位于内核空间。
Linux 设计中强调的一个基本观点是机制和策略的分离。
机制是做某样事情的固定的步奏、方法,而策略就是每一个步奏所采取的不同方式。
机制是相对固定的,而每个步奏采用的策略是不固定的。
机制是稳定的,而策略则是灵活的,
因此,在 Linux内核中,不应该实现策略。
Richard Gooch认为,属于策略的东西应该被移到用户空间。
这就是为什么 devfs 位于内核空间,而 udev 确要移到用户空间的原因

下面举一个通俗的例子来理解udev设计的出发点。
以谈恋爱为例,Greg Kroah-Hartman认为,可以让内核提供谈恋爱的机制,
但是不能在内核空间限制跟谁谈恋爱,不能把谈恋爱的策略放在内核空间。
因为恋爱是自由的,用户应该可以在用户空间中实现“萝卜白菜,各有所爱”的理想,可
以根据对方的外貌、籍贯、性格等自由选择。
对应devfs而言:
第1个相亲的女孩被命名为/dev/girl0,
第 2 个相亲的女孩被命名为/dev/girl1,依此类推。
而在用户空间实现的 udev 则可以使得用户实现这样的自由:
不管你中意的女孩第几个来,只要它与你定义的规则符合,都命名为/dev/mygirl!