前言👀~
数据库的知识点先暂且分享到这,接下来开始接触计算机组成以及计算机网络相关的知识点,这一章先介绍一些基础的计算机组成知识
一台计算机如何组成的?
存储器
CPU
cpu的工作流程
主频
如何衡量CPU好坏呢?
指令
操作系统
操作系统功能
操作系统"内核"
如果各位对文章的内容感兴趣的话,请点点小赞,关注一手不迷路,如果内容有什么问题的话,欢迎各位评论纠正 🤞🤞🤞
个人主页:N_0050-CSDN博客
相关专栏:java SE_N_0050的博客-CSDN博客 java数据结构_N_0050的博客-CSDN博客
一台计算机如何组成的?
cpu(控制器和运算器等)、存储器(主存和辅存)、输入设备、输出设备
计算机工作流程:这里我简单举个例子去描述,你用鼠标点开了一个游戏(指令和数据),存储到存储器当中(从外存中加载到内存中),然后cpu从存储器中取出指令对其解码后进行运算,再传回存储器然后由输出设备进行输出显示到你的电脑上
存储器
提到存储器就可以想到内存和外存:
内存:通常指的是随机存取存储器,一种主存储器,读写速度快,存储容量小,主要存储计算机正在执行程序和数据(程序执行的时候需要先放到内存当中才能被cpu处理),当你打开一个程序,操作系统会将这个程序从外存中被加载到内存当中,以便cpu快速访问和执行。另外内存属于易失性存储器,断电的时候数据会丢失。
内存的作用:
存储临时数据:内存用于存放计算机在运行过程中需要快速访问和修改的临时数据。例如,当你运行一个程序时,这个程序的代码和数据会被加载到内存中,以便CPU快速访问和执行。
提高程序运行效率:操作系统和应用程序执行的时候,其指令和数据会存储到内存当中,因为内存具有快速读写的能力
缓存功能:内存可以作为缓存(主存和辅存之间),以减少访问外存的频率也就是减少访问硬盘的频率这样会节省不少的开销,当数据第一次从外存中加载到内存当中之后,下次再访问相同的数据的时候,我们直接从内存中进行读取即可,这样能提升我们的访问速度。就比如我们打开一个游戏第一次从外存中加载到内存中(第一次打开这个游戏的过程是不是很慢),我们只要没有关掉它,你再次点击它又回到游戏(这里游戏已经加载到内存中了,你不需要再从外存中读取,再次点击的时候立马回到游戏)
内存的工作原理:
1.加载程序:当我们运行一个程序时,操作系统会将这个程序从外存中被加载到内存当中,这个程序包括可执行文件、相关的数据文件等等
2.CPU访问:cpu通过地址总线快速访问内存中的指令和数据,内存通过数据总线和地址总线和cpu进行通信,快速提供所需数据
3.执行指令:cpu从内存中读取到指令和数据然后去执行这些指令
4.数据交换:cpu处理了这些指令把结果传回内存,内存中的数据发生变化,会临时存储在内存当中直到程序结束明确保存到外存中。
外存:是一种辅助存储器,读写速度慢,存储容量大,主要用于长期存储我们的文件和数据,例如我们的硬盘就是外存,我们会把文件存储在当中。程序运行的时候我们把外存的数据复制到内存,可以把内存看作是外存的高速缓存。硬盘属于非易失性存储器,即使断电我们的文件和数据依然保存在硬盘当中,确保数据的持久性。
CPU
CPU中央处理器,就是那块小小的硬件,属于计算机的核心也可以理解为是计算机的大脑,负责处理各种指令,它是由寄存器、运算器(ALU)、控制器组成
加快CPU访问速度:在cpu内部有个高速缓存存储器,也称Cache读写速度比内存还快的存储器,当cpu向内存写入数据,Cache中也会存储,当cpu需要读取这些数据时,这些数据会从高速缓存中读取这些数据(可以这么理解Cache 中的内容是主存中部分内容的副本)
Cache又分一级缓存、二级缓存、三级缓存,一级缓存离cpu最近,一级缓存又可以分一级数据缓存和一级指令缓存,一个用于处理数据一个用于对这些数据的指令进行解码,并且两者都能被cpu同时访问,提到了cpu的效率
寄存器:通用寄存器主要负责存储临时的数据和指令,记住cpu拿数据不是直接从内存中拿的,是通过寄存器中获取的
运算器:也称算术逻辑单元(ALU),算术逻辑单元呢又是由算术单元和逻辑单元组成的。算术逻辑单元主要就是负责计算的一个部件
控制器:也称控制单元(CU),控制单元由指令寄存器(IR)、指令译码器(ID)、程序计数器(PC)、操作控制器(OC)、时序产生器组成,可以把它理解为你的上司,它指东你就得往东走,你不能往西走。是cpu的指挥中心,指挥cpu中的各部件按照指令进行工作的部件
指令寄存器:存储当前要执行的指令
指令译码器:对指令进行解码(翻译)
程序计数器(寄存器):存储下一条要执行的指令的地址
cpu的工作流程
1.取指令:首先从程序计数器中得到指令的地址,接着去内存中取指令,然后存储到指令寄存器当中。
2.译指令:从指令寄存器当中取出指令,指令译码器对其进行解码,确定是什么类型的指令以及需要哪些操作数
3.执行指令:如果需要操作数的话cpu会从内存或寄存器当中取操作数(这里可以再细分一个阶段),接着运算器执行解码后指令的操作
4.写回:处理后的结果存储在cpu内部寄存器中,有些情况下会将执行后的结果写回到内存当中。写回阶段的作用就是将数据存储到正确的位置,以便后续指令使用
5.更新pc:当一条指令被取出后,程序计数器会增加(表示下一条要执行的指令的地址)
cpu中断机制:中断顾名思义暂时停止当前的活动,cpu中断分为硬件中断(硬件设备鼠标、键盘点击触发的)和软件中断(软件指令触发的,如系统调用)。举个例子比如我们在玩游戏的时候,女朋友发消息过来你直接切到微信回消息后又继续游戏了,在切微信再切回游戏这个过程简单点说向cpu发起中断请求然后通过上下文完成中断,举个例子你在吃饭然后突然女朋友打电话叫你去接她,你先把这个吃饭的地方的地址记住然后去接她过来然后接着吃饭
上下文信息:保存寄存器、程序计数器等当中的信息
主频
图中的2.90GHz是CPU的主频,可以理解为一秒钟cpu可以执行29亿条指令(不严谨),方便理解,图中的只是个下限,任务管理器可以看到实时主频,主频会根据当前的任务的负载程度,不断变化
当前频率,睿频,也有上限,根据CPU决定越好上限越高
如何衡量CPU好坏呢?
最关注的指标有两方面,一个是主频、一个是核心数
最开始CPU都是单个核心(核心可以理解为一个能完成完整计算功能的整体,是由很多的计算单元构成的),然后通过提高集成程度,提高cpu的速度。不断的减小计算单元的体积,然后提高集成程度从而提高cpu的速度,但是体积小到一定程度不能再小了这是就限制住了,现在都是多核心,去提高cpu的速度
举个例子可以把起初的cpu理解成一个小工厂,只有一个车间(单核),车间里的员工负责生产工作(运算器),车间里比员工还牛马的负责搬运工作或者传送信息(寄存器),车间里喊你干活叫你别偷懒指挥你的(控制器)。随着车的销量上去了,但是效率没上去,于是老板就多搞了好多个车间(多核),这样效率就上去了。但是又出现一个问题材料的不断增多(高并发),牛马搬不过来了。于是工厂搞来了手推车(Cache)减轻了这个问题
指令
cpu上能够执行的任务的最小单元(最小单元由 二进制 的方式表示的机器语言)
指令=操作码+地址码
指令周期是指执行一条指令所需的时间,它通常由若干个机器周期组成。
一个cpu设计的时候,会提供一些可以进行的操作就是支持哪些指令,比如加法指令、读取内存指令、写入内存指令等,这些是cpu能够执行任务的最小单元,执行其他任务的时候都是由这些最小单元构造的
怎么说呢?你给cpu发送一个任务,例如让它帮你去接杯水,得先去拿杯子,去哪里拿呢?要一步一步说清楚说的很细很细,然后去哪里接?也要一步一步说清楚说的很细很细。可以把这一步一步很细致的过程理解为一系列最小单元的指令,通过执行这些最小单元指令,CPU才能逐步完成整个任务
操作系统
操作系统是管理计算机硬件与软件资源的程序/软件
例如Windows10、Windows11、Linux、mac os、ios、Android等
尽管有这么多操作系统,但本质都是为了管理,属于搞管理的 软件(为什么是软件呢?因为我们可以对它进行升级和安装等)
操作系统功能
1.对下管理所有的硬件设备
操作系统毕竟是一个软件,不可能识别所有的硬件设备。但是它知道市面的硬件设备就那么几个大类,每个大类下的硬件设备大概都有哪些功能。例如鼠标左击右击滚轮这种基本的功能,但是呢要是这个鼠标有其他比较新颖一点的功能,这时候操作系统不认识,这时候硬件设备厂商就会提供一个驱动程序(软件)专属于这个硬件设备的,让操作系统可以识别这个新功能,例如罗技鼠标,侧边的按钮你要进行自定义功能,需要下载罗技的这个软件,从而实现自定义,这样就能在你的电脑上用上这个功能了
2.对上要给软件提供稳定的运行环境
什么叫给提供稳定的运行环境呢?进程的隔离性,一个计算机可以同时运行很多个程序,这些程序可以各自独立运行,互相不影响。总不可能你打游戏打着打着,系统突然给你重启
操作系统"内核"
操作系统"内核" 操作系统里面最核心的功能模块,内核本质上是一种特殊的软件(简单点说内核就是为操作系系统提供驱动、内存管理、网络、IO等功能的软件代码)。它是操作系统中最核心的部分,负责管理系统资源和提供基础服务(系统调用接口、设备驱动、进程管理、资源管理、内存管理一些底层资源的管理)
如何理解操作系统内核呢?可以理解为一个操作系统包含了内核+配套的应用程序等等,配套的应用程序就是系统自带的不能删除的,例如回收站、文件资源管理器等,内核呢就负责执行我们操作系统最核心的功能就是上面说的 对下管理所有的硬件设备(像硬件厂商提供的驱动程序都是在系统内核中执行的)、对上要给软件提供稳定的运行环境。
内核呢只有一个,但是要给很多的应用程序提供支持,所以会提供一些系统API给这些应用程序进行调用(系统调用,用户态和内核态交互的接口,每个操作系统提供的系统API是不一样的,我们学java的,jvm对这些系统API进行封装了,所以我们看jvm提供的API是一致的,这里类似jdbc)。这里我们处于用户态的时候发起指令访问系统的硬件资源,我们需要通过系统调用请求内核执行操作,系统调用涉及一些特权指令,所以需要转成内核态去完成,完成后传回结果并且转变回用户态
为了安全性和稳定性,操作系统运行分为内核态和用户态两种运行级别
用户态:用户态运行的进程权限低,不能直接访问硬件资源和系统内存等底层资源
内核态:内核态运行的进程权限高,能访问硬件资源和系统内存等底层资源
总结这样理解用户态和内核态用户态,就当我们程序员自己写的代码生成的程序,我们可以运行这个程序也可以对这个程序的一些代码进行修改。内核态就属于是系统写好的代码,操作系统写好了的并且里面的代码涉及到管理一些底层硬件资源,我们是无法去进行修改的,我们只能通过调用内核提供的系统API去访问这些硬件资源
本章的内容就到这了,这些都是比较基础的内容但也是相当重要的,下一章我们讲讲进程相关的知识💕