三種快取模式(Cache Pattern)
(這是一個MIT同學整理的6.004 Computation Structure的課程的筆記,內容清晰易懂,看一遍可以簡單瞭解計算機組成的基本內容,一共55頁,計劃全部譯成中文。轉載請註明出處。)
(筆記原文: https://app.box.com/s/hj73i5cnek38kpy9yw22)
儲存層次(Memory Hierarchy)
CUP和記憶體資料交換的效率不高,這是指令流水線式處理器的瓶頸之一。我們可以通過儲存層次(Memory Hierarchy)的方式來解決這個問題。這個儲存層次內有:
1、容量小的、高速的快取
2、容量較大的、慢一點記憶體
3、容量很大的、但很慢的硬碟
所以當CPU獲取一個記憶體地址A時,通常經過這些步驟:
1、檢查快取: 如果地址A儲存在快取裡(稱作Cache Hit),那麼返回這個資料,否則去第2步
2、檢查記憶體(Main Memory):如果A在主存裡,那就返回A並把它放在快取裡,否則執行第3步
3、如果A不在快取和記憶體裡,A必然在硬碟(Disk)裡。我們把A放入主存和快取,並且返回資料。
為了簡化這個結構,我們在這裡假設A不會在硬盤裡。所以如果在快取裡沒有,必在主存裡。
快取是很小而且很快的儲存單元,它儲存了儲存器的臨時備份。在6.004課程中,你可以假設一個CPU內部的Clock速率,在這樣的速率下,一次Cache Hit會在一個時間週期(Cycle)內返回Cache儲存的資料。而且一次失敗的Cache查詢後,CPU會暫停,知道資料在記憶體中被找到。如果Cache Miss的概率不是很高,那麼使用Cache可以顯著提高記憶體的平均讀取時間。
t = t(cache) + miss_rate * t(memory)
本地化(Locality)
Cache很有用,因為它利用了Locality的策略:
如果你得到了A位置的資料,你很有可能不久還要使用它。每當有一次Cache Miss,這個記憶體地址就會進入Cache,並且替代一些Cache中的很久沒用的資料。
全關聯快取(Fully Associative Cache)
一個快取包括很多條線(Cache Line)。一條Cache Line包括:
1、一個有效位(Valid Bit),用來表示這條線中的資料是否有效。
2、一個可選的狀態位(State Bit),用來表示這個資料是否被修改過(Dirty),是否是隻讀(Read-only),等等
3、一個標籤,是由記憶體地址生成的
4、以及地址對應的資料
我們將會討論3種快取,全關聯快取是其中之一。它和其他結構的區別是,全關聯快取可以把資料放在任何地方。
當一個記憶體地址送給一個全關聯記憶體時,這個地址標籤就和Cache中的所有有效線路(Valid Line)進行對比,如果tag相同,算作Cache Hit。這條線路的資料就被髮送給CPU,否則算作一次Cache Miss。
如果Cache中所有的線路都是有效的(Cache是滿的),發生了一次Cache Miss。我們就需要做一次資料替換(把得到的資料和Cache中某個資料進行替換)。替換的原則我們會在後文中提到。如果被線路有效並且被修改過(V =1,D = 1),那我們就必須把這線路中的資料寫回主存。如果沒被修改過,我們直接覆蓋這線路。
關於全關聯快取,有一些有用的等式:
Capacity = # lines * ( 1 valid bit + S status bits + T tag bits + D data bits)
在 6.004課程中,有一些特別的數值: T = 30 bits, D = 32 bits
下面這些例子展示了三次取指操作。從一個空的全關聯快取開始。每幅圖展示了Cache在圖片下方註釋內容被執行後的狀態。
直接對映快取記憶體(Direct-Mapped Cache)
直接對映快取記憶體比全關聯快取便宜。因為整個快取中只有一個標籤比較器(Tag Comparator)。這和全關聯快取器中每一條線路都有一個比較器不同。但在直接對映快取記憶體中,地址衝突是存在的,這可能會影響cache的效果。
給出一個記憶體地址後,index會選擇快取線路。如果目標TAG和快取中的Tag相等,就達成一次Cache Hit。這條快取中的資料會被髮送給CPU。
如果快取中沒有index對應的線路,我們需要去主存,主存中的資料替換了快取中的index對應的線路的資料。如果線路中的資料是有效的並且被修改過(V=1, D=1)。快取必須把那個資料寫進記憶體再扔掉。
看到這裡,我們肯定會思考,全關聯快取和直接對映快取記憶體哪個更好,這取決於資料獲取的模式(Memory Access Pattern)。不同的模式和資料替換策略(Replacement Strategy,就是發生Cache Miss後的資料替換規則)在不同的快取結構中各有千秋。
這裡是一些關於直接快取記憶體的有用的等式:
Capacity = # lines * ( 1 valid bit + S status bit + T tag bits + D data bits)
# lines = 2^(# index bits)
下面這些例子展示了四次取指操作。從一個空的直接快取記憶體開始。每幅圖展示了Cache在圖片下方註釋內容被執行後的狀態。
N路組相聯快取記憶體(Direct-Mapped Cache)
相關推薦
三種快取模式(Cache Pattern)
(這是一個MIT同學整理的6.004 Computation Structure的課程的筆記,內容清晰易懂,看一遍可以簡單瞭解計算機組成的基本內容,一共55頁,計劃全部譯成中文。轉載請註明出處。) (筆記原文: https://app.box.com/s/hj73i5cne
設計模式系列之三:工廠模式(Factory Pattern)
這是本系列的第三篇部落格,這次主要來說一下工廠模式。 基本工廠模式 簡單來說工廠模式是將工程中的相同型別物件的建立活動集中管理,一般通過反射來生成外界需要的實體類。比如Spring中的容器Bean概念,通過Spring BeanFactory來產生不同的Be
關於負載均衡的三種傳輸模式(反向代理,透傳,三角)
什麼是負載均衡(SLB) SLB(伺服器負載均衡):在多個提供相同服務的伺服器的情況下,負載均衡裝置存在虛擬服務地址,當大量客戶端從外部訪問虛擬服務IP地址時,負載均衡裝置將這些報文請求根據負載均衡演算法,將流量均衡的分配給後臺伺服器以平衡各個伺服器的負載壓力,避免在還有伺服器
Java的三種代理模式(轉載)
Java的三種代理模式 1.代理模式 代理(Proxy)是一種設計模式,提供了對目標物件另外的訪問方式;即通過代理物件訪問目標物件.這樣做的好處是:可以在目標物件實現的基礎上,增強額外的功能操作,即擴充套件目標物件的功能. 這裡使用到程式設計中的一個思想:不要隨意去修改別人已經寫好的程式碼或
設計模式之(三)——裝飾者模式(Decorator Pattern)
裝飾者模式:動態將責任附加到物件上,要拓展功能,提供了比繼承更有彈性的方案。 很多文章也是拿了書上的例子來講,同時寫到,有的調料裝飾者都必須實現 getDescription() 大家可以先考慮下,稍後我們會說。最後都是沒說,還有思考的
設計模式之建造者模式(Builder Pattern)(三)
通過靜態內部類等方式實現的零件無序話構造 程式碼 1.User public class User { private String name; private int age; private String address; public String
Tomcat Connector三種執行模式(BIO, NIO, APR)的比較和優化
Java Blocking Connector Java Nio Blocking Connector APR/native Connector BIO NIO
計算機網路的三種通訊模式(單播,廣播,組播)小結
1.單播(Unicast) 單播在傳送者和每一接收者之間實現點對點網路連線。 如果一臺傳送者同時給多個的接收者傳輸相同 的資料,也必須相應的複製多份的相同資料包。如果有大量主機希望獲得資料包的同一份拷貝時, 將 導致傳送者負擔沉重、延遲長、網路擁塞;為保證一定
hadoop初識之三:搭建hadoop環境(配置HDFS,Yarn及mapreduce 執行在yarn)上及三種執行模式(本地模式,偽分散式和分散式介)
--===============安裝jdk(解壓版)================== --root 使用者登入 --建立檔案層級目錄 /opt下分別 建 modules/softwares/datas/tools 資料夾 --檢視是否安裝jdk rpm -
二十三種設計模式[21] - 策略模式(Strategy Pattern)
vat tle 新的 auto 避免 play 可能 https 相互 前言 策略模式,對象行為型模式的一種。在《設計模式 - 可復用的面向對象軟件》一書中將之描述為“ 定義一些列的算法,把它們一個個封裝起來,並且使它們可相互替換。使得算法可以獨立於使用它的客戶
靜態時序分析的三種分析模式(簡述)
經過跟行業前輩的探討和參考一些書籍,本文中的“個人理解”部分有誤,即: (個人理解:)在一個庫中,儘管電路器件單元已經被綜合對映,但是工具可以通過改變周圍的環境來得到不同的單元延時,所以即使是同一個庫,呼叫工藝引數不一樣的情況下,其單元延時是不同的,因此就有了最快路徑和最慢路徑。 (這裡有誤)。
【23種設計模式】之 組合模式(Composite Pattern)
需求: (1)需要某種樹形結構,可以容納選單、子選單和選單項 (2)需要確定能夠在每個選單的各個項之間遊走,而且至少要像現在用迭代器一樣方便。 (3)需要能夠更有彈性地在選單
計算機網路三種通訊模式(單播、廣播、組播)小結
1、單播定義:單播在傳送者和每一接收者之間實現點對點網路連線。如果一臺傳送者同時給多個接收者傳輸相同的資料,也必須相應的複製多份的相同資料包。如果有大量主機希望獲得資料包的同一份拷貝時,將導致傳送者負擔沉重、延遲長、網路擁塞,為保證一定的服務質量需增加硬體和頻寬。單播優點:1
Unity遊戲設計模式(三)原型模式(Prototype Pattern)
原型模式,顧名思義就是通過物件的原型克隆而產生的新的物件。原型模式在遊戲中運用非常多。怪物,一張地圖上有許許多多的怪物,這些怪物一般都具有共通性,同一種怪物就有可能擁有同樣的模型,同樣的攻擊方式等。即使是不同型別的怪物他們也擁有許多共通性,例如都擁有攻擊力,
設計模式-三種工廠模式-(附Java原始碼)
建議結合示例原始碼理解 1 簡單工廠模式 簡單工廠模式(Simple Factory Pattern):定義一個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態(
二十三種設計模式[23] - 訪問者模式(Visitor Pattern)
htm 訪問者模式 單一職責 script truct width string void sig 前言 訪問者模式,是一種將數據的結構與其操作分離的類行為型模式。它能夠幫助我們解決數據結構穩定但數據操作多變的問題,使我們可以很容易的增加或修改數據的操作。
AOP的三種程式設計模式(第三種)
註解完成AOP程式設計applicationContext.xml檔案<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/be
ADF VO排序及VO的三種查詢模式(轉)
常規應用中,當需要使用Table向終端使用者展示資料時,Table中資料的顯示排序一致性極大程度的影響到了客戶體驗。通常希望諸如多次查詢結果顯示順序相同、插入資料在原資料上方等的實現。ADF為開發人員提供了兩種級別的排序,即資料庫級別的排序及記憶體級別(In-Memory
設計模式之 - 模板模式(Template Pattern)
process egg lec pass jdbcutils ima tint new sta 引入:這幾天在看一本講spring源碼的書《SPRING技術內幕》裏面在講加載配置文件的時候,可以有不同的加載方式,如根據文件系統目錄加載配置文件(FileSystemXmlAp
thinkphp5 三種重定向(跳轉)
scrip names 成功 三種 line hist server -s 需要 頁面跳轉 在應用開發中,經常會遇到一些帶有提示信息的跳轉頁面,例如操作成功或者操作錯誤頁面,並且自動跳轉到另外一個目標頁面。系統的\think\Controller類內置了兩個跳轉方法succ