1、内存电路结构
首先,从电路结构上看来,内存分为DRAM和SRAM,DRAM由线阵列MOS管和电容组成,其组合方式如下图:
当需要存储信息时,给G极高电平,MOS管导通,若S极是高电平,电容充电,此时便存储1;若S极是低电平,电容放电,此时便存储0;
当需要读取信息时,给G极高电平,三极管导通,在D极处集成放大器电路就能判断电容存储电荷状态,进而翻译为0/1数据。
在电路分析这门课中我们知道,在该电路中电容漏电流恒大于零,所以为了保持信息不会丢失,电路需要不停刷新给电容充电,加之电容充电时间共同造成了DRAM反应速度滞后。
SRAM正好可以弥补DRAM缺点,同样的先从其电路结构入手。
从上图注意到,一个SRAM单元由一个RS触发器,一对与门连接触发器R端和S端。
RS触发器当R=0,S=1,则Q=1;当R=1,S=0,则Q=0。
RS触发器后面紧接两个与门,且其中一个管脚相连并引出,此为保持位线;其他两个管脚一个连接非门接输入,另一个直接接输入,它们的输出分别连接到RS触发器R口和S口,此时输入称为数据线。
此时若储存数据则保持位置1,数据线置1/0,此时Q=1/0,写入结束后将保持位置0;数据便被锁存到电路中。
由于SRAM没有DRAM的电容结构,数据写入擦除都能瞬间完成;同时也可以看到SRAM的电路元件比DRAM多,成本也必然比DRAM高,这就是SRAM并没有以内存条商品形式流通市场的原因;SRAM主要应用于CPU L1与L2缓存中。得益于DRAM/SRAM简单的电路结构,使得内存条十分耐用,它的寿命只取决于内存条的MCU,一些对自己MCU自信的厂商甚至于终身保修内存条。
2、内存的作用及使用
在学习微机原理时我们知道,CPU每执行一个操作都需要数据和指令的加入,数据指令在电脑中以二进制形式存在并存储在内存中,当CPU处理时就会发送请求指令给内存MCU,MCU将内存芯片中数据读取出来通过总线发送到CPU,如下图。
为访问内存,CPU需要向MCU提供一个内存地址,还要说明是读还是写操作,根据CPU需求还要满足数据字长要求(字节Bit,字word,双字dword,四字qword),MCU将根据CPU对数据要求进行操作。
3、栈与堆
** 栈**(stack)就是程序在内存中开辟出来的一片,供程序自己使用的连续内存空间,其特点是连续,固定且私有。
可以将栈比喻为弹匣,数据比喻为子弹,数据入栈如同往弹匣压子弹,于是用PUSH形容压栈动作;出栈如同发生子弹,用POP形容出栈动作。
枪战游戏中我们需要知道弹匣里面还有多少子弹,工程师也需要了解栈的使用情况,所以,在栈中有两个指针,一个叫栈指针用ESP表示;另一个叫栈底用EBP指针表示。
如果栈指针值等于栈底值,栈为空;栈指针值大于栈底值栈中有数据。
数据多少可以通过:(ESP-EBP)/字长获知,字长取值通常有4位、8位、16位和32位,64位。
栈数据遵从先进后出原则,如压子弹一样,弹匣满的情况下第一发子弹肯定是最后装进去的。
栈有大小,当栈指针值等于栈顶值时栈满,若继续往栈中填充数据便会产生溢出(Overflow),栈溢出会产生意料之外的错误,在后续的编写操作系统能有更加深刻的体会,而现在脑中保留着栈不能溢出即可。
堆如同其名,就是存放数据的形式,形象的比喻就是空地上的沙堆,沙堆所有人都可以上去踩两脚,甚至拿一捧回去也没有关系。
同样的,堆是公用的数据存放空间,任何程序都可以存取数据,堆大小根据使用要求动态变化,使用完成后一般由系统回收。
堆栈两种数据结构在汇编学习过程中相当重要,作为开发者要时刻牢记堆栈的使用情况,并在合适时对堆栈回收,合理的利用堆栈有利于程序的简洁与高效。
在以后汇编学习中我们必然会直接面对内存获得最大自由度,以往使用的JAVA,Python由于对函数进行了多次封装,虽然说提高了代码的易读性,但同时不可否认牺牲程序的运行的效率。
学习汇编语言必须要牢记,尽可能使用合适的算法完成需求,既最小必要原理。日后写操作系统时我们也会发现,在执行的高效性和可读性中选择时,必然是高效性更加重要。
-
DRAM
+关注
关注
40文章
2303浏览量
183288 -
MOS管
+关注
关注
108文章
2392浏览量
66557 -
sram
+关注
关注
6文章
763浏览量
114629 -
内存
+关注
关注
8文章
2996浏览量
73870
发布评论请先 登录
相关推荐
评论