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文章
2311瀏覽量
183451 -
MOS管
+關注
關注
108文章
2411瀏覽量
66773 -
sram
+關注
關注
6文章
767瀏覽量
114677 -
內存
+關注
關注
8文章
3020瀏覽量
74013
發布評論請先 登錄
相關推薦
評論