目录
一. 冯诺依曼体系结构
1.1 什么是冯诺依曼体系结构
冯诺依曼体系结构是由美国数学家冯·诺依曼于1946年提出的一种计算机程序存储体系结构,由于其在实际应用中优越的综合性能,被现在绝大部分的电脑、服务器等计算机设备接受。
冯诺依曼体系五大组件:输入设备、存储器、输出设备、运算器以及控制器,其中运算器和控制器合成中央处理器,也就是我们常说的CPU。
- 输入设备:键盘、话筒、摄像头、磁盘、网卡等。
- 输出设备:显示屏、音响、磁盘、网卡等。
- 存储器:注意冯诺依曼体系中的存储器指的是内存而非磁盘。
- 运算器:进行算术运算和逻辑运算。
- 控制器:用于响应外部事件、协调已就绪的外部的执行,比如:将磁盘中的数据拷贝的内存。
遵循冯诺依曼体系结构的计算机的每个硬件通过“线”来进行连接,线,又分为系统总线和IO总线,其中中央处理器(CPU)和内存之间通过系统总线连接,外部设备和内存之间通过IO总线连接。
1.2 为什么冯诺依曼体系结构这样设计
站在数据的角度,我们认为,冯诺依曼体系中的外部设备和内存及中央处理器遵循下面两条原则:
- 如果CPU要读取数据,那么要将外部设备的的数据先加载到内存中再进行处理,CPU不与外部设备直接打交道。(只限制在数据传输层面)。
- 外部设备之和内存直接打交道,不予CPU直接打交道。
提问:为什么中央处理器不是直接处理外部设备中的数据,而是要先将外部设备中的数据加载到内存再进行处理?
这是从提高运算效率的角度来考虑的,不同硬件设备的数据存取和运算效率遵循下面的规则:
- 硬件效率:CPU > 内存 > 磁盘 > 光盘 > 磁带
上面不同设备之间读取数据的效率差别,为10^3量级,差别巨大。CPU直接处理外部设备的数据,虽然从理论上来讲是可行的,但是,由于CPU和外部设备之间的效率差别太大,因此,加入内存作为中间介质,将要处理的外部设备中的数据预先加载到内存之中,CPU从内存中读取数据而非从外部设备中直接读取,能很大程度上提高效率。
这是又有一个问题,为什么不直接将外部设备的数据加载到CPU的寄存器中处理,即使这样效率会更高?
这是从设备造价的角度来考虑的,不同硬件设备的制造成本遵循下面的规则:
- 制造成本:CPU > 内存 > 磁盘 > 光盘 > 磁带
我们发现,效率越高的硬件,成本越高。做大CPU的寄存器或内存,从技术角度来说,是没有问题,但这回造成设备成本的大幅度上升,并且市场规律早已表明,一款被广泛应用的产品一定是价格便宜、质量有保障的,使用内存作为中间介质,就是在效率(质量)和价格之间求得的平衡。
1.3 冯诺依曼体系结构与现实问题的结合
提问:在微信和QQ的信息发送中,信息从一个终端发送到另一个终端,要经历哪些过程?
假设终端A发送消息,终端B接收消息,那么根据1.2章节中的提出的冯诺依曼体系中硬件数据交互的两条原则,信息发送的过程为:
- 终端A的输入设备(键盘)输入数据信息,并且读取到终端A的内存。
- 终端A的CPU从内存中读取数据,对读取到的数据进行处理,然后发送给输出设备(网卡)。
- 通过网络,将终端A输出的信息传输到终端B的输入设备(网卡),并加载到内存。
- 终端B的CPU对接收到的消息进行处理,发送给输出设备(显示器)显示出来。
今后,凡是涉及到计算机设备中和设备之间的数据传输流程分析问题,都可以结合冯诺依曼体系进行分析。
二. 操作系统的工作方式
2.1 操作系统的功能
操作系统(OS)的概念:操作系统是一款进行软硬件资源管理的软件。
工作方式:通过对下将软硬件资源进行合理的管理,来达到对上为用户提供良好的(稳定、安全、快速)的使用环境的目的。
操作系统主要进行内存管理、进程管理、文件管理和驱动管理。
操作系统假设所有的用户都是不可信任的,因此不会运行用户直接访问操作系统的内部资源,而是以对外提供接口的方式供用户来访问,用户还可以通过图形化界面、指令等方式对系统接口进行进一步的封装,以方便产品的开发。
Linux是一款使用C语言编写的、开源的操作系统。
2.2 操作系统对下进行软硬件管理的方式
操作系统对下层软硬件的管理,本质上是对数据的管理。
当操作系统拿到信息(数据)后,先对信息数据进行进行描述,在Liunx下一般采用结构体的方式描述信息,描述完信息后,再对信息利用各种数据结构和算法进行组织后再进行管理。
操作系统进行资源管理的方式可以总结为6个字:先描述、后组织。
操作系统并不与底层硬件直接打交道,但是却可以实现对底层硬件的管理,这是因为硬件驱动充当了操作系统决策的执行者,来驱使硬件完成相应操作,同时硬件驱动获取底层硬件的相关数据,让操作系统执行相应的决策。
为了便于理解,这里以学校的例子进行类比。在学校中,一般学生没有机会和校长直接打交道,但是校长却可以实现对学生的管理,这就是由于辅导员、老师等充当了中间角色,辅导员老师等收集到了学生的数据,根据数据做出相应的管理决策,然后下发到每位老师,老师让学生去执行决策,老师充当中间人,使校长能够管理学生。
我们假设学校就是一个系统,那么校长就类似于计算机中的操作系统,学生类似于底层硬件,辅导员导师等类似于硬件驱动。
管理,本质上是对数据的管理,操作系统(决策者)只需要拿到底层硬件的核心数据,就能够实现对底层硬件的管理。
再继续举例,假设校长希望拿到全校成绩前3的学生进行公开表彰,但是学生数量庞大,无法拿到数据就直接管理决策。这时就需要一些数据结构和算法进行辅助,可以将每个学生的各种信息用结构体存储描述起来,用顺序表、链表等数据结构对学生的信息(姓名、年龄、成绩、学号等)进行组织,这就相当于先描述、后组织的过程。通过快速排序、归并排序的排序算法,按照成绩从高到低的顺序进行排序,这样就拿取到了成绩最高的前几名学生。
结论:操作系统的内部,一定存在大量的数据结构和算法,用于对底层软硬件数据的描述、组织和管理,以便操作系统进行决策。
2.3 操作系统对上提供使用环境的方式
根据图2.1,操作系统并不允许用户直接访问其内部资源,而是通过对外提供接口的方式来让用户实现对操作系统内部资源的访问,同时,通过将系统接口利用图形化界面和命令行等方式封装后,可以让用户更加方便直观的调用系统接口。
- 系统接口:系统提供的对内部资源访问的接口,类似于C++类提供的接口函数。
- 用户调用接口:对系统接口的进一步封装,如图形化界面、C语言的printf等内置函数,底层都调用了系统接口。
这里使用银行体系来举例,辅助理解操作系统对上提供使用环境的方法。我们去银行办理存取款等相关业务时,并不能直接进入银行的内部,而是要通过银行的对外服务窗口来办理业务,由业务员负责执行具体的操作。在办理业务的过程中,我们无法得知具体的办理过程和进行了那些操作,我们只需要准备好相关的材料,就可以去窗口办理。
这里的银行窗口就好比操作系统的系统调用接口,作为客户,不需要知道这个体系的内部细节,就能完成相关操作。
继续上面的例子,对于年轻人,直接去银行窗口办理业务没有什么难度,他们会明确知道办理业务应当准备的材料及要预先进行的工作。但是,对于一些老年人,他们并不知道怎样在窗口办理业务,为此,银行在业务大厅内往往设有引导服务人员,老年人只需要告知引导人员要办理那些业务,引导人员就会辅助他们整理好相关材料,最后由引导员去窗口完成相关业务的办理。
这里引导人员去窗口帮助老年人办理业务的过程,就相当于通过用户接口调用系统接口,其本质为对系统接口的再一次封装。这里的引导员可以类比为Window下的图形化界面、Linux下的命令行、C/C++的一些库函数等,它们都封装了系统的接口函数。
三. 总结
- 现代的计算机设备的设计与制造准则,基本都遵循冯诺依曼体系结构,冯诺依曼体系有输入设备、存储器、输出设备、运算器和控制器五大组件,这是综合产品性能和成本的设计模式,揭示了计算机设备中的数据读取和控制的流程,凡是涉及到计算机设备中和设备之间的数据传输流程分析问题,都可以结合冯诺依曼体系进行分析。
- 操作系统是一款进行软硬件资源管理的软件,管理本质上是对数据的管理,遵循先描述、后组织的管理方法,操作系统内部一定有大量的数据结构和算法。
- 操作系统通过硬件驱动为中间人,获取底层数据,实现对底层资源的管理。
- 操作系统不允许用户直接访问其内部,用户可以通过用户接口和系统接口访问操作系统内部资源,用户接口是对系统接口的封装。