计算机组成原理(三)--存储器的层次结构 (5)

eg:假设主存的容量为512K16位,cache容量为409616位,块长为4个16位字,访存地址为字地址。
(1)直接映射下,设计主存地址格式:
解:直接映射是主存的每块映射到cache的固定块。所以,主存地址应包含cache块号的标记。
因为按字编址,每个字为16位,所以主存地址容量为\(2^{19}\),cache容量为\(2^{12}\)。所以主存地址为19位,cache地址为12位。因为每块4个字,所以快内地质占2位。cache块号占10位,主存地址的剩余7位为标记位
tag为(7)|cache块号(10)|cache快内地址(2)
(2)全相连方式下,主存地址的设计
解:全相联方式下,主存任意一块可以映射到cache任意一块,所以主存地址脂粉味2部分,tag和快内地址。
快内地址占2位,tag占17位
(3)二路组相联模式下,主存地址的设计
二路组相联模式下,每一个分组有2行,快内地址占1位,所以有\(2^{12}/2/2=2^{9}\)个分组,所以组号占9位。剩下tag位占19-9-2=8位

3.7 虚拟存储器

一. 页式虚拟存储

概念
(1)程序员在比实际主存大得多的逻辑地址空间中编写程序
(2)程序执行时,把当前需要的程序段和数据块掉入主存,其他暂不使用的放在磁盘上
(3)执行指令时,通过硬件将逻辑地址转化为物理地址。虚拟地址高位为虚页号,低位为页内偏移地址
(4)当程序发生数据访问或程序访问失效(缺页时),由操作系统把信息从磁盘调入主存中

分页
(1)基本思想:
内存被分成固定长度且长度较小的存储块(页框,实页,物理页)
每个进程也被划分为固定长度的程序块(页,虚页,逻辑页)
通过页表,实现逻辑地址想物理地址的转化
(2)逻辑地址
程序中指令所使用的地址(进程所在地址空间)
(3)物理地址
存放指令或数据的实际内存地址

“主存-磁盘”层次
(1)与“cache-主存”层次相比,页大小远比cache的行大小要大(windows中的页位4k)
(2)采用全相联映射方式:磁盘中的任意一个页能用射到内存中的任意一个页
因为缺页导致中断时,操作系统从磁盘拿数据通常要耗费几百万个时钟周期。增大页大小,可以减少缺页中断
(3)为什么让软件处理“缺页”
因为访问磁盘需要好粉几百万个时钟周期,硬件即使能立刻把地址打给磁盘,磁盘也不能立即响应
(4)为什么地址转换用硬件实现
硬件实现地址转换可以加快指令的执行速度
(5)为什么页写会策略采用write back
避免频繁的慢速磁盘访问

页表结构
页表的首地址放在基址寄存器。采用基址寻址方式
每个页表项前面有一个虚页号:从0开始递增的序号。页表项又分为几个结构:
(1)装入位:该页是否在内存中
(2)修改位:该也在内存中是否被修改
(3)替换控制位:用于clock算法
(4)其他
(5)实页号(8进制)

TLB
(1)一次磁盘引用需要访问几次主存?2次,一次查页表,一次查物理地址。于是,把经常查的页表放到cache中。这种在cache页表项组成的页表称为TLB(Translation Lookside Buffer)
(2)TLB的页表结构:tag + 主存中的页表项
当采用全相连映射时,tag为页表项前面的虚页号。需要把tag和虚页号一一比较
当采用组相联映射时,tag被分为tag+index,虚页号的高位为tag,虚页号的低位为index,做组内索引(属于组内第几行)

二. 段式虚拟存储

段式存储是根据程序逻辑,给程序分段。使得每段大小不同。这种虚拟地址划分方法适合程序设计

段式存储的虚拟地址由段号和段内偏移地址组成。段式虚拟存储器到物理地址的映射通过段表实现

段式虚拟存储会造成空页

三. 段页式虚拟存储

段页式虚拟存储,先把程序按照逻辑分成段,再把每段分成固定大小的页。

程序对主存的调入调出是按照页面进行的;但他有可以根据段实现共享和保护

缺点是段页式虚拟地址转换成物理地址需要查询2个表:段表和页表。段表找到相应页表的位置,页表找到想也页的位置

段页式细腻地址的结构可以为以下形式:
程序地址: 用户号(进程pid) | 段号 | 页号 | 页内偏移地址

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxxpp.html