计算机系统软件体系结构采用一种层的结构,有人说过一句名言:
"Any problem in computer science can be solved by another layer of indirection."
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。这句话几乎概括了计算机系统软件体系结构的设计要点,整个体系结构从上到下都是按照严格的层次结构设计的。不仅是计算机系统软件整个体系是这样,体系里面的每个组件,比如说操作系统本身,很多应用程序,软件系统甚至很多硬件结构都是按照这种层次结构组织和设计的。
每个层次之间都须要相互通信,既然须要相互通信就必须要有一个通信的协议,我们一般将其称为接口,接口的下面那层是接口的提供者,由它定义接口,接口的上面使用接口实现所需要的功能。除了硬件和应用程序,其他都是所谓的中间层,每个中间层都是对它下面的那层的包装和扩展。
学习C语言的第一个程序
#include <stdio.h>
int main()
{
printf("hello,world!");
}
- 应用程序编程接口: 程序中调用了 printf() 函数
- 运行库:而
#include <stdio.h>
头文件中包含了printf()
的定义
这两个层面是IDE集成的,或者C语言debian系sudo apt-get install gcc
,C++程序sudo apt-get install g++
,其实你如果不是一个编程人员,只是一个用户,你不用这个中间层的,因为当我们下载一个软件的时候下载的是二进制文件,已经编译完成。 - 系统调用接口: 库函数
printf()
本质上是调用了系统调用write()
函数,系统调用往往以软件中断的方式提供,比如Linux
使用0x80号中断作为系统调用接口,Windows
使用0x2E号作为系统调用接口。 - 操作系统内核层面
- 硬件接口
- Hardware
write()
通过层层接口,调用函数,实现终端信息的打印功能.
操作系统内核层对于硬件层来说是硬件接口的使用者,而硬件是接口的定义者,硬件的接口定义决定了操作系统内核,具体来讲就是驱动程序如何操作硬件,如何与硬件进行通信。这种接口往往被叫做硬件规格。硬件的生产厂商负责提供硬件规格,操作系统和驱动程序的开发者通过阅读硬件规格文档所规定的各种接口标准来编写操作系统和驱动程序。 如果你之前经常装机,肯定遇到过wifi选项不显示或者卡logo这类的问题,大多数是因为网卡或者显卡没有相应的驱动程序,所以你装上相应的驱动程序就好了。