在设计一个可用的系统时,往往第一步是设计结构。纵观计算机的发展史,横贯计算机科学的不同领域,有三个方法是很重要的,那就是:分层,分级,分块的思想方法。
记得上高中的时候,我们的物理老师老隔就给我们传授动态的测试方法,当时我们设计一个电路,老隔就给我们讲,要想知道设计方案如何,最好的方法就是“让电 流流一流”,现在工作了,终于明白了这是真的,为了说明问题,关键时刻就让“数据流一流”吧。另外说一下策略和机制,机制说明了事情发生的可能性,而策略描述了事物如何发生。
三个方法有个共同点,就是要达到各司其职,高内聚低耦合的目的,最终方便管理,方便升级,方便替换。但是也有不同的地方。
首先,分层是一个纵向的概念,它承接地将一个过程分为了不同的子过程,每个层次使用下层提供的服务,并且对这些服务进行重新组合和过程分发,为上层提供一个统一的接口,从而屏蔽掉下层的异构体,每一层为上一层提供机制,而策略由上一层提供。注意,分层不是功能意义上的,也就是说,如果某个层次缺失或出错的 话,整个过程将失败。作为例子,我们来看一下TCP/IP模型和现代宏内核操作系统模型。
在TCP/IP模型中,协议族把一个传输过程的路径分为5个层次,分别为物理层,链路层,网络层,传输层,网络层,从前到后,前面的为后面的屏蔽更前面 的,为后面提供传输机制和统一的接口,数据发送时从后到前经过每个层次都要打标记,策略通过填写协议字段来注册,接收是个相反的过程。如果说某一层比如网络层出错了,那么数据流就会在该层断裂,无法继续传输下去了。这么个设计方法很好,比如应用程序员只用写好应用程序并且提供好具体的策略(比如是tcp还 是udp,优先级情况等等)就可以了,同样的,协议栈实现者也不用管底层是铜线还是光纤,网络层实现者不用管下面是X.25还是以太网,而只需要提供策略 并调用下层的接口就可以了。
另外一个例子,宏内核操作系统,但为什么是宏内核操作系统而不提微内核呢,其实微内核恰恰是我们讨论的另一个问题的例子--分块。作为宏内核系统,系统本 身就是一个分层的大结构,应用程序进行系统调用,比如write,调用sys_write,然后数据到了系统调用层,接着就到了虚拟文件系统层,实际上虚 拟文件系统也是一个分层结构,为了向上提供一个统一的文件操作接口,再往下到了设备无关驱动(gendisk)层,然后到达硬件驱动,最终写入硬件,一层 一层往下,下层提供了机制使得上层的策略得以实施。作为一个补充,用户程序库的实现也是这个道理,它屏蔽了不同操作系统的实现细节,提供了用户操作的基本机制,而最终的策略都是应用程序员通过代码传往下层的。
分层的思想很博大精深,远远不止上面这些,但重点基本都说到了。机制和策略的思想和分层的想法实际上是两个独立的思想,我觉得事实上可以这么干,就将它们结合了。
现在说一下分级的思想,它在本质上也是一个纵向的概念,也是将一个过程分为不同的子过程,但是它却不是承接的,也就是说每个过程都是独立的,可有可无的,这就是全部的机制,具体策略就看什么应用,怎么配置,以及怎么实施了。作为例子我就说一下linux的流量控制系统和solaris的调度类。
linux的流控做的真的不错,它将流控分为了3个要素,一个是排队规则,一个是过滤器,一个是类,其中的类中可以实现新的排队规则,然后是过滤器,依次 类推,这就使得一个要素按照尺度和当前上下文情况实现多重受控,比如说可以设计一个设备相关的调度器,一个设备无关的调度器,后者规定入队包的个数而不管具体属于哪个设备,而前者在设备间竞争或协作,作为更现实的例子,考虑县里给了本县100个生育指标,而本县有10个村,县里只给了100个,100个指标怎么在村里分配是县里的决策,比如王村最优先给50个,霍家庄给15个...,但是王村的50个指标怎么在村内分配,县里就不管了,而交给了村支部,这是一个现实中分级调度的一个例子。
现在考虑一下solaris的调度类,实际上理解了上面那个县里发生育指标的例子后就不用看了,道理是一样的。线程先按优先级分到特定调度类里,然后按照调度类的规则进行调度(为了支持容器和区域,好几个调度类的全局优先级是重合的,这里仅讲基本思想,应用请查文档),现在linux的新内核也支持调度类了。
好了,最后一个是分块,所谓分块就是将不同功能区分开来,独立成模块,这个是纯粹策略意义上的概念,因为没有什么统一机制可言,怎么分块全看个人,人就是机制,而且分块比分层和分级更加抽象。作为例子,考虑一下微内核操作系统和面向对象系统。
微内核的内核仅仅提供最基本的机制,而所有策略和非最重要机制都留给进程模块,也就是说,宏内核是像栈一样的一摞子的话,微内核就是把这一摞子竖起来的的一排。面向对象的理论也是这样,当然它更复杂,涉及到了系统设计中的另外的概念,比如抽象,封装之类的,可是那只是过程,作为抽象封装的结果,一个模块建 立了,它是高度独立内聚的,只能通过消息传递来相互通信。
这三个思想就是这么回事,如果读一下linux和minix的代码,我相信比什么都强!
作为结束,其实还远远没有结束
分享到:
相关推荐
Java面向对象程序设计-分层开发 Java面向对象程序设计中,分层开发是一种软件开发方法,它将整个项目划分为多个层次,每个层次负责特定的功能,从而提高了软件的可维护性、可扩展性和可重用性。本文将对分层开发的...
1、实现功能:对新闻内容和新闻类别实现增、删、改、查的管理 2、.实现技术:jsp、javascript.脚本语言、JSTL标签、JDBC数据库连接技 术 、分页技术。 3、实现模式:MVC分层模式、工厂模式
首先,系统设计的关键在于对学生进行准确的能力评估。这通常包括入学测试、平时成绩分析以及学习行为追踪等多种方式,以全面了解每个学生的知识基础和学习风格。通过大数据分析,系统可以将学生分入不同的学习层次,...
这种分层设计有助于将复杂的系统分解为更小、更易管理的部分,便于团队协作和系统维护。 在电力电网产品的开发中,机房机柜是关键基础设施,它们通常容纳各种服务器、网络设备、电源分配单元(PDU)以及其他支持...
湖北省-区划-水系-路网(分层图),可用在PPT、WORD、EXCEL中
行业-电子政务-具有导电覆层的分层加热器系统.zip
本施工组织设计着重于混凝土的分层分块布置,这是为了确保混凝土浇筑的质量、安全和效率。以下是对这个主题的详细阐述: 混凝土施工组织设计是一个全面的计划,它包括了从混凝土的生产、运输、浇筑到养护的全过程...
在《局部分层装配式钢结构低层住宅系统》这份文档中,可能会详细阐述以上各个方面的理论知识、设计原则、实例分析以及施工技术要点,为行业从业者提供宝贵的参考信息。通过深入学习和理解,我们可以更好地掌握这种...
这些方法在数据分析、机器学习、控制系统设计等领域都有广泛应用。 2. **奇异值分解(Singular Value Decomposition, SVD)**:SVD是矩阵分解的一种,对于任何非零矩阵A,可以表示为A=UΣV^T,其中U和V是正交矩阵,...
2. **分层棒的设计**:详细解释分层棒的结构,如材质选择、尺寸设定、形状设计等,以及这些设计如何影响浆车的工作效率。 3. **工作原理**:通过图文并茂的方式阐述分层棒在浆车运作中的作用,包括如何与水流互动,...
6. **软件工具**:专门设计用于处理分层媒体的软件,如Adobe After Effects或Photoshop,提供了丰富的功能来编辑、合成和管理这些层次。 在这个压缩包内的“处理分层媒体数据的方法和设备.pdf”文件,可能会详细...
图4TD-SCDMA物理信道的分层结构.pdf
标题中的“行业文档-设计装置-一种新型可分层使用的铁质铅笔盒”表明了这份资料主要关注的是产品设计领域,特别是针对一种创新的铁质铅笔盒的设计。这种铅笔盒的独特之处在于它的可分层使用特性,这可能意味着它具有...
ios7-gui用户界面图形分层psd文件
5 、系统详细设计--综合布线系统设计、无线wifi覆盖系统、程控交换机系统 6 、机房工程--机房位置及装修、 机房电源系统、防雷接地系统、机房管理以及环境监控 7 、网络设备清单--交换机选型、路由器选型、服务器...
软件结构设计--分层系统风格讲义.pptx
为改善算法的全局探索能力,依据收敛速度动态分配每个粒子的变异概率, 设计了一种自适应跳离算子;为均衡算法的局部开发和全局探索能力, 给出了一种分层式粒子更新公式.最后,将所提算法用于多个典型测试问题, 并与三种...
4. 散热设计:良好的散热系统可以避免局部过热,维持灯内部温度的均匀,从而减少垂直分层的形成。 5. 添加掺杂剂:在气体中添加微量的掺杂剂,可以改变气体的导电性能,有助于改善电流分布。 四、设计装置的考虑...
企业战略-企业群落内企业分层及其运行机制探讨.doc