关于软件分层设计的一些思考.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于软件分层设计的一些思考 分层设计将软件划分成若干层,每一层只处理一部分问题,通过全部层的协作来完成全体的目标。一个简单的问题通过分解成一系统子问题,这样就有效的降低了每个子问题的规模与简单度。 分层设计带来的好处是: 降低了系统软件的简单度。将一个简单问题通过分解,分而治之。 功能的复用和封装。 计算机言语的进展 机器言语 晚期的软件开发是机器言语,直接使用二进制 0 和 1 表示机器可以识别的指令和数据,看起来像这样:0010000100100011这就是计算机 CPU 独一可以理解的言语。 对人类为说,二进制的程序是不行读的。 汇编言语 为了处理言语可读性的问题,汇编程序诞生了。汇编程序是人类可读的机器代码。它又称为‘符号言语’,使用助记符来代替机器的操作码。 汇编言语是二进制的文本方式,与 CPU 的指令是逐一对应的关系。而我们不同的 CPU 体系结构(比如 PC 的 x86,嵌入式的 ARM)是不同的,面对机器的言语 带来的问题就是:对于不同的 CPU 体系架构,就需要不同的汇编言语。 高级言语 为了处理言语对机器的无关性,高级言语诞生了。一条高级言语通常由若干条机器言语实现的,并且不具有对应性。 高级言语让开发者不需要关注底层 CPU 体系结构与指令,只关注业务即可。 计算机言语的进展就是不断的笼统,只要通过笼统,将一个简单的的系统变成一层层的接口集合,让我们每次只需要考虑关注当前层集合内的规律,而不用去考虑当前层次以上或者以下的简单度,才有可能让我们从简单系统中解放出来,逐渐理解以及构造一个简单系统。 Linux 内核 内核功能层与内核硬件层 操作系统内核简化理解成三大层: 内核接口层 向上对用户态应用程序供应一套接口子集。开发者使用的系统调用 APIs。 内核功能层 这一层完成各种实际的功能,我们晓得 OS 次要担任资源管理,内存,进程这些资源。物理内存如何申请,释放,进程如何调度。具体来说进程管理,内存管理,中缀管理,设备管理。 内核硬件层 分别硬件的相关性,我们晓得一个 OS 可以运转不同的指令集,也就是运转在不同的硬件平台。不管是 ARM 体系结构,还是 x86,选择一个进程调度的算法是可以相同的,需要转变的进程切换相关代码,由于不同的硬件平台的上下文是不同的,CPU 的寄存器也不同。这时候最好的设计是分层,当操作系统运转在不同的硬件平台时,就只需要修改硬件平台相关层代码,实现操作系统的高可移植性。 操作系统有两个关键设计: 内核接口层区分用户态与内核态,来爱护硬件资源受限访问。 内核硬件层分别多种硬件平台相关性。这种分层的架构,极大提升了系统的稳定性和扩展性。 MMU 笼统层 操作系统担任管理物理内存,而用户进程使用虚拟内存。操作系统呈现给用户进程的是连续的虚拟空间,但不肯定是连续的物理空间,由于物理内存被整个 OS 共享。 什么是 MMU 呢?它是硬件,即内存管理单元,它对 CPU 发出的访存地址进行映射与检查,可以让处理器发出的访存地址访问不同的物理内存单元。 假如将计算机上有限的物理内存安排给多个应用程序使用,假如让应用程序直接访问物理内存,假如没有 MMU 这层笼统呢?带来的问题是每个应用程序地址空间不隔离,内存使用率低,程序运转地址也无法固定。 处理的问题:虚拟内存 VA 与物理内存 PA 的映射。 通过在 CPU 与内存之间加入 MMU 笼统层,让 CPU 在运转指令时发出的 VA 虚拟地址通过 MMU 转换后变成 PA 物理地址,然后再去访问物理内存。 MMU 引入带来的好处是: 权限把握。可以对一些虚拟地址进行访问把握,比较代码段为只读,用户程序代可写。 提升内存使用率:物理内存按需申请。fork 子进程的对应的物理空间是能过写时复制才进行真正的物理内存安排。 不同进程之间可以使用相同的虚拟内存地址空间,而进程的物理内存又可以隔离。 系统运转多个进程,所安排的内存之和可以大于实际物理内存大小。 这是我认为最经典,最本质,最受启发的两头笼统层的设计。 CPU 与外设的通信 CPU 访问外设有两种方法: IO 与内存统一编址 IO 与内存的独立编址 外设接口中的 IO 寄存器(即 IO 端口)与主存单元一样看待,每个端口占用一个存储单元的地址,将主存的一部分划分出来用作 IO 的地址空间。 把外设的寄存器当做是一个内存地址,从而 CPU 以类似访问内存相同的方式来操作外设。 对 IO 外设的端口映射到一个物理内存单元地址,在 CPU 与外设之间的‘内存’笼统层,带来好处是访问内存一样去访问外设。 小结: Linux 中的内核硬件层设计、MMU、CPU 与 IO 外设通信设计处处体现了分层/两头层的设计思想。 TCP/IP 网络协议堆栈 从最底层的物理链路层层层向上封装笼统,处理了简单的网络

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档