冯诺依曼体系结构的理解和操作系统的极简介绍【Linux操作系统】
冯诺依曼体系结构相关结论
冯诺依曼体系结构如下图:
现在基本上所以计算机硬件上采用的都是冯诺依曼体系结构
结论:
①输入设备和输出设备都是外设(外部设备)
②存储器就是内存(狭义理解)
③CPU=运算器+控制器
④CPU要运算的数据只能从内存读取
,运算结果也只能输出到内存
所以CPU的运算不会于外设有任何交互
为什么下面会说
⑤我们写的代码编译之后形成的就是可执行文件→可执行文件也是文件→是文件就存储在磁盘中→磁盘是外设→ 可执行文件是外设中的数据
⑥任何程序运行的时候,都必须先被(从磁盘)加载到内存
为什么呢?
因为⑤中说的,程序底层就是二进制程序,它被存储在外设(磁盘)中
又因为④所说的CPU运算的数据只会从内存中获取,而程序运行就是CPU运算的过程(结果)
所以程序必须加载到内存,才能被CPU获取到相关数据,才能被CUP运算
为什么要有内存?为什么CPU只和内存进行数据交互?
因为外设处理数据的速度非常慢,而CUP则非常快
所以如果直接让CPU和外设进行数据交互,根据木桶原理, CPU就会被外设拖累。
那么整个程序运行的速度就会很慢。
而如果有内存(内存的数据处理比外设快很多),因为内存的大小远远大于CUP
CPU一次只能读一行代码
所以如果不进行规划,CPU也根本就不知道什么时候该读什么代码,怎么读到代码
但是内存的空间远大于CPU,所以内存不仅可以提前从外设读取数据
还有足够的空间对读入的数据进行规划和管理
,规划好之后,CPU只管读就行
CPU只和内存进行数据交互,虽然内存比他慢,但他最慢也就是和内存一样
外设也只和内存进行数据交互,但是因为内存的数据比较大,所以可以提前加载数据,可以加载更多数据,进而提升效率。
不仅外设可以,CPU也可以把运算的结果先放在内存里,等累积多了之后一次IO就可以全部写给外设
内存相当于是CPU和外设之间的一个巨大的缓冲区
所以CPU和外设的数据处理速度就都由内存决定
这样就可以提高程序整体运算的速度
操作系统
操作系统本质也是软件
操作系统笼统的来说包括两个部分
①内核
②外壳(其他程序)
但是我们以下谈的内容中的操作系统只指内核
什么是操作系统?
操作系统本质是一个进行软硬件资源管理的软件
用户只需要发出命令,操作系统接收到命令之后就会自动地把命令执行完毕
设计操作系统的目的
设计操作系统是为了:
操作系统可以做到管理软硬件资源,保证它们稳定的,安全的,高效的运行
借此为上层的用户提供稳定的,高效的,安全的工作环境。
操作系统的层状结构:
①最底层的硬件一定是根据冯诺依曼体系结构设计的
②每一个底层硬件都拥有自己的驱动程序
③操作系统通过硬件的驱动程序操控硬件,获取硬件的信息
④上图中的层状结构,上层想要访问下层,必须一层一层地向下访问,不能跨层访问
例
操作系统访问硬件,只能先把要求交给驱动程序,再通过驱动程序对硬件进行操作
而
不能直接操作硬件
操作系统是如何管理软硬件的?
操作系统并不会于硬件直接打交道
那么它如和管理呢?
其实管理的本质是:对数据进行管理
操作系统只要获取了硬件的相关数据,就可以直接做出对应的决策
那它如何获取数据,执行决策呢?
其实就是
1.由驱动程序把收集到的硬件数据交给操作系统
2.操作系统分析数据之后再把决策告诉驱动程序
3.最后驱动程序在对硬件执行决策
那么操作系统如果分析处理又多又乱的硬件的信息呢?
举个例子:
一个学校的校长要管理2w个学生
校长不可能直接一股脑地把2w个学生的信息全部处理完,因为信息太多,太乱,找不到对解决当前问题有效的信息
所以校长必须借助工具,对学生的信息进行管理
-
把所有被管理者的有用的信息进行整合
校长先创建一个模型(类),它可以把一个学生的相关属性都装下来
创建2w个对象就可以都装下来,让每一个学生都对应一个对象 这样就剔除了无用的信息 -
把所有信息按一定规则保存,方便增删查改
然后,为了快速地增删查改学生的信息,就再把学生对象全部放进一个数据结构中
这样校长就把管理学生变成了对一个数据结构的增删查改
操作系统管理硬件也是如此:
①根据所有硬件的共同属性,创建出一个类
每来一个硬件就实例化出一个对象,让硬件与对象一一对应
这样就完成了建模(描述)的操作
②为了快速地对信息增删查改,就再把所有的硬件对象放进一个数据结构中
这样就完成了组织的操作
用户如何使用操作系统?
举个例子:银行系统
1.银行里面有各种各样的硬件(仓库,设备等)
2.还有管理硬件的人(对应驱动程序)
3.还有处理业务的工作人员(对应操作系统)
银行为了保证安全,不可能直接让用户去仓库里存钱和取钱
所以银行一定会把自己封闭起来,保证自己和钱的安全
但是银行必须对外提供服务,所以就只能开窗口
,让用户通过窗口进行业务处理
操作系统也是如此
操作系统不可能让用户直接访问硬件
,这样太不安全了,而且大部分用户也根本不知道如何使用硬件
所以操作系统一定会把自己和自己之下(硬件和驱动程序)的东西封装起来
然后提供一个窗口给用户访问,这个窗口就是系统调用接口
系统调用可以保证上层的用户,在可控的,安全的情况下,通过操作系统提供的有限的接口使用操作系统的资源
访问操作系统,只能通过系统调用接口访问
但是使用系统调用接口访问操作系统对于大部分人来说(尤其是非程序员
),还是太困难了,根本不知道怎么用
所以在它之上又有外壳程序,图形化界面,标准库
它们对系统调用进行了封装,让用户可以更好地使用