匠心观道

分层与封装(2) 计算机系统的分层结构

2015-03-09  本文已影响0人  两文钱

    之前我们提到了一种分层结构,互联网系统是宏观的上层,而计算机是细节的底层实现。互联网系统是由大量计算机互相连接而成的,大致可以分为数据传递结构、服务提供结构、和终端结构。每个结构实际上都不关心别的结构里的计算机具体是什么型号、如何实现的,他们只需要关注如何处理从网络端口获得的信息包,并将处理好的数据分发给谁。由于这些“封装”的存在,我们可以分层的考虑这些问题,设计微观层面的个体计算机系统时,也不需要考虑宏观层面的互联网系统,只需要按照互联网系统的要求设计好对接的接口就可以了。

    在计算机系统中,也有这样的分层结构,最底层的硬件层包括了可以触碰到的硬盘、CPU、显卡等等硬件;中间是操作系统层,是一个对下可以控制各个硬件,对上可以搭载各种应用的软件系统;上层是应用层,也就是给用户使用的各种软件应用等。对于硬件层来说,他们所要考虑的是给定一个指令如何运转;操作系统层比较复杂,他将硬件抽象成软件的概念,并对他们进行管理,比如硬盘的存储被抽象成了文件管理、CPU的计算被抽象成了程序的进程、网络通信和外部输入输出被抽象了程序可以访问的端口;应用层利用操作系统抽象出来的接口,创作出各种应用供用户使用。

    所以在这样的分层系统中,用户只知道应用是怎么使用的,并不需要知道操作系统是怎么安排应用的;应用只需要知道如何使用操作系统的接口,并不需要知道具体的硬件是怎么运转的。所以永远只有上一层需要知道下一层如何使用,而更上一层对底层是一无所知的。

    这种分层系统可以说是无处不在,比如说CPU进行计算的时候需要数据,数据一般会存储在CPU带的缓存上,缓存的读写速度非常快,但是造价非常贵,所以一般只有几千字节大小;那么对于更大的数据,就需要将内存的数据一点点换给缓存读写;对于更大的数据,就需要从硬盘里将数据一点点换给内存,再换到缓层上。分层的首要条件就是封装,CPU只会找缓存进行读写,不会去操作内存;缓存只会和内存接触,不会直接去找硬盘。
    这个分层系统使得CPU能够很好的平衡数据需求中快速和廉价两个关键。大部分数据可以在较快速的数据设备中完成,而少部分可以花费时间去向慢速且廉价的数据设备请求。

    再比如互联网的经典TCP/IP分层模型,最底层网络接口层提供了设备之间进行直接数据传递的方法;第二层的网络互连层利用网络接口层的方法,选择路径将数据从设备A经过若干中间设备传递到远距离的设备B上;第三层传输层利用第二层的传输手段把大量数据打包,并确认对方能够收到了;第四层应用层利用第三层可靠的传输,来添加各种协议,使得传输的数据变得有意义,能够被应用所使用。

    这种分层模型的优势在于,每一层所需要考虑的事情大大减少了,由于每一层只负责有限的部分,思维强度变低,也可以更可靠的测试。如果没有这种分层模型,软件直接操作数据传输和网络线路。网络断了这种再普通不过的情况,却无法测试;分层之后可以确认一定是中间某一层出现了问题,如果别的软件可以联网,那就是软件的问题;如果家里别的设备可以联网,那应该是设备上的问题;如果电脑拿到别的地方可以联网,那应该网络线路的问题。

一般的软件或者网络服务也会有分层系统:最底层的数据读写层,将数据存储到本地硬盘或者网络存储空间中;中间的服务层,处理业务逻辑,更新现实给用户的页面;和最前端的用户界面,帮助用户完成他们的请求,并显示结果给用户。所以简单来说在网页上发送Email的过程是这样的:用户请求发送Email -> 前段显示Email编辑页面 -> 用户完成编写点击发送 -> 前段将数据打包成请求包发送给服务层 -> 服务层处理逻辑,发送给对方邮箱,保存到数据库 -> 数据层得到请求更新数据库 -> 服务层告诉前段邮件已经保存、发送成功 -> 前端显示给用户。

好处依然是每一层需要考虑的事情大大减少,每一层都被很好的封装,绝对不会多操心别人的一点事情。

上一篇下一篇

猜你喜欢

热点阅读