《2022年CPU体系架构 .pdf》由会员分享,可在线阅读,更多相关《2022年CPU体系架构 .pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、CPU 体系架构在现在的工作项目中虽然没有使用到MMU 功能,但MMU 是较复杂的嵌入式操作系统运行的基础。例如Linux就不能够运行在没有MMU 的 ARM7 处理器上, ucLinux 就是为了适应没有MMU 的处理器而对Linux 进行的裁剪和修改。了解 MMU 基础知识,对理解编译链接,OS 多进程,嵌入式系统架构等有很好的帮助。由于该部分内容涉及到MMU 硬件、 CPU 架构、编译链接、OS 等知识,学习难度较大。关键字MMU 、TLB 、多任务 OS、地址空间、虚拟内存、虚拟地址 /物理地址学习顺序问题的引出、虚拟地址和物理地址、虚拟内存、OS 进程和 MMU ,MMU 运行引子早
2、期的计算机PC,或者现在使用8 位/16 位 MCU (单片机)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 的嵌入式设备,程序是直接运行在物理内存上的(SDRAM或者 NOR Flash) 。所谓直接运行在物理内存上,是指程序在运行时所访问的地址都是物理地址。例如,程序计数器PC中的值就是预取指令所在的物理内存的地址值。这种程序直接运行在物理内存上的方式简单,但是并不适应于复杂的系统,尤其是拥有多任务的OS。我们首先看看原
3、来的方式有哪些不足和缺陷。物理内存不足。例如,某个程序运行需要64K 的内存,而机器上只有32K 的物理内存。程序运行的地址不确定。同一个程序,每次被装载到内存的地址可能不一样。内存使用率低。需要运行某个程序,就需要将整个程序装入内存才能够运行。对于多任务OS,存在进程间地址空间不隔离的问题。这样一个任务失败了,可能会导致整个系统宕机。于是人们就引入了虚拟内存管理(Virtual Memory 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - -
4、- - - - Management)技术。有关虚拟内存管理(Virtual Memory Management)技术在下面会有详细的介绍。需要说明的是,上面的几点缺陷除了第一点之外,其它都是针对有OS 的系统而言的。虚拟内存管理技术的出现和操作系统的发展有本质的联系。本节可以参考程序员的自我修养-链接、装载与库第1 章 1.5 内存不够怎么办。虚拟内存管理技术随着计算机的发展,应用程序的规模逐渐增大,一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。覆盖块0 首先运行,结束时他将调用另一个覆盖块。虽然覆
5、盖块的交换是由OS 完成的,但是必须先由程序员把程序先进行分割,这是一个费时费力的工作,而且相当枯燥。人们必须找到更好的办法从根本上解决这个问题。人们找到了另外一个办法,这就是虚拟内存管理(Virtual Memory Management )技术。虚拟内存管理技术的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - 操作系统把当前使用的部分保留在内存中,而把其他未被使
6、用的部分保存在磁盘上。比如对一个16MB 的程序和一个内存只有 4MB 的机器, OS 通过选择,可以决定各个时刻将哪4M 的内容保留在内存中,并在需要时在内存和磁盘间交换程序片段,这样就可以把这个16M 的程序运行在一个只具有4M 内存机器上了。而这个16M 的程序在运行前不必由程序员进行分割。需要说明的一点,操作系统的内核是常驻内存的。围绕着虚拟内存管理(Virtual Memory Management )技术,就产生了分页技术,虚拟地址,地址空间,TLB ,MMU 等概念。分页技术虚拟内存管理技术中最常见的是分页(paging)技术, MMU就是该技术的硬件实现。虚拟地址空间划分成称为
7、页(page)的单位,而相应的物理地址空间也被进行划分,单位是页框(frame),页和页框的大小必须相同。接下来配合图片以一个例子说明页与页框之间在MMU 的调度下是如何进行映射。在这个例子中我们有一台可以生成16 位地址的机器,它的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - - - - 虚拟地址范围从0 x00000 xFFFF(64K) , 而这台机器只有32K的物理内存。 它可以运行64K 的程序, 但该程序不能一次性调入内存运
8、行。 这台机器必须有一个达到可以存放64K 程序的外部存储器(例如磁盘或是FLASH ) ,以保证程序片段在需要时可以被调用。在这个例子中,页的大小为4K,页框大小与页相同(这点是必须保证的,内存和外围存储器之间的传输总是以页为单位的),对应 64K 的虚拟地址和32K 的物理内存,他们分别包含了16 个页和 8 个页框。我们先根据上图解释一下分页后要用到的几个术语,在上面我们已经接触了页和页框,上图中绿色部分是物理空间,其中每一格表示一个页框。橘黄色部分是虚拟空间,每一格表示一个页,它由两部分组成,分别是Frame Index(页框索引 )和位 p(present 存在位),Frame In
9、dex 的意义很明显,它指出本页是往哪个物理页框进行映射的,位p 的意义则是指出本页的映射是否有效, 如上图,当某个页并没有被映射时(或称“映射无效” ,Frame Index 部分为 X ) ,该位为 0,映射有效则该位为1。我们执行下面这些指令(本例子的指令不针对任何特定机名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - 型,都是伪指令)例 1:MOVE REG,0 / 将地址 0 x0000 的值传递进寄存器REG. 虚拟
10、地址 0 将被送往 MMU ,MMU 看到该虚地址落在页0范围内(页0 范围是 0 到 4095) ,从上图我们看到页0 所映射的页框为2(页框 2 的地址范围是8192 到 12287) ,因此MMU 将该虚拟地址转化为物理地址8192,并把地址8192送到地址总线上。内存对MMU 的映射一无所知,它只看到一个对地址8192 的读请求并执行它。 MMU 从而把 0 到 4096的虚拟地址映射到8192 到 12287 的物理地址。例 2:MOVE REG,20500 虚拟地址 20500 在虚页 5(虚拟地址范围是20480 到 24575)距开头 20 个字节处, 虚页 5 映射到页框3(
11、页框 3 的地址范围是 12288 到 16383) ,于是被映射到物理地址12288+20=12308。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - 通过适当的设置MMU ,可以把 16 个页隐射到8 个页框中的任何一个,这可以解决上面提到的第二个问题程序运行的地址不确定,但是这个方法并没有有效的解决虚拟地址空间比物理地址空间大的问题。从上图中我们可以看到,我们只有8 个页框(物理地址) ,但我们有 16 个页(虚拟地址)
12、 ,所以我们只能把16 个页中的 8 个进行有效的映射。我们看看下面发生什么情况。例 3:MOV REG,32780 虚拟地址 32780 落在页 8 的范围内,从上图中我们看到页8没有被有效的进行映射(该页被打上X) ,这是又会发生什么? MMU 注意到这个页没有被映射,于是通知CPU 发生一个 缺页故障( page fault) 。这种情况下操作系统必须处理这个页故障,它必须从8 个物理页框中找到1 个当前很少被使用的页框并把该页框的内容写入外围存储器(这个动作被称为 page copy) ,把对应虚拟地址处的程序从外围存储器拷贝到刚才腾空的页框中,随后把需要引用的页(页8)映射名师资料总
13、结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - 到刚才释放的页框中(这个动作称为修改映射关系),然后从新执行产生故障的指令(MOV REG,32780 ) 。假设操作系统决定释放页框1,那么它将把页8 装入物理地址的4-8K,并做两处修改:首先把标记页1 未被映射(原来虚页1 是被影射到页框1 的) ,以使以后任何对虚拟地址4K 到 8K 的访问都引起页故障而使操作系统做出适当的动作(这个动作正是我们现在在讨论的) ,其次把页8 对应的
14、页框号由X 变为1,因此重新执行MOV REG,32780 时, MMU 将把 32780 映射为 4108。正如本节开头所述,MMU 是分页技术的硬件实现。我们大致了解了 MMU 在我们的机器中扮演了什么角色以及它基本的工作内容是什么。注意,本例中的MMU 并无针对某种特定的机型,它是所有MMU 工作的一个抽象。虚拟内存管理与OS 要理解内存在程序中是如何分配的,首先需要理解操作系统如何将内存分配给程序。计算机上的每一个进程都认为自己可以访问所有的物理内存。显然,由于同时在运行多个程序,所以每个进程不可能拥有全部内存。实际上,这些进程使用名师资料总结 - - -精品资料欢迎下载 - - -
15、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - 的是虚拟内存。举个例子,让我们假定您的程序正在访问地址为629 的内存。不过,虚拟内存系统不需要将其存储在位置为629 的RAM 中。实际上,它甚至可以不在RAM 中 如果物理 RAM 已经满了,它甚至可能已经被转移到硬盘上!由于这类地址不必反映内存所在的物理位置,所以它们被称为虚拟内存。操作系统维持着一个虚拟地址到物理地址的转换的表,以便计算机硬件可以正确地响应地址请求。如果地址在硬盘上而不是在RAM 中,那么操作系统将暂时停止您
16、的进程,将其他内存转存到硬盘中,从硬盘上加载被请求的内存,然后再重新启动您的进程。这样,每个进程都获得了自己可以使用的地址空间,可以访问比您物理上安装的内存更多的内存。在 32-位的 x86 系统上,每一个进程可以访问4GB 内存。现在,大部分人的系统上并没有4GB 内存,即使您将swap 也算上,每个进程所使用的内存也肯定少于4 GB。因此,当加载一个进程时,它会得到一个取决于某个称为系统中断点(system break)的特定地址的初始内存分配。该地址之后名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
17、- - - - - 第 9 页,共 18 页 - - - - - - - - - 是未被映射的内存用于在RAM 或者硬盘中没有分配相应物理位置的内存。因此,如果一个进程运行超出了它初始分配的内存,那么它必须请求操作系统“映射进来(map in) ”更多的内存。 (映射是一个表示一一对应关系的数学术语 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。)基于 UNIX 的系统有两个可映射到物理内存中的基本系统调用: brk: brk() 是一个非常简单的系统调用。还记得系统中断点吗?该位置是进程映射的内存边界。brk() 只是简单地 将这个位置向前或者向后移动,就可以向进程添
18、加内存或者从进程取走内存。mmap: mmap(),或者说是“内存映像” ,类似于brk(),但是更为灵活。首先,它可以映射任何位置的内存,而不单单只局限于进程。其次,它不仅可以将虚拟地址映射到物理的 RAM 或者 swap, 它还可以将它们映射到文件和文件位置,这样,读写内存将对文件中的数据进行读写。不过,在这里,我们只关心mmap 向进程添加被映射的内存的能力。munmap() 所做的事情与mmap() 相反。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页
19、 - - - - - - - - - 如您所见,brk() 或者mmap() 都可以用来向我们的进程添加额外的虚拟内存。在我们的例子中将使用brk() ,因为它更简单,更通用。摘自 Jonathan Bartlett内存管理内幕 -动态分配的选择、 折衷和实现。虚拟 /物理地址空间地址空间是一个抽象的概念,由 CPU 体系架构的地址总线决定,一般等同于CPU 的寻址范围、 x 位处理器中的x。地址空间一般分为虚拟地址空间和 物理地址空间。任何时候,计算机上都存在一个程序能够访问的地址集合,我们称之为地址空间。这个空间的大小由CPU 的位数决定,例如一个 32 位的 CPU,它的地址范围是00
20、xFFFFFFFF (4G),而对于一个64 位的 CPU,它的地址范围为00 xFFFFFFFFFFFFFFFF (64T) 。这个空间就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 18 页 - - - - - - - - - 空间 ,该空间中的某一个地址我们称之为虚拟地址。与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集,这
21、里举一个最简单的例子直观地说明这两者,对于一台内存为256MB 的 32bit x86 主机来说,它的虚拟地址空间范围是00 xFFFFFFFF(4G),而物理地址空间范围是0 x0000000000 x0FFFFFFF (256MB ) 。虚拟地址又被简称为虚地址,物理地址又被称为实地址。虚拟地址和物理地址之间的转换,又称为虚实地址转化。在没有使用的虚拟内存管理(Virtual Memory Management )技术机器上,虚拟地址被直接送到内存总线上,使具有相同地址的物理存储器被读写。而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到内存管理单元MMU 。他由
22、一个或一组芯片组成,一般存在与协处理器中,其功能是把虚拟地址映射为物理地址。下面这张图就是描述虚拟地址/物理地址和CPU 核、 MMU 、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 18 页 - - - - - - - - - 内存之间的关系。虚拟内存管理与TLB/MMU 虚拟内存管理(Virtual Memory Management )技术中重要的一点,就是将地址空间分成了虚拟地址和物理地址,在 CPU核和内存之间的地址总线上增加了一层。首先需要指出的是,TLB
23、 和 MMU 只是实现虚拟地址到物理地址转化最为常见的一种办法,还有另外的方法,如下文所描述。为了区分不同进程的存储空间,现在多任务的操作系统以及处理器都需要支持虚拟地址(Virtual Address, V A)物理地址(Physical Address, PA)转化,地址转换主要分为两种:由于整个系统的进程数不定,每个进程所需要的内存不定,以及进程切换的不确定性,因此,虚实地址转化不能简单的将某个连续大内存块映射到某个进程(Coarse-grained) ,必须采取更细粒度 (Final-grained )的映射, 即将一些可能不连续的小内存块(比如4K 大小)一起映射到进程,形成一块连续
24、的虚拟地址。为了记录这些映射信息,需要页表(Page) 。但是页表的导入引入了新的问题,那就是每次访存变成了两次,一次查询页表,得到物理地址,第二次通过物理地址取数(事实上有办法把这两个过程部分并行起来)。为了提高查询页表的速度, 现在的处理器都为页表做了一个小Cache,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 18 页 - - - - - - - - - 叫做旁路转换缓冲(Translation lookaside buffer, TLB) 。直接映射,比如直
25、接将64 位的虚拟地址高位抹去,得到物理地址。这主要用于操作系统启动时的那块内存区域。主要是由于系统刚启动时,第1 种转化所需要的页表,TLB 没有初始化(页表, TLB 其实都是操作系统管理的,倘若还用第一种,就陷入了鸡生蛋,蛋生鸡的死循环了),只能用这种最简单粗暴的办法。摘自处理器的存储子系统by Sigma。直接映射的方式在MIPS 内存模型中的kseg0 和 kseg1 就是使用的这种办法,直接将虚拟地址的高1 位或者 3 位去掉,转化成物理地址。参考和 See MIPS Runp47。下面我们只介绍使用MMU 和 TLB 的映射原理。MMU 工作原理MMU 是如何把 VA 映射成 P
26、A 的呢?内存中保存一张VA 转PA 的表, MMU 被配置为指向该表的开始的物理地址,给一名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 18 页 - - - - - - - - - 个 VA 通过 MMU 查表就可以查到PA,这是从简单处理解。实际上并不是这么简单,通常要有一个多级的查表过程,对于 ARM 体系结构是两级查表,对于一些 64 位体系结构则需要更多级。 MMU 的工作原理和机制,参考下面的各处理器架构 MMU 实例章节。X86 的 MMU 实例以 32
27、 位的 x86 系统为例。x86 采用两级页表结构,第一级称为页目录表,第二级称为页表。名称类型VA 索引 bit 位页表项名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 18 页 - - - - - - - - - 存储大小 /KB 默认页大小支持的页大小页目录表L1 10 位 31:22 1024 4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 18 页 - - - - - - - - - xxx xxx 页表L2 10 位 21:12 1024 4 4KB 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 18 页 - - - - - - - - - xxx 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 18 页 - - - - - - - - -