原文:模仿Linux內核kfifo實現的循環緩存

想實現個循環緩沖區 Circular Buffer ,搜了些資料多數是基於循環隊列的實現方式。使用一個變量存放緩沖區中的數據長度或者空出來一個空間來判斷緩沖區是否滿了。偶然間看到分析Linux內核的循環緩沖隊列kfifo的實現,確實極其巧妙。kfifo主要有以下特點: 保證緩沖空間的大小為 的次冪,不是的向上取整為 的次冪。 使用無符號整數保存輸入 in 和輸出 out 的位置,在輸入輸出時不對i ...

2016-11-16 16:58 2 2852 推薦指數:

查看詳情

Linux內核kfifo

一、kfifo原理 kfifo實現原理是采用循環(環形)隊列。 二、kfifo特點 1、采用環形緩沖區來實現,提供一個無邊界的字節流服務。采用環形緩沖區的好處為,當一個數據元素被用掉后,其余數據元素不需要移動其存儲位置,從而減少拷貝提高效率。 2、保證緩沖區大小 ...

Fri Sep 18 18:21:00 CST 2020 0 756
linux內核Kfifo環形隊列

1、前言   最近項目中用到一個環形緩沖區(ring buffer),代碼是由linux內核kfifo改過來的。緩沖區在文件系統中經常用到,通過緩沖區緩解cpu讀寫內存和讀寫磁盤的速度。例如一個進程A產生數據發給另外一個進程B,進程B需要對進程A傳的數據進行處理並寫入文件,如果B沒有處理 ...

Tue Nov 21 06:13:00 CST 2017 0 5549
linux內核數據結構之kfifo

1、前言   最近項目中用到一個環形緩沖區(ring buffer),代碼是由linux內核kfifo改過來的。緩沖區在文件系統中經常用到,通過緩沖區緩解cpu讀寫內存和讀寫磁盤的速度。例如一個進程A產生數據發給另外一個進程B,進程B需要對進程A傳的數據進行處理並寫入文件,如果B沒有處理 ...

Thu Dec 19 09:24:00 CST 2013 5 29596
Linux內核數據結構之kfifo詳解

本文分析的原代碼版本: 2.6.24.4 kfifo的定義文件: kernel/kfifo.c kfifo的頭文件: include/linux/kfifo.h   kfifo內核里面的一個First In First Out數據結構,它采用環形循環隊列的數據結構來實現,提供 ...

Thu Mar 21 20:29:00 CST 2019 0 1036
linux內核無鎖緩沖隊列kfifo原理

Linux kernel里面從來就不缺少簡潔,優雅和高效的代碼 比如,通過限定寫入的數據不能溢出和內存屏障實現在單線程寫單線程讀的情況下不使用鎖。因為鎖是使用在共享資源可能存在沖突的情況下。還用設置buffer緩沖區的大小為2的冪次方,以簡化求模運算,這樣求模運算就演變為 (fifo-> ...

Sat Sep 21 04:06:00 CST 2019 0 552
Linux kernel kfifo分析【轉】

轉自:https://zohead.com/archives/linux-kernel-kfifo/ 本文同步自(如瀏覽不正常請點擊跳轉):https://zohead.com/archives/linux-kernel-kfifo/ kfifoLinux kernel 中的一個 ...

Wed Jan 10 18:32:00 CST 2018 0 1017
Linux內核設計與實現》讀書筆記(十六)- 頁高速緩存和頁回寫

好久沒有更新了。。。 主要內容: 緩存簡介 頁高速緩存 頁回寫 1. 緩存簡介 在編程中,緩存是很常見也很有效的一種提高程序性能的機制。 linux內核也不例外,為了提高I/O性能,也引入了緩存機制,即將一部分磁盤上的數據緩存到內存中。 1.1 原理 ...

Fri Nov 22 02:18:00 CST 2013 5 4448
Linux-內核緩存區和write行為

《Unix環境高級編程》 應用緩沖技術能很明顯的提高系統效率。內核與外圍設備的數據交換,內核與用戶空間的數據交換都是比較費時的,使用緩沖區就是為了優化這些費時的操作。其實核心到用戶空間的操作本身是不buffer的,是由I/O庫用buffer來優化了這個操作。比如read本來從內核讀取數據時是比較 ...

Tue Aug 30 21:32:00 CST 2016 0 5250
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM