『壹』 計算機組成原理結構
一、計算機的組成及學習大綱
1. 計算機的組成
計算機的三大件 :CPU、內存、主板
(1)CPU,中央處理器,計算機最核心的配件,負責所有的計算。
(2)內存,你編寫的程序、運行的游戲、打開的瀏覽器都要載入到內存中才能運行,程序讀取的數據、計算的結果也都在內存中,內存的大小決定了你能載入的東西的多少。
(3)主板,存放在內存中數據需要被CPU讀取,CPU計算完成後,還要把數據寫入到內存中,然而CPU不能直接插在內存上,這就需要主板出馬了,主板上很多個插槽,CPU和內存都是插在主板上,主板的晶元組和匯流排解決了CPU和內存之間的通訊問題,晶元組控制數據傳輸的流轉,決定數據從哪裡流向哪裡,匯流排是實際數據傳輸的告訴公里,匯流排速度決定了數據的傳輸速度。
(4)輸入/輸出設備,其實有了以上三大件之後,計算機就可以跑起來了。我們日常使用的話還需要鍵盤、滑鼠、顯示器等輸入/輸出設備,而很多雲伺服器通過SSH遠程登錄就可以訪問,就不需要配顯示器、滑鼠、鍵盤這些東西,節省成本且方便維護。
(5)硬碟,有了硬碟數據才能長久的保存下來,大部分還會給自己的機器配上機箱和風扇,解決灰塵和散熱問題,不過這些也不是必須的,用紙板和電風扇替代也一樣可以用。
(6)顯卡,顯卡里有GPU圖形處理器,主要負責圖形渲染,使用圖形界面操作系統的計算機,顯卡是必不可少的。現在的主板都帶了內置的顯卡,如果想玩游戲、做圖形渲染,一般需要一張單獨的顯卡,插在主板上。
2. 馮·諾依曼體系
現代計算機的硬體基礎架構都是依賴於馮諾依曼提出的馮諾依曼體系結構,現代計算機的核心架構可以抽象為五個基礎組件:運算器、控制器、存儲器、輸入設備和輸出設備。
具體到現代計算機,運算器和控制器組成了現代計算機的CPU,存儲器對應著內存和硬碟,主板控制著CPU、內存、硬碟、輸出/輸出設備之間的通訊。
馮諾依曼體系結構也叫做存儲程序計算機,即可編程、可存儲的計算機。
任何一台計算機的任何一個部件都可以歸到運算器、控制器、存儲器、輸入設備和輸出設備中,而所有的現代計算機也都是基於這個基礎架構來設計開發的。
馮諾依曼體系結構確立了我們現代計算機的硬體基礎架構,學習計算機組成原理,就是學習和拆解馮諾依曼體系。
『貳』 關於計算機組成原理的Cache-主存地址映象問題
CPU工作速度較高,但內存存取速度相對較低,則造成CPU等待,降低處理速度,浪費CPU的能力,cache用於做cpu和內存的緩存。
Cache的工作原理是基於程序訪問的局部性(通俗說就是把經常用到的數據放在一個高速的cache裡面)。
對大量典型程序運行情況的分析結果表明,在一個較短的時間間隔內,由程序產生的地址往往集中在存儲器邏輯地址空間的很小范圍內。指令地址的分布本來就是連續的,再加上循環程序段和子程序段要重復執行多次。因此,對這些地址的訪問就自然地具有時間上集中分布的傾向。
數據分布的這種集中傾向不如指令明顯,但對數組的存儲和訪問以及工作單元的選擇都可以使存儲器地址相對集中。這種對局部范圍的存儲器地址頻繁訪問,而對此范圍以外的地址則訪問甚少的現象,就稱為程序訪問的局部性。
根據程序的局部性原理,可以在主存和CPU通用寄存器之間設置一個高速的容量相對較小的存儲器,把正在執行的指令地址附近的一部分指令或數據從主存調入這個存儲器,供CPU在一段時間內使用。這對提高程序的運行速度有很大的作用。這個介於主存和CPU之間的高速小容量存儲器稱作高速緩沖存儲器(Cache)。
系統正是依據此原理,不斷地將與當前指令集相關聯的一個不太大的後繼指令集從內存讀到Cache,然後再與CPU高速傳送,從而達到速度匹配。
CPU對存儲器進行數據請求時,通常先訪問Cache。由於局部性原理不能保證所請求的數據百分之百地在Cache中,這里便存在一個命中率。即CPU在任一時刻從Cache中可靠獲取數據的幾率。
命中率越高,正確獲取數據的可靠性就越大。一般來說,Cache的存儲容量比主存的容量小得多,但不能太小,太小會使命中率太低;也沒有必要過大,過大不僅會增加成本,而且當容量超過一定值後,命中率隨容量的增加將不會有明顯地增長。
只要Cache的空間與主存空間在一定范圍內保持適當比例的映射關系,Cache的命中率還是相當高的。
一般規定Cache與內存的空間比為4:1000,即128kB Cache可映射32MB內存;256kB Cache可映射64MB內存。在這種情況下,命中率都在90%以上。至於沒有命中的數據,CPU只好直接從內存獲取。獲取的同時,也把它拷進Cache,以備下次訪問。
『叄』 淺談主存和Cache間的地址映射
最近在學計算機架構,正好學到主存與Cache間的地址映射,記錄一下,方便以後復習回顧。
學一個東西要弄清楚這個東西有什麼用,發明它的目的是什麼。Cache和主存的地址映射則主要是為了加快CPU的處理速度,因為如果CPU每次都要從主存(如4GB)中找數據的話就太慢了,但是如果在Cache(如64K)中有對應主存的數據,這樣就很快了。下面的地址映射方式都是想判斷主存中某個數據在不在Cache中,只不過效率不同而已。
首先指明基礎單位,簡單來說,有4個基礎單位: Bit , Byte , Block , Word
其中
在主存和Cache間的地址映射過程中,都是使用 Block 作為基本單位來交換數據,因為這樣更加高效
主存和Cache有三種地址映射方式
全相連映射大概如下圖所示:
Cache和 Main Memory(MM) 都被分為一定數量的 Block ,即圖中的b(0), b(1), ...
由圖可知,Cache被分為 C/B-1 個 Block ,Main Memory被分為 M/B-1 個 Block (C是緩存大小,如64k=2^16 Bytes,同理B和M分別是 Block 和MM大小)
全相連映射方式比較簡單,其思想是MM中的任意一個Block可以存在Cache中任意一個Block中,定址方式如下圖:
BTW:Associative Memory(相聯存儲器)的列數和Cache的列數一致
例題1:
Assume that cache capacity is 64KB in a computer system, data block size is 16 bytes, main memory capacity is 4MB, fully associative mapping is used.
直接相連映射與全相連映射的不同之處在於它將MM中的Block分成了一個個Area,每個Area的大小都和Cache相同,並且每個Area中的Block只能存在Cache中對應位置的Block,例如:MM中Area0的b(0)只能存在Cache中的b(0),Area1的b(0)也只能存在Cache中的b(0),以此類推。因此它也要求MM的大小必須是Cache大小的整數倍。
Ei是Area編號,Bi是Area中的Block編號,bi是Cache中Block編號,Block Address是Block中的地址
首先,由Bi選出Directory Table中對應的Block,該Block存著Area編號,將這個編號和MM Address的Ei比較一下,相同的話就說明在Cache中找到了對應MM中的數據(Hit),然後直接把MM Address的Bi和Block Address當做Cache Address去Cache找。
例題2:
Assume that cache capacity is 64KB in a computer system, data block size is 16 bytes, main memory capacity is 4MB, direct associative mapping is used.
組相連映射的思想相當於結合了前兩種映射思想,在已經分好Area的基礎上再進一步地分Group,每個Areaz裡面有若干個Group,與直接相連映射不同的是,組相連映射要求的只是每個Group必須一一對應,而Group裡面的Block則是隨意對應(即全相連映射)
Gi是Group的編號,其餘同直接相連映射
同理,先由Gi選出Directory Table中對應的Group,再把Ei和Bi與其內容作比較,相等就說明Cache中存在MM中的數據,然後直接把Directory Table中的bi和MM Address中的Gi當成Cache Address去Cache中找數據
例題3:
Assume that cache capacity is 32KB in a computer system, data block size is 64 bytes, main memory capacity is 1MB, set associative mapping is used and the group count is 128.
最後,總結一下三種映射方式,當組相連映射中的Group數量減少到1時,組相連映射變成全相連映射,當Group數量增加到Block總數時,組相連映射變成直接相連映射。
『肆』 內存Cache直接映射、全相聯映射和組相聯映射
1. 直接映射
---- 一個內存地址能被映射到的Cache line是固定的。就如每個人的停車位是固定分配好的,可以直接找到。缺點是:因為人多車位少,很可能幾個人爭用同一個車位,導致Cache 淘汰換出頻繁 ,需要頻繁的從主存讀取數據到Cache,這個代價也較高。
2. 全相聯映射
---- 主存中的一個地址可被映射進任意cache line,問題是:當尋找一個地址是否已經被cache時,需要遍歷每一個cache line來尋找,這個代價很高。就像停車位可以大家隨便停一樣,停的時候簡單,找車的時候需要一個一個停車位的找了。
主存中任何一塊都可以映射到Cache中的任何一塊位置上。
全相聯映射方式 比較靈活 ,主存的各塊可以映射到Cache的任一塊中,Cache的利用率高,塊沖突概率低,只要淘汰Cache中的某一塊,即可調入主存的任一塊。但是,由於Cache比較電路的設計和實現比較困難,這種方式只適合於 小容量 Cache採用。
3. 組相聯映射
---- 組相聯映射實際上是直接映射和全相聯映射的折中方案,其組織結構如圖(3)所示。
主存和Cache都 分組 ,主存中一個 組內的塊數 與Cache中的 分組數 相同,組間採用直接映射,組內採用全相聯映射。也就是說,將Cache分成2^u組,每組包含2^v塊,主存塊存放到哪個組是固定的,至於存到該組哪一塊則是靈活的。即主存的某塊只能映射到Cache的特定組中的任意一塊。主存的某塊b與Cache的組k之間滿足以下關系:k=b%(2^u).
『伍』 某計算Cache採用直接映射方式,......
32位先換成4B
cache的4kB/4B=1K個字
1K字/8字=2的10次冪/2的3次冪=2的7次冪=128塊
cache一共有128塊,第222塊取餘128塊=94塊
所以主存的第222塊會映射到cache的第94塊
如果要求主存的塊數,和cache一樣,主存的塊數是128k塊
『陸』 在cache-主存映射中,字塊的大小與命中率的關 系是
開始時,塊大小很小,例如只有一個存儲單元,這時的命中率H很低。隨著塊大小的增加,由於程序的空間局部性起作用,同一塊中數據的利用率比較高,因此,Cache的命中率增加。這種增加趨勢在某一個最佳塊大小處達到最大值。在這一點以後,命中率隨著塊大小的增加反而減小。
實際上,當塊大小非常大時,進入Cache中的許多數據可能根本用不上。而且,隨著塊大小的增加,程序時間局部性的作用就會逐漸減弱。最後,當塊大小等於整個Cache的容量時,命中率將趨近於零。
『柒』 緩存與主存的直接映射怎樣簡單理解
Cache與主存之間可採取多種地址映射方式,直接映射方式是其中的一種。在這種映射方式下,主存中的每一頁只能復制到某一固定的Cache頁中。由於Cache塊(頁)的大小為16B,而Cache容量為16KB。因此,此Cache可分為1024頁。可以看到,Cache的頁內地址只需4位即可表示;而Cache的頁號需用10位二進制數來表示;在映射時,是將主存地址直接復制,現主存地址為1234E8F8(十六進制),則最低4位為Cache的頁內地址,即1000,中間10位為Cache的頁號,即1010001111。Cache的容量為16KB決定用這14位編碼即可表示。題中所需求的Cache的地址為10100011111000。
『捌』 有關操作系統原理中CACHE與主存的地址映象問題.
·地址映像
所謂映象問題是指如何確定Cache中的內容是主存中的哪一部分的拷貝,即必須應用某種函數把主存地址映象到Cache中定位,也稱地址映象。當信息按這種方式裝入Cache中後,執行程序時,應將主存地址變換為Cache地址,這個變換過程叫作地址變換。地址映象方式通常採用直接映象、全相聯映象、組相聯映象三種。
1.直接映象
每個主存地址映像到Cache中的一個指定地址的方式,稱為直接映象方式。在直接映象方式下,主存中存儲單元的數據只可調入Cache中的一個位置,如果主存中另一個存儲單元的數據也要調入該位置則將發生沖突。地址映像的方法一般是將主存空間按Cache的尺寸分區,每區內相同的塊號映像到Cache中相同的塊位置。一般地,Cache被分為2N塊,主存被分為同樣大小的2M塊,主存與Cache中塊的對應關系可用如下映像函數表示:j = i mod 2N。式中,j是Cache中的塊號,i是主存中的塊號。
直接映象是一種最簡單的地址映像方式,它的地址變換速度快,而且不涉及其他兩種映像方式中的替換策略問題。但是這種方式的塊沖突概率較高,當稱序往返訪問兩個相互沖突的塊中的數據時,Cache的命中率將急劇下降,因為這時即使Cache中有其他空閑塊,也因為固定的地址映像關系而無法應用。
2.全相聯映象
主存中的每一個字塊可映像到Cache任何一個字塊位置上,這種方式稱為全相聯映像。這種方式只有當Cache中的塊全部裝滿後才會出現塊沖突,所以塊沖突的概率低,可達到很高的Cache命中率;但實現很復雜。當訪問一個塊中的數據時,塊地址要與Cache塊表中的所有地址標記進行比較已確定是否命中。在數據塊調入時存在著一個比較復雜的替換問題,即決定將數據塊調入Cache中什麼位置,將Cache中那一塊數據調出主存。為了達到較高的速度,全部比較和替換都要用硬體實現。
3.組相聯映象
組相聯映象方式是直接映象和全相聯映象的一種折衷方案。這種方法將存儲空間分為若干組,各組之間是直接映像,而組內各塊之間則是全相聯映像。它是上述兩種映像方式的一般形式,如果組的大小為1,即Cache空間分為2N組,就變為直接映像;如果組的大小為Cache整個的尺寸,就變為了全相聯映像。組相聯方式在判斷塊命中及替換演算法上都要比全相聯方式簡單,塊沖突的概率比直接映像的低,其命中率也介於直接映像和全相聯映像方式之間。
·替換策略和一致性問題的處理方法
Cache和存儲器一樣具有兩種基本操作,即讀操作和寫操作。
當CPU發出讀操作命令時,根據它產生的主存地址分為兩種情形:一種是需要的數據已在Cache中,那麼只需直接訪問Cache,從對應單元中讀取信息到數據匯流排;另一種是需要的數據尚未裝入Cache,CPU需從主存中讀取信息的同時,Cache替換部件把該地址所在的那塊存儲內容從主存拷貝到Cache中;若Cache中相應位置已被字塊占滿,就必須去掉舊的字塊。常見的替換策略有兩種:
1.先進先出策略(FIFO)FIFO(First In First Out)策略總是把最先調入的Cache字塊替換出去,它不需要隨時記錄各個字塊的使用情況,較容易實現;缺點是經常使用的塊,如一個包含循環程序的塊也可能由於它是最早的塊而被替換掉。
2.最近最少使用策略(LRU)LRU(Least Recently Used)策略是把當前近期Cache中使用次數最少的那塊信息塊替換出去,這種替換演算法需要隨時記錄Cache中字塊的使用情況。LRU的平均命中率比FIFO高,在組相聯映像方式中,當分組容量加大時,LRU的命中率也會提高。
當CPU發出寫操作命令時,也要根據它產生的主存地址分為兩種情形:一種是不命中時,只向主存寫入信息,不必同時把這個地址單元所在的整塊內容調入Cache中;另一種是命中時,這時會遇到如何保持Cache與主存的一致性問題,通常有三種處理方式:
1.直寫式(write through)即CPU在向Cache寫入數據的同時,也把數據寫入主存以保證Cache和主存中相應單元數據的一致性,其特點是簡單可靠,但由於CPU每次更新時都要對主存寫入,速度必然受影響。
2.緩寫式(post write)即CPU在更新Cache時不直接更新主存中的數據,而是把更新的數據送入一個緩存器暫存,在適當的時候再把緩存器中的內容寫入主存。在這種方式下,CPU不必等待主存寫入而造成的時延,在一定程度上提高了速度,但由於緩存器只有有限的容量,只能鎖存一次寫入的數據,如果是連續寫入,CPU仍需要等待。
3.回寫式(write back)即CPU只向Cache寫入,並用標記加以註明,直到Cache中被寫過的塊要被進入的信息塊取代時,才一次寫入主存。這種方式考慮到寫入的往往是中間結果,每次寫入主存速度慢而且不必要。其特點是速度快,避免了不必要的冗餘寫操作,但結構上較復雜。
此外,還有一種設置不可Cache區(Non-cacheable Block)的方式,即在主存中開辟一塊區域,該區域中的數據不受Cache控制器的管理,不能調入Cache,CPU只能直接讀寫該區域的內容。由於該區域不與Cache發生關系,也就不存在數據不一致性問題。目前微機系統的BIOS設置程序大多允許用戶設置不可Cache區的首地址和大小。
『玖』 計算機組成原理-cache與主存的映射
其實查詢能力增強了,傳統的查詢,如果沒有具體的地址的話,只能順序查找,而組相連就可以根據數據計算出這個數據在哪個組,然後在順序查詢,這樣速度比較快,估計你已經學過演算法中的查找了,查找演算法中,大家最不喜歡的就是順序查找了,所以要提高速度
『拾』 cache內存的地址映射主要有幾種方式
cache內存的地址映射主要有以下三種方式:
一、直接映像:
指主存的一個字塊只能映像到Cache的一個准確確定的字塊中。
特點:主存的字塊只可以和固定的Cache字塊對應,方式直接,利用率低。
二、全相聯映像:
全相聯映射是指主存中任意一個塊都可以映射到Cache中任意一個塊的方式,也就是說,當主存中的某一塊需調入Cache時,可根據當時Cache的塊佔用或分配情況,選擇一個塊給主存塊存儲,所選的Cache塊可以是Cache中的任意一個塊。
特點:貯存中的字塊可以和Cache的任何字塊對應,利用率高,方式靈活,標記位較長,使用成本太高。
三、組相聯映像:
是對全相聯和直接映像的一種折中的處理方案。既不在主存和Cache之間實現字塊的完全隨意對應,也不在主存和Cache之間實現字塊的多對一的硬性對應,而是實現一種有限度的隨意對應。
特點:折中方案。組間全相聯,組內直接映像。集中了兩個方式的優點。成本也不太高。最常見的Cache映像方式。