软硬件体系结构

一、冯诺依曼体系结构

在这里插入图片描述

冯诺依曼体系结构各个部件的意义:

  • 输入设备:可以从键盘获取用户输入,从磁盘文件获取输入,通过网卡从网络中获取信息等,将数据输入到计算机中
  • CPU:计算数据
  • 输出设备:可以将数据的计算结果输出到显示器供用户观看,输出到磁盘文件中保存,通过网卡将数据发送到网络中等,将数据的计算结果呈现给用户

图片
计算机可以只由输入设备、CPU 和输出设备组成,CPU 从输入设备获取数据,计算后输出到输出设备中

在上述情况下 CPU 和外设是互相协作的,由于外设(输入输出设备通被称为外围设备,简称外设) 一般都比较慢(以磁盘为例),而 CPU 的计算速度却很快(和磁盘的读取速度相差了100万倍),就会 导致计算机整体的速度以外设为主了(类似于木桶原理:木桶装多少水是取决于最短的一块板的)

  • 内存:为了提供计算机的整体速度,引入了比磁盘更快的内存作为中间介质
    • 在 CPU 访问数据的同时,根据局部性原理(访问数据时,大概率会访问数据周边的区域),便可以将数据预加载到内存
    • CPU 直接到内存中取数据,计算完后将数据放到内存
    • 内存会根据刷新机制将数据输出到输出设备中

冯诺依曼体系结构

在这里插入图片描述
在这种情况下就可以避免 CPU 和外设交互了,也就将计算机的整体速度变为以内存为主了

通过冯诺依曼体系结构可以知道 在数据层面,CPU 只和内存打交道,外设只和内存打交道,于是便可理解为什么 一个程序运行起来必须先加载到内存中,因为可执行程序就是一个二进制文件,在 Linux 当中,统一被称为普通文件,而文件都是被保存在磁盘中的,由于磁盘是一个外设,根据体系结构,CPU 不直接和外设交互,因此要执行这个程序,这个文件就必须要先加载到内存中,然后 CPU 访问内存执行该程序

那操作系统是在什么时候把程序加载到内存的?
在 Linux 中,./可执行程序,便会让操作系统把程序加载到内存
在 Windows 中,双击一个程序,操作系统便会把程序加载到内存中

在硬件层面,单机的数据流是如何流向的:
当我们双击网易云音乐的时候,网易云音乐软件就会从磁盘加载到内存中,然后 CPU 进行计算,计算完后将结果放到内存,内存将结果输出到显示器上,我们就能看到相应的窗口了,当我们点击播放音乐时,网卡从网络中获取数据,然后加载到内存中,然后 CPU 进行计算,计算完后将结果放到内存,内存将结果输出到音响上,我们便能听到声音了

在硬件层面,两个主机之间数据流如何流向的:和单机一样,都要遵循冯诺依曼体系结构
假如张三和李四在聊 QQ,张三对李四发了一个 在吗?
首先键盘获取张三的输入,然后将数据加载到内存,由于数据在发送的时候是需要加密的,CPU 通过计算后,把加密后的数据放到内存中,内存将数据放到本地的显示器中给我们观看,并且将加密的数据放到网卡中,网卡就会将数据发到网络中,李四的计算机就通过输入设备网卡,从网络拿到数据,然后加载到内存中,CPU 对数据进行解密,然后将解密的结果放到内存中,内存将数据放到输出设备显示器上

可以发现因为硬件的决定,数据流的流向都是需要遵守冯诺依曼体系结构的,数据必须从输入设备加载到内存,CPU 从内存取数据进行计算,然后将计算结果放到内存中,内存根据刷新机制将结果放到输出设备

软件也可以被理解为这里的数据,因此软件的运行也是遵守冯诺依曼体系结构

补充:对于以上都是在数据层面的理解,对于有些控制信号,CPU 是可能会直接和外设打交道的
现在的计算机除了 CPU 的芯片外,还存在另一个芯片用于将外设的数据搬到内存中
有些设备既可以充当输入设备,又可以充当输出设备,网卡,磁盘等

二、操作系统

在冯诺依曼硬件的体系结构中,诸如什么时候把文件预加载到内存,加载的文件是那一部分,预加载时内存空间不够了怎么办,CPU 如何快速找到预加载的数据,计算结果的文件该保存到什么位置,这些很多问题,只有硬件是做不到的(硬件是死的),因此为了做到这些,我们还需要对软硬件资源进行管理,于是便产生了操作系统

操作系统是一款对软硬件资源进行管理的软件,因此操作系统的核心功能是进行管理(操作系统是软件,因此操作系统要运行就必须要预先加载到内存中,开机时,就是在加载操作系统)

1. 管理的本质

在生活中,我们做一件事时,无非会经历两种状态,决策(决定是否做)和执行(做这件事)
在组织中,你可以发现,真正的管理者往往做的只会是决策,而不会是执行,如:在公司中老板不会去写代码,而是在办公室决定某个计划是否执行,在学校中,是否举办比赛都是由校长决定,确定举办后下发给院系辅导员去做,然后辅导员再去通知学生按时参加

以学校为例,对于学生这个被管理群体而言,真正的管理者并不是辅导员,而是校长,辅导员只是一个中间执行人

在学校中,我们学生基本接触不到校长,但是校长却能把学校的众多学生管理好(学生按时上课,按时参见考试,是否需要留级等)

  • 校长不接触学生是如何管理学生的呢?
    学生在学校中会产生各种数据(如:学号,电话,成绩,学分等等),而校长只需通过某个学生的数据便可以知道学生的情况(如:这个学生的成绩如何,有没有受过处分,出事了联系人是谁),因此校长只要拿到了所有学生的数据便可以知道每个学生的情况,也就可以间接的对每个学生进行管理

  • 校长不接触学生是如何拿到学生的数据呢?
    在学校存在辅导员这样的中间执行人,对上和校长接触,对下和学生接触,于是辅导员便可以收集学生的数据,然后交道校长的手里,以便校长对学生进行管理

在大学中,基本上学生的人数都上万,如果辅导员不做整理的直接把上万的学生信息交到校长手里,当校长想找学校的某一名学生时,就需要在这上万的信息中逐一查阅,校长的负担就会很大,也就很难做出正确的决策,因此需要预先整理学生信息

  • 如何整理学生信息?
    对于学生这个整体,可以整理出学校需要的属性{ 姓名,年级,电话…},对于每一个具体的学生,都记录下自己的属性值{ 张三,大二,123456…},将整理的属性用一个结构体给描述出来(其实就是面向对象的思想,将同一个事物的属性给抽象出来),这样数据便清晰了,但是数据之间没有关系,当我们要找某一个学生时,只能一个一个的查找,因此我们还需要对数据进行组织

  • 如何组织数据?
    将学生信息的结构体存放到数据结构(链表,二叉搜索树等),当我们想找到某一个同学的信息,或者开除某一个同学时,只需要对这个数据结构进行增删查改,于是对数据的管理就便得很方便了

学生信息经过描述并组织之后,可以发现 校长对学生的所有决策,全部被转化为了对数据结构的增删查改操作,我们把现实中的管理转化为了计算机的操作,这个过程被称为对管理的动作做建模

管理:

  1. 管理者和被管理者是不需要直接交流的
  2. 管理的方式:对被管理者对象的数据做管理
  3. 管理者是如何拿到被管理者的数据呢?通过中间的执行人
  4. 管理的本质:先描述(语言帮我们完成),在组织(数据结构帮我们完成)
    先描述:整理出我们需要的被管理者对象的属性,用结构体描述出来
    在组织:将结构体组织为数据结构,以方便对数据进行增删查改

于是便可以理解,为什么学习操作系统前,需要先学语言和数据结构,因为以后写的程序或多或少都与管理有关,只有理解了先描述,在组织,才能理解管理,因此只有理解了语言和数据结构,我们才能理解操作系统

管理的本质:先描述在组织,这句话将贯穿我们整个学习生涯,包括网络

操作系统即可以管理硬件也可以管理软件,就如同人即可以管理物品也可以管理人一样,操作系统如何对软硬件资源进行管理:先描述,在组织

操作系统对硬件先描述出属性构成,然后通过各种硬件驱动程序(一般每一种设备匹配一个驱动程序,键盘有键盘驱动,磁盘有磁盘驱动,网卡有网卡驱动)获取各种硬件的相关数据,接着在组织成某种数据结构,于是便把对硬件的管理转换成了对数据结构的增删查改

因此操作系统对硬件,内存,进程,文件的管理也是先描述,在组织

在以学校为例的管理体系中,学校中的角色类比于计算机中的角色如下所示:

管理者		校长		操作系统
中间执行人	辅导员	驱动程序
被管理者		学生		软硬件

三、计算机的软硬件体系结构

操作系统对下通过管理好软硬件资源(手段),对上给用户提供良好(安全,稳定,高效,功能丰富)的执行环境(目的)

操作系统虽然给用户提供了良好的服务,用户相信操作系统,但操作系统是不相信用户的

以银行系统为例,行长通过管理好银行,给用户提供良好的服务,当用户去银行存钱,用户相信银行,但是银行不是说让用户去金库你们自己存,而是采取了一定的防护措施,通过一些人员来帮助你进行存钱,所以银行是不相信你的,怕用户中存在坏人

在生活中,银行是如何解决即要给用户提供良好的服务,又要保障自己的安全呢,并且用户不能随随便便的查看或修改系统的内容

在这里插入图片描述
银行采用的方式是窗口服务,将用户和工作人员之间用厚厚的玻璃隔开,并设立许多小窗口,通过这些小窗口为用户提供服务,用户将需求通过窗口给服务人员,服务人员帮我们处理相应的需求,于是银行只需要管理好窗口便即可以提供服务,又可以保证自己的安全

操作系统,驱动程序,软硬件这样的结构,被称作计算机软硬件体系结构

在这里插入图片描述
与银行系统一样,计算机软硬件体系结构为了给用户提供良好的环境,并且需要保障自己的安全,也是不允许用户直接访问他内部的产生的任何数据,防止用户做破坏,采用的方式也是窗口服务,给向上的用户提供一个一个的系统调用接口,用户只需要包含对应的头文件,便可以使用这些系统调用接口来完成自己的需求,这样即完成了操作系统的封装性,又可以给用户提供良好的服务

系统调用接口:这里的系统指的是 Linux 系统,而 Linux 系统是用 C语言写的,所以 系统调用接口其实就是操作系统提供的 C语言函数

如果一个软件使用了系统调用接口,则这个软件只能在该系统下跑,这个软件也就不具备跨平台,因为不同的操作系统的接口可能不一样,所以在安卓手机上可以运行的软件,在苹果手机以及电脑上都不能运行

1. 计算机软硬件层状结构

虽然操作系统提供了系统调用接口,但是使用这些接口,是需要懂一些操作系统的知识的,成本很高,于是便有人基于系统调用接口,做二次开发,提供一些更简单的接口

  • shell(命令行解释器)和指令集
  • 图形化界面
  • 语言中提供的需要和硬件访问的库函数所需要的库文件
    由操作系统的软硬件的体系结构决定,库函数不能直接和硬件打交道,只能通过调用操作系统提供的系统调用接口来实现该函数的功能

紧接着,为了让用户拥有更丰富的功能,如 QQ,微信,网易云音乐等等,便有人在图形化界面之上通过语言的库开发了许许多多的软件,这一层软件层被称之为应用软件层

在这里插入图片描述

需要注意:并不是所有的库函数都会调用系统调用,不用访问硬件的函数就不需要,如 C语言中string.h 中的函数

猜你喜欢

转载自blog.csdn.net/qq_70793373/article/details/129213523