目录
一、冯 • 诺依曼体系结构
1.1 冯 • 诺依曼体系结构推导
1.2 内存提高效率
1.3 具体案例理解冯 • 诺依曼体系结构
1.4 其他认识
二、操作系统
2.1 操作系统概念
2.2 操作系统的上下层
2.3 管理理念:先描述,再组织
一、冯 • 诺依曼体系结构
1.1 冯 • 诺依曼体系结构推导
计算机的作用就是为了解决问题。首先需要将数据或问题输入到计算机当中,所以计算机必须有输入设备。计算机解决完问题后还需要将计算结果输出显示出来,所以计算机必须有输出设备。要将问题解决就需要用到中央处理器,其中运算器负责算术运算与逻辑运算,控制器控制具体的流程。
对应到C语言当中,算术运算就是了完成一系列的加减乘除,而逻辑运算就对应于一系列的逻辑与、逻辑或,控制功能就对应于C语言当中的判断、循环以及各个函数之间的跳转等等。
那么好似没有存储器(内存)这个结构也是可以的,如上图所示。但实际上并不是!!!
输入设备和输出设备相对于中央处理器来说是非常慢的,而根据木桶原理,那么最终整个体系所呈现出来的速度将会是很慢的。
于是就不让输入设备和输出设备直接与CPU进行交互,而在这中间加入了内存,最终形成了冯 • 诺依曼体系结构。
内存比外设速度快许多,但比又CPU慢。在冯 • 诺依曼体系结构中,内存就处于慢设备和快设备之间,能够起到缓冲作用。
冯 • 诺依曼体系结构运行流程: 用户输入的数据先存储到内存当中,CPU读取数据的时候就直接从内存中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。
1.2 内存提高效率
但先将输入的数据交给内存,再由内存将数据交给CPU,这个过程真的比CPU直接从外设中获取数据更快吗?
内存具有数据存储的能力。这也使得软件有了发挥的空间,譬如操作系统可以将可能使用的数据预先加载到内存,以此来提高效率。
同时CPU处理数据和内存加载数据是可以同时进行的。根据统计学原理,当某个数据被访问时,那么下一次有极大可能访问其周围的数据。所以当CPU处理某一数据时,内存可以将该数据周围的数据加载进来,这也使得计算机的效率更高。
输出数据时也是一样,CPU处理完数据后直接将数据放到内存当中,当输出设备需要时再从内存中获取即可,此时CPU就可处理其他的事务(不需要等待外设处理),从而提高效率。这也就有了我们平常所说的缓冲区的概念。
1.3 具体案例理解冯 • 诺依曼体系结构
分析两台电脑使用QQ发送信息的过程,忽略网络处理的细节从而简化模型
通过键盘输入信息并将消息加载到内存后,CPU从内存获取到消息后对消息进行各种处理,然后再将其写回内存,此时本地网卡就可以从内存获取已处理好的消息,然后在网络当中经过一系列处理,之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。
1.4 其他认识
◆ 常见输入设备:键盘、鼠标、网卡、硬盘、话筒、摄像头、扫描仪等
常见输出设备:显示器、音响、网卡、硬盘、打印机等
注意: 同种设备在不同场景下可能属于输入设备,也可能属于输入设备
◆ 站在数据层面上看,CPU只和内存打交道,外设也只和内存打交道。这也是为什么程序运行之前必须先加载到内存的原因。因为可执行程序(文件)是在硬盘上的,而CPU只能从内存中获取数据,所以必须先将硬盘上的数据加载到内存(即必须先将程序加载到内存)。
◆ CPU当中有寄存器,但寄存器不仅仅在CPU中存在,在其他外设当中也是有寄存器的。例如,当我们敲击键盘时,键盘先将获取到的内容存储在寄存器中,然后再通过寄存器将数据写入内存中。
◆ 在物理层面上,各个硬件单元之间是通过总线连接的,外设与内存之间的总线为IO总线,内存与CPU之间的总线为系统总线
二、操作系统
2.1 操作系统概念
操作系统的定位: 操作系统其实就是一款进行软硬件资源管理的软件。
设计操作系统的目的:
1. 与硬件进行交互,管理所有的软硬件资源。
2. 为用户程序(应用程序)提供一个良好的执行环境。
2.2 操作系统的上下层
其实可以将将整个系统类比为一个银行系统进行理解。
底层硬件就是银行内的基础设施,如座椅、电脑、保险箱等。这些物品平时都是员工进行使用,使用这些硬件的员工我们就可以看作是驱动程序。
在一个银行系统里员工也是需要被管理的,管理员工的便是银行行长(操作系统)。而系统调用接口就像是银行提供的一个个窗口,可以供外面的顾客使用,顾客也必须通过系统调用接口才能访问内部,而不能直接操作内核、硬件等。
但在现实情况中,有些用户并不会使用窗口(第一次来银行的客户),这时外面的工作人员就会询问你要办理什么业务,这些工作人员就可以看作是用户调用接口。工作人员了解到你要办什么业务后,会告诉你具体告诉你要如何领票排队、具体去哪个窗口。所以用户操作接口内部还是会调用系统调用接口的。
我们可以发现操作系统并不直接与硬件交互,就像行长不会修电脑。但是为什么要设计成这样呢?
譬如,若操作系统自己来完成键盘的读取操作,那么只要键盘读取方式发生了改变,那么操作系统的内核源代码就需要进行重新编写,这对操作系统来说维护成本太高了。
于是在操作系统与底层硬件之间增加了一层驱动层,驱动层的主要工作就是单独去控制底层硬件。例如,键盘有键盘驱动,网卡有网卡驱动,硬盘有硬盘驱动,磁盘有磁盘驱动。驱动简单来说就是去访问某个硬件,访问这个硬件的读、写以及硬件当前的状态等等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关的模块进行开发的(例如网卡)。
此时操作系统就只需关心何时读取数据,而不用关心数据是如何读取的了,也就是完成了操作系统与硬件之间的解耦。
2.3 管理理念:先描述,再组织
操作系统具体是如何管理的,我们今天先不谈,先谈谈操作系统的管理理念: 先描述,再组织
以校园中的管理举例,校园中可以大致分为三类人: 学生(被管理者)、老师(执行者)、校长(决策者)
在校园中学生几乎是不会看见校长的(操作系统不直接与硬件交互),他只进行决策。可是他不与学生交互,是如何管理学生的呢?
譬如校长想选出三名学生代表在元旦晚会上发表讲话,就让老师将成绩单拿给他,校长从中选出了成绩前三名的学生并让老师告诉这三名学生。在这个过程中,校长并没有与学生交互却管理到了学生,就是根据数据进行的管理。
实际上,学校将我们每个学生的各种信息都进行了管理,基本信息、成绩信息以及健康信息等等。每一套信息就描述了一名学生,校长通过对这些信息的管理就能做到对学生的管理。当学生的数量较多时,校长可以将全部学生的信息组织起来(链表、顺序表、树等)。此时校长对各个学生的管理,实际上就是对数据结构的增删查改。