一.存储器管理
大部分的小规模嵌入式应用中,处理器与外部存储芯片都是直接连接的,然而有时保持事物的原有次序很重要,这就涉及到存储器的管理技术。
- 存储器管理解决的问题就是逻辑地址与物理地址之间的映射关系:
- 物理存储器 > 逻辑存储器:
当处理器的逻辑地址空间小于系统的物理地址空间时,处理器的逻辑空间必须被映射到系统的物理存储空间之上。它有时被称为后备存储器,我们常常为了目的选择合适的处理器,不过这种处理器地址空间有限,对于你的应用来说太小了。通过后备存储器的使用,处理器的地址空间会扩大到超过逻辑地址范围。 - 逻辑内存 > 物理内存:
当处理器的逻辑地址空间非常巨大时,用物理存储空间去填充是不切实际的。磁盘上一些空间也许可以被用作虚拟存储器,这样处理器看起来就拥有比芯片内部更多的存储空间。
存储管理的任务是:判断存储访问的存储器是物理存储器还是虚拟存储器;将磁盘中的虚拟存储空间上的内容存储到真正的内存中,并完成相应的地址变换。 - 内存保护
也许你想阻止一些程序访问某些存储区域。使所有I/O访问操作都通过操作系统进行,保护机制可以阻止软件对I/O空间的访问。 - 任务隔离
多任务系统中,任务间应该彼此不受到干扰,而且两个不同的任务应该能够使用相同的逻辑地址,可以通过内存管理机制将逻辑地址变换为各自的物理地址。
- 物理存储器 > 逻辑存储器:
二.虚拟存储器
虚拟存储器是指在磁盘上的划分的页单位,然后通过页表与物理存储器(一般指内存)形成一一映射关系。
分段
通过把指令和数据与存储器的不同区域关联,基于存储器单元的使用方式来区分他们,这些区域称为段:代码段,数据段,栈段。
段地址和偏移地址
++++
物理地址 = 段地址*16+偏移地址
段式寻址
- 在16位cpu模式下要寻址1M的物理地址空间,单个寄存器寻址是行不通的。因此,出现了在16位cpu机制下的段式存储机制。
- 段式存储机制就是将段地址与偏移地址通过某种机制运算,来得到20位地址空间的寻址。
- 运算机制是将段地址左移4位(也就是乘以16),然后变为20位地址,然后由偏移地址来确定由左移四位造成的地址间隙成块而无法访问块内地址的问题。
- 偏移地址的作用就是计算实际寻址的物理地址到段基址的距离有多大。
线形地址
通过将 逻辑地址(SEG:OFFSET)通过分段管理机制转化为线形地址。
- 在没有打开分页机制的时候,线性地址等同于物理地址
- 打开分页管理机制之后就,就是将线性地址通过分页管理机制转化为物理地址,其中段号定义了一段线形地址,这段线形地址的最大空间为2n2^n2n,n为地址数。通过段号来将整个内存空间分为互相独立的段,来为不同的进程使用。
页面映射概念
在所有的存储管理系统中,内存中的字按页分组,因而地址可以看做由两部分组成:页号和页内的字号。 MMU将逻辑地址页转换为物理页,而字号则无需改变。实际上整个地址就是页号与字号的拼接。
页访问步骤
概念:PDE(页目录项or目录条目)前八位,PTB(页表条目)紧邻的7位最后的偏移量是在找到页之后才考虑的问题。
n个最高位在目录中提供了一条目录,它反过来又提供了页表的基址。目录的地址永久的存储在存储器中,它是由称为目录寄存器(DR)的寄存器的内容提供的。接下来的Np位与目录的内容提供的地址相结合,提供了页表中的一个条目。
翻译设备纯粹是硬件。在实际中,翻译表保存在具有缓存系统的存储器中,使得存取时间与想要的性能兼容。检测设计依赖于一种缓存,称为翻译后备缓冲区(TLB)
访问页有三种情况存在:
- TLB在t时间内提供物理地址。这个物理地址是即时可用的
直接就在翻译表中,命中 - TLB不包含页编号。在页表中讲页引用为有效的,并且在目录中中也将页表引用为有效的(缺页)
目录提供了页表编号nt,它存储在页帧编号寄存器中(pfn)。访问页表提供ppn np,它也存储在pfn寄存器中 - 由PDE字段(8个最高有效位)提供的目录条目指示无效的页表,因为它是缺少的。(缺页表)
把控制让给操作系统。它从大容量存储单元中获取对应的页表。然后更新PDE提供的目录条目,把访问在执行一遍。从目录中获取PFN。利用PTE(页表条目)字段,可以访问页表中的条目。
后备存储器
逻辑地址空间小于物理地址空间,存储管理形式最为简单。系统将每一页的大小设计成逻辑地址空间,只要MMU提供页号就行。
很多小型系统,后备存储器可以通过锁存数据总线,将数据总线作为物理内存的附加地址来实现。
地址变换
逻辑地址空间大于物理地址空间时,MMU可以提供地址总线上半部分的变换如图:
MMU包含一个地址变换表,可以把输入地址重新映射到不同的输出地址上。为了改变地址变换表,处理器必须能够访问MMU。