1、內(nèi)存電路結(jié)構(gòu)
首先,從電路結(jié)構(gòu)上看來,內(nèi)存分為DRAM和SRAM,DRAM由線陣列MOS管和電容組成,其組合方式如下圖:
當(dāng)需要存儲(chǔ)信息時(shí),給G極高電平,MOS管導(dǎo)通,若S極是高電平,電容充電,此時(shí)便存儲(chǔ)1;若S極是低電平,電容放電,此時(shí)便存儲(chǔ)0;
當(dāng)需要讀取信息時(shí),給G極高電平,三極管導(dǎo)通,在D極處集成放大器電路就能判斷電容存儲(chǔ)電荷狀態(tài),進(jìn)而翻譯為0/1數(shù)據(jù)。
在電路分析這門課中我們知道,在該電路中電容漏電流恒大于零,所以為了保持信息不會(huì)丟失,電路需要不停刷新給電容充電,加之電容充電時(shí)間共同造成了DRAM反應(yīng)速度滯后。
SRAM正好可以彌補(bǔ)DRAM缺點(diǎn),同樣的先從其電路結(jié)構(gòu)入手。
從上圖注意到,一個(gè)SRAM單元由一個(gè)RS觸發(fā)器,一對(duì)與門連接觸發(fā)器R端和S端。
RS觸發(fā)器當(dāng)R=0,S=1,則Q=1;當(dāng)R=1,S=0,則Q=0。
RS觸發(fā)器后面緊接兩個(gè)與門,且其中一個(gè)管腳相連并引出,此為保持位線;其他兩個(gè)管腳一個(gè)連接非門接輸入,另一個(gè)直接接輸入,它們的輸出分別連接到RS觸發(fā)器R口和S口,此時(shí)輸入稱為數(shù)據(jù)線。
此時(shí)若儲(chǔ)存數(shù)據(jù)則保持位置1,數(shù)據(jù)線置1/0,此時(shí)Q=1/0,寫入結(jié)束后將保持位置0;數(shù)據(jù)便被鎖存到電路中。
由于SRAM沒有DRAM的電容結(jié)構(gòu),數(shù)據(jù)寫入擦除都能瞬間完成;同時(shí)也可以看到SRAM的電路元件比DRAM多,成本也必然比DRAM高,這就是SRAM并沒有以內(nèi)存條商品形式流通市場(chǎng)的原因;SRAM主要應(yīng)用于CPU L1與L2緩存中。得益于DRAM/SRAM簡(jiǎn)單的電路結(jié)構(gòu),使得內(nèi)存條十分耐用,它的壽命只取決于內(nèi)存條的MCU,一些對(duì)自己MCU自信的廠商甚至于終身保修內(nèi)存條。
2、內(nèi)存的作用及使用
在學(xué)習(xí)微機(jī)原理時(shí)我們知道,CPU每執(zhí)行一個(gè)操作都需要數(shù)據(jù)和指令的加入,數(shù)據(jù)指令在電腦中以二進(jìn)制形式存在并存儲(chǔ)在內(nèi)存中,當(dāng)CPU處理時(shí)就會(huì)發(fā)送請(qǐng)求指令給內(nèi)存MCU,MCU將內(nèi)存芯片中數(shù)據(jù)讀取出來通過總線發(fā)送到CPU,如下圖。
為訪問內(nèi)存,CPU需要向MCU提供一個(gè)內(nèi)存地址,還要說明是讀還是寫操作,根據(jù)CPU需求還要滿足數(shù)據(jù)字長(zhǎng)要求(字節(jié)Bit,字word,雙字dword,四字qword),MCU將根據(jù)CPU對(duì)數(shù)據(jù)要求進(jìn)行操作。
3、棧與堆
** 棧**(stack)就是程序在內(nèi)存中開辟出來的一片,供程序自己使用的連續(xù)內(nèi)存空間,其特點(diǎn)是連續(xù),固定且私有。
可以將棧比喻為彈匣,數(shù)據(jù)比喻為子彈,數(shù)據(jù)入棧如同往彈匣壓子彈,于是用PUSH形容壓棧動(dòng)作;出棧如同發(fā)生子彈,用POP形容出棧動(dòng)作。
槍戰(zhàn)游戲中我們需要知道彈匣里面還有多少子彈,工程師也需要了解棧的使用情況,所以,在棧中有兩個(gè)指針,一個(gè)叫棧指針用ESP表示;另一個(gè)叫棧底用EBP指針表示。
如果棧指針值等于棧底值,棧為空;棧指針值大于棧底值棧中有數(shù)據(jù)。
數(shù)據(jù)多少可以通過:(ESP-EBP)/字長(zhǎng)獲知,字長(zhǎng)取值通常有4位、8位、16位和32位,64位。
棧數(shù)據(jù)遵從先進(jìn)后出原則,如壓子彈一樣,彈匣滿的情況下第一發(fā)子彈肯定是最后裝進(jìn)去的。
棧有大小,當(dāng)棧指針值等于棧頂值時(shí)棧滿,若繼續(xù)往棧中填充數(shù)據(jù)便會(huì)產(chǎn)生溢出(Overflow),棧溢出會(huì)產(chǎn)生意料之外的錯(cuò)誤,在后續(xù)的編寫操作系統(tǒng)能有更加深刻的體會(huì),而現(xiàn)在腦中保留著棧不能溢出即可。
堆如同其名,就是存放數(shù)據(jù)的形式,形象的比喻就是空地上的沙堆,沙堆所有人都可以上去踩兩腳,甚至拿一捧回去也沒有關(guān)系。
同樣的,堆是公用的數(shù)據(jù)存放空間,任何程序都可以存取數(shù)據(jù),堆大小根據(jù)使用要求動(dòng)態(tài)變化,使用完成后一般由系統(tǒng)回收。
堆棧兩種數(shù)據(jù)結(jié)構(gòu)在匯編學(xué)習(xí)過程中相當(dāng)重要,作為開發(fā)者要時(shí)刻牢記堆棧的使用情況,并在合適時(shí)對(duì)堆棧回收,合理的利用堆棧有利于程序的簡(jiǎn)潔與高效。
在以后匯編學(xué)習(xí)中我們必然會(huì)直接面對(duì)內(nèi)存獲得最大自由度,以往使用的JAVA,Python由于對(duì)函數(shù)進(jìn)行了多次封裝,雖然說提高了代碼的易讀性,但同時(shí)不可否認(rèn)犧牲程序的運(yùn)行的效率。
學(xué)習(xí)匯編語言必須要牢記,盡可能使用合適的算法完成需求,既最小必要原理。日后寫操作系統(tǒng)時(shí)我們也會(huì)發(fā)現(xiàn),在執(zhí)行的高效性和可讀性中選擇時(shí),必然是高效性更加重要。
-
DRAM
+關(guān)注
關(guān)注
40文章
2303瀏覽量
183316 -
MOS管
+關(guān)注
關(guān)注
108文章
2395瀏覽量
66597 -
sram
+關(guān)注
關(guān)注
6文章
763瀏覽量
114633 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3002瀏覽量
73885
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論