问题 单项选择题

在cache一主存两级存储体系中,关于cache的叙述,错误的是 (17)

A.cache设计的主要目标是在成本允许的情况下达到较高的命中率,使存储系统具有最短的平均访问时间
B.cache设计的一个重要原则是在争取获得较快的存取速度和花费较低的存储成本之间达到合理的折中
C.除了cache容量和块的大小,地址相联方式和替换策略也会影响cache的命中率
D.在速度要求较高的场合采用直接映像,在速度要求较低的场合采用组相联或全相联

答案

参考答案:D

解析: 使用cache改善系统性能的依据是程序的局部性原理。依据局部性原理,把主存储器中访问概率高的内容存放在cache中。当CPU需要读取数据时,首先在cache中查找是否有所需内容,如果有,则直接从cache中读取;若没有,再从主存中读取该数据,然后同时送往CPU和cache。如果CPU需要访问的内容大多能在cache中找到(称为访问命中),则可以大大提高系统性能。
系统的平均存储周期与命中率有很密切的关系,命中率的提高即使很小也能带来性能上的较大改善。
在CPU发出访存请求后,存储器地址先被送到cache控制器以确定所需数据是否已在cache中,若命中则直接对cache进行访问。这个过程称为cache的地址映射。常见的映射方法有直接映射、相联映射和组相联映射。
在cache存储器产生了一次访问未命中之后,相应的数据应同时读入CPU和cache。但是在cache已存满数据后,新数据必须淘汰cache中的某些旧数据。最常用的淘汰算法有随机淘汰法、先进先出法(FIFO)和近期最少使用淘汰法(LRU)。
因为需要保证缓存在cache中的数据与主存中的内容一致,所以相对读操作而言,cache的写操作比较复杂,常用的有以下几种方法:
(1)写直达(write through)。当要写cache时,数据同时写回主存储器,有时也称为写通。
(2)写回(write back)。CPU修改cache的某一行后,相应的数据并不立即写入主存储器单元,而是在该行被从cache中淘汰时,才把数据写回到主存储器中。
(3)标记法。对cache中的每一个数据设置一个有效位。当数据进入cache后,有效位置1;而当CPU要对该数据进行修改时,只需将其写入主存储器并同时将该有效位清0。当要从cache中读取数据时需要测试其有效位:若为1则直接从cache中取数,否则从主存中取数。

填空题

阅读以下函数说明和Java代码,将应填入 (n) 处的字句写上。
[说明]
现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显示display()。
需要新增图形Circle,又已知有类XXCircle实现了所需要实现的功能:显示displayIt()。为了继承自shape以提供统一接口,又不希望从头开发代码,希望使用XXCircle。这样将XXCircle作为Circle的一个属性,即Circle的对象包含一个XXCircle对象。当一个Circle对象被实例化时,它必须实例化一个相应的XXCircle对象;当Circle对象收到的做任何事的请求都将转发给这个XXCircle对象。通过这种称为Adapter模式,Circle对象就可以通过“让XXCircle做实际工作”来表现自己的行为了。图7-1显示了各个类间的关系。以下是JAVA语言实现,能够正确编译通过。
[图7-1]
[*]
[Java代码]
//Shape.java文件
public interface Shape
public (1) void display();

//XXCircle.jave文件
public class XXCircle
public void displayIt()
//省略具体实现


//Circle.java文件
public class Circle (2) Shape
private XXCircle pcx= (3) ;
public void display()
pcx.displayIt();


//Factory.java文件
public class Factory
public (4) getShapeInstance(int type)
switch(type)
case 1:return new Line();
case 2:return new Square();
case 3:return new Circle();
default:return null;



//Main.java文件
public class Main
public static void main(String[]args)
int type=1;
Factory factory=new Factory();
Shape s;
s=factory. (5)
if(s==null)
System.out.println("Error get the instance!");
return;

s.display();
return;


单项选择题