CSAPP(4):儲存空間階層

來源:互聯網
上載者:User

標籤:裝置   order   jpg   部分   演算法   地方   暫停   資料流   緩衝   

儲存空間系統(memory system)是一個具有不同容量、成本和訪問時間的存放裝置的階層。

(一)存放裝置的種類

 

(二)訪問主存

讀寫操作由CPU上的匯流排介面電路發起。

根據中的資料流,對於讀操作:

1.CPU將地址A放到系統匯流排上,然後I/O橋將訊號傳遞給儲存空間匯流排;

2.主存感覺到儲存空間匯流排上的地址訊號,從儲存空間匯流排讀地址,從DRAM取出資料字,並將資料寫到儲存空間匯流排。I/O橋將訊號翻譯為系統匯流排訊號傳遞。

3.CPU感覺到系統匯流排上的資料,從匯流排上讀資料。

對於寫操作:

1.CPU將地址A放到系統匯流排上,然後I/O橋將訊號傳遞給儲存空間匯流排;主存讀出地址,等待資料到達;

2.CPU將資料字拷貝到系統匯流排

3.主存從儲存空間匯流排讀出資料字,並儲存。

這是CPU與主存之間資料傳遞的過程。如果更加細部地來看,對於主存來說,如何根據匯流排的資訊讀寫資料

 

(三)訪問磁碟

當作業系統要執行IO操作時,作業系統會發送一個命令到磁碟控制卡,讓它讀某個邏輯號。控制器上的一個韌體執行快速表尋找,將一個邏輯塊號翻譯成一個(盤面、磁軌、扇區)三元組,讀取資料放到控制器的一個緩衝區,然後拷貝到主存。

CPU使用一種稱為儲存空間映射的技術來向IO裝置發送命令。在使用儲存空間映射IO系統中,地址空間中有一塊地址是為與IO裝置通訊保留的。這樣的地址稱為IO連接埠。

根據圖示,磁碟讀:

1.第一條指令是發送一個命令字,告訴磁碟發起一個讀,同時還發送了其他參數(例如當讀完成,是否中斷CPU);第二條指令指明應當讀的邏輯塊號;第三條指令指明應該儲存磁碟扇區內容的主存地址。發起磁碟讀。

2.磁碟控制卡收到命令,將邏輯塊號翻譯為扇區地址,讀扇區內容,然後將這些內容直接傳送到主存,不需要CPU幹涉。這個過程叫做DMA傳送(direct memory access)

3.DMA傳送完成,磁碟控制卡會給CPU發送一個中斷訊號通知CPU,這會導致CPU暫停它當前正在做的工作,跳轉到一個作業系統常式。這個常式會記錄下IO已經完成,然後將控制返回CPU被中斷的地方。

 

(四)局部性

一個編寫良好的程式會展現出良好的局部性。

時間局部性:在一個良好的時間局部性的程式中,被引用過一次的儲存空間位置很可能在不遠的將來再被引用;

空間局部性:在一個良好的空間局部性的程式中,如果一個儲存空間位置被引用了一次,那麼程式很可能在不遠的將來引用附近的一個儲存空間位置。

評價程式局部性的簡單原則:

1.重複引用同一個變數的程式有良好的時間局部性;

2.對於具有步長為k的參考模式,步長越小,空間局部性越好。

3.對於取指令來說,迴圈有好的時間和空間局部性。迴圈體越小,迭代次數越多,局部性越好。

 

(五)儲存空間結構

基於兩個事實:1)不同儲存技術的訪問時間差很大,CPU和主存之間的速度差距在增大;2)良好的程式具有良好的局部性。人們想到一種組織儲存空間系統的方法:儲存空間階層。

儲存空間階層主要是依賴一個概念:緩衝。

 

(六)快取儲存空間

早期電腦系統的儲存空間階層只有三層:CPU寄存器、DRAM主儲存空間和磁碟儲存。由於CPU和主存之間的差距逐漸增大,系統設計者被迫在插入L1快取,而後又插入L2快取。

多說一點:

C與M相差有多大?就是T/E那麼大,因為緩衝很小,所以T必然很大。

同樣多的行,按S組織和按E組織有什麼差別?按S組織,可以用地址來索引,類似於數組;按E組織,使用tag來匹配,類似於map。

 

根據E的不同,快取被分為不同的類。E=1的快取稱為直接映射快取(direct-mapped cache)。E>1的稱為組相聯快取(set associative cache).

對於直接映射快取,如果不命中的話,需要將從下一層中取出新塊儲存在緩衝中。如果要替換的話,因為組中只有一行,所以直接替換即可。

由於只有組中只有一行,所以當程式訪問大小為2的冪的數組時,經常發生衝突不命中。原因如下:

組相聯快取的基本原理類似於直接映射緩衝。值得一提的是:不命中時的行替換。有隨機替換策略、最不常用替換策略、最近最少使用替換策略。所有這些策略都需要額外的時間和硬體。但是,越往儲存空間階層下面走,一次不命中的開銷越昂貴,所以用更好的替換策略更加值得。

 

上面只講了讀,如何寫呢?

在快取中更新了w的拷貝之後,怎麼更新w在階層中緊接著低一層中的拷貝呢?

1.直寫,就是立即將w的快取塊寫回到緊接著的低一層中的拷貝。

2.寫回,只有當替換演算法要驅逐更新過的塊時,才把它寫到緊接著的低一層中。那麼快取必須為每一個快取行維護一個額外的修改位,表明這個快取是否被修改過

如何處理寫不命中呢?

1.寫分配,載入相應的下一層中的塊到快取中,然後更新這個快取塊。

2.非寫分配,避開快取,直接寫到低一層。

直寫快取通常是非寫分配的,寫回快取通常是寫分配的。

 

(七)編寫局部性好的代碼

1.將你的注意力集中到內迴圈上,大部分的計算和儲存空間訪問都發生在這裡;

2.通過按照資料Object Storage Service在儲存空間中搞得順序,以步長為1的來讀資料,從而使空間局部性最大;

3.一旦從儲存空間中讀入了一個資料對象,就儘可能多的使用它,從而使得時間局部性最大

CSAPP(4):儲存空間階層

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.