當前位置:首頁 » 硬碟大全 » 雙fifo緩存
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

雙fifo緩存

發布時間: 2023-07-24 21:51:40

1. fifo是什麼意思

fifo的意思:FIFO是First In/First-Out的縮寫,是先入先出的意思。由於微電子技術的飛速發展,新一代FIFO晶元容量越來越大,體積越來越小,價格越來越便宜。

作為一種新型大規模集成電路,FIFO晶元以其靈活、方便、高效的特性,逐漸在高速數據採集、高速數據處理、高速數據傳輸以及多機處理系統中得到越來越廣泛的應用。

FIFO存儲器的功能:

1、對連續的數據流進行緩存,防止在進機和存儲操作時丟失數據。

2、數據集中起來進行進棧和存儲,可避免頻繁的匯流排操作,減輕CPU的負擔。

3、允許系統進行DMA操作,提高數據的傳輸速度。這是至關重要的一點,如果不採用DMA操作,數據傳輸將達不到傳輸要求,而且大大增加CPU的負擔,無法同時完成數據的存儲工作。

2. 請問FIFO是什麼意思

FIFO( First Input First Output)簡單說就是指先進先出。由於微電子技術的飛速發展,新一代FIFO晶元容量越來越大,體積越來越小,價格越來越便宜。作為一種新型大規模集成電路,FIFO晶元以其靈

活、方便、高效的特性,逐漸在高速數據採集、高速數據處理、高速數據傳輸以及多機處理系統中得到越來越廣泛的應用。

在系統設計中,以增加數據傳輸率、處理大量數據流、匹配具有不同傳輸率的系統為目的而廣泛使用FIFO存儲器,從而提高了系統性能。FIFO存儲器是一個先入先出的雙口緩沖器,即第一個進入其

內的數據第一個被移出,其中一個存儲器的輸入口,另一個口是存儲器的輸出口。對於單片FIFO來說,主要有兩種結構:觸發導向結構和零導向傳輸結構。觸發導向傳輸結構的FIFO是由寄存器陣列

構成的,零導向傳輸結構的FIFO是由具有讀和寫地址指針的雙口RAM構成。

(2)雙fifo緩存擴展閱讀:

FIFO存儲器是系統的緩沖環節,如果沒有FIFO存儲器,整個系統就不可能正常工作,它主要有幾方面的功能:

1、對連續的數據流進行緩存,防止在進機和存儲操作時丟失數據;

2、數據集中起來進行進機和存儲,可避免頻繁的匯流排操作,減輕CPU的負擔;

3、允許系統進行DMA操作,提高數據的傳輸速度。這是至關重要的一點,如果不採用DMA操作,數據傳輸將達不到傳輸要求,而且大大增加CPU的負擔,無法同時完成數據的存儲工作。

參考資料來源:網路-FIFO存儲器

3. FIFO寫滿之後繼續寫數據,新數據會覆蓋原來的數據嗎,還是說新數據根本寫不進去直接溢出

讀不進去,新數據丟失。

手機的磁碟管理,邏輯關系跟隨了電腦的硬碟管理模式。刪除某個文件,只是刪除了文件的路徑,原來存儲的數據還原樣不動的。

如果是同步fifo深度設置成128,存100個以後再開始讀,永遠不可能出現空滿。因為寫入和讀取的速度是一樣的。兩邊時鍾也一樣,位寬也一樣怎麼可能出現空滿。

(3)雙fifo緩存擴展閱讀:

FIFO存儲器是系統的緩沖環節,如果沒有FIFO存儲器,整個系統就不可能正常工作,它主要有幾方面的功能:

1、對連續的數據流進行緩存,防止在進機和存儲操作時丟失數據;

2、數據集中起來進行進機和存儲,可避免頻繁的匯流排操作,減輕CPU的負擔;

3、允許系統進行DMA操作,提高數據的傳輸速度。這是至關重要的一點,如果不採用DMA操作,數據傳輸將達不到傳輸要求,而且大大增加CPU的負擔,無法同時完成數據的存儲工作。

4. fifo是什麼意思

FIFO存儲器是一個先入先出的雙口緩沖器,即第一個進入其內的數據第一個被移出,其中一個存儲器的輸入口,另一個口是存儲器的輸出口。

對於單片FIFO來說,主要有兩種結構:觸發導向結構和零導向傳輸結構。觸發導向傳輸結構的FIFO是由寄存器陣列構成的,零導向傳輸結構的FIFO是由具有讀和寫地址指針的雙口RAM構成。

介紹

FIFO存儲器是系統的緩沖環節,如果沒有FIFO存儲器,整個系統就不可能正常工作,它主要有幾方面的功能:

1、對連續的數據流進行緩存,防止在進機和存儲操作時丟失數據;

2、數據集中起來進行進棧和存儲,可避免頻繁的匯流排操作,減輕CPU的負擔;

3、允許系統進行DMA操作,提高數據的傳輸速度。這是至關重要的一點,如果不採用DMA操作,數據傳輸將達不到傳輸要求,而且大大增加CPU的負擔,無法同時完成數據的存儲工作。

5. Microblaze中fifo如何自動清楚緩存

操作步驟如下:
1、首先在電腦客戶端打開Microblaze軟體。
2、在右上角找到設置中心,點擊fifo設置。
3、將清理選項設定為使用後自動清除緩存即可。

6. FIFO和LRU小結

 一:FIFO演算法

     1.0,FIFO (First in First out) 先進先出(核心原則:最先進來的,最先淘汰); 其實在操作系統的設計理念中很多地方都是利用到了先進先出的思想就是因為這個原則簡單切符合人們的慣性思維,具備公平性實現起來也簡單,直接使用數據結構中的隊列即可實現

     1.1,在FIFO 中應該支持這些操作: 一,get(key),如果Cache中存在該key,則返回對應的value值,否則返回 -1; 二,set(key,value),如果Cache中存在該key,則重置value值,如果不存在則將該key插入到Cache中,若Cache已滿則淘汰最先進入Cache的數據

     1.2,那麼利用什麼數據結構來實現呢?有這一種思路, 利用一個雙向鏈表保存數據,當來了新數據之後便添加到鏈表末尾,如果Cache存滿數據,則把鏈表頭部數據刪除,然後把次年數據添加到鏈表末尾,在訪問數據的時候,如果在Cache中存在該數據的話,則返回對應的value值,否則返回 -1,如果想提高訪問效率,可以利用hashmap來保存每個key在鏈表中的位置(參考下面拓展)

     二:LRU演算法

     1.0,LRU (Least recently used) 最近最久未使用調度,其核心思想是"如果數據最近被訪問過,那麼將來被訪問的幾率也更高"; 最常見的實現是使用一個鏈表保存緩存數據,詳細演算法實現如下:

       1,新數據插入到鏈表頭部

       2,每當緩存命中(即緩存數據被訪問),則將數據移到鏈表頭部;

       3,當鏈表滿的時候,將鏈表尾部的數據丟棄

     1.1,LRU的優缺點 1.命中率,當存在熱點數據時,LRU的效率很好,但偶發性的,周期性的批量操作會導致LRU命中率急劇下降,緩存污染情況比較嚴重 2,實現相對簡單 3,命中時需要遍歷鏈表,找到命中的數據塊索引,然後需要將數據移到頭部

     2.0,LRU-K K代表最近使用的次數,因此LRU也可以認為是LRU-1,它主要是為了解決LRU演算法"緩存污染"的問題,其核心思想是將"最近使用過1次"的判斷標准擴展為"最近使用過K次"; 相比LRU要多維護一個隊列,用於記錄所有緩存數據被訪問的歷史,只有當數據的訪問次數達到K次的時候,才將數據放入緩存.當需要淘汰數據時,LRU-k會淘汰第K次訪問時間距離當前時間最大的數據.詳細實現如下:

     2.1,一,數據第一次被訪問,加入到訪問歷史列表; 二,如果數據在訪問歷史列表裡後達到K次訪問,則按照一定(FIFO, LRU)淘汰; 三,當訪問歷史隊列中的數據訪問次數達到k次後,將數據l索引從歷史隊列刪除,將數據移到緩存隊列中,並緩存此數據,緩存隊列重新按照時間排序; 四,緩存數據隊列中被再次訪問後,重新排序; 五,需要淘汰數據時,淘汰緩存隊列中排在末尾的數據(即:淘汰倒數第K次訪問離現在最久的數據)

     2.2,LRU-K具有LRU的優點,同時能夠避免LRU的缺點,實際應用中LRU-2是綜合各種因素後最優的選擇,LRU-3或者更大的K值命中率會高,但適應性差,需要大量的數據訪問才能將歷史記錄緩存或者清除掉

     2.3優缺,LRU-K降低了"緩存污染"帶來的問題,命中率比LRU要高,但LRU-K隊列是一個優先順序隊列,演算法復雜度和代價相對LRU較高,並且LRU需要記錄那些被訪問過,但是沒有達到K次也就是還沒有放入緩存的對象,因此b內存消耗會比LRU要多,當然如果數據量很大的時候,內存消耗會比較可觀

     3.0,Two queues (2Q) 演算法類似於LRU-2,不同點在於2Q將LRU-2演算法中的訪問歷史隊列(歷史隊列,還沒有緩存數據)改為一個FIFO緩存隊列,即: 2Q演算法有兩個緩存隊列,一個是FIFO隊列,一個是LRU隊列.

     3.1,當數據第一次訪問時,2Q演算法會將數據緩存在FIFO隊列裡面,當數據第二次被訪問時,則將數據從FIFO隊列移到LRU隊列裡面,兩個隊列各自按照自己的方法淘汰數據; 一,新訪問的數據插入到FIFO隊列, 二,如果數據在FIFO隊列中一直沒有被再次訪問,則最終按照FOFO規則淘汰, 三,如果數據在FIFO隊列中被再次訪問,則將數據移到LRU隊列頭部, 四,如果數據在LRU隊列再次被訪問,則將數據移到LRU隊列頭部, 五,LRU隊列淘汰末尾的數據

     3.2,可能會感覺FIFO隊列比LRU隊列短,但並不代表這是演算法的要求,實際應用中兩者比例沒有硬性要求

     3.3,2Q演算法命中率高於LRU,切需要兩個隊列,但兩個隊列本身都比較簡單,代價是FIFO和LRU代價之和; 2Q演算法和LRU-2演算法命中率類似,內存消耗也比較接近,但對於最後的緩存數據來說,2Q減少一次從原始儲存讀取數據或者計算數據的操作

     4.0,Multi Queue (MQ) 演算法根據訪問頻率將數據劃分為多個隊列,不同的隊列具有不同的訪問優先順序,其核心思想是:優先緩存訪問次數多的數據

     4.1,MQ演算法將緩存劃分為多個LRU隊列,每個隊列對應不同的訪問優先順序,訪問優先順序是根據訪問次數計算出來的,詳情: 一,新插入的數據放入Q0; 二,每個隊列按照LRU管理數據; 三,當數據訪問次數達到一定次數需要提升優先順序時將數據從當前隊列刪除,加入到高一級的隊列頭部; 四,為了防止高優先順序數據永遠不被淘汰,每個隊列淘汰數據時,將數據從緩存中刪除,將數據加入Q-history頭部; 五,需要淘汰數據時,從最低一級隊列開始按照LRU淘汰,每個隊列淘汰數據時,將數據從緩存中刪除,將數據索引加入Q-history頭部; 六,如果數據在Q-history中被重新訪問,則重新計算其優先順序,移到目標隊列的頭部; 七,Q-history按照LRU淘汰數據的索引

     4.2,MQ降低了"緩存污染"帶來的問題,命中率比LRU高,但MQ需要維護多個隊列,切需要維護每個數據的訪問時間,復雜度比較高,並且MQ需要記錄每個數據的訪問時間,需要定時掃碼所有隊列,代價也比較高

     4.3,雖然MQ的隊列看起來數量比較多,但由於所有隊列之和受限於緩存容量的大小,因此這里多個隊列長度之和和一個LRU隊列是一樣的,因此隊列掃碼性能接近

     小結: 命中率  LRU-2 > MQ(2) > 2Q > LRU ; 復雜度 LRU-2 > MQ(2) > 2Q >LRU ; 代價 LRU-2 > MQ(2) > 2Q > LRU ; 需要注意的是,命中率並不是越高越好,實際中應該根據業務需求和對數據的訪問情況進行分析選擇,LRU雖然看起來命中率低一些,切存在"緩存污染"的問題,但其簡單切代價小,實際中反而應用更多

     拓展:基於 雙鏈表的 LRU 實現: 一,傳統意義的LRU演算法是每一個Cache對象設置一個定時器,每次Cache命中則給定時器 +1,而Cache用完需要淘汰舊內容,放置新內容時就查看所有的計時器,並將使用的內容替換掉; 其弊端很明顯,如果Cache的數量少,問題不大,但如果Cache的空間過大,達到10W或者100W以上,一旦需要淘汰,則需要遍歷所有計時器,其性能與資源消耗巨大,效率也就非常的慢了; 二,雙鏈表原理,將Cache的所有位置都用雙鏈表連接起來,當一個位置被命中之後,就將通過調整鏈表的指向,將該位置調整到鏈表頭的位置,新加入Cache直接加到鏈表頭中,這樣在多次進行Cache操作後,最近被命中的就會被向鏈表頭方向移動,而沒有命中的則向鏈表後部移動,鏈表尾則表示最近最少命中的Cache,當需要替換內容時我們只需要淘汰鏈表最後的部分即可!

如果錯誤或者建議,歡迎下方留言,謝謝!