1. 程式人生 > >磁碟快取和記憶體快取的區別

磁碟快取和記憶體快取的區別

記憶體快取

快取記憶體(英語:cache,英語發音:/kæʃ/ kash [1][2][3],簡稱快取),其原始意義是指訪問速度比一般隨機存取儲存器(RAM)快的一種RAM,通常它不像系統主存那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。

原理
Cache一詞來源於1967年的一篇電子工程期刊論文。其作者將法語詞“cache”賦予“safekeeping storage”的涵義,用於電腦工程領域。

當CPU處理資料時,它會先到Cache中去尋找,如果資料因之前的操作已經讀取而被暫存其中,就不需要再從隨機存取儲存器(Main memory)中讀取資料——由於CPU的執行速度一般比主記憶體的讀取速度快,主儲存器週期(訪問主儲存器所需要的時間)為數個時鐘週期。因此若要訪問主記憶體的話,就必須等待數個CPU週期從而造成浪費。

提供“快取”的目的是為了讓資料訪問的速度適應CPU的處理速度,其基於的原理是記憶體中“程式執行與資料訪問的局域性行為”,即一定程式執行時間和空間內,被訪問的程式碼集中於一部分。為了充分發揮快取的作用,不僅依靠“暫存剛剛訪問過的資料”,還要使用硬體實現的指令預測與資料預取技術——儘可能把將要使用的資料預先從記憶體中取到快取裡。

CPU的快取曾經是用在超級計算機上的一種高階技術,不過現今電腦上使用的的AMD或Intel微處理器都在晶片內部集成了大小不等的資料快取和指令快取,通稱為L1快取(L1 Cache即Level 1 On-die Cache,第一級片上高速緩衝儲存器);而比L1更大容量的L2快取曾經被放在CPU外部(主機板或者CPU介面卡上),但是現在已經成為CPU內部的標準組件;更昂貴的CPU會配備比L2快取還要大的L3快取(level 3 On-die Cache第三級高速緩衝儲存器)。

概念的擴充
如今快取的概念已被擴充,不僅在CPU和主記憶體之間有Cache,而且在記憶體和硬碟之間也有Cache(磁碟快取),乃至在硬碟與網路之間也有某種意義上的Cache──稱為Internet臨時資料夾或網路內容快取等。凡是位於速度相差較大的兩種硬體之間,用於協調兩者資料傳輸速度差異的結構,均可稱之為Cache。

地址映象與變換
主條目:CPU快取#組相聯
由於主存容量遠大於CPU快取的容量,因此兩者之間就必須按一定的規則對應起來。地址映象就是指按某種規則把主存塊裝入快取中。地址變換是指當按某種映象方式把主存塊裝入快取後,每次訪問CPU快取時,如何把主存的實體地址(Physical address)或虛擬地址(Virtual address)變換成CPU快取的地址,從而訪問其中的資料。

快取置換策略
主條目:CPU快取#置換策略、分頁和快取檔案置換機制
主存容量遠大於CPU快取,磁碟容量遠大於主存,因此無論是哪一層次的快取都面臨一個同樣的問題:當容量有限的快取的空閒空間全部用完後,又有新的內容需要新增進快取時,如何挑選並捨棄原有的部分內容,從而騰出空間放入這些新的內容。解決這個問題的演算法有幾種,如最久未使用演算法(LRU)、先進先出演算法(FIFO)、最近最少使用演算法(LFU)、非最近使用演算法(NMRU)等,這些演算法在不同層次的快取上執行時擁有不同的效率和代價,需根據具體場合選擇最合適的一種。

磁碟快取

磁碟快取

16MB緩衝區的硬碟
磁碟快取(Disk Buffer)或磁碟快取(Disk Cache)實際上是將下載到的資料先保存於系統為軟體分配的記憶體空間中(這個記憶體空間被稱之為“記憶體池”),當儲存到記憶體池中的資料達到一個程度時,便將資料儲存到硬碟中。這樣可以減少實際的磁碟操作,有效的保護磁碟免於重複的讀寫操作而導致的損壞。

磁碟快取是為了減少CPU透過I/O讀取磁碟機的次數,提升磁碟I/O的效率,用一塊記憶體來儲存存取較頻繁的磁碟內容;因為記憶體的存取是電子動作,而磁碟的存取是I/O動作,感覺上磁碟I/O變得較為快速。

相同的技巧可用在寫入動作,我們先將欲寫入的內容放入記憶體中,等到系統有其它空閒的時間,再將這塊記憶體的資料寫入磁碟中。

大小
現在的磁碟通常有32MB或64MB快取。舊的硬碟則有8MB或16MB。

相關推薦

磁碟快取記憶體快取區別

記憶體快取 快取記憶體(英語:cache,英語發音:/kæʃ/ kash [1][2][3],簡稱快取),其原始意義是指訪問速度比一般隨機存取儲存器(RAM)快的一種RAM,通常它不像系統主存那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。 原理

Glide 快取策略 記憶體快取磁碟快取

本文主要介紹瞭如何配置和管理Glide中的快取,其中大部分內容都可以直接在官方Wiki中找到,這裡只是進行了整理和彙總。言歸正傳,Glide支援圖片的二級快取(並不是三級快取,因為從網路載入並不屬於快取),即記憶體快取和磁碟快取。 磁碟快取 一般的圖片快取指的就是磁碟快取

64.ImageLoader原始碼分析-磁碟命名圖片快取演算法

一. 前言 ImageLoader的圖片快取分成磁碟和記憶體兩種,這裡分析一下磁碟快取以及圖片檔名演算法的實現 預設是不儲存在磁碟上的,需要手動開啟開關 如下 DisplayImageOptions options = new DisplayImageOptions.Builder()

hibernate一級快取二級快取區別

                       快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。   快取的介質一般是記

Mybatis的一級快取二級快取的理解區別

一級快取基於sqlSession預設開啟,在操作資料庫時需要構造SqlSession物件,在物件中有一個HashMap用於儲存快取資料。不同的SqlSession之間的快取資料區域是互相不影響的。一級快取的作用域是SqlSession範圍的,當在同一個sqlSession中執

MyBatis (五)一級快取二級快取區別

什麼叫快取將資料存放在程式記憶體中,用於減輕資料查詢的壓力,提升讀取資料的速度,提高效能。一級快取■ 兩個級別SqlSession級別的快取,實現在同一個會話中資料的共享Statement級別的快取,可以理解為快取只對當前執行的這一個Statement有效,執行完後就會清空快

客觀面試題--30.hibernate的一級快取二級快取有什麼區別

快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。  快取的介質一般是記憶體,所以讀寫

作業系統-----快取記憶體

快取記憶體(cache)由於CPU的讀取速度比記憶體的讀取速度快,如果持續在CPU和記憶體之間一直來回不停的交換的話,那麼CPU的運轉週期就會出現了很大的浪費,所以出現了快取記憶體,提供快取的目的一般是為了讓資料訪問的速度適應CPU的處理速度,一般是使用硬體實現的指令預測與資

cpu二級快取一級快取詳解及區別(圖解)

  錯誤觀點二:處理器快取是一個整體 【圖】生產技術對快取容量大小的影響 【圖】PCB上帶快取的PentiumIII處理器   事實上最早先的CPU快取確實是個整體,而且容量也很低。英特爾公司從Pentium時代開始後就把快取進行了分類,當時整合在CPU核心中的快取已不足以滿足CPU的需求,而製造工藝上

hibernate一級快取二級快取區別與聯絡

快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。   快取的介質一般是記憶體,

一級快取二級快取區別

什麼是快取?快取是介於應用程式和物理資料來源之間,是為了降低應用程式對物理資料來源的訪問頻率,從而提高應用程式的執行效能。快取的介質一般是記憶體,所以讀寫速度很快,如果快取中存放的資料量非常大時,也會用硬碟作為快取介質,快取的實現不僅僅要考慮儲存的介質,還要考慮到管理快取的併

程序與記憶體6-快取記憶體1(每CPU頁框快取記憶體記憶體快取記憶體

首先我提幾個主題: 磁碟快取記憶體、記憶體快取記憶體、硬體快取記憶體、每cpu頁框快取記憶體、頁快取記憶體、目錄項快取記憶體、索引節點快取記憶體、轉換後援緩衝器(TLB)、哈佛結構的快取記憶體、寫緩衝器、快取記憶體一致性、L1和L2等快取記憶體在驅動的使用。 上面這些就我

hibernate中一級快取二級快取的具體區別

一、Session快取(又稱作事務快取):Hibernate內建的,不能卸除。 快取範圍:快取只能被當前Session物件訪問。快取的生命週期依賴於Session的生命週期,當Session被關閉後,快取也就結束生命週期。 Hibernate一些與一級快取相關的操作(時間點): 資料放入快取: 1. save

記憶體快取硬碟快取

由於工作中經常要處理圖片的載入快取的問題,所以需要理清系統快取的問題,否則經常會出現OOM問題。防止多圖OOM的解決技術是使用LruCache和DiskLruCache兩種技術。 一 LruCache

MyBatis一級快取二級快取詳解

一級快取   Mybatis對快取提供支援,但是在沒有配置的預設情況下,它只開啟一級快取,一級快取只是相對於同一個SqlSession而言。所以在引數和SQL完全一樣的情況下,我們使用同一個SqlSession物件呼叫一個Mapper方法,往往只執行一次SQL,因為使用SelSession第一次

springmvc快取 mybatis快取

1. 匯入相關依賴包: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId>

SpringBoot學習筆記(10)-----SpringBoot中使用Redis/Mongodb快取Ehcache快取redis快取

1. 使用Redis   在使用redis之前,首先要保證安裝或有redis的伺服器,接下就是引入redis依賴。   pom.xml檔案如下 <dependency> <groupId>org.springframework.boot</

Hibernate總結--一級快取二級快取

在Hibernate中存在一級快取和二級快取,一級快取時Session 級別的快取,它是屬於事務範圍的快取,這一級別的快取由 hibernate 管理的。一級快取Hibernate預設會實現,當使用get或者load等方式查詢時會將結果存在Session中,在下一次查詢時。若是同一個Session,

Hibernate 二級快取查詢快取

一級快取:     1,在session上面有一個一級快取;一級快取的生命週期和session相同,一級快取最大生命週期就是一個執行緒;在web環境下面,session的最大生命週期就是一次請求;     2,一級快取可以用來幹嘛? &nb

Hibernate的一級快取、二級快取查詢快取

Hibernate的Session提供了一級快取的功能,預設總是有效的,當應用程式儲存持久化實體、修改持久化實體時,Session並不會立即把這種改變提交到資料庫,而是快取在當前的Session中,除非顯示呼叫了Session的flush()方法或通過close()方法關閉Sessi