页表也存放在主存当中
目的就是为了完成虚页号到实页号的映射,而不去关心访问一次数据的时候访问了多少次主存
虚拟地址转换为物理地址的过程是同时访问快表和慢表的,只是访问快表的速度更快。同理在物理地址访问主存的时候是同时访问Cache和主存的,只是访问Cache的速度更快。
package com.yan.DataStructures.LinkedList;public class SingleLinkedListDemo {public static void main(String[] args){
// 测试HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨");HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟");HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头");SingleLinkedList heroList = new SingleLinkedList();heroList.add(heroNode1);heroList.add(heroNode2);heroList.add(heroNode3);heroList.add(heroNode4);heroList.list();}
}//定义一个SingleLinkedList管理英雄
class SingleLinkedList
{
// 初始化一个不需要动的头结点,不存放具体的数据private HeroNode head = new HeroNode(0, "", "");// 添加节点到单向列表public void add(HeroNode heroNode){
// head节点不能动,需要一个辅助指针tmpHeroNode tmp = head;
// 遍历链表,找到最后。退出while循环时,tmp指向了链表最后while(true){ == null)break;tmp = ;}// 将想要添加的节点放入单向链表的最后 = heroNode;}// 遍历链表public void list(){
// 判断链表是否为空 == null){System.out.println("链表为空");return;}
// 开始遍历链表,仍然使用辅助指针HeroNode tmp = head;while(true){ == null)break;System.out.);
// 注意tmp一定要后移,否则是个死循环!!tmp = ;}}
}//定义一个英雄类HeroNode
class HeroNode
{public int no;public String name;public String nickName;public HeroNode next;// 构造器public HeroNode(int heroNo, String heroName, String heroNickName){ = heroNo;this.name = heroName;this.nickName = heroNickName;}@Overridepublic String toString() {return "该英雄的英雄编号为:"+no+",该英雄的英雄名为:"+name+",该英雄的昵称为:"+nickName;}
}
// 按排名顺序添加节点,如果已经有相同的排名在链表中,则此次添加节点失败public void addByOrder(HeroNode heroNode){
// 通过辅助指针帮助找到插入节点的位置HeroNode tmp = head;
// 判断添加的节点是否存在boolean flag = false;while(true){ == null)break;// 使用节点的排名去和heroNode的排名进行比较,因为如果直接用tmp的排名比较会错过要插入的位置o > )break;else o == ){flag = true;break;}tmp = ;}
// 根据编号修改节点的信息public void update(HeroNode newHeroNode){ == null){System.out.println("链表为空,无需修改英雄信息!");return;}HeroNode tmp = head;boolean flag = false;while(true){ == null)break;o == ){flag = true;break;}tmp = ;}if(flag){ame = newHeroNode.ickName = newHeroNode.nickName;System.out.printf("您修改了编号为%d的英雄的名字为%s,昵称为%sn", , ame, ickName);}elseSystem.out.printf("您想修改的编号为%d的英雄%s不存在!n", , newHeroNode.name);}
1. Cache和主存分别使用的是什么类型的内存存储器?
Cache使用的是SRAM,主存用的是DRAM。因为SRAM是用触发器存储信息,集成度低,发热量大,存储成本高,因此用它来做小容量,高速度的Cache。DRAM用电容存储信息,信息需要刷新,集成度高,发热量小,存储成本低,因此用它来做大容量,低速度的主存。
2. 谈谈你对存储单元刷新的理解?为什么DRAM刷新的时候是一行存储单元而不是每个存储单元的进行刷新?DRAM的刷新有哪些策略?
只有DRAM需要对存储单元进行刷新,因为在电容中存储的01信息是易失的,因此需要以2ms为周期对存储单元进行刷新,所谓的刷新就是将数据从内存中取出并且再写入,因此刷新占用了一个读写周期/存取周期。由于地址线的根数的2的指数次方倍去选择主存存储单元太慢,并且刷新只是为了保证数据实时的存在,不需要选择到具体的存储单元,因此使用2^(n/2)×2^(n/2)的方式排列存储单元,并且进行行级别的多个存储单元刷新。
DRAM的刷新策略有:1.分散刷新,每次读写操作完成后就立马进行刷新,这样的话存取周期由原来的读写周期变为2倍的读取周期。2.集中刷新,在2ms内充分进行读写,最后留出存储单元行×刷新时间的时间为所有存储单元进行刷新,这样做的缺点是产生了一大部分死区,此时内存不对外开放。3.异步刷新,将刷新时间均匀的分散到需要的最大刷新时间中,结合了分散刷新和结合刷新。
3. 谈谈你对存储周期恢复时间的理解?
对于SRAM来说,在读取数据之前需要一个信号的稳定,并且在读完之后也需要一定的时间等待读取的数据稳定。而对于DRAM来说,每一个短暂的刷新时间内特定内存都不对CPU开放。这些都是内存的恢复时间。
4. 谈谈你对RAM、ROM、辅存三者之间的联系的理解?
RAM是随机内存存储器,ROM是只读内存存储器。电脑开机之后,RAM是空的,此时需要把操作系统的数据放入其中计算机才能正常工作。然而辅存只能通过I/O设备和RAM相连,所以需要一种永久存储数据、读功能强,写功能弱的内存与CPU相连,它就是ROM。通过ROM中的内存数据和地址数据可以把辅存中的OS操作系统数据放入到RAM中。
本文发布于:2024-01-30 18:20:55,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170661006121930.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |