bglogo

香港服务器租用的误区都有哪些阿里云香港服务器要稳定吗

这篇文章主要整理了一下计算机中的内存结构,以及 CPU 是如何读写内存中的数据的,如何维护 CPU 缓存中的数据一致性。什么?是虚拟内存,以及它存在:的必要性。如有“不对请多多指教。

目前在“计算机;中,主要有两“大存储“器 SR;A、M 和 DRA;M。主存储器是由 DRAM 实现的,也就是我们!常”说的内存,在 CPU 里通常会有: L;1、L2、L3 这样“三层高速缓存是用 SRAM 实现的。

S;RAM 被,称为“静态”存储器,是因为只要处、在通电、状态,里面的数据就可以保持;存在。而一”旦断电,里面的数据就!会丢失了。

目前 SRAM 主要集成在 CPU 里面,每个 CPU 核心都有一块属于自己的 L1 高速、缓存,通常?分成指!令?缓存和数、据缓存,分开,存放 ?CPU ,使用。的指:令和数据。L2 的 ”Cache 同样是每个? CPU 核“心都有的,不过它往往不在 CPU 核心的内部。所以,L2 cache 的访问速度会比 L1 稍微慢一些。而 L3 cac?he ,则通常是:多个 CPU 核心共用的。

在 DRAM 中存储单元使用电容保存电荷的方式来存储数据,电容会不断漏电,所以需要定时刷新“充电,才能保持数据不丢!失,这也是被;称为“动态”存储器“的原因。由于存储“ DRA、M 一!个 b、it 只需要一个晶体管,所以存储的数据也大很多。

上面我们说了,对于 CPU 来说,SRAM !被称为 CPU 的 cache,CPU ?每次获取数据都会先访问 cache,如果获取不到数据则把数据加载到 cache 中进行访问。因为 cache 的大小是远远小于主存的,所以还需要在 cache 和?主存之间维护一个映射关系,这样才能正确找到数:据。

一种简单的方式是。直接映射,有点像,我们把;数据找出:来,直接放入到 map 中进行存储一样,映射通过地址和 cache 的数量进行取模后获取到 cache 中主存的地址去获取数据。

上图中画了一个地址去找 c!ache 的情况。对于 cac“he ;来说可以划分为:

有效位:cac;he 初始?值一开?始是空的,这个字段标记 ca”che 行是否有数据;

比!如对、于这、个 cache 有 1024 个字,即 4K:B。假设有一个 32 位的地址要去 cac;he 中查找:数据,那么会取地址 10 !位进行取模、找到对应。的 cache 行,然后取出 20 位、与 ”cahce 标记位进行比较,如果相等,并且有,效位?开启,那么对应请!求地址在 !cache 中命中。否则,发生缺失。

由于 。C?P!U 在。读取数:据的时候,并不是要读取”一整个 Block,而是读”取一,个他需要的数据片段, cache 中命中之后会根据低两位的偏移去数据里。面索引到对应的字。

组相联就是使用组索引代替了原来的索引,下图中表示每组有 2 :行数据,通过组索引找到对应的数据行之后通过有效位和标记对组中每一行进行检索,如果“能匹配上?就?说明,命中。

先来!看看。读操作,cac:he 在初始状态的?时候是空的,这个时候去读数据会产生 cache 缺失(cache miss)。cache 控制器会检测到缺失的发生,然后从主存中(或低一级 cache)中取回所需数据。如果命中,那么就会直接使!用。

当 cache 缺失时,对于乱序执行处理器而言依然能执行一些其他指令,但是对于顺序执行处理器,当 :cache 缺”失时、会被阻塞,临时寄存器和程序员可见的寄存器中的内容基本被冻结。

再来看看。写操作,因为 cache 是由多级”组成,所以写策略一般而言有两种:写直达(write-through”)和写回(write-back)。通过这两种策略使在 cache 中写入的数据和主存中的数据保持一致。

写直达就是在将数据写入 cache 之后同时将这个数据立马写入到主存中,但是由于”主存和 !cach;e, 本,身性,能差异,那么每次在写入主存的时候都将花费大量的时间阿里云香港服务器要稳定吗。解决办法就是加一层写缓冲(w?rite bu;ffer),这样 CPU 在将数据写入 cache 和缓冲之后可以继续执行,等到缓冲写入到主存中再释放。

但是如“果写入速度大于缓冲释放速度,那么还是会阻塞 CPU 执行。那么可?以考虑一下写回策略,这种机制会在每次写入的时候仅将新值写入 cache 中,只有当修改过的块。被替换;时才需要写到较、低层存储结构中。

由于现在都是;多核” CPU,并且, cache 分了多级,并且数据存在共享的情况,所以需要一种机制保证在不同的核中看到的 cache 数据必须时一致的。最常用来处理多核 CPU 之间的缓存一致性协议就是 。MESI 协议。

MESI 协议,是一种”叫作写失效(!Wr!i?te ;In;validate)的协议。在写失效协议里,只有一个; C。PU 、核心负责?写入数“据,其他的、核心,只是同步读取到这个写入。在这个 CPU 核心写入 cache 之后,它会去广播一个“失效”请求告诉所有其他的 CPU 核心。

“已修改”和“已失效”比较容易理!解,我们来看?看 独占”和“共享” 两。个状态。

在独占、状态下,对应的 ca;che; Line 只加载到了当前 CPU 核所拥有的 cache 里。其他的 CPU 核,并没有加载对应的数据到自己的 cache 里。这个时候,如果要向!独占“的 c、ach;e Block 写,入数据,我们可以自由地写入数据,而不需要告知其他 CPU 核。

那么对、应的,共享状态就是、在多核中同:时加载了同一份数据。所以在共享状态下想要修改数据要先向所有的其他 CPU 核心广播一个请求,要求先把其他 CP”U 核心里面的 cache ,都变成无效的状态,然后再更新当前 cache 里面的数据。

在我们日常使用的 Linux 或者 Windows 操作系统下,程序并不能直接访问物理内存。程序都是通过虚拟地址 VA(virtual address)用地址转换”翻译成 PA 物理地址(physical address)才能获取到数据。也就是说 CPU 操作的实际上是一个虚拟地址 VA阿里云香港服务器…稳定吗

想要把。虚拟内存地址,映射到物?理内存”地址,最直观?的办法,就是来”建一张映射表。这个映射表在计算机中叫页表(Page Table;)。

在”查找页表?的时候,会将虚拟地址分成页号(Directo!ry)和偏移量(?Offset)两个部分。前面的高位,表示”内存地址的页号。后面的低位,表示内存地址里;面的!偏移量。

香港服务器租用的误区都有哪些阿里云香港服务器要稳定吗

查找方式和上面说的组相联类似,首先使用虚拟页号作为索引去页表中找到对应“的物理页号,页表中还会有 1 位表示有效位,如果该位无效就不在主存中,发生一次缺“页;如果有效,那么就可以拿到对应的物理页号获取到对应的物理页位置,再根据偏移量得到物理内存、地址。

如果有效位关闭,那么该页就只存在磁盘上的某个指定”的磁盘。地址。缺页会触发?缺页异常,然后在闪存或磁盘中找到该页,将其,放入到主存 D“RAM 中。

如果主存满了,那么会选择一个牺牲页,大多数操作系统会使用 LRU 替换策略来进行页的替换。操作系,统会查找最少使用的页,被替换的页会写入磁盘:的交换区(swap 分区)。sw、ap 分区通常被称为交换分区,这是一块特,殊的硬、盘空间,即当。实际内存不够?用的时候,操作系统会从内存。中取出一部分暂时不用的数据,放在交换。分区中,从而为当!前。运行,的程序腾出足够的内存空间。

在下图中假设选择将存放在主存中的 VP6 进行替换,将 VP6 替换为 VP:3。如果被替代的 VP6 已经被修改了,那么内核会将它复制回磁盘。

由”于局?部性(l“ocality)的存在,程序一般而言会“在一个较小”的活动页面集合上工作,页的切换开销只存在于程序启动时将页面调度到内存中,接下来的程序都会页命中。但是如果代码的工作集太;大,超过了物:理内存大小,那么页面就会不停地换进换出,产生抖动。

假设我们:现在是一个 ;32 位的地址空间、4KB 的页面和一个 4 字节的 PTE,那么需要一个 4MB 的页表常驻在内存中,并且这个页表是每个进程都独占一份,所以会造成:很“大的内存浪费,我们需要一种方式来优化我们的页表空间存储。

想一下虚拟内存空间结构,整个。 4 GB 的空间,操作系统用了 1 GB,从地址 0XC0000000 到 0XFFFFFFFF, 剩余 3 :GB、 留给用”户空间,其实很多程序根本用不到这么大:的空间,对于 64 位系统,每个进程!都会拥,有 256 TiB 的内,存空间,那就更。加用不、上了。

那,么对于用不上!的空间,我们可以不可以不把它加载到页表里面,等到用这块空间的时候才在页表里面给它分配一个页表项,是不是就可以节省大量空间。

在程序运行的时候,内存地址从顶部往下,不断分配占用的栈的空间。而堆!的空间,内存。地址则是?从底部“往上,是不断分配占用的。所以,在一个实际的;程”序进程里面,虚拟内存占用的地址空间,通常是两段连续的空间。而多级页表,就特别适;合这样。的内存”地址分布。

假设 32 位虚拟地址空间被划分位“ 4KB :每页香港服务器租用的误区都有哪些阿里云香港服务器要稳定吗,每个条目都、是 ;4 字节,那么我们可以让,第一级页表中的每个 PTE !(页表项 page table en、try)!负责映、射虚拟地“址空间、中一?个 !4M:B 的片,这个片由 1024 ,个连续页面组:成,表示二:级页表。如果地址。空间是。 4GB,那么 1024 个一级页表项就可以覆盖整个,空间。

如下图所示,内存前 2K 个页面给代码和数据,接下来 6K 个页面未分配,在接下来 1023 个页面!也未分配,接下来一个页面分!配给“用户栈。

这种方法从两个方面减少了内存占。用。第一,如果一级页表中的一个 PTE” 是空的,那么相应的二级页表就?根本不会存在。由于很多程序占用内存实际远小于页表所能表示的大。小,所以可以节约很大空间的、页:表项资源;第二,只有一级页表!才需。要!总”是在主。存中,二级页表会在腾讯云中国香港服务器购买。需要的时,候创、建或销毁,只有最经常使用的二级页表才需要缓存,在主存?中,这就减,少了主存的压力。

首先会找到 4 级页表里面对应的条目(Entry)。这个条目里存放的是一张 3 级页表所在的位置。4 级页面里面的每一个条目,都对应着一张 3 级页表,所以我们可能有多张 3 级页表。

找到对应这张 3 级页表之后,我们用 3 级索引去找到对应的 3 级索引的条目。3 级索引的条目再会指向一个 2 级页表。依次拿到 1 级页!表里面存储的物理页号,我们同样可以用“页号 + 偏移量”的方式,来获取最终的物理内存地址。

MMU 生成页表项:地址 PTEA,并从高速缓存/主存请求获取页表项 PTE;

一次简单的数据获取需要多次经过多次与内存的交互,如果是 4 级!页表,那么就需要访问 ,4 次内,存才能;获取到对应的物理页号。如果是缺页,还需:要有一个 PTE 的置换或加载过程。在开:头也讲了,访问内存的性能,其“实很低的,实际上这严重影响了 CPU 处理性能。

程序所需要使用的指令,都顺序存放在“虚拟。内存里。面。我们执行的指令,也是一”条条”顺序执行!下去、的。也就是说,我们对于?指令地:址的访问,存在前、面几讲:所说:的“空间!局部性”和“时间、局部性”,而需要访:问的数据。也是,一样的。我们连、续执行!了 5 条指令。因为内存地址都、是连续的,所以我们可以通过加缓存的方法,把之前内存转换的地址缓?存下来,减少;与内存的交互。

MMU 将这个虚拟地址翻译成一个物理地址,并且将它发送到高”速缓。存/主存;

由于操”作虚拟内、存实际,上就是操作;页表,从上面讲解:我!们知道,页表“的大小其实和物理内。存没?有关系,当物理内存不够用时可以通过页缺失来将需要的数据置换到内存中,内存中只、需、要存放众多程序中活跃的那,部分,不需要:将整个程序加载到内存里面,这可以让小内存的机器也可以运行程序。

虚拟内存可以为正在运行的进程提供独立的内存空间,制造一种每个进程的内存都是独立的假象。虚拟内存空间只是操作系统中的逻辑结构,通过、多层的页,表结?构来转换虚拟地。址,可以让多个进程可以通过虚拟内存共享物理内存。

并且独立的虚拟内存空间也会简化内存的分”配过程,当用户程序向操作系统申请:堆。内存时,操作系统可以分配几个连续的虚拟页,但是这些虚拟页可以对应到物理内存中不连续的页中。

再来就;是提供!了内存”保护机制。任何“现代计算机;系统必!须为操作系统”提供手段来控制对内存系统的访问。虚拟内存中页表中页存放了读权限、写权限和“执行权限。内存管理单元可以决定当前进程是否有权限访”问目标的物;理内存,这样我们就最终将权限管理的功能全部收敛到虚拟内存系统中,减少!了可能出现风险的代码路径。

从上面我们可以知道 CPU 的缓存结构一般由 L1、L2香港服务器租用的误区都有哪些、L3 三层缓存结构组成,CPU、 读取数据只与缓存交?互,不会直接?访问主存,所以 CPU 缓存和主存之;间维护了一套映射关系。当被查找的数据发生缺失时,需要等待数据从。主存加载到缓存中,如果缓、存满了,那么还需要进行淘汰。如果被淘汰的数据是脏数据,那么还需要写回!到主存中,写的策略有写直达(write-through)和写回(write-back)。

由于现在计算机中的 CPU 都是多核的,并且缓存数据“是“由多核共享”的,所以就有了类似 MESI 这样的协议来维护一个状态机保证数据在多核之间是一致的。

为了;访问数据?安全,便捷,迅速”所以加了。一层虚拟内存,每个程序在启动的时候都会维护一个页!表,这个页表维护了一套映射关系。CPU 操作的?实际上是虚拟地址,每次需要 MMU 将虚拟地址在页表上映射成物理地址后查找!数据。并且为了节省内存所以设计了,多级页表,为了从页表中查找数据更快加了一”个缓存芯片 TLB。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
bglogo