目录
引入
硬件 -- 冯诺依曼模型
背景
早期 -- 硬件化
冯诺依曼结构
存储程序控制原理
核心思想
结构
cpu -- (运算器和控制器)
介绍
控制器
运算器
指令集
存储器
介绍
内部存储器
读写操作
高速缓冲存储器Cache
内存分类
RAM
ROM
外部存储器
软件 -- 操作系统
os是什么
为什么要有os
如何管理
先描述,再组织
举例
总结
调用接口
引入
系统调用
用户操作接口
引入
介绍
lib(库)
总结 -- 计算机体系结构图
引入
计算机由硬件和软件构成
- 硬件是计算机的物理组件,负责执行实际的计算和数据处理任务
- 软件是计算机程序和数据的集合,它是在硬件上运行的指令的集合,负责管理硬件
- 软件指定硬件应该执行的操作,硬件执行这些操作并返回结果
硬件 -- 冯诺依曼模型
背景
早期 -- 硬件化
- 早期,计算机是由各种 门电路 组成的,这些门电路通过组装出一个固定的电路板,来执行一个特定的程序
- 一旦需要修改程序功能,就要重新组装电路板
- 它的数据存放在存储器中,而程序作为控制器的一部分
- 这样的计算机计算效率低,灵活性较差,只能依靠 硬件 控制程序
冯诺依曼结构
- 冯·诺依曼提出了一种计算机体系结构,被称为冯·诺依曼体系结构,也称为存储程序计算机
- 这种体系结构将计算机的指令和数据存储在同一存储器中(也就是将指令编码为数据,这样就将程序由硬件实现转变为软件实现),然后允许计算机按顺序执行一系列指令
- 这样计算机就不需要依赖硬件来完成对程序的控制,实现了可编程的计算机功能,实现了硬件设计和程序设计的分离,成为了现代计算机体系结构的基础
- 由此,计算机的基本工作原理就是:存储程序控制原理
存储程序控制原理
- 将计算机程序存储在内存中,并将其视为数据的一种形式,使计算机能够按照程序的顺序执行指令
- 使用存储程序控制原理,计算机可以根据不同的程序需求执行不同的任务,而无需物理上改变计算机硬件
- 通过改变存储器中的指令,可以轻松修改程序的行为,从而适应不同的应用需求,
- 还使得编写和调试程序更加方便,因为程序可以作为数据进行处理和修改
核心思想
- 程序、数据的最终形态都是二进制编码,程序和数据都是以二进制方式存储在存储器中的,二进制编码也是计算机能够所识别和执行的编码(可执行二进制文件:.bin文件)
- 程序、数据和指令序列,都是事先存在主(内)存储器中,以便于计算机在工作时能够高速地从存储器中提取指令并加以分析和执行
- 确定了计算机的五个基本组成部分:运算器、控制器、存储器、输入设备、输出设备
结构
cpu -- (运算器和控制器)
介绍
cpu由控制器和运算器组成
cpu通常从内存中拿到代码和数据,所以程序运行时,程序必须得加载到内存中
控制器
控制器的工作流程为:
- 从内存中取指令、翻译指令、分析指令
- 然后根据 指令的内存 向 有关部件发送控制命令,控制相关部件 执行 指令所包含的操作
运算器
- 计算机运算时,运算器的 操作对象 , 操作种类 , 对内存数据的读写操作 由控制器决定
- 运算器操作的数据从内存中读取,处理的结果再写入内存(或者暂时存放在内部寄存器中)
指令集
cpu只能被动的接收别人的指令,拿到数据后,执行指令
而cpu接收指令的前提是 -- 得认识拿到的指令 ,所以cpu有自己的指令集
- 分为精简指令集和复杂指令集,这两种体系结构在指令设计和执行方式上有显著的差异
- 这些指令集可以用来执行各种操作
- 基于不同的对计算机的需求,和不同的硬件平台,就有了多种多样的指令集体系结构
存储器
介绍
分为内部存储器和外部存储器
在计算机内部,程序和数据都是以二进制代码的形式存储的,它们均以字节为单位(8位)存储在存储器中,一个字节占用一个存储单元,并且每个存储单元都有唯一的地址号
内部存储器
也被称为称为内存或者主存,用来存放将要执行的程序和数据
读写操作
CPU可以直接使用指令对内部存储器按照地址进行读写操作
- 读:将内存中某个存储单元的内容读出,送入CPU的某个寄存器中
- 写:在控制器的控制下,将CPU中某寄存器内容传到某个存储单元中
内存的存取速度会直接影响计算机的运算速度
- 由于CPU是高速器件,但是CPU的速度是 受制于内存的存取速度 的
- 所以为了解决CPU和内存速度不匹配的问题,在CPU和内存之间直接设置了一种高速缓冲存储器Cache
高速缓冲存储器Cache
- Cache是计算机中的一个高速小容量存储器
- 里面存放的是CPU近期要执行的指令和数据,其存取速度可以和CPU的速度匹配
- Cache的目标是减少CPU访问主内存的次数
- 当CPU需要读取数据时,首先检查缓存中是否已经包含了所需数据
- 如果数据在缓存中找到(命中),CPU可以快速获取数据,从而提高访问速度
- 如果数据不在缓存中(未命中),CPU必须从主内存中获取数据,并将其加载到缓存中,以备将来的使用
- 通常包括多个级别的缓存,如L1、L2和L3缓存
- L1缓存最接近CPU,最小而最快,但容量有限
- L2和L3缓存通常更大一些,但速度较慢
- 这些级别的缓存依次处理缓存命中和未命中,以平衡性能和成本
- 一般采用静态RAM充当Cache
内存分类
内存按工作方式的不同又可以分为RAM和ROM:
RAM
- 随机存储器,可以被CPU随机读取
- 一般存放CPU将要执行的程序、数据
- 断电丢失数据
ROM
- 只读存储器,只能被CPU读,不能轻易被CPU写
- 用来存放永久性的程序和数据
- 比如:系统引导程序、监控程序等
- 具有掉电非易失性
外部存储器
主要来存放”暂时“用不着的程序和数据,可以和内存交换数据
一般是磁盘、光盘、U盘、硬盘等
cpu在访问数据时,一般只会和内存打交道,就是因为内存较外存速度快,这样可以提高整机效率
来源--三分钟带你了解冯.诺依曼结构 - 知乎 (zhihu.com)
软件 -- 操作系统
os是什么
进行软硬件资源管理的一个软件
是计算机能够正常运行最基本的系统软件,任何软件都需要OS来支持
为什么要有os
- 首先,从它是什么就可以知道,它可以管理软硬件资源,毕竟如果不管理它,又该如何使用计算机呢?
- 那么对软硬件资源进行管理是为了什么呢?
- os最终目的还是 : 为了用户能更好的使用计算机
- 所以要进行管理,为用户提供更好的(高效的,安全的,稳定的)执行环境
os就是这样一个承上启下的环节
如何管理
先描述,再组织
这句话非常重要,是管理的本质
对任何东西进行管理,都是按照这句话进行!!!
举例
比如说,我们有一串数字,该如何使用他们呢
- 在计算机中,这些数字被存放在内存中,然后我们通过内存中的地址访问
- 但我们直接使用地址访问实在太麻烦了,而且并不实际
- 取到这些数字的地址,不考虑任何数据结构的情况下,那得需要将他们每一个都放在变量中
- 这样进行管理实在效率太低
- 我们停下来想一想,一串数字,他们本身并无实际意义,只是一个一个的数字
- 并且,在逻辑上他们是连续的("一串数字"奥),我们可以连续取到他们
- 所以可以把他们按照存入的顺序进行编号,通过编号访问他们
- 并且,他们如果在物理上也连续的话,就可以通过第一个元素的地址,访问到后面每一个元素了
- 这其实就是数组,可以通过数组名+下标访问元素
- 也就是用 他们本身 描述他们,通过 数组 组织这些数字(所以实际上,数据结构就是对数据进行组织的一种形式)
按照现实中的例子:校长管理学生,想想他是怎么管理这么多的学生的呢
- 难道校长能记住每个人的信息吗
- 每次他想对学生采取一些决策的时候,难道是一个一个找到学生来说明吗
- 当然不可能,校长是借助他与学生的中间人来管理的,比如主任,辅导员,老师等等
- 并且,校长进行管理,实际上是管理学生的信息(比如看学生档案/询问老师情况),并不会和学生实际见面(至少我到现在都还没见过校长)
- 这些信息包括了一个学生的所有基本信息 (这样就可以将 抽象的概念(一个人) 具体为 数据 ,这些数据可以描述学生的属性)
- 通过查看这些信息 (这些信息必须得被组织起来,不然无法清楚的查看,比如以链表的形式) ,校长进行决策,然后决策被传达给执行者,让他们去执行,比如导员
- 这样被描述组织后,校长实际上就对链表(组织好了的数据)进行管理,而不是人/一堆数据
类比到计算机中:
总结
- 管理的本质:对数据进行管理
- 管理的方法:先描述,再组织
调用接口
引入
用于在程序中调用其他函数或方法,以执行特定任务
那为什么我们不能直接对对象进行操作呢,而是使用它提供的调用接口?
因为操作系统其实并不信任用户,但是它必须给用户提供服务(它就是因此而被创造的)
- 类比于银行中,银行也并不信任它的客户
- 因此它设立了窗口来使用户与它交涉,而不能直接与内部进行接触
在os中,类似提供窗口的方式也就是提供接口
- 除此之外,使用调用接口,就不用在不同部分的程序中重复编写相同的代码
- 将大型程序分解为较小的模块或函数,每个模块负责特定的任务
- 当需要添加新功能或改进现有功能时,可以通过实现新的调用接口来扩展现有系统,而无需修改现有代码
系统调用
- 是用户空间和内核空间之间的界面,它允许[用户空间的应用程序]请求操作[系统内核]执行特定任务,访问操作系统提供的服务和资源,同时保护操作系统的核心功能不受未经授权的访问
- 系统调用通常是底层的编程接口,不同的操作系统提供了不同的系统调用接口
- 系统调用的执行通常会触发上下文切换,将CPU从用户空间切换到内核空间,以便操作系统内核可以执行请求的任务
用户操作接口
引入
- 开发人员使用系统接口还可以,但如果让用户也直接使用系统调用接口,还是挺麻烦的
- 所以,为了让用户能够轻松理解和使用计算机系统,而不必了解底层系统的细节,就在系统接口的基础上进行封装,设计出了用户操作接口
- (库函数实际上就是用户操作接口的一部分)
介绍
在linux中,用户操作接口包括shell外壳,lib,部分指令,图形化界面
(不同的接口是为了实现不同的操作)
lib(库)
- 库(library)的缩写
- 分为静态库和动态库
- 库可以是系统提供的标准库,也可以是第三方开发者创建的外部库
- 库函数经常会使用系统调用来访问操作系统提供的底层功能