一、计算机运行的底层原理
1.多级层次的存储结构
①:辅存
固态盘不是主要的应用对象,因为固态盘的使用次数是有限的,无法支撑高并发场景
磁盘存储的最基本原理是电生磁。 磁盘的磁道里边有很多的磁颗粒,磁颗粒上边有一层薄膜为了防止磁点氧化,很薄,手一碰就会消失。
从下图当中我们可以看到如何在磁颗粒上边写入数据
我们的磁头上边有一个线圈,我们可以通过调整线圈的电流方向来控制磁头的磁极,那么在磁头上边的磁颗粒就是出现和磁头相反的磁性。假设我们用磁极N级代表数字1,磁极S级代表数字0,这样我们每个磁颗粒都存储这相应的数据。每个磁颗粒都存储着一个数据,我们将这个磁颗粒存储的数据叫做1 比特
磁头在磁道上运转会切割磁感线,由于磁点有N极和S极。所以会产生两种方向相反的电压,所以需要我们的磁头也需要带有一定的电压。(举例):假如正电压产生的是2V,负电压也产生2V,我们默认让磁头拥有3V的电压,当他滑到正的时候就有5V电压,当他滑动到负的时候就只有1V的电压
磁头在切割磁感线的时候必然会产生电压,但是不是所有的数据都是我们想要的如何得到我们想要的数据呢?
数据的传输必然是一个闭合的电路。我们只需要在数据传输线路上加一个数据拦截器,当传到不合法的电压的时候会出现断路,如果出现合法的电压的时候回形成闭合电路。
cpu要想读取磁盘当中的某些数据,就必须先将地址发送给磁盘。默认数据拦截器内的电路是断开的状态,数据电压要想通过就必须和地址电压共同作用将数据拦截器内的半导体变为导体。
磁盘的访问速度
我们在磁盘上找数据的时候,首先涉及到机械臂的移动,以及盘面的转动 共需要 5ms
上边我们看到cpu的的计算速度和每次只能计算的量,那么我们可以看到我们磁盘和cpu的速度差是25000000倍
那如何解决这个问题呢?------内存
②:内存
内存最小单位是一些类似于二极管这样的东西,它能存储一个电状态,高或低,可表示1或0;
内存在断电之后数据就会消失原因就是因为我们的内存条用的是电容存储的电荷
我们知道电容和电池一样,充满电的电池我们用0来代表,没有电的我们用1来代表。
内存的存取速度在20ns左右,如何由内存给我们的cpu提供数据,那么cpu的效率基本上能达到1%
③:高速缓冲存储器Catch
程序访问的局部性原理
即在一段时间内,整个程序的执行仅限于程序中的某一部分;相应地,执行所访问的存储空间也局限于某个内存区域;
空间局部性
就是最近的未来有可能要用到的信息,很有可能是在现在我们正在使用的这一个信息的存储空间周围的那些数据。例如:数组、指令和数据在内存当中的存储。
时间局部性
时间局部性指的是在最近的未来要使用到的信息,很有可能是现在我们正在使用的信息。例如:循环结构的指令代码。
存储系统存在的问题
在上边我们提到过内存给CPU供给数据的速度达到1%,这显然是不够的,那么综合以上出现的问题,我们巨大增加增加“Catche-主存”层次。
Catch为什么快
1.距离不同
catch在cpu内部,和cpu之间有专线连通。内存在cpu外部,和cpu通过公共总线来传输信号。
2.硬件设计不同
内存使用栅极电容存储信息,数据读取的时候属于破坏性读取
Catch使用双稳态触发器存储信息,电路设计更加复杂,数据读取效率更高
cpu是如如何访问catch的
方式一:先访问Cache未命中在访问主存
方式二:cpu同时去cache和主存当中找数据
④: 寄存器
寄存器是计算机中存储容量最小的存储器件,通常被集成在处理器芯片中。寄存器通常被用于存储处理器需要快速访问的数据,如程序计数器、指令寄存器、状态寄存器、通用寄存器等。cpu在计算过程中
2.多核CPU
①:单核处理器处理数据
早期的cpu只有一个逻辑运算单元(内核),我们知道计算机核心其实就是对数据进行运算,那么一个逻辑运算元也就是说在同一时刻,只能去运算同一指令。比如有一个for循环。运算 i++的同时不能和i count ++; } count ++; } for(int j =0;i temp ++; //这个地方不是count++是有用的,不是随便写的 }