1. cpu匯流排週期
匯流排週期,包含若干個時鐘週期,計算機是在時鐘脈衝下乙個節拍乙個節拍的工作。看下面這張圖,我們可以很好的理解為什麼要時鐘了:
這個圖我們可以認為是乙個基本的讀記憶體資料的匯流排週期:
在t1時鐘週期期間,cpu往匯流排上發位址資訊,以指出要定址的儲存單元;
在t2時鐘周期間,撤銷位址,匯流排低16位置為高阻狀態,為傳遞資料做準備;
在t3時鐘周期間,cpu將資料讀至資料匯流排上;
在t4時鐘周期間,結束這個匯流排週期;
以上過程略去了某些步驟,不過用於理解這些原理是足夠的。從以上過程看,我們就可以理解了我們cpu幹活是按時間來的,如t1時鐘週期cpu放位址到匯流排上,然後t2就去準備接收資料。在t1週期內並沒有乙個其他的標記告訴cpu t1時間放至的位址資訊已經被處理請執行下乙個動作。沒有!!整個過程中,時間本身就是標記!時間到了就去做下乙個動作吧!這就是時鐘週期的重要性。
所以我們電腦的主頻頻率還是很重要的,主頻頻率越高,那麼時鐘週期就越短,時鐘週期越短,那麼乙個如上面的讀記憶體資料的操作耗時就越少,給你的感覺就是,這個電腦的效能真不賴:)給妹子選電腦時是不是又多了乙個絕技!哈哈。。。。這個部分暫且到此按下不提。
2. 儲存體
我們都知道cpu讀物理記憶體中資料,是先在位址線上給出位址,然後從資料線上將資料取走,如下圖所示:
位址從位址線上給出,然後資料從16位資料線(db)上取走,注意:16根資料線一次取走的就是2個位元組的資料!!!所以這個儲存體稱為16位儲存體。在這種儲存體中,最小的單位就是取兩個位元組。有時我們真的只需要取乙個位元組就好。那該怎麼辦?給cpu配置8位的儲存體,配置8位的儲存體後,那我想按位元組讀取資料又該如何呢?
天才的科學家總能找到辦法,我直接看奔騰32位cpu連線儲存是如何設計的,請看下圖:
其中, d0~d31是連線到cpu對應的32根資料線上,我們這個圖中,總共有4塊記憶體接到cpu,每塊記憶體為1gb,所以總共是4gb大小。每塊儲存都是8位的儲存體,bex為選通訊號,也就是be0,be1,be2,be3分別對應的資料線位址為d7~d0,d15~d8,
d23~d16,
d31~d24。
3. 訪問儲存
通過上面的接法,cpu可以按照雙字,字,位元組訪問儲存。
3.1 按雙字訪問
按照雙字訪問儲存時,以cpu的a31~a2位址去定址雙字儲存空間,而a1,a0通過cpu內進行解碼以控制be0,be1,
be2,
be3同時選擇這四塊儲存進行資料的讀取。而且,從雙字位址(a31~a2)的角度看,位址是連續的。而每次讀取到的都是雙字,真是很巧妙的設計。
3.2 按字訪問
按字訪問時,以cpu的a31~a2位址去定址字的儲存空間,a1,a0經過cpu解碼後,控制be0,be1,be2,be3,中只同時選中兩塊相鄰的記憶體。
3.3 按位元組訪問
按位元組訪就是每次只控制be0,be1,be2,be3,使得只有乙個儲存被選中,那麼就只讀取了乙個位元組。
對於非對齊的字或者雙字需要兩個週期才能夠取得,看下表,可以自己舉個例子對照上面的接線圖看看:
4、學了就要應用
程式設計過程中#pragma pack(n),可以設定編譯器對齊位元組數,那麼cpu後端是怎麼實現的,通過本篇文章應該有更深入的了解了。
另外,我們看乙個真實世界裡的記憶體:
圖里標示為4gb的記憶體條,看見木有,有4塊物理記憶體塊!!!就是我們上面說的單個1gb的8位儲存體。
有的企業級伺服器可以插很多條記憶體,但是沒有插滿時對記憶體條的插入的插槽位置是有要求的,通過本文是不是可以可以理解大概是什麼原因了呢???
另外還有網上總是說的選擇對齊的乙個原因:不同各個硬體平台對儲存空間的處理上有很大的不同。一些平台對某些特定型別的資料只能從某些特定位址開始訪問。16位儲存體就只能從偶數字址開始讀取。
記憶體對其加速cpu訪問速度原理
記憶體對齊問題是每乙個c程式設計師都應該考慮過的問題,c編譯器的規則明確規定了對齊問題,就是乙個struct中按照最長的型別對齊,比如考慮下面的結構體 struct abc char a int b char c 在32位x86機器上它的大小是多少呢?是12,為什麼呢?因為該結構體中最長的型別是in...
處理器訪問記憶體時,CPU核 cache
圖1cpu 訪問記憶體時的硬體操作順序 cpu 訪問記憶體時的硬體操作順序,各步驟在圖中有對應的標號 1 cpu核心 圖1中的 arm 發出va 請求讀資料,tlb translation lookaside buffer 接收到該位址,那為什麼是 tlb先接收到該位址呢?因為 tlb是 mmu中的...
CPU,記憶體理解
計算機的系統框圖,嵌入式裝置也一樣。控制單元和算術運算單元組成cup,圖中的主記憶體也就是我們常講的記憶體,這個記憶體就是記憶體條。cpu 為乙個具有特定功能的晶元,裡頭含有微指令集 如果你想要讓主機進行什麼特異的功能,就得要參考這顆 cpu 是否有相關內建的微指令集才可以。上面所述的微指令集 精簡...