在设计一个可用的系统时,往往第一步是设计结构。纵观计算机的发展史,横贯计算机科学的不同领域,有三个方法是很重要的,那就是:分层,分级,分块的思想方法。
记得上高中的时候,我们的物理老师老隔就给我们传授动态的测试方法,当时我们设计一个电路,老隔就给我们讲,要想知道设计方案如何,最好的方法就是“让电 流流一流”,现在工作了,终于明白了这是真的,为了说明问题,关键时刻就让“数据流一流”吧。另外说一下策略和机制,机制说明了事情发生的可能性,而策略描述了事物如何发生。
三个方法有个共同点,就是要达到各司其职,高内聚低耦合的目的,最终方便管理,方便升级,方便替换。但是也有不同的地方。
首先,分层是一个纵向的概念,它承接地将一个过程分为了不同的子过程,每个层次使用下层提供的服务,并且对这些服务进行重新组合和过程分发,为上层提供一个统一的接口,从而屏蔽掉下层的异构体,每一层为上一层提供机制,而策略由上一层提供。注意,分层不是功能意义上的,也就是说,如果某个层次缺失或出错的 话,整个过程将失败。作为例子,我们来看一下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的代码,我相信比什么都强!
作为结束,其实还远远没有结束
分享到:
相关推荐
综上所述,本文针对嵌入式GIS系统中矢量数据的存储和管理问题,提出了一种基于“地图分层,层内分块”的数据模型,并结合比例尺融合、要素裁剪分级和矢量数据压缩等技术,有效提高了数据的存储效率和访问速度。...
动力环境集中监控系统的数据处理设计涉及到的关键技术点主要包括分布式数据库、数据复制技术以及分层架构等。在处理网络设备和环境监控数据时,面临的主要挑战包括数据的海量性、分布式特性和实时性要求。下面将详细...
- **分层编码与分块压缩**:根据不同维度和属性进行分级压缩,提高存储效率。 - **字典编码与统计压缩**:利用符号字典、前缀树和概率模型等技术进行压缩。 #### 三、时空数据查询优化 **1. 时空索引优化** - **...
- **垂直分层**:地图数据按不同的细节等级进行分层,类似于Level of Detail (LOD)模型,便于根据不同需求加载不同级别的地图细节。 - **水平分块**:将地图分割成规则的矩形块,每个块称为一个Parcel,这样可以根据...
然后,设计一个智能的请求管理系统,根据地图的缩放级别和用户交互情况,决定请求哪些地图切片或动态服务。同时,利用影像金字塔的特性,预加载相邻层级的切片,以平滑缩放过程。最后,优化网络请求,比如使用HTTP/2...
高光谱数据库的数据组织通常包括影像集合模块、影像金字塔分层模块、影像分幅模块和影像分块模块。影像集合模块负责存储同一比例尺影像的信息;影像金字塔模块用于影像的分级管理和快速访问;影像分幅模块提供原始...
在数据存储和检索方面,考虑到PDA的特性,对矢量数据采用分块分级的存储结构,并进行图层比例控制显示,有效降低了数据冗余度,提高了数据的使用效率和检索速度。例如,通过类型分层的搜索直接定位到特定记录,再...