一、冯诺依曼体系结构
1、特点
截至目前,我们所认识的计算机,都是由一个个的硬件组件组成
1)这里的存储器是什么?
存储器就是内存。
要注意比如磁盘U盘等不是内存,而是外存。
2)输入设备都有哪些呢?
键盘,鼠标,摄像头,话筒,磁盘,网卡。
其中当从磁盘中读取文件(数据)时,磁盘就属于输入设备。
当从网卡中读取信息时,网卡就属于输入设备。
3)输出设备都有哪些呢?
显示器,打印机,播放器,磁盘,网卡。
其中当从磁盘中写入文件(数据)时,磁盘就属于输出设备。
当从网卡中发送信息时,网卡就属于输出设备。
4)输入设备与输出设备构成外设。
5)中央处理器(CPU)由两个硬件组成:运算器与控制器。
运算器:对输入的数据进行计算任务(算术运算,逻辑运算)
控制器:对我们的计算机硬件流出进行一定的控制
6)各个硬件单元必须要用"线"链接起来,这个线称为总线。
存储器与CPU之间交互的线称为系统总线。
外设与存储器之间交互的线称为IO总线。
关于冯诺依曼,必须强调几点:
- 这里的存储器指的是内存
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
- 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
- 一句话,所有设备都只能直接和内存打交道。
2、理解
1)所有存储是分级的
因为一般这些设备都是具有存储能力的,并且一般容量越大速度就越慢,离CPU就越远,所以存储是分级的
2)CPU不能直接与外设进行交互
因为它们的速度差太大了,根据木桶效应,最终的效率是取决于最差的传播效率的。所以如果CPU直接与外设进行交互,那么最终的效率就取决于外设的传播效率了。
所以为了适存,将内存放在它们之间作为过渡,因为内存的效率要比外设快的多,这样就可以提高效率了,也就是最终以内存的效率为主体。
3)内存可以作为硬件级别的缓存空间
输入设备输入数据时,可以先预存到内存里,当CPU忙完时,就直接可以从内存中获取数据直接计算,不需要等外设再输入到内存中了。所以说CPU是可以一边加载,一边计算的,这个工作是由操作系统来完成。
3、案例
我们在写代码,形成可执行程序时,可能经常听到这样一句话,一个程序要运行,必须要先加载到内存中才可以运行。现在我们可以理解这句话真正的意思了,代码其实也就是数据,而数据想要被采集计算,就要先加载到内存中,才可以被CPU接收,然后输出数据给内存,内存再将数据写入外设中。 这正是冯诺依曼体系规定的。
对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。
比如,当你登上QQ想发送一个文件给朋友时,这个过程之间数据是如何流动的呢?
①首先我们要理解QQ其实就是一个软件,一个程序,程序中都是数据,要想执行这个程序,也就是登上QQ,必须要将QQ加载到内存里。
①将文件发送给朋友这个过程,文件是在磁盘中的,所以要从磁盘中读取文件,磁盘也就作为输入设备,将文件数据加载到内存中,经CPU处理,返回给内存,最后从内存中写入到网卡中,网卡就作为输出设备了
②你的朋友在QQ端接收到文件,并下载下来的过程中,网卡作为输入设备,因为要从网卡中读取发送过来的文件数据,然后加载到内存中,经CPU处理,返回到内存中,可能有的人会想这个文件最后就是在内存中了,并不是的,我们知道,接收的文件关闭电脑后打开还是在的,但CPU内存是关机后数据就不存在了,所以最终文件并不在内存中,而是从内存中写入到了你的磁盘里。
二、操作系统
1、概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
操作系统就是一款进行管理的软件!不仅可以管理一堆硬件还管软件。
管理软硬件的方法就是提供一系列接口,计算机硬件与其他软件接口,用户和计算机的接口。
2、设计OS的目的
- 操作系统可以帮助用户管理好下面的软硬件资源。
- 为了给用户提供一个良好(稳定,高效,安全)的环境。
两者可以构成因果关系。所以,操作系统通过管理好底层的软硬件资源(手段),为"用户"提供一个良好的执行环境(目的)。
这里的用户可以分为普通用户和程序员。
普通用户用的不是操作系统,而是由程序员在操作系统上开发的各种软件程序。所以更进一步的来说,这里的用户更多的是程序员。因为直接使用操作系统很困难,普通用户不可能直接使用操作系统。用户使用的更多的是基于程序员开发的软件。
3、管理
1)操作系统如果要管理底层硬件,必须要有对应的驱动程序,才可以进行交互,不然无法交互。
2)操作系统如果想管理上层软件,需要使用系统调用接口来配合
①操作系统里面,有各种数据,可是操作系统不相信任何用户,因为有些用户不怀好意,因此操作系统不允许用户随便更改他的数据和代码,所以操作系统决定要将自己封装起来。
②但操作系统一旦将自己封装起来,那么用户就无法使用,操作系统存在的意义就没有了,所以操作系统为了自己的数据安全,也为了保证给用户能提供服务,操作系统以接口的方式给用户提供调用的接口,用户就可以获取操作系统内部的数据了。
③这些接口是操作系统提供的用C实现的,自己内部的函数调用----调用这些接口的行为称为系统调用。
④所有服务操作系统的行为,都只能通过系统调用完成!没有其他方式访问。
⑤系统调用的使用上来说,对于普通用户还是很困难,因此,有些开发者就对于部分系统调用进行适度的封装,进而形成了库。也就是说,库函数底层封装着系统调用的接口,这也是为什么库会在系统调用的上面。
3)操作系统与硬件是不需要直接进行交互的------那操作系统是如何管理硬件的呢?
操作系统只要能够得到硬件的相关消息,就可以在未来进行管理决策,所有管理的本质就是通过对数据的管理,达到对硬件的管理,而操作系统是如何拿到硬件的数据的呢?
通过驱动程序来获取硬件的数据!
4)但如果当获取的数据量太大了,就很难进行管理了,这该怎么办呢?
操作系统是这样做的:
①对要管理的的对象进行描述,通过对象的各种属性来设计一个结构体。也就是这个结构体里面都是该类对象的各种属性。通过属性的不同分类出不同的对象。
②将对象描述出来后,就将这些对象组织里来,可以使用链表将这些对象连接起来。
这样,操作系统就成功的对底层硬件的管理工作,转化成了对链表的增删查改。
【总结】计算机如何管理硬件,可以总结出6个字:先描述,再组织。
在操作系统中,管理任何对象,最终都可以转化成为对某种数据结构的增删查改。而操作系统包含了内存管理,文件管理,进程管理,驱动管理,这就注定了操作系统里,一定存在着大量的数据结构!
①先描述起来,用struct结构体描述对象的各种属性。
②再组织起来,用链表等其他数据结构将对象组织起来
4、案例
- 管理者与被管理者是不需要见面的
- 管理者在不见被管理者的情况下,如何做好的管理呢?——只要能得到管理信息,就能在未来做管理决策;管理的本质:通过数据的管理,达到对人的管理。
- 管理者和被管理者通过执行者拿到对应的数据
比较典型的例子就是大学的管理结构: