b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

什么是内存(1): 内存层次结构

电脑杂谈  发布时间:2020-08-15 00:11:47  来源:网络整理

惠普6910p内存是_2g4g内存是双通道吗_什么是内存

首先,我将告诉您一个段落:

我在2015年开设了一家网吧,以180元的价格购买了400多个DDR4 8g记忆棒. 2017年,网吧亏损超过20万元. 昨天我卖掉了网吧里的所有电脑. 有了600个记忆棒,我实际上是从网吧赚钱的. 谢谢三星,人民和聚会. .

自今年以来,记忆棒的价格飞涨,它已成为新一代理财产品. 因此,今天我将与您讨论记忆的主题. 主要内容是存储器的功能以及在程序运行期间如何与CPU和OS交互. 互动的.

首先讨论: 计算机究竟在运行什么?看看经典的冯·诺依曼结构. 尽管计算机科学已经发展了几十年,但是它仍然遵循冯·诺依曼的结构.

冯·诺依曼结构

冯诺依曼结构.jpg-23.2kB

图1: 冯·诺依曼结构

数学家冯·诺伊曼(von Neumann)提出的体系结构包含以下要点:

我们可以根据这张图片进行思考来得出结论. 所谓的计算机处理任务是根据输入的内容将数据/程序从内存发送到CPU进行处理,然后输出结果.

关于程序和数据,数据是MP3歌曲. 该程序用于控制代码以分析和播放此歌曲. 从底部开始,它是CPU运行的说明. 简而言之,它们在计算机中都是0和1. 但是,为了方便编写,我们直接将其称为数据或程序或指令,并将它们理解为相同的含义. 毕竟,它们都属于由0和1组成的流,根据上下文可以理解.

本文讨论的主要内容是内存部分. 为什么计算机需要内存部分?这是显而易见的. 我已经编写了程序或下载了电影. 必须有一个放置它的地方. 因此,将来有需要时,您可以运行程序或观看电影.

让我们考虑一下这种记忆应该具有的特征.

关于此内存,我们可能提出了理想内存应具备的5个特征.

但是有个好话. 理想的是非常丰满的,表现得很瘦. 一个纸尿裤在纸上列出了数十个理想女友的标准,但是他可以吗?

首先讨论结论,尚未发明出完全符合我们理想条件的记忆. 当前的半导体行业只能生产一些满足条件的存储器,但是那些完全满足上述条件的存储器,很抱歉,我们将来可能会这样做,但至少目前还不能这样做.

因此,这也是当前计算机系统内存系统更复杂的原因. 它分为不同的内存,例如内存,硬盘和光盘. 如果有满足我们理想条件的完美记忆,可以直接使用此记忆.

让我们看一下我们最常用的存储设备: 磁盘. 足够稳定;有电和无电的正常存储;大容量可接受的价格,因此磁盘是我们最常用的存储设备.

磁盘是我们存储的代表.

为方便编写,将存储直接替换为磁盘. 首先,每个人都熟悉磁盘. 其次,磁盘也是最常见的存储设备. 从广义上讲,它类似于闪存,SD卡,ROM等,也可以称为磁盘. 因为它们的功能是存储数据,所以断电后数据不会丢失. (这也将在下一篇文章中讨论)

磁盘和硬盘之间是什么关系?它实际上意味着同一件事. 硬盘是最常见的磁盘类型. 很久以前,计算机使用软盘存储数据,因此这种软盘也称为磁盘,但是软盘在历史上早已过时. (计算机硬盘分区以C驱动器开头,因为AB磁盘是前一张软盘的编号). 因此,现在我们谈论磁盘时,只需将它们理解为硬盘即可.

在我们的软件中,有一个称为数据持久性的概念,这意味着数据被存储为在断电后不会丢失. 它实际上存储在磁盘上.

因此,我们现在了解的计算机操作就是这样一个过程: 将数据从磁盘发送到CPU,以供CPU计算并输出结果.

因为我们的文章正在讨论内存,存储和其他问题,所以将不涉及或讨论输入设备,输出设备等.

然后我们简要讨论CPU的发展历史.

世界上第一台计算机是ENIAC,它于1946年在美国诞生. 当时,CPU仍在使用笨重的电子管. 接下来的故事是贝尔实验室发明了晶体管,TI工程师发明了集成晶体管,IBM成功开发了该晶体管. 第一台使用集成电路的计算机IBM360,随后是Fairchild八以及Intel和AMD的故事. 我们再也不会厌倦讲述这个非常著名的IT故事了. 随着世界上第一个商用处理器Intel4004的出现,宏伟的摩尔定律开始出现.

当时负责IBM 360操作系统开发的项目经理根据项目经验写了一本经典的书《人月神话》. 其他参与者还根据项目经验出版了一本书. 这批人是大牛.

摩尔定律: 当价格保持不变时,集成电路中可容纳的组件数量大约每18-24个月增加一倍,性能也会提高一倍.

半导体行业正在腾飞. CPU上集成的晶体管数量正在增加. Intel i9的制程技术已达到14nm. 因此,CPU的执行速度越来越快.

当然,摩尔定律即将终结. 根据量子力学,2nm是理论极限. 线宽不能更细,小于2nm,隧道效应会引起干扰.

惠普6910p内存是_2g4g内存是双通道吗_什么是内存

我谈论了一段时间的CPU开发历史. 我想表明的是,CPU的集成度越来越高,速度越来越快. 每秒可以执行越来越多的指令. (如果您不了解说明,汇编等的含义,请参阅我的另一篇有关跨平台理解的文章,否则以下内容将很困难. )

CPU的作用是执行指令(当然,包括输出结果等,本文仅讨论与内存相关的内容,因此我不谈论其他事情),并以其最大速度执行指令. 如果您已经完成了单片机或了解了微机的原理,则执行过程应该更加清晰. 也就是说,随着时钟周期的滴答节奏,CPU会跳动以执行指令.

关于CPU的指令集,这是英特尔架构师的工作. 简而言之,CPU可以识别这些指令并执行操作. (不要忘记冯·诺伊曼(von Neumann)建筑的图片). 对于这些指令,CPU采取了各种措施来加快执行过程(也可以理解为加快计算速度). 例如,有几种常用措施:

我这么早讲的原因是为了表明CPU速度很快. 尽管每条指令的执行时间需要几个时钟周期到几十个时钟周期. 但是CPU使用各种技术来加快执行过程. 因此,平均只需要一个周期即可执行一条指令. 现在,CPU频率是如此之高. 例如,i7 7700K的主频率已达到4.2G. 这意味着每个内核每秒可以执行大约4.2亿条指令. 那四个核心呢?

CPU每秒可以执行数亿(甚至数十亿)条指令,因此其执行速度非常快

在讨论了CPU如此快的执行速度之后,让我们来谈谈我们常见的存储设备机械硬盘.

机械硬盘结构.jpg-90.4kB

图2: 机械硬盘结构

不再详细讨论机械硬盘的结构. 这让我想起了民国电影中那种播放音乐的电唱机.

对于具有机械硬盘的计算机,如果在使用过程中摔落了机箱,后果可能会很严重,因为机械结构(例如机械硬盘的读/写头/传输臂)可能会损坏.

机械硬盘具有大容量(当前为1T,2T). 我们的数据和程序存储在磁盘上,因此,如果CPU要执行指令/数据,则必须从内存(即磁盘)中读取指令/数据. CPU数以百万计的指令可以在一秒钟内执行,但是磁盘的读写速度却像蜗牛一样慢. 假设磁盘每秒可以读取100条指令. 两者之间存在巨大的速度差异. 半导体行业已经发展了几十年,CPU的执行速度正在迅速提高. 但是,磁盘技术的发展太弱. 无论CPU有多快,但磁盘严重滞后,CPU都相当于严重的工作不饱和. 如果直接来自磁盘读取数据,则CPU空闲时间为99.9999%.

“假设磁盘每秒可以读取100条指令. ”: 假设一词的含义是随随便便写出了特定的数字. 例如,磁盘的读写速度自然具有其参数索引,但是我们仅是为了说明问题,因此理解事实是很好的.

磁盘制造商也在努力工作,例如SSD(固态驱动器),其速度比机械硬盘快十到二十倍. 但是对于CPU的速度,这也是事实. (更不用说SSD与机械硬盘相比过于昂贵)

所以这是个大问题.

我们的目标是在执行任务时让CPU满负荷运行,并争取每个时钟周期,CPU不会空闲和浪费.

这就像老板对我们员工的希望. 老板付给我们工资,所以他希望我们努力工作,每天每一分钟都为公司提供帮助. 没有空闲时间. 所以我们要感谢劳动法,让我们一天工作八小时就足够了. 毕竟,我们也是有血有肉,我们也需要吃饭,喝水和睡觉.

看到劳动法规定一天工作八小时就足够了,程序员在厕所里大声喊叫.

猿猴问科比: “你为什么这么成功?”

神户: “你知道早上四点在洛杉矶的感觉吗?”

猿猴计划: “我不知道,通常我当时没有下班,这是怎么回事?”

神户: “嗯...”

通过以上介绍,我们了解了计算机系统的主要矛盾,即CPU速度过快,磁盘速度过慢. 因此两者无法直接通信,因此我们可以添加一个多余的层. 这就是记忆的作用. 这就是花费几百美元的记忆棒的作用和功能.

实际上,通常,内存的读写速度比磁盘快约数十万倍. 因此,最终有资格直接与CPU通信.

这是张照片. 让我们看一下磁盘/内存与CPU速度之间日益增大的差距(主要是由于CPU技术的飞速发展).

磁盘DRAM和cpu速度之间逐渐增大的差距.png-122.1kB

图3: 磁盘DRAM与CPU速度之间的差距越来越大

所以现在程序执行过程是这样的. CPU执行任务时,仅与内存通信. 它从存储器中获取指令/数据或写回数据. 然后,内存与磁盘通信,内存从磁盘读取数据/指令,或者内存将数据写回到磁盘.

提到添加过渡层. 这实际上类似于JVM的原理. 有关详细信息,请参阅我的另一篇有关跨平台理解的文章. 也许这是刀之剑.

内存层次结构

2g4g内存是双通道吗_什么是内存_惠普6910p内存是

我们在这里谈论的内存主要是指主内存. 它是插入主板的记忆棒. 它的读写速度比磁盘快数十万倍. 但是相对于CPU的速度仍然很慢. 然后,可以在主内存和CPU之间继续添加更快的过渡层. 因此,英特尔i7的内存层次结构就是这样.

一个存储器层次结构的示例.jpg-111.3kB

图4: 内存层次结构示例

在上一段中这么说是为了告诉您为什么我们需要内存(主内存). 如果我们了解主内存,我们自然就会了解L3,L2,L1和其他级别的高速缓存存在的含义. 对于现代计算机系统,在CPU与磁盘/主内存之间添加了多个过渡层.

严格来说,它应该称为CPU的算术逻辑单元(ALU),但是如果您仅谈论CPU,则一定可以理解它.

实际上,这是一个缓存想法. 例如,本地磁盘也等效于远程服务器的缓存. 因为当我们从Internet下载数据/文件时,速度显然比从本地磁盘读取速度慢.

在正常情况下,L5磁盘与L4主存储器之间的速度差异是数十万倍,而在L3-L0之间,每个级别的缓存的速度差异约为10倍.

我们以i7处理器为例. 它具有三级缓存. 某些低端处理器(例如i3)只有两个级别的缓存,但是原理是相同的. 在本文中,以i7的内存层次结构为例.

了解一点. CPU执行速度过快. 它在一秒钟内执行数以亿计的指令,而CPU则巧妙地完成了工作. 然后,内存必须找到将指令/数据发送到CPU以便以最快速度运行的方法. 否则,无论CPU工作多快,有什么意义?

基本思想已经被理解. 然后我们开始详细讨论细节.

RAM,ROM,总线等

看看上面的图片,我们前面提到了什么SRAM,DRAM,SSD,闪存,机械硬盘等,以及下面要讨论的总线(BUS),因此,让我们首先讨论一些基本的硬件知识.

首先,它们都属于内存,并且内存分为两类:

易失性(易失性)存储器: 包括存储器,SRAM,DRAM等,其特点是快速读写,如果断电,昂贵且存储容量小,数据将丢失. 非易失性存储器: 包括磁盘,闪存,光盘,机械硬盘,SSD等. 与易失性存储器相比,它们的读写速度较慢,但​​在断电时不会丢失数据. 存储容量比较大,价格也便宜.

与RAM相比,ROM具有更大的容量,更便宜的读写速度.

实际上,我认为调用Flash,ROM等磁盘没有问题. 毕竟,它们的功能和概念是相似的,区别仅在于它们使用的半导体技术. 闪存芯片和其他基于集成芯片的存储器具有比机械硬盘更快的读写速度,但是(在相同容量下)价格也比后者高. 与SRAM相比,DRAM非常慢,因此后者可以理解为内存.

“图4: 一个内存层次结构示例”,您走得越高,读写速度就越快,价格越贵,存储容量就越小. (您可以在淘宝上了解8G RAM,256G SSD,1T机械硬盘的价格). 与L0寄存器一样,每个寄存器只能存储一个字长的内容,但是CPU读写该寄存器所消耗的时钟周期为0. 这是最快的速度.

此外,我们可以看到计算机主板上的内存模块(L4主内存). 硬盘(L5),但看不到L3-L0. 原因很简单,它们都集成在CPU芯片中.

我们知道存储器的层次结构. 下一个问题是如何连接硬盘,记忆棒等进行通信. 这是公共汽车.

一个典型系统的硬件组成.jpg-91.1kB

图6: 典型系统的硬件组成

上图中有3条总线,IO总线,内存总线(通常称为内存总线)和系统总线. 在主板上,有一排32/64平行线. 这些电线用于连接CPU,内存,硬盘和其他设备. CPU和内存,输入和输出设备等之间的通信全部通过总线进行. 不同公交车的速度也不同.

CPU必须通过I / O桥(主板的北桥/南桥芯片组)连接到设备. 由于CPU的主频率太高,因此其时钟周期每秒振荡数亿次. 时钟周期很慢,因此它们无法直接通信.

本文是关于软件的,因此硬件部分仅涉及了一步. 读者知道这没关系. 总线承载地址,数据和控制信号. 另一个问题是如何区分不同的信号并区分与之通信的设备.

无论如何添加缓存,从硬盘到内存的数据速度都非常慢,那么这些缓存的含义是什么?

一些读者转瞬即逝,可能会想到这样的问题.

无论您如何添加缓存,无论中间是什么SRAM,DRAM的读写速度都快,但是磁盘的读写速度却很慢,因此两者之间的交互速度磁盘和主内存非常慢. 毕竟,CPU需要读取和写入磁盘数据. 整个链接的速度瓶颈是磁盘,它根本不够快,那么添加这么多级别的缓存有什么意义呢?

这是一个好问题. 让我们继续下面的讨论.

让我们看一下CPU如何从磁盘读取数据.

2g4g内存是双通道吗_什么是内存_惠普6910p内存是

读一个磁盘扇区-1.png-27.6kB

读一个磁盘扇区-2.png-138.1kB

图7: 读取磁盘扇区

在Internet上找到的图片不是很清楚. 注意每张图片中的黑线. 分三个步骤:

CPU通过系统总线和IO总线将相关命令和地址传输到磁盘,并启动磁盘读取. 磁盘控制器解析相关地址,然后通过IO总线和内存总线将数据传输到内存. 步骤2完成后,磁盘控制器将中断信号发送到CPU. (学习电子学的学生应该非常清楚中断是什么). 此时,CPU知道数据已发送到内存.

第二步中的磁盘操作非常慢,但是在第一步中CPU发送信号之后. 但是在第二步和第三步中,根本不涉及CPU. 第二步很耗时,因此在第一步中CPU发送信号之后,它就可以做其他事情. (切换到另一个线程). 因此,此时CPU仍不空闲. 在第三步中,通过中断,硬盘主动向CPU发送信号,表明所需的数据已发送到内存,然后它可以将线程切换回去,然后执行该线程的任务.

除了多线程切换之外,还有另一点可以避免CPU空闲浪费.

让我先问一个问题.

//@author :www.yaoxiaowen.com
int main(){
	//我们执行任务的代码
    return 0;
}

对于应用程序/过程,应有一个入口. (尽管我们不一定需要直接编写main函数). 入口函数内部是我们的任务代码,执行任务代码后,应用程序/进程结束. 这很容易理解,例如由测试工程师编写的测试用例. 运行后此任务结束.

但是对于某些程序(例如应用程序),您可以打开该应用程序. 没做什么. 此接口将始终存在,并且不会消失. 考虑一下为什么会这样. 因为此应用程序进程还必须有一个主条目. 执行main中的任务代码后,它应该结束. 并且程序的代码/指令的数量绝对是有限的. 但是,如果我们不主动退出,该应用程序将不会主动终止.

所以从应用程序流程的主要入口来看,确实是这样.

//@author :www.yaoxiaowen.com
int main(){
	boolean flag  = true;
	while (flag){
		//我们执行任务的代码
	}
    return 0;
}

不仅如此,在程序中,还有大量的for,while和其他循环语句.

因此,当我们将这些相关的代码指令发送到主存储器或更高级别的缓存中时,CPU在执行这些指令时自然会更快地访问它们.

执行程序时,启动阶段较慢,因为它需要从磁盘读取数据. (并且CPU在此阶段没有处于空闲和浪费状态,它将切换线程以执行其他任务). 但是,将数据发送到内存后,它将执行得更快,并且随着执行过程的进行,它可能会变得越来越快,因为这些数据可能会从L4到L3逐级发送,然后再发送到L2 ,L1

因此,对上述问题的答案已得到更清晰的解释.

所在地原则

位置对硬件和软件系统的设计和性能具有重要影响. 对于我们来说,了解内存的层次结构也是必不可少的.

程序倾向于引用与其他最近引用的数据项接近的数据项. 或最近引用的数据项本身. 我们称这种趋势为局部性原则. 它通常具有以下两种形式:

通常来说,本地性好的程序比本地性差的程序运行得更快. 从硬件到操作系统,再到应用程序,所有级别的现代计算机系统都是本地设计的.

当然,仅谈论理论是比较神秘的. 让我们看一个实际的例子.

//@author www.yaoxiaowen.com
int sum1(int array[N])
{
    int i, sum = 0;
    for(i = 0; i < N; i++)
        sum += array[i];
    return sum;
}

在此程序中,变量sum和i在循环的每次迭代中均被引用一次,因此sum和i具有更好的时间局部性.

对于变量数组,它是一个int类型的数组. 在循环期间按顺序访问该数组,因为C数组占用内存中的连续内存空间. 因此,更好的空间局部性,

让我们看另一个例子:

//@author www.yaoxiaowen.com
int sum2(int array[M][N])
{
    int i, j, sum = 0;
    for(i = 0; i < M; i++){
        for(j = 0; j < N; j++)
            sum += array[j][i];
    }   
    return sum;
}

这是一个空间位置较差的程序.

假定此数组为array [3] [4],因为C数组按行顺序存储在内存中. 因此sum2访问每个数组元素的顺序变为: 0、4、8、1、5、9 ... 7、11. 因此,其空间局部性非常差.

惠普6910p内存是_什么是内存_2g4g内存是双通道吗

幸运的是,软件编程通常自然符合本地性原则. 例如,程序的循环结构.

假设CPU需要读取一个值,即int var,并且var在L4主存储器上,则该值将依次向上发送,即L4-> L3-> L2,但是此传输过程并不简单只是传输var的四个字节的内容,但是var所在的存储块又向上传递. 为什么要通过障碍物?因为根据局部性原则,我们认为将来还会引用与var值相邻的值.

内存的层次结构. 传输数据时,将以块(块)为单位传输数据. 在整个层次结构中,级别越高,块越小.

在内存层次结构中缓存

经过这么多的口才,我应该对所谓的内存层次结构有一个基本的了解. 读者应该有一个基本的了解. 有些地方不够严谨,但是本文的目的是让每个人都了解基本思想.

归根结底,这是一个缓存概念,实际上并不复杂,

在进行应用程序开发时,对于应用程序中的活动页面,图像URL会在后台发送给我们,下载后我们会在应用程序上显示它. 目前,我们始终使用Glide,Picasso和其他图像缓存框架来下载优质图片,这些图片会缓存在手机的本地存储中. 这样,下次打开应用程序时,如果图片链接没有更改,我们将直接在手机上显示本地缓存的图片,而不是从服务器下载图片. 如果图片链接已更改,请重新下载. 你为什么要这样做?由于从服务器下载速度相对较慢,而从手机的本地存储(ROM)读取将更快.

这时,您可以回顾“图4: 内存层次结构示例”.

下图和此文本来自“计算机系统的深入理解”(CSAPP). 您可以有更严格和详细的了解.

存储器层次结构中基本的缓存原理.png-58.5kB

图8: 内存层次结构中的基本缓存原理

内存层次结构的中心思想: 第k层的更快和较小的存储设备用作第k + 1层的更大和更慢的存储设备的缓存;数据始终使用块大小作为传输单位)在第k层和第k + 1层之间来回复制;在任何一对相邻层之间传输的块大小是固定的,即,每个高速缓存级别的块大小是固定的. 但是,其他层对可以具有不同的块大小.

当程序需要k + 1级的某个数据对象d时,它首先在当前以k级存储的块中查找d. 如果d恰好在k级,则为缓存命中. 如果在第k层中没有高速缓存数据对象d,则高速缓存未命中. 当发生高速缓存未命中时,第k级高速缓存从k + 1级高速缓存中获取包含d的块. 如果第k级高速缓存已满,则它可能会覆盖现有块. (覆盖策略可以使用通用的LRU算法. )

易失性关键字

在Java和C中,有一个volatile关键字(以其他语言估算). 它的功能是确保多线程中变量的内存可见性,但是您如何理解呢?

在“图4: 内存分层结构的示例”中,我们所说的缓存结构实际上是针对单核CPU的,例如,对于四核三级缓存CPU,其缓存结构类似于这个.

多核处理器缓存结构.jpg-47.8kB

图9: 多核处理器缓存结构

我们可以看到L3由四个内核共享,但是L2和L1实际上是每个内核专用的. 如果我有一个变量var,它将同时被两个线程读取. 在两个内核上并行执行,由于我们的缓存原理,此var可能会缓存在两个内核的L2或L1中,因此读取速度最快,但是两个内核可以将var值修改为不同. 值,最后将值写回到L3或L4主存储器中,然后会出现错误.

所以volatile关键字是为了防止这种情况. 对于由volatile修改的变量,每次需要读取CPU时,至少必须从L3中读取它,并且在CPU计算结束后,它将立即写回到L3中. 这样,尽管读写速度变慢,但可以避免在每个内核的专用缓存中分别操作该值而其他内核不知道该值.

下一篇文章简介

本文是“什么是内存”系列中的第一篇文章. 下一篇文章将讨论内存的另一个重要方面. 将这两篇文章加起来,我相信每个人都会对记忆有一个全面而新的理解.

在这里,请考虑以下问题.

下一篇文章将解释这些问题,这些问题的答案非常简单. 我相信看完之后您会突然意识到的,所以请继续关注.

1109补充

什么是内存(2): 虚拟内存已发布. 欢迎发表评论和批评.

作者:

博客地址:

github:

欢迎批评我的博客内容并提供指导. 如有任何疑问,您可以评论或通过电子邮件()联系


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-299035-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...