存储器是计算机系统中的记忆设备,用来存放程序和数据


缓存-主存层次主要解决CPU和主存速度不匹配的问题,速度接近缓存
主存-辅存层次主要解决存储系统的容量问题,容量接近与价位接近于主存
主存与CPU的联系

主存各存储单元的空间是由单元地址号来表示。
字地址使用该地址高位字节的地址来表示,其字地址是4的整数倍,正好用地址码的末两位来区别

高地址存高位数据
低地址存低位数据
设地址线24位
若字长8位,按字节寻址的范围是16M(2的24次方)
若字长16位,按字节寻址的范围是8M
若字32位,按字节寻址的范围是4M
主要指标是存储容量和存储速度
存储容量:存储单元个数*存储字长(注意单位,是否除以8)
存储速度,分为存取时间和存取周期
存储器带宽:频率*位数(1ns = 1MHz)

静态RAM是用触发器工作原理存储信息的,存储信息会保持原状态,不需要再生

以Intel 2144为例,1k*4(10根地址线,4根数据线)
其内部存储矩阵如下图所示

此结构将列分为4个组,每组16列,存取时,正好在每组拿一列,4位输出/输入
常见的动态RAM的基本单元电路有三管式和但管式两种,都是靠电容存储电荷原理来寄存信息。需要刷新,一般间隔2ms(一次存取)
单元电路

其中的存储的0/1与原存信息是相反的
1k*1结构示意图

单元电路

16k*1结构示意图

注:此时用了地址线的复用,先行地址,在列地址
刷新是一行一行的刷新
在2ms内选一个时间段进行刷新,会存在"死区"(不能进行任何操作)
每行都进行一次集中刷新,无"死区",但会使存取周期变长
将上述两种方法结合,在2ms内寻找完成每一行刷新需要的时间间隔,在这个间隔内做一次集中刷新
不会出现"死区"
| 动态RAM | 静态RAM | |
|---|---|---|
| 集成度 | 高 | 低 |
| 封装性 | 低 | 高 |
| 功耗 | 低 | 高 |
| 价格 | 低 | 高 |
| 速度 | 低 | 高 |
| 刷新 | 需要 | 不需要 |
位扩展是指增加字长,eg:1k * 4的芯片可以变成1k * 8的

字扩展是指增加存储器字的数量,eg:1k * 8的芯片可以变成2k * 8的

将上面两种扩展结合


基本思想:位扩展:串联(一起选用);字扩展:互斥(只用一个)
汉明码具有一位纠错能力,默认偶检验(可以改为奇检验)
汉明码 = 信息码 + 校验码
设信息码个数为n,校验码地个数为k,则要满足n + k <= 2^k - 1

从低到高位依次为,2^k(k从零开始...)
若是偶检验,使该位与其校验位的1的个数为偶数;奇检验反之
将所有位数的二进制写出,位数由校验码的个数而定,将1作为对应的标准
eg:4位信息码,3位校验码

C是校验码,b是信息码
C1的校验位:3、5、7、(9)
C2的校验位:3、6、7、(10)
C3的校验位:5、6、7
(C4的校验位:9、10)
由上述的规则来判断是哪一位的0/1出错
注:有的位置被多个校验码校验,注意检查
如下图,可以使主存宽带提高4倍,提高了单体存储器的工作速度



若存期周期位T,总线传输速率为r
低位:t = T + (n-1) * r
高位:t = n * T

Cache-主存存储空间的基本结构
CPU读取主存某字时,有命中和不命中两种
有关命中率的计算
命中率 = 命中次数/总访问次数
平均访问时间 = 命中率 * 访问Cache的时间 + 未命中率 * 访问主存的时间
访问效率 = 访问Cache的时间 / 平均访问时间 * 100%
计算主存地址时,从右往左算(2的多少次方)
每个主存块只与一个缓存块对应

字块内地址:判断字字块的存错单元的个数
Cache字块地址:判断Cache的块数
主存块标记:判断主存的块数,并减去上述两个位数的和
每个主存块与任意缓存块对应

字块内地址:判断字字块的存错单元的个数
主存块标记:判断主存的块数,并减去上述位数
主存块只与一个缓存组对应,每个主存块与对应缓存组的任意缓存块对应

字块内地址:判断字字块的存错单元的个数
组地址:判断Cache的组数
主存块标记:判断主存的块数,并减去上述两个位数的和
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at
我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject