文章目录
前言
内存也是硬件,因为cpu只和内存打交道,所以我们需要把磁盘(外设)上面的代码加载到内存,然后内存的数据被cpu拿到并且执行。那么外设到内存加载数据是如何加载的呢?
我们这里只能简单的来理解一下:
我们可以把外设和内存想象成为由数百亿个小电池,每一个电池都能存放高低电平,我们将外设的数据拿到内存或者向外设写入数据或者是清空内存缓冲区
本质就是对外设或者对内存进行一次充电或者放电的过程,外设比内存的电压更高,外设进行一次放电,内存进行一次充电,就将数据打到我们的内存里面。同理,外设的电压比较低,我们就可以通过高低压放电向低电压的外设充电写入数据。内存清理缓冲区就是一次放电的过程,将电放完就把数据给清理完了!
一、冯诺依曼体系
我们常见的计算机(如笔记本);我们不常见的计算机(如服务器),大部分都遵守冯诺依曼体系:
主要由:输入设备、输出设备、存储器、运算器以及控制器五个部分组成
1、所有设备都只能直接和内存打交道
2、中央处理器(cpu):由运算器、控制器加上一些寄存器等部分构成
3、 存储器:一般指的是内存。内存掉电易失,所以只用做临时存储
输入和输出设备:统称为外设。磁盘,网卡等既属于输入设备,又属于输出设备;键盘、鼠标、扫描仪、写板等只属于输入设备;显示器、打印机等只属于输出设备。其中,磁盘是可以不带电存储的,掉电不易失,可以用于永久存储
4、不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
我们知道cpu有着很强大的运算功能,但其实cpu是很笨的,它只能被动接收别人的指令、别人的数据,然后运算出结果返回。
问题一
CPU怎么识别我们传递给它的指令和数据呢?
这是因为:
CPU内部有着自己的指令集,它会将我们给他的数据和指令通过对应到指令集,从而完成我们想要的操作
指令集是二进制的,这就是为什么我们要经过编译链接,然后生成二进制可执行程序之后才能够被运行的原因,就是因为要对应上cpu的指令集,要让cpu读懂我们的代码
问题二
CPU需要的数据是从哪里获得的
答案是从内存来的。因为数据虽然是存放在磁盘的,但是从磁盘中读取实在是太慢了,所以为了提高整机效率,cpu会直接从内存中读取和写入程序,不再去磁盘读取了;而内存再向磁盘中读取和写入数据(内存向磁盘中读取和写入就是IO的过程:stdin和stdout)
所以得出来了一个结论:
在数据的基础上,cpu不直接和外设打交道(老的计算机有的会打交道,新的计算机基本上不会直接打交道);对于内存与外设来说:所有外设只能载入数据到内存中,内存写入数据也只能写到外设中;cpu和内存的关系也是同理。
这就是为什么我们前面经常说的:程序运行时必须加载到内存中。cpu需要读取数据,但是只能从内存中读取。所以,我们要将磁盘中的程序载入到内存中
对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上
举例:
从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?
这里,发送方除了网卡有发送的消息,显示屏上也会有,这就是我们能看到自己发送消息的原因
当我们登陆qq时,qq就相当于一个操作系统,被加载到了内存中
小结
一个程序要被执行,先要将在磁盘中的可执行程序加载到内存中,然后cpu从内存中拿到可执行程序中的代码,进行运算等操作执行,cpu执行完之后把结果返回到内存中,然后刷新显示到显示器上面
二、操作系统(Operator System)
操作系统是什么
操作系统是一个就行软硬件资源管理的软件
为什么要管理
操作系统通过对下管理好各种软硬件资源(手段),来达到对上为用户提供良好的(稳定、安全、高效…)运行环境(目的)
1、概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
内核:四大软件管理模块(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)
2、为什么要有操作系统
通过上面我们知道了,操作系统是一款管理软硬件资源的软件,那么为什么操作系统要对这些软硬件资源管理呢?
结合上面的一点:
操作系统通过对下管理好各种软硬件资源(手段),来达到对上为用户提供良好的(稳定、安全、高效…)运行环境(目的)
得出结论:这些软硬件需要我们的管理才能正常工作
举例:谁把磁盘中的程序加载到内存,什么时候开始加载,一次加载多少?程序结束之后,cpu等冗余的垃圾谁来清理?
都是操作系统完成的
3、操作系统如何进行管理
从三个方面解释:
1、管理者不需要与被管理者直接交互,任然能够管理好被管理者
例1:
我们在公司基本上见不到公司的ceo,但是他总是能够能够很好的将我们管理起来,对我们工作的不足提出批评,对我们工作优秀的人提出奖励
例2:
我们再以学校为例,学校的校长并没有直接与我们 (学生) 进行交互,但是他仍然能够很好的将我们管理起来,知道有哪些优秀学生
可能有人会说,我们并不是由公司ceo或者校长来管理的,而是由我们的上司或者辅导员来管理的。
但是实际上,上司或者辅导员并不算一个管理者。拥有对重大事宜的决策权的人才是管理者,虽然日常与我们进行交互的入是上司或者辅导员,但是上司或者辅导员对我们并没有决策权,比如你是否能够获得奖学金、是否能够评优评先、是否会别学校开除等重大事项;都是由校长决定的,公司里面也是同理,有公司ceo决定的
2、管理的本质是:对数据进行管理
由上得知:拥有对重大事宜的决策权的人被称为管理者。
但是决策是要有依据的,而决策的依据就是被管理者的数据。比如我们的的绩点、综测和各种获奖记录等;在公司个人对公司的贡献、或者对公司产生了什么危害等数据
但是管理者并没有与我们交互,他是怎么有我们数据的呢?
这是由执行者提供 的。执行者通过与被管理者交互得到被管理者的数据,管理者通过这些数据对被管理者做出决策,然后执行者再找到被管理者执行这些决策。
对应到上面的例子来说,公司ceo通过我们的上司获取我们的各种数据。校长通过辅导员获取我们的各种数据
然后做出决策,最后上司或者辅导员再对我们执行这些决策。
小结: 对于计算机来说,各种硬件都有对应的驱动(也就是所谓的执行者),比如网卡有网卡驱动,磁盘有磁盘驱动,其他设备都有着对应的设备驱动;操作系统从这些驱动获取硬件数据,然后通过对硬件的数据进行管理实现对硬件的管理:
3、管理的方法:先描述,再组织
我们知道,一个大学有很多学生,如果校长都独立保存每个学生数据的话,那数据管理的成本非常大。我们将学生的数据描述成一个类或者一个结构体(class或者struct),然后每个学生都对应类或者结构体实例化出一个对象;最后,我们可以使用一种数据结构(链表、顺序表…), 将这些类对象组织起来,形成一个学生管理系统;此时,我们对学生数据的管理就相当于对某种数据结构的增删查改,极大提高了管理的效率。
这就是:先描述,再组织。先将每一个学生的所有数据描述成为一个类或者结构体,再对每一个学生进行组织,每次来一个学生就通过链表的方式来维护起来
我们以上举的例子都是关于硬件的,软件方面也是一样的:
先获取软件的数据,然后把软件的数据描述成为一个类或者结构体,最后进行组织,生成管理类或者结构体的数据结构(比如:操作系统要对驱动程序进行管理,操作系统还要对内部程序进行管理,这就是操作系统管理软件的方面。而管理方法也是:先描述,再组织)
小结:
1、管理者不需要与被管理者直接交互,任然能够管理好被管理者
2、管理的本质是:对数据进行管理
3、管理的方法:先描述,再组织
三、系统调用接口
虽然操作系统是一款对软硬件进行管理的软件,但是我们不能直接对软硬件进行操作。这是因为操作系统不信任任何人,它为了防止我们对这些软硬件进行违法操作,就不允许任何人直接对软硬件进行操作
但是,操作系统既要提供服务给用户,又要保证它管理的软硬件不会被用户直接访问,所以就出来了系统调用接口
也就是我们说的操作系统接口(两者意义一样)。这样当用户要访问软硬件的时候,用户使用系统调用接口,操作系统来帮助我们完成需求(如果遇到违法行为,操作系统直接拒绝我们的操作),既满足了用户需求,又保护了软硬件
四、用户操作接口
虽然操作系统给我们提供了系统调用接口,但是用户使用起来还是比较麻烦。因为系统调用接口使用上功能比较基础,对用户要求较高。所以,大佬们在系统调用接口的基础上开发出来了用户操作接口:比如我们前面讲的linux外壳shell、bash;C/C++等语言的各种库函数;windows下面的图形化界面等等
五、计算机的软硬件结构体系
经过上面的学习之后,我们对计算机的软硬件体系结构有了一层认识了,大致结构如下:
到这里我们算是勉强认识了一下计算机的软硬件结构体系,以后还会有更多的知识穿插进来的