2021年10月25日 计组+数据结构

阅读: 评论:0

2021年10月25日 计组+数据结构

2021年10月25日 计组+数据结构

1. 虚拟存储器

 

1.1 页式虚拟存储器

页表也存放在主存当中

目的就是为了完成虚页号到实页号的映射,而不去关心访问一次数据的时候访问了多少次主存

 

1.2 段式存储器

 

1.3 段页式虚拟存储器

 

1.4 快表和整个虚拟存储器的访问过程

虚拟地址转换为物理地址的过程是同时访问快表和慢表的,只是访问快表的速度更快。同理在物理地址访问主存的时候是同时访问Cache和主存的,只是访问Cache的速度更快。

 

1.5 例题

1.6 总结 

 

2. 半导体存储器RAM

 

 

2.1 SRAM和DRAM的区别

2.2  DRAM的刷新

 

 

 

2.3 SRAM的存取周期

2.3.1 SRAM的读周期

 

2.3.2 SRAM的写周期

 

3. 半导体存储器ROM

 

 

4. 半导体存储器的总结

5.  存储系统基本概念

5.1 存储器的分类

 

 

 

5.2 存储器的性能指标

 

5.3 存储器的层次化结构

 

5.4 总结

 

6. 单链表实现增改查

6.1 节点按顺序添加到链表尾部

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;}
}

6.2 按节点的编号属性升序顺序插入节点

 

//    按排名顺序添加节点,如果已经有相同的排名在链表中,则此次添加节点失败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 = ;}

6.3 修改节点指定编号属性的数据

//    根据编号修改节点的信息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 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23