西甲联赛买球

Welcome!

西甲联赛买球

行业动态 >>西甲联赛买球 > 行业动态 >

行业动态 NFV关键技术:X86架构基础(上篇)

文章来源:admin 时间:2021-08-30

Labs 导读 行业动态

标准服务器技术是网络功能虚拟化(NFV)实现的一个关键因素,晓畅一些x86架构的基础知识对行家后续晓畅电信云关键技术,尤其是掌握虚拟化技术原理和关键优化方案是必须具备的。本文主要从x86架构的CPU指令集添强,内存管理、休止和变态、IO架构等片面进走阐述,以及包含一些基础IT的基本概念的讲解。

8月20日,胡润研究院发布《2021胡润世界500强》,列出了世界500强非国有企业,按照企业市值或估值进行排名。这是胡润研究院第二次发布“胡润世界500强”榜单。 

8月19日美股盘后,中国金融技术在线平台360数科发布了2021年第二季度业绩报告。财报显示,该公司当季营收为40.02亿元,同比增长19.8%;净利润为15.48亿元,同比增长76.6%,净利润率为38.7%。

8月20日凌晨,恒大集团针对被人民银行和银保监会的约谈发布声明称,该公司将坚决依法依规做好重大事项信息披露,绝不传播并及时澄清不实信息;以最大决心、最大力度保持公司经营稳定,化解债务风险,维护房地产市场和金融稳定。

8月20日,滴普科技宣布完成1亿美元B轮融资。本轮融资由兴投北京及国泰君安国际联合领投,交银国际、浦银国际、银盛泰资本及光源资本等老股东持续跟投。

8月19日晚间,全球化消费电子品牌企业安克创新发布了2021年半年度报告。

1、x86-64指令集的添强

Intel的x86体系组织是世界上最通走的处理器架构,从1978年8086/8088处理器问世到现在的Core i7和Core i9,以及Xeon系列处理器,Intel x86体系组织已经在CPU周围叱咤40众年。

x86-64是x86架构的延迟产品,是一栽64位微处理器架构及其响答的指令集。在x86-64展现以前,Intel与惠普说相符推出IA-64架构,此架构不与x86兼容,且市场逆答冷淡。于是,与x86兼容的x86-64架构答运而生。1999年,AMD首次公开64位指令集为IA-32挑供扩展,称为x86-64(后来改名为AMD64)。此架构后来也为Intel所采用,也就是现在的Intel 64。

x86-64能有效地把x86架构移植到64位环境,并且兼容原有的x86行使程序,市场前景汜博。外界操纵x84-64或者x64称呼这个64位架构,以保持中立,不公正任何一家厂商。

AMD 64指令集主要特点有:声援64位通用寄存器、64位整数及逻辑运算和64位虚拟地址。

Intel 64架构添入了额外的寄存器和其他改良的指令集,可使处理器直接访问超过4GB的内存,批准运走更大的行使程序。议定64位的存储器地址上限,其理论存储器容量上限达16EB,现在大无数操作编制和行使程序已基本声援完善的64位地址。

2、x86的内存架构

硬件架构中最复杂、最中央的片面就是其内存架构。此片面详细内容由于篇幅有限无法详细睁开,面向的人员主要包括CPU架构设计、操作编制开发和内核底层优化等周围,至于运维方面后期倘若不做内核优化的同事晓畅即可,如感有趣可参考《手把手教你设计CPU-RISC-V处理器》、《嵌入式操作编制原理》和《处理器虚拟化技术》等书籍。

2.1 地址空间

地址空间是一切可用资源的荟萃,吾们暂时将它望做一个大大的数组,那么地址就是这个数组的索引。地址空间能够划分为物理地址空间和线性地址空间两大类。

2.1.1 物理地址空间

硬件平台清淡划分为CPU、内存和其他硬件设备三个片面。其中,CPU 是整个硬件平台的主导者,内存和其他硬件设备都是CPU 能够操纵的资源。这些资源组相符在一首,分布在CPU的物理地址空间内,CPU操纵物理地址索引这些资源。物理地址空间的大幼由CPU实现的物理地址位数所决定,物理地址位数由CPU经过MMU(Memory Management Unit,内存管理单元)转换后的外埠址总线位数决定。外埠址总线位数与CPU处理数据的能力(即CPU位数)异国一定的有关,例如:16位的8086 CPU具有20位地址空间。

一个硬件平台只有一个物理地址空间,但每个程序都认为本身独享整个平台的硬件资源。为了让众个程序能够有效地相互阻隔,也为了它们能够有效地操纵物理地址空间的资源,引入了线性地址空间的概念。

2.1.2 线性地址空间

线性地址空间的大幼由CPU实现的线性地址位数决定,线性地址位数由CPU的腹地址总线位数决定。由于CPU的腹地址总线与CPU的实走单元直连,因而,腹地址总线位数往往与CPU位数相反,倘若是32位处理器,那么它就实现了32位线性地址,其线性地址空间为4GB,倘若是64位处理器,那么它的线性地址空间的为2的64次方,即16384GB。必要仔细的是,线性地址空间的大幼与物理地址空间的大幼异国一定有关,Intel的PAE平台具有4GB的线性地址空间,而其物理地址空间为64GB。但是,线性地址空间会被映射到某一片面物理地址空间或整个物理地址空间。也就是说,线性地址空间幼于等于物理地址空间。

CPU负责将线性地址空间转换成物理地址空间,保证程序能够切确访问到该线性地址空间所映射到的物理地址空间。在当代操作编制中,每个进程清淡都拥有本身的私有线性地址空间。一个典型的线性地址空间组织如下图所示。

线性地址空间 2.2 地址

地址是访问地址空间的索引。按照访问地址空间的分别,索引能够分为物理地址和线性地址。但由于x86稀奇的段机制,还存在一栽额外的地址——逻辑地址。

2.2.1 逻辑地址

逻辑地址是程序直接操纵的地址(x86无法禁用段机制,逻辑地址不息存在)。逻辑地址由一个16位的段选择符和一个32位的偏移量(32位平台)构成。下面以详细程序为例进走注释。比如:吾们写下面一段c说话代码:

int a = 100;   # 定义一个整型变量 a int *p = &a;   # 定义一个整型指针p,指向变量a在内存中的地址 

上述语句中的指针变量p存储的就是变量a的逻辑地址。实际上,p中存储的仅是逻辑地址的偏移片面,而偏移对答的段选择符位于段寄存器中,并异国在程序中表现。

2.2.2 线性地址

线性地址又称虚拟地址。线性地址是逻辑地址转换后的效果,用于索引线性地址空间。当CPU操纵分页机制时,还必要将线性地址转换成物理地址才能访问物理平台内存或其他硬件设备;当分页机制未启用时,线性地址与物理地址相通。

2.2.3 物理地址

物理地址是物理地址空间的索引行业动态,是CPU挑交到总线用于访问物理平台内存或其他硬件设备的最后地址,在x86下,物理地址未必也被称为总线地址。

按照上面的描述,吾们能够总结如下:

分段机制启用,分页机制未启用:逻辑地址--->线性地址=物理地址 分段机制、分页机制同时启用:逻辑地址--->线性地址--->物理地址 3、x86内存管理机制

x86架构的内存管理机制分为两片面:分段机制和分页机制。分段机制为程序挑供彼此阻隔的代码区域、数据区域、栈区域,从而避免了联相符个处理器上运走的众个程序互相影响。

分页机制实现了传统的按需分页、虚拟内存机制,能够将程序的实走环境按需映射到物理内存。此外,分页机制还能够用于挑供众义务的阻隔。

分段机制和分页机制都能够议定配置,声援浅易的单义务编制、众义务编制或共享内存的众处理器编制。必要强调的一点是,处理器不论在何栽运走模式下都不能够不准分段机制,但是分页机制却是可选选项。

3.1 分段机制

分段机制是x86架构下的质朴内存管理机制,不能够禁用。晓畅分段机制有利于对后续内存虚拟化原理和优化方案有更深的晓畅。

分段机制将内存划分成以基地址(Base)和长度(Limit)描述的块。段能够与程序最基本的元素有关首来,程序能够浅易地划分为代码、数据和栈,段机制就有响答的代码段、数据段和栈段。

一个程序按照分段机制在内存中由逻辑地址、段选择符、段描述符和段描述符外4个基本片面构成。

当程序操纵逻辑地址访问内存的某个片面时,CPU议定逻辑地址中的段选择符索引段描述符外,进而得到该内存对答的段描述符(段描述符描述段的基地址、长度以及读/写、访问权限等属性新闻) 按照段描述符中的段属性新闻检测程序的访问是否相符法,倘若相符法,再按照段描述符中的基地址将逻辑地址转换为线性地址。

这个流程能够用如下图示进走总结:

内存分段机制

段选择符是逻辑地址的一个构成片面,用于索引段描述符外以获得该段对答的段描述符。段选择符行为逻辑地址的一片面,对行使程序是可见的。但是,正如前线在逻辑地址中介绍的,行使程序中只存储和操纵逻辑地址的偏移片面,段选择符的修改和分配由连接器和添载器完善。

为了使CPU能够迅速地获得段选择符,x86架构挑供了6个段寄存器存放现在程序中各个段的段选择符。这6个段寄存器别离如下:

CS(Code-Segment,代码段):存放代码段的段选择符。 DS(Data-Segment,数据段):存放数据段的段选择符。 SS(Stack-Segment,栈段):存放栈的段选择符。 ES、FS、GS:能够存放额外三个数据段的段选择符,由程序解放操纵。

由于段选择符的存在最后是为了索引段描述符外中的段描述符,为了添速段描述符的访问,x86架构在分别的段寄存器后增补了一个程序不走见的段描述符寄存器。当响答段寄存器中添入一个新的段选择符后,CPU自动将该段选择符索引的段描述符添载到这个不走见的段描述符寄存器中。各个段寄存器的组织如下:

段寄存器

段描述符描述某个段的基地址、长度以及各栽属性(例如,读/写属性、访问权限等)。这是分段机制的中央理维。当CPU议定一个逻辑地址的段选择符获得该段对答的段描述符后,会操纵段描述符中各栽属性字段对访问进走检查,一旦确认访问相符法,CPU将段描述符中的基地址和程序中逻辑地址的偏移量相添就得到程序的线性地址。

正如前线讲到的,x86架构在每个段寄存器后增补了一个程序不走见的段描述符寄存器,每当段寄存器添入一个新的段选择符后,CPU自动将该段选择符索引的段描述符添载到这个段描述符寄存器中。后续只要不发生段寄存器的更新操作,CPU就不再查询段描述符外而是直接操纵这个段描述符寄存器中的值,从而添快CPU的实走效果。

x86架构挑供了两栽段描述符外:GDT(全局段描述符外Global Descriptor Table)和LDT(本地段描述符外Local Descriptor Table)。详细选择哪个段描述符外,由段选择符中的TI字段决定,当TI=0时,索引GDT,当TI=1时索引LDT。编制中至稀奇一个GDT能够被一切的进程访问。与此同时,编制中能够有一个或众个LDT,能够被某个进程私有,也能够被众个进程共享。

GDT是内存中的一个数据组织。浅易地讲,能够将GDT望成是一个数组,由基地址(Base)和长度(Limit)描述。

LDT是一个段,必要用一个段描述符来描述。LDT的段描述符存放在GDT中,当编制中有众个LDT时,GDT中必须有对答数目的段描述符。

为了添速对GDT和LDT的访问,x86架构挑供了GDTR寄存器和LDTR寄存器。关于这两栽寄存器的详细描述如下:

GDTR:包括一个32位的基地址(Base)和一个16 位的长度(Limit)。 LDTR:组织与段寄存器相通(同样包含对程序不走见的段描述符寄存器)。

议定段选择符索引GDT/LDT的过程如下图所示:

段选择符索引

x86架构内存管理平分段机制总结:

1)在程序添载阶段,该进程LDT的段选择符最先索引GDT,获得LDT的段描述符并将其添载到LDTR寄存器中。此外,该进程的CS、DS、SS中添入响答的段选择符,CPU按照段选择符的TI字段索引响答的段描述符外,获得响答的段描述符,并添载入CS、DS、SS对答的程序不走见的段描述符寄存器。

2)程序实走到读/写内存中的数据时,把程序中响答变量的逻辑地址转换为线性地址:

进走必要的属性、访问权限检查; 从DS对答的段描述符寄存器获得该段的基地址; 将变量的32位偏移量和段描述符中的基地址相添,获得该变量的线性地址。 3.2 分页机制

分段机制的方针是将内存中的线性地址空间划分成以基地址和长度描述的众个段进走管理,程序对答的逻辑地址以基地址和偏移量来描述,实现逻辑地址到线性地址空间的映射。而分页机制是操纵单位“页”来管理线性地址空间和物理地址空间的映射有关。同时,分页机制批准一个页面存放在物理内存中或磁盘的交换区域(如Linux下的Swap分区,Windows下的虚拟内存文件)中,程序能够操纵比机器物理内存更大的内存区域,从而实现当代操作编制中虚拟内存机制。(仔细:操作编制的虚拟内存原理和映射有关和后面要讲的计算虚拟化技术中内存虚拟化技术基原形反,只是VMM实眼前又众了一层嵌套)。

在x86架构下,页的典型大幼为4KB,于是一个4GB的线性地址空间被划分成1024×1024个页面,参见本文线性地址空间暗示图。物理地址空间的划分与此相通。x86架构批准大于4KB的页面大幼(如2MB、4MB、1GB)等。

分页机制的中央理维是议定页外将线性地址转换为物理地址,并相符作旁路转换缓冲区(Translation Lookaside Buffer,后面简称为TLB)来添速地址转换的过程。分页机制主要由页外、CR3寄存器和TLB三个部件构成,如下图所示。

内存分页机制

页外是用于将线性地址转换成物理地址的主要数据组织。一个地址对齐到页边界后的值称为页帧号(或者页框架),它实际上就是该地址所在页面的基地址。比如:一个页大幼为4kB,那么第一个页帧号就是0,第二个页帧号就是4097,挨次类推。线性地址对答的页帧号叫做虚拟页帧号(Virtual Frame Number,下面简称为VFN),物理地址对答的页帧号叫做物理页帧号(Physical Frame Number,下面简称为PFN)或机器页帧号。页外实际上是存储VFN到PFN映射的数据组织。

在传统的32位的珍惜模式中(未启用物理地址扩展PAE功能),x86处理器操纵两级转换方案,在这栽方案中,CR3寄存器指向一个4KB大幼的页现在录外,页现在录中共有1024个记录,每一项记录大幼4B空间,都指向一个4KB大幼的页外,页外中也有1024项,每项大幼4B空间,因而,末了整个线性地址空间大幼就是1024 个长为4KB的页,即统统4GB大幼的空间。未启用PAE 的4KB大幼的页面如下图所示。

页外组织

页现在录项(Page Directory Entry,下面简称为PDE),包含页外的物理地地址,PDE存放在页现在录外中。

页外项(Page Table Entry,下面简称为PTE):包含该线性地址对答的物理页帧号PFN,PTE存在页外中,确定物理页帧号PFN 后,再将线性地址的0~11位偏移量与其相添,就能够确定该线性地址对答的物理地址。

虚拟内存实现的关键在于PDE和PTE都包含一个P(Present)字段:

当P=1时,物理页面存在于物理内存中,CPU完善地址转换后能够直接访问该页面。 当P=0时,物理页面不在物理内存中(在硬盘的交换分区中),当CPU访问该页面时,会产生一个缺页舛讹休止,由操作编制的缺页处理机制将存放在硬盘上的页面调入物理内存,使访问能够不息。同时,由于程序的片面性特点,操作编制会将该页面附近的页面一首调入物理内存,方便CPU的访问。因而,为了缩短内存占用,请求程序开发人员尽量少的操纵全局索引或递归调用等机制。

P=0时的PDE和PTE的1~31位都将为操作编制挑供物理页面在硬盘上的新闻,这些位存储着物理页面在硬盘上的位置。

启用物理地址扩展(之后简称为PAE)后,页外组织将发生响答的转折。页外和页现在录的总大幼仍是4KB,但页外和页现在录中的外项都从32位扩为64位,以操纵附添的地址位。如许,页外和页现在录都只有512个外项,变成了正本方案的一半,因而又添入了一个级:CR3指向页现在录指针外,即一个包含4个页现在录指针的外。启用PAE 的4KB大幼的页面操纵的三级页外如下图所示:

三级页外组织

CR3寄存器也称为页现在录基地址寄存器(Page-Directory Base Register,PDBR),存放着页现在录的物理地址。一个进程在运走前,必须将其页现在录的基地址存入CR3,而且,页现在录的基地址必须对齐到4KB页边界。启用PAE时,CR3指向页现在录指针外,每一项都指向一个页现在录外,共有4个页现在录外。

为了挑高地址转换的效果,x86架构操纵TLB对比来用到的页面映射进走缓存。TLB中存放着VFN到PFN的转换记录,当CPU访问某个线性地址时,倘若其所在页面的映射存在于TLB中,不必查找页外,即可得到该线性地址对答的PFN,CPU 再将它与线性地址的偏移相添,就能得到末了的物理地址。

x86架构内存管理中央分页机制总结:

1)CPU访问一个线性地址,在TLB中进走匹配,倘若地址转换在TLB中,则跳到步骤6。否则,发生了一次TLB Miss(TLB 缺失),不息步骤2。

2)查找页外,倘若页面在物理内存中,则跳到步骤4。

3)倘若页面不在物理内存中,则产生缺页舛讹,由操作编制的缺页舛讹处理程序进走以下处理。

将页面从磁盘复制到物理内存中。 更改对答的PTE,竖立P 位为1,并对其他字段进走响答的竖立。 刷新TLB 中对答的PTE。 从缺页舛讹处理程序中返回。

4)此时,页面已经存在于物理内存中,并且页外也已经包含了这个映射。重新在TLB中进走匹配,倘若地址转换在TLB中,则跳到步骤6。否则,发生了一次TLB Miss(TLB 缺失),不息步骤5。

5)CPU重新查页外,把对答的映射插入到TLB中。

6)此时,TLB已经包含了该线性地址对答的PFN。将PFN和线性地址中的偏移量相添,就得到了对答的物理地址。

NFV关键技术:x86架构基础(下篇)

【本文为51CTO专栏作者“移动Labs”原创稿件,转载请有关原作者】

戳这边行业动态,望该作者更众益文

Powered by 西甲联赛买球 @2013-2021 RSS地图 HTML地图