最佳答案 磁头跳转时间50*8*5=2000读取数据时间(100+20)*50=6000所以是8000ms我猜的,对不对就不知道了,^_
▲知识点:Cache与主存地址映像
Cache和主存都被分成若干个大小相等的块,每块由若干个字节组成,主存和Cache的数据交换是以块为单位,需要考虑二者地址的逻辑关系。
地址映像:把主存地址空间映像到Cache地址空间,即按某种规则把主存的块复制到Cache中。 一、全相连映像
主存中任何一个块均可以映像装入到Cache中的任何一个块的位臵上。主存地址分为块号和块内地址两部分,Cache地址也分为块号和块内地址。Cache的块内地址部分直接取自主存地址的块内地址段。主存块号和Cache块号不相同,Cache块号根据主存块号从块表中查找。Cache保存的各数据块互不相关,Cache必须对每个块和块自身的地址加以存储。当请求数据时,Cache控制器要把请求地址同所有的地址加以比较,进行确认。
特点:灵活,块冲突率低,只有在Cache中的块全部装满后才会出现冲突,Cache利用率高。但地址变换机构复杂,地址变换速度慢,成本高。 公式:
主存地址位数=块号+块内地址; Cache地址位数=块号+块内地址。 二、直接映像
把主存分成若干区,每区与Cache大小相同。区内分块,主存每个区中块的大小和Cache中块的大小相等,主存中每个区包含的块的个数与Cache中块的个数相等。任意一个主存块只能映像到Cache中唯一指定的块中,即相同块号的位臵。主存地址分为三部分:区号、块号和块内地址,Cache地址分为:块号和块内地址。直接映像方式下,数据块只能映像到Cache中唯一指定的位臵,故不存在替换算法的问题。它不同于全相连Cache,地址仅需比较一次。
特点:地址变换简单、速度快,可直接由主存地址提取出Cache地址。但不灵活,块冲突率较高,Cache空间得不到充分利用。 公式:
主存地址位数=区号+区内分块号+块内地址; Cache地址位数=块号+块内地址。 三、组相连映像
组相连映像是前两种方式的折衷。主存按Cache容量分区,每个区分为若干组,每组包含若干块。Cache也进行同样的分组和分块。主存中一个组内的块数与Cache中一个组内的块数相等。组间采用直接方式,组内采用全相连方式。组的容量=1时,即直接映像,组的容量=整个Cache的容量时,即全相连映像。Cache的存在对于程序员透明,Cache的地址变换和数据块的替换算法都采用硬件实现。 公式:
主存地址位数=区号+组号+主存块号+块内地址; Cache地址位数=组号+组内块号+块内地址。 四、主存地址和Cache地址的相关计算 &主存地址的位数A由主存容量N决定
A=log2N=区号位数+块号位数+块内地址位数
11
&Cache地址的位数B由Cache容量H决定 B=LOG2H=块号位数+块内地址位数
&区号根据Cache容量划分,区号长度=主存地址位数-Cache地址位数 &主存的块号和Cache块号的长度相同,位数K取决于Cache中能容纳的个数 J,K=LOG2J
&主存的块内地址和Cache的块内地址长度相同,位数M取决于块的容量 Q , M=LOG2Q 例题解析:
例一、容量为64块的Cache采用组相联方式映像,字块大小为128字节,每4块为一组,若主容量为4096块,且以字编址,那么主存地址为多少位,主存区号为多少位?
方法一:
分区数=主存容量/Cache容量=4096/64=64; 区内分组数=64/4=16; 组内分块数=4块/组; 块内地址=128字节; 所以根据公式:
主存地址位数=6+4+2+7=19; 主存区号=6位; 方法二:
主存地址的位数A由主存容量N决定:
A=log2N=区号位数+块号位数+块内地址位数 所以:
A=LOG2N=LOG2(4096*128)=LOG2(2^12*2^7)=LOG2(2^19)=19; &Cache地址的位数B由Cache容量H决定 B=LOG2H=块号位数+块内地址位数 所以: B=LOG2(64*128)=13. 区号的计算方法同上! 方法三:
主存地址=主存块地址+块内地址=12+7=19; 主存区号地址=主存块地址-Cache块地址=12-6=6.
例二、一个具有4KB直接相联cache的32位微处理器,主存的容量为16MB,假定该cache的块为4个32位的字。
(1)指出主存地址中区号、块号和块内地址的位数;
12
(2)求主存地址为ABCDEF(16进制)的单元在cache中的什么位臵? 分析: Cache容量:4KB 主存 容量 :16MB 映像方式 :直接映像;
把主存分成若干区,每区与Cache大小相同。区内分块,主存每个区中块的大小和Cache中块的大小相等,主存中每个区包含的块的个数与Cache中块的个数相等。任意一个主存块只能映像到Cache中唯一指定的块中,即相同块号的位臵。主存地址分为三部分:区号、块号和块内地址,Cache地址分为:块号和块内地址。
主存地址位数=区号+区内分块号+块内地址; Cache地址位数=块号+块内地址。 主存的区号:16M/4KB=2^12=12位; 主存块号 :4KB/(4*32bit)=2^8=8位;
块内地址 :4*32bit =16Byte=4个字(因为一个字为32bit)=2^2字=2位; 1) 主存容量为16MB=2^24个字节,1个32位字是由4个字节组成,所以主存字地址为22位. CACHE容量为4KB=2^12个字节,同理,CACHE字地址为10位.
CACHE的块为4个32位的字,所以块内地址为2位 在直接映象中:
CACHE地址位=块号位数+块内地址位数==>块号位数=CACHE地址位-块风地址位=10-2=8 主存地址中的区号=主存地址位数-CACHE地址位数=22-10=12位 (2)
ABCDEF=1010 1011 1100 1101 1110 1111 该存储单元在CACHE的位址为: 区号=1010 1011 1100 块号=1101 1110 块内地址=1111 在cache中的位臵:块号1101 1110 块内地址1111 数据的存储一般以\字\为单位进行。
但在计算机里我们保留对字节的寻址和编码,不管是16位,还是32位,还是64位微处理器.象第二小题主存地址为ABCDEF(16进制)这是一个24位地址码,而主存字地址为22位. 计算机只会按字进行操作,即它的传输运算,包括直接相连cache映象。 所以我们只管字,不管字节。
ABCDEF=1010 1011 1100 1101 1110 1111
在cache中的位臵:块号1101 1110 块内地址11
注:后两位为字节寻址,这里不用了。(ABCDEC,ABCDED,ABCDEE,ABCDEF这四个字节地址为同一字地址)在同一个CACHE块内地址。
2002年:
一般来说,Cache 的功能__(53)__。某 32 位计算机的 cache 容量为 16KB,cache 块的大小为 16B,若主存与 cache 的地址映射采用直接映射方式,则主存地址为 1234E8F8(十六进制)的单元装入的 cache 地址为__(54)__。在下列 cache 替换算法中,平均命中率最高的是__(55)__。
(53) A.全部由软件实现 B.全部由硬件实现 C.由硬件和软件相结合实现 D.有的计算机由硬件实现,有的计算机由软件实现
(54) A. 00 0100 0100 1101 (二进制) B. 01 0010 0011 0100 (二进制) C. 10 1000 1111 1000 (二进制) D. 11 0100 1110 1000 (二进制) (55) A.先入后出(FILO)算法 B.随机替换(RAND)算法 C.先入先出(FIFO)算法 D.近期最少使用(LRU)算法 2004年(下)
13
容量为64块的Cache采用组相联方式映像,字块大小为128个字,每4块为一组。若主存容量为4096块,且以字编址,那么主存地址应该为__(7)__位,主存区号为__(8)__位。
(7)A.16 B.17 C.18 D.19 (8)A.5 B.6 C.7 D.8 2006年(上)
高速缓存Cache与主存间采用全相联地址映像方式,高速缓存的容量为4MB,分为4块,每块1MB,主存容量为256MB。若主存读写时间为30ns,高速缓存的读写时间为3ns,平均读写时间为3.27ns,则该高速缓存的命中率为(3)%,若地址变换表如下所示,则主存地址为8888888H时,高速缓存地址为(4)H。 地址变换表 0 38H 1 88H 2 59H 3 67H
(3)A.90 B.95 C.97 D.99
(4)A.488888 B.388888 C.288888 D.188888
这3道题如果做会了,估计cache那里应该没有问题!但不幸的事我能力有限啊 有没有高人给出详细解释啊!以及做题方法!
第三章 程序设计语言
1、程序语言分低级语言和高级语言。低级语言包括机器语言和汇编语言,高级语言包括面向过程的语言和面向问题的语言。
2、程序设计语言的基本成分:数据成分、运算成分、控制成分、函数。
3、数据成分是一种程序的数据类型。数据是程序操作的对象,具有存储类别、类型、名称、作用域和生存期等属性。数据名称由用户通过标识符命名,标识符是由字母、数字和下划线组成。类型说明数据占用内存的大小和存放形式;存储类别说明数据在内存中的位置和生存期;作用域则说明可以使用数据的代码范围;生存期说明数据占用内存的时间范围。
数据类型的分类:按程序运行过程中数据能否改变,可分为常量(整型、实型、字符、符号常量);按数据的作用域范围可分为全局量和局部量。按数据组织形式的不同可分为基本类型(整型、实型、字符型、枚举型)、构造类型(数组、结构、公用)、指针类型和空类型。
运算成分:算术运算、关系运算、逻辑运算。为了确保运算结果的唯一性,运算符号规定优先级和结合性。
控制成分:指明语言允许表达的控制结构,程序员使用控制成分来构造程序中的控制逻辑。有三种控制结构:顺序、循环、选择;
函数:由函数说明和函数体组成。函数体若调用自身则称为归递调用。传值的好处是传值调用不会改变调用函数实参变量的内容。
4、机器语言是用二进制代码表示计算机直接识别和执行的机器指令的集合,特点是灵活、直接执行和速度快。缺点是繁锁、通用性差。
5、汇编语言是使用助记符表示的面向机器的计算机语言,亦称符号语言。特点是符号代替机器指令代码、灵活、简化编程过程。缺点是繁锁、通用性差。
6、汇编语言可编制系统软件和过程控制软件。占用内存少、速度快。 7、高级语言特点是通用性强、兼容性好、便于移植。
14
8、用高级语言编写的程序必须翻译成机器语言的目标程序才能执行。 9、翻译通常有两种方式:编译和解释方式。
10、编译方式指高级语言源程序由编译程序翻译生成机器语言表示的目标程序,由计算机执行目标程序,完成运算。
11、解释方式指解释程序对源程序边扫描边解释逐句输入逐句翻译,不生成目标程序。 12、Pascal、C、Fortran等均是编译方式;VB是解释方式。
13、编译程序原理是将源程序翻译成目标程序,目标程序脱离源程序执行,方便效率高,但源程序修改时要重新编译生成新目标程序,修改不方便。
14、编译程序分6个阶段:扫描程序、语法分析、语议分析、源代码程序优化、代码生成器和目标代化优化程序。
15、解释程序是边翻译边执行,效率低,不能脱离源程序、易被解密,资源利用率低,优点是灵活,可动态高速、修改源程序。
▲异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。
▲原码、反码、补码:在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负;其余n-1位为数值位,各位的值可为零或一。当真值为正时,原码、反码、补码数值位完全相同;当真值为负时,原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码的最低位加一。注意符号位不变。
▲阶码、移码、补码:一个任意实数,在计算机内部可以用指数(为整数)和尾数(为纯小数)来表示,用指数和尾数表示实数的方法称为浮点表示法。
浮点数的长度可以是32位、64位甚至更长,分阶码和尾数两部分。阶码位数越多,可表示的数的范围越大;尾数越多,所表示的数的精度越高。“移码”用来表示浮点型小数的阶码。对于正数,符号位为“1”,其余位不变,如+1110001的阶码为11110001;对于负数,符号位为“0”,其余位取反,最后加“1”,如–1110001的阶码为00001111。
移码与补码的关系是符号位互为反码,例如:X=+1011时,[X]移=11011,[X]补=01011;X=–1011时,[X]移=00101,[X]补=10101。
函数式语言主要用于座号数据处理,如微分和积分演算、数理逻辑、游戏推演以及人工智能等其他领域。逻辑式程序设计语言编程序不需要具体的解题过程,只需要给出一些必要的事实和规则。计算机利用谓词逻辑,通过推理得到求解问题的执行序列。这种语言主要用在人工智能领域,也应用在自然语言处理、数据库查询、算法等方面,尤其适合于作为专家系统的开发工具。
▲过程式语言:是根据用户指定的一列可顺序执行的运算,以表示相应的处理过程。都是些古老的语言,如FORTRAN、COBOL、PASCAL、C、Basic等。目前只有极少的底层开发、工业控制和其他专用用途才会使用。
▲面向对象语言:C#、Java、c++目前主流也就这几个,其余的向Android系统开发是基于Java语言。
▲状态标志(六个)
15