A. 什么是多模块存储器的低位交叉编址方式低位交叉编址如何提高存储性能
3.4.2多模块交叉存储器
1.存储器的模块化组织
一个由若干个模块组成的主存储器是线性编址的。
这些地址在各模块有两种安排方式:一种是顺序方式,一种是交叉方式。
顺序方式:某个模块进行存取时,其他模块不工作,某一模块出现故障时,其他模块可以照常工作,
通过增添模块来扩充存储器容量比较方便。但各模块串行工作,存储器的带宽受到了限制。
交叉方式:地址码的低位字段经过译码选择不同的模块,而高位字段指向相应模块内的存储字。连续
地址分布在相邻的不同模块内,同一个模块内的地址都是不连续的。对连续字的成块传送可实现多模块
流水式并行存取,大大提高存储器的带宽。
2.多模块交叉存储器的基本结构
四模块交叉存储器结构框图演示
每个模块各自以等同的方式与CPU传送信息。CPU同时访问四个模块,由存储器控制部件控制它们分时
使用数据总线进行信息传递。这是一种并行存储器结构。
下面做定量分析:我们认为模块字长等于数据总线宽度,模块存取一个字的存储周期为T,总线传送周期为τ,存储器的交叉模块数为m,为了实现流水线方式存取,应当满足
T=mτ (m=T/τ称为交叉存取度)
交叉存储器要求其模块数必须大于或等于m,以保证启动某模块后经mτ时间再次启动该模块时,它的上次存取操作已经完成。这样,连续读取m 个字所需的时间为
t1=T+(m-1)τ
而顺序方式存储器连续读取m个字所需时间为t2=mT.交叉存储器的带宽确实大大提高了。
m=4的流水线方式存取示意图如下
图3.31流水线方式存取示意图
【例4】 设存储器容量为32字,字长64位,模块数m=4,分别用顺序方式和交叉方式进行组织。存储周期
T=200ns,数据总线宽度为64位,总线传送周期τ=50ns。问顺序存储器和交叉存储器的带宽各是多少?
【解】
顺序存储器和交叉存储器连续读出m=4个字的信息总量都是:
q=64位×4=256位
顺序存储器和交叉存储器连续读出4个字所需的时间分别是:
t2=mT=4×200ns=800ns=8×10-7s;
t1=T+(m-1)=200ns+30ns=350ns=35×10-7s
顺序存储器和交叉存储器的带宽分别是:
W2=q/t2=256÷(8×10-7)=32×107[位/s];
W1=q/t1=256÷(35×10-7)=73×107[位/s]
3.二模块交叉存储器举例
二模块交叉存储器方框图演示
DRAM存储器读/写周期时,在行选通信号RAS有效下输入行地址,在列选通信号CAS有效下输入列地址。
如果是读周期,此位组内容被读出;如果是写周期,将总线上数据写入此位组。刷新周期是在RAS有效下
输入刷新地址,此地址指示的一行所有存储元全部被再生。A20—A3的18位地址用于模块中256K个存储字
的选择。A2用模块选择 ,连续的存储字交错分布在两个模块上,偶地址在模块0,奇地址在模块1。
DRAM存储器需要逐行定时刷新,而且,DRAM芯片的读出是一种破坏性读出,因此在读取之后要立即按读
出信息予以充电再生。 这样,若CPU先后两次读取的存储字使用同一RAS选通信号的话,CPU在接收到第一
个存储字之后必须插入等待状态,直至前一存储字再生完毕才开始第二个存储字的读取。
无等待状态成块存取示意图演示
由于采用m=2的交叉存取度的成块传送,两个连续地址字的读取之间不必插入等待状态(零等待存取)。
B. 在微机中,若主存储器的地址编号是0000H到7FFFH,则该存储器容量为多少00000000麻烦各位帮个忙啊!
H代表的是十六进制。0000H到7FFFH一共是7FFF+1个 7FFF+1转换成十进制就是32767+1=32768Byte,1024Byte=1KB,所以也就是32KB。
地差念派址编号从80000H到BFFFFH且按字节编址的内存容量为_256_KB,若用16K×4bit的存储芯片够成该内存 ,共需_32_片。做减法运算求出内存容量:尾数-首数+1。BFFFFH-80000H+1=40000H。所以从80000H到BFFFFH有40000H个地址单元。
转换为十进制:40000H=4×164=22×(24)4=218,即28KB,也就是内存容量为256KB。若用16K×4bit的存储芯片够成该内存 ,需要(256K×2×4bit)÷(16K×4bit)=32片芯片。
(2)存储器的低地址扩展阅读
主存储器存储单元的地址和内容
主存储 器(简称主存)的基本存储单元是位,它能容纳一个二进制的0和1。整个主存由许多存储位构成,这些存储位每8位组合成一个字节,每相邻的2个字节组成一个字,相邻的两个字组成一一个双字。
为了区别这些不虚贺同的字节(或字)存储单元,每一单元都被指定一个编号,称为此单元的物理地址(简称PA)。PC机的主存是按8位字节编址的,即以字节作为最小单位。假定主存容量为1M字节,则它的最低地址为00000H,最高地址为0FFFH。
主存储器的读取规则:“ 高高州高低低”规则,即高地址对应高字节,低地址对应低字节。
C. 闲聊c/c++: 谈内存(大/小端,高/低字节,高/低地址)
c/c++和其他语言最大区别在于: 指针
指针就是内存地址,一旦明白了指针与内存地址相关的内容,那理解其他语言,就易如反掌。
而且你可以把其他语言用的更加好,更加有效率
例如java/js/objc中为什么容器中只能存储引用类型?
如果存储基本数据类型(值类型),为什么会发生效率很低的装箱拆箱行为?
而c#为什么就不会呢?
你怎么才能让不使用的内存尽快被垃圾收集器回收过去?
还有很多涉及内存相关的内容,例如堆分配,栈分配等........
根据经验:
本篇目的:
是不是感觉很绕口啊,特难理解吧!
理解大小端的关键点是明白:
很容易理解 高低地址 了吧,就是书写顺序
高低字节是:左高右低
高低地址是:左低右高
根据大端的定义:
数据的高字节 保存在 内存的低地址 中,而 数据的低字节 保存在 内存的高地址 中
则内存存储的方式是:
DC是最高字节[ 最左 ],放在内存的最低地址[ 最左 ]
FF是最低字节[ 最右 ],放在内存的最高地址[ 最右 ]
按照这个规则,很容易知道,大端在内存存储的顺序是:
DC|6E|35|FF(和rgba = 0xDC6E35FF一致的顺序)
根据小端的定义:
数据的高字节 保存在 内存的高地址 中,而 数据的低字节 保存在 内存的低地址 中
则内存存储的方式是:
DC是最高字节[ 最左 ],放在内存的最高地址[ 最右 ]
FF是最低字节[ 最右 ],放在内存的最低地址[ 最左 ]
按照这个规则,很容易知道,小端在内存存储的顺序是:
FF|35|6E|DC(和rgba = 0xDC6E35FF相反的顺序)
先字节后地址:
附:今天老师带队一起写生去 文章我昨天半夜写的
D. 请问一下:存储空间的最高端是指地址最低位还是最高位
十进制数的首地址是指最低位的地址。对于空存储器来说,它存储的第一个数据肯定是在最低位
E. 关于一个占十六位数据存储高八位与低八位是在地址的低地址还是高地址问题
这个问题依机器而已,pc通用的x86架构机器是小端机,即高位高字节低位低字节,apple的mac,IBM的一些自有架构的服务器,和大部分单片机都是大端机,即高位在低字节(符合人类阅读习惯)。这个问题你可以去网络一下“大小端”。对于你的问题:不清楚你的平台,如果你是在pc上做实验的话那么2000地址里一个是0xcc,既然你说int是2个字节那么我猜测你可能是在单片机上实验,如果是在单片机上做嵌入式的话那么很可能是0xff。对于第二个问题,可以100%的肯定是指向首地址2000的。写程序还是要自己多做实验,建议你自己写个程序试一下,可以用一个char型指针指向一个int,看它指向的内容是高位还是低位的就可以了(别忘了1和'1'的区别)。
F. 4片16K*8bit组成多少字节的存储器,新存储器地址空间为 多少(最低地址)~~多少(最高地址)
8bit就是1字节。因此总共是64K字节。地址是从0到FFFF。
G. 堆栈中的高,低地址是什么意思,属于汇编知识还是其他谢谢直白回复
堆栈是在内存中指定的一段特殊存储区,春起始单元的地址叫栈底,当前存储单元地址叫栈顶,堆栈存储区一旦指定,栈底就固定不变了,而栈顶是随入栈、出栈操作呈动态。而不同机型的堆栈设计,有两种情况:一是每入栈一个数,栈顶地址加1,每出栈一个数,栈顶地址减1,即堆栈区是由内存的低地址向高地址。另一种是每入栈一个数,栈顶地址减1,每出栈一个数,栈顶地址加1,即堆栈区是由内存的高地址向低地址。
高地址、低地址的概念是计算机领域里通用的,并非汇编知识特有。高地址、低地址是相对而言,即相对地址编码的大小而言。
H. 存储器的寻址范围怎么计算还有什么是字地址字节地址
寻址范围是由地址线的位数决定的,比如地址线有20位,则地址有2^20个。
计算机数据的基本单位是字节,即是最基本的数据单元,是从存储器的起始地址到该数据的位置。一个字包含两个字节,它的地址是低字节的地址。
I. 主存地址高位和低位怎么看
计算机中的地址指的是存储器的存储空间编址。现在一般的机器都是32位,64位的刚刚出来。32位指的是每个地址包括32个0,1二进制位,也就是能表示从0到2^31-1这个多个不同的地址。电脑中每8个bit称为一个byte。在16位时代,地址的高8位指前面8位,低8位指后门8位。32位时代已经没有这么说的了。