冯诺依曼体系结构和操作系统
一、冯诺依曼体系结构
冯诺依曼体系结构的推导
首先,大家用电脑必须要用输入设备和输出设备。
就比如说,我们必须要有键盘和屏幕,否则我们就没有办法使用计算机。
计算机会处理我们输入的数据,因此必须要有运算的设备来进行逻辑计算和算数运算。
因此,我们可以得到下图:
但是,计算机还需要有一个东西来控制整个过程,就譬如控制什么时候从输入设备中获取到数据、什么时候将数据输出到输出设备当中。
因此,我们又得到了下图:
下面,我们分别介绍逻辑运算、算数运算、控制功能的含义
- 逻辑运算:逻辑与、逻辑或等
- 算术运算:加减乘除
- 控制功能:判断、循环、函数之间的跳转
我们将拥有以上三个功能的器件叫做中央处理器,也就是CPU。
有一个效应,叫做木桶效应,一个桶能装多少水,取决于最短板。对于计算机而言,计算机的快慢,也取决于最慢的设备。
在上图中,最慢的设备显然是输入和输出设备,它们远慢于CPU,因此,整个体系结构最终呈现的速度很慢。
为了解决这个问题,我们就不再让输入设备和输出设备直接和CPU进行交互了,而是在中间加到了一个起到缓冲作用的器件,也就是内存。
内存的特点是,比输入和输出设备要快得多,但是又要比CPU慢。内存在它们之间就起到了一个缓冲的作用。
到了现在的这个体系,整个运行流程就是这样子的:
- 用户输入的数据先放到内存当中,然后CPU直接从内存当中读取数据进行处理,处理完了之后再把数据放到内存当中,最后内存再将数据输出到输出设备当中。最终就形成了冯诺依曼体系结构。
- 第一点是数据的流动过程,但是CPU是可以直接给输入和输出设备发送控制信号的。
那么,最终的图就是这样子的:
以上的解释在任何一本书上都可以看到,下面说点书里看不到的。
内存在冯诺依曼体系当中的作用
首先,内存是具备存取数据的能力的,而且目前的内存也不小,能存的东西也不少。
既然,内存具备存取数据的能力,那么,它就具备一项能力:预先装载数据。
局部性原理:根据统计学原理,当一个数据被访问时,那么下一次访问很大可能就是它周围的数据。
根据局部性原理,当CPU需要某一行数据的时候,内存就会将这一行数据附近的数据也加载进去,而CPU处理数据和内存加载数据是可以同时进行的,那么就可以做到CPU一边处理,内存一边加载。这样,CPU就可以直接在内存中获取到数据。
2.操作系统
2.1操作系统是什么
简单来说,操作系统就是一款管理软硬件资源的软件。
2.2为什么需要操作系统?
- 操作系统可以和硬件交互,管理全部的软硬件资源。
- 用户直接和硬件打交道成本太高,操作系统可以提供一个良好的执行环境。
2.3操作系统的定位
写冯诺依曼体系结构不是没有理由的。
首先,我们能看得到的是机箱,把机箱的外壳拆开,我们就可以看到组成计算机的硬件。
这些硬件都安装在主板上,但,实际上,它们都按照冯诺依曼体系结构进行组织。
而,电脑单单只有这有这些硬件是不够的,我们还需要一个东西把这些东西管理起来。管理硬件的东西就叫做操作系统。
现在,我们简单总结一下:
- 硬件按照冯诺依曼体系结构进行组织
- 硬件被操作系统管理
好,那么,我们来进行下一个问题:操作系统直接和硬件打交道吗?操作系统是怎么样管理硬件的呢?
举个例子,如果操作系统自己和硬件打交道来完成键盘的读取操作,那么只有键盘的读取方式发生了改变,那么操作系统的内核源代码就需要重新编译,这样子的话,维护成本就未免有些太高了。因此,我们又在操作系统和硬件之间加了一层:驱动层。
驱动层的任务就是单独去控制硬件。
那么,操作系统究竟管理的是什么呢?
操作系统主要管理以下四项:
- 内存管理:内存分配、共享、保护、扩张等操作
- 驱动管理:对计算机硬件驱动驱动程序的分类、更新、删除等操作
- 文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等。
- 进程管理:对进程的调度
操作操作系统的是用户,也就是我们,这一层被称为用户层。
在这一层中,我们可以通过命令行或是图形化界面进行各种操作。
但是,操作系统为了保护自己,只对上暴露了一些接口,而不是让用户直接访问操作系统,这一部分接口被称为系统调用接口。
因为要使用系统调用的前提是要对系统有一定了解,因此这些系统调用接口对普通用户来说使用的成本很高。
所以,在系统调用接口之上又封装了一批库,就譬如libc和libc++。我们把这些接口称为用户操作接口。
实际上,我们在语言级别上使用的各种库,就是封装了系统调用接口。
2.4 结语
至此,我们就了解了操作系统的地位。
3.管理:先描述,再组织。
首先,对于人类而言,若是想要完成一件事,那么我们就一定要先做好决策,之后便是执行决策。
对于计算机而言也一样,但是做出决策和执行决策两件事不是在同一层发生的。
譬如:用户双击了QQ软件,这时操作系统便知道了用户想要打开QQ软件,但是软件是依赖于硬件的,因此“打开QQ”的决策会一步步往下传递到硬件层,最终执行。
那么,这个过程是如何完成的呢?
我们先说一个小故事:
对于学校而言,我们分出如下三个角色:校长、老师、学生。
现在,有一个比赛,需要三个学生参加。
校长知道了比赛的消息了之后,就把这个消息告诉了老师,并要求老师拿出前十名的学生,他将从这10名学生中找出3个学生参加比赛。
于是,老师将这10个学生的信息给了校长,然后校长从里面选出了3名学生,并告诉老师:“你组织以下这三个学生,好好准备准备,参加这次比赛。”
于是,老师听到了这个消息了之后,就告诉了这三名学生,并让他们开展相应的训练。
在上面的小故事中,校长并没有见到这三个学生,但是却管理了这三个学生。
他根据的是什么呢?便是这三个学生的信息,也就是这三个学生的数据。
大家都做过学生管理系统,也一定知道,学生的数据都是用一个数据结构保存的,每一个学生的数据就是一个节点。
那么,对应到上面的例子当中,也就是,老师取出了10个节点的数据交给了校长。校长从中删掉了七个学生,把剩下的三个学生交给了老师。
在上例中,校长是管理者,学生是被管理者,老师是中间的一个媒介。
我们总结一下,就可以得知管理到底是怎么执行的了:
- 管理者先把被管理者的各种信息进行描述,然后再用某种数据结构组织起来。
- 然后管理者管理对应的被管理者,也就是对数据结构的增删查改。