机制与策略

  学习系统调用时,书上提到机制与策略,是一种设计模式,帮助我们理解操作系统的设计。 
  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

时间: 2024-10-11 03:36:21

机制与策略的相关文章

驱动思想之机制和策略

驱动程序的角色 作为一个程序员, 你能够对你的驱动作出你自己的选择, 并且在所需的编程时间和结果的灵活性之间, 选择一个可接受的平衡. 尽管说一个驱动是"灵活"的, 听起来有些奇怪, 但是我们喜欢这个字眼, 因为它强调了一个驱动程序的角色是提供机制, 而不是策略. 机制和策略的区分是其中一个在 Unix 设计背后的最好观念. 大部分的编程问题其实可以划分为两部分:" 提供什么能力"(机制) 和 "如何使用这些能力"(策略). 如果这两方面由程序的

开源力量公开课第52期从机制与策略探究linux内核设

%E5%BA%94%E7%94%A8%E7%BA%A7%E4%BA%A7%E5%93%81%E5%BC%80%E5%8F%91%E5%B9%B3%E5%8F%B0apdplat231%E6%BC%94%E7%A4%BA%E7%89%88%E6%9C%AC%E6%8F%90%E4%BE%9B%E4%B8%8B%E8%BD%BD http://www.zcool.com.cn/collection/ZMTY4ODU2NzI=.html http://www.zcool.com.cn/collecti

策略与机制分离

系统设计 经验交流 2013-04-18策略与机制相分离的本质是什么 分层逻辑策略是针对问题域问题解决得逻辑描述.是设计.是形而上的.机制是对策略的实现,可以有多种方法,不同的机制可以实现同样的策略.是形而下的.软件是策略,硬件是机制.授权是策略,访问控制是机制.命令是策略,实施是机制.宏观是策略,微观是机制.战略是策略,战术是机制案例如:在控制系统复杂度的一种重要方法就是把策略从机制中分离出来.通过使大多数存储管理器作为用户级进程运行,就可以把该原则应用到存储管理中.在Mach(Young 等

面向海量服务的设计原则和策略总结

原文:http://ayufox.iteye.com/blog/676416 互联网服务的特点就是面向海量级的用户,面向海量级的用户如何提供稳定的服务呢?这里,对这几年的一些经验积累和平时接触的一些理念做一个总结.       一.原则       1.Web服务的CAP原理       CAP指的是三个要素:一致性(Consistency).可用性(Availability).分区容忍性(Partition tolerance).CAP原理指的是这三个要素最多只能同时实现两点,不可能三者兼顾,

高性能服务器架构(一):缓冲策略

原文链接:https://mp.weixin.qq.com/s?__biz=MzA5ODExMTkwMA==&mid=402675187&idx=1&sn=d240f6d1430b86bc007c8e79d3200e08&scene=4#wechat_redirect 在服务器端程序开发领域,性能问题一直是备受关注的重点.业界有大量的框架.组件.类库都是以性能为卖点而广为人知.然而,服务器端程序在性能问题上应该有何种基本思路,这个却很少被这些项目的文档提及.本文正式希望介绍

1、设计模式之策略模式

设计模式的一句话 :过分设计是一种罪过,要根据项目实事求是,没有任何一种设计是一步到位,很多功能都是根据反馈进行改善. 1.背景:在实际开发中,我们常常遇见实现某种业务功能时,有许多不同实现方式,使用者可以任意选择其中的一种方式. 例如,在排序某个序列数据时,我们可以选择冒泡排序.快速排序.插入排序.堆排序等等.我们在开发过程中,通常会选择 将不同的算法以硬编码的方式封装到一个类当中,当我们需要添加新的算法时,会去修改这个类,修改某个算法时也会修改这个类. 这样,每次改动都涉及到其他算法也要发布

读书笔记: 博弈论导论 - 14 - 不完整信息的静态博弈 机制设计

读书笔记: 博弈论导论 - 14 - 不完整信息的静态博弈 机制设计 机制设计(Mechanism Design) 本文是Game Theory An Introduction (by Steven Tadelis) 的学习笔记. 机制设计的概念 机制设计的目标是设计一个可以达到期望收益的博弈. 由于这是根据博弈结果来推导博弈的形式,也被称为反向博弈论(reverse game theory). 这个理论明显在经济和政治方面有很多用途. 我们假象这样一个例子: 某个政府需要设计一个关于化工厂的环

Redis的持久化机制包括RBD和AOF两种,对于这两种持久化方式各有优势

RDB机制的策略 RDB持久化是指在指定的时间间隔内将内存中的数据和操作通过快照的方式保存到redis bin目录下的一个默认名为 dump.rdb的文件,可以通过配置设置自动的快照持久化的方式,我们可以配置redis在n秒内进行快照的时间,如果超过这个时间节点,将会自动执行快照操作.虽然这种方式方便快捷,但是无法保证数据的绝对安全可靠,如果服务器在非备份时间跨度内发生了故障,无法做到对当前状态的实时保存,导致数据丢失.而且每次保存 RDB文件时, Redis都需要 fork()出一个子进程,由

k8s的调度器架构和策略

调度器功能 默认调度器的主要职责,就是为一个新创建出来的Pod寻找一个最合适的节点(Node) 调度器对一个 Pod 调度成功,实际上就是将它的 spec.nodeName 字段填上调度结果的节点名字 预选节点 从集群所有的节点中,根据调度算法挑选出所有可以运行该 Pod 的节点默认调度器会首先调用一组叫作 Predicate 的调度算法,来检查每个Node 优选节点 从预选的结果中,再根据调度算法挑选一个最符合条件的节点作为最终结果.再调用一组叫作 Priority 的调度算法,来给上一步得到