计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决

系统软件这个概念其实比较模糊,传统意义上一半将用于管理计算机本身的软件称为系统软件,以区别普通的应用程序。系统软件可以分成两块,
  1.  一块是平台性的,比如操作系统内核、驱动程序、运行库和数以千计的系统工具;
  2. 另外一块是用于程序开发的,比如 编译器,链接器,汇编器等开发工具和开发库。

计算机系统软件体系结构采用一种层的结构,有人说过一句名言:

“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决” 

“Any problem  in computer science can be solved by anther layer of indirection.”

 这句话几乎概括了计算机系统软件体系结构的设计要点,整个体系结构从上到下都是按照严格的层次结构设计的,不仅是计算机系统软件整个体系是这样的,体系里面的每个组件比如OS本身,很多应用程序、软件系统甚至很多硬件结构都是按照这种层次的结构组织和设计的。系统软件体系结构中,各种软件的位置如图

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决_第1张图片

  • 每个层次之间都需要相互通信,既然需要通信就必须有一个通信的协议,我们一般将其称为接口(Interface),接口的下面那层是接口的提供者,由它定义接口;
  • 接口的上面那层是接口的使用者,它使用该接口来实现所需要的功能。
  • 在层次体系中,任何一个层都可以被修改或者被替换。
  • 除了硬件和应用程序,其他都是所谓的中间层,每个中间层都是对它下面的那层的包装和扩展。正是这些中间层的存在,使得application 和 hardware 之间保存相对的独立,比如hardware和OS都日新月异地发展,但最初的80836芯片和DOS 设计的软件在最新的Multi-core和Windows Vista 下还是能够运行的,这方面就归功于hardware和OS本身保持了向后兼容性,另一方面不得不归功于这种层次结构的设计方式。

  • 最近开始流行的虚拟机技术更是在hardware和OS之间增加了一层虚拟层,使得一个计算机上可以同时运行多个OS,这也是层次结构带来的好处,在尽可能少改变甚至不改变其他层的情况下,新增加一个层次就可以提供前所未有的功能。
  • 我们的软件体系最上层就是application,比如我们平常使用的 web browser、Email、VideoPlayer,ImageViewer等。从整个层次结构上看,开发工具与应用程序是属于同一个层次的,因为它们都使用一个接口,那就是操作系统应用程序编程接口(Application Programming Interface)。应用程序接口的提供者是 运行库(Runtime library),什么样的运行库提供什么样的API,比如 Linux下的glibc库 提供POSIX 的API; Windows的 运行库提供Windows API,最常见的32bit Windows提供的API 又被称为win32。
  • 运行库 使用OS提供的 系统调用接口(System call Interface),系统调用接口在实现中往往以软中断(Software Interpt)的方式提供,比如Linux使用0x80号中断作为系统调用接口,windows使用0x2e号 中断作为系统调用接口

你可能感兴趣的:(Unix/Linux,kernel)