现代微机的存储系统详解.ppt

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主存中各区内相同字块号的数据块都可以分别调入缓存中字块号相同的地址中,但同时只能有一个区的块存入缓存。由于主、缓存字块号相同,因此,目录表登记时,只记录调入字块的区号即可。 图所示为主存、Cache地址格式、目录表格式及地址变换规则。主存、Cache字块号及块内地址两个字段完全相同。目录表存放在相联存储器中,其中包括二部分:数据块在主存的区号和有效位。目录表的容量与Cache的字块数相同。 2) 全相联映像 全相联映像技术允许主存中每一个页面映像到Cache的任何一个页面位置上,也允许采用某种替换算法从已占满的Cache中替换出任何一个旧页面。这种方式冲突概率低,可达到很高的Cache命中率,但实现起来比较困难。 地址映象规则:主存的任意一字块可映象到Cache中的任意一字块。    (1)主存与Cache分成相同大小的字块。    (2)主存的某一字块可以装入Cache的任意一字块空间中。    图3-15示出了目录表(字块标记)的格式及地址变换规则。目录表存放在相关(联)存储器中,其中包括三部分:主存的字块号、Cache字块号、有效位(也称装入位)。由于是全相联方式,因此目录表的容量应当与Cache的字块数相同。 3)组相联映像 主存和Cache按同样大小划分成块。 主存和Cache按同样大小划分成组。 主存容量是缓存容量的整数倍,将主存空间按缓冲区的大小分成区,主存中每一区的组数与缓存的组数相同。 当主存的数据调入缓存时,主存与缓存的组号应相等,也就是各区中的某一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放, 即从主存的组到Cache的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。 例:设有8个块,分成2个组,在上述地址序列下: #include stdafx.h #include stdio.h #include wtypes.h // wtypes.h定义了WORDLONG, //DWORD,WORD等数据类型 DWORDLONG gdtr,savegdt; //下面是GDT中将创建的数据段描述符表,基地址0X00000F00, //段界限为0XFFFF,优先级为3的在内存中的可写数据段 WORD descriptor[4]= {0xFFFF, 0X0F00, 0XF200, 0X0040}; int result[10]; int main(int argc, char* argv[]) {_asm { push ebp sgdt gdtr // 将GDTR寄存器的内容读取到 //gdtr开始的6个字节中,其中 // 前两个字节给出GDT的界限值, //高4个字节给出GDT的基地址 mov ebp,dword ptr [gdtr+2] // 将gdt的基 // 地址读到EBP中 add ebp,70h // 我们选择70H偏移下的段描述 // 符(GDT中第14个描述符) lea edi,savegdt mov esi,ebp movsd // 以上4条指令保存原来在70H偏移上 movsd // 的描述符 mov edi,ebp lea esi,descriptor; movsd // 把我们的数据段描述符装入70H movsd // 偏移上 push es mov ax,0073h // 选择字为描述符偏移70H拼接上 // 低3位控制位元,其中Ti为0,表 // 示访问GDT,RPL为11,为3级优 // 先级,所以就为73H mov es,ax // ES装入选择字73H lea edi,result // 将存放输出结果的变量 //的地址放在EDI中 mov eax,1 mov ebx,1 } _asm { mov cx,10 a1: mov es:[eax],eax add eax,4 loop a1 // 上面4条指令将向物理地址 // 0X00000F00处写10个双字 } _asm { mov cx,10 a2: mov eax,es:[ebx] mov [edi],eax add ebx,4 add edi,4 loop a2 // 以上从物理地址0X00000F00 // 处依次读出10个数据存放在 // result数组中 } _asm { pop es pop ebp } printf(result=)

文档评论(0)

三沙市的姑娘 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档