目录
1. 冯 • 诺依曼体系结构
1.1 冯•诺依曼体系结构推导
1.2 内存提高冯•诺依曼体系结构效率的方法
1.3 理解数据流动
2. 初步认识操作系统
2.1 操作系统的概念
2.2 设计OS的目的
3. 操作系统的管理精髓
1. 冯 • 诺依曼体系结构
1.1 冯•诺依曼体系结构推导
计算机的作用就是为了解决人的问题,而要解决问题,首先需要将数据或是问题输入到计算机当中,所以计算机必须要有输入设备。计算机解决完问题后还需要将计算结果输出显示出来,所以计算机必须要有输出设备。计算机通过输入设备得到数据,数据在计算机当中进行一系列的算术运算和逻辑运算后,通过输出设备进行输出。
但是计算机当中只有算术运算功能和逻辑运算功能是不够的,还需要有控制功能,控制何时从输入设备获取数据,何时输出数据到输出设备等。
而我们后人就将这个具有算术运算功能、逻辑运算功能以及控制功能的这个模块称为中央处理器,简称CPU。
但是输入设备和输出设备相对于中央处理器来说是非常慢的,于是在当前这个体系整体呈现出来的就是,输入设备和输出设备很慢,而CPU很快,根据木桶原理,那么最终整个体系所呈现出来的速度将会是很慢的。
所以当前这个体系结构显然是不合适的,于是我们就不让输入设备和输出设备直接与CPU进行交互,而在这中间加入了内存。
内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢。
现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用。
现在该体系的运行流程就是:用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。
这样就形成了最终的冯诺依曼体系结构。
这里大家可以简单来理解,CPU在数据层面只和内存打交道。大家可以思考一个问题,为什么软件运行前必须先加载?本质上就是将数据加载到内存中,然后CPU才能进行处理,这是体系结构规定的。
注意: 这里存储器只是内存,不包括外存。
1.2 内存提高冯•诺依曼体系结构效率的方法
在这里大多数人有一个疑惑就是,先将输入设备的数据交给内存,再由内存将数据交给CPU,这个过程真的比CPU直接从输入设备获取数据更快吗?
我们首先需要知道:内存具有数据存储的能力。虽然内存的大小只有4G/8G,但是既然内存有大小,那么它就有预装数据的能力,而这就是提高该体系结构效率的秘诀。
CPU处理数据和内存加载数据是可以同时进行的。
1.3 理解数据流动
这里举例:你和你的朋友用电脑QQ聊天,要使用QQ,首先需要联网,而你和你的朋友的电脑都是冯诺依曼体系结构,在你向朋友发送消息这个过程中,你的电脑当中的键盘充当输入设备、显示器和网卡充当输出设备,你朋友的电脑当中的网卡充当输入设备、显示器充当输出设备。
你在你的键盘上输入信息,键盘将信息加载到内存,此时显示器就可以从内存中拿到数据,进而你就可以看见自己输入的信息;
与此同时,键盘将信息加载到内存后,CPU要获取内存中的信息并进行处理,处理完后写回内存,此时你的电脑网卡就回从内存中获取相应的信息,再通过网络传输到对方的电脑。
这时对方电脑的网卡收到了信息并将其加载到内存中,然后他的电脑CPU在从内存中拿到数据并进行处理,处理完写回内存,最后对方的显示器在从内存中拿数据并显示到对方的电脑上。
如此一来,我们就实现了数据的流动。
2. 初步认识操作系统
2.1 操作系统的概念
任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。
操作系统是一款进行软硬件管理的软件。它包括:
• 内核(进程管理,内存管理,文件管理,驱动管理)
• 其他程序(例如函数库,shell程序等等)
2.2 设计OS的目的
• 对下,与硬件交互,管理所有的软硬件资源。
• 对上,为用户程序(应用程序)提供⼀个良好的执行环境。
通过观察上面的图,大家可以发现:
硬件之上还有一层驱动层,驱动层的主要工作就是单独去控制底层硬件的。
操作系统主要进行以下四项管理:
- 内存管理:内存分配、内存共享、内存保护以及内存扩张等等。
- 驱动管理:对计算机设备驱动驱动程序的分类、更新、删除等操作。
- 文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等等。
- 进程管理:其工作主要是进程的调度。
而操作系统再往上就是我们所处的位置,在这里我们就可以用命令行或是图形化界面进行各种操作,这一层被称为用户层。
但操作系统为了保护自己,对上只暴露了一些接口,而不会让用户直接访问操作系统,这一系列接口被称为系统调用接口。
但这些系统调用接口对我们普通用户来说使用成本又太高了,因为要使用系统调用前提条件是你得对系统有一定了解。所以在系统调用接口之上又构建出了一批库,例如libc和libc++。实际上在语言级别上使用的各种库,就是封装了系统调用接口的,形成用户调用接口。
总结来说:
1.软硬件体系结构是层状结构。
2. 要访问操作系统,就必须经过系统调用(本质上就是函数,系统调用的)。
3. 我们的程序,只要它访问了硬件,就必须贯穿整个软硬件体系结构。
3. 操作系统的管理精髓
这里我们都知道操作系统是一名管理大师,那么它如何对我们的数据进行有效的管理呢?
这里大家记住这六字真言:先描述,再组织!
怎么来理解这句话呢?大家来想这样一个场景,校长是怎么管理学生的?
首先大家来思考,校长管理学生,需要和每个学生都见面吗?显然,这不太可能,也就是说管理者和被管理者是不需要见面的,那么如此一来,校长怎么管呢?
其实这里大家应该也能想到,校长虽然见不着学生,但是他知道每个学生的信息,所以他可以通过学生的数据对每个学生进行有效的管理。
当学生的数量多起来了,校长就可以将全部学生的信息组织起来,当然组织的方式有很多种(链表、顺序表、树),而每种组织方式都有其自己的优势,于是就有了一门课程专门教我们管理数据的方式,那就是数据结构。这里我们假设校长以双链表的形式将学生的信息组织起来。
对于计算机管理硬件
1. 描述起来,用struct结构体
2. 组织起来,用链表或其他高效的数据结构
这里我们来延申一下,我们知道C++是面向对象的编程语言,那为什么C++中要引入类这个概念呢?其实就是为了通过类描述对象的属性,后面C++中引入STL,本质上就是通过STL中的算法和数据结构来对类对象进行管理,所以这里也是体现了“先描述,再组织”的思想。